Chromium Code Reviews| 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 <deque> | 5 #include <deque> |
| 6 #include <vector> | 6 #include <vector> |
| 7 | 7 |
| 8 #include "base/bind.h" | 8 #include "base/bind.h" |
| 9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
| 10 #include "base/files/file_path.h" | 10 #include "base/files/file_path.h" |
| 11 #include "base/memory/ref_counted_memory.h" | 11 #include "base/memory/ref_counted_memory.h" |
| 12 #include "base/memory/scoped_vector.h" | 12 #include "base/memory/scoped_vector.h" |
| 13 #include "base/memory/weak_ptr.h" | 13 #include "base/memory/weak_ptr.h" |
| 14 #include "base/path_service.h" | 14 #include "base/path_service.h" |
| 15 #include "base/prefs/pref_service.h" | 15 #include "base/prefs/pref_service.h" |
| 16 #include "base/run_loop.h" | 16 #include "base/run_loop.h" |
| 17 #include "base/strings/string_util.h" | 17 #include "base/strings/string_util.h" |
| 18 #include "base/strings/stringprintf.h" | 18 #include "base/strings/stringprintf.h" |
| 19 #include "base/strings/utf_string_conversions.h" | 19 #include "base/strings/utf_string_conversions.h" |
| 20 #include "base/test/histogram_tester.h" | |
| 20 #include "base/test/test_timeouts.h" | 21 #include "base/test/test_timeouts.h" |
| 21 #include "base/values.h" | 22 #include "base/values.h" |
| 22 #include "chrome/browser/browsing_data/browsing_data_helper.h" | 23 #include "chrome/browser/browsing_data/browsing_data_helper.h" |
| 23 #include "chrome/browser/browsing_data/browsing_data_remover.h" | 24 #include "chrome/browser/browsing_data/browsing_data_remover.h" |
| 24 #include "chrome/browser/browsing_data/browsing_data_remover_test_util.h" | 25 #include "chrome/browser/browsing_data/browsing_data_remover_test_util.h" |
| 25 #include "chrome/browser/chrome_content_browser_client.h" | 26 #include "chrome/browser/chrome_content_browser_client.h" |
| 26 #include "chrome/browser/chrome_notification_types.h" | 27 #include "chrome/browser/chrome_notification_types.h" |
| 27 #include "chrome/browser/content_settings/host_content_settings_map.h" | 28 #include "chrome/browser/content_settings/host_content_settings_map.h" |
| 28 #include "chrome/browser/extensions/api/web_navigation/web_navigation_api.h" | 29 #include "chrome/browser/extensions/api/web_navigation/web_navigation_api.h" |
| 29 #include "chrome/browser/extensions/extension_apitest.h" | 30 #include "chrome/browser/extensions/extension_apitest.h" |
| (...skipping 27 matching lines...) Expand all Loading... | |
| 57 #include "chrome/browser/ui/tabs/tab_strip_model.h" | 58 #include "chrome/browser/ui/tabs/tab_strip_model.h" |
| 58 #include "chrome/browser/ui/tabs/tab_strip_model_observer.h" | 59 #include "chrome/browser/ui/tabs/tab_strip_model_observer.h" |
| 59 #include "chrome/common/chrome_paths.h" | 60 #include "chrome/common/chrome_paths.h" |
| 60 #include "chrome/common/chrome_switches.h" | 61 #include "chrome/common/chrome_switches.h" |
| 61 #include "chrome/common/extensions/extension_constants.h" | 62 #include "chrome/common/extensions/extension_constants.h" |
| 62 #include "chrome/common/extensions/manifest_handlers/mime_types_handler.h" | 63 #include "chrome/common/extensions/manifest_handlers/mime_types_handler.h" |
| 63 #include "chrome/common/pref_names.h" | 64 #include "chrome/common/pref_names.h" |
| 64 #include "chrome/test/base/in_process_browser_test.h" | 65 #include "chrome/test/base/in_process_browser_test.h" |
| 65 #include "chrome/test/base/test_switches.h" | 66 #include "chrome/test/base/test_switches.h" |
| 66 #include "chrome/test/base/ui_test_utils.h" | 67 #include "chrome/test/base/ui_test_utils.h" |
| 67 #include "chrome/test/base/uma_histogram_helper.h" | |
| 68 #include "content/public/browser/browser_message_filter.h" | 68 #include "content/public/browser/browser_message_filter.h" |
| 69 #include "content/public/browser/devtools_agent_host.h" | 69 #include "content/public/browser/devtools_agent_host.h" |
| 70 #include "content/public/browser/devtools_client_host.h" | 70 #include "content/public/browser/devtools_client_host.h" |
| 71 #include "content/public/browser/devtools_manager.h" | 71 #include "content/public/browser/devtools_manager.h" |
| 72 #include "content/public/browser/navigation_controller.h" | 72 #include "content/public/browser/navigation_controller.h" |
| 73 #include "content/public/browser/navigation_entry.h" | 73 #include "content/public/browser/navigation_entry.h" |
| 74 #include "content/public/browser/notification_service.h" | 74 #include "content/public/browser/notification_service.h" |
| 75 #include "content/public/browser/render_frame_host.h" | 75 #include "content/public/browser/render_frame_host.h" |
| 76 #include "content/public/browser/render_process_host.h" | 76 #include "content/public/browser/render_process_host.h" |
| 77 #include "content/public/browser/render_view_host.h" | 77 #include "content/public/browser/render_view_host.h" |
| (...skipping 1422 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1500 result)); | 1500 result)); |
| 1501 } | 1501 } |
| 1502 | 1502 |
| 1503 void RunJS(const char* js) { | 1503 void RunJS(const char* js) { |
| 1504 ASSERT_TRUE(content::ExecuteScript( | 1504 ASSERT_TRUE(content::ExecuteScript( |
| 1505 GetActiveWebContents(), | 1505 GetActiveWebContents(), |
| 1506 base::StringPrintf("window.domAutomationController.send(%s)", | 1506 base::StringPrintf("window.domAutomationController.send(%s)", |
| 1507 js).c_str())); | 1507 js).c_str())); |
| 1508 } | 1508 } |
| 1509 | 1509 |
| 1510 const base::HistogramTester& histogram_tester() { return histograms_; } | |
|
mmenke
2014/07/18 14:53:39
nit: Should name the variable histogram_tester_ a
Mike Lerman
2014/07/18 15:55:52
Done.
| |
| 1511 | |
| 1510 protected: | 1512 protected: |
| 1511 bool autostart_test_server_; | 1513 bool autostart_test_server_; |
| 1512 | 1514 |
| 1513 private: | 1515 private: |
| 1514 // TODO(davidben): Remove this altogether so the tests don't globally assume | 1516 // TODO(davidben): Remove this altogether so the tests don't globally assume |
| 1515 // only one prerender. | 1517 // only one prerender. |
| 1516 TestPrerenderContents* GetPrerenderContents() const { | 1518 TestPrerenderContents* GetPrerenderContents() const { |
| 1517 return GetPrerenderContentsFor(dest_url_); | 1519 return GetPrerenderContentsFor(dest_url_); |
| 1518 } | 1520 } |
| 1519 | 1521 |
| (...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1650 #endif | 1652 #endif |
| 1651 NeverRunsExternalProtocolHandlerDelegate external_protocol_handler_delegate_; | 1653 NeverRunsExternalProtocolHandlerDelegate external_protocol_handler_delegate_; |
| 1652 GURL dest_url_; | 1654 GURL dest_url_; |
| 1653 scoped_ptr<net::SpawnedTestServer> https_src_server_; | 1655 scoped_ptr<net::SpawnedTestServer> https_src_server_; |
| 1654 bool call_javascript_; | 1656 bool call_javascript_; |
| 1655 bool check_load_events_; | 1657 bool check_load_events_; |
| 1656 std::string loader_host_override_; | 1658 std::string loader_host_override_; |
| 1657 std::string loader_path_; | 1659 std::string loader_path_; |
| 1658 std::string loader_query_; | 1660 std::string loader_query_; |
| 1659 Browser* explicitly_set_browser_; | 1661 Browser* explicitly_set_browser_; |
| 1662 base::HistogramTester histograms_; | |
| 1660 }; | 1663 }; |
| 1661 | 1664 |
| 1662 // Checks that a page is correctly prerendered in the case of a | 1665 // Checks that a page is correctly prerendered in the case of a |
| 1663 // <link rel=prerender> tag and then loaded into a tab in response to a | 1666 // <link rel=prerender> tag and then loaded into a tab in response to a |
| 1664 // navigation. | 1667 // navigation. |
| 1665 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPage) { | 1668 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPage) { |
| 1666 UMAHistogramHelper histograms; | |
| 1667 | |
| 1668 PrerenderTestURL("files/prerender/prerender_page.html", FINAL_STATUS_USED, 1); | 1669 PrerenderTestURL("files/prerender/prerender_page.html", FINAL_STATUS_USED, 1); |
| 1669 EXPECT_EQ(1, GetPrerenderDomContentLoadedEventCountForLinkNumber(0)); | 1670 EXPECT_EQ(1, GetPrerenderDomContentLoadedEventCountForLinkNumber(0)); |
| 1670 histograms.Fetch(); | 1671 histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLT", 1); |
| 1671 histograms.ExpectTotalCount("Prerender.none_PerceivedPLT", 1); | 1672 histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0); |
| 1672 histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0); | 1673 histogram_tester().ExpectTotalCount( |
| 1673 histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatchedComplete", 0); | 1674 "Prerender.none_PerceivedPLTMatchedComplete", 0); |
| 1674 histograms.ExpectTotalCount("Prerender.websame_PrerenderNotSwappedInPLT", 1); | 1675 histogram_tester().ExpectTotalCount( |
| 1676 "Prerender.websame_PrerenderNotSwappedInPLT", 1); | |
| 1675 | 1677 |
| 1676 ChannelDestructionWatcher channel_close_watcher; | 1678 ChannelDestructionWatcher channel_close_watcher; |
| 1677 channel_close_watcher.WatchChannel( | 1679 channel_close_watcher.WatchChannel( |
| 1678 GetActiveWebContents()->GetRenderProcessHost()); | 1680 GetActiveWebContents()->GetRenderProcessHost()); |
| 1679 NavigateToDestURL(); | 1681 NavigateToDestURL(); |
| 1680 channel_close_watcher.WaitForChannelClose(); | 1682 channel_close_watcher.WaitForChannelClose(); |
| 1681 | 1683 |
| 1682 histograms.Fetch(); | 1684 histogram_tester().ExpectTotalCount("Prerender.websame_PerceivedPLT", 1); |
| 1683 histograms.ExpectTotalCount("Prerender.websame_PerceivedPLT", 1); | 1685 histogram_tester().ExpectTotalCount("Prerender.websame_PerceivedPLTMatched", |
| 1684 histograms.ExpectTotalCount("Prerender.websame_PerceivedPLTMatched", 1); | 1686 1); |
| 1685 histograms.ExpectTotalCount( | 1687 histogram_tester().ExpectTotalCount( |
| 1686 "Prerender.websame_PerceivedPLTMatchedComplete", 1); | 1688 "Prerender.websame_PerceivedPLTMatchedComplete", 1); |
| 1687 | 1689 |
| 1688 ASSERT_TRUE(IsEmptyPrerenderLinkManager()); | 1690 ASSERT_TRUE(IsEmptyPrerenderLinkManager()); |
| 1689 } | 1691 } |
| 1690 | 1692 |
| 1691 // Checks that cross-domain prerenders emit the correct histograms. | 1693 // Checks that cross-domain prerenders emit the correct histograms. |
| 1692 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPageCrossDomain) { | 1694 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPageCrossDomain) { |
| 1693 UMAHistogramHelper histograms; | |
| 1694 | |
| 1695 PrerenderTestURL(GetCrossDomainTestUrl("files/prerender/prerender_page.html"), | 1695 PrerenderTestURL(GetCrossDomainTestUrl("files/prerender/prerender_page.html"), |
| 1696 FINAL_STATUS_USED, 1); | 1696 FINAL_STATUS_USED, 1); |
| 1697 histograms.Fetch(); | 1697 histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLT", 1); |
| 1698 histograms.ExpectTotalCount("Prerender.none_PerceivedPLT", 1); | 1698 histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0); |
| 1699 histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0); | 1699 histogram_tester().ExpectTotalCount( |
| 1700 histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatchedComplete", 0); | 1700 "Prerender.none_PerceivedPLTMatchedComplete", 0); |
| 1701 histograms.ExpectTotalCount("Prerender.webcross_PrerenderNotSwappedInPLT", 1); | 1701 histogram_tester().ExpectTotalCount( |
| 1702 "Prerender.webcross_PrerenderNotSwappedInPLT", 1); | |
| 1702 | 1703 |
| 1703 NavigateToDestURL(); | 1704 NavigateToDestURL(); |
| 1704 histograms.Fetch(); | 1705 histogram_tester().ExpectTotalCount("Prerender.webcross_PerceivedPLT", 1); |
| 1705 histograms.ExpectTotalCount("Prerender.webcross_PerceivedPLT", 1); | 1706 histogram_tester().ExpectTotalCount("Prerender.webcross_PerceivedPLTMatched", |
| 1706 histograms.ExpectTotalCount("Prerender.webcross_PerceivedPLTMatched", 1); | 1707 1); |
| 1707 histograms.ExpectTotalCount( | 1708 histogram_tester().ExpectTotalCount( |
| 1708 "Prerender.webcross_PerceivedPLTMatchedComplete", 1); | 1709 "Prerender.webcross_PerceivedPLTMatchedComplete", 1); |
| 1709 } | 1710 } |
| 1710 | 1711 |
| 1711 // Checks that pending prerenders launch and receive proper event treatment. | 1712 // Checks that pending prerenders launch and receive proper event treatment. |
| 1712 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPagePending) { | 1713 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPagePending) { |
| 1713 scoped_ptr<TestPrerender> prerender = | 1714 scoped_ptr<TestPrerender> prerender = |
| 1714 PrerenderTestURL("files/prerender/prerender_page_pending.html", | 1715 PrerenderTestURL("files/prerender/prerender_page_pending.html", |
| 1715 FINAL_STATUS_USED, 1); | 1716 FINAL_STATUS_USED, 1); |
| 1716 | 1717 |
| 1717 // Navigate to the prerender. | 1718 // Navigate to the prerender. |
| (...skipping 358 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2076 FINAL_STATUS_USED, | 2077 FINAL_STATUS_USED, |
| 2077 2); | 2078 2); |
| 2078 NavigateToURL("files/prerender/prerender_page.html"); | 2079 NavigateToURL("files/prerender/prerender_page.html"); |
| 2079 } | 2080 } |
| 2080 | 2081 |
| 2081 // Checks that we get the right PPLT histograms for client redirect prerenders | 2082 // Checks that we get the right PPLT histograms for client redirect prerenders |
| 2082 // and navigations when the referring page is Google. | 2083 // and navigations when the referring page is Google. |
| 2083 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, | 2084 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
| 2084 PrerenderLocationReplaceGWSHistograms) { | 2085 PrerenderLocationReplaceGWSHistograms) { |
| 2085 DisableJavascriptCalls(); | 2086 DisableJavascriptCalls(); |
| 2086 UMAHistogramHelper histograms; | |
| 2087 | 2087 |
| 2088 // The loader page should look like Google. | 2088 // The loader page should look like Google. |
| 2089 const std::string kGoogleDotCom("www.google.com"); | 2089 const std::string kGoogleDotCom("www.google.com"); |
| 2090 SetLoaderHostOverride(kGoogleDotCom); | 2090 SetLoaderHostOverride(kGoogleDotCom); |
| 2091 set_loader_path("files/prerender/prerender_loader_with_replace_state.html"); | 2091 set_loader_path("files/prerender/prerender_loader_with_replace_state.html"); |
| 2092 | 2092 |
| 2093 GURL dest_url = GetCrossDomainTestUrl( | 2093 GURL dest_url = GetCrossDomainTestUrl( |
| 2094 "files/prerender/prerender_deferred_image.html"); | 2094 "files/prerender/prerender_deferred_image.html"); |
| 2095 | 2095 |
| 2096 GURL prerender_url = test_server()->GetURL( | 2096 GURL prerender_url = test_server()->GetURL( |
| 2097 "files/prerender/prerender_location_replace.html?" + | 2097 "files/prerender/prerender_location_replace.html?" + |
| 2098 net::EscapeQueryParamValue(dest_url.spec(), false) + | 2098 net::EscapeQueryParamValue(dest_url.spec(), false) + |
| 2099 "#prerender"); | 2099 "#prerender"); |
| 2100 GURL::Replacements replacements; | 2100 GURL::Replacements replacements; |
| 2101 replacements.SetHostStr(kGoogleDotCom); | 2101 replacements.SetHostStr(kGoogleDotCom); |
| 2102 prerender_url = prerender_url.ReplaceComponents(replacements); | 2102 prerender_url = prerender_url.ReplaceComponents(replacements); |
| 2103 | 2103 |
| 2104 // The prerender will not completely load until after the swap, so wait for a | 2104 // The prerender will not completely load until after the swap, so wait for a |
| 2105 // title change before calling DidPrerenderPass. | 2105 // title change before calling DidPrerenderPass. |
| 2106 scoped_ptr<TestPrerender> prerender = | 2106 scoped_ptr<TestPrerender> prerender = |
| 2107 PrerenderTestURL(prerender_url, FINAL_STATUS_USED, 1); | 2107 PrerenderTestURL(prerender_url, FINAL_STATUS_USED, 1); |
| 2108 WaitForASCIITitle(prerender->contents()->prerender_contents(), kReadyTitle); | 2108 WaitForASCIITitle(prerender->contents()->prerender_contents(), kReadyTitle); |
| 2109 EXPECT_TRUE(DidPrerenderPass(prerender->contents()->prerender_contents())); | 2109 EXPECT_TRUE(DidPrerenderPass(prerender->contents()->prerender_contents())); |
| 2110 EXPECT_EQ(1, prerender->number_of_loads()); | 2110 EXPECT_EQ(1, prerender->number_of_loads()); |
| 2111 | 2111 |
| 2112 histograms.Fetch(); | 2112 histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLT", 1); |
| 2113 histograms.ExpectTotalCount("Prerender.none_PerceivedPLT", 1); | 2113 histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0); |
| 2114 histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0); | 2114 histogram_tester().ExpectTotalCount( |
| 2115 histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatchedComplete", 0); | 2115 "Prerender.none_PerceivedPLTMatchedComplete", 0); |
| 2116 // Although there is a client redirect, it is dropped from histograms because | 2116 // Although there is a client redirect, it is dropped from histograms because |
| 2117 // it is a Google URL. The target page itself does not load until after the | 2117 // it is a Google URL. The target page itself does not load until after the |
| 2118 // swap. | 2118 // swap. |
| 2119 histograms.ExpectTotalCount("Prerender.gws_PrerenderNotSwappedInPLT", 0); | 2119 histogram_tester().ExpectTotalCount("Prerender.gws_PrerenderNotSwappedInPLT", |
| 2120 0); | |
| 2120 | 2121 |
| 2121 GURL navigate_url = test_server()->GetURL( | 2122 GURL navigate_url = test_server()->GetURL( |
| 2122 "files/prerender/prerender_location_replace.html?" + | 2123 "files/prerender/prerender_location_replace.html?" + |
| 2123 net::EscapeQueryParamValue(dest_url.spec(), false) + | 2124 net::EscapeQueryParamValue(dest_url.spec(), false) + |
| 2124 "#navigate"); | 2125 "#navigate"); |
| 2125 navigate_url = navigate_url.ReplaceComponents(replacements); | 2126 navigate_url = navigate_url.ReplaceComponents(replacements); |
| 2126 | 2127 |
| 2127 NavigationOrSwapObserver swap_observer( | 2128 NavigationOrSwapObserver swap_observer( |
| 2128 current_browser()->tab_strip_model(), | 2129 current_browser()->tab_strip_model(), |
| 2129 GetActiveWebContents(), 2); | 2130 GetActiveWebContents(), 2); |
| 2130 current_browser()->OpenURL(OpenURLParams( | 2131 current_browser()->OpenURL(OpenURLParams( |
| 2131 navigate_url, Referrer(), CURRENT_TAB, | 2132 navigate_url, Referrer(), CURRENT_TAB, |
| 2132 content::PAGE_TRANSITION_TYPED, false)); | 2133 content::PAGE_TRANSITION_TYPED, false)); |
| 2133 swap_observer.Wait(); | 2134 swap_observer.Wait(); |
| 2134 | 2135 |
| 2135 EXPECT_TRUE(DidDisplayPass(GetActiveWebContents())); | 2136 EXPECT_TRUE(DidDisplayPass(GetActiveWebContents())); |
| 2136 | 2137 |
| 2137 histograms.Fetch(); | 2138 histogram_tester().ExpectTotalCount("Prerender.gws_PrerenderNotSwappedInPLT", |
| 2138 histograms.ExpectTotalCount("Prerender.gws_PrerenderNotSwappedInPLT", 0); | 2139 0); |
| 2139 histograms.ExpectTotalCount("Prerender.gws_PerceivedPLT", 1); | 2140 histogram_tester().ExpectTotalCount("Prerender.gws_PerceivedPLT", 1); |
| 2140 histograms.ExpectTotalCount("Prerender.gws_PerceivedPLTMatched", 1); | 2141 histogram_tester().ExpectTotalCount("Prerender.gws_PerceivedPLTMatched", 1); |
| 2141 histograms.ExpectTotalCount( | 2142 histogram_tester().ExpectTotalCount( |
| 2142 "Prerender.gws_PerceivedPLTMatchedComplete", 1); | 2143 "Prerender.gws_PerceivedPLTMatchedComplete", 1); |
| 2143 | 2144 |
| 2144 // The client redirect does /not/ count as a miss because it's a Google URL. | 2145 // The client redirect does /not/ count as a miss because it's a Google URL. |
| 2145 histograms.ExpectTotalCount("Prerender.PerceivedPLTFirstAfterMiss", 0); | 2146 histogram_tester().ExpectTotalCount("Prerender.PerceivedPLTFirstAfterMiss", |
| 2147 0); | |
| 2146 } | 2148 } |
| 2147 | 2149 |
| 2148 // Checks that client-issued redirects work with prerendering. | 2150 // Checks that client-issued redirects work with prerendering. |
| 2149 // This version navigates to the final destination page, rather than the | 2151 // This version navigates to the final destination page, rather than the |
| 2150 // page which does the redirection via a mouse click. | 2152 // page which does the redirection via a mouse click. |
| 2151 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, | 2153 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
| 2152 PrerenderClientRedirectNavigateToSecondViaClick) { | 2154 PrerenderClientRedirectNavigateToSecondViaClick) { |
| 2153 GURL prerender_url = test_server()->GetURL( | 2155 GURL prerender_url = test_server()->GetURL( |
| 2154 CreateClientRedirect("files/prerender/prerender_page.html")); | 2156 CreateClientRedirect("files/prerender/prerender_page.html")); |
| 2155 GURL destination_url = test_server()->GetURL( | 2157 GURL destination_url = test_server()->GetURL( |
| (...skipping 1185 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3341 PrerenderTestURL("files/prerender/prerender_xhr_put.html", | 3343 PrerenderTestURL("files/prerender/prerender_xhr_put.html", |
| 3342 FINAL_STATUS_WOULD_HAVE_BEEN_USED, 0); | 3344 FINAL_STATUS_WOULD_HAVE_BEEN_USED, 0); |
| 3343 OpenDestURLViaClick(); | 3345 OpenDestURLViaClick(); |
| 3344 } | 3346 } |
| 3345 | 3347 |
| 3346 // Make sure that the MatchComplete dummy works in the normal case. Once | 3348 // Make sure that the MatchComplete dummy works in the normal case. Once |
| 3347 // a prerender is cancelled because of a script, a dummy must be created to | 3349 // a prerender is cancelled because of a script, a dummy must be created to |
| 3348 // account for the MatchComplete case, and it must have a final status of | 3350 // account for the MatchComplete case, and it must have a final status of |
| 3349 // FINAL_STATUS_WOULD_HAVE_BEEN_USED. | 3351 // FINAL_STATUS_WOULD_HAVE_BEEN_USED. |
| 3350 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, MatchCompleteDummy) { | 3352 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, MatchCompleteDummy) { |
| 3351 UMAHistogramHelper histograms; | |
| 3352 | 3353 |
| 3353 std::vector<FinalStatus> expected_final_status_queue; | 3354 std::vector<FinalStatus> expected_final_status_queue; |
| 3354 expected_final_status_queue.push_back(FINAL_STATUS_INVALID_HTTP_METHOD); | 3355 expected_final_status_queue.push_back(FINAL_STATUS_INVALID_HTTP_METHOD); |
| 3355 expected_final_status_queue.push_back(FINAL_STATUS_WOULD_HAVE_BEEN_USED); | 3356 expected_final_status_queue.push_back(FINAL_STATUS_WOULD_HAVE_BEEN_USED); |
| 3356 PrerenderTestURL("files/prerender/prerender_xhr_put.html", | 3357 PrerenderTestURL("files/prerender/prerender_xhr_put.html", |
| 3357 expected_final_status_queue, 1); | 3358 expected_final_status_queue, 1); |
| 3358 histograms.Fetch(); | 3359 histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLT", 1); |
| 3359 histograms.ExpectTotalCount("Prerender.none_PerceivedPLT", 1); | 3360 histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0); |
| 3360 histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0); | 3361 histogram_tester().ExpectTotalCount( |
| 3361 histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatchedComplete", 0); | 3362 "Prerender.none_PerceivedPLTMatchedComplete", 0); |
| 3362 histograms.ExpectTotalCount("Prerender.websame_PrerenderNotSwappedInPLT", 1); | 3363 histogram_tester().ExpectTotalCount( |
| 3364 "Prerender.websame_PrerenderNotSwappedInPLT", 1); | |
| 3363 | 3365 |
| 3364 NavigateToDestURL(); | 3366 NavigateToDestURL(); |
| 3365 histograms.Fetch(); | 3367 histogram_tester().ExpectTotalCount("Prerender.websame_PerceivedPLT", 1); |
| 3366 histograms.ExpectTotalCount("Prerender.websame_PerceivedPLT", 1); | 3368 histogram_tester().ExpectTotalCount("Prerender.websame_PerceivedPLTMatched", |
| 3367 histograms.ExpectTotalCount("Prerender.websame_PerceivedPLTMatched", 0); | 3369 0); |
| 3368 histograms.ExpectTotalCount( | 3370 histogram_tester().ExpectTotalCount( |
| 3369 "Prerender.websame_PerceivedPLTMatchedComplete", 1); | 3371 "Prerender.websame_PerceivedPLTMatchedComplete", 1); |
| 3370 } | 3372 } |
| 3371 | 3373 |
| 3372 // Verify that a navigation that hits a MatchComplete dummy while another is in | 3374 // Verify that a navigation that hits a MatchComplete dummy while another is in |
| 3373 // progress does not also classify the previous navigation as a MatchComplete. | 3375 // progress does not also classify the previous navigation as a MatchComplete. |
| 3374 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, | 3376 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
| 3375 MatchCompleteDummyCancelNavigation) { | 3377 MatchCompleteDummyCancelNavigation) { |
| 3376 UMAHistogramHelper histograms; | |
| 3377 | 3378 |
|
mmenke
2014/07/18 14:53:39
nit: Remove blank line.
Mike Lerman
2014/07/18 15:55:52
Done.
| |
| 3378 // Arrange for a URL to hang. | 3379 // Arrange for a URL to hang. |
| 3379 const GURL kNoCommitUrl("http://never-respond.example.com"); | 3380 const GURL kNoCommitUrl("http://never-respond.example.com"); |
| 3380 base::FilePath file(FILE_PATH_LITERAL( | 3381 base::FilePath file(FILE_PATH_LITERAL( |
| 3381 "chrome/test/data/prerender/prerender_page.html")); | 3382 "chrome/test/data/prerender/prerender_page.html")); |
| 3382 base::RunLoop hang_loop; | 3383 base::RunLoop hang_loop; |
| 3383 BrowserThread::PostTask( | 3384 BrowserThread::PostTask( |
| 3384 BrowserThread::IO, FROM_HERE, | 3385 BrowserThread::IO, FROM_HERE, |
| 3385 base::Bind(&CreateHangingFirstRequestInterceptorOnIO, kNoCommitUrl, | 3386 base::Bind(&CreateHangingFirstRequestInterceptorOnIO, kNoCommitUrl, |
| 3386 file, hang_loop.QuitClosure())); | 3387 file, hang_loop.QuitClosure())); |
| 3387 | 3388 |
| 3388 // First, fire a prerender that aborts after it completes its load. | 3389 // First, fire a prerender that aborts after it completes its load. |
| 3389 std::vector<FinalStatus> expected_final_status_queue; | 3390 std::vector<FinalStatus> expected_final_status_queue; |
| 3390 expected_final_status_queue.push_back(FINAL_STATUS_INVALID_HTTP_METHOD); | 3391 expected_final_status_queue.push_back(FINAL_STATUS_INVALID_HTTP_METHOD); |
| 3391 expected_final_status_queue.push_back(FINAL_STATUS_WOULD_HAVE_BEEN_USED); | 3392 expected_final_status_queue.push_back(FINAL_STATUS_WOULD_HAVE_BEEN_USED); |
| 3392 PrerenderTestURL("files/prerender/prerender_xhr_put.html", | 3393 PrerenderTestURL("files/prerender/prerender_xhr_put.html", |
| 3393 expected_final_status_queue, 1); | 3394 expected_final_status_queue, 1); |
| 3394 histograms.Fetch(); | 3395 histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLT", 1); |
| 3395 histograms.ExpectTotalCount("Prerender.none_PerceivedPLT", 1); | 3396 histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0); |
| 3396 histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0); | 3397 histogram_tester().ExpectTotalCount( |
| 3397 histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatchedComplete", 0); | 3398 "Prerender.none_PerceivedPLTMatchedComplete", 0); |
| 3398 histograms.ExpectTotalCount("Prerender.websame_PrerenderNotSwappedInPLT", 1); | 3399 histogram_tester().ExpectTotalCount( |
| 3400 "Prerender.websame_PrerenderNotSwappedInPLT", 1); | |
| 3399 | 3401 |
| 3400 // Open the hanging URL in a new tab. Wait for both the new tab to open and | 3402 // Open the hanging URL in a new tab. Wait for both the new tab to open and |
| 3401 // the hanging request to be scheduled. | 3403 // the hanging request to be scheduled. |
| 3402 ui_test_utils::NavigateToURLWithDisposition( | 3404 ui_test_utils::NavigateToURLWithDisposition( |
| 3403 current_browser(), kNoCommitUrl, NEW_FOREGROUND_TAB, | 3405 current_browser(), kNoCommitUrl, NEW_FOREGROUND_TAB, |
| 3404 ui_test_utils::BROWSER_TEST_WAIT_FOR_TAB); | 3406 ui_test_utils::BROWSER_TEST_WAIT_FOR_TAB); |
| 3405 hang_loop.Run(); | 3407 hang_loop.Run(); |
| 3406 | 3408 |
| 3407 // Now interrupt that navigation and navigate to the destination URL. This | 3409 // Now interrupt that navigation and navigate to the destination URL. This |
| 3408 // should forcibly complete the previous navigation and also complete a | 3410 // should forcibly complete the previous navigation and also complete a |
| 3409 // WOULD_HAVE_BEEN_PRERENDERED navigation. | 3411 // WOULD_HAVE_BEEN_PRERENDERED navigation. |
| 3410 NavigateToDestURL(); | 3412 NavigateToDestURL(); |
| 3411 histograms.Fetch(); | 3413 histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLT", 2); |
| 3412 histograms.ExpectTotalCount("Prerender.none_PerceivedPLT", 2); | 3414 histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0); |
| 3413 histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0); | 3415 histogram_tester().ExpectTotalCount( |
| 3414 histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatchedComplete", 0); | 3416 "Prerender.none_PerceivedPLTMatchedComplete", 0); |
| 3415 histograms.ExpectTotalCount("Prerender.websame_PerceivedPLT", 1); | 3417 histogram_tester().ExpectTotalCount("Prerender.websame_PerceivedPLT", 1); |
| 3416 histograms.ExpectTotalCount("Prerender.websame_PerceivedPLTMatched", 0); | 3418 histogram_tester().ExpectTotalCount("Prerender.websame_PerceivedPLTMatched", |
| 3417 histograms.ExpectTotalCount( | 3419 0); |
| 3420 histogram_tester().ExpectTotalCount( | |
| 3418 "Prerender.websame_PerceivedPLTMatchedComplete", 1); | 3421 "Prerender.websame_PerceivedPLTMatchedComplete", 1); |
| 3419 } | 3422 } |
| 3420 | 3423 |
| 3421 class PrerenderBrowserTestWithNaCl : public PrerenderBrowserTest { | 3424 class PrerenderBrowserTestWithNaCl : public PrerenderBrowserTest { |
| 3422 public: | 3425 public: |
| 3423 PrerenderBrowserTestWithNaCl() {} | 3426 PrerenderBrowserTestWithNaCl() {} |
| 3424 virtual ~PrerenderBrowserTestWithNaCl() {} | 3427 virtual ~PrerenderBrowserTestWithNaCl() {} |
| 3425 | 3428 |
| 3426 virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { | 3429 virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { |
| 3427 PrerenderBrowserTest::SetUpCommandLine(command_line); | 3430 PrerenderBrowserTest::SetUpCommandLine(command_line); |
| (...skipping 362 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3790 prerenders[1]->WaitForStop(); | 3793 prerenders[1]->WaitForStop(); |
| 3791 | 3794 |
| 3792 // Check the referring page only got one copy of the event. | 3795 // Check the referring page only got one copy of the event. |
| 3793 EXPECT_FALSE(HadPrerenderEventErrors()); | 3796 EXPECT_FALSE(HadPrerenderEventErrors()); |
| 3794 } | 3797 } |
| 3795 | 3798 |
| 3796 // Checks that a deferred redirect to an image is not loaded until the page is | 3799 // Checks that a deferred redirect to an image is not loaded until the page is |
| 3797 // visible. Also test the right histogram events are emitted in this case. | 3800 // visible. Also test the right histogram events are emitted in this case. |
| 3798 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderDeferredImage) { | 3801 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderDeferredImage) { |
| 3799 DisableJavascriptCalls(); | 3802 DisableJavascriptCalls(); |
| 3800 UMAHistogramHelper histograms; | |
| 3801 | 3803 |
| 3802 // The prerender will not completely load until after the swap, so wait for a | 3804 // The prerender will not completely load until after the swap, so wait for a |
| 3803 // title change before calling DidPrerenderPass. | 3805 // title change before calling DidPrerenderPass. |
| 3804 scoped_ptr<TestPrerender> prerender = | 3806 scoped_ptr<TestPrerender> prerender = |
| 3805 PrerenderTestURL( | 3807 PrerenderTestURL( |
| 3806 "files/prerender/prerender_deferred_image.html", | 3808 "files/prerender/prerender_deferred_image.html", |
| 3807 FINAL_STATUS_USED, 0); | 3809 FINAL_STATUS_USED, 0); |
| 3808 WaitForASCIITitle(prerender->contents()->prerender_contents(), kReadyTitle); | 3810 WaitForASCIITitle(prerender->contents()->prerender_contents(), kReadyTitle); |
| 3809 EXPECT_EQ(1, GetPrerenderDomContentLoadedEventCountForLinkNumber(0)); | 3811 EXPECT_EQ(1, GetPrerenderDomContentLoadedEventCountForLinkNumber(0)); |
| 3810 EXPECT_TRUE(DidPrerenderPass(prerender->contents()->prerender_contents())); | 3812 EXPECT_TRUE(DidPrerenderPass(prerender->contents()->prerender_contents())); |
| 3811 EXPECT_EQ(0, prerender->number_of_loads()); | 3813 EXPECT_EQ(0, prerender->number_of_loads()); |
| 3812 histograms.Fetch(); | 3814 histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLT", 1); |
| 3813 histograms.ExpectTotalCount("Prerender.none_PerceivedPLT", 1); | 3815 histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0); |
| 3814 histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0); | 3816 histogram_tester().ExpectTotalCount( |
| 3815 histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatchedComplete", 0); | 3817 "Prerender.none_PerceivedPLTMatchedComplete", 0); |
| 3816 histograms.ExpectTotalCount("Prerender.websame_PrerenderNotSwappedInPLT", 0); | 3818 histogram_tester().ExpectTotalCount( |
| 3819 "Prerender.websame_PrerenderNotSwappedInPLT", 0); | |
| 3817 | 3820 |
| 3818 // Swap. | 3821 // Swap. |
| 3819 NavigationOrSwapObserver swap_observer(current_browser()->tab_strip_model(), | 3822 NavigationOrSwapObserver swap_observer(current_browser()->tab_strip_model(), |
| 3820 GetActiveWebContents()); | 3823 GetActiveWebContents()); |
| 3821 ui_test_utils::NavigateToURLWithDisposition( | 3824 ui_test_utils::NavigateToURLWithDisposition( |
| 3822 current_browser(), dest_url(), CURRENT_TAB, | 3825 current_browser(), dest_url(), CURRENT_TAB, |
| 3823 ui_test_utils::BROWSER_TEST_NONE); | 3826 ui_test_utils::BROWSER_TEST_NONE); |
| 3824 swap_observer.Wait(); | 3827 swap_observer.Wait(); |
| 3825 | 3828 |
| 3826 // The prerender never observes the final load. | 3829 // The prerender never observes the final load. |
| 3827 EXPECT_EQ(0, prerender->number_of_loads()); | 3830 EXPECT_EQ(0, prerender->number_of_loads()); |
| 3828 | 3831 |
| 3829 // Now check DidDisplayPass. | 3832 // Now check DidDisplayPass. |
| 3830 EXPECT_TRUE(DidDisplayPass(GetActiveWebContents())); | 3833 EXPECT_TRUE(DidDisplayPass(GetActiveWebContents())); |
| 3831 | 3834 |
| 3832 histograms.Fetch(); | 3835 histogram_tester().ExpectTotalCount( |
| 3833 histograms.ExpectTotalCount("Prerender.websame_PrerenderNotSwappedInPLT", 0); | 3836 "Prerender.websame_PrerenderNotSwappedInPLT", 0); |
| 3834 histograms.ExpectTotalCount("Prerender.websame_PerceivedPLT", 1); | 3837 histogram_tester().ExpectTotalCount("Prerender.websame_PerceivedPLT", 1); |
| 3835 histograms.ExpectTotalCount("Prerender.websame_PerceivedPLTMatched", 1); | 3838 histogram_tester().ExpectTotalCount("Prerender.websame_PerceivedPLTMatched", |
| 3836 histograms.ExpectTotalCount( | 3839 1); |
| 3840 histogram_tester().ExpectTotalCount( | |
| 3837 "Prerender.websame_PerceivedPLTMatchedComplete", 1); | 3841 "Prerender.websame_PerceivedPLTMatchedComplete", 1); |
| 3838 } | 3842 } |
| 3839 | 3843 |
| 3840 // Checks that a deferred redirect to an image is not loaded until the | 3844 // Checks that a deferred redirect to an image is not loaded until the |
| 3841 // page is visible, even after another redirect. | 3845 // page is visible, even after another redirect. |
| 3842 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, | 3846 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
| 3843 PrerenderDeferredImageAfterRedirect) { | 3847 PrerenderDeferredImageAfterRedirect) { |
| 3844 DisableJavascriptCalls(); | 3848 DisableJavascriptCalls(); |
| 3845 | 3849 |
| 3846 // The prerender will not completely load until after the swap, so wait for a | 3850 // The prerender will not completely load until after the swap, so wait for a |
| (...skipping 324 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 4171 base::Bind(&CreateCountingInterceptorOnIO, | 4175 base::Bind(&CreateCountingInterceptorOnIO, |
| 4172 kPingURL, empty_file, ping_counter.AsWeakPtr())); | 4176 kPingURL, empty_file, ping_counter.AsWeakPtr())); |
| 4173 | 4177 |
| 4174 PrerenderTestURL("files/prerender/prerender_page.html", FINAL_STATUS_USED, 1); | 4178 PrerenderTestURL("files/prerender/prerender_page.html", FINAL_STATUS_USED, 1); |
| 4175 OpenDestURLViaClickPing(kPingURL); | 4179 OpenDestURLViaClickPing(kPingURL); |
| 4176 | 4180 |
| 4177 ping_counter.WaitForCount(1); | 4181 ping_counter.WaitForCount(1); |
| 4178 } | 4182 } |
| 4179 | 4183 |
| 4180 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPPLTNormalNavigation) { | 4184 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPPLTNormalNavigation) { |
| 4181 UMAHistogramHelper histograms; | |
| 4182 | 4185 |
|
mmenke
2014/07/18 14:53:39
nit: Remove blank line.
Mike Lerman
2014/07/18 15:55:52
Done.
| |
| 4183 GURL url = test_server()->GetURL("files/prerender/prerender_page.html"); | 4186 GURL url = test_server()->GetURL("files/prerender/prerender_page.html"); |
| 4184 ui_test_utils::NavigateToURL(current_browser(), url); | 4187 ui_test_utils::NavigateToURL(current_browser(), url); |
| 4185 histograms.Fetch(); | 4188 histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLT", 1); |
| 4186 histograms.ExpectTotalCount("Prerender.none_PerceivedPLT", 1); | 4189 histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0); |
| 4187 histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0); | 4190 histogram_tester().ExpectTotalCount( |
| 4188 histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatchedComplete", 0); | 4191 "Prerender.none_PerceivedPLTMatchedComplete", 0); |
| 4189 } | 4192 } |
| 4190 | 4193 |
| 4191 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, | 4194 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
| 4192 PrerenderCookieChangeConflictTest) { | 4195 PrerenderCookieChangeConflictTest) { |
| 4193 NavigateStraightToURL( | 4196 NavigateStraightToURL( |
| 4194 "files/prerender/prerender_cookie.html?set=1&key=c&value=1"); | 4197 "files/prerender/prerender_cookie.html?set=1&key=c&value=1"); |
| 4195 | 4198 |
| 4196 GURL url = test_server()->GetURL( | 4199 GURL url = test_server()->GetURL( |
| 4197 "files/prerender/prerender_cookie.html?set=1&key=c&value=2"); | 4200 "files/prerender/prerender_cookie.html?set=1&key=c&value=2"); |
| 4198 | 4201 |
| (...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 4416 | 4419 |
| 4417 // Navigate to the URL entered. | 4420 // Navigate to the URL entered. |
| 4418 omnibox_view->model()->AcceptInput(CURRENT_TAB, false); | 4421 omnibox_view->model()->AcceptInput(CURRENT_TAB, false); |
| 4419 | 4422 |
| 4420 // Prerender should be running, but abandoned. | 4423 // Prerender should be running, but abandoned. |
| 4421 EXPECT_TRUE( | 4424 EXPECT_TRUE( |
| 4422 GetAutocompleteActionPredictor()->IsPrerenderAbandonedForTesting()); | 4425 GetAutocompleteActionPredictor()->IsPrerenderAbandonedForTesting()); |
| 4423 } | 4426 } |
| 4424 | 4427 |
| 4425 } // namespace prerender | 4428 } // namespace prerender |
| OLD | NEW |