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

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

Issue 2738783002: Prerender: Remove PerceivedPLT histograms (Closed)
Patch Set: set the origin in prerender_tab_helper Created 3 years, 8 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
« no previous file with comments | « no previous file | chrome/browser/prerender/prerender_histograms.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 <stddef.h> 5 #include <stddef.h>
6 #include <deque> 6 #include <deque>
7 #include <set> 7 #include <set>
8 #include <string> 8 #include <string>
9 #include <unordered_map> 9 #include <unordered_map>
10 #include <utility> 10 #include <utility>
(...skipping 1016 matching lines...) Expand 10 before | Expand all | Expand 10 after
1027 1027
1028 // Checks that a page is correctly prerendered in the case of a 1028 // Checks that a page is correctly prerendered in the case of a
1029 // <link rel=prerender> tag and then loaded into a tab in response to a 1029 // <link rel=prerender> tag and then loaded into a tab in response to a
1030 // navigation. 1030 // navigation.
1031 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPage) { 1031 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPage) {
1032 test_utils::FirstContentfulPaintManagerWaiter* fcp_waiter = 1032 test_utils::FirstContentfulPaintManagerWaiter* fcp_waiter =
1033 test_utils::FirstContentfulPaintManagerWaiter::Create( 1033 test_utils::FirstContentfulPaintManagerWaiter::Create(
1034 GetPrerenderManager()); 1034 GetPrerenderManager());
1035 PrerenderTestURL("/prerender/prerender_page.html", FINAL_STATUS_USED, 1); 1035 PrerenderTestURL("/prerender/prerender_page.html", FINAL_STATUS_USED, 1);
1036 EXPECT_EQ(1, GetPrerenderDomContentLoadedEventCountForLinkNumber(0)); 1036 EXPECT_EQ(1, GetPrerenderDomContentLoadedEventCountForLinkNumber(0));
1037 histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLT", 1);
1038 histogram_tester().ExpectTotalCount(
1039 "Prerender.websame_PrerenderNotSwappedInPLT", 1);
1040 1037
1041 ChannelDestructionWatcher channel_close_watcher; 1038 ChannelDestructionWatcher channel_close_watcher;
1042 channel_close_watcher.WatchChannel( 1039 channel_close_watcher.WatchChannel(
1043 GetActiveWebContents()->GetRenderProcessHost()); 1040 GetActiveWebContents()->GetRenderProcessHost());
1044 NavigateToDestURL(); 1041 NavigateToDestURL();
1045 channel_close_watcher.WaitForChannelClose(); 1042 channel_close_watcher.WaitForChannelClose();
1046 fcp_waiter->Wait(); 1043 fcp_waiter->Wait();
1047 1044
1048 histogram_tester().ExpectTotalCount("Prerender.websame_PerceivedPLT", 1);
1049 histogram_tester().ExpectTotalCount( 1045 histogram_tester().ExpectTotalCount(
1050 "Prerender.websame_PrefetchTTFCP.Warm.Cacheable.Visible", 1); 1046 "Prerender.websame_PrefetchTTFCP.Warm.Cacheable.Visible", 1);
1051 histogram_tester().ExpectTotalCount( 1047 histogram_tester().ExpectTotalCount(
1052 "Prerender.websame_PerceivedTTFCPRecorded.Visible", 1); 1048 "Prerender.websame_PerceivedTTFCPRecorded.Visible", 1);
1053 1049
1054 ASSERT_TRUE(IsEmptyPrerenderLinkManager()); 1050 ASSERT_TRUE(IsEmptyPrerenderLinkManager());
1055 } 1051 }
1056 1052
1057 // Checks that the correct page load metrics observers are produced without a 1053 // Checks that the correct page load metrics observers are produced without a
1058 // prerender. 1054 // prerender.
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
1104 "PageLoad.PaintTiming.NavigationToFirstContentfulPaint", 0); 1100 "PageLoad.PaintTiming.NavigationToFirstContentfulPaint", 0);
1105 } 1101 }
1106 1102
1107 // Checks that cross-domain prerenders emit the correct histograms. 1103 // Checks that cross-domain prerenders emit the correct histograms.
1108 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPageCrossDomain) { 1104 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPageCrossDomain) {
1109 test_utils::FirstContentfulPaintManagerWaiter* fcp_waiter = 1105 test_utils::FirstContentfulPaintManagerWaiter* fcp_waiter =
1110 test_utils::FirstContentfulPaintManagerWaiter::Create( 1106 test_utils::FirstContentfulPaintManagerWaiter::Create(
1111 GetPrerenderManager()); 1107 GetPrerenderManager());
1112 PrerenderTestURL(GetCrossDomainTestUrl("prerender/prerender_page.html"), 1108 PrerenderTestURL(GetCrossDomainTestUrl("prerender/prerender_page.html"),
1113 FINAL_STATUS_USED, 1); 1109 FINAL_STATUS_USED, 1);
1114 histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLT", 1);
1115 histogram_tester().ExpectTotalCount(
1116 "Prerender.webcross_PrerenderNotSwappedInPLT", 1);
1117 1110
1118 NavigateToDestURL(); 1111 NavigateToDestURL();
1119 fcp_waiter->Wait(); 1112 fcp_waiter->Wait();
1120 1113
1121 histogram_tester().ExpectTotalCount("Prerender.webcross_PerceivedPLT", 1);
1122 histogram_tester().ExpectTotalCount( 1114 histogram_tester().ExpectTotalCount(
1123 "Prerender.webcross_PrefetchTTFCP.Warm.Cacheable.Visible", 1); 1115 "Prerender.webcross_PrefetchTTFCP.Warm.Cacheable.Visible", 1);
1124 } 1116 }
1125 1117
1126 // Checks that pending prerenders launch and receive proper event treatment. 1118 // Checks that pending prerenders launch and receive proper event treatment.
1127 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPagePending) { 1119 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPagePending) {
1128 std::unique_ptr<TestPrerender> prerender = PrerenderTestURL( 1120 std::unique_ptr<TestPrerender> prerender = PrerenderTestURL(
1129 "/prerender/prerender_page_pending.html", FINAL_STATUS_USED, 1); 1121 "/prerender/prerender_page_pending.html", FINAL_STATUS_USED, 1);
1130 1122
1131 // Navigate to the prerender. 1123 // Navigate to the prerender.
(...skipping 355 matching lines...) Expand 10 before | Expand all | Expand 10 after
1487 1479
1488 // Checks that redirects with location.replace do not cancel a prerender and 1480 // Checks that redirects with location.replace do not cancel a prerender and
1489 // and swap when navigating to the second. 1481 // and swap when navigating to the second.
1490 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, 1482 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest,
1491 PrerenderLocationReplaceNavigateToSecond) { 1483 PrerenderLocationReplaceNavigateToSecond) {
1492 PrerenderTestURL("/prerender/prerender_location_replace.html", 1484 PrerenderTestURL("/prerender/prerender_location_replace.html",
1493 FINAL_STATUS_USED, 2); 1485 FINAL_STATUS_USED, 2);
1494 NavigateToURL("/prerender/prerender_page.html"); 1486 NavigateToURL("/prerender/prerender_page.html");
1495 } 1487 }
1496 1488
1497 // Checks that we get the right PPLT histograms for client redirect prerenders 1489 // Checks that the PrefetchTTFCP histogram is recorded across the client
1498 // and navigations when the referring page is Google. 1490 // redirect when the referring page is Google.
1499 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, 1491 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest,
1500 PrerenderLocationReplaceGWSHistograms) { 1492 PrerenderLocationReplaceGWSHistograms) {
1501 DisableJavascriptCalls(); 1493 DisableJavascriptCalls();
1502 1494
1503 // The loader page should look like Google. 1495 // The loader page should look like Google.
1504 static const char kGoogleDotCom[] = "www.google.com"; 1496 static const char kGoogleDotCom[] = "www.google.com";
1505 SetLoaderHostOverride(kGoogleDotCom); 1497 SetLoaderHostOverride(kGoogleDotCom);
1506 set_loader_path("/prerender/prerender_loader_with_replace_state.html"); 1498 set_loader_path("/prerender/prerender_loader_with_replace_state.html");
1507 1499
1508 GURL dest_url = 1500 GURL dest_url =
1509 GetCrossDomainTestUrl("prerender/prerender_deferred_image.html"); 1501 GetCrossDomainTestUrl("prerender/prerender_deferred_image.html");
1510 1502
1511 GURL prerender_url = embedded_test_server()->GetURL( 1503 GURL prerender_url = embedded_test_server()->GetURL(
1512 "/prerender/prerender_location_replace.html?" + 1504 "/prerender/prerender_location_replace.html?" +
1513 net::EscapeQueryParamValue(dest_url.spec(), false) + "#prerender"); 1505 net::EscapeQueryParamValue(dest_url.spec(), false) + "#prerender");
1514 GURL::Replacements replacements; 1506 GURL::Replacements replacements;
1515 replacements.SetHostStr(kGoogleDotCom); 1507 replacements.SetHostStr(kGoogleDotCom);
1516 prerender_url = prerender_url.ReplaceComponents(replacements); 1508 prerender_url = prerender_url.ReplaceComponents(replacements);
1517 1509
1518 // The prerender will not completely load until after the swap, so wait for a 1510 // The prerender will not completely load until after the swap, so wait for a
1519 // title change before calling DidPrerenderPass. 1511 // title change before calling DidPrerenderPass.
1520 std::unique_ptr<TestPrerender> prerender = 1512 std::unique_ptr<TestPrerender> prerender =
1521 PrerenderTestURL(prerender_url, FINAL_STATUS_USED, 1); 1513 PrerenderTestURL(prerender_url, FINAL_STATUS_USED, 1);
1522 WaitForASCIITitle(prerender->contents()->prerender_contents(), kReadyTitle); 1514 WaitForASCIITitle(prerender->contents()->prerender_contents(), kReadyTitle);
1523 EXPECT_TRUE(DidPrerenderPass(prerender->contents()->prerender_contents())); 1515 EXPECT_TRUE(DidPrerenderPass(prerender->contents()->prerender_contents()));
1524 EXPECT_EQ(1, prerender->number_of_loads()); 1516 EXPECT_EQ(1, prerender->number_of_loads());
1525 1517
1526 histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLT", 1);
1527 // Although there is a client redirect, it is dropped from histograms because
1528 // it is a Google URL. The target page itself does not load until after the
1529 // swap.
1530 histogram_tester().ExpectTotalCount("Prerender.gws_PrerenderNotSwappedInPLT",
1531 0);
1532
1533 GURL navigate_url = embedded_test_server()->GetURL( 1518 GURL navigate_url = embedded_test_server()->GetURL(
1534 "/prerender/prerender_location_replace.html?" + 1519 "/prerender/prerender_location_replace.html?" +
1535 net::EscapeQueryParamValue(dest_url.spec(), false) + "#navigate"); 1520 net::EscapeQueryParamValue(dest_url.spec(), false) + "#navigate");
1536 navigate_url = navigate_url.ReplaceComponents(replacements); 1521 navigate_url = navigate_url.ReplaceComponents(replacements);
1537 1522
1538 NavigationOrSwapObserver swap_observer( 1523 // Open the URL and wait for the FCP.
1539 current_browser()->tab_strip_model(), 1524 test_utils::FirstContentfulPaintManagerWaiter* fcp_waiter =
1540 GetActiveWebContents(), 2); 1525 test_utils::FirstContentfulPaintManagerWaiter::Create(
1526 GetPrerenderManager());
1541 current_browser()->OpenURL(OpenURLParams(navigate_url, Referrer(), 1527 current_browser()->OpenURL(OpenURLParams(navigate_url, Referrer(),
1542 WindowOpenDisposition::CURRENT_TAB, 1528 WindowOpenDisposition::CURRENT_TAB,
1543 ui::PAGE_TRANSITION_TYPED, false)); 1529 ui::PAGE_TRANSITION_TYPED, false));
1544 swap_observer.Wait(); 1530 fcp_waiter->Wait();
1545 1531
1546 EXPECT_TRUE(DidDisplayPass(GetActiveWebContents())); 1532 // The client redirect changes the PageLoadExtraInfo.start_url and hence the
1547 1533 // past navigation cannot be found for the histogram to be recorded as
1548 histogram_tester().ExpectTotalCount("Prerender.gws_PrerenderNotSwappedInPLT", 1534 // PrefetchTTFCP.Warm.
1549 0); 1535 histogram_tester().ExpectTotalCount(
1550 histogram_tester().ExpectTotalCount("Prerender.gws_PerceivedPLT", 1); 1536 "Prerender.gws_PrefetchTTFCP.Reference.Cacheable.Visible", 1);
1551
1552 // The client redirect does /not/ count as a miss because it's a Google URL.
1553 histogram_tester().ExpectTotalCount("Prerender.PerceivedPLTFirstAfterMiss",
1554 0);
1555 } 1537 }
1556 1538
1557 // Checks that client-issued redirects work with prerendering. 1539 // Checks that client-issued redirects work with prerendering.
1558 // This version navigates to the final destination page, rather than the 1540 // This version navigates to the final destination page, rather than the
1559 // page which does the redirection via a mouse click. 1541 // page which does the redirection via a mouse click.
1560 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, 1542 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest,
1561 PrerenderClientRedirectNavigateToSecondViaClick) { 1543 PrerenderClientRedirectNavigateToSecondViaClick) {
1562 GURL prerender_url = embedded_test_server()->GetURL( 1544 GURL prerender_url = embedded_test_server()->GetURL(
1563 CreateClientRedirect("/prerender/prerender_page.html")); 1545 CreateClientRedirect("/prerender/prerender_page.html"));
1564 GURL destination_url = 1546 GURL destination_url =
(...skipping 1448 matching lines...) Expand 10 before | Expand all | Expand 10 after
3013 DisableJavascriptCalls(); 2995 DisableJavascriptCalls();
3014 2996
3015 // The prerender will not completely load until after the swap, so wait for a 2997 // The prerender will not completely load until after the swap, so wait for a
3016 // title change before calling DidPrerenderPass. 2998 // title change before calling DidPrerenderPass.
3017 std::unique_ptr<TestPrerender> prerender = PrerenderTestURL( 2999 std::unique_ptr<TestPrerender> prerender = PrerenderTestURL(
3018 "/prerender/prerender_deferred_image.html", FINAL_STATUS_USED, 0); 3000 "/prerender/prerender_deferred_image.html", FINAL_STATUS_USED, 0);
3019 WaitForASCIITitle(prerender->contents()->prerender_contents(), kReadyTitle); 3001 WaitForASCIITitle(prerender->contents()->prerender_contents(), kReadyTitle);
3020 EXPECT_EQ(1, GetPrerenderDomContentLoadedEventCountForLinkNumber(0)); 3002 EXPECT_EQ(1, GetPrerenderDomContentLoadedEventCountForLinkNumber(0));
3021 EXPECT_TRUE(DidPrerenderPass(prerender->contents()->prerender_contents())); 3003 EXPECT_TRUE(DidPrerenderPass(prerender->contents()->prerender_contents()));
3022 EXPECT_EQ(0, prerender->number_of_loads()); 3004 EXPECT_EQ(0, prerender->number_of_loads());
3023 histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLT", 1);
3024 histogram_tester().ExpectTotalCount(
3025 "Prerender.websame_PrerenderNotSwappedInPLT", 0);
3026 3005
3027 // Swap. 3006 // Swap.
3028 NavigationOrSwapObserver swap_observer(current_browser()->tab_strip_model(), 3007 NavigationOrSwapObserver swap_observer(current_browser()->tab_strip_model(),
3029 GetActiveWebContents()); 3008 GetActiveWebContents());
3030 ui_test_utils::NavigateToURLWithDisposition( 3009 ui_test_utils::NavigateToURLWithDisposition(
3031 current_browser(), dest_url(), WindowOpenDisposition::CURRENT_TAB, 3010 current_browser(), dest_url(), WindowOpenDisposition::CURRENT_TAB,
3032 ui_test_utils::BROWSER_TEST_NONE); 3011 ui_test_utils::BROWSER_TEST_NONE);
3033 swap_observer.Wait(); 3012 swap_observer.Wait();
3034 3013
3035 // The prerender never observes the final load. 3014 // The prerender never observes the final load.
3036 EXPECT_EQ(0, prerender->number_of_loads()); 3015 EXPECT_EQ(0, prerender->number_of_loads());
3037 3016
3038 // Now check DidDisplayPass. 3017 // Now check DidDisplayPass.
3039 EXPECT_TRUE(DidDisplayPass(GetActiveWebContents())); 3018 EXPECT_TRUE(DidDisplayPass(GetActiveWebContents()));
3040
3041 histogram_tester().ExpectTotalCount(
3042 "Prerender.websame_PrerenderNotSwappedInPLT", 0);
3043 histogram_tester().ExpectTotalCount("Prerender.websame_PerceivedPLT", 1);
3044 } 3019 }
3045 3020
3046 // Checks that a deferred redirect to an image is not loaded until the 3021 // Checks that a deferred redirect to an image is not loaded until the
3047 // page is visible, even after another redirect. 3022 // page is visible, even after another redirect.
3048 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, 3023 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest,
3049 PrerenderDeferredImageAfterRedirect) { 3024 PrerenderDeferredImageAfterRedirect) {
3050 DisableJavascriptCalls(); 3025 DisableJavascriptCalls();
3051 3026
3052 // The prerender will not completely load until after the swap, so wait for a 3027 // The prerender will not completely load until after the swap, so wait for a
3053 // title change before calling DidPrerenderPass. 3028 // title change before calling DidPrerenderPass.
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after
3203 BrowserThread::IO, FROM_HERE, 3178 BrowserThread::IO, FROM_HERE,
3204 base::Bind(&CreateCountingInterceptorOnIO, 3179 base::Bind(&CreateCountingInterceptorOnIO,
3205 kPingURL, empty_file, ping_counter.AsWeakPtr())); 3180 kPingURL, empty_file, ping_counter.AsWeakPtr()));
3206 3181
3207 PrerenderTestURL("/prerender/prerender_page.html", FINAL_STATUS_USED, 1); 3182 PrerenderTestURL("/prerender/prerender_page.html", FINAL_STATUS_USED, 1);
3208 OpenDestURLViaClickPing(kPingURL); 3183 OpenDestURLViaClickPing(kPingURL);
3209 3184
3210 ping_counter.WaitForCount(1); 3185 ping_counter.WaitForCount(1);
3211 } 3186 }
3212 3187
3213 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPPLTNormalNavigation) {
3214 GURL url = embedded_test_server()->GetURL("/prerender/prerender_page.html");
3215 ui_test_utils::NavigateToURL(current_browser(), url);
3216 histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLT", 1);
3217 }
3218
3219 // Checks that a prerender which calls window.close() on itself is aborted. 3188 // Checks that a prerender which calls window.close() on itself is aborted.
3220 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderWindowClose) { 3189 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderWindowClose) {
3221 DisableLoadEventCheck(); 3190 DisableLoadEventCheck();
3222 PrerenderTestURL("/prerender/prerender_window_close.html", 3191 PrerenderTestURL("/prerender/prerender_window_close.html",
3223 FINAL_STATUS_CLOSED, 0); 3192 FINAL_STATUS_CLOSED, 0);
3224 } 3193 }
3225 3194
3226 // Tests interaction between prerender and POST (i.e. POST request should still 3195 // Tests interaction between prerender and POST (i.e. POST request should still
3227 // be made and POST data should not be dropped when the POST target is the same 3196 // be made and POST data should not be dropped when the POST target is the same
3228 // as a prerender link). 3197 // as a prerender link).
(...skipping 575 matching lines...) Expand 10 before | Expand all | Expand 10 after
3804 browser()->tab_strip_model()->GetActiveWebContents(); 3773 browser()->tab_strip_model()->GetActiveWebContents();
3805 bool display_test_result = false; 3774 bool display_test_result = false;
3806 ASSERT_TRUE(content::ExecuteScriptAndExtractBool(web_contents, 3775 ASSERT_TRUE(content::ExecuteScriptAndExtractBool(web_contents,
3807 "DidDisplayReallyPass()", 3776 "DidDisplayReallyPass()",
3808 &display_test_result)); 3777 &display_test_result));
3809 ASSERT_TRUE(display_test_result); 3778 ASSERT_TRUE(display_test_result);
3810 } 3779 }
3811 #endif // !defined(DISABLE_NACL) 3780 #endif // !defined(DISABLE_NACL)
3812 3781
3813 } // namespace prerender 3782 } // namespace prerender
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/prerender/prerender_histograms.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698