| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "content/browser/site_per_process_browsertest.h" | 5 #include "content/browser/site_per_process_browsertest.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 | 9 |
| 10 #include <algorithm> | 10 #include <algorithm> |
| (...skipping 2382 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2393 " B = http://b.com/", | 2393 " B = http://b.com/", |
| 2394 DepictFrameTree(root)); | 2394 DepictFrameTree(root)); |
| 2395 EXPECT_NE(shell()->web_contents()->GetSiteInstance(), | 2395 EXPECT_NE(shell()->web_contents()->GetSiteInstance(), |
| 2396 child->current_frame_host()->GetSiteInstance()); | 2396 child->current_frame_host()->GetSiteInstance()); |
| 2397 } | 2397 } |
| 2398 | 2398 |
| 2399 // The FrameTreeNode should update its URL (so that we don't affect other uses | 2399 // The FrameTreeNode should update its URL (so that we don't affect other uses |
| 2400 // of the API), but the frame's last_successful_url shouldn't change and the | 2400 // of the API), but the frame's last_successful_url shouldn't change and the |
| 2401 // origin should be empty. | 2401 // origin should be empty. |
| 2402 // PlzNavigate: We have switched RenderFrameHosts for the subframe, so the | 2402 // PlzNavigate: We have switched RenderFrameHosts for the subframe, so the |
| 2403 // last succesful url should be empty (since the frame only loaded an error | 2403 // last successful url should be empty (since the frame only loaded an error |
| 2404 // page). | 2404 // page). |
| 2405 if (IsBrowserSideNavigationEnabled()) | 2405 if (IsBrowserSideNavigationEnabled()) |
| 2406 EXPECT_EQ(GURL(), child->current_frame_host()->last_successful_url()); | 2406 EXPECT_EQ(GURL(), child->current_frame_host()->last_successful_url()); |
| 2407 else | 2407 else |
| 2408 EXPECT_EQ(url_a, child->current_frame_host()->last_successful_url()); | 2408 EXPECT_EQ(url_a, child->current_frame_host()->last_successful_url()); |
| 2409 EXPECT_EQ(url_b, child->current_url()); | 2409 EXPECT_EQ(url_b, child->current_url()); |
| 2410 EXPECT_EQ("null", child->current_origin().Serialize()); | 2410 EXPECT_EQ("null", child->current_origin().Serialize()); |
| 2411 | 2411 |
| 2412 // Try again after re-enabling host resolution. | 2412 // Try again after re-enabling host resolution. |
| 2413 host_resolver()->AddRule("*", "127.0.0.1"); | 2413 host_resolver()->AddRule("*", "127.0.0.1"); |
| (...skipping 4967 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7381 | 7381 |
| 7382 // The blocked frame should still fire a load event in its parent's process. | 7382 // The blocked frame should still fire a load event in its parent's process. |
| 7383 EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle()); | 7383 EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle()); |
| 7384 | 7384 |
| 7385 // Check that the current RenderFrameHost has stopped loading. | 7385 // Check that the current RenderFrameHost has stopped loading. |
| 7386 if (root->child_at(0)->current_frame_host()->is_loading()) { | 7386 if (root->child_at(0)->current_frame_host()->is_loading()) { |
| 7387 ADD_FAILURE() << "Blocked RenderFrameHost shouldn't be loading anything"; | 7387 ADD_FAILURE() << "Blocked RenderFrameHost shouldn't be loading anything"; |
| 7388 load_observer.Wait(); | 7388 load_observer.Wait(); |
| 7389 } | 7389 } |
| 7390 | 7390 |
| 7391 // The blocked frame should stay at the old location. | 7391 if (IsBrowserSideNavigationEnabled()) { |
| 7392 EXPECT_EQ(old_subframe_url, root->child_at(0)->current_url()); | 7392 // We have switched RenderFrameHosts for the subframe, so the last |
| 7393 // successful url should be empty (since the frame only loaded an error |
| 7394 // page). |
| 7395 EXPECT_EQ(GURL(), |
| 7396 root->child_at(0)->current_frame_host()->last_successful_url()); |
| 7393 | 7397 |
| 7394 // The blocked frame should keep the old title. | 7398 // The blocked frame should go to an error page. Errors currently commit |
| 7395 std::string frame_title; | 7399 // with the URL of the blocked page. |
| 7396 EXPECT_TRUE(ExecuteScriptAndExtractString( | 7400 EXPECT_EQ(blocked_url, root->child_at(0)->current_url()); |
| 7397 root->child_at(0), "domAutomationController.send(document.title)", | 7401 |
| 7398 &frame_title)); | 7402 // The page should get the title of an error page (i.e "") and not the |
| 7399 EXPECT_EQ("Title Of Awesomeness", frame_title); | 7403 // title of the blocked page. |
| 7404 std::string frame_title; |
| 7405 EXPECT_TRUE(ExecuteScriptAndExtractString( |
| 7406 root->child_at(0), "domAutomationController.send(document.title)", |
| 7407 &frame_title)); |
| 7408 EXPECT_EQ("", frame_title); |
| 7409 } else { |
| 7410 // The last successful url shouldn't be the blocked url. |
| 7411 EXPECT_EQ(old_subframe_url, |
| 7412 root->child_at(0)->current_frame_host()->last_successful_url()); |
| 7413 |
| 7414 // The blocked frame should stay at the old location. |
| 7415 EXPECT_EQ(old_subframe_url, root->child_at(0)->current_url()); |
| 7416 |
| 7417 // The blocked frame should keep the old title. |
| 7418 std::string frame_title; |
| 7419 EXPECT_TRUE(ExecuteScriptAndExtractString( |
| 7420 root->child_at(0), "domAutomationController.send(document.title)", |
| 7421 &frame_title)); |
| 7422 EXPECT_EQ("Title Of Awesomeness", frame_title); |
| 7423 } |
| 7400 | 7424 |
| 7401 // Navigate to a URL without CSP. | 7425 // Navigate to a URL without CSP. |
| 7402 EXPECT_TRUE(NavigateToURL( | 7426 EXPECT_TRUE(NavigateToURL( |
| 7403 shell(), embedded_test_server()->GetURL("a.com", "/title1.html"))); | 7427 shell(), embedded_test_server()->GetURL("a.com", "/title1.html"))); |
| 7404 | 7428 |
| 7405 // Verify that the frame's CSP got correctly reset to an empty set. | 7429 // Verify that the frame's CSP got correctly reset to an empty set. |
| 7406 EXPECT_EQ(0u, | 7430 EXPECT_EQ(0u, |
| 7407 root->current_replication_state().accumulated_csp_headers.size()); | 7431 root->current_replication_state().accumulated_csp_headers.size()); |
| 7408 } | 7432 } |
| 7409 | 7433 |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7456 | 7480 |
| 7457 // The blocked frame should still fire a load event in its parent's process. | 7481 // The blocked frame should still fire a load event in its parent's process. |
| 7458 EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle()); | 7482 EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle()); |
| 7459 | 7483 |
| 7460 // Check that the current RenderFrameHost has stopped loading. | 7484 // Check that the current RenderFrameHost has stopped loading. |
| 7461 if (root->child_at(0)->current_frame_host()->is_loading()) { | 7485 if (root->child_at(0)->current_frame_host()->is_loading()) { |
| 7462 ADD_FAILURE() << "Blocked RenderFrameHost shouldn't be loading anything"; | 7486 ADD_FAILURE() << "Blocked RenderFrameHost shouldn't be loading anything"; |
| 7463 load_observer2.Wait(); | 7487 load_observer2.Wait(); |
| 7464 } | 7488 } |
| 7465 | 7489 |
| 7466 // The blocked frame should stay at the old location. | 7490 if (IsBrowserSideNavigationEnabled()) { |
| 7467 EXPECT_EQ(old_subframe_url, root->child_at(0)->current_url()); | 7491 // We have switched RenderFrameHosts for the subframe, so the last |
| 7492 // successful url should be empty (since the frame only loaded an error |
| 7493 // page). |
| 7494 EXPECT_EQ(GURL(), |
| 7495 root->child_at(0)->current_frame_host()->last_successful_url()); |
| 7468 | 7496 |
| 7469 // The blocked frame should keep the old title. | 7497 // The blocked frame should go to an error page. Errors currently commit |
| 7470 std::string frame_title; | 7498 // with the URL of the blocked page. |
| 7471 EXPECT_TRUE(ExecuteScriptAndExtractString( | 7499 EXPECT_EQ(blocked_url, root->child_at(0)->current_url()); |
| 7472 root->child_at(0), "domAutomationController.send(document.title)", | 7500 |
| 7473 &frame_title)); | 7501 // The page should get the title of an error page (i.e "") and not the |
| 7474 EXPECT_EQ("Title Of Awesomeness", frame_title); | 7502 // title of the blocked page. |
| 7503 std::string frame_title; |
| 7504 EXPECT_TRUE(ExecuteScriptAndExtractString( |
| 7505 root->child_at(0), "domAutomationController.send(document.title)", |
| 7506 &frame_title)); |
| 7507 EXPECT_EQ("", frame_title); |
| 7508 } else { |
| 7509 // The last successful url shouldn't be the blocked url. |
| 7510 EXPECT_EQ(old_subframe_url, |
| 7511 root->child_at(0)->current_frame_host()->last_successful_url()); |
| 7512 |
| 7513 // The blocked frame should stay at the old location. |
| 7514 EXPECT_EQ(old_subframe_url, root->child_at(0)->current_url()); |
| 7515 |
| 7516 // The blocked frame should keep the old title. |
| 7517 std::string frame_title; |
| 7518 EXPECT_TRUE(ExecuteScriptAndExtractString( |
| 7519 root->child_at(0), "domAutomationController.send(document.title)", |
| 7520 &frame_title)); |
| 7521 EXPECT_EQ("Title Of Awesomeness", frame_title); |
| 7522 } |
| 7475 } | 7523 } |
| 7476 | 7524 |
| 7477 // Test that a cross-origin frame's navigation can be blocked by CSP frame-src. | 7525 // Test that a cross-origin frame's navigation can be blocked by CSP frame-src. |
| 7478 // In this version of a test, CSP is inherited by srcdoc iframe from a parent | 7526 // In this version of a test, CSP is inherited by srcdoc iframe from a parent |
| 7479 // that declared CSP via HTTP headers. Cross-origin frame navigating to a | 7527 // that declared CSP via HTTP headers. Cross-origin frame navigating to a |
| 7480 // blocked location is a child of the srcdoc iframe. | 7528 // blocked location is a child of the srcdoc iframe. |
| 7481 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, | 7529 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, |
| 7482 CrossSiteIframeBlockedByCSPInheritedBySrcDocParent) { | 7530 CrossSiteIframeBlockedByCSPInheritedBySrcDocParent) { |
| 7483 GURL main_url( | 7531 GURL main_url( |
| 7484 embedded_test_server()->GetURL("a.com", "/frame-src-self-and-b.html")); | 7532 embedded_test_server()->GetURL("a.com", "/frame-src-self-and-b.html")); |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7525 | 7573 |
| 7526 // The blocked frame should still fire a load event in its parent's process. | 7574 // The blocked frame should still fire a load event in its parent's process. |
| 7527 EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle()); | 7575 EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle()); |
| 7528 | 7576 |
| 7529 // Check that the current RenderFrameHost has stopped loading. | 7577 // Check that the current RenderFrameHost has stopped loading. |
| 7530 if (navigating_frame->current_frame_host()->is_loading()) { | 7578 if (navigating_frame->current_frame_host()->is_loading()) { |
| 7531 ADD_FAILURE() << "Blocked RenderFrameHost shouldn't be loading anything"; | 7579 ADD_FAILURE() << "Blocked RenderFrameHost shouldn't be loading anything"; |
| 7532 load_observer2.Wait(); | 7580 load_observer2.Wait(); |
| 7533 } | 7581 } |
| 7534 | 7582 |
| 7535 // The blocked frame should stay at the old location. | 7583 if (IsBrowserSideNavigationEnabled()) { |
| 7536 EXPECT_EQ(old_subframe_url, navigating_frame->current_url()); | 7584 // We have switched RenderFrameHosts for the subframe, so the last |
| 7585 // successful url should be empty (since the frame only loaded an error |
| 7586 // page). |
| 7587 EXPECT_EQ(GURL(), |
| 7588 navigating_frame->current_frame_host()->last_successful_url()); |
| 7537 | 7589 |
| 7538 // The blocked frame should keep the old title. | 7590 // The blocked frame should go to an error page. Errors currently commit |
| 7539 std::string frame_title; | 7591 // with the URL of the blocked page. |
| 7540 EXPECT_TRUE(ExecuteScriptAndExtractString( | 7592 EXPECT_EQ(blocked_url, navigating_frame->current_url()); |
| 7541 navigating_frame, "domAutomationController.send(document.title)", | 7593 |
| 7542 &frame_title)); | 7594 // The page should get the title of an error page (i.e "") and not the |
| 7543 EXPECT_EQ("Title Of Awesomeness", frame_title); | 7595 // title of the blocked page. |
| 7596 std::string frame_title; |
| 7597 EXPECT_TRUE(ExecuteScriptAndExtractString( |
| 7598 navigating_frame, "domAutomationController.send(document.title)", |
| 7599 &frame_title)); |
| 7600 EXPECT_EQ("", frame_title); |
| 7601 } else { |
| 7602 // The last successful url shouldn't be the blocked url. |
| 7603 EXPECT_EQ(old_subframe_url, |
| 7604 navigating_frame->current_frame_host()->last_successful_url()); |
| 7605 |
| 7606 // The blocked frame should stay at the old location. |
| 7607 EXPECT_EQ(old_subframe_url, navigating_frame->current_url()); |
| 7608 |
| 7609 // The blocked frame should keep the old title. |
| 7610 std::string frame_title; |
| 7611 EXPECT_TRUE(ExecuteScriptAndExtractString( |
| 7612 navigating_frame, "domAutomationController.send(document.title)", |
| 7613 &frame_title)); |
| 7614 EXPECT_EQ("Title Of Awesomeness", frame_title); |
| 7615 } |
| 7544 | 7616 |
| 7545 // Navigate the subframe to a URL without CSP. | 7617 // Navigate the subframe to a URL without CSP. |
| 7546 NavigateFrameToURL(srcdoc_frame, | 7618 NavigateFrameToURL(srcdoc_frame, |
| 7547 embedded_test_server()->GetURL("a.com", "/title1.html")); | 7619 embedded_test_server()->GetURL("a.com", "/title1.html")); |
| 7548 | 7620 |
| 7549 // Verify that the frame's CSP got correctly reset to an empty set. | 7621 // Verify that the frame's CSP got correctly reset to an empty set. |
| 7550 EXPECT_EQ( | 7622 EXPECT_EQ( |
| 7551 0u, | 7623 0u, |
| 7552 srcdoc_frame->current_replication_state().accumulated_csp_headers.size()); | 7624 srcdoc_frame->current_replication_state().accumulated_csp_headers.size()); |
| 7553 } | 7625 } |
| (...skipping 2241 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 9795 | 9867 |
| 9796 // Try the same navigation, but use the browser-initiated path. | 9868 // Try the same navigation, but use the browser-initiated path. |
| 9797 NavigateFrameToURL(root->child_at(0), frame_url); | 9869 NavigateFrameToURL(root->child_at(0), frame_url); |
| 9798 EXPECT_FALSE(root->child_at(0)->render_manager()->pending_frame_host()); | 9870 EXPECT_FALSE(root->child_at(0)->render_manager()->pending_frame_host()); |
| 9799 EXPECT_EQ(root->child_at(0)->current_url(), redirected_url); | 9871 EXPECT_EQ(root->child_at(0)->current_url(), redirected_url); |
| 9800 EXPECT_EQ(b_site_instance, | 9872 EXPECT_EQ(b_site_instance, |
| 9801 root->child_at(0)->current_frame_host()->GetSiteInstance()); | 9873 root->child_at(0)->current_frame_host()->GetSiteInstance()); |
| 9802 } | 9874 } |
| 9803 | 9875 |
| 9804 } // namespace content | 9876 } // namespace content |
| OLD | NEW |