1// Copyright 2014 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_SIGNIN_MERGE_SESSION_LOAD_PAGE_H_
6#define CHROME_BROWSER_CHROMEOS_LOGIN_SIGNIN_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/signin/merge_session_throttle.h"
13#include "chrome/browser/chromeos/login/signin/oauth2_login_manager.h"
14#include "content/public/browser/interstitial_page_delegate.h"
15#include "url/gurl.h"
16
17namespace base {
18class DictionaryValue;
19}
20
21namespace content {
22class InterstitialPage;
23class WebContents;
24}
25
26namespace extensions {
27class Extension;
28}
29
30namespace chromeos {
31
32// MergeSessionLoadPage class shows the interstitial page that is shown
33// while we are trying to restore session containing tabs with Google properties
34// during the process of exchanging OAuth2 refresh token for user cookies.
35// It deletes itself when the interstitial page is closed.
36class MergeSessionLoadPage
37    : public content::InterstitialPageDelegate,
38      public OAuth2LoginManager::Observer {
39 public:
40  // Create a merge session load delay page for the |web_contents|.
41  // The |callback| will be run on the IO thread.
42  MergeSessionLoadPage(
43      content::WebContents* web_contents,
44      const GURL& url,
45      const MergeSessionThrottle::CompletionCallback& callback);
46
47  void Show();
48
49 protected:
50  virtual ~MergeSessionLoadPage();
51
52 private:
53  friend class TestMergeSessionLoadPage;
54
55  // InterstitialPageDelegate implementation.
56  virtual std::string GetHTMLContents() OVERRIDE;
57  virtual void CommandReceived(const std::string& command) OVERRIDE;
58  virtual void OverrideRendererPrefs(
59      content::RendererPreferences* prefs) OVERRIDE;
60  virtual void OnProceed() OVERRIDE;
61  virtual void OnDontProceed() OVERRIDE;
62
63  // OAuth2LoginManager::Observer overrides.
64  virtual void OnSessionRestoreStateChanged(
65      Profile* user_profile,
66      OAuth2LoginManager::SessionRestoreState state) OVERRIDE;
67
68  void NotifyBlockingPageComplete();
69
70  // Helper function to get OAuth2LoginManager out of |web_contents_|.
71  OAuth2LoginManager* GetOAuth2LoginManager();
72
73  MergeSessionThrottle::CompletionCallback callback_;
74
75  // True if the proceed is chosen.
76  bool proceeded_;
77
78  content::WebContents* web_contents_;
79  GURL url_;
80  content::InterstitialPage* interstitial_page_;  // Owns us.
81
82  DISALLOW_COPY_AND_ASSIGN(MergeSessionLoadPage);
83};
84
85}  // namespace chromeos
86
87#endif  // CHROME_BROWSER_CHROMEOS_LOGIN_SIGNIN_MERGE_SESSION_LOAD_PAGE_H_
88