1 // Copyright (c) 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_CHROMEOS_LOGIN_MERGE_SESSION_LOAD_PAGE_H_ 6 #define CHROME_BROWSER_CHROMEOS_LOGIN_MERGE_SESSION_LOAD_PAGE_H_ 7 8 #include <string> 9 10 #include "base/callback.h" 11 #include "base/compiler_specific.h" 12 #include "chrome/browser/chromeos/login/user_manager.h" 13 #include "content/public/browser/interstitial_page_delegate.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 // MergeSessionLoadPage class shows the interstitial page that is shown 32 // while we are trying to restore session containing tabs with Google properties 33 // during the process of exchanging OAuth2 refresh token for user cookies. 34 // It deletes itself when the interstitial page is closed. 35 class MergeSessionLoadPage 36 : public content::InterstitialPageDelegate, 37 public UserManager::Observer { 38 public: 39 // Passed a boolean indicating whether or not it is OK to proceed with the 40 // page load. 41 typedef base::Closure CompletionCallback; 42 43 // Create a merge session load delay page for the |web_contents|. 44 // The |callback| will be run on the IO thread. 45 MergeSessionLoadPage(content::WebContents* web_contents, 46 const GURL& url, 47 const CompletionCallback& callback); 48 49 void Show(); 50 51 protected: 52 virtual ~MergeSessionLoadPage(); 53 54 private: 55 friend class TestMergeSessionLoadPage; 56 57 // InterstitialPageDelegate implementation. 58 virtual std::string GetHTMLContents() OVERRIDE; 59 virtual void CommandReceived(const std::string& command) OVERRIDE; 60 virtual void OverrideRendererPrefs( 61 content::RendererPreferences* prefs) OVERRIDE; 62 virtual void OnProceed() OVERRIDE; 63 virtual void OnDontProceed() OVERRIDE; 64 65 // UserManager::Observer overrides. 66 virtual void MergeSessionStateChanged( 67 UserManager::MergeSessionState state) OVERRIDE; 68 69 void NotifyBlockingPageComplete(); 70 71 CompletionCallback callback_; 72 73 // True if the proceed is chosen. 74 bool proceeded_; 75 76 content::WebContents* web_contents_; 77 GURL url_; 78 content::InterstitialPage* interstitial_page_; // Owns us. 79 80 DISALLOW_COPY_AND_ASSIGN(MergeSessionLoadPage); 81 }; 82 83 } // namespace chromeos 84 85 #endif // CHROME_BROWSER_CHROMEOS_LOGIN_MERGE_SESSION_LOAD_PAGE_H_ 86