Chromium Code Reviews| Index: content/browser/frame_host/navigation_controller_impl_browsertest.cc |
| diff --git a/content/browser/frame_host/navigation_controller_impl_browsertest.cc b/content/browser/frame_host/navigation_controller_impl_browsertest.cc |
| index d732bd929d9166d72bc251883dd149cc68316481..1fda6fe26aa2b5d8069de7c220f7152fc09d4eef 100644 |
| --- a/content/browser/frame_host/navigation_controller_impl_browsertest.cc |
| +++ b/content/browser/frame_host/navigation_controller_impl_browsertest.cc |
| @@ -12,6 +12,7 @@ |
| #include "base/macros.h" |
| #include "base/strings/stringprintf.h" |
| #include "base/strings/utf_string_conversions.h" |
| +#include "base/test/histogram_tester.h" |
| #include "content/browser/frame_host/frame_navigation_entry.h" |
| #include "content/browser/frame_host/frame_tree.h" |
| #include "content/browser/frame_host/navigation_entry_impl.h" |
| @@ -6120,4 +6121,77 @@ IN_PROC_BROWSER_TEST_F(NavigationControllerBrowserTest, |
| EXPECT_FALSE(favicon_status3.valid); |
| } |
| +// Check if consecutive reloads can be correctly captured by metrics. |
| +IN_PROC_BROWSER_TEST_F(NavigationControllerBrowserTest, |
| + ConsecutiveReloadMetrics) { |
| + base::HistogramTester histogram; |
| + |
| + const char kReloadToReloadMetricName[] = |
| + "Navigation.Reload.ReloadToReloadDuration"; |
| + const char kReloadMainResourceToReloadMetricName[] = |
| + "Navigation.Reload.ReloadMainResourceToReloadDuration"; |
| + |
| + // Navigate to a page, and check if metrics are initialized correctly. |
| + NavigateToURL(shell(), embedded_test_server()->GetURL( |
| + "/navigation_controller/page_with_links.html")); |
| + histogram.ExpectTotalCount(kReloadToReloadMetricName, 0); |
| + histogram.ExpectTotalCount(kReloadMainResourceToReloadMetricName, 0); |
| + |
| + NavigationControllerImpl& controller = static_cast<NavigationControllerImpl&>( |
| + shell()->web_contents()->GetController()); |
| + |
| + // ReloadToRefreshContent triggers a reload of ReloadType::MAIN_RESOURCE. The |
| + // first reload should not be counted. |
| + controller.ReloadToRefreshContent(false); |
| + EXPECT_TRUE(WaitForLoadStop(shell()->web_contents())); |
| + histogram.ExpectTotalCount(kReloadToReloadMetricName, 0); |
| + histogram.ExpectTotalCount(kReloadMainResourceToReloadMetricName, 0); |
| + |
| + // ReloadBypassingCache triggers a reload of ReloadType::BYPASSING_CACHE. |
| + // Both metrics should count the consecutive reloads. |
| + controller.ReloadBypassingCache(false); |
| + EXPECT_TRUE(WaitForLoadStop(shell()->web_contents())); |
| + histogram.ExpectTotalCount(kReloadToReloadMetricName, 1); |
| + histogram.ExpectTotalCount(kReloadMainResourceToReloadMetricName, 1); |
| + |
| + // Triggers another reload of ReloadType::BYPASSING_CACHE. |
| + // ReloadMainResourceToReload should not be counted here. |
| + controller.ReloadBypassingCache(false); |
| + EXPECT_TRUE(WaitForLoadStop(shell()->web_contents())); |
| + histogram.ExpectTotalCount(kReloadToReloadMetricName, 2); |
| + histogram.ExpectTotalCount(kReloadMainResourceToReloadMetricName, 1); |
| + |
| + // A browser-initiated navigation should reset the reload tracking |
| + // information. |
| + NavigateToURL(shell(), embedded_test_server()->GetURL( |
| + "/navigation_controller/simple_page_1.html")); |
| + histogram.ExpectTotalCount(kReloadToReloadMetricName, 2); |
| + histogram.ExpectTotalCount(kReloadMainResourceToReloadMetricName, 1); |
| + |
| + // Then, the next reload should be assumed as the first reload. Metrics |
| + // should not be changed for the first reload. |
| + controller.ReloadToRefreshContent(false); |
| + EXPECT_TRUE(WaitForLoadStop(shell()->web_contents())); |
| + histogram.ExpectTotalCount(kReloadToReloadMetricName, 2); |
| + histogram.ExpectTotalCount(kReloadMainResourceToReloadMetricName, 1); |
| + |
| + // Another reload of ReloadType::MAIN_RESOURCE should be counted by both |
| + // metrics again. |
| + controller.ReloadToRefreshContent(false); |
| + EXPECT_TRUE(WaitForLoadStop(shell()->web_contents())); |
| + histogram.ExpectTotalCount(kReloadToReloadMetricName, 3); |
| + histogram.ExpectTotalCount(kReloadMainResourceToReloadMetricName, 2); |
|
Charlie Reis
2016/09/28 00:05:24
Can you add cases after this showing that renderer
Takashi Toyoshima
2016/09/28 10:37:21
I tried to use setTimeout, but it still run with t
Charlie Reis
2016/09/28 16:58:58
ExecuteJavaScriptForTests seems right, thanks.
|
| + |
| + // Go back to the first page. Reload tracking information should be reset. |
| + shell()->web_contents()->GetController().GoBack(); |
| + EXPECT_TRUE(WaitForLoadStop(shell()->web_contents())); |
| + histogram.ExpectTotalCount(kReloadToReloadMetricName, 3); |
| + histogram.ExpectTotalCount(kReloadMainResourceToReloadMetricName, 2); |
| + |
| + controller.ReloadToRefreshContent(false); |
| + EXPECT_TRUE(WaitForLoadStop(shell()->web_contents())); |
| + histogram.ExpectTotalCount(kReloadToReloadMetricName, 3); |
| + histogram.ExpectTotalCount(kReloadMainResourceToReloadMetricName, 2); |
| +} |
| + |
| } // namespace content |