1 // Copyright 2013 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 #ifndef CHROME_BROWSER_PRERENDER_PRERENDER_PENDING_SWAP_THROTTLE_H_ 6 #define CHROME_BROWSER_PRERENDER_PRERENDER_PENDING_SWAP_THROTTLE_H_ 7 8 #include "base/basictypes.h" 9 #include "base/compiler_specific.h" 10 #include "base/memory/weak_ptr.h" 11 #include "content/public/browser/resource_throttle.h" 12 13 namespace net { 14 class URLRequest; 15 } 16 17 namespace prerender { 18 19 class PrerenderTracker; 20 21 // This class implements policy on main frame navigations for prerenders 22 // which we would like to swap, but are pending session storage namespace 23 // merges. If the merge failed, we will release the throttle. If the merge 24 // succeeded, we will swap the prerender, making the underlying request 25 // obsolete. 26 class PrerenderPendingSwapThrottle 27 : public content::ResourceThrottle, 28 public base::SupportsWeakPtr<PrerenderPendingSwapThrottle> { 29 public: 30 PrerenderPendingSwapThrottle(net::URLRequest* request, 31 PrerenderTracker* tracker); 32 33 // content::ResourceThrottle implementation: 34 virtual void WillStartRequest(bool* defer) OVERRIDE; 35 36 virtual const char* GetNameForLogging() const OVERRIDE; 37 38 // Called by the PrerenderTracker when the swap failed. 39 // May only be called if currently throttling the resource. 40 void Resume(); 41 42 // Called by the PrerenderTracker when the swap succeeded. 43 // May only be called if currently throttling the resource. 44 void Cancel(); 45 46 private: 47 net::URLRequest* request_; 48 PrerenderTracker* tracker_; 49 bool throttled_; 50 51 DISALLOW_COPY_AND_ASSIGN(PrerenderPendingSwapThrottle); 52 }; 53 54 } // namespace prerender 55 56 #endif // CHROME_BROWSER_PRERENDER_PRERENDER_PENDING_SWAP_THROTTLE_H_ 57