Index: chrome/browser/loader/chrome_resource_dispatcher_host_delegate.cc |
diff --git a/chrome/browser/loader/chrome_resource_dispatcher_host_delegate.cc b/chrome/browser/loader/chrome_resource_dispatcher_host_delegate.cc |
index a3ea43e47fd3b796089ec5f17f4df591bba4866f..d11dcb188e88f66a2d9a1d377d70e33dc0595706 100644 |
--- a/chrome/browser/loader/chrome_resource_dispatcher_host_delegate.cc |
+++ b/chrome/browser/loader/chrome_resource_dispatcher_host_delegate.cc |
@@ -50,6 +50,7 @@ |
#include "components/data_reduction_proxy/core/browser/data_reduction_proxy_io_data.h" |
#include "components/data_reduction_proxy/core/common/data_reduction_proxy_util.h" |
#include "components/google/core/browser/google_util.h" |
+#include "components/offline_pages/features/features.h" |
#include "components/policy/core/common/cloud/policy_header_io_helper.h" |
#include "components/previews/core/previews_experiments.h" |
#include "components/previews/core/previews_io_data.h" |
@@ -102,11 +103,15 @@ |
#include "extensions/common/user_script.h" |
#endif |
+#if BUILDFLAG(ENABLE_OFFLINE_PAGES) |
+#include "chrome/browser/offline_pages/offliner_user_data.h" |
+#include "chrome/browser/offline_pages/resource_loading_observer.h" |
+#endif |
+ |
#if defined(OS_ANDROID) |
#include "chrome/browser/android/download/intercept_download_resource_throttle.h" |
#include "chrome/browser/android/offline_pages/downloads/resource_throttle.h" |
#include "chrome/browser/loader/data_reduction_proxy_resource_throttle_android.h" |
-#include "chrome/browser/offline_pages/background_loader_offliner.h" |
#include "components/navigation_interception/intercept_navigation_delegate.h" |
#endif |
@@ -349,6 +354,40 @@ void LogMainFrameMetricsOnUIThread(const GURL& url, |
} |
} |
+#if BUILDFLAG(ENABLE_OFFLINE_PAGES) |
+// Translate content::ResourceType to a type to use for Offliners. |
+offline_pages::ResourceLoadingObserver::ResourceDataType |
+ConvertResourceTypeToResourceDataType(content::ResourceType type) { |
+ switch (type) { |
+ case content::RESOURCE_TYPE_STYLESHEET: |
+ return offline_pages::ResourceLoadingObserver::ResourceDataType::TEXT_CSS; |
+ case content::RESOURCE_TYPE_IMAGE: |
+ return offline_pages::ResourceLoadingObserver::ResourceDataType::IMAGE; |
+ default: |
+ return offline_pages::ResourceLoadingObserver::ResourceDataType::OTHER; |
+ } |
+} |
+ |
+void NotifyUIThreadOfRequestStarted( |
+ const content::ResourceRequestInfo::WebContentsGetter& web_contents_getter, |
+ ResourceType resource_type) { |
+ DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
+ content::WebContents* web_contents = web_contents_getter.Run(); |
+ if (!web_contents) |
+ return; |
+ |
+ // If we are producing an offline version of the page, track resource loading. |
+ offline_pages::ResourceLoadingObserver* resource_tracker = |
+ offline_pages::OfflinerUserData::ResourceLoadingObserverFromWebContents( |
+ web_contents); |
+ if (resource_tracker) { |
+ offline_pages::ResourceLoadingObserver::ResourceDataType data_type = |
+ ConvertResourceTypeToResourceDataType(resource_type); |
+ resource_tracker->ObserveResourceLoading(data_type, true /* STARTED */); |
+ } |
+} |
+#endif |
+ |
void NotifyUIThreadOfRequestComplete( |
const content::ResourceRequestInfo::WebContentsGetter& web_contents_getter, |
const content::ResourceRequestInfo::FrameTreeNodeIdGetter& |
@@ -371,20 +410,30 @@ void NotifyUIThreadOfRequestComplete( |
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); |
-#if defined(OS_ANDROID) |
- offline_pages::BackgroundLoaderOffliner* background_loader = |
- offline_pages::BackgroundLoaderOffliner::FromWebContents(web_contents); |
+ } |
- if (background_loader) |
- background_loader->OnNetworkBytesChanged(total_received_bytes); |
-#endif // OS_ANDROID |
+#if BUILDFLAG(ENABLE_OFFLINE_PAGES) |
+ // If we are producing an offline version of the page, track resource loading. |
+ offline_pages::ResourceLoadingObserver* resource_tracker = |
+ offline_pages::OfflinerUserData::ResourceLoadingObserverFromWebContents( |
+ web_contents); |
+ if (resource_tracker) { |
+ offline_pages::ResourceLoadingObserver::ResourceDataType data_type = |
+ ConvertResourceTypeToResourceDataType(resource_type); |
+ resource_tracker->ObserveResourceLoading(data_type, false /* COMPLETED */); |
+ if (!was_cached) |
+ resource_tracker->OnNetworkBytesChanged(total_received_bytes); |
} |
+#endif // BUILDFLAG(ENABLE_OFFLINE_PAGES) |
+ |
if (!is_download) { |
page_load_metrics::MetricsWebContentsObserver* metrics_observer = |
page_load_metrics::MetricsWebContentsObserver::FromWebContents( |
@@ -458,6 +507,16 @@ void ChromeResourceDispatcherHostDelegate::RequestBeginning( |
const ResourceRequestInfo* info = ResourceRequestInfo::ForRequest(request); |
+#if BUILDFLAG(ENABLE_OFFLINE_PAGES) |
+ // TODO(petewil): Unify the safe browsing request and the metrics observer |
+ // request if possible so we only have to cross to the main thread once. |
+ // http://crbug.com/712312. |
+ BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, |
+ base::Bind(&NotifyUIThreadOfRequestStarted, |
+ info->GetWebContentsGetterForRequest(), |
+ info->GetResourceType())); |
+#endif // BUILDFLAG(ENABLE_OFFLINE_PAGES) |
+ |
ProfileIOData* io_data = ProfileIOData::FromResourceContext( |
resource_context); |