Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(150)

Side by Side Diff: chrome/browser/chromeos/login/lock/webui_screen_locker.cc

Issue 2429033003: cros: Cleanup lock screen and OOBE C++ backing code. (Closed)
Patch Set: Initial patch Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/chromeos/login/lock/webui_screen_locker.h" 5 #include "chrome/browser/chromeos/login/lock/webui_screen_locker.h"
6 6
7 #include "ash/common/wm_shell.h" 7 #include "ash/common/wm_shell.h"
8 #include "ash/shell.h" 8 #include "ash/shell.h"
9 #include "ash/system/chromeos/power/power_event_observer.h" 9 #include "ash/system/chromeos/power/power_event_observer.h"
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
54 } 54 }
55 55
56 } // namespace 56 } // namespace
57 57
58 namespace chromeos { 58 namespace chromeos {
59 59
60 //////////////////////////////////////////////////////////////////////////////// 60 ////////////////////////////////////////////////////////////////////////////////
61 // WebUIScreenLocker implementation. 61 // WebUIScreenLocker implementation.
62 62
63 WebUIScreenLocker::WebUIScreenLocker(ScreenLocker* screen_locker) 63 WebUIScreenLocker::WebUIScreenLocker(ScreenLocker* screen_locker)
64 : ScreenLockerDelegate(screen_locker), 64 : screen_locker_(screen_locker),
65 network_state_helper_(new login::NetworkStateHelper), 65 network_state_helper_(new login::NetworkStateHelper),
66 weak_factory_(this) { 66 weak_factory_(this) {
67 set_should_emit_login_prompt_visible(false); 67 set_should_emit_login_prompt_visible(false);
68 ash::WmShell::Get()->AddLockStateObserver(this); 68 ash::WmShell::Get()->AddLockStateObserver(this);
69 ash::WmShell::Get()->AddShellObserver(this); 69 ash::WmShell::Get()->AddShellObserver(this);
70 display::Screen::GetScreen()->AddObserver(this); 70 display::Screen::GetScreen()->AddObserver(this);
71 DBusThreadManager::Get()->GetPowerManagerClient()->AddObserver(this); 71 DBusThreadManager::Get()->GetPowerManagerClient()->AddObserver(this);
72 72
73 if (keyboard::KeyboardController::GetInstance()) { 73 if (keyboard::KeyboardController::GetInstance()) {
74 keyboard::KeyboardController::GetInstance()->AddObserver(this); 74 keyboard::KeyboardController::GetInstance()->AddObserver(this);
75 is_observing_keyboard_ = true; 75 is_observing_keyboard_ = true;
76 } 76 }
77 } 77 }
78 78
79 WebUIScreenLocker::~WebUIScreenLocker() {
80 DBusThreadManager::Get()->GetPowerManagerClient()->RemoveObserver(this);
81 display::Screen::GetScreen()->RemoveObserver(this);
82 ash::WmShell::Get()->RemoveLockStateObserver(this);
83 ash::WmShell::Get()->RemoveShellObserver(this);
84 // In case of shutdown, lock_window_ may be deleted before WebUIScreenLocker.
85 if (lock_window_) {
86 lock_window_->RemoveObserver(this);
87 lock_window_->Close();
88 }
89 // If LockScreen() was called, we need to clear the signin screen handler
90 // delegate set in ShowSigninScreen so that it no longer points to us.
91 if (login_display_.get())
92 GetOobeUI()->ResetSigninScreenHandlerDelegate();
93
94 if (keyboard::KeyboardController::GetInstance() && is_observing_keyboard_) {
95 keyboard::KeyboardController::GetInstance()->RemoveObserver(this);
96 is_observing_keyboard_ = false;
97 }
98
99 ResetKeyboardOverscrollOverride();
100 }
101
79 void WebUIScreenLocker::LockScreen() { 102 void WebUIScreenLocker::LockScreen() {
80 gfx::Rect bounds = display::Screen::GetScreen()->GetPrimaryDisplay().bounds(); 103 gfx::Rect bounds = display::Screen::GetScreen()->GetPrimaryDisplay().bounds();
81 104
82 lock_time_ = base::TimeTicks::Now(); 105 lock_time_ = base::TimeTicks::Now();
83 auto* lock_window = new LockWindow(); 106 lock_window_ = new LockWindow();
84 lock_window->set_observer(this); 107 lock_window_->set_initially_focused_view(this);
85 lock_window->set_initially_focused_view(this);
86 lock_window_ = lock_window->GetWidget();
87 lock_window_->AddObserver(this); 108 lock_window_->AddObserver(this);
88 WebUILoginView::Init(); 109
110 Init();
89 content::WebContentsObserver::Observe(webui_login_->GetWebContents()); 111 content::WebContentsObserver::Observe(webui_login_->GetWebContents());
112
90 lock_window_->SetContentsView(this); 113 lock_window_->SetContentsView(this);
91 lock_window_->SetBounds(bounds); 114 lock_window_->SetBounds(bounds);
92 lock_window_->Show(); 115 lock_window_->Show();
93 LoadURL(GURL(kLoginURL)); 116 LoadURL(GURL(kLoginURL));
94 lock_window->Grab(); 117 OnLockWindowReady();
95 118
96 signin_screen_controller_.reset( 119 signin_screen_controller_.reset(
97 new SignInScreenController(GetOobeUI(), this)); 120 new SignInScreenController(GetOobeUI(), this));
98 121
99 login_display_.reset(new WebUILoginDisplay(this)); 122 login_display_.reset(new WebUILoginDisplay(this));
100 login_display_->set_background_bounds(bounds); 123 login_display_->set_background_bounds(bounds);
101 login_display_->set_parent_window(GetNativeWindow()); 124 login_display_->set_parent_window(GetNativeWindow());
102 login_display_->Init(screen_locker()->users(), false, true, false); 125 login_display_->Init(screen_locker_->users(), false, true, false);
103 126
104 GetOobeUI()->ShowSigninScreen( 127 GetOobeUI()->ShowSigninScreen(
105 LoginScreenContext(), login_display_.get(), login_display_.get()); 128 LoginScreenContext(), login_display_.get(), login_display_.get());
106 129
107 DisableKeyboardOverscroll(); 130 DisableKeyboardOverscroll();
108 } 131 }
109 132
110 void WebUIScreenLocker::ScreenLockReady() {
111 UMA_HISTOGRAM_TIMES("LockScreen.LockReady",
112 base::TimeTicks::Now() - lock_time_);
113 ScreenLockerDelegate::ScreenLockReady();
114 SetInputEnabled(true);
115 }
116
117 void WebUIScreenLocker::OnAuthenticate() {
118 }
119
120 void WebUIScreenLocker::SetInputEnabled(bool enabled) { 133 void WebUIScreenLocker::SetInputEnabled(bool enabled) {
121 login_display_->SetUIEnabled(enabled); 134 login_display_->SetUIEnabled(enabled);
122 } 135 }
123 136
124 void WebUIScreenLocker::ShowErrorMessage( 137 void WebUIScreenLocker::ShowErrorMessage(
125 int error_msg_id, 138 int error_msg_id,
126 HelpAppLauncher::HelpTopic help_topic_id) { 139 HelpAppLauncher::HelpTopic help_topic_id) {
127 login_display_->ShowError(error_msg_id, 140 login_display_->ShowError(error_msg_id,
128 0 /* login_attempts */, 141 0 /* login_attempts */,
129 help_topic_id); 142 help_topic_id);
130 } 143 }
131 144
132 void WebUIScreenLocker::AnimateAuthenticationSuccess() { 145 void WebUIScreenLocker::AnimateAuthenticationSuccess() {
133 GetWebUI()->CallJavascriptFunctionUnsafe( 146 GetWebUI()->CallJavascriptFunctionUnsafe(
134 "cr.ui.Oobe.animateAuthenticationSuccess"); 147 "cr.ui.Oobe.animateAuthenticationSuccess");
135 } 148 }
136 149
137 void WebUIScreenLocker::ClearErrors() { 150 void WebUIScreenLocker::ClearErrors() {
138 GetWebUI()->CallJavascriptFunctionUnsafe("cr.ui.Oobe.clearErrors"); 151 GetWebUI()->CallJavascriptFunctionUnsafe("cr.ui.Oobe.clearErrors");
139 } 152 }
140 153
154 void WebUIScreenLocker::ScreenLockReady() {
155 UMA_HISTOGRAM_TIMES("LockScreen.LockReady",
156 base::TimeTicks::Now() - lock_time_);
157 screen_locker_->ScreenLockReady();
158 SetInputEnabled(true);
159 }
160
161 void WebUIScreenLocker::OnLockWindowReady() {
162 VLOG(1) << "Lock window ready; WebUI is " << (webui_ready_ ? "too" : "not");
163 lock_ready_ = true;
164 if (webui_ready_)
165 ScreenLockReady();
166 }
167
141 gfx::NativeWindow WebUIScreenLocker::GetNativeWindow() const { 168 gfx::NativeWindow WebUIScreenLocker::GetNativeWindow() const {
142 return lock_window_->GetNativeWindow(); 169 return lock_window_->GetNativeWindow();
143 } 170 }
144 171
145 content::WebUI* WebUIScreenLocker::GetAssociatedWebUI() {
146 return GetWebUI();
147 }
148
149 void WebUIScreenLocker::FocusUserPod() { 172 void WebUIScreenLocker::FocusUserPod() {
150 if (!webui_ready_) 173 if (!webui_ready_)
151 return; 174 return;
152 webui_login_->RequestFocus(); 175 webui_login_->RequestFocus();
153 GetWebUI()->CallJavascriptFunctionUnsafe( 176 GetWebUI()->CallJavascriptFunctionUnsafe(
154 "cr.ui.Oobe.forceLockedUserPodFocus"); 177 "cr.ui.Oobe.forceLockedUserPodFocus");
155 } 178 }
156 179
157 void WebUIScreenLocker::ResetAndFocusUserPod() { 180 void WebUIScreenLocker::ResetAndFocusUserPod() {
158 if (!webui_ready_) 181 if (!webui_ready_)
159 return; 182 return;
160 GetWebUI()->CallJavascriptFunctionUnsafe("cr.ui.Oobe.clearUserPodPassword"); 183 GetWebUI()->CallJavascriptFunctionUnsafe("cr.ui.Oobe.clearUserPodPassword");
161 FocusUserPod(); 184 FocusUserPod();
162 } 185 }
163 186
164 WebUIScreenLocker::~WebUIScreenLocker() {
165 DBusThreadManager::Get()->GetPowerManagerClient()->RemoveObserver(this);
166 display::Screen::GetScreen()->RemoveObserver(this);
167 ash::WmShell::Get()->RemoveLockStateObserver(this);
168 ash::WmShell::Get()->RemoveShellObserver(this);
169 // In case of shutdown, lock_window_ may be deleted before WebUIScreenLocker.
170 if (lock_window_) {
171 lock_window_->RemoveObserver(this);
172 lock_window_->Close();
173 }
174 // If LockScreen() was called, we need to clear the signin screen handler
175 // delegate set in ShowSigninScreen so that it no longer points to us.
176 if (login_display_.get()) {
177 static_cast<OobeUI*>(GetWebUI()->GetController())->
178 ResetSigninScreenHandlerDelegate();
179 }
180
181 if (keyboard::KeyboardController::GetInstance() && is_observing_keyboard_) {
182 keyboard::KeyboardController::GetInstance()->RemoveObserver(this);
183 is_observing_keyboard_ = false;
184 }
185
186 ResetKeyboardOverscrollOverride();
187 }
188
189 void WebUIScreenLocker::OnLockWebUIReady() { 187 void WebUIScreenLocker::OnLockWebUIReady() {
190 VLOG(1) << "WebUI ready; lock window is " 188 VLOG(1) << "WebUI ready; lock window is "
191 << (lock_ready_ ? "too" : "not"); 189 << (lock_ready_ ? "too" : "not");
192 webui_ready_ = true; 190 webui_ready_ = true;
193 if (lock_ready_) 191 if (lock_ready_)
194 ScreenLockReady(); 192 ScreenLockReady();
195 } 193 }
196 194
197 void WebUIScreenLocker::OnLockBackgroundDisplayed() { 195 void WebUIScreenLocker::OnLockBackgroundDisplayed() {
198 UMA_HISTOGRAM_TIMES("LockScreen.BackgroundReady", 196 UMA_HISTOGRAM_TIMES("LockScreen.BackgroundReady",
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
275 } 273 }
276 274
277 void WebUIScreenLocker::Signout() { 275 void WebUIScreenLocker::Signout() {
278 chromeos::ScreenLocker::default_screen_locker()->Signout(); 276 chromeos::ScreenLocker::default_screen_locker()->Signout();
279 } 277 }
280 278
281 bool WebUIScreenLocker::IsUserWhitelisted(const AccountId& account_id) { 279 bool WebUIScreenLocker::IsUserWhitelisted(const AccountId& account_id) {
282 NOTREACHED(); 280 NOTREACHED();
283 return true; 281 return true;
284 } 282 }
285 ////////////////////////////////////////////////////////////////////////////////
286 // LockWindow::Observer:
287
288 void WebUIScreenLocker::OnLockWindowReady() {
289 VLOG(1) << "Lock window ready; WebUI is " << (webui_ready_ ? "too" : "not");
290 lock_ready_ = true;
291 if (webui_ready_)
292 ScreenLockReady();
293 }
294 283
295 //////////////////////////////////////////////////////////////////////////////// 284 ////////////////////////////////////////////////////////////////////////////////
296 // SessionLockStateObserver: 285 // SessionLockStateObserver:
297 286
298 void WebUIScreenLocker::OnLockStateEvent( 287 void WebUIScreenLocker::OnLockStateEvent(
299 ash::LockStateObserver::EventType event) { 288 ash::LockStateObserver::EventType event) {
300 if (event == ash::LockStateObserver::EVENT_LOCK_ANIMATION_FINISHED) { 289 if (event == ash::LockStateObserver::EVENT_LOCK_ANIMATION_FINISHED) {
301 // Release capture if any. 290 // Release capture if any.
302 aura::client::GetCaptureClient(GetNativeWindow()->GetRootWindow())-> 291 aura::client::GetCaptureClient(GetNativeWindow()->GetRootWindow())->
303 SetCapture(NULL); 292 SetCapture(NULL);
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
405 } 394 }
406 395
407 if (GetOobeUI()) { 396 if (GetOobeUI()) {
408 const gfx::Size& size = primary_display.size(); 397 const gfx::Size& size = primary_display.size();
409 GetOobeUI()->GetCoreOobeActor()->SetClientAreaSize(size.width(), 398 GetOobeUI()->GetCoreOobeActor()->SetClientAreaSize(size.width(),
410 size.height()); 399 size.height());
411 } 400 }
412 } 401 }
413 402
414 } // namespace chromeos 403 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698