OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/managed_mode/managed_user_registration_utility.h" | 5 #include "chrome/browser/managed_mode/managed_user_registration_utility.h" |
6 | 6 |
7 #include "base/base64.h" | 7 #include "base/base64.h" |
8 #include "base/bind.h" | 8 #include "base/bind.h" |
9 #include "base/command_line.h" | |
10 #include "base/memory/scoped_ptr.h" | 9 #include "base/memory/scoped_ptr.h" |
11 #include "base/prefs/pref_service.h" | 10 #include "base/prefs/pref_service.h" |
12 #include "base/rand_util.h" | 11 #include "base/rand_util.h" |
13 #include "base/strings/utf_string_conversions.h" | 12 #include "base/strings/utf_string_conversions.h" |
14 #include "chrome/browser/managed_mode/managed_user_refresh_token_fetcher.h" | 13 #include "chrome/browser/managed_mode/managed_user_refresh_token_fetcher.h" |
15 #include "chrome/browser/managed_mode/managed_user_service.h" | 14 #include "chrome/browser/managed_mode/managed_user_service.h" |
16 #include "chrome/browser/managed_mode/managed_user_service_factory.h" | 15 #include "chrome/browser/managed_mode/managed_user_service_factory.h" |
17 #include "chrome/browser/managed_mode/managed_user_sync_service.h" | 16 #include "chrome/browser/managed_mode/managed_user_sync_service.h" |
18 #include "chrome/browser/managed_mode/managed_user_sync_service_factory.h" | 17 #include "chrome/browser/managed_mode/managed_user_sync_service_factory.h" |
19 #include "chrome/browser/prefs/scoped_user_pref_update.h" | 18 #include "chrome/browser/prefs/scoped_user_pref_update.h" |
20 #include "chrome/browser/signin/profile_oauth2_token_service.h" | 19 #include "chrome/browser/signin/profile_oauth2_token_service.h" |
21 #include "chrome/browser/signin/profile_oauth2_token_service_factory.h" | 20 #include "chrome/browser/signin/profile_oauth2_token_service_factory.h" |
22 #include "chrome/browser/sync/glue/device_info.h" | 21 #include "chrome/browser/sync/glue/device_info.h" |
23 #include "chrome/common/chrome_switches.h" | |
24 #include "chrome/common/pref_names.h" | 22 #include "chrome/common/pref_names.h" |
25 #include "google_apis/gaia/gaia_urls.h" | 23 #include "google_apis/gaia/gaia_urls.h" |
26 #include "google_apis/gaia/google_service_auth_error.h" | 24 #include "google_apis/gaia/google_service_auth_error.h" |
27 | 25 |
28 using base::DictionaryValue; | 26 using base::DictionaryValue; |
29 | 27 |
30 // How long to wait before aborting user registration. If this is changed, the | |
31 // histogram limits in the BrowserOptionsHandler should also be updated. | |
32 const int kRegistrationTimeoutMS = 30 * 1000; | |
33 const char kAcknowledged[] = "acknowledged"; | 28 const char kAcknowledged[] = "acknowledged"; |
34 const char kName[] = "name"; | 29 const char kName[] = "name"; |
35 const char kMasterKey[] = "masterKey"; | 30 const char kMasterKey[] = "masterKey"; |
36 | 31 |
37 ManagedUserRegistrationInfo::ManagedUserRegistrationInfo(const string16& name) | 32 ManagedUserRegistrationInfo::ManagedUserRegistrationInfo(const string16& name) |
38 : name(name) { | 33 : name(name) { |
39 } | 34 } |
40 | 35 |
41 ManagedUserRegistrationUtility::ManagedUserRegistrationUtility( | 36 ManagedUserRegistrationUtility::ManagedUserRegistrationUtility( |
42 PrefService* prefs, | 37 PrefService* prefs, |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
78 return new_managed_user_id; | 73 return new_managed_user_id; |
79 } | 74 } |
80 | 75 |
81 void ManagedUserRegistrationUtility::Register( | 76 void ManagedUserRegistrationUtility::Register( |
82 const std::string& managed_user_id, | 77 const std::string& managed_user_id, |
83 const ManagedUserRegistrationInfo& info, | 78 const ManagedUserRegistrationInfo& info, |
84 const RegistrationCallback& callback) { | 79 const RegistrationCallback& callback) { |
85 DCHECK(pending_managed_user_id_.empty()); | 80 DCHECK(pending_managed_user_id_.empty()); |
86 callback_ = callback; | 81 callback_ = callback; |
87 pending_managed_user_id_ = managed_user_id; | 82 pending_managed_user_id_ = managed_user_id; |
88 StartRegistrationTimer(); | |
89 | 83 |
90 const DictionaryValue* dict = prefs_->GetDictionary(prefs::kManagedUsers); | 84 const DictionaryValue* dict = prefs_->GetDictionary(prefs::kManagedUsers); |
91 is_existing_managed_user_ = dict->HasKey(managed_user_id); | 85 is_existing_managed_user_ = dict->HasKey(managed_user_id); |
92 if (!is_existing_managed_user_) { | 86 if (!is_existing_managed_user_) { |
93 managed_user_sync_service_->AddManagedUser(pending_managed_user_id_, | 87 managed_user_sync_service_->AddManagedUser(pending_managed_user_id_, |
94 base::UTF16ToUTF8(info.name), | 88 base::UTF16ToUTF8(info.name), |
95 info.master_key); | 89 info.master_key); |
96 } else { | 90 } else { |
97 // User already exists, don't wait for acknowledgment. | 91 // User already exists, don't wait for acknowledgment. |
98 OnManagedUserAcknowledged(managed_user_id); | 92 OnManagedUserAcknowledged(managed_user_id); |
99 } | 93 } |
100 | 94 |
101 browser_sync::DeviceInfo::GetClientName( | 95 browser_sync::DeviceInfo::GetClientName( |
102 base::Bind(&ManagedUserRegistrationUtility::FetchToken, | 96 base::Bind(&ManagedUserRegistrationUtility::FetchToken, |
103 weak_ptr_factory_.GetWeakPtr(), info.name)); | 97 weak_ptr_factory_.GetWeakPtr(), info.name)); |
104 } | 98 } |
105 | 99 |
106 void ManagedUserRegistrationUtility::StartRegistrationTimer() { | |
107 if (CommandLine::ForCurrentProcess()->HasSwitch( | |
108 switches::kNoManagedUserRegistrationTimeout)) { | |
109 return; | |
110 } | |
111 | |
112 registration_timer_.Start( | |
113 FROM_HERE, | |
114 base::TimeDelta::FromMilliseconds(kRegistrationTimeoutMS), | |
115 base::Bind( | |
116 &ManagedUserRegistrationUtility::AbortPendingRegistration, | |
117 weak_ptr_factory_.GetWeakPtr(), | |
118 true, // Run the callback. | |
119 GoogleServiceAuthError(GoogleServiceAuthError::CONNECTION_FAILED))); | |
120 } | |
121 | |
122 void ManagedUserRegistrationUtility::CancelPendingRegistration() { | 100 void ManagedUserRegistrationUtility::CancelPendingRegistration() { |
123 AbortPendingRegistration( | 101 AbortPendingRegistration( |
124 false, // Don't run the callback. The error will be ignored. | 102 false, // Don't run the callback. The error will be ignored. |
125 GoogleServiceAuthError(GoogleServiceAuthError::NONE)); | 103 GoogleServiceAuthError(GoogleServiceAuthError::NONE)); |
126 } | 104 } |
127 | 105 |
128 void ManagedUserRegistrationUtility::OnManagedUserAcknowledged( | 106 void ManagedUserRegistrationUtility::OnManagedUserAcknowledged( |
129 const std::string& managed_user_id) { | 107 const std::string& managed_user_id) { |
130 DCHECK_EQ(pending_managed_user_id_, managed_user_id); | 108 DCHECK_EQ(pending_managed_user_id_, managed_user_id); |
131 DCHECK(!pending_managed_user_acknowledged_); | 109 DCHECK(!pending_managed_user_acknowledged_); |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
174 void ManagedUserRegistrationUtility::AbortPendingRegistration( | 152 void ManagedUserRegistrationUtility::AbortPendingRegistration( |
175 bool run_callback, | 153 bool run_callback, |
176 const GoogleServiceAuthError& error) { | 154 const GoogleServiceAuthError& error) { |
177 pending_managed_user_token_.clear(); | 155 pending_managed_user_token_.clear(); |
178 CompleteRegistration(run_callback, error); | 156 CompleteRegistration(run_callback, error); |
179 } | 157 } |
180 | 158 |
181 void ManagedUserRegistrationUtility::CompleteRegistration( | 159 void ManagedUserRegistrationUtility::CompleteRegistration( |
182 bool run_callback, | 160 bool run_callback, |
183 const GoogleServiceAuthError& error) { | 161 const GoogleServiceAuthError& error) { |
184 registration_timer_.Stop(); | |
185 if (callback_.is_null()) | 162 if (callback_.is_null()) |
186 return; | 163 return; |
187 | 164 |
188 // We check that the user being registered is not an existing managed | 165 // We check that the user being registered is not an existing managed |
189 // user before deleting it from sync to avoid accidental deletion of | 166 // user before deleting it from sync to avoid accidental deletion of |
190 // existing managed users by just canceling the registration for example. | 167 // existing managed users by just canceling the registration for example. |
191 if (pending_managed_user_token_.empty() && !is_existing_managed_user_) { | 168 if (pending_managed_user_token_.empty() && !is_existing_managed_user_) { |
192 DCHECK(!pending_managed_user_id_.empty()); | 169 DCHECK(!pending_managed_user_id_.empty()); |
193 // Remove the pending managed user if we weren't successful. | 170 // Remove the pending managed user if we weren't successful. |
194 DictionaryPrefUpdate update(prefs_, prefs::kManagedUsers); | 171 DictionaryPrefUpdate update(prefs_, prefs::kManagedUsers); |
195 bool success = | 172 bool success = |
196 update->RemoveWithoutPathExpansion(pending_managed_user_id_, NULL); | 173 update->RemoveWithoutPathExpansion(pending_managed_user_id_, NULL); |
197 DCHECK(success); | 174 DCHECK(success); |
198 managed_user_sync_service_->DeleteManagedUser(pending_managed_user_id_); | 175 managed_user_sync_service_->DeleteManagedUser(pending_managed_user_id_); |
199 } | 176 } |
200 | 177 |
201 if (run_callback) | 178 if (run_callback) |
202 callback_.Run(error, pending_managed_user_token_); | 179 callback_.Run(error, pending_managed_user_token_); |
203 callback_.Reset(); | 180 callback_.Reset(); |
204 } | 181 } |
OLD | NEW |