| Index: chrome/browser/chromeos/login/webui_login_view.cc
|
| diff --git a/chrome/browser/chromeos/login/webui_login_view.cc b/chrome/browser/chromeos/login/webui_login_view.cc
|
| deleted file mode 100644
|
| index 69759509096e7342b09a993775daa11b02bff1fb..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/chromeos/login/webui_login_view.cc
|
| +++ /dev/null
|
| @@ -1,460 +0,0 @@
|
| -// 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.
|
| -
|
| -#include "chrome/browser/chromeos/login/webui_login_view.h"
|
| -
|
| -#include "ash/shell.h"
|
| -#include "ash/system/tray/system_tray.h"
|
| -#include "base/bind.h"
|
| -#include "base/callback.h"
|
| -#include "base/debug/trace_event.h"
|
| -#include "base/i18n/rtl.h"
|
| -#include "base/strings/utf_string_conversions.h"
|
| -#include "base/values.h"
|
| -#include "chrome/browser/chrome_notification_types.h"
|
| -#include "chrome/browser/chromeos/accessibility/accessibility_util.h"
|
| -#include "chrome/browser/chromeos/login/login_display_host_impl.h"
|
| -#include "chrome/browser/chromeos/login/proxy_settings_dialog.h"
|
| -#include "chrome/browser/chromeos/login/webui_login_display.h"
|
| -#include "chrome/browser/chromeos/profiles/profile_helper.h"
|
| -#include "chrome/browser/extensions/chrome_extension_web_contents_observer.h"
|
| -#include "chrome/browser/media/media_stream_infobar_delegate.h"
|
| -#include "chrome/browser/password_manager/chrome_password_manager_client.h"
|
| -#include "chrome/browser/renderer_preferences_util.h"
|
| -#include "chrome/browser/sessions/session_tab_helper.h"
|
| -#include "chrome/browser/ui/autofill/tab_autofill_manager_delegate.h"
|
| -#include "chrome/browser/ui/webui/chromeos/login/oobe_ui.h"
|
| -#include "chrome/common/render_messages.h"
|
| -#include "chromeos/dbus/dbus_thread_manager.h"
|
| -#include "chromeos/dbus/session_manager_client.h"
|
| -#include "chromeos/network/network_state.h"
|
| -#include "chromeos/network/network_state_handler.h"
|
| -#include "components/password_manager/core/browser/password_manager.h"
|
| -#include "components/web_modal/web_contents_modal_dialog_manager.h"
|
| -#include "content/public/browser/notification_service.h"
|
| -#include "content/public/browser/render_view_host.h"
|
| -#include "content/public/browser/render_widget_host_view.h"
|
| -#include "content/public/browser/web_contents.h"
|
| -#include "content/public/browser/web_ui.h"
|
| -#include "third_party/WebKit/public/web/WebInputEvent.h"
|
| -#include "ui/gfx/rect.h"
|
| -#include "ui/gfx/size.h"
|
| -#include "ui/views/controls/webview/webview.h"
|
| -#include "ui/views/widget/widget.h"
|
| -
|
| -using content::NativeWebKeyboardEvent;
|
| -using content::RenderViewHost;
|
| -using content::WebContents;
|
| -using web_modal::WebContentsModalDialogManager;
|
| -
|
| -namespace {
|
| -
|
| -// These strings must be kept in sync with handleAccelerator()
|
| -// in display_manager.js.
|
| -const char kAccelNameCancel[] = "cancel";
|
| -const char kAccelNameEnrollment[] = "enrollment";
|
| -const char kAccelNameKioskEnable[] = "kiosk_enable";
|
| -const char kAccelNameVersion[] = "version";
|
| -const char kAccelNameReset[] = "reset";
|
| -const char kAccelFocusPrev[] = "focus_prev";
|
| -const char kAccelFocusNext[] = "focus_next";
|
| -const char kAccelNameDeviceRequisition[] = "device_requisition";
|
| -const char kAccelNameDeviceRequisitionRemora[] = "device_requisition_remora";
|
| -const char kAccelNameAppLaunchBailout[] = "app_launch_bailout";
|
| -const char kAccelNameAppLaunchNetworkConfig[] = "app_launch_network_config";
|
| -
|
| -// A class to change arrow key traversal behavior when it's alive.
|
| -class ScopedArrowKeyTraversal {
|
| - public:
|
| - explicit ScopedArrowKeyTraversal(bool new_arrow_key_tranversal_enabled)
|
| - : previous_arrow_key_traversal_enabled_(
|
| - views::FocusManager::arrow_key_traversal_enabled()) {
|
| - views::FocusManager::set_arrow_key_traversal_enabled(
|
| - new_arrow_key_tranversal_enabled);
|
| - }
|
| - ~ScopedArrowKeyTraversal() {
|
| - views::FocusManager::set_arrow_key_traversal_enabled(
|
| - previous_arrow_key_traversal_enabled_);
|
| - }
|
| -
|
| - private:
|
| - const bool previous_arrow_key_traversal_enabled_;
|
| - DISALLOW_COPY_AND_ASSIGN(ScopedArrowKeyTraversal);
|
| -};
|
| -
|
| -} // namespace
|
| -
|
| -namespace chromeos {
|
| -
|
| -// static
|
| -const char WebUILoginView::kViewClassName[] =
|
| - "browser/chromeos/login/WebUILoginView";
|
| -
|
| -// WebUILoginView public: ------------------------------------------------------
|
| -
|
| -WebUILoginView::WebUILoginView()
|
| - : webui_login_(NULL),
|
| - is_hidden_(false),
|
| - webui_visible_(false),
|
| - should_emit_login_prompt_visible_(true),
|
| - forward_keyboard_event_(true) {
|
| - registrar_.Add(this,
|
| - chrome::NOTIFICATION_LOGIN_OR_LOCK_WEBUI_VISIBLE,
|
| - content::NotificationService::AllSources());
|
| - registrar_.Add(this,
|
| - chrome::NOTIFICATION_LOGIN_NETWORK_ERROR_SHOWN,
|
| - content::NotificationService::AllSources());
|
| -
|
| - accel_map_[ui::Accelerator(ui::VKEY_ESCAPE, ui::EF_NONE)] =
|
| - kAccelNameCancel;
|
| - accel_map_[ui::Accelerator(ui::VKEY_E,
|
| - ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN)] =
|
| - kAccelNameEnrollment;
|
| - accel_map_[ui::Accelerator(ui::VKEY_K,
|
| - ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN)] =
|
| - kAccelNameKioskEnable;
|
| - accel_map_[ui::Accelerator(ui::VKEY_V, ui::EF_ALT_DOWN)] =
|
| - kAccelNameVersion;
|
| - accel_map_[ui::Accelerator(ui::VKEY_R,
|
| - ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | ui::EF_SHIFT_DOWN)] =
|
| - kAccelNameReset;
|
| -
|
| - accel_map_[ui::Accelerator(ui::VKEY_LEFT, ui::EF_NONE)] =
|
| - kAccelFocusPrev;
|
| - accel_map_[ui::Accelerator(ui::VKEY_RIGHT, ui::EF_NONE)] =
|
| - kAccelFocusNext;
|
| -
|
| - // Use KEY_RELEASED because Gaia consumes KEY_PRESSED for up/down key.
|
| - ui::Accelerator key_up(ui::VKEY_UP, ui::EF_NONE);
|
| - key_up.set_type(ui::ET_KEY_RELEASED);
|
| - ui::Accelerator key_down(ui::VKEY_DOWN, ui::EF_NONE);
|
| - key_down.set_type(ui::ET_KEY_RELEASED);
|
| - accel_map_[key_up] = kAccelFocusPrev;
|
| - accel_map_[key_down] = kAccelFocusNext;
|
| -
|
| - accel_map_[ui::Accelerator(
|
| - ui::VKEY_D, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | ui::EF_SHIFT_DOWN)] =
|
| - kAccelNameDeviceRequisition;
|
| - accel_map_[
|
| - ui::Accelerator(ui::VKEY_H, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN)] =
|
| - kAccelNameDeviceRequisitionRemora;
|
| -
|
| - accel_map_[ui::Accelerator(ui::VKEY_S,
|
| - ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN)] =
|
| - kAccelNameAppLaunchBailout;
|
| -
|
| - accel_map_[ui::Accelerator(ui::VKEY_N,
|
| - ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN)] =
|
| - kAccelNameAppLaunchNetworkConfig;
|
| -
|
| - for (AccelMap::iterator i(accel_map_.begin()); i != accel_map_.end(); ++i)
|
| - AddAccelerator(i->first);
|
| -}
|
| -
|
| -WebUILoginView::~WebUILoginView() {
|
| - FOR_EACH_OBSERVER(web_modal::ModalDialogHostObserver,
|
| - observer_list_,
|
| - OnHostDestroying());
|
| -
|
| - if (ash::Shell::GetInstance()->HasPrimaryStatusArea()) {
|
| - ash::Shell::GetInstance()->GetPrimarySystemTray()->
|
| - SetNextFocusableView(NULL);
|
| - }
|
| -}
|
| -
|
| -void WebUILoginView::Init() {
|
| - Profile* signin_profile = ProfileHelper::GetSigninProfile();
|
| - auth_extension_.reset(new ScopedGaiaAuthExtension(signin_profile));
|
| - webui_login_ = new views::WebView(signin_profile);
|
| - webui_login_->set_allow_accelerators(true);
|
| - AddChildView(webui_login_);
|
| -
|
| - WebContents* web_contents = webui_login_->GetWebContents();
|
| -
|
| - // Ensure that the login UI has a tab ID, which will allow the GAIA auth
|
| - // extension's background script to tell it apart from a captive portal window
|
| - // that may be opened on top of this UI.
|
| - SessionTabHelper::CreateForWebContents(web_contents);
|
| -
|
| - // Create the password manager that is needed for the proxy.
|
| - ChromePasswordManagerClient::CreateForWebContentsWithAutofillManagerDelegate(
|
| - web_contents,
|
| - autofill::TabAutofillManagerDelegate::FromWebContents(web_contents));
|
| -
|
| - // LoginHandlerViews uses a constrained window for the password manager view.
|
| - WebContentsModalDialogManager::CreateForWebContents(web_contents);
|
| - WebContentsModalDialogManager::FromWebContents(web_contents)->
|
| - SetDelegate(this);
|
| -
|
| - web_contents->SetDelegate(this);
|
| - extensions::ChromeExtensionWebContentsObserver::CreateForWebContents(
|
| - web_contents);
|
| - WebContentsObserver::Observe(web_contents);
|
| - renderer_preferences_util::UpdateFromSystemSettings(
|
| - web_contents->GetMutableRendererPrefs(),
|
| - signin_profile);
|
| -}
|
| -
|
| -const char* WebUILoginView::GetClassName() const {
|
| - return kViewClassName;
|
| -}
|
| -
|
| -web_modal::WebContentsModalDialogHost*
|
| - WebUILoginView::GetWebContentsModalDialogHost() {
|
| - return this;
|
| -}
|
| -
|
| -gfx::NativeView WebUILoginView::GetHostView() const {
|
| - return GetWidget()->GetNativeView();
|
| -}
|
| -
|
| -gfx::Point WebUILoginView::GetDialogPosition(const gfx::Size& size) {
|
| - // Center the widget.
|
| - gfx::Size widget_size = GetWidget()->GetWindowBoundsInScreen().size();
|
| - return gfx::Point(widget_size.width() / 2 - size.width() / 2,
|
| - widget_size.height() / 2 - size.height() / 2);
|
| -}
|
| -
|
| -gfx::Size WebUILoginView::GetMaximumDialogSize() {
|
| - return GetWidget()->GetWindowBoundsInScreen().size();
|
| -}
|
| -
|
| -void WebUILoginView::AddObserver(
|
| - web_modal::ModalDialogHostObserver* observer) {
|
| - if (observer && !observer_list_.HasObserver(observer))
|
| - observer_list_.AddObserver(observer);
|
| -}
|
| -
|
| -void WebUILoginView::RemoveObserver(
|
| - web_modal::ModalDialogHostObserver* observer) {
|
| - observer_list_.RemoveObserver(observer);
|
| -}
|
| -
|
| -bool WebUILoginView::AcceleratorPressed(
|
| - const ui::Accelerator& accelerator) {
|
| - AccelMap::const_iterator entry = accel_map_.find(accelerator);
|
| - if (entry == accel_map_.end())
|
| - return false;
|
| -
|
| - if (!webui_login_)
|
| - return true;
|
| -
|
| - content::WebUI* web_ui = GetWebUI();
|
| - if (web_ui) {
|
| - base::StringValue accel_name(entry->second);
|
| - web_ui->CallJavascriptFunction("cr.ui.Oobe.handleAccelerator",
|
| - accel_name);
|
| - }
|
| -
|
| - return true;
|
| -}
|
| -
|
| -gfx::NativeWindow WebUILoginView::GetNativeWindow() const {
|
| - return GetWidget()->GetNativeWindow();
|
| -}
|
| -
|
| -void WebUILoginView::LoadURL(const GURL & url) {
|
| - webui_login_->LoadInitialURL(url);
|
| - webui_login_->RequestFocus();
|
| -
|
| - // TODO(nkostylev): Use WebContentsObserver::RenderViewCreated to track
|
| - // when RenderView is created.
|
| - GetWebContents()->GetRenderViewHost()->GetView()->SetBackgroundOpaque(false);
|
| -}
|
| -
|
| -content::WebUI* WebUILoginView::GetWebUI() {
|
| - return webui_login_->web_contents()->GetWebUI();
|
| -}
|
| -
|
| -content::WebContents* WebUILoginView::GetWebContents() {
|
| - return webui_login_->web_contents();
|
| -}
|
| -
|
| -void WebUILoginView::OpenProxySettings() {
|
| - const NetworkState* network =
|
| - NetworkHandler::Get()->network_state_handler()->DefaultNetwork();
|
| - if (!network) {
|
| - LOG(ERROR) << "No default network found!";
|
| - return;
|
| - }
|
| - ProxySettingsDialog* dialog =
|
| - new ProxySettingsDialog(ProfileHelper::GetSigninProfile(),
|
| - *network, NULL, GetNativeWindow());
|
| - dialog->Show();
|
| -}
|
| -
|
| -void WebUILoginView::OnPostponedShow() {
|
| - set_is_hidden(false);
|
| - OnLoginPromptVisible();
|
| -}
|
| -
|
| -void WebUILoginView::SetStatusAreaVisible(bool visible) {
|
| - if (ash::Shell::GetInstance()->HasPrimaryStatusArea()) {
|
| - ash::SystemTray* tray = ash::Shell::GetInstance()->GetPrimarySystemTray();
|
| - if (visible) {
|
| - // Tray may have been initialized being hidden.
|
| - tray->SetVisible(visible);
|
| - tray->GetWidget()->Show();
|
| - } else {
|
| - tray->GetWidget()->Hide();
|
| - }
|
| - }
|
| -}
|
| -
|
| -void WebUILoginView::SetUIEnabled(bool enabled) {
|
| - forward_keyboard_event_ = enabled;
|
| - ash::Shell::GetInstance()->GetPrimarySystemTray()->SetEnabled(enabled);
|
| -}
|
| -
|
| -// WebUILoginView protected: ---------------------------------------------------
|
| -
|
| -void WebUILoginView::Layout() {
|
| - DCHECK(webui_login_);
|
| - webui_login_->SetBoundsRect(bounds());
|
| -
|
| - FOR_EACH_OBSERVER(web_modal::ModalDialogHostObserver,
|
| - observer_list_,
|
| - OnPositionRequiresUpdate());
|
| -}
|
| -
|
| -void WebUILoginView::OnLocaleChanged() {
|
| -}
|
| -
|
| -void WebUILoginView::ChildPreferredSizeChanged(View* child) {
|
| - Layout();
|
| - SchedulePaint();
|
| -}
|
| -
|
| -void WebUILoginView::AboutToRequestFocusFromTabTraversal(bool reverse) {
|
| - // Return the focus to the web contents.
|
| - webui_login_->web_contents()->FocusThroughTabTraversal(reverse);
|
| - GetWidget()->Activate();
|
| - webui_login_->web_contents()->Focus();
|
| -}
|
| -
|
| -void WebUILoginView::Observe(int type,
|
| - const content::NotificationSource& source,
|
| - const content::NotificationDetails& details) {
|
| - switch (type) {
|
| - case chrome::NOTIFICATION_LOGIN_OR_LOCK_WEBUI_VISIBLE:
|
| - case chrome::NOTIFICATION_LOGIN_NETWORK_ERROR_SHOWN: {
|
| - OnLoginPromptVisible();
|
| - registrar_.RemoveAll();
|
| - break;
|
| - }
|
| - default:
|
| - NOTREACHED() << "Unexpected notification " << type;
|
| - }
|
| -}
|
| -
|
| -// WebUILoginView private: -----------------------------------------------------
|
| -
|
| -bool WebUILoginView::HandleContextMenu(
|
| - const content::ContextMenuParams& params) {
|
| - // Do not show the context menu.
|
| -#ifndef NDEBUG
|
| - return false;
|
| -#else
|
| - return true;
|
| -#endif
|
| -}
|
| -
|
| -void WebUILoginView::HandleKeyboardEvent(content::WebContents* source,
|
| - const NativeWebKeyboardEvent& event) {
|
| - if (forward_keyboard_event_) {
|
| - // Disable arrow key traversal because arrow keys are handled via
|
| - // accelerator when this view has focus.
|
| - ScopedArrowKeyTraversal arrow_key_traversal(false);
|
| -
|
| - unhandled_keyboard_event_handler_.HandleKeyboardEvent(event,
|
| - GetFocusManager());
|
| - }
|
| -
|
| - // Make sure error bubble is cleared on keyboard event. This is needed
|
| - // when the focus is inside an iframe. Only clear on KeyDown to prevent hiding
|
| - // an immediate authentication error (See crbug.com/103643).
|
| - if (event.type == blink::WebInputEvent::KeyDown) {
|
| - content::WebUI* web_ui = GetWebUI();
|
| - if (web_ui)
|
| - web_ui->CallJavascriptFunction("cr.ui.Oobe.clearErrors");
|
| - }
|
| -}
|
| -
|
| -bool WebUILoginView::IsPopupOrPanel(const WebContents* source) const {
|
| - return true;
|
| -}
|
| -
|
| -bool WebUILoginView::TakeFocus(content::WebContents* source, bool reverse) {
|
| - // In case of blocked UI (ex.: sign in is in progress)
|
| - // we should not process focus change events.
|
| - if (!forward_keyboard_event_)
|
| - return false;
|
| -
|
| - ash::SystemTray* tray = ash::Shell::GetInstance()->GetPrimarySystemTray();
|
| - if (tray && tray->GetWidget()->IsVisible()) {
|
| - tray->SetNextFocusableView(this);
|
| - ash::Shell::GetInstance()->RotateFocus(reverse ? ash::Shell::BACKWARD :
|
| - ash::Shell::FORWARD);
|
| - }
|
| -
|
| - return true;
|
| -}
|
| -
|
| -void WebUILoginView::RequestMediaAccessPermission(
|
| - WebContents* web_contents,
|
| - const content::MediaStreamRequest& request,
|
| - const content::MediaResponseCallback& callback) {
|
| - if (MediaStreamInfoBarDelegate::Create(web_contents, request, callback))
|
| - NOTREACHED() << "Media stream not allowed for WebUI";
|
| -}
|
| -
|
| -bool WebUILoginView::PreHandleGestureEvent(
|
| - content::WebContents* source,
|
| - const blink::WebGestureEvent& event) {
|
| - // Disable pinch zooming.
|
| - return event.type == blink::WebGestureEvent::GesturePinchBegin ||
|
| - event.type == blink::WebGestureEvent::GesturePinchUpdate ||
|
| - event.type == blink::WebGestureEvent::GesturePinchEnd;
|
| -}
|
| -
|
| -void WebUILoginView::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) {
|
| - if (frame_unique_name != base::UTF8ToUTF16("gaia-frame"))
|
| - return;
|
| -
|
| - GetWebUI()->CallJavascriptFunction("login.GaiaSigninScreen.onFrameError",
|
| - base::FundamentalValue(-error_code),
|
| - base::StringValue(validated_url.spec()));
|
| -}
|
| -
|
| -void WebUILoginView::OnLoginPromptVisible() {
|
| - // If we're hidden than will generate this signal once we're shown.
|
| - if (is_hidden_ || webui_visible_) {
|
| - LOG(WARNING) << "Login WebUI >> not emitting signal, hidden: "
|
| - << is_hidden_;
|
| - return;
|
| - }
|
| - TRACE_EVENT0("chromeos", "WebUILoginView::OnLoginPromoptVisible");
|
| - if (should_emit_login_prompt_visible_) {
|
| - LOG(WARNING) << "Login WebUI >> login-prompt-visible";
|
| - chromeos::DBusThreadManager::Get()->GetSessionManagerClient()->
|
| - EmitLoginPromptVisible();
|
| - }
|
| -
|
| - webui_visible_ = true;
|
| -}
|
| -
|
| -void WebUILoginView::ReturnFocus(bool reverse) {
|
| - // Return the focus to the web contents.
|
| - webui_login_->web_contents()->FocusThroughTabTraversal(reverse);
|
| - GetWidget()->Activate();
|
| -}
|
| -
|
| -} // namespace chromeos
|
|
|