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

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

Issue 2545943003: Accessing navigation information via webcontents (Closed)
Patch Set: Post-Review Modifications #3 Created 4 years 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
index 9a7db58f1f42590bfdd7cf78436b3e54969188f8..d1517f14920d6c532bcba1dbd7e9263fd1854ec2 100644
--- a/chrome/browser/net/resource_prefetch_predictor_observer.cc
+++ b/chrome/browser/net/resource_prefetch_predictor_observer.cc
@@ -4,17 +4,25 @@
#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/render_frame_host.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 {
@@ -51,6 +59,20 @@ void ReportMainFrameRequestStats(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);
+ return true;
+}
+
} // namespace
namespace chrome_browser_net {
@@ -69,8 +91,8 @@ ResourcePrefetchPredictorObserver::~ResourcePrefetchPredictorObserver() {
void ResourcePrefetchPredictorObserver::OnRequestStarted(
net::URLRequest* request,
content::ResourceType resource_type,
- int child_id,
- int frame_id) {
+ const content::ResourceRequestInfo::WebContentsGetter&
+ web_contents_getter) {
DCHECK_CURRENTLY_ON(BrowserThread::IO);
if (resource_type == content::RESOURCE_TYPE_MAIN_FRAME)
@@ -79,28 +101,26 @@ void ResourcePrefetchPredictorObserver::OnRequestStarted(
if (!ResourcePrefetchPredictor::ShouldRecordRequest(request, resource_type))
return;
- ResourcePrefetchPredictor::URLRequestSummary summary;
- summary.navigation_id.render_process_id = child_id;
- summary.navigation_id.render_frame_id = frame_id;
- summary.navigation_id.main_frame_url = request->first_party_for_cookies();
- summary.navigation_id.creation_time = request->creation_time();
- summary.resource_url = request->original_url();
- summary.resource_type = resource_type;
+ auto summary = base::MakeUnique<URLRequestSummary>();
+ summary->resource_url = request->original_url();
+ summary->resource_type = resource_type;
BrowserThread::PostTask(
- BrowserThread::UI,
- FROM_HERE,
- base::Bind(&ResourcePrefetchPredictor::RecordURLRequest,
- predictor_,
- summary));
+ BrowserThread::UI, FROM_HERE,
+ base::Bind(&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,
- net::URLRequest* request) {
+ const content::ResourceRequestInfo::WebContentsGetter&
+ web_contents_getter) {
DCHECK_CURRENTLY_ON(BrowserThread::IO);
const content::ResourceRequestInfo* request_info =
@@ -113,20 +133,20 @@ void ResourcePrefetchPredictorObserver::OnRequestRedirected(
if (!ResourcePrefetchPredictor::ShouldRecordRedirect(request))
return;
- ResourcePrefetchPredictor::URLRequestSummary summary;
+ auto summary = base::MakeUnique<URLRequestSummary>();
if (!ResourcePrefetchPredictor::URLRequestSummary::SummarizeResponse(
- *request, &summary)) {
+ *request, summary.get())) {
return;
}
-
- summary.redirect_url = redirect_url;
+ summary->redirect_url = redirect_url;
BrowserThread::PostTask(
- BrowserThread::UI,
- FROM_HERE,
- base::Bind(&ResourcePrefetchPredictor::RecordURLRedirect,
- predictor_,
- summary));
+ BrowserThread::UI, FROM_HERE,
+ base::Bind(
+ &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) {
@@ -135,7 +155,9 @@ void ResourcePrefetchPredictorObserver::OnRequestRedirected(
}
void ResourcePrefetchPredictorObserver::OnResponseStarted(
- net::URLRequest* request) {
+ net::URLRequest* request,
+ const content::ResourceRequestInfo::WebContentsGetter&
+ web_contents_getter) {
DCHECK_CURRENTLY_ON(BrowserThread::IO);
ReportRequestStats(REQUEST_STATS_TOTAL_RESPONSES);
@@ -149,18 +171,19 @@ void ResourcePrefetchPredictorObserver::OnResponseStarted(
if (!ResourcePrefetchPredictor::ShouldRecordResponse(request))
return;
- ResourcePrefetchPredictor::URLRequestSummary summary;
+ auto summary = base::MakeUnique<URLRequestSummary>();
if (!ResourcePrefetchPredictor::URLRequestSummary::SummarizeResponse(
- *request, &summary)) {
+ *request, summary.get())) {
return;
}
BrowserThread::PostTask(
- BrowserThread::UI,
- FROM_HERE,
- base::Bind(&ResourcePrefetchPredictor::RecordURLResponse,
- predictor_,
- summary));
+ BrowserThread::UI, FROM_HERE,
+ base::Bind(
+ &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 &&
@@ -169,4 +192,43 @@ void ResourcePrefetchPredictorObserver::OnResponseStarted(
}
}
+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
« no previous file with comments | « chrome/browser/net/resource_prefetch_predictor_observer.h ('k') | chrome/browser/predictors/resource_prefetch_common.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698