- Don't load URLs twice for popup windows (issue #215).

- Make the |url| parameter to HandleBeforeCreated constant (issue #215).

git-svn-id: https://chromiumembedded.googlecode.com/svn/trunk@227 5089003a-bbd8-11dd-ad1f-f1f9622dbc98
This commit is contained in:
Marshall Greenblatt 2011-05-10 13:55:06 +00:00
parent 5923d34661
commit 2669a3b6c3
11 changed files with 19 additions and 20 deletions

View File

@ -728,7 +728,7 @@ public:
CefWindowInfo& windowInfo, bool popup, CefWindowInfo& windowInfo, bool popup,
const CefPopupFeatures& popupFeatures, const CefPopupFeatures& popupFeatures,
CefRefPtr<CefHandler>& handler, CefRefPtr<CefHandler>& handler,
CefString& url, const CefString& url,
CefBrowserSettings& settings) =0; CefBrowserSettings& settings) =0;
// Called on the UI thread after a new window is created. The return value is // Called on the UI thread after a new window is created. The return value is

View File

@ -576,7 +576,7 @@ typedef struct _cef_handler_t
struct _cef_handler_t* self, struct _cef_browser_t* parentBrowser, struct _cef_handler_t* self, struct _cef_browser_t* parentBrowser,
struct _cef_window_info_t* windowInfo, int popup, struct _cef_window_info_t* windowInfo, int popup,
const struct _cef_popup_features_t* popupFeatures, const struct _cef_popup_features_t* popupFeatures,
struct _cef_handler_t** handler, cef_string_t* url, struct _cef_handler_t** handler, const cef_string_t* url,
struct _cef_browser_settings_t* settings); struct _cef_browser_settings_t* settings);
// Called on the UI thread after a new window is created. The return value is // Called on the UI thread after a new window is created. The return value is

View File

@ -128,7 +128,6 @@ CefRefPtr<CefBrowser> CefBrowser::CreateBrowserSync(CefWindowInfo& windowInfo,
return NULL; return NULL;
} }
CefString newUrl = url;
CefRefPtr<CefBrowser> alternateBrowser; CefRefPtr<CefBrowser> alternateBrowser;
CefBrowserSettings settings(_Context->browser_defaults()); CefBrowserSettings settings(_Context->browser_defaults());
@ -137,14 +136,14 @@ CefRefPtr<CefBrowser> CefBrowser::CreateBrowserSync(CefWindowInfo& windowInfo,
// Give the handler an opportunity to modify window attributes, handler, // Give the handler an opportunity to modify window attributes, handler,
// or cancel the window creation. // or cancel the window creation.
CefHandler::RetVal rv = handler->HandleBeforeCreated(NULL, windowInfo, CefHandler::RetVal rv = handler->HandleBeforeCreated(NULL, windowInfo,
popup, CefPopupFeatures(), handler, newUrl, settings); popup, CefPopupFeatures(), handler, url, settings);
if(rv == RV_HANDLED) if(rv == RV_HANDLED)
return false; return false;
} }
CefRefPtr<CefBrowser> browser( CefRefPtr<CefBrowser> browser(
new CefBrowserImpl(windowInfo, settings, popup, handler)); new CefBrowserImpl(windowInfo, settings, popup, handler));
static_cast<CefBrowserImpl*>(browser.get())->UIT_CreateBrowser(newUrl); static_cast<CefBrowserImpl*>(browser.get())->UIT_CreateBrowser(url);
return browser; return browser;
} }
@ -1054,7 +1053,6 @@ CefRefPtr<CefBrowserImpl> CefBrowserImpl::UIT_CreatePopupWindow(
info.m_nHeight = features.height; info.m_nHeight = features.height;
CefRefPtr<CefHandler> handler = handler_; CefRefPtr<CefHandler> handler = handler_;
CefString newUrl = url;
// Start with the current browser window's settings. // Start with the current browser window's settings.
CefBrowserSettings settings(settings_); CefBrowserSettings settings(settings_);
@ -1064,14 +1062,16 @@ CefRefPtr<CefBrowserImpl> CefBrowserImpl::UIT_CreatePopupWindow(
// Give the handler an opportunity to modify window attributes, handler, // Give the handler an opportunity to modify window attributes, handler,
// or cancel the window creation. // or cancel the window creation.
CefHandler::RetVal rv = handler_->HandleBeforeCreated(this, info, true, CefHandler::RetVal rv = handler_->HandleBeforeCreated(this, info, true,
features, handler, newUrl, settings); features, handler, url, settings);
if(rv == RV_HANDLED) if(rv == RV_HANDLED)
return NULL; return NULL;
} }
CefRefPtr<CefBrowserImpl> browser( CefRefPtr<CefBrowserImpl> browser(
new CefBrowserImpl(info, settings, true, handler)); new CefBrowserImpl(info, settings, true, handler));
browser->UIT_CreateBrowser(newUrl); // Don't pass the URL to UIT_CreateBrowser for popup windows or the URL will
// be loaded twice.
browser->UIT_CreateBrowser(CefString());
return browser; return browser;
} }

