| 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/macros.h" | 5 #include "base/macros.h" |
| 6 #include "base/strings/utf_string_conversions.h" | 6 #include "base/strings/utf_string_conversions.h" |
| 7 #include "base/values.h" | 7 #include "base/values.h" |
| 8 #include "build/build_config.h" | 8 #include "build/build_config.h" |
| 9 #include "content/browser/frame_host/navigation_entry_impl.h" | 9 #include "content/browser/frame_host/navigation_entry_impl.h" |
| 10 #include "content/browser/renderer_host/render_widget_host_impl.h" | 10 #include "content/browser/renderer_host/render_widget_host_impl.h" |
| (...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 245 // See http://crbug.com/280512. | 245 // See http://crbug.com/280512. |
| 246 IN_PROC_BROWSER_TEST_F(WebContentsImplBrowserTest, | 246 IN_PROC_BROWSER_TEST_F(WebContentsImplBrowserTest, |
| 247 ClearNonVisiblePendingOnFail) { | 247 ClearNonVisiblePendingOnFail) { |
| 248 ASSERT_TRUE(embedded_test_server()->Start()); | 248 ASSERT_TRUE(embedded_test_server()->Start()); |
| 249 | 249 |
| 250 NavigateToURL(shell(), embedded_test_server()->GetURL("/title1.html")); | 250 NavigateToURL(shell(), embedded_test_server()->GetURL("/title1.html")); |
| 251 | 251 |
| 252 // Navigate to an invalid URL and make sure it doesn't leave a pending entry. | 252 // Navigate to an invalid URL and make sure it doesn't leave a pending entry. |
| 253 LoadStopNotificationObserver load_observer1( | 253 LoadStopNotificationObserver load_observer1( |
| 254 &shell()->web_contents()->GetController()); | 254 &shell()->web_contents()->GetController()); |
| 255 ASSERT_TRUE(ExecuteScript(shell()->web_contents(), | 255 ASSERT_TRUE( |
| 256 "window.location.href=\"nonexistent:12121\";")); | 256 ExecuteScript(shell(), "window.location.href=\"nonexistent:12121\";")); |
| 257 load_observer1.Wait(); | 257 load_observer1.Wait(); |
| 258 EXPECT_FALSE(shell()->web_contents()->GetController().GetPendingEntry()); | 258 EXPECT_FALSE(shell()->web_contents()->GetController().GetPendingEntry()); |
| 259 | 259 |
| 260 LoadStopNotificationObserver load_observer2( | 260 LoadStopNotificationObserver load_observer2( |
| 261 &shell()->web_contents()->GetController()); | 261 &shell()->web_contents()->GetController()); |
| 262 ASSERT_TRUE(ExecuteScript(shell()->web_contents(), | 262 ASSERT_TRUE(ExecuteScript(shell(), "window.location.href=\"#foo\";")); |
| 263 "window.location.href=\"#foo\";")); | |
| 264 load_observer2.Wait(); | 263 load_observer2.Wait(); |
| 265 EXPECT_EQ(embedded_test_server()->GetURL("/title1.html#foo"), | 264 EXPECT_EQ(embedded_test_server()->GetURL("/title1.html#foo"), |
| 266 shell()->web_contents()->GetVisibleURL()); | 265 shell()->web_contents()->GetVisibleURL()); |
| 267 } | 266 } |
| 268 | 267 |
| 269 // Crashes under ThreadSanitizer, http://crbug.com/356758. | 268 // Crashes under ThreadSanitizer, http://crbug.com/356758. |
| 270 #if defined(OS_WIN) || defined(OS_ANDROID) \ | 269 #if defined(OS_WIN) || defined(OS_ANDROID) \ |
| 271 || defined(THREAD_SANITIZER) | 270 || defined(THREAD_SANITIZER) |
| 272 #define MAYBE_GetSizeForNewRenderView DISABLED_GetSizeForNewRenderView | 271 #define MAYBE_GetSizeForNewRenderView DISABLED_GetSizeForNewRenderView |
| 273 #else | 272 #else |
| (...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 395 } | 394 } |
| 396 | 395 |
| 397 IN_PROC_BROWSER_TEST_F(WebContentsImplBrowserTest, | 396 IN_PROC_BROWSER_TEST_F(WebContentsImplBrowserTest, |
| 398 AppendingFrameInWebUIDoesNotCrash) { | 397 AppendingFrameInWebUIDoesNotCrash) { |
| 399 const GURL kWebUIUrl("chrome://tracing"); | 398 const GURL kWebUIUrl("chrome://tracing"); |
| 400 const char kJSCodeForAppendingFrame[] = | 399 const char kJSCodeForAppendingFrame[] = |
| 401 "document.body.appendChild(document.createElement('iframe'));"; | 400 "document.body.appendChild(document.createElement('iframe'));"; |
| 402 | 401 |
| 403 NavigateToURL(shell(), kWebUIUrl); | 402 NavigateToURL(shell(), kWebUIUrl); |
| 404 | 403 |
| 405 bool js_executed = content::ExecuteScript(shell()->web_contents(), | 404 bool js_executed = content::ExecuteScript(shell(), kJSCodeForAppendingFrame); |
| 406 kJSCodeForAppendingFrame); | |
| 407 EXPECT_TRUE(js_executed); | 405 EXPECT_TRUE(js_executed); |
| 408 } | 406 } |
| 409 | 407 |
| 410 // Observer class to track the creation of RenderFrameHost objects. It is used | 408 // Observer class to track the creation of RenderFrameHost objects. It is used |
| 411 // in subsequent tests. | 409 // in subsequent tests. |
| 412 class RenderFrameCreatedObserver : public WebContentsObserver { | 410 class RenderFrameCreatedObserver : public WebContentsObserver { |
| 413 public: | 411 public: |
| 414 RenderFrameCreatedObserver(Shell* shell) | 412 RenderFrameCreatedObserver(Shell* shell) |
| 415 : WebContentsObserver(shell->web_contents()), | 413 : WebContentsObserver(shell->web_contents()), |
| 416 last_rfh_(NULL) { | 414 last_rfh_(NULL) { |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 492 } | 490 } |
| 493 | 491 |
| 494 IN_PROC_BROWSER_TEST_F(WebContentsImplBrowserTest, | 492 IN_PROC_BROWSER_TEST_F(WebContentsImplBrowserTest, |
| 495 RenderViewCreatedForChildWindow) { | 493 RenderViewCreatedForChildWindow) { |
| 496 ASSERT_TRUE(embedded_test_server()->Start()); | 494 ASSERT_TRUE(embedded_test_server()->Start()); |
| 497 | 495 |
| 498 NavigateToURL(shell(), | 496 NavigateToURL(shell(), |
| 499 embedded_test_server()->GetURL("/title1.html")); | 497 embedded_test_server()->GetURL("/title1.html")); |
| 500 | 498 |
| 501 WebContentsAddedObserver new_web_contents_observer; | 499 WebContentsAddedObserver new_web_contents_observer; |
| 502 ASSERT_TRUE(ExecuteScript(shell()->web_contents(), | 500 ASSERT_TRUE(ExecuteScript(shell(), |
| 503 "var a = document.createElement('a');" | 501 "var a = document.createElement('a');" |
| 504 "a.href='./title2.html';" | 502 "a.href='./title2.html';" |
| 505 "a.target = '_blank';" | 503 "a.target = '_blank';" |
| 506 "document.body.appendChild(a);" | 504 "document.body.appendChild(a);" |
| 507 "a.click();")); | 505 "a.click();")); |
| 508 WebContents* new_web_contents = new_web_contents_observer.GetWebContents(); | 506 WebContents* new_web_contents = new_web_contents_observer.GetWebContents(); |
| 509 WaitForLoadStop(new_web_contents); | 507 WaitForLoadStop(new_web_contents); |
| 510 EXPECT_TRUE(new_web_contents_observer.RenderViewCreatedCalled()); | 508 EXPECT_TRUE(new_web_contents_observer.RenderViewCreatedCalled()); |
| 511 } | 509 } |
| 512 | 510 |
| (...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 692 | 690 |
| 693 } | 691 } |
| 694 | 692 |
| 695 IN_PROC_BROWSER_TEST_F(WebContentsImplBrowserTest, ChangeDisplayMode) { | 693 IN_PROC_BROWSER_TEST_F(WebContentsImplBrowserTest, ChangeDisplayMode) { |
| 696 ASSERT_TRUE(embedded_test_server()->Start()); | 694 ASSERT_TRUE(embedded_test_server()->Start()); |
| 697 WebDisplayModeDelegate delegate(blink::WebDisplayModeMinimalUi); | 695 WebDisplayModeDelegate delegate(blink::WebDisplayModeMinimalUi); |
| 698 shell()->web_contents()->SetDelegate(&delegate); | 696 shell()->web_contents()->SetDelegate(&delegate); |
| 699 | 697 |
| 700 NavigateToURL(shell(), GURL("about://blank")); | 698 NavigateToURL(shell(), GURL("about://blank")); |
| 701 | 699 |
| 702 ASSERT_TRUE(ExecuteScript(shell()->web_contents(), | 700 ASSERT_TRUE(ExecuteScript(shell(), |
| 703 "document.title = " | 701 "document.title = " |
| 704 " window.matchMedia('(display-mode:" | 702 " window.matchMedia('(display-mode:" |
| 705 " minimal-ui)').matches")); | 703 " minimal-ui)').matches")); |
| 706 EXPECT_EQ(base::ASCIIToUTF16("true"), shell()->web_contents()->GetTitle()); | 704 EXPECT_EQ(base::ASCIIToUTF16("true"), shell()->web_contents()->GetTitle()); |
| 707 | 705 |
| 708 delegate.set_mode(blink::WebDisplayModeFullscreen); | 706 delegate.set_mode(blink::WebDisplayModeFullscreen); |
| 709 // Simulate widget is entering fullscreen (changing size is enough). | 707 // Simulate widget is entering fullscreen (changing size is enough). |
| 710 shell()->web_contents()->GetRenderViewHost()->GetWidget()->WasResized(); | 708 shell()->web_contents()->GetRenderViewHost()->GetWidget()->WasResized(); |
| 711 | 709 |
| 712 ASSERT_TRUE(ExecuteScript(shell()->web_contents(), | 710 ASSERT_TRUE(ExecuteScript(shell(), |
| 713 "document.title = " | 711 "document.title = " |
| 714 " window.matchMedia('(display-mode:" | 712 " window.matchMedia('(display-mode:" |
| 715 " fullscreen)').matches")); | 713 " fullscreen)').matches")); |
| 716 EXPECT_EQ(base::ASCIIToUTF16("true"), shell()->web_contents()->GetTitle()); | 714 EXPECT_EQ(base::ASCIIToUTF16("true"), shell()->web_contents()->GetTitle()); |
| 717 } | 715 } |
| 718 | 716 |
| 719 // Observer class used to verify that WebContentsObservers are notified | 717 // Observer class used to verify that WebContentsObservers are notified |
| 720 // when the page scale factor changes. | 718 // when the page scale factor changes. |
| 721 // See WebContentsImplBrowserTest.ChangePageScale. | 719 // See WebContentsImplBrowserTest.ChangePageScale. |
| 722 class MockPageScaleObserver : public WebContentsObserver { | 720 class MockPageScaleObserver : public WebContentsObserver { |
| (...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 852 IN_PROC_BROWSER_TEST_F(WebContentsImplBrowserTest, NewNamedWindow) { | 850 IN_PROC_BROWSER_TEST_F(WebContentsImplBrowserTest, NewNamedWindow) { |
| 853 ASSERT_TRUE(embedded_test_server()->Start()); | 851 ASSERT_TRUE(embedded_test_server()->Start()); |
| 854 | 852 |
| 855 GURL url = embedded_test_server()->GetURL("/click-noreferrer-links.html"); | 853 GURL url = embedded_test_server()->GetURL("/click-noreferrer-links.html"); |
| 856 EXPECT_TRUE(NavigateToURL(shell(), url)); | 854 EXPECT_TRUE(NavigateToURL(shell(), url)); |
| 857 | 855 |
| 858 { | 856 { |
| 859 ShellAddedObserver new_shell_observer; | 857 ShellAddedObserver new_shell_observer; |
| 860 | 858 |
| 861 // Open a new, named window. | 859 // Open a new, named window. |
| 862 EXPECT_TRUE(ExecuteScript(shell()->web_contents(), | 860 EXPECT_TRUE( |
| 863 "window.open('about:blank','new_window');")); | 861 ExecuteScript(shell(), "window.open('about:blank','new_window');")); |
| 864 | 862 |
| 865 Shell* new_shell = new_shell_observer.GetShell(); | 863 Shell* new_shell = new_shell_observer.GetShell(); |
| 866 WaitForLoadStop(new_shell->web_contents()); | 864 WaitForLoadStop(new_shell->web_contents()); |
| 867 | 865 |
| 868 EXPECT_EQ("new_window", | 866 EXPECT_EQ("new_window", |
| 869 static_cast<WebContentsImpl*>(new_shell->web_contents()) | 867 static_cast<WebContentsImpl*>(new_shell->web_contents()) |
| 870 ->GetFrameTree()->root()->frame_name()); | 868 ->GetFrameTree()->root()->frame_name()); |
| 871 | 869 |
| 872 bool success = false; | 870 bool success = false; |
| 873 EXPECT_TRUE(ExecuteScriptAndExtractBool( | 871 EXPECT_TRUE(ExecuteScriptAndExtractBool( |
| 874 new_shell->web_contents(), | 872 new_shell, |
| 875 "window.domAutomationController.send(window.name == 'new_window');", | 873 "window.domAutomationController.send(window.name == 'new_window');", |
| 876 &success)); | 874 &success)); |
| 877 EXPECT_TRUE(success); | 875 EXPECT_TRUE(success); |
| 878 } | 876 } |
| 879 | 877 |
| 880 { | 878 { |
| 881 ShellAddedObserver new_shell_observer; | 879 ShellAddedObserver new_shell_observer; |
| 882 | 880 |
| 883 // Test clicking a target=foo link. | 881 // Test clicking a target=foo link. |
| 884 bool success = false; | 882 bool success = false; |
| 885 EXPECT_TRUE(ExecuteScriptAndExtractBool( | 883 EXPECT_TRUE(ExecuteScriptAndExtractBool( |
| 886 shell()->web_contents(), | 884 shell(), |
| 887 "window.domAutomationController.send(clickSameSiteTargetedLink());", | 885 "window.domAutomationController.send(clickSameSiteTargetedLink());", |
| 888 &success)); | 886 &success)); |
| 889 EXPECT_TRUE(success); | 887 EXPECT_TRUE(success); |
| 890 | 888 |
| 891 Shell* new_shell = new_shell_observer.GetShell(); | 889 Shell* new_shell = new_shell_observer.GetShell(); |
| 892 WaitForLoadStop(new_shell->web_contents()); | 890 WaitForLoadStop(new_shell->web_contents()); |
| 893 | 891 |
| 894 EXPECT_EQ("foo", | 892 EXPECT_EQ("foo", |
| 895 static_cast<WebContentsImpl*>(new_shell->web_contents()) | 893 static_cast<WebContentsImpl*>(new_shell->web_contents()) |
| 896 ->GetFrameTree()->root()->frame_name()); | 894 ->GetFrameTree()->root()->frame_name()); |
| (...skipping 29 matching lines...) Expand all Loading... |
| 926 cross_site_delayer.WaitForWillStartRequest(); | 924 cross_site_delayer.WaitForWillStartRequest(); |
| 927 | 925 |
| 928 // Click on a link in the page. This will show the BeforeUnload dialog. | 926 // Click on a link in the page. This will show the BeforeUnload dialog. |
| 929 // Ensure the dialog is not dismissed, which will cause it to still be | 927 // Ensure the dialog is not dismissed, which will cause it to still be |
| 930 // present when the cross-site navigation later commits. | 928 // present when the cross-site navigation later commits. |
| 931 // Note: the javascript function executed will not do the link click but | 929 // Note: the javascript function executed will not do the link click but |
| 932 // schedule it for afterwards. Since the BeforeUnload event is synchronous, | 930 // schedule it for afterwards. Since the BeforeUnload event is synchronous, |
| 933 // clicking on the link right away would cause the ExecuteScript to never | 931 // clicking on the link right away would cause the ExecuteScript to never |
| 934 // return. | 932 // return. |
| 935 SetShouldProceedOnBeforeUnload(shell(), false); | 933 SetShouldProceedOnBeforeUnload(shell(), false); |
| 936 EXPECT_TRUE(ExecuteScript(shell()->web_contents(), "clickLinkSoon()")); | 934 EXPECT_TRUE(ExecuteScript(shell(), "clickLinkSoon()")); |
| 937 WaitForAppModalDialog(shell()); | 935 WaitForAppModalDialog(shell()); |
| 938 | 936 |
| 939 // Have the cross-site navigation commit. The main RenderFrameHost should | 937 // Have the cross-site navigation commit. The main RenderFrameHost should |
| 940 // still be loading after that. | 938 // still be loading after that. |
| 941 cross_site_delayer.ResumeNavigation(); | 939 cross_site_delayer.ResumeNavigation(); |
| 942 cross_site_delayer.WaitForNavigationFinished(); | 940 cross_site_delayer.WaitForNavigationFinished(); |
| 943 EXPECT_TRUE(shell()->web_contents()->IsLoading()); | 941 EXPECT_TRUE(shell()->web_contents()->IsLoading()); |
| 944 } | 942 } |
| 945 | 943 |
| 946 namespace { | 944 namespace { |
| (...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1163 // Check that pre-warmed process isn't used. | 1161 // Check that pre-warmed process isn't used. |
| 1164 EXPECT_NE(renderer_id, web_contents->GetRenderProcessHost()->GetID()); | 1162 EXPECT_NE(renderer_id, web_contents->GetRenderProcessHost()->GetID()); |
| 1165 EXPECT_EQ(1, web_contents->GetController().GetEntryCount()); | 1163 EXPECT_EQ(1, web_contents->GetController().GetEntryCount()); |
| 1166 NavigationEntry* entry = | 1164 NavigationEntry* entry = |
| 1167 web_contents->GetController().GetLastCommittedEntry(); | 1165 web_contents->GetController().GetLastCommittedEntry(); |
| 1168 ASSERT_TRUE(entry); | 1166 ASSERT_TRUE(entry); |
| 1169 EXPECT_EQ(web_ui_url, entry->GetURL()); | 1167 EXPECT_EQ(web_ui_url, entry->GetURL()); |
| 1170 } | 1168 } |
| 1171 | 1169 |
| 1172 } // namespace content | 1170 } // namespace content |
| OLD | NEW |