diff options
author | nkostylev@chromium.org <nkostylev@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-06-15 16:41:37 +0000 |
---|---|---|
committer | nkostylev@chromium.org <nkostylev@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-06-15 16:41:37 +0000 |
commit | fb9deefca5abae4fcfe5d1ac0049e0365725f7cf (patch) | |
tree | 97036bea9f7227ecb0be8a23ce88418f0b340c19 | |
parent | 1e16e288ed46b0470e1c50120ad5ce281aa05dd2 (diff) | |
download | chromium_src-fb9deefca5abae4fcfe5d1ac0049e0365725f7cf.zip chromium_src-fb9deefca5abae4fcfe5d1ac0049e0365725f7cf.tar.gz chromium_src-fb9deefca5abae4fcfe5d1ac0049e0365725f7cf.tar.bz2 |
Merge 141494 - [cros] Pass native window on lock screen. Fixes crash when HelpApp is opened.
BUG=chromium:131944
TEST=See bug.
Review URL: https://chromiumcodereview.appspot.com/10542093
TBR=nkostylev@chromium.org
Review URL: https://chromiumcodereview.appspot.com/10559010
git-svn-id: svn://svn.chromium.org/chrome/branches/1132/src@142407 0039d316-1c4b-4281-b951-d872f2087c98
7 files changed, 22 insertions, 4 deletions
diff --git a/chrome/browser/chromeos/login/webui_login_display.cc b/chrome/browser/chromeos/login/webui_login_display.cc index 819c453..fba68b1 100644 --- a/chrome/browser/chromeos/login/webui_login_display.cc +++ b/chrome/browser/chromeos/login/webui_login_display.cc @@ -150,6 +150,10 @@ void WebUILoginDisplay::ShowGaiaPasswordChanged(const std::string& username) { } // WebUILoginDisplay, SigninScreenHandlerDelegate implementation: -------------- +gfx::NativeWindow WebUILoginDisplay::GetNativeWindow() const { + return parent_window(); +} + void WebUILoginDisplay::CompleteLogin(const std::string& username, const std::string& password) { DCHECK(delegate_); diff --git a/chrome/browser/chromeos/login/webui_login_display.h b/chrome/browser/chromeos/login/webui_login_display.h index c5b27e7..3a79cab 100644 --- a/chrome/browser/chromeos/login/webui_login_display.h +++ b/chrome/browser/chromeos/login/webui_login_display.h @@ -42,6 +42,7 @@ class WebUILoginDisplay : public LoginDisplay, virtual void ShowGaiaPasswordChanged(const std::string& username) OVERRIDE; // SigninScreenHandlerDelegate implementation: + virtual gfx::NativeWindow GetNativeWindow() const OVERRIDE; virtual void CompleteLogin(const std::string& username, const std::string& password) OVERRIDE; virtual void Login(const std::string& username, diff --git a/chrome/browser/chromeos/login/webui_screen_locker.cc b/chrome/browser/chromeos/login/webui_screen_locker.cc index 7774ea5..3bbc46a 100644 --- a/chrome/browser/chromeos/login/webui_screen_locker.cc +++ b/chrome/browser/chromeos/login/webui_screen_locker.cc @@ -60,6 +60,7 @@ void WebUIScreenLocker::LockScreen(bool unlock_on_input) { UserList users(1, &chromeos::UserManager::Get()->GetLoggedInUser()); login_display_.reset(new WebUILoginDisplay(this)); login_display_->set_background_bounds(bounds); + login_display_->set_parent_window(GetNativeWindow()); login_display_->Init(users, false, true, false); static_cast<OobeUI*>(GetWebUI()->GetController())->ShowSigninScreen( diff --git a/chrome/browser/ui/webui/chromeos/login/base_screen_handler.cc b/chrome/browser/ui/webui/chromeos/login/base_screen_handler.cc index 2822526..e473d6c 100644 --- a/chrome/browser/ui/webui/chromeos/login/base_screen_handler.cc +++ b/chrome/browser/ui/webui/chromeos/login/base_screen_handler.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// 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. @@ -32,7 +32,6 @@ void BaseScreenHandler::ShowScreen(const char* screen_name, web_ui()->CallJavascriptFunction("cr.ui.Oobe.showScreen", screen_params); } - gfx::NativeWindow BaseScreenHandler::GetNativeWindow() { return BaseLoginDisplayHost::default_host()->GetNativeWindow(); } diff --git a/chrome/browser/ui/webui/chromeos/login/base_screen_handler.h b/chrome/browser/ui/webui/chromeos/login/base_screen_handler.h index 51b4214..61ffebf 100644 --- a/chrome/browser/ui/webui/chromeos/login/base_screen_handler.h +++ b/chrome/browser/ui/webui/chromeos/login/base_screen_handler.h @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// 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. @@ -41,7 +41,7 @@ class BaseScreenHandler : public content::WebUIMessageHandler { bool page_is_ready() const { return page_is_ready_; } // Returns the window which shows us. - gfx::NativeWindow GetNativeWindow(); + virtual gfx::NativeWindow GetNativeWindow(); private: // Keeps whether page is ready. diff --git a/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc b/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc index 34f882c..65f5a77 100644 --- a/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc +++ b/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc @@ -417,6 +417,10 @@ void SigninScreenHandler::Initialize() { } } +gfx::NativeWindow SigninScreenHandler::GetNativeWindow() { + return delegate_ ? delegate_->GetNativeWindow() : NULL; +} + void SigninScreenHandler::RegisterMessages() { network_state_informer_.reset(new NetworkStateInformer(this, web_ui())); network_state_informer_->Init(); @@ -730,6 +734,8 @@ void SigninScreenHandler::HandleLaunchIncognito(const base::ListValue* args) { } void SigninScreenHandler::HandleFixCaptivePortal(const base::ListValue* args) { + if (!delegate_) + return; // TODO(altimofeev): move error page and captive portal window showing logic // to C++ (currenly most of it is done on the JS side). if (!captive_portal_window_proxy_.get()) { @@ -813,6 +819,8 @@ void SigninScreenHandler::HandleToggleEnrollmentScreen( } void SigninScreenHandler::HandleLaunchHelpApp(const base::ListValue* args) { + if (!delegate_) + return; double help_topic_id; // Javascript number is passed back as double. if (!args->GetDouble(0, &help_topic_id)) { NOTREACHED(); diff --git a/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.h b/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.h index eb6256f..95587ad 100644 --- a/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.h +++ b/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.h @@ -17,6 +17,7 @@ #include "chrome/browser/ui/webui/chromeos/login/base_screen_handler.h" #include "content/public/browser/notification_observer.h" #include "content/public/browser/web_ui.h" +#include "ui/gfx/native_widget_types.h" class BrowsingDataRemover; @@ -55,6 +56,9 @@ class LoginDisplayWebUIHandler { // An interface for SigninScreenHandler to call WebUILoginDisplay. class SigninScreenHandlerDelegate { public: + // Returns corresponding native window. + virtual gfx::NativeWindow GetNativeWindow() const = 0; + // Confirms sign up by provided |username| and |password| specified. // Used for new user login via GAIA extension. virtual void CompleteLogin(const std::string& username, @@ -135,6 +139,7 @@ class SigninScreenHandler : public BaseScreenHandler, virtual void GetLocalizedStrings( base::DictionaryValue* localized_strings) OVERRIDE; virtual void Initialize() OVERRIDE; + virtual gfx::NativeWindow GetNativeWindow() OVERRIDE; // WebUIMessageHandler implementation: virtual void RegisterMessages() OVERRIDE; |