Home | History | Annotate | Download | only in offline
      1 // Copyright (c) 2012 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_CHROMEOS_OFFLINE_OFFLINE_LOAD_PAGE_H_
      6 #define CHROME_BROWSER_CHROMEOS_OFFLINE_OFFLINE_LOAD_PAGE_H_
      7 
      8 #include <string>
      9 
     10 #include "base/callback.h"
     11 #include "base/compiler_specific.h"
     12 #include "content/public/browser/interstitial_page_delegate.h"
     13 #include "net/base/network_change_notifier.h"
     14 #include "url/gurl.h"
     15 
     16 namespace base {
     17 class DictionaryValue;
     18 }
     19 
     20 namespace content {
     21 class InterstitialPage;
     22 class WebContents;
     23 }
     24 
     25 namespace extensions {
     26 class Extension;
     27 }
     28 
     29 namespace chromeos {
     30 
     31 // OfflineLoadPage class shows the interstitial page that is shown
     32 // when no network is available and hides when some network (either
     33 // one of wifi, 3g or ethernet) becomes available.
     34 // It deletes itself when the interstitial page is closed.
     35 class OfflineLoadPage
     36     : public content::InterstitialPageDelegate,
     37       public net::NetworkChangeNotifier::ConnectionTypeObserver {
     38  public:
     39   // Passed a boolean indicating whether or not it is OK to proceed with the
     40   // page load.
     41   typedef base::Callback<void(bool /*proceed*/)> CompletionCallback;
     42 
     43   // Create a offline load page for the |web_contents|.  The callback will be
     44   // run on the IO thread.
     45   OfflineLoadPage(content::WebContents* web_contents, const GURL& url,
     46                   const CompletionCallback& callback);
     47 
     48   void Show();
     49 
     50  protected:
     51   virtual ~OfflineLoadPage();
     52 
     53   // Overridden by tests.
     54   virtual void NotifyBlockingPageComplete(bool proceed);
     55 
     56  private:
     57   friend class TestOfflineLoadPage;
     58 
     59   // InterstitialPageDelegate implementation.
     60   virtual std::string GetHTMLContents() OVERRIDE;
     61   virtual void CommandReceived(const std::string& command) OVERRIDE;
     62   virtual void OverrideRendererPrefs(
     63       content::RendererPreferences* prefs) OVERRIDE;
     64   virtual void OnProceed() OVERRIDE;
     65   virtual void OnDontProceed() OVERRIDE;
     66 
     67   // net::NetworkChangeNotifier::ConnectionTypeObserver overrides.
     68   virtual void OnConnectionTypeChanged(
     69       net::NetworkChangeNotifier::ConnectionType type) OVERRIDE;
     70 
     71   // Retrieves template strings of the offline page for app and
     72   // normal site.
     73   void GetAppOfflineStrings(const extensions::Extension* app,
     74                             base::DictionaryValue* strings) const;
     75   void GetNormalOfflineStrings(base::DictionaryValue* strings) const;
     76 
     77   CompletionCallback callback_;
     78 
     79   // True if the proceed is chosen.
     80   bool proceeded_;
     81 
     82   content::WebContents* web_contents_;
     83   GURL url_;
     84   content::InterstitialPage* interstitial_page_;  // Owns us.
     85 
     86   DISALLOW_COPY_AND_ASSIGN(OfflineLoadPage);
     87 };
     88 
     89 }  // namespace chromeos
     90 
     91 #endif  // CHROME_BROWSER_CHROMEOS_OFFLINE_OFFLINE_LOAD_PAGE_H_
     92