summaryrefslogtreecommitdiffstats
path: root/content
diff options
context:
space:
mode:
authorjochen@chromium.org <jochen@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-07-30 20:35:06 +0000
committerjochen@chromium.org <jochen@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-07-30 20:35:06 +0000
commitc21663ae815e6fc0faac03e6d752aae290a918d4 (patch)
tree1b60a045d1022d8d4c8e28c1c7678aafe6da7897 /content
parentc534ef7a7142e8cf58702e058e437686f4557e32 (diff)
downloadchromium_src-c21663ae815e6fc0faac03e6d752aae290a918d4.zip
chromium_src-c21663ae815e6fc0faac03e6d752aae290a918d4.tar.gz
chromium_src-c21663ae815e6fc0faac03e6d752aae290a918d4.tar.bz2
When reloading a crashed popup, correctly setup the opener relations
BUG=265817 R=creis@chromium.org TEST=RenderViewHostManagerTest.CleanUpSwappedOutRVHOnProcessCrash Review URL: https://codereview.chromium.org/21235002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@214436 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content')
-rw-r--r--content/browser/renderer_host/test_render_view_host.cc4
-rw-r--r--content/browser/renderer_host/test_render_view_host.h6
-rw-r--r--content/browser/web_contents/render_view_host_manager.cc5
-rw-r--r--content/browser/web_contents/render_view_host_manager_unittest.cc7
4 files changed, 20 insertions, 2 deletions
diff --git a/content/browser/renderer_host/test_render_view_host.cc b/content/browser/renderer_host/test_render_view_host.cc
index 7783e80..a395093 100644
--- a/content/browser/renderer_host/test_render_view_host.cc
+++ b/content/browser/renderer_host/test_render_view_host.cc
@@ -252,7 +252,8 @@ TestRenderViewHost::TestRenderViewHost(
delete_counter_(NULL),
simulate_fetch_via_proxy_(false),
simulate_history_list_was_cleared_(false),
- contents_mime_type_("text/html") {
+ contents_mime_type_("text/html"),
+ opener_route_id_(MSG_ROUTING_NONE) {
// TestRenderWidgetHostView installs itself into this->view_ in its
// constructor, and deletes itself when TestRenderWidgetHostView::Destroy() is
// called.
@@ -272,6 +273,7 @@ bool TestRenderViewHost::CreateRenderView(
int32 max_page_id) {
DCHECK(!render_view_created_);
render_view_created_ = true;
+ opener_route_id_ = opener_route_id;
return true;
}
diff --git a/content/browser/renderer_host/test_render_view_host.h b/content/browser/renderer_host/test_render_view_host.h
index 0c3455a..37b46e2 100644
--- a/content/browser/renderer_host/test_render_view_host.h
+++ b/content/browser/renderer_host/test_render_view_host.h
@@ -308,6 +308,9 @@ class TestRenderViewHost
// False by default.
void set_simulate_history_list_was_cleared(bool cleared);
+ // The opener route id passed to CreateRenderView().
+ int opener_route_id() const { return opener_route_id_; }
+
// RenderViewHost overrides --------------------------------------------------
virtual bool CreateRenderView(const string16& frame_name,
@@ -350,6 +353,9 @@ class TestRenderViewHost
// See SetContentsMimeType() above.
std::string contents_mime_type_;
+ // See opener_route_id() above.
+ int opener_route_id_;
+
DISALLOW_COPY_AND_ASSIGN(TestRenderViewHost);
};
diff --git a/content/browser/web_contents/render_view_host_manager.cc b/content/browser/web_contents/render_view_host_manager.cc
index 4201eb8..0c8d26f 100644
--- a/content/browser/web_contents/render_view_host_manager.cc
+++ b/content/browser/web_contents/render_view_host_manager.cc
@@ -149,7 +149,10 @@ RenderViewHostImpl* RenderViewHostManager::Navigate(
// If the renderer crashed, then try to create a new one to satisfy this
// navigation request.
if (!dest_render_view_host->IsRenderViewLive()) {
- if (!InitRenderView(dest_render_view_host, MSG_ROUTING_NONE))
+ // Recreate the opener chain.
+ int opener_route_id = delegate_->CreateOpenerRenderViewsForRenderManager(
+ dest_render_view_host->GetSiteInstance());
+ if (!InitRenderView(dest_render_view_host, opener_route_id))
return NULL;
// Now that we've created a new renderer, be sure to hide it if it isn't
diff --git a/content/browser/web_contents/render_view_host_manager_unittest.cc b/content/browser/web_contents/render_view_host_manager_unittest.cc
index ba09775..ea35e6b 100644
--- a/content/browser/web_contents/render_view_host_manager_unittest.cc
+++ b/content/browser/web_contents/render_view_host_manager_unittest.cc
@@ -1096,10 +1096,17 @@ TEST_F(RenderViewHostManagerTest, CleanUpSwappedOutRVHOnProcessCrash) {
NOTIFICATION_RENDERER_PROCESS_CLOSED,
Source<RenderProcessHost>(rvh1->GetProcess()),
Details<RenderProcessHost::RendererClosedDetails>(&details));
+ rvh1->set_render_view_created(false);
// Ensure that the swapped out RenderViewHost has been deleted.
EXPECT_FALSE(opener1_manager->GetSwappedOutRenderViewHost(
rvh1->GetSiteInstance()));
+
+ // Reload the initial tab. This should recreate the opener.
+ contents()->GetController().Reload(true);
+
+ EXPECT_EQ(opener1_manager->current_host()->GetRoutingID(),
+ test_rvh()->opener_route_id());
}
// Test that RenderViewHosts created for WebUI navigations are properly