diff options
author | darin@chromium.org <darin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-02-17 20:03:07 +0000 |
---|---|---|
committer | darin@chromium.org <darin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-02-17 20:03:07 +0000 |
commit | f4dda48296102f4401ecf82c6dbd91c706cb6ecd (patch) | |
tree | b5a49a20431706013a8f82edf73670b00593d7ad /chrome/browser/prerender | |
parent | 4c1170fc4c576c74bf9dfaa400cdfdfb255f65bb (diff) | |
download | chromium_src-f4dda48296102f4401ecf82c6dbd91c706cb6ecd.zip chromium_src-f4dda48296102f4401ecf82c6dbd91c706cb6ecd.tar.gz chromium_src-f4dda48296102f4401ecf82c6dbd91c706cb6ecd.tar.bz2 |
Eliminate ResourceDispatcherHostDelegate::ShouldDeferStart in favor of ResourceThrottle.
Also, eliminates direct use of ResourceDispatcherHost::{CancelPendingRequest,StartDeferredRequest} in prerender_tracker.cc.
Review URL: http://codereview.chromium.org/9384028
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@122560 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/prerender')
-rw-r--r-- | chrome/browser/prerender/prerender_resource_throttle.cc | 42 | ||||
-rw-r--r-- | chrome/browser/prerender/prerender_resource_throttle.h | 49 | ||||
-rw-r--r-- | chrome/browser/prerender/prerender_tracker.cc | 30 | ||||
-rw-r--r-- | chrome/browser/prerender/prerender_tracker.h | 9 |
4 files changed, 104 insertions, 26 deletions
diff --git a/chrome/browser/prerender/prerender_resource_throttle.cc b/chrome/browser/prerender/prerender_resource_throttle.cc new file mode 100644 index 0000000..df4be12 --- /dev/null +++ b/chrome/browser/prerender/prerender_resource_throttle.cc @@ -0,0 +1,42 @@ +// 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/prerender/prerender_resource_throttle.h" + +#include "base/bind.h" +#include "chrome/browser/prerender/prerender_tracker.h" +#include "content/public/browser/resource_throttle_controller.h" +#include "net/url_request/url_request.h" + +namespace prerender { + +PrerenderResourceThrottle::PrerenderResourceThrottle( + PrerenderTracker* prerender_tracker, + const net::URLRequest* request, + int child_id, + int route_id) + : prerender_tracker_(prerender_tracker), + request_(request), + child_id_(child_id), + route_id_(route_id) { +} + +PrerenderResourceThrottle::~PrerenderResourceThrottle() { +} + +void PrerenderResourceThrottle::WillStartRequest(bool* defer) { + *defer = prerender_tracker_->PotentiallyDelayRequestOnIOThread( + request_->url(), child_id_, route_id_, + base::Bind(&PrerenderResourceThrottle::ContinueRequest, AsWeakPtr())); +} + +void PrerenderResourceThrottle::ContinueRequest(bool proceed) { + if (proceed) { + controller()->Resume(); + } else { + controller()->Cancel(); + } +} + +} // namespace prerender diff --git a/chrome/browser/prerender/prerender_resource_throttle.h b/chrome/browser/prerender/prerender_resource_throttle.h new file mode 100644 index 0000000..e6fc3ae --- /dev/null +++ b/chrome/browser/prerender/prerender_resource_throttle.h @@ -0,0 +1,49 @@ +// 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. + +#ifndef CHROME_BROWSER_PRERENDER_PRERENDER_RESOURCE_THROTTLE_H_ +#define CHROME_BROWSER_PRERENDER_PRERENDER_RESOURCE_THROTTLE_H_ +#pragma once + +#include "base/basictypes.h" +#include "base/compiler_specific.h" +#include "base/memory/weak_ptr.h" +#include "content/public/browser/resource_throttle.h" + +namespace net { +class URLRequest; +} + +namespace prerender { +class PrerenderTracker; + +class PrerenderResourceThrottle + : public content::ResourceThrottle, + public base::SupportsWeakPtr<PrerenderResourceThrottle> { + public: + PrerenderResourceThrottle(PrerenderTracker* prerender_tracker, + const net::URLRequest* request, + int child_id, + int route_id); + + // content::ResourceThrottle implementation: + virtual void WillStartRequest(bool* defer) OVERRIDE; + + private: + virtual ~PrerenderResourceThrottle(); + + void ContinueRequest(bool proceed); + + PrerenderTracker* prerender_tracker_; + const net::URLRequest* request_; + int child_id_; + int route_id_; + int request_id_; + + DISALLOW_COPY_AND_ASSIGN(PrerenderResourceThrottle); +}; + +} // namespace prerender + +#endif // CHROME_BROWSER_PRERENDER_PRERENDER_RESOURCE_THROTTLE_H_ diff --git a/chrome/browser/prerender/prerender_tracker.cc b/chrome/browser/prerender/prerender_tracker.cc index b82be79..8672762 100644 --- a/chrome/browser/prerender/prerender_tracker.cc +++ b/chrome/browser/prerender/prerender_tracker.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// 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. @@ -20,16 +20,6 @@ namespace prerender { namespace { -void CancelDeferredRequestOnIOThread(int child_id, int request_id) { - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); - ResourceDispatcherHost::Get()->CancelRequest(child_id, request_id, false); -} - -void StartDeferredRequestOnIOThread(int child_id, int request_id) { - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); - ResourceDispatcherHost::Get()->StartDeferredRequest(child_id, request_id); -} - bool ShouldCancelRequest( int child_id, int route_id) { @@ -53,17 +43,11 @@ bool ShouldCancelRequest( void HandleDelayedRequestOnUIThread( int child_id, int route_id, - int request_id) { + const PrerenderTracker::CheckURLCallback& callback) { DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); - if (ShouldCancelRequest(child_id, route_id)) { - BrowserThread::PostTask( - BrowserThread::IO, FROM_HERE, - base::Bind(&CancelDeferredRequestOnIOThread, child_id, request_id)); - } else { - BrowserThread::PostTask( - BrowserThread::IO, FROM_HERE, - base::Bind(&StartDeferredRequestOnIOThread, child_id, request_id)); - } + bool should_cancel = ShouldCancelRequest(child_id, route_id); + BrowserThread::PostTask( + BrowserThread::IO, FROM_HERE, base::Bind(callback, !should_cancel)); } void DestroyPrerenderForRenderViewOnUI( @@ -189,7 +173,7 @@ bool PrerenderTracker::PotentiallyDelayRequestOnIOThread( const GURL& gurl, int process_id, int route_id, - int request_id) { + const CheckURLCallback& callback) { DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); if (!url_counter_.MatchesURL(gurl)) return false; @@ -197,7 +181,7 @@ bool PrerenderTracker::PotentiallyDelayRequestOnIOThread( BrowserThread::UI, FROM_HERE, base::Bind(&HandleDelayedRequestOnUIThread, process_id, route_id, - request_id)); + callback)); return true; } diff --git a/chrome/browser/prerender/prerender_tracker.h b/chrome/browser/prerender/prerender_tracker.h index 5a3e138..56d5dff 100644 --- a/chrome/browser/prerender/prerender_tracker.h +++ b/chrome/browser/prerender/prerender_tracker.h @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// 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. @@ -47,6 +47,8 @@ class URLCounter : public base::NonThreadSafe { // and can be modified on any thread. class PrerenderTracker { public: + typedef base::Callback<void(bool /* proceed */)> CheckURLCallback; + PrerenderTracker(); ~PrerenderTracker(); @@ -78,12 +80,13 @@ class PrerenderTracker { FinalStatus final_status); // Potentially delay a resource request on the IO thread to prevent a double - // get. + // get. When this method returns true, the callback will be run later to + // indicate if the request should be allowed or canceled. bool PotentiallyDelayRequestOnIOThread( const GURL& gurl, int child_id, int route_id, - int request_id); + const CheckURLCallback& callback); void AddPrerenderURLOnUIThread(const GURL& url); void RemovePrerenderURLsOnUIThread(const std::vector<GURL>& urls); |