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 |