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

Side by Side Diff: ash/wm/session_state_controller.h

Issue 11230050: ash : introduce second SessionStateController implementation. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Created 8 years, 1 month 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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 #ifndef ASH_WM_SESSION_STATE_CONTROLLER_H_ 5 #ifndef ASH_WM_SESSION_STATE_CONTROLLER_H_
6 #define ASH_WM_SESSION_STATE_CONTROLLER_H_ 6 #define ASH_WM_SESSION_STATE_CONTROLLER_H_
7 7
8 #include "ash/ash_export.h" 8 #include "ash/ash_export.h"
9 #include "ash/shell_observer.h" 9 #include "ash/shell_observer.h"
10 #include "ash/wm/session_state_animator.h" 10 #include "ash/wm/session_state_animator.h"
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
75 // Amount of time taken to scale the snapshot down to a point in the center of 75 // Amount of time taken to scale the snapshot down to a point in the center of
76 // the screen once the screen has been locked or we've been notified that the 76 // the screen once the screen has been locked or we've been notified that the
77 // system is shutting down. 77 // system is shutting down.
78 static const int kFastCloseAnimMs; 78 static const int kFastCloseAnimMs;
79 79
80 // Additional time (beyond kFastCloseAnimMs) to wait after starting the 80 // Additional time (beyond kFastCloseAnimMs) to wait after starting the
81 // fast-close shutdown animation before actually requesting shutdown, to give 81 // fast-close shutdown animation before actually requesting shutdown, to give
82 // the animation time to finish. 82 // the animation time to finish.
83 static const int kShutdownRequestDelayMs; 83 static const int kShutdownRequestDelayMs;
84 84
85 // Helper class used by tests to access internal state.
86 class ASH_EXPORT TestApi {
87 public:
88 explicit TestApi(SessionStateController* controller);
89
90 virtual ~TestApi();
91
92 bool lock_timer_is_running() const {
93 return controller_->lock_timer_.IsRunning();
94 }
95 bool lock_fail_timer_is_running() const {
96 return controller_->lock_fail_timer_.IsRunning();
97 }
98 bool lock_to_shutdown_timer_is_running() const {
99 return controller_->lock_to_shutdown_timer_.IsRunning();
100 }
101 bool shutdown_timer_is_running() const {
102 return controller_->pre_shutdown_timer_.IsRunning();
103 }
104 bool real_shutdown_timer_is_running() const {
105 return controller_->real_shutdown_timer_.IsRunning();
106 }
107
108 void trigger_lock_timeout() {
109 controller_->OnLockTimeout();
110 controller_->lock_timer_.Stop();
111 }
112 void trigger_lock_fail_timeout() {
113 controller_->OnLockFailTimeout();
114 controller_->lock_fail_timer_.Stop();
115 }
116 void trigger_lock_to_shutdown_timeout() {
117 controller_->OnLockToShutdownTimeout();
118 controller_->lock_to_shutdown_timer_.Stop();
119 }
120 void trigger_shutdown_timeout() {
121 controller_->OnPreShutdownAnimationTimeout();
122 controller_->pre_shutdown_timer_.Stop();
123 }
124 void trigger_real_shutdown_timeout() {
125 controller_->OnRealShutdownTimeout();
126 controller_->real_shutdown_timer_.Stop();
127 }
128 private:
129 SessionStateController* controller_; // not owned
130
131 DISALLOW_COPY_AND_ASSIGN(TestApi);
132 };
133
134 SessionStateController(); 85 SessionStateController();
135 virtual ~SessionStateController(); 86 virtual ~SessionStateController();
136 87
137 // RootWindowObserver override:
138 virtual void OnRootWindowHostCloseRequested(
139 const aura::RootWindow* root) OVERRIDE;
140
141 // ShellObserver overrides:
142 virtual void OnLoginStateChanged(user::LoginStatus status) OVERRIDE;
143 virtual void OnAppTerminating() OVERRIDE;
144 virtual void OnLockStateChanged(bool locked) OVERRIDE;
145
146 void SetDelegate(SessionStateControllerDelegate* delegate); 88 void SetDelegate(SessionStateControllerDelegate* delegate);
147 89
148 // Returns true iff when we're in state when user session can be locked. 90 // Returns true iff when we're in state when user session can be locked.
149 virtual bool IsEligibleForLock(); 91 virtual bool IsEligibleForLock() = 0;
150 92
151 // Returns true if system is locked. 93 // Returns true if system is locked.
152 virtual bool IsLocked(); 94 virtual bool IsLocked() = 0;
153 95
154 // Starts locking (with slow animation) that can be cancelled. 96 // Starts locking (with slow animation) that can be cancelled.
155 // After locking and |kLockToShutdownTimeoutMs| StartShutdownAnimation() 97 // After locking and |kLockToShutdownTimeoutMs| StartShutdownAnimation()
156 // will be called unless CancelShutdown() is called. 98 // will be called unless CancelShutdownAnimation() is called, if
157 virtual void StartLockAnimation(); 99 // shutdown_after_lock is true.
100 virtual void StartLockAnimation(bool shutdown_after_lock) = 0;
158 101
159 // Starts shutting down (with slow animation) that can be cancelled. 102 // Starts shutting down (with slow animation) that can be cancelled.
160 virtual void StartShutdownAnimation(); 103 virtual void StartShutdownAnimation() = 0;
161 104
162 // Starts usual lock animation, but locks immediately. 105 // Starts usual lock animation, but locks immediately.
163 // Unlike StartLockAnimation it does no lead to StartShutdownAnimation. 106 // Unlike StartLockAnimation it does no lead to StartShutdownAnimation.
164 virtual void StartLockAnimationAndLockImmediately(); 107 virtual void StartLockAnimationAndLockImmediately() = 0;
165 108
166 // Returns true if we have requested system to lock, but haven't received 109 // Returns true if we have requested system to lock, but haven't received
167 // confirmation yet. 110 // confirmation yet.
168 virtual bool LockRequested(); 111 virtual bool LockRequested() = 0;
169 112
170 // Returns true if we are shutting down. 113 // Returns true if we are shutting down.
171 virtual bool ShutdownRequested(); 114 virtual bool ShutdownRequested() = 0;
172 115
173 // Returns true if we are within cancellable lock timeframe. 116 // Returns true if we are within cancellable lock timeframe.
174 virtual bool CanCancelLockAnimation(); 117 virtual bool CanCancelLockAnimation() = 0;
175 118
176 // Cancels locking and reverts lock animation. 119 // Cancels locking and reverts lock animation.
177 virtual void CancelLockAnimation(); 120 virtual void CancelLockAnimation() = 0;
178
179 // Cancels locking and reverts lock animation with slightly different
180 // parameters. Seems to be some bug, but refactoring should keep all bugs.
181 // TODO(antrim): remove this, animations should actually be the same.
182 virtual void CancelLockWithOtherAnimation();
183 121
184 // Returns true if we are within cancellable shutdown timeframe. 122 // Returns true if we are within cancellable shutdown timeframe.
185 virtual bool CanCancelShutdownAnimation(); 123 virtual bool CanCancelShutdownAnimation() = 0;
186 124
187 // Cancels shutting down and reverts shutdown animation. 125 // Cancels shutting down and reverts shutdown animation.
188 virtual void CancelShutdownAnimation(); 126 virtual void CancelShutdownAnimation() = 0;
189 127
190 // Called when Chrome gets a request to display the lock screen. 128 // Called when Chrome gets a request to display the lock screen.
191 virtual void OnStartingLock(); 129 virtual void OnStartingLock() = 0;
192 130
193 // Displays the shutdown animation and requests shutdown when it's done. 131 // Displays the shutdown animation and requests shutdown when it's done.
194 virtual void RequestShutdown(); 132 virtual void RequestShutdown() = 0;
195 133
196 protected: 134 protected:
197 friend class test::PowerButtonControllerTest; 135 friend class test::PowerButtonControllerTest;
198 136
199 bool IsLoggedInAsNonGuest() const; 137 bool IsLoggedInAsNonGuest() const;
200 138
201 private:
202 void RequestShutdownImpl();
203
204 // Starts lock timer.
205 void StartLockTimer();
206
207 // Requests that the screen be locked and starts |lock_fail_timer_|.
208 void OnLockTimeout();
209
210 // Reverts the pre-lock animation, reports the error.
211 void OnLockFailTimeout();
212
213 // Starts timer for gap between lock and shutdown.
214 void StartLockToShutdownTimer();
215
216 // Calls StartShutdownAnimation().
217 void OnLockToShutdownTimeout();
218
219 // Starts timer for undoable shutdown animation.
220 void StartPreShutdownAnimationTimer();
221
222 // Calls RequestShutdownImpl();
223 void OnPreShutdownAnimationTimeout();
224
225 // Starts timer for final shutdown animation.
226 void StartRealShutdownTimer();
227
228 // Requests that the machine be shut down.
229 void OnRealShutdownTimeout();
230
231 // The current login status.
232 user::LoginStatus login_status_;
233
234 // Original login status from before we locked. LOGGED_IN_NONE if it's not
235 // locked.
236 user::LoginStatus unlocked_login_status_;
237
238 // Are we in the process of shutting the machine down?
239 bool shutting_down_;
240
241 // Indicates whether controller should proceed to (cancellable) shutdown after
242 // locking.
243 bool shutdown_after_lock_;
244
245 // Started when the user first presses the power button while in a
246 // logged-in-as-a-non-guest-user, unlocked state. When it fires, we lock the
247 // screen.
248 base::OneShotTimer<SessionStateController> lock_timer_;
249
250 // Started when we request that the screen be locked. When it fires, we
251 // assume that our request got dropped.
252 base::OneShotTimer<SessionStateController> lock_fail_timer_;
253
254 // Started when the screen is locked while the power button is held. Adds a
255 // delay between the appearance of the lock screen and the beginning of the
256 // pre-shutdown animation.
257 base::OneShotTimer<SessionStateController> lock_to_shutdown_timer_;
258
259 // Started when we begin displaying the pre-shutdown animation. When it
260 // fires, we start the shutdown animation and get ready to request shutdown.
261 base::OneShotTimer<SessionStateController> pre_shutdown_timer_;
262
263 // Started when we display the shutdown animation. When it fires, we actually
264 // request shutdown. Gives the animation time to complete before Chrome, X,
265 // etc. are shut down.
266 base::OneShotTimer<SessionStateController> real_shutdown_timer_;
267
268 scoped_ptr<internal::SessionStateAnimator> animator_; 139 scoped_ptr<internal::SessionStateAnimator> animator_;
269 140
270 scoped_ptr<SessionStateControllerDelegate> delegate_; 141 scoped_ptr<SessionStateControllerDelegate> delegate_;
271 142
143 private:
272 DISALLOW_COPY_AND_ASSIGN(SessionStateController); 144 DISALLOW_COPY_AND_ASSIGN(SessionStateController);
273 }; 145 };
274 146
275 } // namespace ash 147 } // namespace ash
276 148
277 #endif // ASH_WM_SESSION_STATE_CONTROLLER_H_ 149 #endif // ASH_WM_SESSION_STATE_CONTROLLER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698