| // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CHROME_BROWSER_CHROMEOS_LOGIN_WEBUI_LOGIN_VIEW_H_ |
| #define CHROME_BROWSER_CHROMEOS_LOGIN_WEBUI_LOGIN_VIEW_H_ |
| |
| #include <map> |
| #include <string> |
| |
| #include "base/memory/scoped_ptr.h" |
| #include "base/observer_list.h" |
| #include "chrome/browser/extensions/signin/scoped_gaia_auth_extension.h" |
| #include "chrome/browser/ui/chrome_web_modal_dialog_manager_delegate.h" |
| #include "components/web_modal/web_contents_modal_dialog_host.h" |
| #include "content/public/browser/notification_observer.h" |
| #include "content/public/browser/notification_registrar.h" |
| #include "content/public/browser/web_contents_delegate.h" |
| #include "content/public/browser/web_contents_observer.h" |
| #include "ui/views/controls/webview/unhandled_keyboard_event_handler.h" |
| #include "ui/views/widget/widget.h" |
| #include "ui/views/widget/widget_delegate.h" |
| |
| class GURL; |
| |
| namespace content { |
| class WebUI; |
| } |
| |
| namespace views { |
| class View; |
| class WebView; |
| class Widget; |
| } |
| |
| namespace chromeos { |
| |
| // View used to render a WebUI supporting Widget. This widget is used for the |
| // WebUI based start up and lock screens. It contains a WebView. |
| class WebUILoginView : public views::View, |
| public content::WebContentsDelegate, |
| public content::WebContentsObserver, |
| public content::NotificationObserver, |
| public ChromeWebModalDialogManagerDelegate, |
| public web_modal::WebContentsModalDialogHost { |
| public: |
| // Internal class name. |
| static const char kViewClassName[]; |
| |
| WebUILoginView(); |
| virtual ~WebUILoginView(); |
| |
| // Initializes the webui login view. |
| virtual void Init(); |
| |
| // Overridden from views::View: |
| virtual bool AcceleratorPressed( |
| const ui::Accelerator& accelerator) OVERRIDE; |
| virtual const char* GetClassName() const OVERRIDE; |
| |
| // Overridden from ChromeWebModalDialogManagerDelegate: |
| virtual web_modal::WebContentsModalDialogHost* |
| GetWebContentsModalDialogHost() OVERRIDE; |
| |
| // Overridden from web_modal::WebContentsModalDialogHost: |
| virtual gfx::NativeView GetHostView() const OVERRIDE; |
| virtual gfx::Point GetDialogPosition(const gfx::Size& size) OVERRIDE; |
| virtual gfx::Size GetMaximumDialogSize() OVERRIDE; |
| virtual void AddObserver( |
| web_modal::ModalDialogHostObserver* observer) OVERRIDE; |
| virtual void RemoveObserver( |
| web_modal::ModalDialogHostObserver* observer) OVERRIDE; |
| |
| // Gets the native window from the view widget. |
| gfx::NativeWindow GetNativeWindow() const; |
| |
| // Loads given page. Should be called after Init() has been called. |
| void LoadURL(const GURL& url); |
| |
| // Returns current WebUI. |
| content::WebUI* GetWebUI(); |
| |
| // Returns current WebContents. |
| content::WebContents* GetWebContents(); |
| |
| // Opens proxy settings dialog. |
| void OpenProxySettings(); |
| |
| // Called when WebUI is being shown after being initilized hidden. |
| void OnPostponedShow(); |
| |
| // Toggles status area visibility. |
| void SetStatusAreaVisible(bool visible); |
| |
| // Sets whether UI should be enabled. |
| void SetUIEnabled(bool enabled); |
| |
| void set_is_hidden(bool hidden) { is_hidden_ = hidden; } |
| |
| bool webui_visible() const { return webui_visible_; } |
| |
| // Let suppress emission of this signal. |
| void set_should_emit_login_prompt_visible(bool emit) { |
| should_emit_login_prompt_visible_ = emit; |
| } |
| |
| protected: |
| // Overridden from views::View: |
| virtual void Layout() OVERRIDE; |
| virtual void OnLocaleChanged() OVERRIDE; |
| virtual void ChildPreferredSizeChanged(View* child) OVERRIDE; |
| virtual void AboutToRequestFocusFromTabTraversal(bool reverse) OVERRIDE; |
| |
| // Overridden from content::NotificationObserver. |
| virtual void Observe(int type, |
| const content::NotificationSource& source, |
| const content::NotificationDetails& details) OVERRIDE; |
| |
| // WebView for rendering a webpage as a webui login. |
| views::WebView* webui_login_; |
| |
| private: |
| // Map type for the accelerator-to-identifier map. |
| typedef std::map<ui::Accelerator, std::string> AccelMap; |
| |
| // Overridden from content::WebContentsDelegate. |
| virtual bool HandleContextMenu( |
| const content::ContextMenuParams& params) OVERRIDE; |
| virtual void HandleKeyboardEvent( |
| content::WebContents* source, |
| const content::NativeWebKeyboardEvent& event) OVERRIDE; |
| virtual bool IsPopupOrPanel( |
| const content::WebContents* source) const OVERRIDE; |
| virtual bool TakeFocus(content::WebContents* source, bool reverse) OVERRIDE; |
| virtual void RequestMediaAccessPermission( |
| content::WebContents* web_contents, |
| const content::MediaStreamRequest& request, |
| const content::MediaResponseCallback& callback) OVERRIDE; |
| |
| // Overridden from content::WebContentsObserver. |
| virtual void DidFailProvisionalLoad( |
| int64 frame_id, |
| const base::string16& frame_unique_name, |
| bool is_main_frame, |
| const GURL& validated_url, |
| int error_code, |
| const base::string16& error_description, |
| content::RenderViewHost* render_view_host) OVERRIDE; |
| |
| // Performs series of actions when login prompt is considered |
| // to be ready and visible. |
| // 1. Emits LoginPromptVisible signal if needed |
| // 2. Notifies OOBE/sign classes. |
| void OnLoginPromptVisible(); |
| |
| // Called when focus is returned from status area. |
| // |reverse| is true when focus is traversed backwards (using Shift-Tab). |
| void ReturnFocus(bool reverse); |
| |
| content::NotificationRegistrar registrar_; |
| |
| // Converts keyboard events on the WebContents to accelerators. |
| views::UnhandledKeyboardEventHandler unhandled_keyboard_event_handler_; |
| |
| // Maps installed accelerators to OOBE webui accelerator identifiers. |
| AccelMap accel_map_; |
| |
| // True when WebUI is being initialized hidden. |
| bool is_hidden_; |
| |
| // True when the WebUI has finished initializing and is visible. |
| bool webui_visible_; |
| |
| // Should we emit the login-prompt-visible signal when the login page is |
| // displayed? |
| bool should_emit_login_prompt_visible_; |
| |
| // True to forward keyboard event. |
| bool forward_keyboard_event_; |
| |
| scoped_ptr<ScopedGaiaAuthExtension> auth_extension_; |
| |
| ObserverList<web_modal::ModalDialogHostObserver> observer_list_; |
| |
| DISALLOW_COPY_AND_ASSIGN(WebUILoginView); |
| }; |
| |
| } // namespace chromeos |
| |
| #endif // CHROME_BROWSER_CHROMEOS_LOGIN_WEBUI_LOGIN_VIEW_H_ |