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

Unified 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: Addressing dominich's and willchan's comments. Created 8 years, 7 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 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
new file mode 100644
index 0000000000000000000000000000000000000000..c9e5ac8b81836129f33a0cd79576c4eb6fd122b0
--- /dev/null
+++ b/chrome/browser/net/resource_prefetch_predictor_observer.cc
@@ -0,0 +1,66 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/net/resource_prefetch_predictor_observer.h"
+
+#include "content/public/browser/browser_thread.h"
+#include "net/url_request/url_request.h"
+
+using content::BrowserThread;
+using predictors::ResourcePrefetchPredictor;
+
+namespace chrome_browser_net {
+
+ResourcePrefetchPredictorObserver::ResourcePrefetchPredictorObserver(
+ scoped_refptr<ResourcePrefetchPredictor> predictor)
+ : predictor_(predictor) {
+ DCHECK(predictor_);
+}
+
+ResourcePrefetchPredictorObserver::~ResourcePrefetchPredictorObserver() {
+}
+
+void ResourcePrefetchPredictorObserver::OnBeforeURLRequest(
+ net::URLRequest* request) {
+ CHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+
+ if (ResourcePrefetchPredictor::ShouldRecordRequest(request))
+ CallPredictorOnUIThread(request, false,
+ &ResourcePrefetchPredictor::RecordURLRequest);
+}
+
+void ResourcePrefetchPredictorObserver::OnBeforeRedirect(
+ net::URLRequest* request) {
+ CHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+
+ if (ResourcePrefetchPredictor::ShouldRecordRedirect(request))
+ CallPredictorOnUIThread(request, false,
+ &ResourcePrefetchPredictor::RecordUrlRedirect);
+}
+
+void ResourcePrefetchPredictorObserver::OnResponseStarted(
+ net::URLRequest* request) {
+ CHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+
+ if (ResourcePrefetchPredictor::ShouldRecordResponse(request))
+ CallPredictorOnUIThread(request, true,
+ &ResourcePrefetchPredictor::RecordUrlResponse);
+}
+
+void ResourcePrefetchPredictorObserver::CallPredictorOnUIThread(
+ net::URLRequest* request,
+ bool is_response,
+ void(predictors::ResourcePrefetchPredictor::*recordFunction)
willchan no longer on Chromium 2012/05/24 22:28:52 recordFunction is not Chromium/Google naming style
Shishir 2012/05/30 01:07:51 Done.
+ (const predictors::ResourcePrefetchPredictor::URLRequestSummary&)) const {
+ ResourcePrefetchPredictor::URLRequestSummary summary;
+ if (!summary.InitFromURLRequest(request, is_response))
+ return;
+
+ CHECK(predictor_.get());
+ BrowserThread::PostTask(BrowserThread::UI,
willchan no longer on Chromium 2012/05/24 22:28:52 How is this safe if the Profile goes away? I know
Shishir 2012/05/30 01:07:51 Wont matter now since this is a weak ptr.
+ FROM_HERE,
+ base::Bind(recordFunction, predictor_, summary));
+}
+
+} // namespace chrome_browser_net

Powered by Google App Engine
This is Rietveld 408576698