| Index: chrome/browser/prerender/prerender_browsertest.cc | 
| diff --git a/chrome/browser/prerender/prerender_browsertest.cc b/chrome/browser/prerender/prerender_browsertest.cc | 
| index 4c966623970cc68000bafebd65c58a580c13318a..65d4bb9485f739608996d48904e501e9eb630aac 100644 | 
| --- a/chrome/browser/prerender/prerender_browsertest.cc | 
| +++ b/chrome/browser/prerender/prerender_browsertest.cc | 
| @@ -17,6 +17,7 @@ | 
| #include "base/strings/string_util.h" | 
| #include "base/strings/stringprintf.h" | 
| #include "base/strings/utf_string_conversions.h" | 
| +#include "base/test/histogram_tester.h" | 
| #include "base/test/test_timeouts.h" | 
| #include "base/values.h" | 
| #include "chrome/browser/browsing_data/browsing_data_helper.h" | 
| @@ -64,7 +65,6 @@ | 
| #include "chrome/test/base/in_process_browser_test.h" | 
| #include "chrome/test/base/test_switches.h" | 
| #include "chrome/test/base/ui_test_utils.h" | 
| -#include "chrome/test/base/uma_histogram_helper.h" | 
| #include "content/public/browser/browser_message_filter.h" | 
| #include "content/public/browser/devtools_agent_host.h" | 
| #include "content/public/browser/navigation_controller.h" | 
| @@ -1503,6 +1503,8 @@ class PrerenderBrowserTest : virtual public InProcessBrowserTest { | 
| js).c_str())); | 
| } | 
|  | 
| +  const base::HistogramTester& histogram_tester() { return histogram_tester_; } | 
| + | 
| protected: | 
| bool autostart_test_server_; | 
|  | 
| @@ -1653,21 +1655,21 @@ class PrerenderBrowserTest : virtual public InProcessBrowserTest { | 
| std::string loader_path_; | 
| std::string loader_query_; | 
| Browser* explicitly_set_browser_; | 
| +  base::HistogramTester histogram_tester_; | 
| }; | 
|  | 
| // Checks that a page is correctly prerendered in the case of a | 
| // <link rel=prerender> tag and then loaded into a tab in response to a | 
| // navigation. | 
| IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPage) { | 
| -  UMAHistogramHelper histograms; | 
| - | 
| PrerenderTestURL("files/prerender/prerender_page.html", FINAL_STATUS_USED, 1); | 
| EXPECT_EQ(1, GetPrerenderDomContentLoadedEventCountForLinkNumber(0)); | 
| -  histograms.Fetch(); | 
| -  histograms.ExpectTotalCount("Prerender.none_PerceivedPLT", 1); | 
| -  histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0); | 
| -  histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatchedComplete", 0); | 
| -  histograms.ExpectTotalCount("Prerender.websame_PrerenderNotSwappedInPLT", 1); | 
| +  histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLT", 1); | 
| +  histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0); | 
| +  histogram_tester().ExpectTotalCount( | 
| +      "Prerender.none_PerceivedPLTMatchedComplete", 0); | 
| +  histogram_tester().ExpectTotalCount( | 
| +      "Prerender.websame_PrerenderNotSwappedInPLT", 1); | 
|  | 
| ChannelDestructionWatcher channel_close_watcher; | 
| channel_close_watcher.WatchChannel( | 
| @@ -1675,10 +1677,10 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPage) { | 
| NavigateToDestURL(); | 
| channel_close_watcher.WaitForChannelClose(); | 
|  | 
| -  histograms.Fetch(); | 
| -  histograms.ExpectTotalCount("Prerender.websame_PerceivedPLT", 1); | 
| -  histograms.ExpectTotalCount("Prerender.websame_PerceivedPLTMatched", 1); | 
| -  histograms.ExpectTotalCount( | 
| +  histogram_tester().ExpectTotalCount("Prerender.websame_PerceivedPLT", 1); | 
| +  histogram_tester().ExpectTotalCount("Prerender.websame_PerceivedPLTMatched", | 
| +                                      1); | 
| +  histogram_tester().ExpectTotalCount( | 
| "Prerender.websame_PerceivedPLTMatchedComplete", 1); | 
|  | 
| ASSERT_TRUE(IsEmptyPrerenderLinkManager()); | 
| @@ -1686,21 +1688,20 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPage) { | 
|  | 
| // Checks that cross-domain prerenders emit the correct histograms. | 
| IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPageCrossDomain) { | 
| -  UMAHistogramHelper histograms; | 
| - | 
| PrerenderTestURL(GetCrossDomainTestUrl("files/prerender/prerender_page.html"), | 
| FINAL_STATUS_USED, 1); | 
| -  histograms.Fetch(); | 
| -  histograms.ExpectTotalCount("Prerender.none_PerceivedPLT", 1); | 
| -  histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0); | 
| -  histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatchedComplete", 0); | 
| -  histograms.ExpectTotalCount("Prerender.webcross_PrerenderNotSwappedInPLT", 1); | 
| +  histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLT", 1); | 
| +  histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0); | 
| +  histogram_tester().ExpectTotalCount( | 
| +      "Prerender.none_PerceivedPLTMatchedComplete", 0); | 
| +  histogram_tester().ExpectTotalCount( | 
| +      "Prerender.webcross_PrerenderNotSwappedInPLT", 1); | 
|  | 
| NavigateToDestURL(); | 
| -  histograms.Fetch(); | 
| -  histograms.ExpectTotalCount("Prerender.webcross_PerceivedPLT", 1); | 
| -  histograms.ExpectTotalCount("Prerender.webcross_PerceivedPLTMatched", 1); | 
| -  histograms.ExpectTotalCount( | 
| +  histogram_tester().ExpectTotalCount("Prerender.webcross_PerceivedPLT", 1); | 
| +  histogram_tester().ExpectTotalCount("Prerender.webcross_PerceivedPLTMatched", | 
| +                                      1); | 
| +  histogram_tester().ExpectTotalCount( | 
| "Prerender.webcross_PerceivedPLTMatchedComplete", 1); | 
| } | 
|  | 
| @@ -2079,7 +2080,6 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, | 
| IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, | 
| PrerenderLocationReplaceGWSHistograms) { | 
| DisableJavascriptCalls(); | 
| -  UMAHistogramHelper histograms; | 
|  | 
| // The loader page should look like Google. | 
| const std::string kGoogleDotCom("www.google.com"); | 
| @@ -2105,14 +2105,15 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, | 
| EXPECT_TRUE(DidPrerenderPass(prerender->contents()->prerender_contents())); | 
| EXPECT_EQ(1, prerender->number_of_loads()); | 
|  | 
| -  histograms.Fetch(); | 
| -  histograms.ExpectTotalCount("Prerender.none_PerceivedPLT", 1); | 
| -  histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0); | 
| -  histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatchedComplete", 0); | 
| +  histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLT", 1); | 
| +  histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0); | 
| +  histogram_tester().ExpectTotalCount( | 
| +      "Prerender.none_PerceivedPLTMatchedComplete", 0); | 
| // Although there is a client redirect, it is dropped from histograms because | 
| // it is a Google URL. The target page itself does not load until after the | 
| // swap. | 
| -  histograms.ExpectTotalCount("Prerender.gws_PrerenderNotSwappedInPLT", 0); | 
| +  histogram_tester().ExpectTotalCount("Prerender.gws_PrerenderNotSwappedInPLT", | 
| +                                      0); | 
|  | 
| GURL navigate_url = test_server()->GetURL( | 
| "files/prerender/prerender_location_replace.html?" + | 
| @@ -2130,15 +2131,16 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, | 
|  | 
| EXPECT_TRUE(DidDisplayPass(GetActiveWebContents())); | 
|  | 
| -  histograms.Fetch(); | 
| -  histograms.ExpectTotalCount("Prerender.gws_PrerenderNotSwappedInPLT", 0); | 
| -  histograms.ExpectTotalCount("Prerender.gws_PerceivedPLT", 1); | 
| -  histograms.ExpectTotalCount("Prerender.gws_PerceivedPLTMatched", 1); | 
| -  histograms.ExpectTotalCount( | 
| +  histogram_tester().ExpectTotalCount("Prerender.gws_PrerenderNotSwappedInPLT", | 
| +                                      0); | 
| +  histogram_tester().ExpectTotalCount("Prerender.gws_PerceivedPLT", 1); | 
| +  histogram_tester().ExpectTotalCount("Prerender.gws_PerceivedPLTMatched", 1); | 
| +  histogram_tester().ExpectTotalCount( | 
| "Prerender.gws_PerceivedPLTMatchedComplete", 1); | 
|  | 
| // The client redirect does /not/ count as a miss because it's a Google URL. | 
| -  histograms.ExpectTotalCount("Prerender.PerceivedPLTFirstAfterMiss", 0); | 
| +  histogram_tester().ExpectTotalCount("Prerender.PerceivedPLTFirstAfterMiss", | 
| +                                      0); | 
| } | 
|  | 
| // Checks that client-issued redirects work with prerendering. | 
| @@ -3343,24 +3345,24 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, ControlGroupRendererInitiated) { | 
| // account for the MatchComplete case, and it must have a final status of | 
| // FINAL_STATUS_WOULD_HAVE_BEEN_USED. | 
| IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, MatchCompleteDummy) { | 
| -  UMAHistogramHelper histograms; | 
|  | 
| std::vector<FinalStatus> expected_final_status_queue; | 
| expected_final_status_queue.push_back(FINAL_STATUS_INVALID_HTTP_METHOD); | 
| expected_final_status_queue.push_back(FINAL_STATUS_WOULD_HAVE_BEEN_USED); | 
| PrerenderTestURL("files/prerender/prerender_xhr_put.html", | 
| expected_final_status_queue, 1); | 
| -  histograms.Fetch(); | 
| -  histograms.ExpectTotalCount("Prerender.none_PerceivedPLT", 1); | 
| -  histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0); | 
| -  histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatchedComplete", 0); | 
| -  histograms.ExpectTotalCount("Prerender.websame_PrerenderNotSwappedInPLT", 1); | 
| +  histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLT", 1); | 
| +  histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0); | 
| +  histogram_tester().ExpectTotalCount( | 
| +      "Prerender.none_PerceivedPLTMatchedComplete", 0); | 
| +  histogram_tester().ExpectTotalCount( | 
| +      "Prerender.websame_PrerenderNotSwappedInPLT", 1); | 
|  | 
| NavigateToDestURL(); | 
| -  histograms.Fetch(); | 
| -  histograms.ExpectTotalCount("Prerender.websame_PerceivedPLT", 1); | 
| -  histograms.ExpectTotalCount("Prerender.websame_PerceivedPLTMatched", 0); | 
| -  histograms.ExpectTotalCount( | 
| +  histogram_tester().ExpectTotalCount("Prerender.websame_PerceivedPLT", 1); | 
| +  histogram_tester().ExpectTotalCount("Prerender.websame_PerceivedPLTMatched", | 
| +                                      0); | 
| +  histogram_tester().ExpectTotalCount( | 
| "Prerender.websame_PerceivedPLTMatchedComplete", 1); | 
| } | 
|  | 
| @@ -3368,8 +3370,6 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, MatchCompleteDummy) { | 
| // progress does not also classify the previous navigation as a MatchComplete. | 
| IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, | 
| MatchCompleteDummyCancelNavigation) { | 
| -  UMAHistogramHelper histograms; | 
| - | 
| // Arrange for a URL to hang. | 
| const GURL kNoCommitUrl("http://never-respond.example.com"); | 
| base::FilePath file(FILE_PATH_LITERAL( | 
| @@ -3386,11 +3386,12 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, | 
| expected_final_status_queue.push_back(FINAL_STATUS_WOULD_HAVE_BEEN_USED); | 
| PrerenderTestURL("files/prerender/prerender_xhr_put.html", | 
| expected_final_status_queue, 1); | 
| -  histograms.Fetch(); | 
| -  histograms.ExpectTotalCount("Prerender.none_PerceivedPLT", 1); | 
| -  histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0); | 
| -  histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatchedComplete", 0); | 
| -  histograms.ExpectTotalCount("Prerender.websame_PrerenderNotSwappedInPLT", 1); | 
| +  histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLT", 1); | 
| +  histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0); | 
| +  histogram_tester().ExpectTotalCount( | 
| +      "Prerender.none_PerceivedPLTMatchedComplete", 0); | 
| +  histogram_tester().ExpectTotalCount( | 
| +      "Prerender.websame_PrerenderNotSwappedInPLT", 1); | 
|  | 
| // Open the hanging URL in a new tab. Wait for both the new tab to open and | 
| // the hanging request to be scheduled. | 
| @@ -3403,13 +3404,14 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, | 
| // should forcibly complete the previous navigation and also complete a | 
| // WOULD_HAVE_BEEN_PRERENDERED navigation. | 
| NavigateToDestURL(); | 
| -  histograms.Fetch(); | 
| -  histograms.ExpectTotalCount("Prerender.none_PerceivedPLT", 2); | 
| -  histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0); | 
| -  histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatchedComplete", 0); | 
| -  histograms.ExpectTotalCount("Prerender.websame_PerceivedPLT", 1); | 
| -  histograms.ExpectTotalCount("Prerender.websame_PerceivedPLTMatched", 0); | 
| -  histograms.ExpectTotalCount( | 
| +  histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLT", 2); | 
| +  histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0); | 
| +  histogram_tester().ExpectTotalCount( | 
| +      "Prerender.none_PerceivedPLTMatchedComplete", 0); | 
| +  histogram_tester().ExpectTotalCount("Prerender.websame_PerceivedPLT", 1); | 
| +  histogram_tester().ExpectTotalCount("Prerender.websame_PerceivedPLTMatched", | 
| +                                      0); | 
| +  histogram_tester().ExpectTotalCount( | 
| "Prerender.websame_PerceivedPLTMatchedComplete", 1); | 
| } | 
|  | 
| @@ -3792,7 +3794,6 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, CancelMatchCompleteDummy) { | 
| // visible. Also test the right histogram events are emitted in this case. | 
| IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderDeferredImage) { | 
| DisableJavascriptCalls(); | 
| -  UMAHistogramHelper histograms; | 
|  | 
| // The prerender will not completely load until after the swap, so wait for a | 
| // title change before calling DidPrerenderPass. | 
| @@ -3804,11 +3805,12 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderDeferredImage) { | 
| EXPECT_EQ(1, GetPrerenderDomContentLoadedEventCountForLinkNumber(0)); | 
| EXPECT_TRUE(DidPrerenderPass(prerender->contents()->prerender_contents())); | 
| EXPECT_EQ(0, prerender->number_of_loads()); | 
| -  histograms.Fetch(); | 
| -  histograms.ExpectTotalCount("Prerender.none_PerceivedPLT", 1); | 
| -  histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0); | 
| -  histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatchedComplete", 0); | 
| -  histograms.ExpectTotalCount("Prerender.websame_PrerenderNotSwappedInPLT", 0); | 
| +  histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLT", 1); | 
| +  histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0); | 
| +  histogram_tester().ExpectTotalCount( | 
| +      "Prerender.none_PerceivedPLTMatchedComplete", 0); | 
| +  histogram_tester().ExpectTotalCount( | 
| +      "Prerender.websame_PrerenderNotSwappedInPLT", 0); | 
|  | 
| // Swap. | 
| NavigationOrSwapObserver swap_observer(current_browser()->tab_strip_model(), | 
| @@ -3824,11 +3826,12 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderDeferredImage) { | 
| // Now check DidDisplayPass. | 
| EXPECT_TRUE(DidDisplayPass(GetActiveWebContents())); | 
|  | 
| -  histograms.Fetch(); | 
| -  histograms.ExpectTotalCount("Prerender.websame_PrerenderNotSwappedInPLT", 0); | 
| -  histograms.ExpectTotalCount("Prerender.websame_PerceivedPLT", 1); | 
| -  histograms.ExpectTotalCount("Prerender.websame_PerceivedPLTMatched", 1); | 
| -  histograms.ExpectTotalCount( | 
| +  histogram_tester().ExpectTotalCount( | 
| +      "Prerender.websame_PrerenderNotSwappedInPLT", 0); | 
| +  histogram_tester().ExpectTotalCount("Prerender.websame_PerceivedPLT", 1); | 
| +  histogram_tester().ExpectTotalCount("Prerender.websame_PerceivedPLTMatched", | 
| +                                      1); | 
| +  histogram_tester().ExpectTotalCount( | 
| "Prerender.websame_PerceivedPLTMatchedComplete", 1); | 
| } | 
|  | 
| @@ -4173,14 +4176,12 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPing) { | 
| } | 
|  | 
| IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPPLTNormalNavigation) { | 
| -  UMAHistogramHelper histograms; | 
| - | 
| GURL url = test_server()->GetURL("files/prerender/prerender_page.html"); | 
| ui_test_utils::NavigateToURL(current_browser(), url); | 
| -  histograms.Fetch(); | 
| -  histograms.ExpectTotalCount("Prerender.none_PerceivedPLT", 1); | 
| -  histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0); | 
| -  histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatchedComplete", 0); | 
| +  histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLT", 1); | 
| +  histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0); | 
| +  histogram_tester().ExpectTotalCount( | 
| +      "Prerender.none_PerceivedPLTMatchedComplete", 0); | 
| } | 
|  | 
| IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, | 
|  |