1cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#ifndef CHROME_BROWSER_CHROMEOS_LOGIN_UI_WEBUI_LOGIN_VIEW_H_
6cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#define CHROME_BROWSER_CHROMEOS_LOGIN_UI_WEBUI_LOGIN_VIEW_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <map>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/memory/scoped_ptr.h"
12868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/observer_list.h"
13a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "chrome/browser/extensions/signin/scoped_gaia_auth_extension.h"
14868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "chrome/browser/ui/chrome_web_modal_dialog_manager_delegate.h"
15116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/web_modal/popup_manager.h"
16868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "components/web_modal/web_contents_modal_dialog_host.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_observer.h"
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_registrar.h"
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents_delegate.h"
208bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "content/public/browser/web_contents_observer.h"
21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ui/views/controls/webview/unhandled_keyboard_event_handler.h"
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/widget/widget.h"
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/widget/widget_delegate.h"
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class GURL;
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content {
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebUI;
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace views {
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class View;
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebView;
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Widget;
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chromeos {
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// View used to render a WebUI supporting Widget. This widget is used for the
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// WebUI based start up and lock screens. It contains a WebView.
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class WebUILoginView : public views::View,
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       public content::WebContentsDelegate,
438bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)                       public content::WebContentsObserver,
44868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                       public content::NotificationObserver,
45868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                       public ChromeWebModalDialogManagerDelegate,
46868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                       public web_modal::WebContentsModalDialogHost {
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
48116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  class FrameObserver {
49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch   public:
50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    // Called when a frame failed to load.
51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    virtual void OnFrameError(const std::string& frame_unique_name) = 0;
52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  };
53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Internal class name.
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static const char kViewClassName[];
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  WebUILoginView();
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~WebUILoginView();
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Initializes the webui login view.
613551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  virtual void Init();
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // Overridden from views::View:
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool AcceleratorPressed(
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const ui::Accelerator& accelerator) OVERRIDE;
66b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  virtual const char* GetClassName() const OVERRIDE;
67f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  virtual void RequestFocus() OVERRIDE;
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
69868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // Overridden from ChromeWebModalDialogManagerDelegate:
70868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  virtual web_modal::WebContentsModalDialogHost*
71868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      GetWebContentsModalDialogHost() OVERRIDE;
72868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
73868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // Overridden from web_modal::WebContentsModalDialogHost:
74868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  virtual gfx::NativeView GetHostView() const OVERRIDE;
75868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  virtual gfx::Point GetDialogPosition(const gfx::Size& size) OVERRIDE;
7658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  virtual gfx::Size GetMaximumDialogSize() OVERRIDE;
77868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  virtual void AddObserver(
784e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      web_modal::ModalDialogHostObserver* observer) OVERRIDE;
79868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  virtual void RemoveObserver(
804e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      web_modal::ModalDialogHostObserver* observer) OVERRIDE;
81868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Gets the native window from the view widget.
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gfx::NativeWindow GetNativeWindow() const;
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Loads given page. Should be called after Init() has been called.
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void LoadURL(const GURL& url);
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns current WebUI.
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content::WebUI* GetWebUI();
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns current WebContents.
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content::WebContents* GetWebContents();
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Opens proxy settings dialog.
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OpenProxySettings();
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Called when WebUI is being shown after being initilized hidden.
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnPostponedShow();
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Toggles status area visibility.
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetStatusAreaVisible(bool visible);
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Sets whether UI should be enabled.
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetUIEnabled(bool enabled);
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_is_hidden(bool hidden) { is_hidden_ = hidden; }
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  bool webui_visible() const { return webui_visible_; }
10958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
110868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // Let suppress emission of this signal.
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_should_emit_login_prompt_visible(bool emit) {
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    should_emit_login_prompt_visible_ = emit;
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
115116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  void AddFrameObserver(FrameObserver* frame_observer);
116116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  void RemoveFrameObserver(FrameObserver* frame_observer);
117116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
118868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) protected:
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Overridden from views::View:
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void Layout() OVERRIDE;
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnLocaleChanged() OVERRIDE;
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ChildPreferredSizeChanged(View* child) OVERRIDE;
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void AboutToRequestFocusFromTabTraversal(bool reverse) OVERRIDE;
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Overridden from content::NotificationObserver.
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void Observe(int type,
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       const content::NotificationSource& source,
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       const content::NotificationDetails& details) OVERRIDE;
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // WebView for rendering a webpage as a webui login.
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  views::WebView* webui_login_;
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Map type for the accelerator-to-identifier map.
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  typedef std::map<ui::Accelerator, std::string> AccelMap;
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Overridden from content::WebContentsDelegate.
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool HandleContextMenu(
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const content::ContextMenuParams& params) OVERRIDE;
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void HandleKeyboardEvent(
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      content::WebContents* source,
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const content::NativeWebKeyboardEvent& event) OVERRIDE;
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool IsPopupOrPanel(
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const content::WebContents* source) const OVERRIDE;
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool TakeFocus(content::WebContents* source, bool reverse) OVERRIDE;
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void RequestMediaAccessPermission(
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      content::WebContents* web_contents,
1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const content::MediaStreamRequest& request,
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const content::MediaResponseCallback& callback) OVERRIDE;
1501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual bool CheckMediaAccessPermission(
1511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      content::WebContents* web_contents,
1521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      const GURL& security_origin,
1531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      content::MediaStreamType type) OVERRIDE;
1545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual bool PreHandleGestureEvent(
1555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      content::WebContents* source,
1565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const blink::WebGestureEvent& event) OVERRIDE;
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1588bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  // Overridden from content::WebContentsObserver.
1598bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  virtual void DidFailProvisionalLoad(
160116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      content::RenderFrameHost* render_frame_host,
1618bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)      const GURL& validated_url,
1628bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)      int error_code,
163116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      const base::string16& error_description) OVERRIDE;
1648bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Performs series of actions when login prompt is considered
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // to be ready and visible.
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // 1. Emits LoginPromptVisible signal if needed
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // 2. Notifies OOBE/sign classes.
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnLoginPromptVisible();
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Called when focus is returned from status area.
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // |reverse| is true when focus is traversed backwards (using Shift-Tab).
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void ReturnFocus(bool reverse);
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content::NotificationRegistrar registrar_;
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Converts keyboard events on the WebContents to accelerators.
178c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  views::UnhandledKeyboardEventHandler unhandled_keyboard_event_handler_;
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Maps installed accelerators to OOBE webui accelerator identifiers.
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AccelMap accel_map_;
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // True when WebUI is being initialized hidden.
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool is_hidden_;
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
18658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // True when the WebUI has finished initializing and is visible.
18758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  bool webui_visible_;
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Should we emit the login-prompt-visible signal when the login page is
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // displayed?
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool should_emit_login_prompt_visible_;
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // True to forward keyboard event.
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool forward_keyboard_event_;
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
196c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  scoped_ptr<ScopedGaiaAuthExtension> auth_extension_;
197c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1984e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  ObserverList<web_modal::ModalDialogHostObserver> observer_list_;
199116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  ObserverList<FrameObserver> frame_observer_list_;
200116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
201116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Manage popups appearing over the login window.
202116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // TODO(gbillock): See if we can get rid of this. Perhaps in favor of
203116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // in-content styled popups or something? There oughtta be a way...
204116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  scoped_ptr<web_modal::PopupManager> popup_manager_;
205868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(WebUILoginView);
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace chromeos
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
211cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#endif  // CHROME_BROWSER_CHROMEOS_LOGIN_UI_WEBUI_LOGIN_VIEW_H_
212