Fix CefBrowser::GetMainFrame assumptions in the renderer process (see issue #2421)
ClientAppRenderer::Delegate callbacks are executed for all tests. In this case CorsTest.IframeAllowScriptsCustomNonStandardSchemeToServer was crashing on Linux because CefBrowser::GetMainFrame() returns nullptr in the renderer process when called from a cross-origin sub-frame.
This commit is contained in:
parent
9353f9b28b
commit
ba46b8c53e
|
@ -33,7 +33,7 @@
|
||||||
// by hand. See the translator.README.txt file in the tools directory for
|
// by hand. See the translator.README.txt file in the tools directory for
|
||||||
// more information.
|
// more information.
|
||||||
//
|
//
|
||||||
// $hash=bb01bd8418e5fb715a7a6bd53e962e11a0d04993$
|
// $hash=6e192c6e8a59c37e98e458578a287dd36b8ed90f$
|
||||||
//
|
//
|
||||||
|
|
||||||
#ifndef CEF_INCLUDE_CAPI_CEF_BROWSER_CAPI_H_
|
#ifndef CEF_INCLUDE_CAPI_CEF_BROWSER_CAPI_H_
|
||||||
|
@ -147,8 +147,10 @@ typedef struct _cef_browser_t {
|
||||||
///
|
///
|
||||||
// Returns the main (top-level) frame for the browser. In the browser process
|
// Returns the main (top-level) frame for the browser. In the browser process
|
||||||
// this will return a valid object until after
|
// this will return a valid object until after
|
||||||
// cef_life_span_handler_t::OnBeforeClose is called. The main frame object
|
// cef_life_span_handler_t::OnBeforeClose is called. In the renderer process
|
||||||
// will change during cross-origin navigation or re-navigation after renderer
|
// this will return NULL if the main frame is hosted in a different renderer
|
||||||
|
// process (e.g. for cross-origin sub-frames). The main frame object will
|
||||||
|
// change during cross-origin navigation or re-navigation after renderer
|
||||||
// process termination (due to crashes, etc).
|
// process termination (due to crashes, etc).
|
||||||
///
|
///
|
||||||
struct _cef_frame_t*(CEF_CALLBACK* get_main_frame)(
|
struct _cef_frame_t*(CEF_CALLBACK* get_main_frame)(
|
||||||
|
|
|
@ -151,7 +151,9 @@ class CefBrowser : public virtual CefBaseRefCounted {
|
||||||
///
|
///
|
||||||
// Returns the main (top-level) frame for the browser. In the browser process
|
// Returns the main (top-level) frame for the browser. In the browser process
|
||||||
// this will return a valid object until after
|
// this will return a valid object until after
|
||||||
// CefLifeSpanHandler::OnBeforeClose is called. The main frame object will
|
// CefLifeSpanHandler::OnBeforeClose is called. In the renderer process this
|
||||||
|
// will return NULL if the main frame is hosted in a different renderer
|
||||||
|
// process (e.g. for cross-origin sub-frames). The main frame object will
|
||||||
// change during cross-origin navigation or re-navigation after renderer
|
// change during cross-origin navigation or re-navigation after renderer
|
||||||
// process termination (due to crashes, etc).
|
// process termination (due to crashes, etc).
|
||||||
///
|
///
|
||||||
|
|
|
@ -163,7 +163,7 @@ class MRRenderDelegate : public ClientAppRenderer::Delegate {
|
||||||
CefRefPtr<CefFrame> frame,
|
CefRefPtr<CefFrame> frame,
|
||||||
CefProcessId source_process,
|
CefProcessId source_process,
|
||||||
CefRefPtr<CefProcessMessage> message) override {
|
CefRefPtr<CefProcessMessage> message) override {
|
||||||
const std::string& url = browser->GetMainFrame()->GetURL();
|
const std::string& url = frame->GetURL();
|
||||||
if (url.find(kTestDomainRoot) != 0)
|
if (url.find(kTestDomainRoot) != 0)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue