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

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

Issue 2545943003: Accessing navigation information via webcontents (Closed)
Patch Set: Fixed SummarizeResponse 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..c849d4d9b47c25fe147731affa2b0be6b441bff4 100644
--- a/chrome/browser/net/resource_prefetch_predictor_observer.cc
+++ b/chrome/browser/net/resource_prefetch_predictor_observer.cc
@@ -4,12 +4,16 @@
#include "chrome/browser/net/resource_prefetch_predictor_observer.h"
+#include <memory>
ahemery 2016/12/05 09:38:44 for unique_ptr
#include <string>
+#include "base/memory/ptr_util.h"
ahemery 2016/12/05 09:38:45 For MakeUnique and base::Passed
#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/render_process_host.h"
#include "content/public/browser/resource_request_info.h"
+#include "content/public/browser/web_contents.h"
#include "net/url_request/url_request.h"
#include "url/gurl.h"
@@ -69,8 +73,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 +83,36 @@ 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>();
ahemery 2016/12/05 09:38:44 Now using a pointer as we are passing it to a diff
+ 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;
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));
if (resource_type == content::RESOURCE_TYPE_MAIN_FRAME)
ReportMainFrameRequestStats(MAIN_FRAME_REQUEST_STATS_PROCESSED_REQUESTS);
}
ahemery 2016/12/06 14:31:11 Private methods moved at the end of the file
alexilin 2016/12/06 15:51:54 Thanks! Could you reply directly under initial com
+void ResourcePrefetchPredictorObserver::OnRequestStartedOnUIThread(
alexilin 2016/12/05 13:20:00 nit: Could you put all definitions of private func
+ std::unique_ptr<URLRequestSummary> summary,
+ const content::ResourceRequestInfo::WebContentsGetter&
+ web_contents_getter) const {
+ DCHECK_CURRENTLY_ON(BrowserThread::UI);
+ RetrieveNavigationID(summary->navigation_id, web_contents_getter);
+ predictor_->RecordURLRequest(*summary);
+}
+
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 +125,21 @@ void ResourcePrefetchPredictorObserver::OnRequestRedirected(
if (!ResourcePrefetchPredictor::ShouldRecordRedirect(request))
return;
- ResourcePrefetchPredictor::URLRequestSummary summary;
+ auto summary = base::MakeUnique<URLRequestSummary>();
+ summary->navigation_id.main_frame_url = request->first_party_for_cookies();
ahemery 2016/12/05 09:38:45 main_frame_url and creation_time is not done in Su
+ summary->navigation_id.creation_time = request->creation_time();
+ summary->redirect_url = redirect_url;
if (!ResourcePrefetchPredictor::URLRequestSummary::SummarizeResponse(
- *request, &summary)) {
+ *request, summary.get())) {
return;
}
- 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));
if (request_info &&
request_info->GetResourceType() == content::RESOURCE_TYPE_MAIN_FRAME) {
@@ -134,8 +147,19 @@ void ResourcePrefetchPredictorObserver::OnRequestRedirected(
}
}
+void ResourcePrefetchPredictorObserver::OnRequestRedirectedOnUIThread(
+ std::unique_ptr<URLRequestSummary> summary,
+ const content::ResourceRequestInfo::WebContentsGetter& web_contents_getter)
+ const {
+ DCHECK_CURRENTLY_ON(BrowserThread::UI);
+ RetrieveNavigationID(summary->navigation_id, web_contents_getter);
+ predictor_->RecordURLRedirect(*summary);
+}
+
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 +173,20 @@ void ResourcePrefetchPredictorObserver::OnResponseStarted(
if (!ResourcePrefetchPredictor::ShouldRecordResponse(request))
return;
- ResourcePrefetchPredictor::URLRequestSummary summary;
+ auto summary = base::MakeUnique<URLRequestSummary>();
+ summary->navigation_id.main_frame_url = request->first_party_for_cookies();
+ summary->navigation_id.creation_time = request->creation_time();
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));
ReportRequestStats(REQUEST_STATS_TOTAL_PROCESSED_RESPONSES);
if (request_info &&
@@ -169,4 +195,26 @@ void ResourcePrefetchPredictorObserver::OnResponseStarted(
}
}
+void ResourcePrefetchPredictorObserver::OnResponseStartedOnUIThread(
+ std::unique_ptr<URLRequestSummary> summary,
+ const content::ResourceRequestInfo::WebContentsGetter&
+ web_contents_getter) const {
+ DCHECK_CURRENTLY_ON(BrowserThread::UI);
+ RetrieveNavigationID(summary->navigation_id, web_contents_getter);
+ predictor_->RecordURLResponse(*summary);
+}
+
+void ResourcePrefetchPredictorObserver::RetrieveNavigationID(
Benoit L 2016/12/05 13:25:56 Actually, considering the remark below, this funct
+ predictors::NavigationID& navigation_id,
alexilin 2016/12/05 13:20:00 Pass an object by pointer if you want to change it
Benoit L 2016/12/05 13:25:56 We don't use non-const references in Chrome. See h
+ const content::ResourceRequestInfo::WebContentsGetter&
+ web_contents_getter) const {
+ DCHECK_CURRENTLY_ON(BrowserThread::UI);
+ content::WebContents* web_contents = web_contents_getter.Run();
+ DCHECK(web_contents);
alexilin 2016/12/05 13:20:00 Based on comment to GetWebContentsGetterForRequest
Benoit L 2016/12/05 13:25:56 A DCHECK() is not correct here, as the returned We
+ navigation_id.render_process_id =
alexilin 2016/12/05 13:20:00 nit: I'm wondering if we can eliminate the mess wi
Benoit L 2016/12/05 13:25:56 The partial initialization of NavigationID here is
+ web_contents->GetRenderProcessHost()->GetID();
+ navigation_id.render_frame_id =
+ web_contents->GetMainFrame()->GetRoutingID();
+}
+
} // namespace chrome_browser_net

Powered by Google App Engine
This is Rietveld 408576698