| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "base/files/scoped_temp_dir.h" | 5 #include "base/files/scoped_temp_dir.h" |
| 6 #include "base/macros.h" | 6 #include "base/macros.h" |
| 7 #include "base/test/histogram_tester.h" | 7 #include "base/test/histogram_tester.h" |
| 8 #include "base/threading/thread_restrictions.h" | 8 #include "base/threading/thread_restrictions.h" |
| 9 #include "base/time/time.h" | 9 #include "base/time/time.h" |
| 10 #include "chrome/browser/page_load_metrics/metrics_web_contents_observer.h" | 10 #include "chrome/browser/page_load_metrics/metrics_web_contents_observer.h" |
| 11 #include "chrome/browser/page_load_metrics/observers/aborts_page_load_metrics_ob
server.h" | 11 #include "chrome/browser/page_load_metrics/observers/aborts_page_load_metrics_ob
server.h" |
| 12 #include "chrome/browser/page_load_metrics/observers/core_page_load_metrics_obse
rver.h" | 12 #include "chrome/browser/page_load_metrics/observers/core_page_load_metrics_obse
rver.h" |
| 13 #include "chrome/browser/page_load_metrics/observers/document_write_page_load_me
trics_observer.h" | 13 #include "chrome/browser/page_load_metrics/observers/document_write_page_load_me
trics_observer.h" |
| 14 #include "chrome/browser/page_load_metrics/observers/no_state_prefetch_page_load
_metrics_observer.h" | 14 #include "chrome/browser/page_load_metrics/observers/no_state_prefetch_page_load
_metrics_observer.h" |
| 15 #include "chrome/browser/page_load_metrics/page_load_tracker.h" | 15 #include "chrome/browser/page_load_metrics/page_load_tracker.h" |
| 16 #include "chrome/browser/prerender/prerender_histograms.h" | 16 #include "chrome/browser/prerender/prerender_histograms.h" |
| 17 #include "chrome/browser/prerender/prerender_origin.h" | 17 #include "chrome/browser/prerender/prerender_origin.h" |
| 18 #include "chrome/browser/profiles/profile.h" | 18 #include "chrome/browser/profiles/profile.h" |
| 19 #include "chrome/browser/ui/browser.h" | 19 #include "chrome/browser/ui/browser.h" |
| 20 #include "chrome/browser/ui/browser_navigator_params.h" | 20 #include "chrome/browser/ui/browser_navigator_params.h" |
| 21 #include "chrome/browser/ui/tabs/tab_strip_model.h" | 21 #include "chrome/browser/ui/tabs/tab_strip_model.h" |
| 22 #include "chrome/common/page_load_metrics/page_load_metrics_messages.h" | |
| 23 #include "chrome/common/pref_names.h" | 22 #include "chrome/common/pref_names.h" |
| 24 #include "chrome/common/url_constants.h" | 23 #include "chrome/common/url_constants.h" |
| 25 #include "chrome/test/base/in_process_browser_test.h" | 24 #include "chrome/test/base/in_process_browser_test.h" |
| 26 #include "chrome/test/base/ui_test_utils.h" | 25 #include "chrome/test/base/ui_test_utils.h" |
| 27 #include "components/prefs/pref_service.h" | 26 #include "components/prefs/pref_service.h" |
| 28 #include "content/public/browser/browser_thread.h" | 27 #include "content/public/browser/browser_thread.h" |
| 29 #include "content/public/browser/render_process_host.h" | 28 #include "content/public/browser/render_process_host.h" |
| 30 #include "content/public/browser/render_view_host.h" | 29 #include "content/public/browser/render_view_host.h" |
| 31 #include "content/public/test/browser_test_utils.h" | 30 #include "content/public/test/browser_test_utils.h" |
| 32 #include "content/public/test/download_test_observer.h" | 31 #include "content/public/test/download_test_observer.h" |
| 33 #include "net/http/failing_http_transaction_factory.h" | 32 #include "net/http/failing_http_transaction_factory.h" |
| 34 #include "net/http/http_cache.h" | 33 #include "net/http/http_cache.h" |
| 35 #include "net/test/embedded_test_server/embedded_test_server.h" | 34 #include "net/test/embedded_test_server/embedded_test_server.h" |
| 36 #include "net/test/url_request/url_request_failed_job.h" | 35 #include "net/test/url_request/url_request_failed_job.h" |
| 37 #include "net/url_request/url_request_context.h" | 36 #include "net/url_request/url_request_context.h" |
| 38 #include "net/url_request/url_request_context_getter.h" | 37 #include "net/url_request/url_request_context_getter.h" |
| 39 | 38 |
| 40 namespace { | 39 namespace { |
| 41 | 40 |
| 41 void FailAllNetworkTransactions(net::URLRequestContextGetter* getter) { |
| 42 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); |
| 43 net::HttpCache* cache( |
| 44 getter->GetURLRequestContext()->http_transaction_factory()->GetCache()); |
| 45 DCHECK(cache); |
| 46 std::unique_ptr<net::FailingHttpTransactionFactory> factory( |
| 47 new net::FailingHttpTransactionFactory(cache->GetSession(), |
| 48 net::ERR_FAILED)); |
| 49 // Throw away old version; since this is a browser test, there is no |
| 50 // need to restore the old state. |
| 51 cache->SetHttpNetworkTransactionFactoryForTesting(std::move(factory)); |
| 52 } |
| 53 |
| 42 // Waits until specified timing and metadata expectations are satisfied. | 54 // Waits until specified timing and metadata expectations are satisfied. |
| 43 class PageLoadMetricsWaiter | 55 class PageLoadMetricsWaiter |
| 44 : public page_load_metrics::MetricsWebContentsObserver::TestingObserver { | 56 : public page_load_metrics::MetricsWebContentsObserver::TestingObserver { |
| 45 public: | 57 public: |
| 46 // A bitvector to express which timing fields to match on. | 58 // A bitvector to express which timing fields to match on. |
| 47 enum ExpectedTimingFields { | 59 enum ExpectedTimingFields { |
| 48 FIRST_PAINT = 1 << 0, | 60 FIRST_PAINT = 1 << 0, |
| 49 FIRST_CONTENTFUL_PAINT = 1 << 1, | 61 FIRST_CONTENTFUL_PAINT = 1 << 1, |
| 50 STYLE_UPDATE_BEFORE_FCP = 1 << 2 | 62 STYLE_UPDATE_BEFORE_FCP = 1 << 2 |
| 51 }; | 63 }; |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 141 browser()->tab_strip_model()->GetActiveWebContents(); | 153 browser()->tab_strip_model()->GetActiveWebContents(); |
| 142 return base::MakeUnique<PageLoadMetricsWaiter>(web_contents); | 154 return base::MakeUnique<PageLoadMetricsWaiter>(web_contents); |
| 143 } | 155 } |
| 144 | 156 |
| 145 base::HistogramTester histogram_tester_; | 157 base::HistogramTester histogram_tester_; |
| 146 | 158 |
| 147 private: | 159 private: |
| 148 DISALLOW_COPY_AND_ASSIGN(PageLoadMetricsBrowserTest); | 160 DISALLOW_COPY_AND_ASSIGN(PageLoadMetricsBrowserTest); |
| 149 }; | 161 }; |
| 150 | 162 |
| 151 void FailAllNetworkTransactions(net::URLRequestContextGetter* getter) { | |
| 152 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); | |
| 153 net::HttpCache* cache( | |
| 154 getter->GetURLRequestContext()->http_transaction_factory()->GetCache()); | |
| 155 DCHECK(cache); | |
| 156 std::unique_ptr<net::FailingHttpTransactionFactory> factory( | |
| 157 new net::FailingHttpTransactionFactory(cache->GetSession(), | |
| 158 net::ERR_FAILED)); | |
| 159 // Throw away old version; since this is a browser test, there is no | |
| 160 // need to restore the old state. | |
| 161 cache->SetHttpNetworkTransactionFactoryForTesting(std::move(factory)); | |
| 162 } | |
| 163 | |
| 164 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, NoNavigation) { | 163 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, NoNavigation) { |
| 165 ASSERT_TRUE(embedded_test_server()->Start()); | 164 ASSERT_TRUE(embedded_test_server()->Start()); |
| 166 EXPECT_TRUE(NoPageLoadMetricsRecorded()); | 165 EXPECT_TRUE(NoPageLoadMetricsRecorded()); |
| 167 } | 166 } |
| 168 | 167 |
| 169 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, NewPage) { | 168 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, NewPage) { |
| 170 ASSERT_TRUE(embedded_test_server()->Start()); | 169 ASSERT_TRUE(embedded_test_server()->Start()); |
| 171 | 170 |
| 172 ui_test_utils::NavigateToURL(browser(), | 171 ui_test_utils::NavigateToURL(browser(), |
| 173 embedded_test_server()->GetURL("/title1.html")); | 172 embedded_test_server()->GetURL("/title1.html")); |
| (...skipping 558 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 732 ui_test_utils::NavigateToURL(browser(), embedded_test_server()->GetURL( | 731 ui_test_utils::NavigateToURL(browser(), embedded_test_server()->GetURL( |
| 733 "/page_load_metrics/large.html")); | 732 "/page_load_metrics/large.html")); |
| 734 NavigateToUntrackedUrl(); | 733 NavigateToUntrackedUrl(); |
| 735 | 734 |
| 736 histogram_tester_.ExpectTotalCount(internal::kHistogramTotalBytes, 1); | 735 histogram_tester_.ExpectTotalCount(internal::kHistogramTotalBytes, 1); |
| 737 | 736 |
| 738 // Verify that there is a single sample recorded in the 10kB bucket (the size | 737 // Verify that there is a single sample recorded in the 10kB bucket (the size |
| 739 // of the main HTML response). | 738 // of the main HTML response). |
| 740 histogram_tester_.ExpectBucketCount(internal::kHistogramTotalBytes, 10, 1); | 739 histogram_tester_.ExpectBucketCount(internal::kHistogramTotalBytes, 10, 1); |
| 741 } | 740 } |
| OLD | NEW |