summaryrefslogtreecommitdiffstats
path: root/content/renderer
diff options
context:
space:
mode:
authorshishir@chromium.org <shishir@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-10-07 19:11:59 +0000
committershishir@chromium.org <shishir@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-10-07 19:11:59 +0000
commit57b9396ce02f494dee0eb42a7eafde525aea1028 (patch)
tree3d0b99609965a76e85d711bb19a6eb727149be56 /content/renderer
parentd7b10554d4bbe6d8224be2a14775e1a4b8089d99 (diff)
downloadchromium_src-57b9396ce02f494dee0eb42a7eafde525aea1028.zip
chromium_src-57b9396ce02f494dee0eb42a7eafde525aea1028.tar.gz
chromium_src-57b9396ce02f494dee0eb42a7eafde525aea1028.tar.bz2
Changes for cross domain prerenders to not cancel when there is a window.opener set.
This change will only cancel prerenders with window.opener set where the prerender is in the same domain as the page doing the prerendering. The window.opener case can be broken down into two cases: 1. When the page embedding the "link rel=prerender" does not have an opener set, but the opener is set only for the prerendered page. 2. The embedder page itself has the opener set and the prerendered page inherits it. This CL fixes both cases. BUG=85042 TEST=PrerenderBrowserTest Review URL: http://codereview.chromium.org/7906017 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@104538 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/renderer')
-rw-r--r--content/renderer/render_view.cc13
-rw-r--r--content/renderer/render_view.h3
2 files changed, 12 insertions, 4 deletions
diff --git a/content/renderer/render_view.cc b/content/renderer/render_view.cc
index 0e58757..348c506 100644
--- a/content/renderer/render_view.cc
+++ b/content/renderer/render_view.cc
@@ -2311,9 +2311,8 @@ void RenderView::didStartProvisionalLoad(WebFrame* frame) {
FOR_EACH_OBSERVER(
RenderViewObserver, observers_, DidStartProvisionalLoad(frame));
- bool has_opener_set = opener_id_ != MSG_ROUTING_NONE;
Send(new ViewHostMsg_DidStartProvisionalLoadForFrame(
- routing_id_, frame->identifier(), is_top_most, has_opener_set,
+ routing_id_, frame->identifier(), is_top_most, GetOpenerUrl(),
ds->request().url()));
}
@@ -2330,9 +2329,8 @@ void RenderView::didReceiveServerRedirectForProvisionalLoad(WebFrame* frame) {
std::vector<GURL> redirects;
GetRedirectChain(data_source, &redirects);
if (redirects.size() >= 2) {
- bool has_opener_set = opener_id_ != MSG_ROUTING_NONE;
Send(new ViewHostMsg_DidRedirectProvisionalLoad(routing_id_, page_id_,
- has_opener_set, redirects[redirects.size() - 2], redirects.back()));
+ GetOpenerUrl(), redirects[redirects.size() - 2], redirects.back()));
}
}
@@ -3093,6 +3091,13 @@ GURL RenderView::GetAlternateErrorPageURL(const GURL& failed_url,
return url;
}
+GURL RenderView::GetOpenerUrl() const {
+ if (opener_id_ == MSG_ROUTING_NONE || opener_suppressed_)
+ return GURL();
+ else
+ return creator_url_;
+}
+
WebUIBindings* RenderView::GetWebUIBindings() {
if (!web_ui_bindings_.get()) {
web_ui_bindings_.reset(new WebUIBindings(this, routing_id_));
diff --git a/content/renderer/render_view.h b/content/renderer/render_view.h
index b1728b3..37899c0 100644
--- a/content/renderer/render_view.h
+++ b/content/renderer/render_view.h
@@ -904,6 +904,9 @@ class RenderView : public RenderWidget,
// Locates a sub frame with given xpath
WebKit::WebFrame* GetChildFrame(const string16& frame_xpath) const;
+ // Returns the opener url if present, else an empty url.
+ GURL GetOpenerUrl() const;
+
WebUIBindings* GetWebUIBindings();
// Should only be called if this object wraps a PluginDocument.