Home | History | Annotate | Download | only in prerender
      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