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

Side by Side Diff: chrome/browser/net/resource_prefetch_predictor_observer.cc

Issue 10416002: Seculative resource prefetching for URLs CL. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Resolving conflicts. Created 8 years, 5 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/browser/net/resource_prefetch_predictor_observer.h"
6
7 #include <string>
8
9 #include "content/public/browser/browser_thread.h"
10 #include "content/public/browser/resource_request_info.h"
11 #include "net/url_request/url_request.h"
12
13 using content::BrowserThread;
14 using predictors::ResourcePrefetchPredictor;
15
16 namespace {
17
18 bool SummarizeResponse(net::URLRequest* request,
19 ResourcePrefetchPredictor::URLRequestSummary* summary) {
20 const content::ResourceRequestInfo* info =
21 content::ResourceRequestInfo::ForRequest(request);
22 if (!info) {
23 LOG(ERROR) << "No ResourceRequestInfo in request";
24 return false;
25 }
26
27 int render_process_id, render_view_id;
28 if (!info->GetAssociatedRenderView(&render_process_id, &render_view_id)) {
29 LOG(ERROR) << "Could not get RenderViewId from request info.";
30 return false;
31 }
32
33 summary->navigation_id.render_process_id = render_process_id;
34 summary->navigation_id.render_view_id = render_view_id;
35 summary->navigation_id.main_frame_url = request->first_party_for_cookies();
36 summary->navigation_id.creation_time = request->creation_time();
37 summary->resource_url = request->original_url();
38 summary->resource_type = info->GetResourceType();
39 request->GetMimeType(&summary->mime_type);
40 summary->was_cached = request->was_cached();
41
42 // We want to rely on the mime_type to determine the resource type since we
43 // dont want types such as PREFETCH, SUB_RESOURCE, etc.
44 summary->resource_type =
45 ResourcePrefetchPredictor::GetResourceTypeFromMimeType(
46 summary->mime_type,
47 summary->resource_type);
48 return true;
49 }
50
51 } // namespace
52
53 namespace chrome_browser_net {
54
55 ResourcePrefetchPredictorObserver::ResourcePrefetchPredictorObserver(
56 ResourcePrefetchPredictor* predictor)
57 : predictor_(predictor->AsWeakPtr()) {
58 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
59 }
60
61 ResourcePrefetchPredictorObserver::~ResourcePrefetchPredictorObserver() {
62 CHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
63 }
64
65 void ResourcePrefetchPredictorObserver::OnRequestStarted(
66 net::URLRequest* request,
67 ResourceType::Type resource_type,
68 int child_id,
69 int route_id) {
70 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
71
72 if (!ResourcePrefetchPredictor::ShouldRecordRequest(request, resource_type))
73 return;
74
75 ResourcePrefetchPredictor::URLRequestSummary summary;
76 summary.navigation_id.render_process_id = child_id;
77 summary.navigation_id.render_view_id = route_id;
78 summary.navigation_id.main_frame_url = request->first_party_for_cookies();
79 summary.resource_url = request->original_url();
80 summary.resource_type = resource_type;
81
82 BrowserThread::PostTask(
83 BrowserThread::UI,
84 FROM_HERE,
85 base::Bind(&ResourcePrefetchPredictor::RecordURLRequest,
86 predictor_,
87 summary));
88 }
89
90 void ResourcePrefetchPredictorObserver::OnRequestRedirected(
91 net::URLRequest* request) {
92 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
93
94 if (!ResourcePrefetchPredictor::ShouldRecordRedirect(request))
95 return;
96 ResourcePrefetchPredictor::URLRequestSummary summary;
97 if (!SummarizeResponse(request, &summary))
98 return;
99
100 BrowserThread::PostTask(
101 BrowserThread::UI,
102 FROM_HERE,
103 base::Bind(&ResourcePrefetchPredictor::RecordUrlRedirect,
104 predictor_,
105 summary));
106 }
107
108 void ResourcePrefetchPredictorObserver::OnResponseStarted(
109 net::URLRequest* request) {
110 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
111
112 if (!ResourcePrefetchPredictor::ShouldRecordResponse(request))
113 return;
114 ResourcePrefetchPredictor::URLRequestSummary summary;
115 if (!SummarizeResponse(request, &summary))
116 return;
117
118 BrowserThread::PostTask(
119 BrowserThread::UI,
120 FROM_HERE,
121 base::Bind(&ResourcePrefetchPredictor::RecordUrlResponse,
122 predictor_,
123 summary));
124 }
125
126 } // namespace chrome_browser_net
OLDNEW
« no previous file with comments | « chrome/browser/net/resource_prefetch_predictor_observer.h ('k') | chrome/browser/predictors/predictor_database.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698