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 |