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