View File

@ -26,7 +26,7 @@ enum cef_retval_t CEF_CALLBACK handler_handle_before_created(
struct _cef_handler_t* self, cef_browser_t* parentBrowser, struct _cef_handler_t* self, cef_browser_t* parentBrowser,
cef_window_info_t* windowInfo, int popup, cef_window_info_t* windowInfo, int popup,
const struct _cef_popup_features_t* popupFeatures, const struct _cef_popup_features_t* popupFeatures,
struct _cef_handler_t** handler, cef_string_t* url, struct _cef_handler_t** handler, const cef_string_t* url,
struct _cef_browser_settings_t* settings) struct _cef_browser_settings_t* settings)
{ {
DCHECK(self); DCHECK(self);
@ -56,12 +56,11 @@ enum cef_retval_t CEF_CALLBACK handler_handle_before_created(
if(parentBrowser) if(parentBrowser)
browserPtr = CefBrowserCToCpp::Wrap(parentBrowser); browserPtr = CefBrowserCToCpp::Wrap(parentBrowser);
CefString urlStr(url);
enum cef_retval_t rv = CefHandlerCppToC::Get(self)->HandleBeforeCreated( enum cef_retval_t rv = CefHandlerCppToC::Get(self)->HandleBeforeCreated(
browserPtr, wndInfo, popup?true:false, features, handlerPtr, browserPtr, wndInfo, popup?true:false, features, handlerPtr,
urlStr, browserSettings); CefString(url), browserSettings);
if(handlerPtr.get() != origHandler) { if(handlerPtr.get() != origHandler) {
// The handler has been changed. // The handler has been changed.
*handler = CefHandlerCppToC::Wrap(handlerPtr); *handler = CefHandlerCppToC::Wrap(handlerPtr);
} }

View File

@ -25,7 +25,7 @@
CefHandler::RetVal CefHandlerCToCpp::HandleBeforeCreated( CefHandler::RetVal CefHandlerCToCpp::HandleBeforeCreated(
CefRefPtr<CefBrowser> parentBrowser, CefWindowInfo& windowInfo, bool popup, CefRefPtr<CefBrowser> parentBrowser, CefWindowInfo& windowInfo, bool popup,
const CefPopupFeatures& popupFeatures, CefRefPtr<CefHandler>& handler, const CefPopupFeatures& popupFeatures, CefRefPtr<CefHandler>& handler,
CefString& url, CefBrowserSettings& settings) const CefString& url, CefBrowserSettings& settings)
{ {
if(CEF_MEMBER_MISSING(struct_, handle_before_created)) if(CEF_MEMBER_MISSING(struct_, handle_before_created))
return RV_CONTINUE; return RV_CONTINUE;
@ -41,7 +41,7 @@ CefHandler::RetVal CefHandlerCToCpp::HandleBeforeCreated(
cef_retval_t rv = struct_->handle_before_created(struct_, cef_retval_t rv = struct_->handle_before_created(struct_,
browserStruct, &windowInfo, popup, &popupFeatures, &handlerStruct, browserStruct, &windowInfo, popup, &popupFeatures, &handlerStruct,
url.GetWritableStruct(), &settings); url.GetStruct(), &settings);
if(handlerStruct && handlerStruct != origHandlerStruct) { if(handlerStruct && handlerStruct != origHandlerStruct) {
// The handler was changed. // The handler was changed.

View File

@ -34,7 +34,7 @@ public:
virtual RetVal HandleBeforeCreated(CefRefPtr<CefBrowser> parentBrowser, virtual RetVal HandleBeforeCreated(CefRefPtr<CefBrowser> parentBrowser,
CefWindowInfo& windowInfo, bool popup, CefWindowInfo& windowInfo, bool popup,
const CefPopupFeatures& popupFeatures, CefRefPtr<CefHandler>& handler, const CefPopupFeatures& popupFeatures, CefRefPtr<CefHandler>& handler,
CefString& url, CefBrowserSettings& settings); const CefString& url, CefBrowserSettings& settings);
virtual RetVal HandleAfterCreated(CefRefPtr<CefBrowser> browser); virtual RetVal HandleAfterCreated(CefRefPtr<CefBrowser> browser);
virtual RetVal HandleAddressChange(CefRefPtr<CefBrowser> browser, virtual RetVal HandleAddressChange(CefRefPtr<CefBrowser> browser,
CefRefPtr<CefFrame> frame, const CefString& url); CefRefPtr<CefFrame> frame, const CefString& url);

View File

@ -50,7 +50,7 @@ public:
CefWindowInfo& createInfo, bool popup, CefWindowInfo& createInfo, bool popup,
const CefPopupFeatures& popupFeatures, const CefPopupFeatures& popupFeatures,
CefRefPtr<CefHandler>& handler, CefRefPtr<CefHandler>& handler,
CefString& url, const CefString& url,
CefBrowserSettings& settings); CefBrowserSettings& settings);
// Called on the UI thread after a new window is created. The return value is // Called on the UI thread after a new window is created. The return value is

View File

@ -484,7 +484,7 @@ int main(int argc, char* argv[])
CefHandler::RetVal ClientHandler::HandleBeforeCreated( CefHandler::RetVal ClientHandler::HandleBeforeCreated(
CefRefPtr<CefBrowser> parentBrowser, CefWindowInfo& createInfo, bool popup, CefRefPtr<CefBrowser> parentBrowser, CefWindowInfo& createInfo, bool popup,
const CefPopupFeatures& popupFeatures, CefRefPtr<CefHandler>& handler, const CefPopupFeatures& popupFeatures, CefRefPtr<CefHandler>& handler,
CefString& url, CefBrowserSettings& settings) const CefString& url, CefBrowserSettings& settings)
{ {
REQUIRE_UI_THREAD(); REQUIRE_UI_THREAD();

View File

@ -644,7 +644,7 @@ INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
CefHandler::RetVal ClientHandler::HandleBeforeCreated( CefHandler::RetVal ClientHandler::HandleBeforeCreated(
CefRefPtr<CefBrowser> parentBrowser, CefWindowInfo& createInfo, bool popup, CefRefPtr<CefBrowser> parentBrowser, CefWindowInfo& createInfo, bool popup,
const CefPopupFeatures& popupFeatures, CefRefPtr<CefHandler>& handler, const CefPopupFeatures& popupFeatures, CefRefPtr<CefHandler>& handler,
CefString& url, CefBrowserSettings& settings) const CefString& url, CefBrowserSettings& settings)
{ {
REQUIRE_UI_THREAD(); REQUIRE_UI_THREAD();

View File

@ -62,7 +62,7 @@ public:
CefWindowInfo& createInfo, bool popup, CefWindowInfo& createInfo, bool popup,
const CefPopupFeatures& popupFeatures, const CefPopupFeatures& popupFeatures,
CefRefPtr<CefHandler>& handler, CefRefPtr<CefHandler>& handler,
CefString& url, const CefString& url,
CefBrowserSettings& settings) CefBrowserSettings& settings)
{ {
REQUIRE_UI_THREAD(); REQUIRE_UI_THREAD();

View File

@ -40,7 +40,7 @@ public:
CefWindowInfo& createInfo, bool popup, CefWindowInfo& createInfo, bool popup,
const CefPopupFeatures& popupFeatures, const CefPopupFeatures& popupFeatures,
CefRefPtr<CefHandler>& handler, CefRefPtr<CefHandler>& handler,
CefString& url, const CefString& url,
CefBrowserSettings& settings) CefBrowserSettings& settings)
{ {
return RV_CONTINUE; return RV_CONTINUE;