| 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);
|
|
|
|
|