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

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: Indent fixes 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,
111 SessionStorageNamespace* session_storage_namespace,
110 Profile* profile, 112 Profile* profile,
111 const GURL& url, 113 const GURL& url,
112 const GURL& referrer, 114 const GURL& referrer,
113 int expected_number_of_loads, 115 int expected_number_of_loads,
114 FinalStatus expected_final_status) 116 FinalStatus expected_final_status)
115 : PrerenderContents(prerender_manager, prerender_tracker, profile, 117 : PrerenderContents(prerender_manager, prerender_tracker,
118 session_storage_namespace, profile,
116 url, referrer, ORIGIN_LINK_REL_PRERENDER, 119 url, referrer, ORIGIN_LINK_REL_PRERENDER,
117 PrerenderManager::kNoExperiment), 120 PrerenderManager::kNoExperiment),
118 number_of_loads_(0), 121 number_of_loads_(0),
119 expected_number_of_loads_(expected_number_of_loads), 122 expected_number_of_loads_(expected_number_of_loads),
120 expected_final_status_(expected_final_status), 123 expected_final_status_(expected_final_status),
121 new_render_view_host_(NULL), 124 new_render_view_host_(NULL),
122 was_hidden_(false), 125 was_hidden_(false),
123 was_shown_(false), 126 was_shown_(false),
124 should_be_shown_(expected_final_status == FINAL_STATUS_USED), 127 should_be_shown_(expected_final_status == FINAL_STATUS_USED),
125 quit_message_loop_on_destruction_( 128 quit_message_loop_on_destruction_(
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
288 const std::deque<FinalStatus>& expected_final_status_queue) 291 const std::deque<FinalStatus>& expected_final_status_queue)
289 : expected_number_of_loads_(expected_number_of_loads), 292 : expected_number_of_loads_(expected_number_of_loads),
290 expected_final_status_queue_(expected_final_status_queue) { 293 expected_final_status_queue_(expected_final_status_queue) {
291 VLOG(1) << "Factory created with queue length " << 294 VLOG(1) << "Factory created with queue length " <<
292 expected_final_status_queue_.size(); 295 expected_final_status_queue_.size();
293 } 296 }
294 297
295 virtual PrerenderContents* CreatePrerenderContents( 298 virtual PrerenderContents* CreatePrerenderContents(
296 PrerenderManager* prerender_manager, 299 PrerenderManager* prerender_manager,
297 PrerenderTracker* prerender_tracker, 300 PrerenderTracker* prerender_tracker,
301 SessionStorageNamespace* session_storage_namespace,
298 Profile* profile, 302 Profile* profile,
299 const GURL& url, 303 const GURL& url,
300 const GURL& referrer, 304 const GURL& referrer,
301 Origin origin, 305 Origin origin,
302 uint8 experiment_id) OVERRIDE { 306 uint8 experiment_id) OVERRIDE {
303 CHECK(!expected_final_status_queue_.empty()) << 307 CHECK(!expected_final_status_queue_.empty()) <<
304 "Creating prerender contents for " << url.path() << 308 "Creating prerender contents for " << url.path() <<
305 " with no expected final status"; 309 " with no expected final status";
306 FinalStatus expected_final_status = expected_final_status_queue_.front(); 310 FinalStatus expected_final_status = expected_final_status_queue_.front();
307 expected_final_status_queue_.pop_front(); 311 expected_final_status_queue_.pop_front();
308 VLOG(1) << "Creating prerender contents for " << url.path() << 312 VLOG(1) << "Creating prerender contents for " << url.path() <<
309 " with expected final status " << expected_final_status; 313 " with expected final status " << expected_final_status;
310 VLOG(1) << expected_final_status_queue_.size() << " left in the queue."; 314 VLOG(1) << expected_final_status_queue_.size() << " left in the queue.";
311 return new TestPrerenderContents(prerender_manager, prerender_tracker, 315 return new TestPrerenderContents(prerender_manager, prerender_tracker,
316 session_storage_namespace,
312 profile, url, 317 profile, url,
313 referrer, expected_number_of_loads_, 318 referrer, expected_number_of_loads_,
314 expected_final_status); 319 expected_final_status);
315 } 320 }
316 321
317 private: 322 private:
318 int expected_number_of_loads_; 323 int expected_number_of_loads_;
319 std::deque<FinalStatus> expected_final_status_queue_; 324 std::deque<FinalStatus> expected_final_status_queue_;
320 }; 325 };
321 326
(...skipping 479 matching lines...) Expand 10 before | Expand all | Expand 10 after
801 } 806 }
802 807
803 // Checks that the visibility API works when the prerender is quickly opened 808 // Checks that the visibility API works when the prerender is quickly opened
804 // in a new tab before it stops loading. 809 // in a new tab before it stops loading.
805 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderVisibilityQuickSwitch) { 810 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderVisibilityQuickSwitch) {
806 PrerenderTestURL("files/prerender/prerender_visibility_quick.html", 811 PrerenderTestURL("files/prerender/prerender_visibility_quick.html",
807 FINAL_STATUS_USED, 0); 812 FINAL_STATUS_USED, 0);
808 NavigateToDestURL(); 813 NavigateToDestURL();
809 } 814 }
810 815
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 816 // Checks that the prerendering of a page is canceled correctly when a
848 // Javascript alert is called. 817 // Javascript alert is called.
849 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderAlertBeforeOnload) { 818 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderAlertBeforeOnload) {
850 PrerenderTestURL("files/prerender/prerender_alert_before_onload.html", 819 PrerenderTestURL("files/prerender/prerender_alert_before_onload.html",
851 FINAL_STATUS_JAVASCRIPT_ALERT, 820 FINAL_STATUS_JAVASCRIPT_ALERT,
852 1); 821 1);
853 } 822 }
854 823
855 // Checks that the prerendering of a page is canceled correctly when a 824 // Checks that the prerendering of a page is canceled correctly when a
856 // Javascript alert is called. 825 // 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" 1510 // 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. 1511 // and both pages are in the same domain the prerendered page is not used.
1543 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, 1512 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest,
1544 PrerenderSameDomainWindowOpenerClickTarget) { 1513 PrerenderSameDomainWindowOpenerClickTarget) {
1545 PrerenderTestURL("files/prerender/prerender_page.html", 1514 PrerenderTestURL("files/prerender/prerender_page.html",
1546 FINAL_STATUS_WINDOW_OPENER, 1515 FINAL_STATUS_WINDOW_OPENER,
1547 1); 1516 1);
1548 OpenDestURLViaClickTarget(); 1517 OpenDestURLViaClickTarget();
1549 } 1518 }
1550 1519
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 1520 // 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. 1521 // certificate will never be seen since it's an https top-level resource.
1578 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderSSLClientCertTopLevel) { 1522 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderSSLClientCertTopLevel) {
1579 net::TestServer::HTTPSOptions https_options; 1523 net::TestServer::HTTPSOptions https_options;
1580 https_options.request_client_certificate = true; 1524 https_options.request_client_certificate = true;
1581 net::TestServer https_server(https_options, 1525 net::TestServer https_server(https_options,
1582 FilePath(FILE_PATH_LITERAL("chrome/test/data"))); 1526 FilePath(FILE_PATH_LITERAL("chrome/test/data")));
1583 ASSERT_TRUE(https_server.Start()); 1527 ASSERT_TRUE(https_server.Start());
1584 GURL https_url = https_server.GetURL("files/prerender/prerender_page.html"); 1528 GURL https_url = https_server.GetURL("files/prerender/prerender_page.html");
1585 PrerenderTestURL(https_url, FINAL_STATUS_SSL_CLIENT_CERTIFICATE_REQUESTED, 1); 1529 PrerenderTestURL(https_url, FINAL_STATUS_SSL_CLIENT_CERTIFICATE_REQUESTED, 1);
(...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after
1832 1776
1833 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderClickNavigateGoBack) { 1777 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderClickNavigateGoBack) {
1834 PrerenderTestURL("files/prerender/prerender_page_with_link.html", 1778 PrerenderTestURL("files/prerender/prerender_page_with_link.html",
1835 FINAL_STATUS_USED, 1779 FINAL_STATUS_USED,
1836 1); 1780 1);
1837 OpenDestURLViaClick(); 1781 OpenDestURLViaClick();
1838 NavigateToNextPageAfterPrerender(browser()); 1782 NavigateToNextPageAfterPrerender(browser());
1839 GoBackToPrerender(browser()); 1783 GoBackToPrerender(browser());
1840 } 1784 }
1841 1785
1842 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, 1786 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderClickNewWindow) {
1843 PrerenderClickNewWindowClickGoBack) {
1844 PrerenderTestURL("files/prerender/prerender_page_with_link.html", 1787 PrerenderTestURL("files/prerender/prerender_page_with_link.html",
1845 FINAL_STATUS_USED, 1788 FINAL_STATUS_SESSION_STORAGE_NAMESPACE_MISMATCH,
1846 1); 1789 1);
1847 OpenDestURLViaClickNewWindow(); 1790 OpenDestURLViaClickNewWindow();
1848 Browser* new_browser = BrowserList::GetLastActive(); 1791 }
1849 NavigateToNextPageAfterPrerender(new_browser); 1792
1850 GoBackToPrerender(new_browser); 1793 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderClickNewForegroundTab) {
1794 PrerenderTestURL("files/prerender/prerender_page_with_link.html",
1795 FINAL_STATUS_SESSION_STORAGE_NAMESPACE_MISMATCH,
1796 1);
1797 OpenDestURLViaClickNewForegroundTab();
1798 }
1799
1800 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderClickNewBackgroundTab) {
1801 PrerenderTestURL("files/prerender/prerender_page_with_link.html",
1802 FINAL_STATUS_SESSION_STORAGE_NAMESPACE_MISMATCH,
1803 1);
1804 OpenDestURLViaClickNewBackgroundTab();
1851 } 1805 }
1852 1806
1853 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, 1807 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) { 1808 NavigateToPrerenderedPageWhenDevToolsAttached) {
1912 DisableJavascriptCalls(); 1809 DisableJavascriptCalls();
1913 TabContents* tab_contents = browser()->GetSelectedTabContents(); 1810 TabContents* tab_contents = browser()->GetSelectedTabContents();
1914 RenderViewHost* inspected_rvh = tab_contents->render_view_host(); 1811 RenderViewHost* inspected_rvh = tab_contents->render_view_host();
1915 DevToolsManager* manager = DevToolsManager::GetInstance(); 1812 DevToolsManager* manager = DevToolsManager::GetInstance();
1916 FakeDevToolsClientHost client_host; 1813 FakeDevToolsClientHost client_host;
1917 manager->RegisterDevToolsClientHostFor(inspected_rvh, &client_host); 1814 manager->RegisterDevToolsClientHostFor(inspected_rvh, &client_host);
1918 const char* url = "files/prerender/prerender_page.html"; 1815 const char* url = "files/prerender/prerender_page.html";
1919 PrerenderTestURL(url, FINAL_STATUS_DEVTOOLS_ATTACHED, 1); 1816 PrerenderTestURL(url, FINAL_STATUS_DEVTOOLS_ATTACHED, 1);
1920 NavigateToURL(url); 1817 NavigateToURL(url);
1921 } 1818 }
1922 1819
1923 } // namespace prerender 1820 } // namespace prerender
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698