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

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

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

Powered by Google App Engine
This is Rietveld 408576698