OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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/login_utils.h" | 5 #include "chrome/browser/chromeos/login/login_utils.h" |
6 | 6 |
7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
8 #include "base/file_path.h" | 8 #include "base/file_path.h" |
9 #include "base/file_util.h" | 9 #include "base/file_util.h" |
10 #include "base/lock.h" | 10 #include "base/lock.h" |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
43 namespace { | 43 namespace { |
44 | 44 |
45 const int kWifiTimeoutInMS = 30000; | 45 const int kWifiTimeoutInMS = 30000; |
46 static char kIncognitoUser[] = "incognito"; | 46 static char kIncognitoUser[] = "incognito"; |
47 | 47 |
48 // Prefix for Auth token received from ClientLogin request. | 48 // Prefix for Auth token received from ClientLogin request. |
49 const char kAuthPrefix[] = "Auth="; | 49 const char kAuthPrefix[] = "Auth="; |
50 // Suffix for Auth token received from ClientLogin request. | 50 // Suffix for Auth token received from ClientLogin request. |
51 const char kAuthSuffix[] = "\n"; | 51 const char kAuthSuffix[] = "\n"; |
52 | 52 |
53 // Find Auth token in given response from ClientLogin request. | |
54 // Returns the token if found, empty string otherwise. | |
55 std::string get_auth_token(const std::string& credentials) { | |
56 size_t auth_start = credentials.find(kAuthPrefix); | |
57 if (auth_start == std::string::npos) | |
58 return std::string(); | |
59 auth_start += arraysize(kAuthPrefix) - 1; | |
60 size_t auth_end = credentials.find(kAuthSuffix, auth_start); | |
61 if (auth_end == std::string::npos) | |
62 return std::string(); | |
63 return credentials.substr(auth_start, auth_end - auth_start); | |
64 } | |
65 | |
66 } // namespace | 53 } // namespace |
67 | 54 |
68 class LoginUtilsImpl : public LoginUtils, | 55 class LoginUtilsImpl : public LoginUtils, |
69 public NotificationObserver { | 56 public NotificationObserver { |
70 public: | 57 public: |
71 LoginUtilsImpl() | 58 LoginUtilsImpl() |
72 : wifi_connecting_(false), | 59 : wifi_connecting_(false), |
73 browser_launch_enabled_(true) { | 60 browser_launch_enabled_(true) { |
74 registrar_.Add( | 61 registrar_.Add( |
75 this, | 62 this, |
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
211 | 198 |
212 | 199 |
213 // Take the credentials passed in and try to exchange them for | 200 // Take the credentials passed in and try to exchange them for |
214 // full-fledged Google authentication cookies. This is | 201 // full-fledged Google authentication cookies. This is |
215 // best-effort; it's possible that we'll fail due to network | 202 // best-effort; it's possible that we'll fail due to network |
216 // troubles or some such. Either way, |cf| will call | 203 // troubles or some such. Either way, |cf| will call |
217 // DoBrowserLaunch on the UI thread when it's done, and then | 204 // DoBrowserLaunch on the UI thread when it's done, and then |
218 // delete itself. | 205 // delete itself. |
219 CookieFetcher* cf = new CookieFetcher(profile); | 206 CookieFetcher* cf = new CookieFetcher(profile); |
220 cf->AttemptFetch(credentials); | 207 cf->AttemptFetch(credentials); |
221 auth_token_ = get_auth_token(credentials); | 208 auth_token_ = ExtractClientLoginParam(credentials, kAuthPrefix, kAuthSuffix); |
222 } | 209 } |
223 | 210 |
224 void LoginUtilsImpl::CompleteOffTheRecordLogin() { | 211 void LoginUtilsImpl::CompleteOffTheRecordLogin() { |
225 LOG(INFO) << "Completing off the record login"; | 212 LOG(INFO) << "Completing off the record login"; |
226 | 213 |
227 if (CrosLibrary::Get()->EnsureLoaded()) | 214 if (CrosLibrary::Get()->EnsureLoaded()) |
228 CrosLibrary::Get()->GetLoginLibrary()->StartSession(kIncognitoUser, ""); | 215 CrosLibrary::Get()->GetLoginLibrary()->StartSession(kIncognitoUser, ""); |
229 | 216 |
230 // Incognito flag is not set by default. | 217 // Incognito flag is not set by default. |
231 CommandLine::ForCurrentProcess()->AppendSwitch(switches::kIncognito); | 218 CommandLine::ForCurrentProcess()->AppendSwitch(switches::kIncognito); |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
288 LOG(INFO) << "Launching browser..."; | 275 LOG(INFO) << "Launching browser..."; |
289 BrowserInit browser_init; | 276 BrowserInit browser_init; |
290 int return_code; | 277 int return_code; |
291 browser_init.LaunchBrowser(*CommandLine::ForCurrentProcess(), | 278 browser_init.LaunchBrowser(*CommandLine::ForCurrentProcess(), |
292 profile, | 279 profile, |
293 std::wstring(), | 280 std::wstring(), |
294 true, | 281 true, |
295 &return_code); | 282 &return_code); |
296 } | 283 } |
297 | 284 |
| 285 std::string LoginUtils::ExtractClientLoginParam( |
| 286 const std::string& credentials, |
| 287 const std::string& param_prefix, |
| 288 const std::string& param_suffix) { |
| 289 size_t start = credentials.find(param_prefix); |
| 290 if (start == std::string::npos) |
| 291 return std::string(); |
| 292 start += param_prefix.size(); |
| 293 size_t end = credentials.find(param_suffix, start); |
| 294 if (end == std::string::npos) |
| 295 return std::string(); |
| 296 return credentials.substr(start, end - start); |
| 297 } |
| 298 |
298 } // namespace chromeos | 299 } // namespace chromeos |
OLD | NEW |