Remove WebUIImpl::OverrideJavaScriptFrame() and pass |frame_name| on construction
Previously, frame_name_ was set shortly after construction.
This means that the wrong frame (main frame) would be selected
to run JS until frame_name_ is set.
This fixes potential issues when WebUIs (or their handlers)
immediately CallJavascriptFunction() on creation (i.e. if they
register as an observer and are immediately called).
[email protected]
BUG=516690
TEST=chrome://{settings,extensions,history,help} still work
Review URL: https://codereview.chromium.org/1316393002
Cr-Commit-Position: refs/heads/master@{#346513}
diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc
index 5def820..a185bdc 100644
--- a/content/browser/web_contents/web_contents_impl.cc
+++ b/content/browser/web_contents/web_contents_impl.cc
@@ -835,18 +835,10 @@
GetMainFrame()->RequestAXTreeSnapshot(callback);
}
-WebUI* WebContentsImpl::CreateWebUI(const GURL& url) {
- WebUIImpl* web_ui = new WebUIImpl(this);
- WebUIController* controller = WebUIControllerFactoryRegistry::GetInstance()->
- CreateWebUIControllerForURL(web_ui, url);
- if (controller) {
- web_ui->AddMessageHandler(new GenericHandler());
- web_ui->SetController(controller);
- return web_ui;
- }
-
- delete web_ui;
- return NULL;
+WebUI* WebContentsImpl::CreateSubframeWebUI(const GURL& url,
+ const std::string& frame_name) {
+ DCHECK(!frame_name.empty());
+ return CreateWebUI(url, frame_name);
}
WebUI* WebContentsImpl::GetWebUI() const {
@@ -4335,7 +4327,8 @@
scoped_ptr<WebUIImpl> WebContentsImpl::CreateWebUIForRenderManager(
const GURL& url) {
- return scoped_ptr<WebUIImpl>(static_cast<WebUIImpl*>(CreateWebUI(url)));
+ return scoped_ptr<WebUIImpl>(static_cast<WebUIImpl*>(CreateWebUI(
+ url, std::string())));
}
NavigationEntry*
@@ -4613,6 +4606,21 @@
player_map->erase(it);
}
+WebUI* WebContentsImpl::CreateWebUI(const GURL& url,
+ const std::string& frame_name) {
+ WebUIImpl* web_ui = new WebUIImpl(this, frame_name);
+ WebUIController* controller = WebUIControllerFactoryRegistry::GetInstance()->
+ CreateWebUIControllerForURL(web_ui, url);
+ if (controller) {
+ web_ui->AddMessageHandler(new GenericHandler());
+ web_ui->SetController(controller);
+ return web_ui;
+ }
+
+ delete web_ui;
+ return NULL;
+}
+
void WebContentsImpl::SetForceDisableOverscrollContent(bool force_disable) {
force_disable_overscroll_content_ = force_disable;
if (view_)