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..57ce4871136337ed3eb89d6a4795b9e36cd65565 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> |
ahemery
2016/12/06 14:31:11
For std::move
|
+#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/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" |
using content::BrowserThread; |
using predictors::ResourcePrefetchPredictor; |
+using URLRequestSummary = |
ahemery
2016/12/06 14:31:11
Added in .cc file because removed from .h
|
+ predictors::ResourcePrefetchPredictor::URLRequestSummary; |
+ |
namespace { |
@@ -69,8 +77,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 +87,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(), |
ahemery
2016/12/06 14:31:11
The new parameters that get passed all the way to
|
+ 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 +119,21 @@ 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; |
ahemery
2016/12/06 14:31:11
Moved from above, no modification
|
- 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 +142,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 +158,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 +179,62 @@ 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, |
ahemery
2016/12/06 14:31:11
Now checking for failure. Returning without any fu
|
+ 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); |
+} |
+ |
+bool ResourcePrefetchPredictorObserver::TryToFillNavigationID( |
ahemery
2016/12/06 14:31:11
Modified name to make it clearer that it can fail
|
+ predictors::NavigationID* navigation_id, |
+ const content::ResourceRequestInfo::WebContentsGetter& |
+ web_contents_getter, |
+ const GURL& main_frame_url, |
+ const base::TimeTicks& creation_time) const { |
+ DCHECK_CURRENTLY_ON(BrowserThread::UI); |
+ content::WebContents* web_contents = web_contents_getter.Run(); |
+ if (!web_contents) |
+ return false; |
+ *navigation_id = predictors::NavigationID(web_contents, |
ahemery
2016/12/06 14:31:11
Using a direct constructor here
|
+ main_frame_url, |
+ creation_time); |
+ return true; |
+} |
+ |
} // namespace chrome_browser_net |