Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(520)

Side by Side Diff: chrome/browser/prerender/prerender_browsertest.cc

Issue 8392041: Prerendered tabs use the same SessionStorage namespace as the tab that triggered the prerender. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Remove check Created 9 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 <deque> 5 #include <deque>
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/path_service.h" 8 #include "base/path_service.h"
9 #include "base/stringprintf.h" 9 #include "base/stringprintf.h"
10 #include "base/string_util.h" 10 #include "base/string_util.h"
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
88 switch (status) { 88 switch (status) {
89 case FINAL_STATUS_USED: 89 case FINAL_STATUS_USED:
90 case FINAL_STATUS_WINDOW_OPENER: 90 case FINAL_STATUS_WINDOW_OPENER:
91 case FINAL_STATUS_APP_TERMINATING: 91 case FINAL_STATUS_APP_TERMINATING:
92 case FINAL_STATUS_FRAGMENT_MISMATCH: 92 case FINAL_STATUS_FRAGMENT_MISMATCH:
93 case FINAL_STATUS_CACHE_OR_HISTORY_CLEARED: 93 case FINAL_STATUS_CACHE_OR_HISTORY_CLEARED:
94 // We'll crash the renderer after it's loaded. 94 // We'll crash the renderer after it's loaded.
95 case FINAL_STATUS_RENDERER_CRASHED: 95 case FINAL_STATUS_RENDERER_CRASHED:
96 case FINAL_STATUS_CANCELLED: 96 case FINAL_STATUS_CANCELLED:
97 case FINAL_STATUS_DEVTOOLS_ATTACHED: 97 case FINAL_STATUS_DEVTOOLS_ATTACHED:
98 case FINAL_STATUS_SESSION_STORAGE_NAMESPACE_MISMATCH:
98 return true; 99 return true;
99 default: 100 default:
100 return false; 101 return false;
101 } 102 }
102 } 103 }
103 104
104 // PrerenderContents that stops the UI message loop on DidStopLoading(). 105 // PrerenderContents that stops the UI message loop on DidStopLoading().
105 class TestPrerenderContents : public PrerenderContents { 106 class TestPrerenderContents : public PrerenderContents {
106 public: 107 public:
107 TestPrerenderContents( 108 TestPrerenderContents(
108 PrerenderManager* prerender_manager, 109 PrerenderManager* prerender_manager,
109 PrerenderTracker* prerender_tracker, 110 PrerenderTracker* prerender_tracker,
110 Profile* profile, 111 Profile* profile,
111 const GURL& url, 112 const GURL& url,
112 const GURL& referrer, 113 const GURL& referrer,
113 int expected_number_of_loads, 114 int expected_number_of_loads,
114 FinalStatus expected_final_status) 115 FinalStatus expected_final_status)
115 : PrerenderContents(prerender_manager, prerender_tracker, profile, 116 : PrerenderContents(prerender_manager, prerender_tracker,
116 url, referrer, ORIGIN_LINK_REL_PRERENDER, 117 profile, url, referrer, ORIGIN_LINK_REL_PRERENDER,
117 PrerenderManager::kNoExperiment), 118 PrerenderManager::kNoExperiment),
118 number_of_loads_(0), 119 number_of_loads_(0),
119 expected_number_of_loads_(expected_number_of_loads), 120 expected_number_of_loads_(expected_number_of_loads),
120 expected_final_status_(expected_final_status), 121 expected_final_status_(expected_final_status),
121 new_render_view_host_(NULL), 122 new_render_view_host_(NULL),
122 was_hidden_(false), 123 was_hidden_(false),
123 was_shown_(false), 124 was_shown_(false),
124 should_be_shown_(expected_final_status == FINAL_STATUS_USED), 125 should_be_shown_(expected_final_status == FINAL_STATUS_USED),
125 quit_message_loop_on_destruction_( 126 quit_message_loop_on_destruction_(
126 expected_final_status != FINAL_STATUS_EVICTED && 127 expected_final_status != FINAL_STATUS_EVICTED &&
(...skipping 425 matching lines...) Expand 10 before | Expand all | Expand 10 after
552 browser->GoBack(CURRENT_TAB); 553 browser->GoBack(CURRENT_TAB);
553 back_nav_observer.Wait(); 554 back_nav_observer.Wait();
554 bool original_prerender_page = false; 555 bool original_prerender_page = false;
555 ASSERT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractBool( 556 ASSERT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractBool(
556 browser->GetSelectedTabContents()->render_view_host(), L"", 557 browser->GetSelectedTabContents()->render_view_host(), L"",
557 L"window.domAutomationController.send(IsOriginalPrerenderPage())", 558 L"window.domAutomationController.send(IsOriginalPrerenderPage())",
558 &original_prerender_page)); 559 &original_prerender_page));
559 EXPECT_TRUE(original_prerender_page); 560 EXPECT_TRUE(original_prerender_page);
560 } 561 }
561 562
563 // Goes back to the page that was active before the prerender was swapped
564 // in. This must be called when the prerendered page is the current page
565 // in the active tab.
566 void GoBackToPageBeforePrerender(Browser* browser) {
567 ui_test_utils::WindowedNotificationObserver back_nav_observer(
568 content::NOTIFICATION_NAV_ENTRY_COMMITTED,
569 content::NotificationService::AllSources());
570 browser->GoBack(CURRENT_TAB);
571 back_nav_observer.Wait();
572 bool js_result;
573 ASSERT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractBool(
574 browser->GetSelectedTabContents()->render_view_host(), L"",
575 L"window.domAutomationController.send(DidBackToOriginalPagePass())",
576 &js_result));
577 EXPECT_TRUE(js_result);
578 }
579
562 // Should be const but test_server()->GetURL(...) is not const. 580 // Should be const but test_server()->GetURL(...) is not const.
563 void NavigateToURL(const std::string& dest_html_file) { 581 void NavigateToURL(const std::string& dest_html_file) {
564 GURL dest_url = test_server()->GetURL(dest_html_file); 582 GURL dest_url = test_server()->GetURL(dest_html_file);
565 NavigateToURLImpl(dest_url, CURRENT_TAB); 583 NavigateToURLImpl(dest_url, CURRENT_TAB);
566 } 584 }
567 585
568 bool UrlIsInPrerenderManager(const std::string& html_file) { 586 bool UrlIsInPrerenderManager(const std::string& html_file) {
569 GURL dest_url = test_server()->GetURL(html_file); 587 GURL dest_url = test_server()->GetURL(html_file);
570 return (prerender_manager()->FindEntry(dest_url) != NULL); 588 return (prerender_manager()->FindEntry(dest_url) != NULL);
571 } 589 }
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after
801 } 819 }
802 820
803 // Checks that the visibility API works when the prerender is quickly opened 821 // Checks that the visibility API works when the prerender is quickly opened
804 // in a new tab before it stops loading. 822 // in a new tab before it stops loading.
805 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderVisibilityQuickSwitch) { 823 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderVisibilityQuickSwitch) {
806 PrerenderTestURL("files/prerender/prerender_visibility_quick.html", 824 PrerenderTestURL("files/prerender/prerender_visibility_quick.html",
807 FINAL_STATUS_USED, 0); 825 FINAL_STATUS_USED, 0);
808 NavigateToDestURL(); 826 NavigateToDestURL();
809 } 827 }
810 828
811 // Checks that the visibility API works when opening a page in a new hidden
812 // tab.
813 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderVisibilityBackgroundTab) {
814 PrerenderTestURL("files/prerender/prerender_visibility_hidden.html",
815 FINAL_STATUS_USED,
816 1);
817 NavigateToDestURLWithDisposition(NEW_BACKGROUND_TAB);
818 }
819
820 // Checks that the visibility API works when opening a page in a new hidden
821 // tab, which is switched to before it stops loading.
822 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest,
823 PrerenderVisibilityBackgroundTabQuickSwitch) {
824 PrerenderTestURL("files/prerender/prerender_visibility_hidden_quick.html",
825 FINAL_STATUS_USED, 0);
826 NavigateToDestURLWithDisposition(NEW_BACKGROUND_TAB);
827 }
828
829 // Checks that the visibility API works when opening a page in a new foreground
830 // tab.
831 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderVisibilityForegroundTab) {
832 PrerenderTestURL("files/prerender/prerender_visibility.html",
833 FINAL_STATUS_USED,
834 1);
835 NavigateToDestURLWithDisposition(NEW_FOREGROUND_TAB);
836 }
837
838 // Checks that the visibility API works when the prerender is quickly opened
839 // in a new tab foreground before it stops loading.
840 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest,
841 PrerenderVisibilityForegroundTabQuickSwitch) {
842 PrerenderTestURL("files/prerender/prerender_visibility_quick.html",
843 FINAL_STATUS_USED, 0);
844 NavigateToDestURL();
845 }
846
847 // Checks that the prerendering of a page is canceled correctly when a 829 // Checks that the prerendering of a page is canceled correctly when a
848 // Javascript alert is called. 830 // Javascript alert is called.
849 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderAlertBeforeOnload) { 831 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderAlertBeforeOnload) {
850 PrerenderTestURL("files/prerender/prerender_alert_before_onload.html", 832 PrerenderTestURL("files/prerender/prerender_alert_before_onload.html",
851 FINAL_STATUS_JAVASCRIPT_ALERT, 833 FINAL_STATUS_JAVASCRIPT_ALERT,
852 1); 834 1);
853 } 835 }
854 836
855 // Checks that the prerendering of a page is canceled correctly when a 837 // Checks that the prerendering of a page is canceled correctly when a
856 // Javascript alert is called. 838 // Javascript alert is called.
(...skipping 684 matching lines...) Expand 10 before | Expand all | Expand 10 after
1541 // Checks that if a page is opened due to click on a href with target="_blank" 1523 // Checks that if a page is opened due to click on a href with target="_blank"
1542 // and both pages are in the same domain the prerendered page is not used. 1524 // and both pages are in the same domain the prerendered page is not used.
1543 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, 1525 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest,
1544 PrerenderSameDomainWindowOpenerClickTarget) { 1526 PrerenderSameDomainWindowOpenerClickTarget) {
1545 PrerenderTestURL("files/prerender/prerender_page.html", 1527 PrerenderTestURL("files/prerender/prerender_page.html",
1546 FINAL_STATUS_WINDOW_OPENER, 1528 FINAL_STATUS_WINDOW_OPENER,
1547 1); 1529 1);
1548 OpenDestURLViaClickTarget(); 1530 OpenDestURLViaClickTarget();
1549 } 1531 }
1550 1532
1551 // Checks that if a page is opened in a new window by javascript and both the
1552 // pages are in different domains, the prerendered page is used.
1553 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest,
1554 PrerenderCrossDomainWindowOpenerWindowOpen) {
1555 PrerenderTestURL(
1556 GetCrossDomainTestUrl("files/prerender/prerender_page.html"),
1557 FINAL_STATUS_USED,
1558 1);
1559 OpenDestURLViaWindowOpen();
1560 }
1561
1562 // Checks that if a page is opened due to click on a href with target="_blank"
1563 // and both pages are in different domains, the prerendered page is used.
1564 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest,
1565 PrerenderCrossDomainWindowOpenerClickTarget) {
1566 PrerenderTestURL(
1567 GetCrossDomainTestUrl("files/prerender/prerender_page.html"),
1568 FINAL_STATUS_USED,
1569 1);
1570 OpenDestURLViaClickTarget();
1571 }
1572
1573 // TODO(shishir): Add a test for the case when the page having the
1574 // prerendering link already has an opener set.
1575
1576 // Checks that a top-level page which would normally request an SSL client 1533 // Checks that a top-level page which would normally request an SSL client
1577 // certificate will never be seen since it's an https top-level resource. 1534 // certificate will never be seen since it's an https top-level resource.
1578 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderSSLClientCertTopLevel) { 1535 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderSSLClientCertTopLevel) {
1579 net::TestServer::HTTPSOptions https_options; 1536 net::TestServer::HTTPSOptions https_options;
1580 https_options.request_client_certificate = true; 1537 https_options.request_client_certificate = true;
1581 net::TestServer https_server(https_options, 1538 net::TestServer https_server(https_options,
1582 FilePath(FILE_PATH_LITERAL("chrome/test/data"))); 1539 FilePath(FILE_PATH_LITERAL("chrome/test/data")));
1583 ASSERT_TRUE(https_server.Start()); 1540 ASSERT_TRUE(https_server.Start());
1584 GURL https_url = https_server.GetURL("files/prerender/prerender_page.html"); 1541 GURL https_url = https_server.GetURL("files/prerender/prerender_page.html");
1585 PrerenderTestURL(https_url, FINAL_STATUS_SSL_CLIENT_CERTIFICATE_REQUESTED, 1); 1542 PrerenderTestURL(https_url, FINAL_STATUS_SSL_CLIENT_CERTIFICATE_REQUESTED, 1);
(...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after
1832 1789
1833 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderClickNavigateGoBack) { 1790 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderClickNavigateGoBack) {
1834 PrerenderTestURL("files/prerender/prerender_page_with_link.html", 1791 PrerenderTestURL("files/prerender/prerender_page_with_link.html",
1835 FINAL_STATUS_USED, 1792 FINAL_STATUS_USED,
1836 1); 1793 1);
1837 OpenDestURLViaClick(); 1794 OpenDestURLViaClick();
1838 NavigateToNextPageAfterPrerender(browser()); 1795 NavigateToNextPageAfterPrerender(browser());
1839 GoBackToPrerender(browser()); 1796 GoBackToPrerender(browser());
1840 } 1797 }
1841 1798
1842 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, 1799 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderClickNewWindow) {
1843 PrerenderClickNewWindowClickGoBack) {
1844 PrerenderTestURL("files/prerender/prerender_page_with_link.html", 1800 PrerenderTestURL("files/prerender/prerender_page_with_link.html",
1845 FINAL_STATUS_USED, 1801 FINAL_STATUS_SESSION_STORAGE_NAMESPACE_MISMATCH,
1846 1); 1802 1);
1847 OpenDestURLViaClickNewWindow(); 1803 OpenDestURLViaClickNewWindow();
1848 Browser* new_browser = BrowserList::GetLastActive(); 1804 }
1849 NavigateToNextPageAfterPrerender(new_browser); 1805
1850 GoBackToPrerender(new_browser); 1806 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderClickNewForegroundTab) {
1807 PrerenderTestURL("files/prerender/prerender_page_with_link.html",
1808 FINAL_STATUS_SESSION_STORAGE_NAMESPACE_MISMATCH,
1809 1);
1810 OpenDestURLViaClickNewForegroundTab();
1811 }
1812
1813 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderClickNewBackgroundTab) {
1814 PrerenderTestURL("files/prerender/prerender_page_with_link.html",
1815 FINAL_STATUS_SESSION_STORAGE_NAMESPACE_MISMATCH,
1816 1);
1817 OpenDestURLViaClickNewBackgroundTab();
1851 } 1818 }
1852 1819
1853 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, 1820 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest,
1854 PrerenderClickNewWindowNavigateGoBack) {
1855 PrerenderTestURL("files/prerender/prerender_page_with_link.html",
1856 FINAL_STATUS_USED,
1857 1);
1858 OpenDestURLViaClickNewWindow();
1859 Browser* new_browser = BrowserList::GetLastActive();
1860 ClickToNextPageAfterPrerender(new_browser);
1861 GoBackToPrerender(new_browser);
1862 }
1863
1864 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest,
1865 PrerenderClickNewForegroundTabClickGoBack) {
1866 PrerenderTestURL("files/prerender/prerender_page_with_link.html",
1867 FINAL_STATUS_USED,
1868 1);
1869 OpenDestURLViaClickNewForegroundTab();
1870 NavigateToNextPageAfterPrerender(browser());
1871 GoBackToPrerender(browser());
1872 }
1873
1874 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest,
1875 PrerenderClickNewForegroundTabNavigateGoBack) {
1876 PrerenderTestURL("files/prerender/prerender_page_with_link.html",
1877 FINAL_STATUS_USED,
1878 1);
1879 OpenDestURLViaClickNewForegroundTab();
1880 ClickToNextPageAfterPrerender(browser());
1881 GoBackToPrerender(browser());
1882 }
1883
1884 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest,
1885 PrerenderClickNewBackgroundTabClickGoBack) {
1886 PrerenderTestURL("files/prerender/prerender_page_with_link.html",
1887 FINAL_STATUS_USED,
1888 1);
1889 OpenDestURLViaClickNewBackgroundTab();
1890 // SelectNextTab completes synchronously, in terms of
1891 // updating the active index.
1892 browser()->SelectNextTab();
1893 NavigateToNextPageAfterPrerender(browser());
1894 GoBackToPrerender(browser());
1895 }
1896
1897 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest,
1898 PrerenderClickNewBackgroundTabNavigateGoBack) {
1899 PrerenderTestURL("files/prerender/prerender_page_with_link.html",
1900 FINAL_STATUS_USED,
1901 1);
1902 OpenDestURLViaClickNewBackgroundTab();
1903 // SelectNextTab completes synchronously, in terms of
1904 // updating the active index.
1905 browser()->SelectNextTab();
1906 ClickToNextPageAfterPrerender(browser());
1907 GoBackToPrerender(browser());
1908 }
1909
1910 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest,
1911 NavigateToPrerenderedPageWhenDevToolsAttached) { 1821 NavigateToPrerenderedPageWhenDevToolsAttached) {
1912 DisableJavascriptCalls(); 1822 DisableJavascriptCalls();
1913 TabContents* tab_contents = browser()->GetSelectedTabContents(); 1823 TabContents* tab_contents = browser()->GetSelectedTabContents();
1914 RenderViewHost* inspected_rvh = tab_contents->render_view_host(); 1824 RenderViewHost* inspected_rvh = tab_contents->render_view_host();
1915 DevToolsManager* manager = DevToolsManager::GetInstance(); 1825 DevToolsManager* manager = DevToolsManager::GetInstance();
1916 FakeDevToolsClientHost client_host; 1826 FakeDevToolsClientHost client_host;
1917 manager->RegisterDevToolsClientHostFor(inspected_rvh, &client_host); 1827 manager->RegisterDevToolsClientHostFor(inspected_rvh, &client_host);
1918 const char* url = "files/prerender/prerender_page.html"; 1828 const char* url = "files/prerender/prerender_page.html";
1919 PrerenderTestURL(url, FINAL_STATUS_DEVTOOLS_ATTACHED, 1); 1829 PrerenderTestURL(url, FINAL_STATUS_DEVTOOLS_ATTACHED, 1);
1920 NavigateToURL(url); 1830 NavigateToURL(url);
1921 } 1831 }
1922 1832
1833 // Validate that the sessionStorage namespace remains the same when swapping
1834 // in a prerendered page.
1835 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderSessionStorage) {
1836 set_loader_path("files/prerender/prerender_loader_with_session_storage.html");
1837 PrerenderTestURL(GetCrossDomainTestUrl("files/prerender/prerender_page.html"),
1838 FINAL_STATUS_USED,
1839 1);
1840 NavigateToDestURL();
1841 GoBackToPageBeforePrerender(browser());
1842 }
1843
1923 } // namespace prerender 1844 } // namespace prerender
OLDNEW
« no previous file with comments | « chrome/browser/autocomplete/autocomplete_edit.cc ('k') | chrome/browser/prerender/prerender_contents.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698