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

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

Powered by Google App Engine
This is Rietveld 408576698