| 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 24 matching lines...) Expand all Loading... |
| 35 // This class proxies the request from the client to fetch an auth code from | 35 // This class proxies the request from the client to fetch an auth code from |
| 36 // LSO. It lives on the UI thread. | 36 // LSO. It lives on the UI thread. |
| 37 class ArcSessionManager : public ArcSessionRunner::Observer, | 37 class ArcSessionManager : public ArcSessionRunner::Observer, |
| 38 public ArcSupportHost::Observer { | 38 public ArcSupportHost::Observer { |
| 39 public: | 39 public: |
| 40 // Represents each State of ARC session. | 40 // Represents each State of ARC session. |
| 41 // NOT_INITIALIZED: represents the state that the Profile is not yet ready | 41 // NOT_INITIALIZED: represents the state that the Profile is not yet ready |
| 42 // so that this service is not yet initialized, or Chrome is being shut | 42 // so that this service is not yet initialized, or Chrome is being shut |
| 43 // down so that this is destroyed. | 43 // down so that this is destroyed. |
| 44 // STOPPED: ARC session is not running, or being terminated. | 44 // STOPPED: ARC session is not running, or being terminated. |
| 45 // SHOWING_TERMS_OF_SERVICE: "Terms Of Service" page is shown on ARC support | 45 // NEGOTIATING_TERMS_OF_SERVICE: Negotiating Google Play Store "Terms of |
| 46 // Chrome app. | 46 // Service" with a user. There are several ways for the negotiation, |
| 47 // including opt-in flow, which shows "Terms of Service" page on ARC |
| 48 // support app, and OOBE flow, which shows "Terms of Service" page as a |
| 49 // part of Chrome OOBE flow. |
| 50 // If user does not accept the Terms of Service, disables Google Play |
| 51 // Store, which triggers RequestDisable() and the state will be set to |
| 52 // STOPPED, then. |
| 47 // CHECKING_ANDROID_MANAGEMENT: Checking Android management status. Note that | 53 // CHECKING_ANDROID_MANAGEMENT: Checking Android management status. Note that |
| 48 // the status is checked for each ARC session starting, but this is the | 54 // the status is checked for each ARC session starting, but this is the |
| 49 // state only for the first boot case (= opt-in case). The second time and | 55 // state only for the first boot case (= opt-in case). The second time and |
| 50 // later the management check is running in parallel with ARC session | 56 // later the management check is running in parallel with ARC session |
| 51 // starting, and in such a case, State is ACTIVE, instead. | 57 // starting, and in such a case, State is ACTIVE, instead. |
| 52 // REMOVING_DATA_DIR: When ARC is disabled, the data directory is removed. | 58 // REMOVING_DATA_DIR: When ARC is disabled, the data directory is removed. |
| 53 // While removing is processed, ARC cannot be started. This is the state. | 59 // While removing is processed, ARC cannot be started. This is the state. |
| 54 // ACTIVE: ARC is running. | 60 // ACTIVE: ARC is running. |
| 55 // | 61 // |
| 56 // State transition should be as follows: | 62 // State transition should be as follows: |
| 57 // | 63 // |
| 58 // NOT_INITIALIZED -> STOPPED: when the primary Profile gets ready. | 64 // NOT_INITIALIZED -> STOPPED: when the primary Profile gets ready. |
| 59 // ...(any)... -> NOT_INITIALIZED: when the Chrome is being shutdown. | 65 // ...(any)... -> NOT_INITIALIZED: when the Chrome is being shutdown. |
| 60 // ...(any)... -> STOPPED: on error. | 66 // ...(any)... -> STOPPED: on error. |
| 61 // | 67 // |
| 62 // In the first boot case: | 68 // In the first boot case: |
| 63 // STOPPED -> SHOWING_TERMS_OF_SERVICE: when arc.enabled preference is set. | 69 // STOPPED -> NEGOTIATING_TERMS_OF_SERVICE: On request to enable. |
| 64 // SHOWING_TERMS_OF_SERVICE -> CHECKING_ANDROID_MANAGEMENT: when a user | 70 // NEGOTIATING_TERMS_OF_SERVICE -> CHECKING_ANDROID_MANAGEMENT: when a user |
| 65 // agree with "Terms Of Service" | 71 // accepts "Terms Of Service" |
| 66 // CHECKING_ANDROID_MANAGEMENT -> ACTIVE: when the auth token is | 72 // CHECKING_ANDROID_MANAGEMENT -> ACTIVE: when the auth token is |
| 67 // successfully fetched. | 73 // successfully fetched. |
| 68 // | 74 // |
| 69 // In the second (or later) boot case: | 75 // In the second (or later) boot case: |
| 70 // STOPPED -> ACTIVE: when arc.enabled preference is checked that it is | 76 // STOPPED -> ACTIVE: when arc.enabled preference is checked that it is |
| 71 // true. Practically, this is when the primary Profile gets ready. | 77 // true. Practically, this is when the primary Profile gets ready. |
| 72 // | 78 // |
| 73 // TODO(hidehiko): Fix the state machine, and update the comment including | 79 // TODO(hidehiko): Fix the state machine, and update the comment including |
| 74 // relationship with |enable_requested_|. | 80 // relationship with |enable_requested_|. |
| 75 enum class State { | 81 enum class State { |
| 76 NOT_INITIALIZED, | 82 NOT_INITIALIZED, |
| 77 STOPPED, | 83 STOPPED, |
| 78 SHOWING_TERMS_OF_SERVICE, | 84 NEGOTIATING_TERMS_OF_SERVICE, |
| 79 CHECKING_ANDROID_MANAGEMENT, | 85 CHECKING_ANDROID_MANAGEMENT, |
| 80 REMOVING_DATA_DIR, | 86 REMOVING_DATA_DIR, |
| 81 ACTIVE, | 87 ACTIVE, |
| 82 }; | 88 }; |
| 83 | 89 |
| 84 // Observer for those services outside of ARC which want to know ARC events. | 90 // Observer for those services outside of ARC which want to know ARC events. |
| 85 class Observer { | 91 class Observer { |
| 86 public: | 92 public: |
| 87 // Called to notify that whether Google Play Store is enabled or not, which | 93 // Called to notify that whether Google Play Store is enabled or not, which |
| 88 // is represented by "arc.enabled" preference, is updated. | 94 // is represented by "arc.enabled" preference, is updated. |
| (...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 223 | 229 |
| 224 private: | 230 private: |
| 225 // RequestEnable() has a check in order not to trigger starting procedure | 231 // RequestEnable() has a check in order not to trigger starting procedure |
| 226 // twice. This method can be called to bypass that check when restarting. | 232 // twice. This method can be called to bypass that check when restarting. |
| 227 void RequestEnableImpl(); | 233 void RequestEnableImpl(); |
| 228 | 234 |
| 229 // Negotiates the terms of service to user. | 235 // Negotiates the terms of service to user. |
| 230 void StartTermsOfServiceNegotiation(); | 236 void StartTermsOfServiceNegotiation(); |
| 231 void OnTermsOfServiceNegotiated(bool accepted); | 237 void OnTermsOfServiceNegotiated(bool accepted); |
| 232 | 238 |
| 239 // Returns true if Terms of Service negotiation is needed. Otherwise false. |
| 240 // TODO(crbug.com/698418): Write unittest for this utility after extracting |
| 241 // ToS related code from ArcSessionManager into a dedicated class. |
| 242 bool IsArcTermsOfServiceNegotiationNeeded() const; |
| 243 |
| 233 void SetState(State state); | 244 void SetState(State state); |
| 234 void ShutdownSession(); | 245 void ShutdownSession(); |
| 235 void OnArcDataRemoved(bool success); | 246 void OnArcDataRemoved(bool success); |
| 236 void OnArcSignInTimeout(); | 247 void OnArcSignInTimeout(); |
| 237 | 248 |
| 238 // Starts Android management check. This is for first boot case (= Opt-in | 249 // Starts Android management check. This is for first boot case (= Opt-in |
| 239 // or OOBE flow case). In secondary or later ARC enabling, the check should | 250 // or OOBE flow case). In secondary or later ARC enabling, the check should |
| 240 // run in background. | 251 // run in background. |
| 241 void StartAndroidManagementCheck(); | 252 void StartAndroidManagementCheck(); |
| 242 | 253 |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 315 DISALLOW_COPY_AND_ASSIGN(ArcSessionManager); | 326 DISALLOW_COPY_AND_ASSIGN(ArcSessionManager); |
| 316 }; | 327 }; |
| 317 | 328 |
| 318 // Outputs the stringified |state| to |os|. This is only for logging purposes. | 329 // Outputs the stringified |state| to |os|. This is only for logging purposes. |
| 319 std::ostream& operator<<(std::ostream& os, | 330 std::ostream& operator<<(std::ostream& os, |
| 320 const ArcSessionManager::State& state); | 331 const ArcSessionManager::State& state); |
| 321 | 332 |
| 322 } // namespace arc | 333 } // namespace arc |
| 323 | 334 |
| 324 #endif // CHROME_BROWSER_CHROMEOS_ARC_ARC_SESSION_MANAGER_H_ | 335 #endif // CHROME_BROWSER_CHROMEOS_ARC_ARC_SESSION_MANAGER_H_ |
| OLD | NEW |