| 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/command_line.h" | 5 #include "base/command_line.h" |
| 6 #include "base/files/file_path.h" | 6 #include "base/files/file_path.h" |
| 7 #include "base/strings/utf_string_conversions.h" | 7 #include "base/strings/utf_string_conversions.h" |
| 8 #include "base/test/histogram_tester.h" | 8 #include "base/test/histogram_tester.h" |
| 9 #include "base/time/time.h" | 9 #include "base/time/time.h" |
| 10 #include "content/browser/compositor/test/no_transport_image_transport_factory.h
" | 10 #include "content/browser/compositor/test/no_transport_image_transport_factory.h
" |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 73 } | 73 } |
| 74 ~RenderFrameHostManagerTestWebUIControllerFactory() override {} | 74 ~RenderFrameHostManagerTestWebUIControllerFactory() override {} |
| 75 | 75 |
| 76 void set_should_create_webui(bool should_create_webui) { | 76 void set_should_create_webui(bool should_create_webui) { |
| 77 should_create_webui_ = should_create_webui; | 77 should_create_webui_ = should_create_webui; |
| 78 } | 78 } |
| 79 | 79 |
| 80 // WebUIFactory implementation. | 80 // WebUIFactory implementation. |
| 81 WebUIController* CreateWebUIControllerForURL(WebUI* web_ui, | 81 WebUIController* CreateWebUIControllerForURL(WebUI* web_ui, |
| 82 const GURL& url) const override { | 82 const GURL& url) const override { |
| 83 if (!(should_create_webui_ && HasWebUIScheme(url))) | 83 // If WebUI creation is enabled for the test and this is a WebUI URL, |
| 84 return NULL; | 84 // returns a new instance. |
| 85 return new WebUIController(web_ui); | 85 if (should_create_webui_ && HasWebUIScheme(url)) |
| 86 return new WebUIController(web_ui); |
| 87 return nullptr; |
| 86 } | 88 } |
| 87 | 89 |
| 88 WebUI::TypeID GetWebUIType(BrowserContext* browser_context, | 90 WebUI::TypeID GetWebUIType(BrowserContext* browser_context, |
| 89 const GURL& url) const override { | 91 const GURL& url) const override { |
| 92 // If WebUI creation is enabled for the test and this is a WebUI URL, |
| 93 // returns a mock WebUI type. |
| 94 if (should_create_webui_ && HasWebUIScheme(url)) { |
| 95 return const_cast<RenderFrameHostManagerTestWebUIControllerFactory*>( |
| 96 this); |
| 97 } |
| 90 return WebUI::kNoWebUI; | 98 return WebUI::kNoWebUI; |
| 91 } | 99 } |
| 92 | 100 |
| 93 bool UseWebUIForURL(BrowserContext* browser_context, | 101 bool UseWebUIForURL(BrowserContext* browser_context, |
| 94 const GURL& url) const override { | 102 const GURL& url) const override { |
| 95 return HasWebUIScheme(url); | 103 return HasWebUIScheme(url); |
| 96 } | 104 } |
| 97 | 105 |
| 98 bool UseWebUIBindingsForURL(BrowserContext* browser_context, | 106 bool UseWebUIBindingsForURL(BrowserContext* browser_context, |
| 99 const GURL& url) const override { | 107 const GURL& url) const override { |
| (...skipping 1008 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1108 | 1116 |
| 1109 // It's important that the SiteInstance get set on the Web UI page as soon | 1117 // It's important that the SiteInstance get set on the Web UI page as soon |
| 1110 // as the navigation starts, rather than lazily after it commits, so we don't | 1118 // as the navigation starts, rather than lazily after it commits, so we don't |
| 1111 // try to re-use the SiteInstance/process for non Web UI things that may | 1119 // try to re-use the SiteInstance/process for non Web UI things that may |
| 1112 // get loaded in between. | 1120 // get loaded in between. |
| 1113 EXPECT_TRUE(host->GetSiteInstance()->HasSite()); | 1121 EXPECT_TRUE(host->GetSiteInstance()->HasSite()); |
| 1114 EXPECT_EQ(kUrl, host->GetSiteInstance()->GetSiteURL()); | 1122 EXPECT_EQ(kUrl, host->GetSiteInstance()->GetSiteURL()); |
| 1115 | 1123 |
| 1116 // The Web UI is committed immediately because the RenderViewHost has not been | 1124 // The Web UI is committed immediately because the RenderViewHost has not been |
| 1117 // used yet. UpdateStateForNavigate() took the short cut path. | 1125 // used yet. UpdateStateForNavigate() took the short cut path. |
| 1118 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 1126 EXPECT_FALSE(manager->GetNavigatingWebUI()); |
| 1119 switches::kEnableBrowserSideNavigation)) { | |
| 1120 EXPECT_FALSE(manager->speculative_web_ui()); | |
| 1121 } else { | |
| 1122 EXPECT_FALSE(manager->pending_web_ui()); | |
| 1123 } | |
| 1124 EXPECT_TRUE(manager->web_ui()); | 1127 EXPECT_TRUE(manager->web_ui()); |
| 1125 | 1128 |
| 1126 // Commit. | 1129 // Commit. |
| 1127 manager->DidNavigateFrame(host, true); | 1130 manager->DidNavigateFrame(host, true); |
| 1128 EXPECT_TRUE( | 1131 EXPECT_TRUE( |
| 1129 host->render_view_host()->GetEnabledBindings() & BINDINGS_POLICY_WEB_UI); | 1132 host->render_view_host()->GetEnabledBindings() & BINDINGS_POLICY_WEB_UI); |
| 1130 } | 1133 } |
| 1131 | 1134 |
| 1132 // Tests that we can open a WebUI link in a new tab from a WebUI page and still | 1135 // Tests that we can open a WebUI link in a new tab from a WebUI page and still |
| 1133 // grant the correct bindings. http://crbug.com/189101. | 1136 // grant the correct bindings. http://crbug.com/189101. |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1183 const GURL kUrl2("chrome://foo/bar"); | 1186 const GURL kUrl2("chrome://foo/bar"); |
| 1184 NavigationEntryImpl entry2(NULL /* instance */, -1 /* page_id */, kUrl2, | 1187 NavigationEntryImpl entry2(NULL /* instance */, -1 /* page_id */, kUrl2, |
| 1185 Referrer(), base::string16() /* title */, | 1188 Referrer(), base::string16() /* title */, |
| 1186 ui::PAGE_TRANSITION_LINK, | 1189 ui::PAGE_TRANSITION_LINK, |
| 1187 true /* is_renderer_init */); | 1190 true /* is_renderer_init */); |
| 1188 RenderFrameHostImpl* host2 = NavigateToEntry(manager2, entry2); | 1191 RenderFrameHostImpl* host2 = NavigateToEntry(manager2, entry2); |
| 1189 | 1192 |
| 1190 // No cross-process transition happens because we are already in the right | 1193 // No cross-process transition happens because we are already in the right |
| 1191 // SiteInstance. We should grant bindings immediately. | 1194 // SiteInstance. We should grant bindings immediately. |
| 1192 EXPECT_EQ(host2, manager2->current_frame_host()); | 1195 EXPECT_EQ(host2, manager2->current_frame_host()); |
| 1193 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 1196 EXPECT_TRUE(manager2->GetNavigatingWebUI()); |
| 1194 switches::kEnableBrowserSideNavigation)) { | |
| 1195 EXPECT_TRUE(manager2->speculative_web_ui()); | |
| 1196 } else { | |
| 1197 EXPECT_TRUE(manager2->pending_web_ui()); | |
| 1198 } | |
| 1199 EXPECT_TRUE( | 1197 EXPECT_TRUE( |
| 1200 host2->render_view_host()->GetEnabledBindings() & BINDINGS_POLICY_WEB_UI); | 1198 host2->render_view_host()->GetEnabledBindings() & BINDINGS_POLICY_WEB_UI); |
| 1201 | 1199 |
| 1202 manager2->DidNavigateFrame(host2, true); | 1200 manager2->DidNavigateFrame(host2, true); |
| 1203 } | 1201 } |
| 1204 | 1202 |
| 1205 // Tests that a WebUI is correctly reused between chrome:// pages. | 1203 // Tests that a WebUI is correctly reused between chrome:// pages. |
| 1206 TEST_F(RenderFrameHostManagerTest, WebUIWasReused) { | 1204 TEST_F(RenderFrameHostManagerTest, WebUIWasReused) { |
| 1207 set_should_create_webui(true); | 1205 set_should_create_webui(true); |
| 1208 | 1206 |
| (...skipping 1440 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2649 root->render_manager()->GetRenderFrameProxyHost(hostC->GetSiteInstance()); | 2647 root->render_manager()->GetRenderFrameProxyHost(hostC->GetSiteInstance()); |
| 2650 EXPECT_TRUE(proxy); | 2648 EXPECT_TRUE(proxy); |
| 2651 | 2649 |
| 2652 // Since the B->C navigation happened while the current page was focused, | 2650 // Since the B->C navigation happened while the current page was focused, |
| 2653 // page focus should propagate to the new subframe process. Check that | 2651 // page focus should propagate to the new subframe process. Check that |
| 2654 // process C received the proper focus message. | 2652 // process C received the proper focus message. |
| 2655 VerifyPageFocusMessage(hostC->GetProcess(), true, proxy->GetRoutingID()); | 2653 VerifyPageFocusMessage(hostC->GetProcess(), true, proxy->GetRoutingID()); |
| 2656 } | 2654 } |
| 2657 | 2655 |
| 2658 } // namespace content | 2656 } // namespace content |
| OLD | NEW |