OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 CHROME_BROWSER_CHROMEOS_ARC_ARC_SESSION_MANAGER_H_ | 5 #ifndef CHROME_BROWSER_CHROMEOS_ARC_ARC_SESSION_MANAGER_H_ |
6 #define CHROME_BROWSER_CHROMEOS_ARC_ARC_SESSION_MANAGER_H_ | 6 #define CHROME_BROWSER_CHROMEOS_ARC_ARC_SESSION_MANAGER_H_ |
7 | 7 |
8 #include <memory> | 8 #include <memory> |
9 #include <ostream> | 9 #include <ostream> |
10 #include <string> | 10 #include <string> |
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
166 // enabled or disabled. Please see also TODO of | 166 // enabled or disabled. Please see also TODO of |
167 // SetArcPlayStoreEnabledForProfile(). | 167 // SetArcPlayStoreEnabledForProfile(). |
168 void RequestEnable(); | 168 void RequestEnable(); |
169 | 169 |
170 // Requests to disable ARC session. This stops ARC instance, or quits Terms | 170 // Requests to disable ARC session. This stops ARC instance, or quits Terms |
171 // Of Service negotiation if it is the middle of the process (e.g. closing | 171 // Of Service negotiation if it is the middle of the process (e.g. closing |
172 // UI for manual negotiation if it is shown). | 172 // UI for manual negotiation if it is shown). |
173 // If it is already requested to disable, no-op. | 173 // If it is already requested to disable, no-op. |
174 void RequestDisable(); | 174 void RequestDisable(); |
175 | 175 |
| 176 // Requests to remove the ARC data. |
| 177 // If ARC is stopped, triggers to remove the data. Otherwise, queues to |
| 178 // remove the data after ARC stops. |
| 179 // A log statement with the removal reason must be added prior to calling |
| 180 // this. |
| 181 void RequestArcDataRemoval(); |
| 182 |
176 // Called from the Chrome OS metrics provider to record Arc.State | 183 // Called from the Chrome OS metrics provider to record Arc.State |
177 // periodically. | 184 // periodically. |
178 void RecordArcState(); | 185 void RecordArcState(); |
179 | 186 |
180 // ArcSupportHost::Observer: | 187 // ArcSupportHost::Observer: |
181 void OnWindowClosed() override; | 188 void OnWindowClosed() override; |
182 void OnTermsAgreed(bool is_metrics_enabled, | 189 void OnTermsAgreed(bool is_metrics_enabled, |
183 bool is_backup_and_restore_enabled, | 190 bool is_backup_and_restore_enabled, |
184 bool is_location_service_enabled) override; | 191 bool is_location_service_enabled) override; |
185 void OnRetryClicked() override; | 192 void OnRetryClicked() override; |
186 void OnSendFeedbackClicked() override; | 193 void OnSendFeedbackClicked() override; |
187 | 194 |
188 // StopArc(), then restart. Between them data clear may happens. | 195 // StopArc(), then restart. Between them data clear may happens. |
189 // This is a special method to support enterprise device lost case. | 196 // This is a special method to support enterprise device lost case. |
190 // This can be called only when ARC is running. | 197 // This can be called only when ARC is running. |
191 void StopAndEnableArc(); | 198 void StopAndEnableArc(); |
192 | 199 |
193 // Removes the data if ARC is stopped. Otherwise, queue to remove the data | |
194 // on ARC is stopped. A log statement with the removal reason must be added | |
195 // prior to calling RemoveArcData(). | |
196 void RemoveArcData(); | |
197 | |
198 ArcSupportHost* support_host() { return support_host_.get(); } | 200 ArcSupportHost* support_host() { return support_host_.get(); } |
199 | 201 |
200 // TODO(hidehiko): Get rid of the getter by migration between ArcAuthContext | 202 // TODO(hidehiko): Get rid of the getter by migration between ArcAuthContext |
201 // and ArcAuthInfoFetcher. | 203 // and ArcAuthInfoFetcher. |
202 ArcAuthContext* auth_context() { return context_.get(); } | 204 ArcAuthContext* auth_context() { return context_.get(); } |
203 | 205 |
204 // On provisioning completion (regardless of whether successfully done or | 206 // On provisioning completion (regardless of whether successfully done or |
205 // not), this is called with its status. On success, called with | 207 // not), this is called with its status. On success, called with |
206 // ProvisioningResult::SUCCESS, otherwise |result| is the error reason. | 208 // ProvisioningResult::SUCCESS, otherwise |result| is the error reason. |
207 void OnProvisioningFinished(ProvisioningResult result); | 209 void OnProvisioningFinished(ProvisioningResult result); |
(...skipping 17 matching lines...) Expand all Loading... |
225 | 227 |
226 // Invoking StartArc() only for testing, e.g., to emulate accepting Terms of | 228 // Invoking StartArc() only for testing, e.g., to emulate accepting Terms of |
227 // Service then passing Android management check successfully. | 229 // Service then passing Android management check successfully. |
228 void StartArcForTesting() { StartArc(); } | 230 void StartArcForTesting() { StartArc(); } |
229 | 231 |
230 private: | 232 private: |
231 // RequestEnable() has a check in order not to trigger starting procedure | 233 // RequestEnable() has a check in order not to trigger starting procedure |
232 // twice. This method can be called to bypass that check when restarting. | 234 // twice. This method can be called to bypass that check when restarting. |
233 void RequestEnableImpl(); | 235 void RequestEnableImpl(); |
234 | 236 |
235 // Negotiates the terms of service to user. | 237 // Negotiates the terms of service to user, if necessary. |
236 void StartTermsOfServiceNegotiation(); | 238 // Otherwise, move to StartAndroidManagementCheck(). |
| 239 void MaybeStartTermsOfServiceNegotiation(); |
237 void OnTermsOfServiceNegotiated(bool accepted); | 240 void OnTermsOfServiceNegotiated(bool accepted); |
238 | 241 |
239 // Returns true if Terms of Service negotiation is needed. Otherwise false. | 242 // Returns true if Terms of Service negotiation is needed. Otherwise false. |
240 // TODO(crbug.com/698418): Write unittest for this utility after extracting | 243 // TODO(crbug.com/698418): Write unittest for this utility after extracting |
241 // ToS related code from ArcSessionManager into a dedicated class. | 244 // ToS related code from ArcSessionManager into a dedicated class. |
242 bool IsArcTermsOfServiceNegotiationNeeded() const; | 245 bool IsArcTermsOfServiceNegotiationNeeded() const; |
243 | 246 |
244 void SetState(State state); | 247 void SetState(State state); |
245 void ShutdownSession(); | 248 void ShutdownSession(); |
246 void OnArcDataRemoved(bool success); | |
247 void OnArcSignInTimeout(); | 249 void OnArcSignInTimeout(); |
248 | 250 |
249 // Starts Android management check. This is for first boot case (= Opt-in | 251 // Starts Android management check. This is for first boot case (= Opt-in |
250 // or OOBE flow case). In secondary or later ARC enabling, the check should | 252 // or OOBE flow case). In secondary or later ARC enabling, the check should |
251 // run in background. | 253 // run in background. |
252 void StartAndroidManagementCheck(); | 254 void StartAndroidManagementCheck(); |
253 | 255 |
254 // Called when the Android management check is done in opt-in flow or | 256 // Called when the Android management check is done in opt-in flow or |
255 // OOBE flow. | 257 // OOBE flow. |
256 void OnAndroidManagementChecked( | 258 void OnAndroidManagementChecked( |
(...skipping 20 matching lines...) Expand all Loading... |
277 // Requests to stop ARC instnace. This resets two persistent flags: | 279 // Requests to stop ARC instnace. This resets two persistent flags: |
278 // kArcSignedIn and kArcTermsAccepted, so that, in next enabling, | 280 // kArcSignedIn and kArcTermsAccepted, so that, in next enabling, |
279 // it is started from Terms of Service negotiation. | 281 // it is started from Terms of Service negotiation. |
280 // TODO(hidehiko): Introduce STOPPING state, and this function should | 282 // TODO(hidehiko): Introduce STOPPING state, and this function should |
281 // transition to it. | 283 // transition to it. |
282 void StopArc(); | 284 void StopArc(); |
283 | 285 |
284 // ArcSessionRunner::Observer: | 286 // ArcSessionRunner::Observer: |
285 void OnSessionStopped(ArcStopReason reason, bool restarting) override; | 287 void OnSessionStopped(ArcStopReason reason, bool restarting) override; |
286 | 288 |
| 289 // Starts to remove ARC data, if it is requested via RequestArcDataRemoval(). |
| 290 // On completion, OnArcDataRemoved() is called. |
| 291 // If not requested, just skipping the data removal, and moves to |
| 292 // MaybeReenableArc() directly. |
| 293 void MaybeStartArcDataRemoval(); |
| 294 void OnArcDataRemoved(bool success); |
| 295 |
287 // On ARC session stopped and/or data removal completion, this is called | 296 // On ARC session stopped and/or data removal completion, this is called |
288 // so that, if necessary, ARC session is restarted. | 297 // so that, if necessary, ARC session is restarted. |
289 // TODO(hidehiko): This can be removed after the racy state machine | 298 // TODO(hidehiko): This can be removed after the racy state machine |
290 // is fixed. | 299 // is fixed. |
291 void MaybeReenableArc(); | 300 void MaybeReenableArc(); |
292 | 301 |
293 std::unique_ptr<ArcSessionRunner> arc_session_runner_; | 302 std::unique_ptr<ArcSessionRunner> arc_session_runner_; |
294 | 303 |
295 // Unowned pointer. Keeps current profile. | 304 // Unowned pointer. Keeps current profile. |
296 Profile* profile_ = nullptr; | 305 Profile* profile_ = nullptr; |
(...skipping 29 matching lines...) Expand all Loading... |
326 DISALLOW_COPY_AND_ASSIGN(ArcSessionManager); | 335 DISALLOW_COPY_AND_ASSIGN(ArcSessionManager); |
327 }; | 336 }; |
328 | 337 |
329 // Outputs the stringified |state| to |os|. This is only for logging purposes. | 338 // Outputs the stringified |state| to |os|. This is only for logging purposes. |
330 std::ostream& operator<<(std::ostream& os, | 339 std::ostream& operator<<(std::ostream& os, |
331 const ArcSessionManager::State& state); | 340 const ArcSessionManager::State& state); |
332 | 341 |
333 } // namespace arc | 342 } // namespace arc |
334 | 343 |
335 #endif // CHROME_BROWSER_CHROMEOS_ARC_ARC_SESSION_MANAGER_H_ | 344 #endif // CHROME_BROWSER_CHROMEOS_ARC_ARC_SESSION_MANAGER_H_ |
OLD | NEW |