OLD | NEW |
---|---|
1 // Copyright 2017 The Chromium Authors. All rights reserved. | 1 // Copyright 2017 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_util.h" | 6 #include "base/files/file_util.h" |
7 #include "base/files/scoped_temp_dir.h" | 7 #include "base/files/scoped_temp_dir.h" |
8 #include "base/macros.h" | 8 #include "base/macros.h" |
9 #include "base/path_service.h" | 9 #include "base/path_service.h" |
10 #include "base/strings/pattern.h" | 10 #include "base/strings/pattern.h" |
(...skipping 921 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
932 ChildFrameAt(shell()->web_contents()->GetMainFrame(), 0); | 932 ChildFrameAt(shell()->web_contents()->GetMainFrame(), 0); |
933 ASSERT_TRUE(child); | 933 ASSERT_TRUE(child); |
934 if (AreAllSitesIsolatedForTesting()) { | 934 if (AreAllSitesIsolatedForTesting()) { |
935 ASSERT_TRUE(child->IsCrossProcessSubframe()); | 935 ASSERT_TRUE(child->IsCrossProcessSubframe()); |
936 } | 936 } |
937 ExecuteScriptAndCheckNavigationDownload( | 937 ExecuteScriptAndCheckNavigationDownload( |
938 child, "document.getElementById('window-open-pdf').click()"); | 938 child, "document.getElementById('window-open-pdf').click()"); |
939 #endif | 939 #endif |
940 } | 940 } |
941 | 941 |
942 // Test case to verify that redirects to data: URLs are properly disallowed, | |
943 // even when invoked through history navigations. | |
944 // See https://crbug.com/723796. | |
945 IN_PROC_BROWSER_TEST_F(DataUrlNavigationBrowserTest, | |
946 WindowOpenRedirectAndBack) { | |
947 NavigateToURL(shell(), | |
948 embedded_test_server()->GetURL("/data_url_navigations.html")); | |
949 | |
950 // This test will need to navigate the newly opened window. | |
951 ShellAddedObserver new_shell_observer; | |
952 EXPECT_TRUE( | |
953 ExecuteScript(shell()->web_contents(), | |
954 "document.getElementById('window-open-redirect').click()")); | |
955 Shell* new_shell = new_shell_observer.GetShell(); | |
956 NavigationController* controller = | |
957 &new_shell->web_contents()->GetController(); | |
958 WaitForLoadStop(new_shell->web_contents()); | |
959 | |
960 // The window.open() should have resulted in an error page. | |
Charlie Reis
2017/05/18 22:41:46
nit: Add "The blocked URL should be in the virtual
nasko
2017/05/18 22:55:11
Done.
| |
961 { | |
962 EXPECT_EQ(0, controller->GetLastCommittedEntryIndex()); | |
963 NavigationEntry* entry = controller->GetLastCommittedEntry(); | |
964 EXPECT_EQ(PAGE_TYPE_ERROR, entry->GetPageType()); | |
965 EXPECT_FALSE(entry->GetURL().SchemeIs(url::kDataScheme)); | |
966 EXPECT_TRUE(entry->GetVirtualURL().SchemeIs(url::kDataScheme)); | |
967 } | |
968 | |
969 // Navigate forward and then go back to ensure the navigation to data: URL | |
970 // is blocked. Use a browser-initiated back navigation, equivalent to user | |
971 // pressing the back button. | |
972 EXPECT_TRUE( | |
973 NavigateToURL(new_shell, embedded_test_server()->GetURL("/title1.html"))); | |
974 EXPECT_EQ(1, controller->GetLastCommittedEntryIndex()); | |
975 { | |
976 TestNavigationObserver observer(new_shell->web_contents()); | |
977 controller->GoBack(); | |
978 observer.Wait(); | |
979 | |
980 NavigationEntry* entry = controller->GetLastCommittedEntry(); | |
981 EXPECT_EQ(0, controller->GetLastCommittedEntryIndex()); | |
982 EXPECT_FALSE(entry->GetURL().SchemeIs(url::kDataScheme)); | |
983 EXPECT_TRUE(entry->GetVirtualURL().SchemeIs(url::kDataScheme)); | |
984 EXPECT_EQ(url::kAboutBlankURL, entry->GetURL().spec()); | |
985 } | |
986 | |
987 // Do another new navigation, but then use JavaScript to navigate back, | |
988 // equivalent to document executing JS. | |
989 EXPECT_TRUE( | |
990 NavigateToURL(new_shell, embedded_test_server()->GetURL("/title1.html"))); | |
991 EXPECT_EQ(1, controller->GetLastCommittedEntryIndex()); | |
992 { | |
993 TestNavigationObserver observer(new_shell->web_contents()); | |
994 EXPECT_TRUE(ExecuteScript(new_shell, "history.go(-1)")); | |
995 observer.Wait(); | |
996 | |
997 NavigationEntry* entry = controller->GetLastCommittedEntry(); | |
998 EXPECT_EQ(0, controller->GetLastCommittedEntryIndex()); | |
999 EXPECT_FALSE(entry->GetURL().SchemeIs(url::kDataScheme)); | |
1000 EXPECT_TRUE(entry->GetVirtualURL().SchemeIs(url::kDataScheme)); | |
1001 EXPECT_EQ(url::kAboutBlankURL, entry->GetURL().spec()); | |
1002 } | |
1003 } | |
1004 | |
942 } // content | 1005 } // content |
OLD | NEW |