Chromium Code Reviews| Index: chrome/browser/renderer_host/chrome_resource_dispatcher_host_delegate.cc |
| diff --git a/chrome/browser/renderer_host/chrome_resource_dispatcher_host_delegate.cc b/chrome/browser/renderer_host/chrome_resource_dispatcher_host_delegate.cc |
| index 11bc778c13a284f484290a603645fbfcfafd4c24..20e58001737be8df401650684281e5a9cb48abbd 100644 |
| --- a/chrome/browser/renderer_host/chrome_resource_dispatcher_host_delegate.cc |
| +++ b/chrome/browser/renderer_host/chrome_resource_dispatcher_host_delegate.cc |
| @@ -23,6 +23,7 @@ |
| #include "chrome/browser/download/download_resource_throttle.h" |
| #include "chrome/browser/mod_pagespeed/mod_pagespeed_metrics.h" |
| #include "chrome/browser/net/resource_prefetch_predictor_observer.h" |
| +#include "chrome/browser/page_load_metrics/metrics_web_contents_observer.h" |
| #include "chrome/browser/plugins/plugin_prefs.h" |
| #include "chrome/browser/prerender/prerender_manager.h" |
| #include "chrome/browser/prerender/prerender_manager_factory.h" |
| @@ -160,11 +161,9 @@ prerender::PrerenderManager* GetPrerenderManager( |
| return prerender::PrerenderManagerFactory::GetForProfile(profile); |
| } |
| -void UpdatePrerenderNetworkBytesCallback( |
| - const content::ResourceRequestInfo::WebContentsGetter& web_contents_getter, |
| - int64_t bytes) { |
| +void UpdatePrerenderNetworkBytesCallback(content::WebContents* web_contents, |
| + int64_t bytes) { |
| DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| - content::WebContents* web_contents = web_contents_getter.Run(); |
| // PrerenderContents::FromWebContents handles the NULL case. |
| prerender::PrerenderContents* prerender_contents = |
| prerender::PrerenderContents::FromWebContents(web_contents); |
| @@ -283,13 +282,10 @@ void AppendComponentUpdaterThrottles( |
| // This function is called in RequestComplete to log metrics about main frame |
|
Lei Zhang
2016/08/09 19:14:17
This comment is slightly out of date?
Charlie Harrison
2016/08/09 19:32:49
Updated.
|
| // resources. |
| -void LogMainFrameMetricsOnUIThread( |
| - const GURL& url, |
| - int net_error, |
| - base::TimeDelta request_loading_time, |
| - const content::ResourceRequestInfo::WebContentsGetter& |
| - web_contents_getter) { |
| - content::WebContents* web_contents = web_contents_getter.Run(); |
| +void LogMainFrameMetricsOnUIThread(const GURL& url, |
| + int net_error, |
| + base::TimeDelta request_loading_time, |
| + content::WebContents* web_contents) { |
| if (!web_contents) |
|
Lei Zhang
2016/08/09 19:14:17
Seems this should never eval to false now.
Charlie Harrison
2016/08/09 19:32:49
Removed.
|
| return; |
| Profile* profile = |
| @@ -343,6 +339,32 @@ void LogMainFrameMetricsOnUIThread( |
| } |
| } |
| +void NotifyUIThreadOfRequestComplete( |
| + const content::ResourceRequestInfo::WebContentsGetter& web_contents_getter, |
| + const GURL& url, |
| + content::ResourceType resource_type, |
| + bool was_cached, |
| + int net_error, |
| + int64_t total_received_bytes, |
| + base::TimeDelta request_loading_time) { |
| + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| + content::WebContents* web_contents = web_contents_getter.Run(); |
| + if (!web_contents) |
| + return; |
| + if (resource_type == content::RESOURCE_TYPE_MAIN_FRAME) { |
| + LogMainFrameMetricsOnUIThread(url, net_error, request_loading_time, |
| + web_contents); |
| + } |
| + if (!was_cached) |
| + UpdatePrerenderNetworkBytesCallback(web_contents, total_received_bytes); |
| + page_load_metrics::MetricsWebContentsObserver* metrics_observer = |
| + page_load_metrics::MetricsWebContentsObserver::FromWebContents( |
| + web_contents); |
| + if (metrics_observer) { |
| + metrics_observer->OnRequestComplete(resource_type, was_cached, net_error); |
| + } |
| +} |
| + |
| } // namespace |
| ChromeResourceDispatcherHostDelegate::ChromeResourceDispatcherHostDelegate() |
| @@ -790,25 +812,18 @@ void ChromeResourceDispatcherHostDelegate::OnRequestRedirected( |
| // Notification that a request has completed. |
| void ChromeResourceDispatcherHostDelegate::RequestComplete( |
| net::URLRequest* url_request) { |
| - // Jump on the UI thread and inform the prerender about the bytes. |
| + if (!url_request) |
| + return; |
| const ResourceRequestInfo* info = |
| ResourceRequestInfo::ForRequest(url_request); |
| - if (url_request && !url_request->was_cached()) { |
| - BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, |
| - base::Bind(&UpdatePrerenderNetworkBytesCallback, |
| - info->GetWebContentsGetterForRequest(), |
| - url_request->GetTotalReceivedBytes())); |
| - } |
| - |
| - if (url_request && |
| - info->GetResourceType() == content::RESOURCE_TYPE_MAIN_FRAME) { |
| - BrowserThread::PostTask( |
| - BrowserThread::UI, FROM_HERE, |
| - base::Bind(&LogMainFrameMetricsOnUIThread, url_request->url(), |
| - url_request->status().error(), |
| - base::TimeTicks::Now() - url_request->creation_time(), |
| - info->GetWebContentsGetterForRequest())); |
| - } |
| + BrowserThread::PostTask( |
| + BrowserThread::UI, FROM_HERE, |
| + base::Bind(&NotifyUIThreadOfRequestComplete, |
| + info->GetWebContentsGetterForRequest(), url_request->url(), |
| + info->GetResourceType(), url_request->was_cached(), |
| + url_request->status().error(), |
| + url_request->GetTotalReceivedBytes(), |
| + base::TimeTicks::Now() - url_request->creation_time())); |
| } |
| bool ChromeResourceDispatcherHostDelegate::ShouldEnableLoFiMode( |