summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornkostylev@chromium.org <nkostylev@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-06-15 16:41:37 +0000
committernkostylev@chromium.org <nkostylev@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-06-15 16:41:37 +0000
commitfb9deefca5abae4fcfe5d1ac0049e0365725f7cf (patch)
tree97036bea9f7227ecb0be8a23ce88418f0b340c19
parent1e16e288ed46b0470e1c50120ad5ce281aa05dd2 (diff)
downloadchromium_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
-rw-r--r--chrome/browser/chromeos/login/webui_login_display.cc4
-rw-r--r--chrome/browser/chromeos/login/webui_login_display.h1
-rw-r--r--chrome/browser/chromeos/login/webui_screen_locker.cc1
-rw-r--r--chrome/browser/ui/webui/chromeos/login/base_screen_handler.cc3
-rw-r--r--chrome/browser/ui/webui/chromeos/login/base_screen_handler.h4
-rw-r--r--chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc8
-rw-r--r--chrome/browser/ui/webui/chromeos/login/signin_screen_handler.h5
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;