Home | History | Annotate | Download | only in renderer_host
      1 // Copyright (c) 2011 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_RENDERER_HOST_OFFLINE_RESOURCE_HANDLER_H_
      6 #define CHROME_BROWSER_RENDERER_HOST_OFFLINE_RESOURCE_HANDLER_H_
      7 #pragma once
      8 
      9 #include <string>
     10 
     11 #include "base/memory/ref_counted.h"
     12 #include "chrome/browser/chromeos/offline/offline_load_page.h"
     13 #include "content/browser/renderer_host/resource_handler.h"
     14 #include "net/base/completion_callback.h"
     15 
     16 class MessageLoop;
     17 class ResourceDispatcherHost;
     18 
     19 namespace net {
     20 class URLRequest;
     21 }  // namespace net
     22 
     23 // Used to show an offline interstitial page when the network is not available.
     24 class OfflineResourceHandler : public ResourceHandler,
     25                                public chromeos::OfflineLoadPage::Delegate {
     26  public:
     27   OfflineResourceHandler(ResourceHandler* handler,
     28                          int host_id,
     29                          int render_view_id,
     30                          ResourceDispatcherHost* rdh,
     31                          net::URLRequest* request);
     32   virtual ~OfflineResourceHandler();
     33 
     34   // ResourceHandler implementation:
     35   virtual bool OnUploadProgress(int request_id, uint64 position, uint64 size);
     36   virtual bool OnRequestRedirected(int request_id, const GURL& new_url,
     37                            ResourceResponse* response, bool* defer);
     38   virtual bool OnResponseStarted(int request_id, ResourceResponse* response);
     39   virtual bool OnWillStart(int request_id, const GURL& url, bool* defer);
     40   virtual bool OnWillRead(int request_id, net::IOBuffer** buf, int* buf_size,
     41                           int min_size);
     42   virtual bool OnReadCompleted(int request_id, int* bytes_read);
     43   virtual bool OnResponseCompleted(int request_id,
     44                                    const net::URLRequestStatus& status,
     45                                    const std::string& security_info);
     46   virtual void OnRequestClosed();
     47 
     48   // chromeos::OfflineLoadPage::Delegate
     49   virtual void OnBlockingPageComplete(bool proceed);
     50 
     51  private:
     52   // Erease the state assocaited with a deferred load request.
     53   void ClearRequestInfo();
     54   bool IsRemote(const GURL& url) const;
     55 
     56   // Resume the deferred load request.
     57   void Resume();
     58 
     59   // Tells if chrome should show the offline page.
     60   bool ShouldShowOfflinePage(const GURL& url) const;
     61 
     62   // Shows the offline interstitinal page in UI thread.
     63   void ShowOfflinePage();
     64 
     65   // A callback to tell if an appcache exists.
     66   void OnCanHandleOfflineComplete(int rv);
     67 
     68   scoped_refptr<ResourceHandler> next_handler_;
     69 
     70   int process_host_id_;
     71   int render_view_id_;
     72   ResourceDispatcherHost* rdh_;
     73   net::URLRequest* request_;
     74 
     75   // The state for deferred load quest.
     76   int deferred_request_id_;
     77   GURL deferred_url_;
     78 
     79   scoped_refptr<net::CancelableCompletionCallback<OfflineResourceHandler> >
     80       appcache_completion_callback_;
     81 
     82   DISALLOW_COPY_AND_ASSIGN(OfflineResourceHandler);
     83 };
     84 
     85 #endif  // CHROME_BROWSER_RENDERER_HOST_OFFLINE_RESOURCE_HANDLER_H_
     86