Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(976)

Unified Diff: chrome/browser/loader/chrome_resource_dispatcher_host_delegate.cc

Issue 2903383003: Get network resource usage from ChromeResourceDispatcherHostDelegate (Closed)
Patch Set: CR feedback per FGorski Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | chrome/browser/offline_pages/background_loader_offliner.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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);
« no previous file with comments | « no previous file | chrome/browser/offline_pages/background_loader_offliner.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698