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 base::HistogramTester* const histogram_tester() { | |
Ilya Sherman
2014/07/16 18:44:46
You're currently returning a const pointer, in the
Mike Lerman
2014/07/16 19:36:36
I'd say I hate C++ const, except Java's final isn'
| |
1511 return &histograms_; | |
1512 } | |
1513 | |
1510 protected: | 1514 protected: |
1511 bool autostart_test_server_; | 1515 bool autostart_test_server_; |
1512 | 1516 |
1513 private: | 1517 private: |
1514 // TODO(davidben): Remove this altogether so the tests don't globally assume | 1518 // TODO(davidben): Remove this altogether so the tests don't globally assume |
1515 // only one prerender. | 1519 // only one prerender. |
1516 TestPrerenderContents* GetPrerenderContents() const { | 1520 TestPrerenderContents* GetPrerenderContents() const { |
1517 return GetPrerenderContentsFor(dest_url_); | 1521 return GetPrerenderContentsFor(dest_url_); |
1518 } | 1522 } |
1519 | 1523 |
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1650 #endif | 1654 #endif |
1651 NeverRunsExternalProtocolHandlerDelegate external_protocol_handler_delegate_; | 1655 NeverRunsExternalProtocolHandlerDelegate external_protocol_handler_delegate_; |
1652 GURL dest_url_; | 1656 GURL dest_url_; |
1653 scoped_ptr<net::SpawnedTestServer> https_src_server_; | 1657 scoped_ptr<net::SpawnedTestServer> https_src_server_; |
1654 bool call_javascript_; | 1658 bool call_javascript_; |
1655 bool check_load_events_; | 1659 bool check_load_events_; |
1656 std::string loader_host_override_; | 1660 std::string loader_host_override_; |
1657 std::string loader_path_; | 1661 std::string loader_path_; |
1658 std::string loader_query_; | 1662 std::string loader_query_; |
1659 Browser* explicitly_set_browser_; | 1663 Browser* explicitly_set_browser_; |
1664 base::HistogramTester histograms_; | |
1660 }; | 1665 }; |
1661 | 1666 |
1662 // Checks that a page is correctly prerendered in the case of a | 1667 // 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 | 1668 // <link rel=prerender> tag and then loaded into a tab in response to a |
1664 // navigation. | 1669 // navigation. |
1665 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPage) { | 1670 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPage) { |
1666 UMAHistogramHelper histograms; | |
1667 | |
1668 PrerenderTestURL("files/prerender/prerender_page.html", FINAL_STATUS_USED, 1); | 1671 PrerenderTestURL("files/prerender/prerender_page.html", FINAL_STATUS_USED, 1); |
1669 EXPECT_EQ(1, GetPrerenderDomContentLoadedEventCountForLinkNumber(0)); | 1672 EXPECT_EQ(1, GetPrerenderDomContentLoadedEventCountForLinkNumber(0)); |
1670 histograms.Fetch(); | 1673 histogram_tester()->ExpectTotalCount("Prerender.none_PerceivedPLT", 1); |
1671 histograms.ExpectTotalCount("Prerender.none_PerceivedPLT", 1); | 1674 histogram_tester()->ExpectTotalCount( |
1672 histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0); | 1675 "Prerender.none_PerceivedPLTMatched", 0); |
1673 histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatchedComplete", 0); | 1676 histogram_tester()->ExpectTotalCount( |
1674 histograms.ExpectTotalCount("Prerender.websame_PrerenderNotSwappedInPLT", 1); | 1677 "Prerender.none_PerceivedPLTMatchedComplete", 0); |
1678 histogram_tester()->ExpectTotalCount( | |
1679 "Prerender.websame_PrerenderNotSwappedInPLT", 1); | |
1675 | 1680 |
1676 ChannelDestructionWatcher channel_close_watcher; | 1681 ChannelDestructionWatcher channel_close_watcher; |
1677 channel_close_watcher.WatchChannel( | 1682 channel_close_watcher.WatchChannel( |
1678 GetActiveWebContents()->GetRenderProcessHost()); | 1683 GetActiveWebContents()->GetRenderProcessHost()); |
1679 NavigateToDestURL(); | 1684 NavigateToDestURL(); |
1680 channel_close_watcher.WaitForChannelClose(); | 1685 channel_close_watcher.WaitForChannelClose(); |
1681 | 1686 |
1682 histograms.Fetch(); | 1687 histogram_tester()->ExpectTotalCount("Prerender.websame_PerceivedPLT", 1); |
1683 histograms.ExpectTotalCount("Prerender.websame_PerceivedPLT", 1); | 1688 histogram_tester()->ExpectTotalCount( |
1684 histograms.ExpectTotalCount("Prerender.websame_PerceivedPLTMatched", 1); | 1689 "Prerender.websame_PerceivedPLTMatched", 1); |
1685 histograms.ExpectTotalCount( | 1690 histogram_tester()->ExpectTotalCount( |
1686 "Prerender.websame_PerceivedPLTMatchedComplete", 1); | 1691 "Prerender.websame_PerceivedPLTMatchedComplete", 1); |
1687 | 1692 |
1688 ASSERT_TRUE(IsEmptyPrerenderLinkManager()); | 1693 ASSERT_TRUE(IsEmptyPrerenderLinkManager()); |
1689 } | 1694 } |
1690 | 1695 |
1691 // Checks that cross-domain prerenders emit the correct histograms. | 1696 // Checks that cross-domain prerenders emit the correct histograms. |
1692 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPageCrossDomain) { | 1697 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPageCrossDomain) { |
1693 UMAHistogramHelper histograms; | |
1694 | |
1695 PrerenderTestURL(GetCrossDomainTestUrl("files/prerender/prerender_page.html"), | 1698 PrerenderTestURL(GetCrossDomainTestUrl("files/prerender/prerender_page.html"), |
1696 FINAL_STATUS_USED, 1); | 1699 FINAL_STATUS_USED, 1); |
1697 histograms.Fetch(); | 1700 histogram_tester()->ExpectTotalCount("Prerender.none_PerceivedPLT", 1); |
1698 histograms.ExpectTotalCount("Prerender.none_PerceivedPLT", 1); | 1701 histogram_tester()->ExpectTotalCount( |
1699 histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0); | 1702 "Prerender.none_PerceivedPLTMatched", 0); |
1700 histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatchedComplete", 0); | 1703 histogram_tester()->ExpectTotalCount( |
1701 histograms.ExpectTotalCount("Prerender.webcross_PrerenderNotSwappedInPLT", 1); | 1704 "Prerender.none_PerceivedPLTMatchedComplete", 0); |
1705 histogram_tester()->ExpectTotalCount( | |
1706 "Prerender.webcross_PrerenderNotSwappedInPLT", 1); | |
1702 | 1707 |
1703 NavigateToDestURL(); | 1708 NavigateToDestURL(); |
1704 histograms.Fetch(); | 1709 histogram_tester()->ExpectTotalCount("Prerender.webcross_PerceivedPLT", 1); |
1705 histograms.ExpectTotalCount("Prerender.webcross_PerceivedPLT", 1); | 1710 histogram_tester()->ExpectTotalCount( |
1706 histograms.ExpectTotalCount("Prerender.webcross_PerceivedPLTMatched", 1); | 1711 "Prerender.webcross_PerceivedPLTMatched", 1); |
1707 histograms.ExpectTotalCount( | 1712 histogram_tester()->ExpectTotalCount( |
1708 "Prerender.webcross_PerceivedPLTMatchedComplete", 1); | 1713 "Prerender.webcross_PerceivedPLTMatchedComplete", 1); |
1709 } | 1714 } |
1710 | 1715 |
1711 // Checks that pending prerenders launch and receive proper event treatment. | 1716 // Checks that pending prerenders launch and receive proper event treatment. |
1712 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPagePending) { | 1717 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPagePending) { |
1713 scoped_ptr<TestPrerender> prerender = | 1718 scoped_ptr<TestPrerender> prerender = |
1714 PrerenderTestURL("files/prerender/prerender_page_pending.html", | 1719 PrerenderTestURL("files/prerender/prerender_page_pending.html", |
1715 FINAL_STATUS_USED, 1); | 1720 FINAL_STATUS_USED, 1); |
1716 | 1721 |
1717 // Navigate to the prerender. | 1722 // Navigate to the prerender. |
(...skipping 358 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2076 FINAL_STATUS_USED, | 2081 FINAL_STATUS_USED, |
2077 2); | 2082 2); |
2078 NavigateToURL("files/prerender/prerender_page.html"); | 2083 NavigateToURL("files/prerender/prerender_page.html"); |
2079 } | 2084 } |
2080 | 2085 |
2081 // Checks that we get the right PPLT histograms for client redirect prerenders | 2086 // Checks that we get the right PPLT histograms for client redirect prerenders |
2082 // and navigations when the referring page is Google. | 2087 // and navigations when the referring page is Google. |
2083 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, | 2088 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
2084 PrerenderLocationReplaceGWSHistograms) { | 2089 PrerenderLocationReplaceGWSHistograms) { |
2085 DisableJavascriptCalls(); | 2090 DisableJavascriptCalls(); |
2086 UMAHistogramHelper histograms; | |
2087 | 2091 |
2088 // The loader page should look like Google. | 2092 // The loader page should look like Google. |
2089 const std::string kGoogleDotCom("www.google.com"); | 2093 const std::string kGoogleDotCom("www.google.com"); |
2090 SetLoaderHostOverride(kGoogleDotCom); | 2094 SetLoaderHostOverride(kGoogleDotCom); |
2091 set_loader_path("files/prerender/prerender_loader_with_replace_state.html"); | 2095 set_loader_path("files/prerender/prerender_loader_with_replace_state.html"); |
2092 | 2096 |
2093 GURL dest_url = GetCrossDomainTestUrl( | 2097 GURL dest_url = GetCrossDomainTestUrl( |
2094 "files/prerender/prerender_deferred_image.html"); | 2098 "files/prerender/prerender_deferred_image.html"); |
2095 | 2099 |
2096 GURL prerender_url = test_server()->GetURL( | 2100 GURL prerender_url = test_server()->GetURL( |
2097 "files/prerender/prerender_location_replace.html?" + | 2101 "files/prerender/prerender_location_replace.html?" + |
2098 net::EscapeQueryParamValue(dest_url.spec(), false) + | 2102 net::EscapeQueryParamValue(dest_url.spec(), false) + |
2099 "#prerender"); | 2103 "#prerender"); |
2100 GURL::Replacements replacements; | 2104 GURL::Replacements replacements; |
2101 replacements.SetHostStr(kGoogleDotCom); | 2105 replacements.SetHostStr(kGoogleDotCom); |
2102 prerender_url = prerender_url.ReplaceComponents(replacements); | 2106 prerender_url = prerender_url.ReplaceComponents(replacements); |
2103 | 2107 |
2104 // The prerender will not completely load until after the swap, so wait for a | 2108 // The prerender will not completely load until after the swap, so wait for a |
2105 // title change before calling DidPrerenderPass. | 2109 // title change before calling DidPrerenderPass. |
2106 scoped_ptr<TestPrerender> prerender = | 2110 scoped_ptr<TestPrerender> prerender = |
2107 PrerenderTestURL(prerender_url, FINAL_STATUS_USED, 1); | 2111 PrerenderTestURL(prerender_url, FINAL_STATUS_USED, 1); |
2108 WaitForASCIITitle(prerender->contents()->prerender_contents(), kReadyTitle); | 2112 WaitForASCIITitle(prerender->contents()->prerender_contents(), kReadyTitle); |
2109 EXPECT_TRUE(DidPrerenderPass(prerender->contents()->prerender_contents())); | 2113 EXPECT_TRUE(DidPrerenderPass(prerender->contents()->prerender_contents())); |
2110 EXPECT_EQ(1, prerender->number_of_loads()); | 2114 EXPECT_EQ(1, prerender->number_of_loads()); |
2111 | 2115 |
2112 histograms.Fetch(); | 2116 histogram_tester()->ExpectTotalCount("Prerender.none_PerceivedPLT", 1); |
2113 histograms.ExpectTotalCount("Prerender.none_PerceivedPLT", 1); | 2117 histogram_tester()->ExpectTotalCount( |
2114 histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0); | 2118 "Prerender.none_PerceivedPLTMatched", 0); |
2115 histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatchedComplete", 0); | 2119 histogram_tester()->ExpectTotalCount( |
2120 "Prerender.none_PerceivedPLTMatchedComplete", 0); | |
2116 // Although there is a client redirect, it is dropped from histograms because | 2121 // 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 | 2122 // it is a Google URL. The target page itself does not load until after the |
2118 // swap. | 2123 // swap. |
2119 histograms.ExpectTotalCount("Prerender.gws_PrerenderNotSwappedInPLT", 0); | 2124 histogram_tester()->ExpectTotalCount( |
2125 "Prerender.gws_PrerenderNotSwappedInPLT", 0); | |
2120 | 2126 |
2121 GURL navigate_url = test_server()->GetURL( | 2127 GURL navigate_url = test_server()->GetURL( |
2122 "files/prerender/prerender_location_replace.html?" + | 2128 "files/prerender/prerender_location_replace.html?" + |
2123 net::EscapeQueryParamValue(dest_url.spec(), false) + | 2129 net::EscapeQueryParamValue(dest_url.spec(), false) + |
2124 "#navigate"); | 2130 "#navigate"); |
2125 navigate_url = navigate_url.ReplaceComponents(replacements); | 2131 navigate_url = navigate_url.ReplaceComponents(replacements); |
2126 | 2132 |
2127 NavigationOrSwapObserver swap_observer( | 2133 NavigationOrSwapObserver swap_observer( |
2128 current_browser()->tab_strip_model(), | 2134 current_browser()->tab_strip_model(), |
2129 GetActiveWebContents(), 2); | 2135 GetActiveWebContents(), 2); |
2130 current_browser()->OpenURL(OpenURLParams( | 2136 current_browser()->OpenURL(OpenURLParams( |
2131 navigate_url, Referrer(), CURRENT_TAB, | 2137 navigate_url, Referrer(), CURRENT_TAB, |
2132 content::PAGE_TRANSITION_TYPED, false)); | 2138 content::PAGE_TRANSITION_TYPED, false)); |
2133 swap_observer.Wait(); | 2139 swap_observer.Wait(); |
2134 | 2140 |
2135 EXPECT_TRUE(DidDisplayPass(GetActiveWebContents())); | 2141 EXPECT_TRUE(DidDisplayPass(GetActiveWebContents())); |
2136 | 2142 |
2137 histograms.Fetch(); | 2143 histogram_tester()->ExpectTotalCount( |
2138 histograms.ExpectTotalCount("Prerender.gws_PrerenderNotSwappedInPLT", 0); | 2144 "Prerender.gws_PrerenderNotSwappedInPLT", 0); |
2139 histograms.ExpectTotalCount("Prerender.gws_PerceivedPLT", 1); | 2145 histogram_tester()->ExpectTotalCount("Prerender.gws_PerceivedPLT", 1); |
2140 histograms.ExpectTotalCount("Prerender.gws_PerceivedPLTMatched", 1); | 2146 histogram_tester()->ExpectTotalCount( |
2141 histograms.ExpectTotalCount( | 2147 "Prerender.gws_PerceivedPLTMatched", 1); |
2148 histogram_tester()->ExpectTotalCount( | |
2142 "Prerender.gws_PerceivedPLTMatchedComplete", 1); | 2149 "Prerender.gws_PerceivedPLTMatchedComplete", 1); |
2143 | 2150 |
2144 // The client redirect does /not/ count as a miss because it's a Google URL. | 2151 // The client redirect does /not/ count as a miss because it's a Google URL. |
2145 histograms.ExpectTotalCount("Prerender.PerceivedPLTFirstAfterMiss", 0); | 2152 histogram_tester()->ExpectTotalCount( |
2153 "Prerender.PerceivedPLTFirstAfterMiss", 0); | |
2146 } | 2154 } |
2147 | 2155 |
2148 // Checks that client-issued redirects work with prerendering. | 2156 // Checks that client-issued redirects work with prerendering. |
2149 // This version navigates to the final destination page, rather than the | 2157 // This version navigates to the final destination page, rather than the |
2150 // page which does the redirection via a mouse click. | 2158 // page which does the redirection via a mouse click. |
2151 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, | 2159 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
2152 PrerenderClientRedirectNavigateToSecondViaClick) { | 2160 PrerenderClientRedirectNavigateToSecondViaClick) { |
2153 GURL prerender_url = test_server()->GetURL( | 2161 GURL prerender_url = test_server()->GetURL( |
2154 CreateClientRedirect("files/prerender/prerender_page.html")); | 2162 CreateClientRedirect("files/prerender/prerender_page.html")); |
2155 GURL destination_url = test_server()->GetURL( | 2163 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", | 3349 PrerenderTestURL("files/prerender/prerender_xhr_put.html", |
3342 FINAL_STATUS_WOULD_HAVE_BEEN_USED, 0); | 3350 FINAL_STATUS_WOULD_HAVE_BEEN_USED, 0); |
3343 OpenDestURLViaClick(); | 3351 OpenDestURLViaClick(); |
3344 } | 3352 } |
3345 | 3353 |
3346 // Make sure that the MatchComplete dummy works in the normal case. Once | 3354 // 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 | 3355 // 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 | 3356 // account for the MatchComplete case, and it must have a final status of |
3349 // FINAL_STATUS_WOULD_HAVE_BEEN_USED. | 3357 // FINAL_STATUS_WOULD_HAVE_BEEN_USED. |
3350 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, MatchCompleteDummy) { | 3358 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, MatchCompleteDummy) { |
3351 UMAHistogramHelper histograms; | |
3352 | 3359 |
3353 std::vector<FinalStatus> expected_final_status_queue; | 3360 std::vector<FinalStatus> expected_final_status_queue; |
3354 expected_final_status_queue.push_back(FINAL_STATUS_INVALID_HTTP_METHOD); | 3361 expected_final_status_queue.push_back(FINAL_STATUS_INVALID_HTTP_METHOD); |
3355 expected_final_status_queue.push_back(FINAL_STATUS_WOULD_HAVE_BEEN_USED); | 3362 expected_final_status_queue.push_back(FINAL_STATUS_WOULD_HAVE_BEEN_USED); |
3356 PrerenderTestURL("files/prerender/prerender_xhr_put.html", | 3363 PrerenderTestURL("files/prerender/prerender_xhr_put.html", |
3357 expected_final_status_queue, 1); | 3364 expected_final_status_queue, 1); |
3358 histograms.Fetch(); | 3365 histogram_tester()->ExpectTotalCount("Prerender.none_PerceivedPLT", 1); |
3359 histograms.ExpectTotalCount("Prerender.none_PerceivedPLT", 1); | 3366 histogram_tester()->ExpectTotalCount( |
3360 histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0); | 3367 "Prerender.none_PerceivedPLTMatched", 0); |
3361 histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatchedComplete", 0); | 3368 histogram_tester()->ExpectTotalCount( |
3362 histograms.ExpectTotalCount("Prerender.websame_PrerenderNotSwappedInPLT", 1); | 3369 "Prerender.none_PerceivedPLTMatchedComplete", 0); |
3370 histogram_tester()->ExpectTotalCount( | |
3371 "Prerender.websame_PrerenderNotSwappedInPLT", 1); | |
3363 | 3372 |
3364 NavigateToDestURL(); | 3373 NavigateToDestURL(); |
3365 histograms.Fetch(); | 3374 histogram_tester()->ExpectTotalCount("Prerender.websame_PerceivedPLT", 1); |
3366 histograms.ExpectTotalCount("Prerender.websame_PerceivedPLT", 1); | 3375 histogram_tester()->ExpectTotalCount( |
3367 histograms.ExpectTotalCount("Prerender.websame_PerceivedPLTMatched", 0); | 3376 "Prerender.websame_PerceivedPLTMatched", 0); |
3368 histograms.ExpectTotalCount( | 3377 histogram_tester()->ExpectTotalCount( |
3369 "Prerender.websame_PerceivedPLTMatchedComplete", 1); | 3378 "Prerender.websame_PerceivedPLTMatchedComplete", 1); |
3370 } | 3379 } |
3371 | 3380 |
3372 // Verify that a navigation that hits a MatchComplete dummy while another is in | 3381 // 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. | 3382 // progress does not also classify the previous navigation as a MatchComplete. |
3374 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, | 3383 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
3375 MatchCompleteDummyCancelNavigation) { | 3384 MatchCompleteDummyCancelNavigation) { |
3376 UMAHistogramHelper histograms; | |
3377 | 3385 |
3378 // Arrange for a URL to hang. | 3386 // Arrange for a URL to hang. |
3379 const GURL kNoCommitUrl("http://never-respond.example.com"); | 3387 const GURL kNoCommitUrl("http://never-respond.example.com"); |
3380 base::FilePath file(FILE_PATH_LITERAL( | 3388 base::FilePath file(FILE_PATH_LITERAL( |
3381 "chrome/test/data/prerender/prerender_page.html")); | 3389 "chrome/test/data/prerender/prerender_page.html")); |
3382 base::RunLoop hang_loop; | 3390 base::RunLoop hang_loop; |
3383 BrowserThread::PostTask( | 3391 BrowserThread::PostTask( |
3384 BrowserThread::IO, FROM_HERE, | 3392 BrowserThread::IO, FROM_HERE, |
3385 base::Bind(&CreateHangingFirstRequestInterceptorOnIO, kNoCommitUrl, | 3393 base::Bind(&CreateHangingFirstRequestInterceptorOnIO, kNoCommitUrl, |
3386 file, hang_loop.QuitClosure())); | 3394 file, hang_loop.QuitClosure())); |
3387 | 3395 |
3388 // First, fire a prerender that aborts after it completes its load. | 3396 // First, fire a prerender that aborts after it completes its load. |
3389 std::vector<FinalStatus> expected_final_status_queue; | 3397 std::vector<FinalStatus> expected_final_status_queue; |
3390 expected_final_status_queue.push_back(FINAL_STATUS_INVALID_HTTP_METHOD); | 3398 expected_final_status_queue.push_back(FINAL_STATUS_INVALID_HTTP_METHOD); |
3391 expected_final_status_queue.push_back(FINAL_STATUS_WOULD_HAVE_BEEN_USED); | 3399 expected_final_status_queue.push_back(FINAL_STATUS_WOULD_HAVE_BEEN_USED); |
3392 PrerenderTestURL("files/prerender/prerender_xhr_put.html", | 3400 PrerenderTestURL("files/prerender/prerender_xhr_put.html", |
3393 expected_final_status_queue, 1); | 3401 expected_final_status_queue, 1); |
3394 histograms.Fetch(); | 3402 histogram_tester()->ExpectTotalCount("Prerender.none_PerceivedPLT", 1); |
3395 histograms.ExpectTotalCount("Prerender.none_PerceivedPLT", 1); | 3403 histogram_tester()->ExpectTotalCount( |
3396 histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0); | 3404 "Prerender.none_PerceivedPLTMatched", 0); |
3397 histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatchedComplete", 0); | 3405 histogram_tester()->ExpectTotalCount( |
3398 histograms.ExpectTotalCount("Prerender.websame_PrerenderNotSwappedInPLT", 1); | 3406 "Prerender.none_PerceivedPLTMatchedComplete", 0); |
3407 histogram_tester()->ExpectTotalCount( | |
3408 "Prerender.websame_PrerenderNotSwappedInPLT", 1); | |
3399 | 3409 |
3400 // Open the hanging URL in a new tab. Wait for both the new tab to open and | 3410 // Open the hanging URL in a new tab. Wait for both the new tab to open and |
3401 // the hanging request to be scheduled. | 3411 // the hanging request to be scheduled. |
3402 ui_test_utils::NavigateToURLWithDisposition( | 3412 ui_test_utils::NavigateToURLWithDisposition( |
3403 current_browser(), kNoCommitUrl, NEW_FOREGROUND_TAB, | 3413 current_browser(), kNoCommitUrl, NEW_FOREGROUND_TAB, |
3404 ui_test_utils::BROWSER_TEST_WAIT_FOR_TAB); | 3414 ui_test_utils::BROWSER_TEST_WAIT_FOR_TAB); |
3405 hang_loop.Run(); | 3415 hang_loop.Run(); |
3406 | 3416 |
3407 // Now interrupt that navigation and navigate to the destination URL. This | 3417 // Now interrupt that navigation and navigate to the destination URL. This |
3408 // should forcibly complete the previous navigation and also complete a | 3418 // should forcibly complete the previous navigation and also complete a |
3409 // WOULD_HAVE_BEEN_PRERENDERED navigation. | 3419 // WOULD_HAVE_BEEN_PRERENDERED navigation. |
3410 NavigateToDestURL(); | 3420 NavigateToDestURL(); |
3411 histograms.Fetch(); | 3421 histogram_tester()->ExpectTotalCount("Prerender.none_PerceivedPLT", 2); |
3412 histograms.ExpectTotalCount("Prerender.none_PerceivedPLT", 2); | 3422 histogram_tester()->ExpectTotalCount( |
3413 histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0); | 3423 "Prerender.none_PerceivedPLTMatched", 0); |
3414 histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatchedComplete", 0); | 3424 histogram_tester()->ExpectTotalCount( |
3415 histograms.ExpectTotalCount("Prerender.websame_PerceivedPLT", 1); | 3425 "Prerender.none_PerceivedPLTMatchedComplete", 0); |
3416 histograms.ExpectTotalCount("Prerender.websame_PerceivedPLTMatched", 0); | 3426 histogram_tester()->ExpectTotalCount("Prerender.websame_PerceivedPLT", 1); |
3417 histograms.ExpectTotalCount( | 3427 histogram_tester()->ExpectTotalCount( |
3428 "Prerender.websame_PerceivedPLTMatched", 0); | |
3429 histogram_tester()->ExpectTotalCount( | |
3418 "Prerender.websame_PerceivedPLTMatchedComplete", 1); | 3430 "Prerender.websame_PerceivedPLTMatchedComplete", 1); |
3419 } | 3431 } |
3420 | 3432 |
3421 class PrerenderBrowserTestWithNaCl : public PrerenderBrowserTest { | 3433 class PrerenderBrowserTestWithNaCl : public PrerenderBrowserTest { |
3422 public: | 3434 public: |
3423 PrerenderBrowserTestWithNaCl() {} | 3435 PrerenderBrowserTestWithNaCl() {} |
3424 virtual ~PrerenderBrowserTestWithNaCl() {} | 3436 virtual ~PrerenderBrowserTestWithNaCl() {} |
3425 | 3437 |
3426 virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { | 3438 virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { |
3427 PrerenderBrowserTest::SetUpCommandLine(command_line); | 3439 PrerenderBrowserTest::SetUpCommandLine(command_line); |
(...skipping 362 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3790 prerenders[1]->WaitForStop(); | 3802 prerenders[1]->WaitForStop(); |
3791 | 3803 |
3792 // Check the referring page only got one copy of the event. | 3804 // Check the referring page only got one copy of the event. |
3793 EXPECT_FALSE(HadPrerenderEventErrors()); | 3805 EXPECT_FALSE(HadPrerenderEventErrors()); |
3794 } | 3806 } |
3795 | 3807 |
3796 // Checks that a deferred redirect to an image is not loaded until the page is | 3808 // 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. | 3809 // visible. Also test the right histogram events are emitted in this case. |
3798 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderDeferredImage) { | 3810 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderDeferredImage) { |
3799 DisableJavascriptCalls(); | 3811 DisableJavascriptCalls(); |
3800 UMAHistogramHelper histograms; | |
3801 | 3812 |
3802 // The prerender will not completely load until after the swap, so wait for a | 3813 // The prerender will not completely load until after the swap, so wait for a |
3803 // title change before calling DidPrerenderPass. | 3814 // title change before calling DidPrerenderPass. |
3804 scoped_ptr<TestPrerender> prerender = | 3815 scoped_ptr<TestPrerender> prerender = |
3805 PrerenderTestURL( | 3816 PrerenderTestURL( |
3806 "files/prerender/prerender_deferred_image.html", | 3817 "files/prerender/prerender_deferred_image.html", |
3807 FINAL_STATUS_USED, 0); | 3818 FINAL_STATUS_USED, 0); |
3808 WaitForASCIITitle(prerender->contents()->prerender_contents(), kReadyTitle); | 3819 WaitForASCIITitle(prerender->contents()->prerender_contents(), kReadyTitle); |
3809 EXPECT_EQ(1, GetPrerenderDomContentLoadedEventCountForLinkNumber(0)); | 3820 EXPECT_EQ(1, GetPrerenderDomContentLoadedEventCountForLinkNumber(0)); |
3810 EXPECT_TRUE(DidPrerenderPass(prerender->contents()->prerender_contents())); | 3821 EXPECT_TRUE(DidPrerenderPass(prerender->contents()->prerender_contents())); |
3811 EXPECT_EQ(0, prerender->number_of_loads()); | 3822 EXPECT_EQ(0, prerender->number_of_loads()); |
3812 histograms.Fetch(); | 3823 histogram_tester()->ExpectTotalCount("Prerender.none_PerceivedPLT", 1); |
3813 histograms.ExpectTotalCount("Prerender.none_PerceivedPLT", 1); | 3824 histogram_tester()->ExpectTotalCount( |
3814 histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0); | 3825 "Prerender.none_PerceivedPLTMatched", 0); |
3815 histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatchedComplete", 0); | 3826 histogram_tester()->ExpectTotalCount( |
3816 histograms.ExpectTotalCount("Prerender.websame_PrerenderNotSwappedInPLT", 0); | 3827 "Prerender.none_PerceivedPLTMatchedComplete", 0); |
3828 histogram_tester()->ExpectTotalCount( | |
3829 "Prerender.websame_PrerenderNotSwappedInPLT", 0); | |
3817 | 3830 |
3818 // Swap. | 3831 // Swap. |
3819 NavigationOrSwapObserver swap_observer(current_browser()->tab_strip_model(), | 3832 NavigationOrSwapObserver swap_observer(current_browser()->tab_strip_model(), |
3820 GetActiveWebContents()); | 3833 GetActiveWebContents()); |
3821 ui_test_utils::NavigateToURLWithDisposition( | 3834 ui_test_utils::NavigateToURLWithDisposition( |
3822 current_browser(), dest_url(), CURRENT_TAB, | 3835 current_browser(), dest_url(), CURRENT_TAB, |
3823 ui_test_utils::BROWSER_TEST_NONE); | 3836 ui_test_utils::BROWSER_TEST_NONE); |
3824 swap_observer.Wait(); | 3837 swap_observer.Wait(); |
3825 | 3838 |
3826 // The prerender never observes the final load. | 3839 // The prerender never observes the final load. |
3827 EXPECT_EQ(0, prerender->number_of_loads()); | 3840 EXPECT_EQ(0, prerender->number_of_loads()); |
3828 | 3841 |
3829 // Now check DidDisplayPass. | 3842 // Now check DidDisplayPass. |
3830 EXPECT_TRUE(DidDisplayPass(GetActiveWebContents())); | 3843 EXPECT_TRUE(DidDisplayPass(GetActiveWebContents())); |
3831 | 3844 |
3832 histograms.Fetch(); | 3845 histogram_tester()->ExpectTotalCount( |
3833 histograms.ExpectTotalCount("Prerender.websame_PrerenderNotSwappedInPLT", 0); | 3846 "Prerender.websame_PrerenderNotSwappedInPLT", 0); |
3834 histograms.ExpectTotalCount("Prerender.websame_PerceivedPLT", 1); | 3847 histogram_tester()->ExpectTotalCount( |
3835 histograms.ExpectTotalCount("Prerender.websame_PerceivedPLTMatched", 1); | 3848 "Prerender.websame_PerceivedPLT", 1); |
3836 histograms.ExpectTotalCount( | 3849 histogram_tester()->ExpectTotalCount( |
3850 "Prerender.websame_PerceivedPLTMatched", 1); | |
3851 histogram_tester()->ExpectTotalCount( | |
3837 "Prerender.websame_PerceivedPLTMatchedComplete", 1); | 3852 "Prerender.websame_PerceivedPLTMatchedComplete", 1); |
3838 } | 3853 } |
3839 | 3854 |
3840 // Checks that a deferred redirect to an image is not loaded until the | 3855 // Checks that a deferred redirect to an image is not loaded until the |
3841 // page is visible, even after another redirect. | 3856 // page is visible, even after another redirect. |
3842 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, | 3857 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
3843 PrerenderDeferredImageAfterRedirect) { | 3858 PrerenderDeferredImageAfterRedirect) { |
3844 DisableJavascriptCalls(); | 3859 DisableJavascriptCalls(); |
3845 | 3860 |
3846 // The prerender will not completely load until after the swap, so wait for a | 3861 // 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, | 4186 base::Bind(&CreateCountingInterceptorOnIO, |
4172 kPingURL, empty_file, ping_counter.AsWeakPtr())); | 4187 kPingURL, empty_file, ping_counter.AsWeakPtr())); |
4173 | 4188 |
4174 PrerenderTestURL("files/prerender/prerender_page.html", FINAL_STATUS_USED, 1); | 4189 PrerenderTestURL("files/prerender/prerender_page.html", FINAL_STATUS_USED, 1); |
4175 OpenDestURLViaClickPing(kPingURL); | 4190 OpenDestURLViaClickPing(kPingURL); |
4176 | 4191 |
4177 ping_counter.WaitForCount(1); | 4192 ping_counter.WaitForCount(1); |
4178 } | 4193 } |
4179 | 4194 |
4180 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPPLTNormalNavigation) { | 4195 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPPLTNormalNavigation) { |
4181 UMAHistogramHelper histograms; | |
4182 | 4196 |
4183 GURL url = test_server()->GetURL("files/prerender/prerender_page.html"); | 4197 GURL url = test_server()->GetURL("files/prerender/prerender_page.html"); |
4184 ui_test_utils::NavigateToURL(current_browser(), url); | 4198 ui_test_utils::NavigateToURL(current_browser(), url); |
4185 histograms.Fetch(); | 4199 histogram_tester()->ExpectTotalCount("Prerender.none_PerceivedPLT", 1); |
4186 histograms.ExpectTotalCount("Prerender.none_PerceivedPLT", 1); | 4200 histogram_tester()->ExpectTotalCount( |
4187 histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0); | 4201 "Prerender.none_PerceivedPLTMatched", 0); |
4188 histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatchedComplete", 0); | 4202 histogram_tester()->ExpectTotalCount( |
4203 "Prerender.none_PerceivedPLTMatchedComplete", 0); | |
4189 } | 4204 } |
4190 | 4205 |
4191 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, | 4206 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
4192 PrerenderCookieChangeConflictTest) { | 4207 PrerenderCookieChangeConflictTest) { |
4193 NavigateStraightToURL( | 4208 NavigateStraightToURL( |
4194 "files/prerender/prerender_cookie.html?set=1&key=c&value=1"); | 4209 "files/prerender/prerender_cookie.html?set=1&key=c&value=1"); |
4195 | 4210 |
4196 GURL url = test_server()->GetURL( | 4211 GURL url = test_server()->GetURL( |
4197 "files/prerender/prerender_cookie.html?set=1&key=c&value=2"); | 4212 "files/prerender/prerender_cookie.html?set=1&key=c&value=2"); |
4198 | 4213 |
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
4416 | 4431 |
4417 // Navigate to the URL entered. | 4432 // Navigate to the URL entered. |
4418 omnibox_view->model()->AcceptInput(CURRENT_TAB, false); | 4433 omnibox_view->model()->AcceptInput(CURRENT_TAB, false); |
4419 | 4434 |
4420 // Prerender should be running, but abandoned. | 4435 // Prerender should be running, but abandoned. |
4421 EXPECT_TRUE( | 4436 EXPECT_TRUE( |
4422 GetAutocompleteActionPredictor()->IsPrerenderAbandonedForTesting()); | 4437 GetAutocompleteActionPredictor()->IsPrerenderAbandonedForTesting()); |
4423 } | 4438 } |
4424 | 4439 |
4425 } // namespace prerender | 4440 } // namespace prerender |
OLD | NEW |