Chromium Code Reviews| 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 |