OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "base/strings/utf_string_conversions.h" | 5 #include "base/strings/utf_string_conversions.h" |
6 #include "content/browser/frame_host/navigation_controller_impl.h" | 6 #include "content/browser/frame_host/navigation_controller_impl.h" |
7 #include "content/browser/frame_host/navigation_entry_impl.h" | 7 #include "content/browser/frame_host/navigation_entry_impl.h" |
8 #include "content/browser/frame_host/render_view_host_manager.h" | 8 #include "content/browser/frame_host/render_frame_host_manager.h" |
9 #include "content/browser/renderer_host/test_render_view_host.h" | 9 #include "content/browser/renderer_host/test_render_view_host.h" |
10 #include "content/browser/site_instance_impl.h" | 10 #include "content/browser/site_instance_impl.h" |
11 #include "content/browser/webui/web_ui_controller_factory_registry.h" | 11 #include "content/browser/webui/web_ui_controller_factory_registry.h" |
12 #include "content/common/view_messages.h" | 12 #include "content/common/view_messages.h" |
13 #include "content/public/browser/notification_details.h" | 13 #include "content/public/browser/notification_details.h" |
14 #include "content/public/browser/notification_service.h" | 14 #include "content/public/browser/notification_service.h" |
15 #include "content/public/browser/notification_source.h" | 15 #include "content/public/browser/notification_source.h" |
16 #include "content/public/browser/notification_types.h" | 16 #include "content/public/browser/notification_types.h" |
17 #include "content/public/browser/render_process_host.h" | 17 #include "content/public/browser/render_process_host.h" |
18 #include "content/public/browser/render_widget_host_iterator.h" | 18 #include "content/public/browser/render_widget_host_iterator.h" |
19 #include "content/public/browser/web_contents_delegate.h" | 19 #include "content/public/browser/web_contents_delegate.h" |
20 #include "content/public/browser/web_contents_observer.h" | 20 #include "content/public/browser/web_contents_observer.h" |
21 #include "content/public/browser/web_ui_controller.h" | 21 #include "content/public/browser/web_ui_controller.h" |
22 #include "content/public/common/bindings_policy.h" | 22 #include "content/public/common/bindings_policy.h" |
23 #include "content/public/common/javascript_message_type.h" | 23 #include "content/public/common/javascript_message_type.h" |
24 #include "content/public/common/page_transition_types.h" | 24 #include "content/public/common/page_transition_types.h" |
25 #include "content/public/common/url_constants.h" | 25 #include "content/public/common/url_constants.h" |
26 #include "content/public/common/url_utils.h" | 26 #include "content/public/common/url_utils.h" |
27 #include "content/public/test/mock_render_process_host.h" | 27 #include "content/public/test/mock_render_process_host.h" |
28 #include "content/public/test/test_notification_tracker.h" | 28 #include "content/public/test/test_notification_tracker.h" |
29 #include "content/test/test_content_browser_client.h" | 29 #include "content/test/test_content_browser_client.h" |
30 #include "content/test/test_content_client.h" | 30 #include "content/test/test_content_client.h" |
31 #include "content/test/test_web_contents.h" | 31 #include "content/test/test_web_contents.h" |
32 #include "testing/gtest/include/gtest/gtest.h" | 32 #include "testing/gtest/include/gtest/gtest.h" |
33 | 33 |
34 namespace content { | 34 namespace content { |
35 namespace { | 35 namespace { |
36 | 36 |
37 class RenderViewHostManagerTestWebUIControllerFactory | 37 class RenderFrameHostManagerTestWebUIControllerFactory |
38 : public WebUIControllerFactory { | 38 : public WebUIControllerFactory { |
39 public: | 39 public: |
40 RenderViewHostManagerTestWebUIControllerFactory() | 40 RenderFrameHostManagerTestWebUIControllerFactory() |
41 : should_create_webui_(false) { | 41 : should_create_webui_(false) { |
42 } | 42 } |
43 virtual ~RenderViewHostManagerTestWebUIControllerFactory() {} | 43 virtual ~RenderFrameHostManagerTestWebUIControllerFactory() {} |
44 | 44 |
45 void set_should_create_webui(bool should_create_webui) { | 45 void set_should_create_webui(bool should_create_webui) { |
46 should_create_webui_ = should_create_webui; | 46 should_create_webui_ = should_create_webui; |
47 } | 47 } |
48 | 48 |
49 // WebUIFactory implementation. | 49 // WebUIFactory implementation. |
50 virtual WebUIController* CreateWebUIControllerForURL( | 50 virtual WebUIController* CreateWebUIControllerForURL( |
51 WebUI* web_ui, const GURL& url) const OVERRIDE { | 51 WebUI* web_ui, const GURL& url) const OVERRIDE { |
52 if (!(should_create_webui_ && HasWebUIScheme(url))) | 52 if (!(should_create_webui_ && HasWebUIScheme(url))) |
53 return NULL; | 53 return NULL; |
(...skipping 11 matching lines...) Expand all Loading... |
65 } | 65 } |
66 | 66 |
67 virtual bool UseWebUIBindingsForURL(BrowserContext* browser_context, | 67 virtual bool UseWebUIBindingsForURL(BrowserContext* browser_context, |
68 const GURL& url) const OVERRIDE { | 68 const GURL& url) const OVERRIDE { |
69 return HasWebUIScheme(url); | 69 return HasWebUIScheme(url); |
70 } | 70 } |
71 | 71 |
72 private: | 72 private: |
73 bool should_create_webui_; | 73 bool should_create_webui_; |
74 | 74 |
75 DISALLOW_COPY_AND_ASSIGN(RenderViewHostManagerTestWebUIControllerFactory); | 75 DISALLOW_COPY_AND_ASSIGN(RenderFrameHostManagerTestWebUIControllerFactory); |
76 }; | 76 }; |
77 | 77 |
78 class BeforeUnloadFiredWebContentsDelegate : public WebContentsDelegate { | 78 class BeforeUnloadFiredWebContentsDelegate : public WebContentsDelegate { |
79 public: | 79 public: |
80 BeforeUnloadFiredWebContentsDelegate() {} | 80 BeforeUnloadFiredWebContentsDelegate() {} |
81 virtual ~BeforeUnloadFiredWebContentsDelegate() {} | 81 virtual ~BeforeUnloadFiredWebContentsDelegate() {} |
82 | 82 |
83 virtual void BeforeUnloadFired(WebContents* web_contents, | 83 virtual void BeforeUnloadFired(WebContents* web_contents, |
84 bool proceed, | 84 bool proceed, |
85 bool* proceed_to_fire_unload) OVERRIDE { | 85 bool* proceed_to_fire_unload) OVERRIDE { |
86 *proceed_to_fire_unload = proceed; | 86 *proceed_to_fire_unload = proceed; |
87 } | 87 } |
88 | 88 |
89 private: | 89 private: |
90 DISALLOW_COPY_AND_ASSIGN(BeforeUnloadFiredWebContentsDelegate); | 90 DISALLOW_COPY_AND_ASSIGN(BeforeUnloadFiredWebContentsDelegate); |
91 }; | 91 }; |
92 | 92 |
93 } // namespace | 93 } // namespace |
94 | 94 |
95 class RenderViewHostManagerTest | 95 class RenderFrameHostManagerTest |
96 : public RenderViewHostImplTestHarness { | 96 : public RenderViewHostImplTestHarness { |
97 public: | 97 public: |
98 virtual void SetUp() OVERRIDE { | 98 virtual void SetUp() OVERRIDE { |
99 RenderViewHostImplTestHarness::SetUp(); | 99 RenderViewHostImplTestHarness::SetUp(); |
100 WebUIControllerFactory::RegisterFactory(&factory_); | 100 WebUIControllerFactory::RegisterFactory(&factory_); |
101 } | 101 } |
102 | 102 |
103 virtual void TearDown() OVERRIDE { | 103 virtual void TearDown() OVERRIDE { |
104 RenderViewHostImplTestHarness::TearDown(); | 104 RenderViewHostImplTestHarness::TearDown(); |
105 WebUIControllerFactory::UnregisterFactoryForTesting(&factory_); | 105 WebUIControllerFactory::UnregisterFactoryForTesting(&factory_); |
(...skipping 20 matching lines...) Expand all Loading... |
126 active_rvh()->GetSiteInstance()); | 126 active_rvh()->GetSiteInstance()); |
127 | 127 |
128 // Simulate the SwapOut_ACK that fires if you commit a cross-site | 128 // Simulate the SwapOut_ACK that fires if you commit a cross-site |
129 // navigation. | 129 // navigation. |
130 if (old_rvh != active_rvh()) | 130 if (old_rvh != active_rvh()) |
131 old_rvh->OnSwappedOut(false); | 131 old_rvh->OnSwappedOut(false); |
132 | 132 |
133 active_test_rvh()->SendNavigate(max_page_id + 1, url); | 133 active_test_rvh()->SendNavigate(max_page_id + 1, url); |
134 } | 134 } |
135 | 135 |
136 bool ShouldSwapProcesses(RenderViewHostManager* manager, | 136 bool ShouldSwapProcesses(RenderFrameHostManager* manager, |
137 const NavigationEntryImpl* current_entry, | 137 const NavigationEntryImpl* current_entry, |
138 const NavigationEntryImpl* new_entry) const { | 138 const NavigationEntryImpl* new_entry) const { |
139 return manager->ShouldSwapBrowsingInstancesForNavigation(current_entry, | 139 return manager->ShouldSwapBrowsingInstancesForNavigation(current_entry, |
140 new_entry); | 140 new_entry); |
141 } | 141 } |
142 | 142 |
143 // Creates a test RenderViewHost that's swapped out. | 143 // Creates a test RenderViewHost that's swapped out. |
144 TestRenderViewHost* CreateSwappedOutRenderViewHost() { | 144 TestRenderViewHost* CreateSwappedOutRenderViewHost() { |
145 const GURL kChromeURL("chrome://foo"); | 145 const GURL kChromeURL("chrome://foo"); |
146 const GURL kDestUrl("http://www.google.com/"); | 146 const GURL kDestUrl("http://www.google.com/"); |
(...skipping 23 matching lines...) Expand all Loading... |
170 ntp_rvh->SendShouldCloseACK(true); | 170 ntp_rvh->SendShouldCloseACK(true); |
171 | 171 |
172 // Assume SwapOutACK times out, so the dest_rvh proceeds and commits. | 172 // Assume SwapOutACK times out, so the dest_rvh proceeds and commits. |
173 dest_rvh->SendNavigate(101, kDestUrl); | 173 dest_rvh->SendNavigate(101, kDestUrl); |
174 | 174 |
175 EXPECT_TRUE(ntp_rvh->is_swapped_out()); | 175 EXPECT_TRUE(ntp_rvh->is_swapped_out()); |
176 return ntp_rvh; | 176 return ntp_rvh; |
177 } | 177 } |
178 | 178 |
179 private: | 179 private: |
180 RenderViewHostManagerTestWebUIControllerFactory factory_; | 180 RenderFrameHostManagerTestWebUIControllerFactory factory_; |
181 }; | 181 }; |
182 | 182 |
183 // Tests that when you navigate from a chrome:// url to another page, and | 183 // Tests that when you navigate from a chrome:// url to another page, and |
184 // then do that same thing in another tab, that the two resulting pages have | 184 // then do that same thing in another tab, that the two resulting pages have |
185 // different SiteInstances, BrowsingInstances, and RenderProcessHosts. This is | 185 // different SiteInstances, BrowsingInstances, and RenderProcessHosts. This is |
186 // a regression test for bug 9364. | 186 // a regression test for bug 9364. |
187 TEST_F(RenderViewHostManagerTest, NewTabPageProcesses) { | 187 TEST_F(RenderFrameHostManagerTest, NewTabPageProcesses) { |
188 set_should_create_webui(true); | 188 set_should_create_webui(true); |
189 const GURL kChromeUrl("chrome://foo"); | 189 const GURL kChromeUrl("chrome://foo"); |
190 const GURL kDestUrl("http://www.google.com/"); | 190 const GURL kDestUrl("http://www.google.com/"); |
191 | 191 |
192 // Navigate our first tab to the chrome url and then to the destination, | 192 // Navigate our first tab to the chrome url and then to the destination, |
193 // ensuring we grant bindings to the chrome URL. | 193 // ensuring we grant bindings to the chrome URL. |
194 NavigateActiveAndCommit(kChromeUrl); | 194 NavigateActiveAndCommit(kChromeUrl); |
195 EXPECT_TRUE(active_rvh()->GetEnabledBindings() & BINDINGS_POLICY_WEB_UI); | 195 EXPECT_TRUE(active_rvh()->GetEnabledBindings() & BINDINGS_POLICY_WEB_UI); |
196 NavigateActiveAndCommit(kDestUrl); | 196 NavigateActiveAndCommit(kDestUrl); |
197 | 197 |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
243 contents2->GetRenderViewHost()->GetSiteInstance()); | 243 contents2->GetRenderViewHost()->GetSiteInstance()); |
244 EXPECT_EQ(active_rvh()->GetSiteInstance()->GetProcess(), | 244 EXPECT_EQ(active_rvh()->GetSiteInstance()->GetProcess(), |
245 contents2->GetRenderViewHost()->GetSiteInstance()->GetProcess()); | 245 contents2->GetRenderViewHost()->GetSiteInstance()->GetProcess()); |
246 } | 246 } |
247 | 247 |
248 // Ensure that the browser ignores most IPC messages that arrive from a | 248 // Ensure that the browser ignores most IPC messages that arrive from a |
249 // RenderViewHost that has been swapped out. We do not want to take | 249 // RenderViewHost that has been swapped out. We do not want to take |
250 // action on requests from a non-active renderer. The main exception is | 250 // action on requests from a non-active renderer. The main exception is |
251 // for synchronous messages, which cannot be ignored without leaving the | 251 // for synchronous messages, which cannot be ignored without leaving the |
252 // renderer in a stuck state. See http://crbug.com/93427. | 252 // renderer in a stuck state. See http://crbug.com/93427. |
253 TEST_F(RenderViewHostManagerTest, FilterMessagesWhileSwappedOut) { | 253 TEST_F(RenderFrameHostManagerTest, FilterMessagesWhileSwappedOut) { |
254 const GURL kChromeURL("chrome://foo"); | 254 const GURL kChromeURL("chrome://foo"); |
255 const GURL kDestUrl("http://www.google.com/"); | 255 const GURL kDestUrl("http://www.google.com/"); |
256 | 256 |
257 // Navigate our first tab to a chrome url and then to the destination. | 257 // Navigate our first tab to a chrome url and then to the destination. |
258 NavigateActiveAndCommit(kChromeURL); | 258 NavigateActiveAndCommit(kChromeURL); |
259 TestRenderViewHost* ntp_rvh = static_cast<TestRenderViewHost*>( | 259 TestRenderViewHost* ntp_rvh = static_cast<TestRenderViewHost*>( |
260 contents()->GetRenderManagerForTesting()->current_host()); | 260 contents()->GetRenderManagerForTesting()->current_host()); |
261 | 261 |
262 // Send an update title message and make sure it works. | 262 // Send an update title message and make sure it works. |
263 const string16 ntp_title = ASCIIToUTF16("NTP Title"); | 263 const string16 ntp_title = ASCIIToUTF16("NTP Title"); |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
321 // Also test RunJavaScriptMessage. | 321 // Also test RunJavaScriptMessage. |
322 ntp_process_host->sink().ClearMessages(); | 322 ntp_process_host->sink().ClearMessages(); |
323 ViewHostMsg_RunJavaScriptMessage js_msg( | 323 ViewHostMsg_RunJavaScriptMessage js_msg( |
324 rvh()->GetRoutingID(), msg, msg, kChromeURL, | 324 rvh()->GetRoutingID(), msg, msg, kChromeURL, |
325 JAVASCRIPT_MESSAGE_TYPE_CONFIRM, &result, &unused); | 325 JAVASCRIPT_MESSAGE_TYPE_CONFIRM, &result, &unused); |
326 js_msg.EnableMessagePumping(); | 326 js_msg.EnableMessagePumping(); |
327 EXPECT_TRUE(ntp_rvh->OnMessageReceived(js_msg)); | 327 EXPECT_TRUE(ntp_rvh->OnMessageReceived(js_msg)); |
328 EXPECT_TRUE(ntp_process_host->sink().GetUniqueMessageMatching(IPC_REPLY_ID)); | 328 EXPECT_TRUE(ntp_process_host->sink().GetUniqueMessageMatching(IPC_REPLY_ID)); |
329 } | 329 } |
330 | 330 |
331 TEST_F(RenderViewHostManagerTest, WhiteListSwapCompositorFrame) { | 331 TEST_F(RenderFrameHostManagerTest, WhiteListSwapCompositorFrame) { |
332 TestRenderViewHost* swapped_out_rvh = CreateSwappedOutRenderViewHost(); | 332 TestRenderViewHost* swapped_out_rvh = CreateSwappedOutRenderViewHost(); |
333 TestRenderWidgetHostView* swapped_out_rwhv = | 333 TestRenderWidgetHostView* swapped_out_rwhv = |
334 static_cast<TestRenderWidgetHostView*>(swapped_out_rvh->GetView()); | 334 static_cast<TestRenderWidgetHostView*>(swapped_out_rvh->GetView()); |
335 EXPECT_FALSE(swapped_out_rwhv->did_swap_compositor_frame()); | 335 EXPECT_FALSE(swapped_out_rwhv->did_swap_compositor_frame()); |
336 | 336 |
337 MockRenderProcessHost* process_host = | 337 MockRenderProcessHost* process_host = |
338 static_cast<MockRenderProcessHost*>(swapped_out_rvh->GetProcess()); | 338 static_cast<MockRenderProcessHost*>(swapped_out_rvh->GetProcess()); |
339 process_host->sink().ClearMessages(); | 339 process_host->sink().ClearMessages(); |
340 | 340 |
341 cc::CompositorFrame frame; | 341 cc::CompositorFrame frame; |
342 ViewHostMsg_SwapCompositorFrame msg(rvh()->GetRoutingID(), 0, frame); | 342 ViewHostMsg_SwapCompositorFrame msg(rvh()->GetRoutingID(), 0, frame); |
343 | 343 |
344 EXPECT_TRUE(swapped_out_rvh->OnMessageReceived(msg)); | 344 EXPECT_TRUE(swapped_out_rvh->OnMessageReceived(msg)); |
345 EXPECT_TRUE(swapped_out_rwhv->did_swap_compositor_frame()); | 345 EXPECT_TRUE(swapped_out_rwhv->did_swap_compositor_frame()); |
346 } | 346 } |
347 | 347 |
348 TEST_F(RenderViewHostManagerTest, WhiteListDidActivateAcceleratedCompositing) { | 348 TEST_F(RenderFrameHostManagerTest, WhiteListDidActivateAcceleratedCompositing) { |
349 TestRenderViewHost* swapped_out_rvh = CreateSwappedOutRenderViewHost(); | 349 TestRenderViewHost* swapped_out_rvh = CreateSwappedOutRenderViewHost(); |
350 | 350 |
351 MockRenderProcessHost* process_host = | 351 MockRenderProcessHost* process_host = |
352 static_cast<MockRenderProcessHost*>(swapped_out_rvh->GetProcess()); | 352 static_cast<MockRenderProcessHost*>(swapped_out_rvh->GetProcess()); |
353 process_host->sink().ClearMessages(); | 353 process_host->sink().ClearMessages(); |
354 ViewHostMsg_DidActivateAcceleratedCompositing msg( | 354 ViewHostMsg_DidActivateAcceleratedCompositing msg( |
355 rvh()->GetRoutingID(), true); | 355 rvh()->GetRoutingID(), true); |
356 EXPECT_TRUE(swapped_out_rvh->OnMessageReceived(msg)); | 356 EXPECT_TRUE(swapped_out_rvh->OnMessageReceived(msg)); |
357 EXPECT_TRUE(swapped_out_rvh->is_accelerated_compositing_active()); | 357 EXPECT_TRUE(swapped_out_rvh->is_accelerated_compositing_active()); |
358 } | 358 } |
359 | 359 |
360 // Test if RenderViewHost::GetRenderWidgetHosts() only returns active | 360 // Test if RenderViewHost::GetRenderWidgetHosts() only returns active |
361 // widgets. | 361 // widgets. |
362 TEST_F(RenderViewHostManagerTest, GetRenderWidgetHostsReturnsActiveViews) { | 362 TEST_F(RenderFrameHostManagerTest, GetRenderWidgetHostsReturnsActiveViews) { |
363 TestRenderViewHost* swapped_out_rvh = CreateSwappedOutRenderViewHost(); | 363 TestRenderViewHost* swapped_out_rvh = CreateSwappedOutRenderViewHost(); |
364 EXPECT_TRUE(swapped_out_rvh->is_swapped_out()); | 364 EXPECT_TRUE(swapped_out_rvh->is_swapped_out()); |
365 | 365 |
366 scoped_ptr<RenderWidgetHostIterator> widgets( | 366 scoped_ptr<RenderWidgetHostIterator> widgets( |
367 RenderWidgetHost::GetRenderWidgetHosts()); | 367 RenderWidgetHost::GetRenderWidgetHosts()); |
368 // We know that there is the only one active widget. Another view is | 368 // We know that there is the only one active widget. Another view is |
369 // now swapped out, so the swapped out view is not included in the | 369 // now swapped out, so the swapped out view is not included in the |
370 // list. | 370 // list. |
371 RenderWidgetHost* widget = widgets->GetNextHost(); | 371 RenderWidgetHost* widget = widgets->GetNextHost(); |
372 EXPECT_FALSE(widgets->GetNextHost()); | 372 EXPECT_FALSE(widgets->GetNextHost()); |
373 RenderViewHost* rvh = RenderViewHost::From(widget); | 373 RenderViewHost* rvh = RenderViewHost::From(widget); |
374 EXPECT_FALSE(static_cast<RenderViewHostImpl*>(rvh)->is_swapped_out()); | 374 EXPECT_FALSE(static_cast<RenderViewHostImpl*>(rvh)->is_swapped_out()); |
375 } | 375 } |
376 | 376 |
377 // Test if RenderViewHost::GetRenderWidgetHosts() returns a subset of | 377 // Test if RenderViewHost::GetRenderWidgetHosts() returns a subset of |
378 // RenderViewHostImpl::GetAllRenderWidgetHosts(). | 378 // RenderViewHostImpl::GetAllRenderWidgetHosts(). |
379 // RenderViewHost::GetRenderWidgetHosts() returns only active widgets, but | 379 // RenderViewHost::GetRenderWidgetHosts() returns only active widgets, but |
380 // RenderViewHostImpl::GetAllRenderWidgetHosts() returns everything | 380 // RenderViewHostImpl::GetAllRenderWidgetHosts() returns everything |
381 // including swapped out ones. | 381 // including swapped out ones. |
382 TEST_F(RenderViewHostManagerTest, | 382 TEST_F(RenderFrameHostManagerTest, |
383 GetRenderWidgetHostsWithinGetAllRenderWidgetHosts) { | 383 GetRenderWidgetHostsWithinGetAllRenderWidgetHosts) { |
384 TestRenderViewHost* swapped_out_rvh = CreateSwappedOutRenderViewHost(); | 384 TestRenderViewHost* swapped_out_rvh = CreateSwappedOutRenderViewHost(); |
385 EXPECT_TRUE(swapped_out_rvh->is_swapped_out()); | 385 EXPECT_TRUE(swapped_out_rvh->is_swapped_out()); |
386 | 386 |
387 scoped_ptr<RenderWidgetHostIterator> widgets( | 387 scoped_ptr<RenderWidgetHostIterator> widgets( |
388 RenderWidgetHost::GetRenderWidgetHosts()); | 388 RenderWidgetHost::GetRenderWidgetHosts()); |
389 | 389 |
390 while (RenderWidgetHost* w = widgets->GetNextHost()) { | 390 while (RenderWidgetHost* w = widgets->GetNextHost()) { |
391 bool found = false; | 391 bool found = false; |
392 scoped_ptr<RenderWidgetHostIterator> all_widgets( | 392 scoped_ptr<RenderWidgetHostIterator> all_widgets( |
393 RenderWidgetHostImpl::GetAllRenderWidgetHosts()); | 393 RenderWidgetHostImpl::GetAllRenderWidgetHosts()); |
394 while (RenderWidgetHost* widget = all_widgets->GetNextHost()) { | 394 while (RenderWidgetHost* widget = all_widgets->GetNextHost()) { |
395 if (w == widget) { | 395 if (w == widget) { |
396 found = true; | 396 found = true; |
397 break; | 397 break; |
398 } | 398 } |
399 } | 399 } |
400 EXPECT_TRUE(found); | 400 EXPECT_TRUE(found); |
401 } | 401 } |
402 } | 402 } |
403 | 403 |
404 // Test if SiteInstanceImpl::active_view_count() is correctly updated | 404 // Test if SiteInstanceImpl::active_view_count() is correctly updated |
405 // as views in a SiteInstance get swapped out and in. | 405 // as views in a SiteInstance get swapped out and in. |
406 TEST_F(RenderViewHostManagerTest, ActiveViewCountWhileSwappingInandOut) { | 406 TEST_F(RenderFrameHostManagerTest, ActiveViewCountWhileSwappingInandOut) { |
407 const GURL kUrl1("http://www.google.com/"); | 407 const GURL kUrl1("http://www.google.com/"); |
408 const GURL kUrl2("http://www.chromium.org/"); | 408 const GURL kUrl2("http://www.chromium.org/"); |
409 | 409 |
410 // Navigate to an initial URL. | 410 // Navigate to an initial URL. |
411 contents()->NavigateAndCommit(kUrl1); | 411 contents()->NavigateAndCommit(kUrl1); |
412 TestRenderViewHost* rvh1 = test_rvh(); | 412 TestRenderViewHost* rvh1 = test_rvh(); |
413 | 413 |
414 SiteInstanceImpl* instance1 = | 414 SiteInstanceImpl* instance1 = |
415 static_cast<SiteInstanceImpl*>(rvh1->GetSiteInstance()); | 415 static_cast<SiteInstanceImpl*>(rvh1->GetSiteInstance()); |
416 EXPECT_EQ(instance1->active_view_count(), 1U); | 416 EXPECT_EQ(instance1->active_view_count(), 1U); |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
470 RenderViewHost* render_view_host_; | 470 RenderViewHost* render_view_host_; |
471 WebContents* web_contents_; | 471 WebContents* web_contents_; |
472 | 472 |
473 DISALLOW_COPY_AND_ASSIGN(RenderViewHostDestroyer); | 473 DISALLOW_COPY_AND_ASSIGN(RenderViewHostDestroyer); |
474 }; | 474 }; |
475 | 475 |
476 // Test if ShutdownRenderViewHostsInSiteInstance() does not touch any | 476 // Test if ShutdownRenderViewHostsInSiteInstance() does not touch any |
477 // RenderWidget that has been freed while deleting a RenderViewHost in | 477 // RenderWidget that has been freed while deleting a RenderViewHost in |
478 // a previous iteration. This is a regression test for | 478 // a previous iteration. This is a regression test for |
479 // http://crbug.com/259859. | 479 // http://crbug.com/259859. |
480 TEST_F(RenderViewHostManagerTest, | 480 TEST_F(RenderFrameHostManagerTest, |
481 DetectUseAfterFreeInShutdownRenderViewHostsInSiteInstance) { | 481 DetectUseAfterFreeInShutdownRenderViewHostsInSiteInstance) { |
482 const GURL kChromeURL("chrome://newtab"); | 482 const GURL kChromeURL("chrome://newtab"); |
483 const GURL kUrl1("http://www.google.com"); | 483 const GURL kUrl1("http://www.google.com"); |
484 const GURL kUrl2("http://www.chromium.org"); | 484 const GURL kUrl2("http://www.chromium.org"); |
485 | 485 |
486 // Navigate our first tab to a chrome url and then to the destination. | 486 // Navigate our first tab to a chrome url and then to the destination. |
487 NavigateActiveAndCommit(kChromeURL); | 487 NavigateActiveAndCommit(kChromeURL); |
488 TestRenderViewHost* ntp_rvh = static_cast<TestRenderViewHost*>( | 488 TestRenderViewHost* ntp_rvh = static_cast<TestRenderViewHost*>( |
489 contents()->GetRenderManagerForTesting()->current_host()); | 489 contents()->GetRenderManagerForTesting()->current_host()); |
490 | 490 |
(...skipping 12 matching lines...) Expand all Loading... |
503 // SiteInstanceImpl::ShutdownRenderViewHostsInSiteInstance() can | 503 // SiteInstanceImpl::ShutdownRenderViewHostsInSiteInstance() can |
504 // touch any object freed in this way or not while iterating through | 504 // touch any object freed in this way or not while iterating through |
505 // all widgets. | 505 // all widgets. |
506 contents()->NavigateAndCommit(kUrl2); | 506 contents()->NavigateAndCommit(kUrl2); |
507 } | 507 } |
508 | 508 |
509 // When there is an error with the specified page, renderer exits view-source | 509 // When there is an error with the specified page, renderer exits view-source |
510 // mode. See WebFrameImpl::DidFail(). We check by this test that | 510 // mode. See WebFrameImpl::DidFail(). We check by this test that |
511 // EnableViewSourceMode message is sent on every navigation regardless | 511 // EnableViewSourceMode message is sent on every navigation regardless |
512 // RenderView is being newly created or reused. | 512 // RenderView is being newly created or reused. |
513 TEST_F(RenderViewHostManagerTest, AlwaysSendEnableViewSourceMode) { | 513 TEST_F(RenderFrameHostManagerTest, AlwaysSendEnableViewSourceMode) { |
514 const GURL kChromeUrl("chrome://foo"); | 514 const GURL kChromeUrl("chrome://foo"); |
515 const GURL kUrl("view-source:http://foo"); | 515 const GURL kUrl("view-source:http://foo"); |
516 | 516 |
517 // We have to navigate to some page at first since without this, the first | 517 // We have to navigate to some page at first since without this, the first |
518 // navigation will reuse the SiteInstance created by Init(), and the second | 518 // navigation will reuse the SiteInstance created by Init(), and the second |
519 // one will create a new SiteInstance. Because current_instance and | 519 // one will create a new SiteInstance. Because current_instance and |
520 // new_instance will be different, a new RenderViewHost will be created for | 520 // new_instance will be different, a new RenderViewHost will be created for |
521 // the second navigation. We have to avoid this in order to exercise the | 521 // the second navigation. We have to avoid this in order to exercise the |
522 // target code patch. | 522 // target code patch. |
523 NavigateActiveAndCommit(kChromeUrl); | 523 NavigateActiveAndCommit(kChromeUrl); |
(...skipping 28 matching lines...) Expand all Loading... |
552 EXPECT_TRUE(last_rvh == rvh()); | 552 EXPECT_TRUE(last_rvh == rvh()); |
553 test_rvh()->SendNavigate(new_id, kUrl); // The same page_id returned. | 553 test_rvh()->SendNavigate(new_id, kUrl); // The same page_id returned. |
554 EXPECT_EQ(controller().GetLastCommittedEntryIndex(), 1); | 554 EXPECT_EQ(controller().GetLastCommittedEntryIndex(), 1); |
555 EXPECT_FALSE(controller().GetPendingEntry()); | 555 EXPECT_FALSE(controller().GetPendingEntry()); |
556 // New message should be sent out to make sure to enter view-source mode. | 556 // New message should be sent out to make sure to enter view-source mode. |
557 EXPECT_TRUE(process()->sink().GetUniqueMessageMatching( | 557 EXPECT_TRUE(process()->sink().GetUniqueMessageMatching( |
558 ViewMsg_EnableViewSourceMode::ID)); | 558 ViewMsg_EnableViewSourceMode::ID)); |
559 } | 559 } |
560 | 560 |
561 // Tests the Init function by checking the initial RenderViewHost. | 561 // Tests the Init function by checking the initial RenderViewHost. |
562 TEST_F(RenderViewHostManagerTest, Init) { | 562 TEST_F(RenderFrameHostManagerTest, Init) { |
563 // Using TestBrowserContext. | 563 // Using TestBrowserContext. |
564 SiteInstanceImpl* instance = | 564 SiteInstanceImpl* instance = |
565 static_cast<SiteInstanceImpl*>(SiteInstance::Create(browser_context())); | 565 static_cast<SiteInstanceImpl*>(SiteInstance::Create(browser_context())); |
566 EXPECT_FALSE(instance->HasSite()); | 566 EXPECT_FALSE(instance->HasSite()); |
567 | 567 |
568 scoped_ptr<TestWebContents> web_contents( | 568 scoped_ptr<TestWebContents> web_contents( |
569 TestWebContents::Create(browser_context(), instance)); | 569 TestWebContents::Create(browser_context(), instance)); |
570 RenderViewHostManager manager(web_contents.get(), web_contents.get(), | 570 RenderFrameHostManager manager(web_contents.get(), web_contents.get(), |
571 web_contents.get()); | 571 web_contents.get()); |
572 | 572 |
573 manager.Init(browser_context(), instance, MSG_ROUTING_NONE, MSG_ROUTING_NONE); | 573 manager.Init(browser_context(), instance, MSG_ROUTING_NONE, MSG_ROUTING_NONE); |
574 | 574 |
575 RenderViewHost* host = manager.current_host(); | 575 RenderViewHost* host = manager.current_host(); |
576 ASSERT_TRUE(host); | 576 ASSERT_TRUE(host); |
577 EXPECT_EQ(instance, host->GetSiteInstance()); | 577 EXPECT_EQ(instance, host->GetSiteInstance()); |
578 EXPECT_EQ(web_contents.get(), host->GetDelegate()); | 578 EXPECT_EQ(web_contents.get(), host->GetDelegate()); |
579 EXPECT_TRUE(manager.GetRenderWidgetHostView()); | 579 EXPECT_TRUE(manager.GetRenderWidgetHostView()); |
580 EXPECT_FALSE(manager.pending_render_view_host()); | 580 EXPECT_FALSE(manager.pending_render_view_host()); |
581 } | 581 } |
582 | 582 |
583 // Tests the Navigate function. We navigate three sites consecutively and check | 583 // Tests the Navigate function. We navigate three sites consecutively and check |
584 // how the pending/committed RenderViewHost are modified. | 584 // how the pending/committed RenderViewHost are modified. |
585 TEST_F(RenderViewHostManagerTest, Navigate) { | 585 TEST_F(RenderFrameHostManagerTest, Navigate) { |
586 TestNotificationTracker notifications; | 586 TestNotificationTracker notifications; |
587 | 587 |
588 SiteInstance* instance = SiteInstance::Create(browser_context()); | 588 SiteInstance* instance = SiteInstance::Create(browser_context()); |
589 | 589 |
590 scoped_ptr<TestWebContents> web_contents( | 590 scoped_ptr<TestWebContents> web_contents( |
591 TestWebContents::Create(browser_context(), instance)); | 591 TestWebContents::Create(browser_context(), instance)); |
592 notifications.ListenFor(NOTIFICATION_RENDER_VIEW_HOST_CHANGED, | 592 notifications.ListenFor(NOTIFICATION_RENDER_VIEW_HOST_CHANGED, |
593 Source<WebContents>(web_contents.get())); | 593 Source<WebContents>(web_contents.get())); |
594 | 594 |
595 // Create. | 595 // Create. |
596 RenderViewHostManager manager(web_contents.get(), web_contents.get(), | 596 RenderFrameHostManager manager(web_contents.get(), web_contents.get(), |
597 web_contents.get()); | 597 web_contents.get()); |
598 | 598 |
599 manager.Init(browser_context(), instance, MSG_ROUTING_NONE, MSG_ROUTING_NONE); | 599 manager.Init(browser_context(), instance, MSG_ROUTING_NONE, MSG_ROUTING_NONE); |
600 | 600 |
601 RenderViewHost* host; | 601 RenderViewHost* host; |
602 | 602 |
603 // 1) The first navigation. -------------------------- | 603 // 1) The first navigation. -------------------------- |
604 const GURL kUrl1("http://www.google.com/"); | 604 const GURL kUrl1("http://www.google.com/"); |
605 NavigationEntryImpl entry1( | 605 NavigationEntryImpl entry1( |
606 NULL /* instance */, -1 /* page_id */, kUrl1, Referrer(), | 606 NULL /* instance */, -1 /* page_id */, kUrl1, Referrer(), |
607 string16() /* title */, PAGE_TRANSITION_TYPED, | 607 string16() /* title */, PAGE_TRANSITION_TYPED, |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
667 | 667 |
668 // We should observe a notification. | 668 // We should observe a notification. |
669 EXPECT_TRUE( | 669 EXPECT_TRUE( |
670 notifications.Check1AndReset(NOTIFICATION_RENDER_VIEW_HOST_CHANGED)); | 670 notifications.Check1AndReset(NOTIFICATION_RENDER_VIEW_HOST_CHANGED)); |
671 } | 671 } |
672 | 672 |
673 // Tests the Navigate function. In this unit test we verify that the Navigate | 673 // Tests the Navigate function. In this unit test we verify that the Navigate |
674 // function can handle a new navigation event before the previous navigation | 674 // function can handle a new navigation event before the previous navigation |
675 // has been committed. This is also a regression test for | 675 // has been committed. This is also a regression test for |
676 // http://crbug.com/104600. | 676 // http://crbug.com/104600. |
677 TEST_F(RenderViewHostManagerTest, NavigateWithEarlyReNavigation) { | 677 TEST_F(RenderFrameHostManagerTest, NavigateWithEarlyReNavigation) { |
678 TestNotificationTracker notifications; | 678 TestNotificationTracker notifications; |
679 | 679 |
680 SiteInstance* instance = SiteInstance::Create(browser_context()); | 680 SiteInstance* instance = SiteInstance::Create(browser_context()); |
681 | 681 |
682 scoped_ptr<TestWebContents> web_contents( | 682 scoped_ptr<TestWebContents> web_contents( |
683 TestWebContents::Create(browser_context(), instance)); | 683 TestWebContents::Create(browser_context(), instance)); |
684 notifications.ListenFor(NOTIFICATION_RENDER_VIEW_HOST_CHANGED, | 684 notifications.ListenFor(NOTIFICATION_RENDER_VIEW_HOST_CHANGED, |
685 Source<WebContents>(web_contents.get())); | 685 Source<WebContents>(web_contents.get())); |
686 | 686 |
687 // Create. | 687 // Create. |
688 RenderViewHostManager manager(web_contents.get(), web_contents.get(), | 688 RenderFrameHostManager manager(web_contents.get(), web_contents.get(), |
689 web_contents.get()); | 689 web_contents.get()); |
690 | 690 |
691 manager.Init(browser_context(), instance, MSG_ROUTING_NONE, MSG_ROUTING_NONE); | 691 manager.Init(browser_context(), instance, MSG_ROUTING_NONE, MSG_ROUTING_NONE); |
692 | 692 |
693 // 1) The first navigation. -------------------------- | 693 // 1) The first navigation. -------------------------- |
694 const GURL kUrl1("http://www.google.com/"); | 694 const GURL kUrl1("http://www.google.com/"); |
695 NavigationEntryImpl entry1(NULL /* instance */, -1 /* page_id */, kUrl1, | 695 NavigationEntryImpl entry1(NULL /* instance */, -1 /* page_id */, kUrl1, |
696 Referrer(), string16() /* title */, | 696 Referrer(), string16() /* title */, |
697 PAGE_TRANSITION_TYPED, | 697 PAGE_TRANSITION_TYPED, |
698 false /* is_renderer_init */); | 698 false /* is_renderer_init */); |
699 RenderViewHost* host = manager.Navigate(entry1); | 699 RenderViewHost* host = manager.Navigate(entry1); |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
746 // the RVH): Simulate response from RenderView for ViewMsg_ShouldClose sent by | 746 // the RVH): Simulate response from RenderView for ViewMsg_ShouldClose sent by |
747 // FirePageBeforeUnload. | 747 // FirePageBeforeUnload. |
748 TestRenderViewHost* test_host = static_cast<TestRenderViewHost*>(host); | 748 TestRenderViewHost* test_host = static_cast<TestRenderViewHost*>(host); |
749 MockRenderProcessHost* test_process_host = | 749 MockRenderProcessHost* test_process_host = |
750 static_cast<MockRenderProcessHost*>(test_host->GetProcess()); | 750 static_cast<MockRenderProcessHost*>(test_host->GetProcess()); |
751 EXPECT_TRUE(test_process_host->sink().GetUniqueMessageMatching( | 751 EXPECT_TRUE(test_process_host->sink().GetUniqueMessageMatching( |
752 ViewMsg_ShouldClose::ID)); | 752 ViewMsg_ShouldClose::ID)); |
753 test_host->SendShouldCloseACK(true); | 753 test_host->SendShouldCloseACK(true); |
754 | 754 |
755 // CrossSiteResourceHandler::StartCrossSiteTransition triggers a | 755 // CrossSiteResourceHandler::StartCrossSiteTransition triggers a |
756 // call of RenderViewHostManager::SwapOutOldPage before | 756 // call of RenderFrameHostManager::SwapOutOldPage before |
757 // RenderViewHostManager::DidNavigateMainFrame is called. | 757 // RenderFrameHostManager::DidNavigateMainFrame is called. |
758 // The RVH is not swapped out until the commit. | 758 // The RVH is not swapped out until the commit. |
759 manager.SwapOutOldPage(); | 759 manager.SwapOutOldPage(); |
760 EXPECT_TRUE(test_process_host->sink().GetUniqueMessageMatching( | 760 EXPECT_TRUE(test_process_host->sink().GetUniqueMessageMatching( |
761 ViewMsg_SwapOut::ID)); | 761 ViewMsg_SwapOut::ID)); |
762 test_host->OnSwappedOut(false); | 762 test_host->OnSwappedOut(false); |
763 | 763 |
764 EXPECT_EQ(host, manager.current_host()); | 764 EXPECT_EQ(host, manager.current_host()); |
765 EXPECT_FALSE(static_cast<RenderViewHostImpl*>( | 765 EXPECT_FALSE(static_cast<RenderViewHostImpl*>( |
766 manager.current_host())->is_swapped_out()); | 766 manager.current_host())->is_swapped_out()); |
767 EXPECT_EQ(host2, manager.pending_render_view_host()); | 767 EXPECT_EQ(host2, manager.pending_render_view_host()); |
(...skipping 24 matching lines...) Expand all Loading... |
792 EXPECT_EQ(host, manager.current_host()); | 792 EXPECT_EQ(host, manager.current_host()); |
793 EXPECT_FALSE(static_cast<RenderViewHostImpl*>( | 793 EXPECT_FALSE(static_cast<RenderViewHostImpl*>( |
794 manager.current_host())->is_swapped_out()); | 794 manager.current_host())->is_swapped_out()); |
795 | 795 |
796 // Simulate a response to the second beforeunload request. | 796 // Simulate a response to the second beforeunload request. |
797 EXPECT_TRUE(test_process_host->sink().GetUniqueMessageMatching( | 797 EXPECT_TRUE(test_process_host->sink().GetUniqueMessageMatching( |
798 ViewMsg_ShouldClose::ID)); | 798 ViewMsg_ShouldClose::ID)); |
799 test_host->SendShouldCloseACK(true); | 799 test_host->SendShouldCloseACK(true); |
800 | 800 |
801 // CrossSiteResourceHandler::StartCrossSiteTransition triggers a | 801 // CrossSiteResourceHandler::StartCrossSiteTransition triggers a |
802 // call of RenderViewHostManager::SwapOutOldPage before | 802 // call of RenderFrameHostManager::SwapOutOldPage before |
803 // RenderViewHostManager::DidNavigateMainFrame is called. | 803 // RenderFrameHostManager::DidNavigateMainFrame is called. |
804 // The RVH is not swapped out until the commit. | 804 // The RVH is not swapped out until the commit. |
805 manager.SwapOutOldPage(); | 805 manager.SwapOutOldPage(); |
806 EXPECT_TRUE(test_process_host->sink().GetUniqueMessageMatching( | 806 EXPECT_TRUE(test_process_host->sink().GetUniqueMessageMatching( |
807 ViewMsg_SwapOut::ID)); | 807 ViewMsg_SwapOut::ID)); |
808 test_host->OnSwappedOut(false); | 808 test_host->OnSwappedOut(false); |
809 | 809 |
810 // Commit. | 810 // Commit. |
811 manager.DidNavigateMainFrame(host3); | 811 manager.DidNavigateMainFrame(host3); |
812 EXPECT_TRUE(host3 == manager.current_host()); | 812 EXPECT_TRUE(host3 == manager.current_host()); |
813 ASSERT_TRUE(host3); | 813 ASSERT_TRUE(host3); |
814 EXPECT_TRUE(static_cast<SiteInstanceImpl*>(host3->GetSiteInstance())-> | 814 EXPECT_TRUE(static_cast<SiteInstanceImpl*>(host3->GetSiteInstance())-> |
815 HasSite()); | 815 HasSite()); |
816 // Check the pending RenderViewHost has been committed. | 816 // Check the pending RenderViewHost has been committed. |
817 EXPECT_FALSE(manager.pending_render_view_host()); | 817 EXPECT_FALSE(manager.pending_render_view_host()); |
818 | 818 |
819 // We should observe a notification. | 819 // We should observe a notification. |
820 EXPECT_TRUE( | 820 EXPECT_TRUE( |
821 notifications.Check1AndReset(NOTIFICATION_RENDER_VIEW_HOST_CHANGED)); | 821 notifications.Check1AndReset(NOTIFICATION_RENDER_VIEW_HOST_CHANGED)); |
822 } | 822 } |
823 | 823 |
824 // Tests WebUI creation. | 824 // Tests WebUI creation. |
825 TEST_F(RenderViewHostManagerTest, WebUI) { | 825 TEST_F(RenderFrameHostManagerTest, WebUI) { |
826 set_should_create_webui(true); | 826 set_should_create_webui(true); |
827 SiteInstance* instance = SiteInstance::Create(browser_context()); | 827 SiteInstance* instance = SiteInstance::Create(browser_context()); |
828 | 828 |
829 scoped_ptr<TestWebContents> web_contents( | 829 scoped_ptr<TestWebContents> web_contents( |
830 TestWebContents::Create(browser_context(), instance)); | 830 TestWebContents::Create(browser_context(), instance)); |
831 RenderViewHostManager manager(web_contents.get(), web_contents.get(), | 831 RenderFrameHostManager manager(web_contents.get(), web_contents.get(), |
832 web_contents.get()); | 832 web_contents.get()); |
833 | 833 |
834 manager.Init(browser_context(), instance, MSG_ROUTING_NONE, MSG_ROUTING_NONE); | 834 manager.Init(browser_context(), instance, MSG_ROUTING_NONE, MSG_ROUTING_NONE); |
835 EXPECT_FALSE(manager.current_host()->IsRenderViewLive()); | 835 EXPECT_FALSE(manager.current_host()->IsRenderViewLive()); |
836 | 836 |
837 const GURL kUrl("chrome://foo"); | 837 const GURL kUrl("chrome://foo"); |
838 NavigationEntryImpl entry(NULL /* instance */, -1 /* page_id */, kUrl, | 838 NavigationEntryImpl entry(NULL /* instance */, -1 /* page_id */, kUrl, |
839 Referrer(), string16() /* title */, | 839 Referrer(), string16() /* title */, |
840 PAGE_TRANSITION_TYPED, | 840 PAGE_TRANSITION_TYPED, |
841 false /* is_renderer_init */); | 841 false /* is_renderer_init */); |
842 RenderViewHost* host = manager.Navigate(entry); | 842 RenderViewHost* host = manager.Navigate(entry); |
(...skipping 18 matching lines...) Expand all Loading... |
861 EXPECT_FALSE(manager.pending_web_ui()); | 861 EXPECT_FALSE(manager.pending_web_ui()); |
862 EXPECT_TRUE(manager.web_ui()); | 862 EXPECT_TRUE(manager.web_ui()); |
863 | 863 |
864 // Commit. | 864 // Commit. |
865 manager.DidNavigateMainFrame(host); | 865 manager.DidNavigateMainFrame(host); |
866 EXPECT_TRUE(host->GetEnabledBindings() & BINDINGS_POLICY_WEB_UI); | 866 EXPECT_TRUE(host->GetEnabledBindings() & BINDINGS_POLICY_WEB_UI); |
867 } | 867 } |
868 | 868 |
869 // Tests that we can open a WebUI link in a new tab from a WebUI page and still | 869 // Tests that we can open a WebUI link in a new tab from a WebUI page and still |
870 // grant the correct bindings. http://crbug.com/189101. | 870 // grant the correct bindings. http://crbug.com/189101. |
871 TEST_F(RenderViewHostManagerTest, WebUIInNewTab) { | 871 TEST_F(RenderFrameHostManagerTest, WebUIInNewTab) { |
872 set_should_create_webui(true); | 872 set_should_create_webui(true); |
873 SiteInstance* blank_instance = SiteInstance::Create(browser_context()); | 873 SiteInstance* blank_instance = SiteInstance::Create(browser_context()); |
874 | 874 |
875 // Create a blank tab. | 875 // Create a blank tab. |
876 scoped_ptr<TestWebContents> web_contents1( | 876 scoped_ptr<TestWebContents> web_contents1( |
877 TestWebContents::Create(browser_context(), blank_instance)); | 877 TestWebContents::Create(browser_context(), blank_instance)); |
878 RenderViewHostManager manager1(web_contents1.get(), web_contents1.get(), | 878 RenderFrameHostManager manager1(web_contents1.get(), web_contents1.get(), |
879 web_contents1.get()); | 879 web_contents1.get()); |
880 manager1.Init( | 880 manager1.Init( |
881 browser_context(), blank_instance, MSG_ROUTING_NONE, MSG_ROUTING_NONE); | 881 browser_context(), blank_instance, MSG_ROUTING_NONE, MSG_ROUTING_NONE); |
882 // Test the case that new RVH is considered live. | 882 // Test the case that new RVH is considered live. |
883 manager1.current_host()->CreateRenderView(string16(), -1, -1); | 883 manager1.current_host()->CreateRenderView(string16(), -1, -1); |
884 | 884 |
885 // Navigate to a WebUI page. | 885 // Navigate to a WebUI page. |
886 const GURL kUrl1("chrome://foo"); | 886 const GURL kUrl1("chrome://foo"); |
887 NavigationEntryImpl entry1(NULL /* instance */, -1 /* page_id */, kUrl1, | 887 NavigationEntryImpl entry1(NULL /* instance */, -1 /* page_id */, kUrl1, |
888 Referrer(), string16() /* title */, | 888 Referrer(), string16() /* title */, |
889 PAGE_TRANSITION_TYPED, | 889 PAGE_TRANSITION_TYPED, |
890 false /* is_renderer_init */); | 890 false /* is_renderer_init */); |
891 RenderViewHost* host1 = manager1.Navigate(entry1); | 891 RenderViewHost* host1 = manager1.Navigate(entry1); |
892 | 892 |
893 // We should have a pending navigation to the WebUI RenderViewHost. | 893 // We should have a pending navigation to the WebUI RenderViewHost. |
894 // It should already have bindings. | 894 // It should already have bindings. |
895 EXPECT_EQ(host1, manager1.pending_render_view_host()); | 895 EXPECT_EQ(host1, manager1.pending_render_view_host()); |
896 EXPECT_NE(host1, manager1.current_host()); | 896 EXPECT_NE(host1, manager1.current_host()); |
897 EXPECT_TRUE(host1->GetEnabledBindings() & BINDINGS_POLICY_WEB_UI); | 897 EXPECT_TRUE(host1->GetEnabledBindings() & BINDINGS_POLICY_WEB_UI); |
898 | 898 |
899 // Commit and ensure we still have bindings. | 899 // Commit and ensure we still have bindings. |
900 manager1.DidNavigateMainFrame(host1); | 900 manager1.DidNavigateMainFrame(host1); |
901 SiteInstance* webui_instance = host1->GetSiteInstance(); | 901 SiteInstance* webui_instance = host1->GetSiteInstance(); |
902 EXPECT_EQ(host1, manager1.current_host()); | 902 EXPECT_EQ(host1, manager1.current_host()); |
903 EXPECT_TRUE(host1->GetEnabledBindings() & BINDINGS_POLICY_WEB_UI); | 903 EXPECT_TRUE(host1->GetEnabledBindings() & BINDINGS_POLICY_WEB_UI); |
904 | 904 |
905 // Now simulate clicking a link that opens in a new tab. | 905 // Now simulate clicking a link that opens in a new tab. |
906 scoped_ptr<TestWebContents> web_contents2( | 906 scoped_ptr<TestWebContents> web_contents2( |
907 TestWebContents::Create(browser_context(), webui_instance)); | 907 TestWebContents::Create(browser_context(), webui_instance)); |
908 RenderViewHostManager manager2(web_contents2.get(), web_contents2.get(), | 908 RenderFrameHostManager manager2(web_contents2.get(), web_contents2.get(), |
909 web_contents2.get()); | 909 web_contents2.get()); |
910 manager2.Init( | 910 manager2.Init( |
911 browser_context(), webui_instance, MSG_ROUTING_NONE, MSG_ROUTING_NONE); | 911 browser_context(), webui_instance, MSG_ROUTING_NONE, MSG_ROUTING_NONE); |
912 // Make sure the new RVH is considered live. This is usually done in | 912 // Make sure the new RVH is considered live. This is usually done in |
913 // RenderWidgetHost::Init when opening a new tab from a link. | 913 // RenderWidgetHost::Init when opening a new tab from a link. |
914 manager2.current_host()->CreateRenderView(string16(), -1, -1); | 914 manager2.current_host()->CreateRenderView(string16(), -1, -1); |
915 | 915 |
916 const GURL kUrl2("chrome://foo/bar"); | 916 const GURL kUrl2("chrome://foo/bar"); |
917 NavigationEntryImpl entry2(NULL /* instance */, -1 /* page_id */, kUrl2, | 917 NavigationEntryImpl entry2(NULL /* instance */, -1 /* page_id */, kUrl2, |
918 Referrer(), string16() /* title */, | 918 Referrer(), string16() /* title */, |
919 PAGE_TRANSITION_LINK, | 919 PAGE_TRANSITION_LINK, |
920 true /* is_renderer_init */); | 920 true /* is_renderer_init */); |
921 RenderViewHost* host2 = manager2.Navigate(entry2); | 921 RenderViewHost* host2 = manager2.Navigate(entry2); |
922 | 922 |
923 // No cross-process transition happens because we are already in the right | 923 // No cross-process transition happens because we are already in the right |
924 // SiteInstance. We should grant bindings immediately. | 924 // SiteInstance. We should grant bindings immediately. |
925 EXPECT_EQ(host2, manager2.current_host()); | 925 EXPECT_EQ(host2, manager2.current_host()); |
926 EXPECT_TRUE(host2->GetEnabledBindings() & BINDINGS_POLICY_WEB_UI); | 926 EXPECT_TRUE(host2->GetEnabledBindings() & BINDINGS_POLICY_WEB_UI); |
927 | 927 |
928 manager2.DidNavigateMainFrame(host2); | 928 manager2.DidNavigateMainFrame(host2); |
929 } | 929 } |
930 | 930 |
931 // Tests that we don't end up in an inconsistent state if a page does a back and | 931 // Tests that we don't end up in an inconsistent state if a page does a back and |
932 // then reload. http://crbug.com/51680 | 932 // then reload. http://crbug.com/51680 |
933 TEST_F(RenderViewHostManagerTest, PageDoesBackAndReload) { | 933 TEST_F(RenderFrameHostManagerTest, PageDoesBackAndReload) { |
934 const GURL kUrl1("http://www.google.com/"); | 934 const GURL kUrl1("http://www.google.com/"); |
935 const GURL kUrl2("http://www.evil-site.com/"); | 935 const GURL kUrl2("http://www.evil-site.com/"); |
936 | 936 |
937 // Navigate to a safe site, then an evil site. | 937 // Navigate to a safe site, then an evil site. |
938 // This will switch RenderViewHosts. We cannot assert that the first and | 938 // This will switch RenderViewHosts. We cannot assert that the first and |
939 // second RVHs are different, though, because the first one may be promptly | 939 // second RVHs are different, though, because the first one may be promptly |
940 // deleted. | 940 // deleted. |
941 contents()->NavigateAndCommit(kUrl1); | 941 contents()->NavigateAndCommit(kUrl1); |
942 contents()->NavigateAndCommit(kUrl2); | 942 contents()->NavigateAndCommit(kUrl2); |
943 RenderViewHost* evil_rvh = contents()->GetRenderViewHost(); | 943 RenderViewHost* evil_rvh = contents()->GetRenderViewHost(); |
(...skipping 26 matching lines...) Expand all Loading... |
970 | 970 |
971 // Also we should not have a pending navigation entry. | 971 // Also we should not have a pending navigation entry. |
972 EXPECT_TRUE(contents()->GetController().GetPendingEntry() == NULL); | 972 EXPECT_TRUE(contents()->GetController().GetPendingEntry() == NULL); |
973 NavigationEntry* entry = contents()->GetController().GetVisibleEntry(); | 973 NavigationEntry* entry = contents()->GetController().GetVisibleEntry(); |
974 ASSERT_TRUE(entry != NULL); | 974 ASSERT_TRUE(entry != NULL); |
975 EXPECT_EQ(kUrl2, entry->GetURL()); | 975 EXPECT_EQ(kUrl2, entry->GetURL()); |
976 } | 976 } |
977 | 977 |
978 // Ensure that we can go back and forward even if a SwapOut ACK isn't received. | 978 // Ensure that we can go back and forward even if a SwapOut ACK isn't received. |
979 // See http://crbug.com/93427. | 979 // See http://crbug.com/93427. |
980 TEST_F(RenderViewHostManagerTest, NavigateAfterMissingSwapOutACK) { | 980 TEST_F(RenderFrameHostManagerTest, NavigateAfterMissingSwapOutACK) { |
981 const GURL kUrl1("http://www.google.com/"); | 981 const GURL kUrl1("http://www.google.com/"); |
982 const GURL kUrl2("http://www.chromium.org/"); | 982 const GURL kUrl2("http://www.chromium.org/"); |
983 | 983 |
984 // Navigate to two pages. | 984 // Navigate to two pages. |
985 contents()->NavigateAndCommit(kUrl1); | 985 contents()->NavigateAndCommit(kUrl1); |
986 TestRenderViewHost* rvh1 = test_rvh(); | 986 TestRenderViewHost* rvh1 = test_rvh(); |
987 | 987 |
988 // Keep active_view_count nonzero so that no swapped out views in | 988 // Keep active_view_count nonzero so that no swapped out views in |
989 // this SiteInstance get forcefully deleted. | 989 // this SiteInstance get forcefully deleted. |
990 static_cast<SiteInstanceImpl*>(rvh1->GetSiteInstance())-> | 990 static_cast<SiteInstanceImpl*>(rvh1->GetSiteInstance())-> |
(...skipping 27 matching lines...) Expand all Loading... |
1018 const NavigationEntry* entry2 = contents()->GetController().GetPendingEntry(); | 1018 const NavigationEntry* entry2 = contents()->GetController().GetPendingEntry(); |
1019 rvh2->SendNavigate(entry2->GetPageID(), entry2->GetURL()); | 1019 rvh2->SendNavigate(entry2->GetPageID(), entry2->GetURL()); |
1020 EXPECT_EQ(rvh2, rvh()); | 1020 EXPECT_EQ(rvh2, rvh()); |
1021 EXPECT_FALSE(rvh2->is_swapped_out()); | 1021 EXPECT_FALSE(rvh2->is_swapped_out()); |
1022 EXPECT_TRUE(rvh1->is_swapped_out()); | 1022 EXPECT_TRUE(rvh1->is_swapped_out()); |
1023 } | 1023 } |
1024 | 1024 |
1025 // Test that we create swapped out RVHs for the opener chain when navigating an | 1025 // Test that we create swapped out RVHs for the opener chain when navigating an |
1026 // opened tab cross-process. This allows us to support certain cross-process | 1026 // opened tab cross-process. This allows us to support certain cross-process |
1027 // JavaScript calls (http://crbug.com/99202). | 1027 // JavaScript calls (http://crbug.com/99202). |
1028 TEST_F(RenderViewHostManagerTest, CreateSwappedOutOpenerRVHs) { | 1028 TEST_F(RenderFrameHostManagerTest, CreateSwappedOutOpenerRVHs) { |
1029 const GURL kUrl1("http://www.google.com/"); | 1029 const GURL kUrl1("http://www.google.com/"); |
1030 const GURL kUrl2("http://www.chromium.org/"); | 1030 const GURL kUrl2("http://www.chromium.org/"); |
1031 const GURL kChromeUrl("chrome://foo"); | 1031 const GURL kChromeUrl("chrome://foo"); |
1032 | 1032 |
1033 // Navigate to an initial URL. | 1033 // Navigate to an initial URL. |
1034 contents()->NavigateAndCommit(kUrl1); | 1034 contents()->NavigateAndCommit(kUrl1); |
1035 RenderViewHostManager* manager = contents()->GetRenderManagerForTesting(); | 1035 RenderFrameHostManager* manager = contents()->GetRenderManagerForTesting(); |
1036 TestRenderViewHost* rvh1 = test_rvh(); | 1036 TestRenderViewHost* rvh1 = test_rvh(); |
1037 | 1037 |
1038 // Create 2 new tabs and simulate them being the opener chain for the main | 1038 // Create 2 new tabs and simulate them being the opener chain for the main |
1039 // tab. They should be in the same SiteInstance. | 1039 // tab. They should be in the same SiteInstance. |
1040 scoped_ptr<TestWebContents> opener1( | 1040 scoped_ptr<TestWebContents> opener1( |
1041 TestWebContents::Create(browser_context(), rvh1->GetSiteInstance())); | 1041 TestWebContents::Create(browser_context(), rvh1->GetSiteInstance())); |
1042 RenderViewHostManager* opener1_manager = | 1042 RenderFrameHostManager* opener1_manager = |
1043 opener1->GetRenderManagerForTesting(); | 1043 opener1->GetRenderManagerForTesting(); |
1044 contents()->SetOpener(opener1.get()); | 1044 contents()->SetOpener(opener1.get()); |
1045 | 1045 |
1046 scoped_ptr<TestWebContents> opener2( | 1046 scoped_ptr<TestWebContents> opener2( |
1047 TestWebContents::Create(browser_context(), rvh1->GetSiteInstance())); | 1047 TestWebContents::Create(browser_context(), rvh1->GetSiteInstance())); |
1048 RenderViewHostManager* opener2_manager = | 1048 RenderFrameHostManager* opener2_manager = |
1049 opener2->GetRenderManagerForTesting(); | 1049 opener2->GetRenderManagerForTesting(); |
1050 opener1->SetOpener(opener2.get()); | 1050 opener1->SetOpener(opener2.get()); |
1051 | 1051 |
1052 // Navigate to a cross-site URL (different SiteInstance but same | 1052 // Navigate to a cross-site URL (different SiteInstance but same |
1053 // BrowsingInstance). | 1053 // BrowsingInstance). |
1054 contents()->NavigateAndCommit(kUrl2); | 1054 contents()->NavigateAndCommit(kUrl2); |
1055 TestRenderViewHost* rvh2 = test_rvh(); | 1055 TestRenderViewHost* rvh2 = test_rvh(); |
1056 EXPECT_NE(rvh1->GetSiteInstance(), rvh2->GetSiteInstance()); | 1056 EXPECT_NE(rvh1->GetSiteInstance(), rvh2->GetSiteInstance()); |
1057 EXPECT_TRUE(rvh1->GetSiteInstance()->IsRelatedSiteInstance( | 1057 EXPECT_TRUE(rvh1->GetSiteInstance()->IsRelatedSiteInstance( |
1058 rvh2->GetSiteInstance())); | 1058 rvh2->GetSiteInstance())); |
(...skipping 25 matching lines...) Expand all Loading... |
1084 // No scripting is allowed across BrowsingInstances, so we should not create | 1084 // No scripting is allowed across BrowsingInstances, so we should not create |
1085 // swapped out RVHs for the opener chain in this case. | 1085 // swapped out RVHs for the opener chain in this case. |
1086 EXPECT_FALSE(opener1_manager->GetSwappedOutRenderViewHost( | 1086 EXPECT_FALSE(opener1_manager->GetSwappedOutRenderViewHost( |
1087 rvh3->GetSiteInstance())); | 1087 rvh3->GetSiteInstance())); |
1088 EXPECT_FALSE(opener2_manager->GetSwappedOutRenderViewHost( | 1088 EXPECT_FALSE(opener2_manager->GetSwappedOutRenderViewHost( |
1089 rvh3->GetSiteInstance())); | 1089 rvh3->GetSiteInstance())); |
1090 } | 1090 } |
1091 | 1091 |
1092 // Test that we clean up swapped out RenderViewHosts when a process hosting | 1092 // Test that we clean up swapped out RenderViewHosts when a process hosting |
1093 // those associated RenderViews crashes. http://crbug.com/258993 | 1093 // those associated RenderViews crashes. http://crbug.com/258993 |
1094 TEST_F(RenderViewHostManagerTest, CleanUpSwappedOutRVHOnProcessCrash) { | 1094 TEST_F(RenderFrameHostManagerTest, CleanUpSwappedOutRVHOnProcessCrash) { |
1095 const GURL kUrl1("http://www.google.com/"); | 1095 const GURL kUrl1("http://www.google.com/"); |
1096 const GURL kUrl2("http://www.chromium.org/"); | 1096 const GURL kUrl2("http://www.chromium.org/"); |
1097 | 1097 |
1098 // Navigate to an initial URL. | 1098 // Navigate to an initial URL. |
1099 contents()->NavigateAndCommit(kUrl1); | 1099 contents()->NavigateAndCommit(kUrl1); |
1100 TestRenderViewHost* rvh1 = test_rvh(); | 1100 TestRenderViewHost* rvh1 = test_rvh(); |
1101 | 1101 |
1102 // Create a new tab as an opener for the main tab. | 1102 // Create a new tab as an opener for the main tab. |
1103 scoped_ptr<TestWebContents> opener1( | 1103 scoped_ptr<TestWebContents> opener1( |
1104 TestWebContents::Create(browser_context(), rvh1->GetSiteInstance())); | 1104 TestWebContents::Create(browser_context(), rvh1->GetSiteInstance())); |
1105 RenderViewHostManager* opener1_manager = | 1105 RenderFrameHostManager* opener1_manager = |
1106 opener1->GetRenderManagerForTesting(); | 1106 opener1->GetRenderManagerForTesting(); |
1107 contents()->SetOpener(opener1.get()); | 1107 contents()->SetOpener(opener1.get()); |
1108 | 1108 |
1109 // Make sure the new opener RVH is considered live. | 1109 // Make sure the new opener RVH is considered live. |
1110 opener1_manager->current_host()->CreateRenderView(string16(), -1, -1); | 1110 opener1_manager->current_host()->CreateRenderView(string16(), -1, -1); |
1111 | 1111 |
1112 // Use a cross-process navigation in the opener to swap out the old RVH. | 1112 // Use a cross-process navigation in the opener to swap out the old RVH. |
1113 EXPECT_FALSE(opener1_manager->GetSwappedOutRenderViewHost( | 1113 EXPECT_FALSE(opener1_manager->GetSwappedOutRenderViewHost( |
1114 rvh1->GetSiteInstance())); | 1114 rvh1->GetSiteInstance())); |
1115 opener1->NavigateAndCommit(kUrl2); | 1115 opener1->NavigateAndCommit(kUrl2); |
(...skipping 19 matching lines...) Expand all Loading... |
1135 // in the original SiteInstance. | 1135 // in the original SiteInstance. |
1136 contents()->GetController().Reload(true); | 1136 contents()->GetController().Reload(true); |
1137 EXPECT_EQ(opener1_manager->GetSwappedOutRenderViewHost( | 1137 EXPECT_EQ(opener1_manager->GetSwappedOutRenderViewHost( |
1138 rvh1->GetSiteInstance())->GetRoutingID(), | 1138 rvh1->GetSiteInstance())->GetRoutingID(), |
1139 test_rvh()->opener_route_id()); | 1139 test_rvh()->opener_route_id()); |
1140 } | 1140 } |
1141 | 1141 |
1142 // Test that RenderViewHosts created for WebUI navigations are properly | 1142 // Test that RenderViewHosts created for WebUI navigations are properly |
1143 // granted WebUI bindings even if an unprivileged swapped out RenderViewHost | 1143 // granted WebUI bindings even if an unprivileged swapped out RenderViewHost |
1144 // is in the same process (http://crbug.com/79918). | 1144 // is in the same process (http://crbug.com/79918). |
1145 TEST_F(RenderViewHostManagerTest, EnableWebUIWithSwappedOutOpener) { | 1145 TEST_F(RenderFrameHostManagerTest, EnableWebUIWithSwappedOutOpener) { |
1146 set_should_create_webui(true); | 1146 set_should_create_webui(true); |
1147 const GURL kSettingsUrl("chrome://chrome/settings"); | 1147 const GURL kSettingsUrl("chrome://chrome/settings"); |
1148 const GURL kPluginUrl("chrome://plugins"); | 1148 const GURL kPluginUrl("chrome://plugins"); |
1149 | 1149 |
1150 // Navigate to an initial WebUI URL. | 1150 // Navigate to an initial WebUI URL. |
1151 contents()->NavigateAndCommit(kSettingsUrl); | 1151 contents()->NavigateAndCommit(kSettingsUrl); |
1152 | 1152 |
1153 // Ensure the RVH has WebUI bindings. | 1153 // Ensure the RVH has WebUI bindings. |
1154 TestRenderViewHost* rvh1 = test_rvh(); | 1154 TestRenderViewHost* rvh1 = test_rvh(); |
1155 EXPECT_TRUE(rvh1->GetEnabledBindings() & BINDINGS_POLICY_WEB_UI); | 1155 EXPECT_TRUE(rvh1->GetEnabledBindings() & BINDINGS_POLICY_WEB_UI); |
1156 | 1156 |
1157 // Create a new tab and simulate it being the opener for the main | 1157 // Create a new tab and simulate it being the opener for the main |
1158 // tab. It should be in the same SiteInstance. | 1158 // tab. It should be in the same SiteInstance. |
1159 scoped_ptr<TestWebContents> opener1( | 1159 scoped_ptr<TestWebContents> opener1( |
1160 TestWebContents::Create(browser_context(), rvh1->GetSiteInstance())); | 1160 TestWebContents::Create(browser_context(), rvh1->GetSiteInstance())); |
1161 RenderViewHostManager* opener1_manager = | 1161 RenderFrameHostManager* opener1_manager = |
1162 opener1->GetRenderManagerForTesting(); | 1162 opener1->GetRenderManagerForTesting(); |
1163 contents()->SetOpener(opener1.get()); | 1163 contents()->SetOpener(opener1.get()); |
1164 | 1164 |
1165 // Navigate to a different WebUI URL (different SiteInstance, same | 1165 // Navigate to a different WebUI URL (different SiteInstance, same |
1166 // BrowsingInstance). | 1166 // BrowsingInstance). |
1167 contents()->NavigateAndCommit(kPluginUrl); | 1167 contents()->NavigateAndCommit(kPluginUrl); |
1168 TestRenderViewHost* rvh2 = test_rvh(); | 1168 TestRenderViewHost* rvh2 = test_rvh(); |
1169 EXPECT_NE(rvh1->GetSiteInstance(), rvh2->GetSiteInstance()); | 1169 EXPECT_NE(rvh1->GetSiteInstance(), rvh2->GetSiteInstance()); |
1170 EXPECT_TRUE(rvh1->GetSiteInstance()->IsRelatedSiteInstance( | 1170 EXPECT_TRUE(rvh1->GetSiteInstance()->IsRelatedSiteInstance( |
1171 rvh2->GetSiteInstance())); | 1171 rvh2->GetSiteInstance())); |
1172 | 1172 |
1173 // Ensure a swapped out RVH is created in the first opener tab. | 1173 // Ensure a swapped out RVH is created in the first opener tab. |
1174 TestRenderViewHost* opener1_rvh = static_cast<TestRenderViewHost*>( | 1174 TestRenderViewHost* opener1_rvh = static_cast<TestRenderViewHost*>( |
1175 opener1_manager->GetSwappedOutRenderViewHost(rvh2->GetSiteInstance())); | 1175 opener1_manager->GetSwappedOutRenderViewHost(rvh2->GetSiteInstance())); |
1176 EXPECT_TRUE(opener1_manager->IsOnSwappedOutList(opener1_rvh)); | 1176 EXPECT_TRUE(opener1_manager->IsOnSwappedOutList(opener1_rvh)); |
1177 EXPECT_TRUE(opener1_rvh->is_swapped_out()); | 1177 EXPECT_TRUE(opener1_rvh->is_swapped_out()); |
1178 | 1178 |
1179 // Ensure the new RVH has WebUI bindings. | 1179 // Ensure the new RVH has WebUI bindings. |
1180 EXPECT_TRUE(rvh2->GetEnabledBindings() & BINDINGS_POLICY_WEB_UI); | 1180 EXPECT_TRUE(rvh2->GetEnabledBindings() & BINDINGS_POLICY_WEB_UI); |
1181 } | 1181 } |
1182 | 1182 |
1183 // Test that we reuse the same guest SiteInstance if we navigate across sites. | 1183 // Test that we reuse the same guest SiteInstance if we navigate across sites. |
1184 TEST_F(RenderViewHostManagerTest, NoSwapOnGuestNavigations) { | 1184 TEST_F(RenderFrameHostManagerTest, NoSwapOnGuestNavigations) { |
1185 TestNotificationTracker notifications; | 1185 TestNotificationTracker notifications; |
1186 | 1186 |
1187 GURL guest_url(std::string(kGuestScheme).append("://abc123")); | 1187 GURL guest_url(std::string(kGuestScheme).append("://abc123")); |
1188 SiteInstance* instance = | 1188 SiteInstance* instance = |
1189 SiteInstance::CreateForURL(browser_context(), guest_url); | 1189 SiteInstance::CreateForURL(browser_context(), guest_url); |
1190 scoped_ptr<TestWebContents> web_contents( | 1190 scoped_ptr<TestWebContents> web_contents( |
1191 TestWebContents::Create(browser_context(), instance)); | 1191 TestWebContents::Create(browser_context(), instance)); |
1192 | 1192 |
1193 // Create. | 1193 // Create. |
1194 RenderViewHostManager manager(web_contents.get(), web_contents.get(), | 1194 RenderFrameHostManager manager(web_contents.get(), web_contents.get(), |
1195 web_contents.get()); | 1195 web_contents.get()); |
1196 | 1196 |
1197 manager.Init(browser_context(), instance, MSG_ROUTING_NONE, MSG_ROUTING_NONE); | 1197 manager.Init(browser_context(), instance, MSG_ROUTING_NONE, MSG_ROUTING_NONE); |
1198 | 1198 |
1199 RenderViewHost* host; | 1199 RenderViewHost* host; |
1200 | 1200 |
1201 // 1) The first navigation. -------------------------- | 1201 // 1) The first navigation. -------------------------- |
1202 const GURL kUrl1("http://www.google.com/"); | 1202 const GURL kUrl1("http://www.google.com/"); |
1203 NavigationEntryImpl entry1( | 1203 NavigationEntryImpl entry1( |
1204 NULL /* instance */, -1 /* page_id */, kUrl1, Referrer(), | 1204 NULL /* instance */, -1 /* page_id */, kUrl1, Referrer(), |
1205 string16() /* title */, PAGE_TRANSITION_TYPED, | 1205 string16() /* title */, PAGE_TRANSITION_TYPED, |
(...skipping 30 matching lines...) Expand all Loading... |
1236 // Commit. | 1236 // Commit. |
1237 manager.DidNavigateMainFrame(host); | 1237 manager.DidNavigateMainFrame(host); |
1238 EXPECT_EQ(host, manager.current_host()); | 1238 EXPECT_EQ(host, manager.current_host()); |
1239 ASSERT_TRUE(host); | 1239 ASSERT_TRUE(host); |
1240 EXPECT_EQ(static_cast<SiteInstanceImpl*>(host->GetSiteInstance()), | 1240 EXPECT_EQ(static_cast<SiteInstanceImpl*>(host->GetSiteInstance()), |
1241 instance); | 1241 instance); |
1242 } | 1242 } |
1243 | 1243 |
1244 // Test that we cancel a pending RVH if we close the tab while it's pending. | 1244 // Test that we cancel a pending RVH if we close the tab while it's pending. |
1245 // http://crbug.com/294697. | 1245 // http://crbug.com/294697. |
1246 TEST_F(RenderViewHostManagerTest, NavigateWithEarlyClose) { | 1246 TEST_F(RenderFrameHostManagerTest, NavigateWithEarlyClose) { |
1247 TestNotificationTracker notifications; | 1247 TestNotificationTracker notifications; |
1248 | 1248 |
1249 SiteInstance* instance = SiteInstance::Create(browser_context()); | 1249 SiteInstance* instance = SiteInstance::Create(browser_context()); |
1250 | 1250 |
1251 BeforeUnloadFiredWebContentsDelegate delegate; | 1251 BeforeUnloadFiredWebContentsDelegate delegate; |
1252 scoped_ptr<TestWebContents> web_contents( | 1252 scoped_ptr<TestWebContents> web_contents( |
1253 TestWebContents::Create(browser_context(), instance)); | 1253 TestWebContents::Create(browser_context(), instance)); |
1254 web_contents->SetDelegate(&delegate); | 1254 web_contents->SetDelegate(&delegate); |
1255 notifications.ListenFor(NOTIFICATION_RENDER_VIEW_HOST_CHANGED, | 1255 notifications.ListenFor(NOTIFICATION_RENDER_VIEW_HOST_CHANGED, |
1256 Source<WebContents>(web_contents.get())); | 1256 Source<WebContents>(web_contents.get())); |
1257 | 1257 |
1258 // Create. | 1258 // Create. |
1259 RenderViewHostManager manager(web_contents.get(), web_contents.get(), | 1259 RenderFrameHostManager manager(web_contents.get(), web_contents.get(), |
1260 web_contents.get()); | 1260 web_contents.get()); |
1261 | 1261 |
1262 manager.Init(browser_context(), instance, MSG_ROUTING_NONE, MSG_ROUTING_NONE); | 1262 manager.Init(browser_context(), instance, MSG_ROUTING_NONE, MSG_ROUTING_NONE); |
1263 | 1263 |
1264 // 1) The first navigation. -------------------------- | 1264 // 1) The first navigation. -------------------------- |
1265 const GURL kUrl1("http://www.google.com/"); | 1265 const GURL kUrl1("http://www.google.com/"); |
1266 NavigationEntryImpl entry1(NULL /* instance */, -1 /* page_id */, kUrl1, | 1266 NavigationEntryImpl entry1(NULL /* instance */, -1 /* page_id */, kUrl1, |
1267 Referrer(), string16() /* title */, | 1267 Referrer(), string16() /* title */, |
1268 PAGE_TRANSITION_TYPED, | 1268 PAGE_TRANSITION_TYPED, |
1269 false /* is_renderer_init */); | 1269 false /* is_renderer_init */); |
1270 RenderViewHost* host = manager.Navigate(entry1); | 1270 RenderViewHost* host = manager.Navigate(entry1); |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1310 Source<RenderWidgetHost>(host2)); | 1310 Source<RenderWidgetHost>(host2)); |
1311 manager.ShouldClosePage(false, true, base::TimeTicks()); | 1311 manager.ShouldClosePage(false, true, base::TimeTicks()); |
1312 | 1312 |
1313 EXPECT_TRUE( | 1313 EXPECT_TRUE( |
1314 notifications.Check1AndReset(NOTIFICATION_RENDER_WIDGET_HOST_DESTROYED)); | 1314 notifications.Check1AndReset(NOTIFICATION_RENDER_WIDGET_HOST_DESTROYED)); |
1315 EXPECT_FALSE(manager.pending_render_view_host()); | 1315 EXPECT_FALSE(manager.pending_render_view_host()); |
1316 EXPECT_EQ(host, manager.current_host()); | 1316 EXPECT_EQ(host, manager.current_host()); |
1317 } | 1317 } |
1318 | 1318 |
1319 } // namespace content | 1319 } // namespace content |
OLD | NEW |