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 "base/file_util.h" | 5 #include "base/file_util.h" |
6 #include "base/json/json_reader.h" | 6 #include "base/json/json_reader.h" |
7 #include "base/memory/ref_counted.h" | 7 #include "base/memory/ref_counted.h" |
8 #include "base/path_service.h" | 8 #include "base/path_service.h" |
9 #include "base/utf_string_conversions.h" | 9 #include "base/utf_string_conversions.h" |
10 #include "base/values.h" | 10 #include "base/values.h" |
(...skipping 818 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
829 // Opens in same tab. | 829 // Opens in same tab. |
830 EXPECT_EQ(1u, Shell::windows().size()); | 830 EXPECT_EQ(1u, Shell::windows().size()); |
831 EXPECT_EQ("/files/title2.html", shell()->web_contents()->GetURL().path()); | 831 EXPECT_EQ("/files/title2.html", shell()->web_contents()->GetURL().path()); |
832 | 832 |
833 // Should have the same SiteInstance. | 833 // Should have the same SiteInstance. |
834 scoped_refptr<SiteInstance> noref_site_instance( | 834 scoped_refptr<SiteInstance> noref_site_instance( |
835 shell()->web_contents()->GetSiteInstance()); | 835 shell()->web_contents()->GetSiteInstance()); |
836 EXPECT_EQ(orig_site_instance, noref_site_instance); | 836 EXPECT_EQ(orig_site_instance, noref_site_instance); |
837 } | 837 } |
838 | 838 |
839 // Test for crbug.com/9682. We should show the URL for a pending renderer- | |
840 // initiated navigation in a new tab, until the content of the initial | |
841 // about:blank page is modified by another window. At that point, we should | |
842 // revert to showing about:blank to prevent a URL spoof. | |
843 IN_PROC_BROWSER_TEST_F(RenderViewHostManagerTest, ShowLoadingURLUntilSpoof) { | |
844 ASSERT_TRUE(test_server()->Start()); | |
845 | |
846 // Load a page that can open a URL that won't commit in a new window. | |
847 NavigateToURL( | |
848 shell(), test_server()->GetURL("files/click-nocontent-link.html")); | |
849 WebContents* orig_contents = shell()->web_contents(); | |
850 | |
851 // Click a /nocontent link that opens in a new window but never commits. | |
852 ShellAddedObserver new_shell_observer; | |
853 bool success = false; | |
854 EXPECT_TRUE(ExecuteScriptAndExtractBool( | |
855 orig_contents, | |
856 "window.domAutomationController.send(clickNoContentTargetedLink());", | |
857 &success)); | |
858 EXPECT_TRUE(success); | |
859 | |
860 // Wait for the window to open. | |
861 Shell* new_shell = new_shell_observer.GetShell(); | |
862 | |
863 // Ensure the destination URL is visible, because it is considered the | |
864 // initial navigation. | |
865 WebContents* contents = new_shell->web_contents(); | |
866 EXPECT_TRUE(contents->GetController().IsInitialNavigation()); | |
867 EXPECT_EQ("/nocontent", | |
868 contents->GetController().GetVisibleEntry()->GetURL().path()); | |
869 | |
870 // Now modify the contents of the new window from the opener. This will also | |
871 // modify the title of the document to give us something to listen for. | |
872 WindowedNotificationObserver title_observer( | |
873 NOTIFICATION_WEB_CONTENTS_TITLE_UPDATED, | |
874 Source<WebContents>(contents)); | |
875 success = false; | |
876 EXPECT_TRUE(ExecuteScriptAndExtractBool( | |
877 orig_contents, | |
878 "window.domAutomationController.send(modifyNewWindow());", | |
879 &success)); | |
880 EXPECT_TRUE(success); | |
881 title_observer.Wait(); | |
882 EXPECT_EQ(ASCIIToUTF16("Modified Title"), contents->GetTitle()); | |
883 | |
884 // At this point, we should no longer be showing the destination URL. | |
885 // The visible entry should be null, resulting in about:blank in the address | |
886 // bar. | |
887 EXPECT_FALSE(contents->GetController().GetVisibleEntry()); | |
888 } | |
889 | |
890 // Test for crbug.com/9682. We should not show the URL for a pending renderer- | |
891 // initiated navigation in a new tab if it is not the initial navigation. In | |
892 // this case, the renderer will not notify us of a modification, so we cannot | |
893 // show the pending URL without allowing a spoof. | |
894 IN_PROC_BROWSER_TEST_F(RenderViewHostManagerTest, | |
895 DontShowLoadingURLIfNotInitialNav) { | |
896 ASSERT_TRUE(test_server()->Start()); | |
897 | |
898 // Load a page that can open a URL that won't commit in a new window. | |
899 NavigateToURL( | |
900 shell(), test_server()->GetURL("files/click-nocontent-link.html")); | |
901 WebContents* orig_contents = shell()->web_contents(); | |
902 | |
903 // Click a /nocontent link that opens in a new window but never commits. | |
904 // By using an onclick handler that first creates the window, the slow | |
905 // navigation is not considered an initial navigation. | |
906 ShellAddedObserver new_shell_observer; | |
907 bool success = false; | |
908 EXPECT_TRUE(ExecuteScriptAndExtractBool( | |
909 orig_contents, | |
910 "window.domAutomationController.send(" | |
911 "clickNoContentScriptedTargetedLink());", | |
912 &success)); | |
913 EXPECT_TRUE(success); | |
914 | |
915 // Wait for the window to open. | |
916 Shell* new_shell = new_shell_observer.GetShell(); | |
917 | |
918 // Ensure the destination URL is not visible, because it is not the initial | |
919 // navigation. | |
920 WebContents* contents = new_shell->web_contents(); | |
921 EXPECT_FALSE(contents->GetController().IsInitialNavigation()); | |
922 EXPECT_FALSE(contents->GetController().GetVisibleEntry()); | |
923 } | |
924 | |
925 // Test for http://crbug.com/93427. Ensure that cross-site navigations | 839 // Test for http://crbug.com/93427. Ensure that cross-site navigations |
926 // do not cause back/forward navigations to be considered stale by the | 840 // do not cause back/forward navigations to be considered stale by the |
927 // renderer. | 841 // renderer. |
928 IN_PROC_BROWSER_TEST_F(RenderViewHostManagerTest, BackForwardNotStale) { | 842 IN_PROC_BROWSER_TEST_F(RenderViewHostManagerTest, BackForwardNotStale) { |
929 NavigateToURL(shell(), GURL(chrome::kAboutBlankURL)); | 843 NavigateToURL(shell(), GURL(chrome::kAboutBlankURL)); |
930 | 844 |
931 // Start two servers with different sites. | 845 // Start two servers with different sites. |
932 ASSERT_TRUE(test_server()->Start()); | 846 ASSERT_TRUE(test_server()->Start()); |
933 net::TestServer https_server( | 847 net::TestServer https_server( |
934 net::TestServer::TYPE_HTTPS, | 848 net::TestServer::TYPE_HTTPS, |
(...skipping 351 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1286 NavigateToURL(shell(), https_server.GetURL("files/title1.html")); | 1200 NavigateToURL(shell(), https_server.GetURL("files/title1.html")); |
1287 | 1201 |
1288 // Make sure it ends up at the right page. | 1202 // Make sure it ends up at the right page. |
1289 WaitForLoadStop(shell()->web_contents()); | 1203 WaitForLoadStop(shell()->web_contents()); |
1290 EXPECT_EQ(https_server.GetURL("files/title1.html"), | 1204 EXPECT_EQ(https_server.GetURL("files/title1.html"), |
1291 shell()->web_contents()->GetURL()); | 1205 shell()->web_contents()->GetURL()); |
1292 EXPECT_EQ(new_site_instance, shell()->web_contents()->GetSiteInstance()); | 1206 EXPECT_EQ(new_site_instance, shell()->web_contents()->GetSiteInstance()); |
1293 } | 1207 } |
1294 | 1208 |
1295 } // namespace content | 1209 } // namespace content |
OLD | NEW |