OLD | NEW |
---|---|
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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/memory/weak_ptr.h" | 5 #include "base/memory/weak_ptr.h" |
6 #include "content/browser/frame_host/navigation_handle_impl.h" | 6 #include "content/browser/frame_host/navigation_handle_impl.h" |
7 #include "content/browser/web_contents/web_contents_impl.h" | 7 #include "content/browser/web_contents/web_contents_impl.h" |
8 #include "content/public/browser/web_contents.h" | 8 #include "content/public/browser/web_contents.h" |
9 #include "content/public/browser/web_contents_observer.h" | 9 #include "content/public/browser/web_contents_observer.h" |
10 #include "content/public/common/bindings_policy.h" | |
10 #include "content/public/common/browser_side_navigation_policy.h" | 11 #include "content/public/common/browser_side_navigation_policy.h" |
11 #include "content/public/common/content_switches.h" | 12 #include "content/public/common/content_switches.h" |
12 #include "content/public/common/request_context_type.h" | 13 #include "content/public/common/request_context_type.h" |
13 #include "content/public/test/browser_test_utils.h" | 14 #include "content/public/test/browser_test_utils.h" |
14 #include "content/public/test/content_browser_test.h" | 15 #include "content/public/test/content_browser_test.h" |
15 #include "content/public/test/content_browser_test_utils.h" | 16 #include "content/public/test/content_browser_test_utils.h" |
16 #include "content/public/test/test_navigation_observer.h" | 17 #include "content/public/test/test_navigation_observer.h" |
17 #include "content/public/test/test_utils.h" | 18 #include "content/public/test/test_utils.h" |
18 #include "content/shell/browser/shell.h" | 19 #include "content/shell/browser/shell.h" |
19 #include "content/test/content_browser_test_utils_internal.h" | 20 #include "content/test/content_browser_test_utils_internal.h" |
(...skipping 1249 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1269 { | 1270 { |
1270 NavigationHandleObserver observer(shell()->web_contents(), error_url); | 1271 NavigationHandleObserver observer(shell()->web_contents(), error_url); |
1271 EXPECT_FALSE(NavigateToURL(shell(), error_url)); | 1272 EXPECT_FALSE(NavigateToURL(shell(), error_url)); |
1272 EXPECT_TRUE(observer.has_committed()); | 1273 EXPECT_TRUE(observer.has_committed()); |
1273 EXPECT_TRUE(observer.is_error()); | 1274 EXPECT_TRUE(observer.is_error()); |
1274 EXPECT_NE(site_instance, | 1275 EXPECT_NE(site_instance, |
1275 shell()->web_contents()->GetMainFrame()->GetSiteInstance()); | 1276 shell()->web_contents()->GetMainFrame()->GetSiteInstance()); |
1276 } | 1277 } |
1277 } | 1278 } |
1278 | 1279 |
1280 // Tests the case where a browser-initiated navigation to a normal webpage is | |
1281 // blocked (net::ERR_BLOCKED_BY_CLIENT) while departing from a privileged WebUI | |
1282 // page (chrome://gpu). It is a security risk for the error page to commit in | |
1283 // the privileged process. | |
1284 IN_PROC_BROWSER_TEST_F(PlzNavigateNavigationHandleImplBrowserTest, | |
1285 BlockedRequestAfterWebUI) { | |
1286 GURL web_ui_url("chrome://gpu"); | |
1287 WebContents* web_contents = shell()->web_contents(); | |
1288 | |
1289 // Navigate to the initial page. | |
1290 EXPECT_FALSE(web_contents->GetMainFrame()->GetEnabledBindings() & | |
1291 BINDINGS_POLICY_WEB_UI); | |
1292 EXPECT_TRUE(NavigateToURL(shell(), web_ui_url)); | |
1293 EXPECT_TRUE(web_contents->GetMainFrame()->GetEnabledBindings() & | |
1294 BINDINGS_POLICY_WEB_UI); | |
1295 scoped_refptr<SiteInstance> web_ui_process = web_contents->GetSiteInstance(); | |
nasko
2017/05/23 04:48:53
nit: web_ui_site_instance?
ncarter (slow)
2017/05/24 17:18:07
The name was intentional, to highlight the importa
| |
1296 | |
1297 // Start a new, non-webUI navigation that will be blocked by a | |
1298 // NavigationThrottle. | |
1299 GURL blocked_url("http://blocked-by-throttle.example.cc"); | |
1300 TestNavigationThrottleInstaller installer( | |
1301 web_contents, NavigationThrottle::BLOCK_REQUEST, | |
1302 NavigationThrottle::PROCEED, NavigationThrottle::PROCEED); | |
1303 NavigationHandleObserver commit_observer(web_contents, blocked_url); | |
1304 EXPECT_FALSE(NavigateToURL(shell(), blocked_url)); | |
1305 NavigationEntry* last_committed = | |
1306 web_contents->GetController().GetLastCommittedEntry(); | |
1307 EXPECT_TRUE(last_committed); | |
1308 EXPECT_EQ(blocked_url, last_committed->GetVirtualURL()); | |
1309 EXPECT_EQ(PAGE_TYPE_ERROR, last_committed->GetPageType()); | |
1310 EXPECT_NE(web_ui_process.get(), web_contents->GetSiteInstance()); | |
1311 EXPECT_TRUE(commit_observer.has_committed()); | |
1312 EXPECT_TRUE(commit_observer.is_error()); | |
1313 EXPECT_FALSE(commit_observer.is_renderer_initiated()); | |
1314 } | |
1315 | |
1279 } // namespace content | 1316 } // namespace content |
OLD | NEW |