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_UI_WEBUI_SIGNIN_INLINE_LOGIN_HANDLER_IMPL_H_
6#define CHROME_BROWSER_UI_WEBUI_SIGNIN_INLINE_LOGIN_HANDLER_IMPL_H_
7
8#include <string>
9
10#include "base/memory/scoped_ptr.h"
11#include "base/memory/weak_ptr.h"
12#include "chrome/browser/ui/sync/one_click_signin_sync_starter.h"
13#include "chrome/browser/ui/webui/signin/inline_login_handler.h"
14#include "content/public/browser/web_contents_delegate.h"
15
16class GaiaAuthFetcher;
17
18// Implementation for the inline login WebUI handler on desktop Chrome. Once
19// CrOS migrates to the same webview approach as desktop Chrome, much of the
20// code in this class should move to its base class |InlineLoginHandler|.
21class InlineLoginHandlerImpl : public InlineLoginHandler,
22                               public content::WebContentsDelegate,
23                               public content::WebContentsObserver {
24 public:
25  InlineLoginHandlerImpl();
26  virtual ~InlineLoginHandlerImpl();
27
28  using InlineLoginHandler::web_ui;
29
30  base::WeakPtr<InlineLoginHandlerImpl> GetWeakPtr() {
31    return weak_factory_.GetWeakPtr();
32  }
33
34  Browser* GetDesktopBrowser();
35  void SyncStarterCallback(OneClickSigninSyncStarter::SyncSetupResult result);
36  // Closes the current tab and shows the account management view of the avatar
37  // bubble if |show_account_management| is true.
38  void CloseTab(bool show_account_management);
39  void HandleLoginError(const std::string& error_msg);
40
41 private:
42  // InlineLoginHandler overrides:
43  virtual void SetExtraInitParams(base::DictionaryValue& params) OVERRIDE;
44  virtual void CompleteLogin(const base::ListValue* args) OVERRIDE;
45
46  // Overridden from content::WebContentsDelegate.
47  virtual bool HandleContextMenu(
48      const content::ContextMenuParams& params) OVERRIDE;
49
50  // Overridden from content::WebContentsObserver overrides.
51  virtual void DidCommitProvisionalLoadForFrame(
52      content::RenderFrameHost* render_frame_host,
53      const GURL& url,
54      ui::PageTransition transition_type) OVERRIDE;
55
56  // True if the user has navigated to untrusted domains during the signin
57  // process.
58  bool confirm_untrusted_signin_;
59
60  base::WeakPtrFactory<InlineLoginHandlerImpl> weak_factory_;
61
62  DISALLOW_COPY_AND_ASSIGN(InlineLoginHandlerImpl);
63};
64
65#endif  // CHROME_BROWSER_UI_WEBUI_SIGNIN_INLINE_LOGIN_HANDLER_IMPL_H_
66