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

Unified Diff: chrome/browser/net/resource_prefetch_predictor_observer.cc

Issue 2887133003: predictors: Refactor resource_prefetch_predictor triggering. (Closed)
Patch Set: . Created 3 years, 7 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
Index: chrome/browser/net/resource_prefetch_predictor_observer.cc
diff --git a/chrome/browser/net/resource_prefetch_predictor_observer.cc b/chrome/browser/net/resource_prefetch_predictor_observer.cc
deleted file mode 100644
index 4dc2b0bce2d2e7ad49ddf05f7d512f595eb6708d..0000000000000000000000000000000000000000
--- a/chrome/browser/net/resource_prefetch_predictor_observer.cc
+++ /dev/null
@@ -1,237 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/net/resource_prefetch_predictor_observer.h"
-
-#include <memory>
-#include <string>
-#include <utility>
-
-#include "base/memory/ptr_util.h"
-#include "base/metrics/histogram_macros.h"
-#include "content/public/browser/browser_thread.h"
-#include "content/public/browser/resource_request_info.h"
-#include "net/url_request/url_request.h"
-#include "url/gurl.h"
-
-namespace content {
-class WebContents;
-}
-
-using content::BrowserThread;
-using predictors::ResourcePrefetchPredictor;
-using URLRequestSummary =
- predictors::ResourcePrefetchPredictor::URLRequestSummary;
-
-namespace {
-
-// Enum for measuring statistics pertaining to observed request, responses and
-// redirects.
-enum RequestStats {
- REQUEST_STATS_TOTAL_RESPONSES = 0,
- REQUEST_STATS_TOTAL_PROCESSED_RESPONSES = 1,
- REQUEST_STATS_NO_RESOURCE_REQUEST_INFO = 2, // Not recorded (never was).
- REQUEST_STATS_NO_RENDER_FRAME_ID_FROM_REQUEST_INFO = 3, // Not recorded.
- REQUEST_STATS_MAX = 4,
-};
-
-// Specific to main frame requests.
-enum MainFrameRequestStats {
- MAIN_FRAME_REQUEST_STATS_TOTAL_REQUESTS = 0,
- MAIN_FRAME_REQUEST_STATS_PROCESSED_REQUESTS = 1,
- MAIN_FRAME_REQUEST_STATS_TOTAL_REDIRECTS = 2,
- MAIN_FRAME_REQUEST_STATS_PROCESSED_REDIRECTS = 3,
- MAIN_FRAME_REQUEST_STATS_TOTAL_RESPONSES = 4,
- MAIN_FRAME_REQUEST_STATS_PROCESSED_RESPONSES = 5,
- MAIN_FRAME_REQUEST_STATS_MAX = 6,
-};
-
-void ReportRequestStats(RequestStats stat) {
- UMA_HISTOGRAM_ENUMERATION("ResourcePrefetchPredictor.RequestStats",
- stat,
- REQUEST_STATS_MAX);
-}
-
-void ReportMainFrameRequestStats(MainFrameRequestStats stat) {
- UMA_HISTOGRAM_ENUMERATION("ResourcePrefetchPredictor.MainFrameRequestStats",
- stat,
- MAIN_FRAME_REQUEST_STATS_MAX);
-}
-
-bool TryToFillNavigationID(
- predictors::NavigationID* navigation_id,
- const content::ResourceRequestInfo::WebContentsGetter& web_contents_getter,
- const GURL& main_frame_url,
- const base::TimeTicks& creation_time) {
- DCHECK_CURRENTLY_ON(BrowserThread::UI);
- content::WebContents* web_contents = web_contents_getter.Run();
- if (!web_contents)
- return false;
- *navigation_id =
- predictors::NavigationID(web_contents, main_frame_url, creation_time);
- // A WebContents might be associated with something that is not a tab.
- // In this case tab_id will be -1 and is_valid() will return false.
- return navigation_id->is_valid();
-}
-
-} // namespace
-
-namespace chrome_browser_net {
-
-ResourcePrefetchPredictorObserver::ResourcePrefetchPredictorObserver(
- ResourcePrefetchPredictor* predictor)
- : predictor_(predictor->AsWeakPtr()) {
- DCHECK_CURRENTLY_ON(BrowserThread::UI);
-}
-
-ResourcePrefetchPredictorObserver::~ResourcePrefetchPredictorObserver() {
- CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI) ||
- BrowserThread::CurrentlyOn(BrowserThread::IO));
-}
-
-void ResourcePrefetchPredictorObserver::OnRequestStarted(
- net::URLRequest* request,
- content::ResourceType resource_type,
- const content::ResourceRequestInfo::WebContentsGetter&
- web_contents_getter) {
- DCHECK_CURRENTLY_ON(BrowserThread::IO);
-
- if (resource_type == content::RESOURCE_TYPE_MAIN_FRAME)
- ReportMainFrameRequestStats(MAIN_FRAME_REQUEST_STATS_TOTAL_REQUESTS);
-
- if (!ResourcePrefetchPredictor::ShouldRecordRequest(request, resource_type))
- return;
-
- auto summary = base::MakeUnique<URLRequestSummary>();
- summary->resource_url = request->original_url();
- summary->resource_type = resource_type;
-
- BrowserThread::PostTask(
- BrowserThread::UI, FROM_HERE,
- base::BindOnce(
- &ResourcePrefetchPredictorObserver::OnRequestStartedOnUIThread,
- base::Unretained(this), base::Passed(std::move(summary)),
- web_contents_getter, request->first_party_for_cookies(),
- request->creation_time()));
-
- if (resource_type == content::RESOURCE_TYPE_MAIN_FRAME)
- ReportMainFrameRequestStats(MAIN_FRAME_REQUEST_STATS_PROCESSED_REQUESTS);
-}
-
-void ResourcePrefetchPredictorObserver::OnRequestRedirected(
- net::URLRequest* request,
- const GURL& redirect_url,
- const content::ResourceRequestInfo::WebContentsGetter&
- web_contents_getter) {
- DCHECK_CURRENTLY_ON(BrowserThread::IO);
-
- const content::ResourceRequestInfo* request_info =
- content::ResourceRequestInfo::ForRequest(request);
- if (request_info &&
- request_info->GetResourceType() == content::RESOURCE_TYPE_MAIN_FRAME) {
- ReportMainFrameRequestStats(MAIN_FRAME_REQUEST_STATS_TOTAL_REDIRECTS);
- }
-
- if (!ResourcePrefetchPredictor::ShouldRecordRedirect(request))
- return;
-
- auto summary = base::MakeUnique<URLRequestSummary>();
- if (!ResourcePrefetchPredictor::URLRequestSummary::SummarizeResponse(
- *request, summary.get())) {
- return;
- }
- summary->redirect_url = redirect_url;
-
- BrowserThread::PostTask(
- BrowserThread::UI, FROM_HERE,
- base::BindOnce(
- &ResourcePrefetchPredictorObserver::OnRequestRedirectedOnUIThread,
- base::Unretained(this), base::Passed(std::move(summary)),
- web_contents_getter, request->first_party_for_cookies(),
- request->creation_time()));
-
- if (request_info &&
- request_info->GetResourceType() == content::RESOURCE_TYPE_MAIN_FRAME) {
- ReportMainFrameRequestStats(MAIN_FRAME_REQUEST_STATS_PROCESSED_REDIRECTS);
- }
-}
-
-void ResourcePrefetchPredictorObserver::OnResponseStarted(
- net::URLRequest* request,
- const content::ResourceRequestInfo::WebContentsGetter&
- web_contents_getter) {
- DCHECK_CURRENTLY_ON(BrowserThread::IO);
-
- ReportRequestStats(REQUEST_STATS_TOTAL_RESPONSES);
-
- const content::ResourceRequestInfo* request_info =
- content::ResourceRequestInfo::ForRequest(request);
- if (request_info &&
- request_info->GetResourceType() == content::RESOURCE_TYPE_MAIN_FRAME) {
- ReportMainFrameRequestStats(MAIN_FRAME_REQUEST_STATS_TOTAL_RESPONSES);
- }
-
- if (!ResourcePrefetchPredictor::ShouldRecordResponse(request))
- return;
- auto summary = base::MakeUnique<URLRequestSummary>();
- if (!ResourcePrefetchPredictor::URLRequestSummary::SummarizeResponse(
- *request, summary.get())) {
- return;
- }
-
- BrowserThread::PostTask(
- BrowserThread::UI, FROM_HERE,
- base::BindOnce(
- &ResourcePrefetchPredictorObserver::OnResponseStartedOnUIThread,
- base::Unretained(this), base::Passed(std::move(summary)),
- web_contents_getter, request->first_party_for_cookies(),
- request->creation_time()));
-
- ReportRequestStats(REQUEST_STATS_TOTAL_PROCESSED_RESPONSES);
- if (request_info &&
- request_info->GetResourceType() == content::RESOURCE_TYPE_MAIN_FRAME) {
- ReportMainFrameRequestStats(MAIN_FRAME_REQUEST_STATS_PROCESSED_RESPONSES);
- }
-}
-
-void ResourcePrefetchPredictorObserver::OnRequestStartedOnUIThread(
- std::unique_ptr<URLRequestSummary> summary,
- const content::ResourceRequestInfo::WebContentsGetter& web_contents_getter,
- const GURL& main_frame_url,
- const base::TimeTicks& creation_time) const {
- DCHECK_CURRENTLY_ON(BrowserThread::UI);
- if (!TryToFillNavigationID(&summary->navigation_id, web_contents_getter,
- main_frame_url, creation_time)) {
- return;
- }
- predictor_->RecordURLRequest(*summary);
-}
-
-void ResourcePrefetchPredictorObserver::OnRequestRedirectedOnUIThread(
- std::unique_ptr<URLRequestSummary> summary,
- const content::ResourceRequestInfo::WebContentsGetter& web_contents_getter,
- const GURL& main_frame_url,
- const base::TimeTicks& creation_time) const {
- DCHECK_CURRENTLY_ON(BrowserThread::UI);
- if (!TryToFillNavigationID(&summary->navigation_id, web_contents_getter,
- main_frame_url, creation_time)) {
- return;
- }
- predictor_->RecordURLRedirect(*summary);
-}
-
-void ResourcePrefetchPredictorObserver::OnResponseStartedOnUIThread(
- std::unique_ptr<URLRequestSummary> summary,
- const content::ResourceRequestInfo::WebContentsGetter& web_contents_getter,
- const GURL& main_frame_url,
- const base::TimeTicks& creation_time) const {
- DCHECK_CURRENTLY_ON(BrowserThread::UI);
- if (!TryToFillNavigationID(&summary->navigation_id, web_contents_getter,
- main_frame_url, creation_time)) {
- return;
- }
- predictor_->RecordURLResponse(*summary);
-}
-
-} // namespace chrome_browser_net

Powered by Google App Engine
This is Rietveld 408576698