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

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: Prefer base histogram_tester. ChromeHistogramTester with RunMessageLoop for NaCl Created 6 years, 5 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"
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
54 #include "chrome/browser/ui/omnibox/omnibox_edit_model.h" 54 #include "chrome/browser/ui/omnibox/omnibox_edit_model.h"
55 #include "chrome/browser/ui/omnibox/omnibox_popup_model.h" 55 #include "chrome/browser/ui/omnibox/omnibox_popup_model.h"
56 #include "chrome/browser/ui/omnibox/omnibox_view.h" 56 #include "chrome/browser/ui/omnibox/omnibox_view.h"
57 #include "chrome/browser/ui/tabs/tab_strip_model.h" 57 #include "chrome/browser/ui/tabs/tab_strip_model.h"
58 #include "chrome/browser/ui/tabs/tab_strip_model_observer.h" 58 #include "chrome/browser/ui/tabs/tab_strip_model_observer.h"
59 #include "chrome/common/chrome_paths.h" 59 #include "chrome/common/chrome_paths.h"
60 #include "chrome/common/chrome_switches.h" 60 #include "chrome/common/chrome_switches.h"
61 #include "chrome/common/extensions/extension_constants.h" 61 #include "chrome/common/extensions/extension_constants.h"
62 #include "chrome/common/extensions/manifest_handlers/mime_types_handler.h" 62 #include "chrome/common/extensions/manifest_handlers/mime_types_handler.h"
63 #include "chrome/common/pref_names.h" 63 #include "chrome/common/pref_names.h"
64 #include "chrome/test/base/chrome_histogram_tester.h"
Ilya Sherman 2014/07/15 03:56:35 nit: Can you include just the //base class, rather
Mike Lerman 2014/07/16 17:29:03 Done.
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
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* GetHistogramTester() {
Ilya Sherman 2014/07/15 03:56:35 nit: This is a simple getter, so it should be name
Ilya Sherman 2014/07/15 03:56:35 nit: Can you return a const-reference instead?
Mike Lerman 2014/07/16 17:29:03 Done.
Mike Lerman 2014/07/16 17:29:03 Done.
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
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 GetHistogramTester()->ExpectTotalCount("Prerender.none_PerceivedPLT", 1);
1671 histograms.ExpectTotalCount("Prerender.none_PerceivedPLT", 1); 1674 GetHistogramTester()->ExpectTotalCount(
1672 histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0); 1675 "Prerender.none_PerceivedPLTMatched", 0);
1673 histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatchedComplete", 0); 1676 GetHistogramTester()->ExpectTotalCount(
1674 histograms.ExpectTotalCount("Prerender.websame_PrerenderNotSwappedInPLT", 1); 1677 "Prerender.none_PerceivedPLTMatchedComplete", 0);
1678 GetHistogramTester()->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 GetHistogramTester()->ExpectTotalCount("Prerender.websame_PerceivedPLT", 1);
1683 histograms.ExpectTotalCount("Prerender.websame_PerceivedPLT", 1); 1688 GetHistogramTester()->ExpectTotalCount(
1684 histograms.ExpectTotalCount("Prerender.websame_PerceivedPLTMatched", 1); 1689 "Prerender.websame_PerceivedPLTMatched", 1);
1685 histograms.ExpectTotalCount( 1690 GetHistogramTester()->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 GetHistogramTester()->ExpectTotalCount("Prerender.none_PerceivedPLT", 1);
1698 histograms.ExpectTotalCount("Prerender.none_PerceivedPLT", 1); 1701 GetHistogramTester()->ExpectTotalCount(
1699 histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0); 1702 "Prerender.none_PerceivedPLTMatched", 0);
1700 histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatchedComplete", 0); 1703 GetHistogramTester()->ExpectTotalCount(
1701 histograms.ExpectTotalCount("Prerender.webcross_PrerenderNotSwappedInPLT", 1); 1704 "Prerender.none_PerceivedPLTMatchedComplete", 0);
1705 GetHistogramTester()->ExpectTotalCount(
1706 "Prerender.webcross_PrerenderNotSwappedInPLT", 1);
1702 1707
1703 NavigateToDestURL(); 1708 NavigateToDestURL();
1704 histograms.Fetch(); 1709 GetHistogramTester()->ExpectTotalCount("Prerender.webcross_PerceivedPLT", 1);
1705 histograms.ExpectTotalCount("Prerender.webcross_PerceivedPLT", 1); 1710 GetHistogramTester()->ExpectTotalCount(
1706 histograms.ExpectTotalCount("Prerender.webcross_PerceivedPLTMatched", 1); 1711 "Prerender.webcross_PerceivedPLTMatched", 1);
1707 histograms.ExpectTotalCount( 1712 GetHistogramTester()->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 353 matching lines...) Expand 10 before | Expand all | Expand 10 after
2071 // Checks that redirects with location.replace do not cancel a prerender and 2076 // Checks that redirects with location.replace do not cancel a prerender and
2072 // and swap when navigating to the second. 2077 // and swap when navigating to the second.
2073 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, 2078 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest,
2074 PrerenderLocationReplaceNavigateToSecond) { 2079 PrerenderLocationReplaceNavigateToSecond) {
2075 PrerenderTestURL("files/prerender/prerender_location_replace.html", 2080 PrerenderTestURL("files/prerender/prerender_location_replace.html",
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
Ilya Sherman 2014/07/15 03:56:35 nit: Please revert this change.
Mike Lerman 2014/07/16 17:29:03 Done.
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 GetHistogramTester()->ExpectTotalCount("Prerender.none_PerceivedPLT", 1);
2113 histograms.ExpectTotalCount("Prerender.none_PerceivedPLT", 1); 2117 GetHistogramTester()->ExpectTotalCount(
2114 histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0); 2118 "Prerender.none_PerceivedPLTMatched", 0);
2115 histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatchedComplete", 0); 2119 GetHistogramTester()->ExpectTotalCount(
2116 // Although there is a client redirect, it is dropped from histograms because 2120 "Prerender.none_PerceivedPLTMatchedComplete", 0);
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 GetHistogramTester()->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 GetHistogramTester()->ExpectTotalCount(
2138 histograms.ExpectTotalCount("Prerender.gws_PrerenderNotSwappedInPLT", 0); 2144 "Prerender.gws_PrerenderNotSwappedInPLT", 0);
2139 histograms.ExpectTotalCount("Prerender.gws_PerceivedPLT", 1); 2145 GetHistogramTester()->ExpectTotalCount("Prerender.gws_PerceivedPLT", 1);
2140 histograms.ExpectTotalCount("Prerender.gws_PerceivedPLTMatched", 1); 2146 GetHistogramTester()->ExpectTotalCount(
2141 histograms.ExpectTotalCount( 2147 "Prerender.gws_PerceivedPLTMatched", 1);
2148 GetHistogramTester()->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 GetHistogramTester()->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
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 GetHistogramTester()->ExpectTotalCount("Prerender.none_PerceivedPLT", 1);
3359 histograms.ExpectTotalCount("Prerender.none_PerceivedPLT", 1); 3366 GetHistogramTester()->ExpectTotalCount(
3360 histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0); 3367 "Prerender.none_PerceivedPLTMatched", 0);
3361 histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatchedComplete", 0); 3368 GetHistogramTester()->ExpectTotalCount(
3362 histograms.ExpectTotalCount("Prerender.websame_PrerenderNotSwappedInPLT", 1); 3369 "Prerender.none_PerceivedPLTMatchedComplete", 0);
3370 GetHistogramTester()->ExpectTotalCount(
3371 "Prerender.websame_PrerenderNotSwappedInPLT", 1);
3363 3372
3364 NavigateToDestURL(); 3373 NavigateToDestURL();
3365 histograms.Fetch(); 3374 GetHistogramTester()->ExpectTotalCount("Prerender.websame_PerceivedPLT", 1);
3366 histograms.ExpectTotalCount("Prerender.websame_PerceivedPLT", 1); 3375 GetHistogramTester()->ExpectTotalCount(
3367 histograms.ExpectTotalCount("Prerender.websame_PerceivedPLTMatched", 0); 3376 "Prerender.websame_PerceivedPLTMatched", 0);
3368 histograms.ExpectTotalCount( 3377 GetHistogramTester()->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 GetHistogramTester()->ExpectTotalCount("Prerender.none_PerceivedPLT", 1);
3395 histograms.ExpectTotalCount("Prerender.none_PerceivedPLT", 1); 3403 GetHistogramTester()->ExpectTotalCount(
3396 histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0); 3404 "Prerender.none_PerceivedPLTMatched", 0);
3397 histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatchedComplete", 0); 3405 GetHistogramTester()->ExpectTotalCount(
3398 histograms.ExpectTotalCount("Prerender.websame_PrerenderNotSwappedInPLT", 1); 3406 "Prerender.none_PerceivedPLTMatchedComplete", 0);
3407 GetHistogramTester()->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 GetHistogramTester()->ExpectTotalCount("Prerender.none_PerceivedPLT", 2);
3412 histograms.ExpectTotalCount("Prerender.none_PerceivedPLT", 2); 3422 GetHistogramTester()->ExpectTotalCount(
3413 histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0); 3423 "Prerender.none_PerceivedPLTMatched", 0);
3414 histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatchedComplete", 0); 3424 GetHistogramTester()->ExpectTotalCount(
3415 histograms.ExpectTotalCount("Prerender.websame_PerceivedPLT", 1); 3425 "Prerender.none_PerceivedPLTMatchedComplete", 0);
3416 histograms.ExpectTotalCount("Prerender.websame_PerceivedPLTMatched", 0); 3426 GetHistogramTester()->ExpectTotalCount("Prerender.websame_PerceivedPLT", 1);
3417 histograms.ExpectTotalCount( 3427 GetHistogramTester()->ExpectTotalCount(
3428 "Prerender.websame_PerceivedPLTMatched", 0);
3429 GetHistogramTester()->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
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 GetHistogramTester()->ExpectTotalCount("Prerender.none_PerceivedPLT", 1);
3813 histograms.ExpectTotalCount("Prerender.none_PerceivedPLT", 1); 3824 GetHistogramTester()->ExpectTotalCount(
3814 histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0); 3825 "Prerender.none_PerceivedPLTMatched", 0);
3815 histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatchedComplete", 0); 3826 GetHistogramTester()->ExpectTotalCount(
3816 histograms.ExpectTotalCount("Prerender.websame_PrerenderNotSwappedInPLT", 0); 3827 "Prerender.none_PerceivedPLTMatchedComplete", 0);
3828 GetHistogramTester()->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 GetHistogramTester()->ExpectTotalCount(
3833 histograms.ExpectTotalCount("Prerender.websame_PrerenderNotSwappedInPLT", 0); 3846 "Prerender.websame_PrerenderNotSwappedInPLT", 0);
3834 histograms.ExpectTotalCount("Prerender.websame_PerceivedPLT", 1); 3847 GetHistogramTester()->ExpectTotalCount(
3835 histograms.ExpectTotalCount("Prerender.websame_PerceivedPLTMatched", 1); 3848 "Prerender.websame_PerceivedPLT", 1);
3836 histograms.ExpectTotalCount( 3849 GetHistogramTester()->ExpectTotalCount(
3850 "Prerender.websame_PerceivedPLTMatched", 1);
3851 GetHistogramTester()->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
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 GetHistogramTester()->ExpectTotalCount("Prerender.none_PerceivedPLT", 1);
4186 histograms.ExpectTotalCount("Prerender.none_PerceivedPLT", 1); 4200 GetHistogramTester()->ExpectTotalCount(
4187 histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0); 4201 "Prerender.none_PerceivedPLTMatched", 0);
4188 histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatchedComplete", 0); 4202 GetHistogramTester()->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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698