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/lock.h" | 9 #include "base/lock.h" |
10 #include "base/nss_util.h" | 10 #include "base/nss_util.h" |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
81 const std::string& credentials); | 81 const std::string& credentials); |
82 | 82 |
83 // Invoked after the tmpfs is successfully mounted. | 83 // Invoked after the tmpfs is successfully mounted. |
84 // Launches a browser in the off the record (incognito) mode. | 84 // Launches a browser in the off the record (incognito) mode. |
85 virtual void CompleteOffTheRecordLogin(); | 85 virtual void CompleteOffTheRecordLogin(); |
86 | 86 |
87 // Creates and returns the authenticator to use. The caller owns the returned | 87 // Creates and returns the authenticator to use. The caller owns the returned |
88 // Authenticator and must delete it when done. | 88 // Authenticator and must delete it when done. |
89 virtual Authenticator* CreateAuthenticator(LoginStatusConsumer* consumer); | 89 virtual Authenticator* CreateAuthenticator(LoginStatusConsumer* consumer); |
90 | 90 |
91 // Used to postpone browser launch via DoBrowserLaunch() if some post | |
92 // login screen is to be shown. | |
93 virtual void EnableBrowserLaunch(bool enable); | |
94 | |
95 // Returns if browser launch enabled now or not. | |
96 virtual bool IsBrowserLaunchEnabled() const; | |
97 | |
98 // Returns auth token for 'cp' Contacts service. | |
99 virtual const std::string& GetAuthToken() const { return auth_token_; } | |
100 | |
101 // NotificationObserver implementation. | 91 // NotificationObserver implementation. |
102 virtual void Observe(NotificationType type, | 92 virtual void Observe(NotificationType type, |
103 const NotificationSource& source, | 93 const NotificationSource& source, |
104 const NotificationDetails& details); | 94 const NotificationDetails& details); |
105 | 95 |
106 private: | 96 private: |
107 // Attempt to connect to the preferred network if available. | 97 // Attempt to connect to the preferred network if available. |
108 void ConnectToPreferredNetwork(); | 98 void ConnectToPreferredNetwork(); |
109 | 99 |
110 NotificationRegistrar registrar_; | 100 NotificationRegistrar registrar_; |
111 bool wifi_connecting_; | 101 bool wifi_connecting_; |
112 base::Time wifi_connect_start_time_; | 102 base::Time wifi_connect_start_time_; |
113 | 103 |
114 // Indicates if DoBrowserLaunch will actually launch the browser or not. | |
115 bool browser_launch_enabled_; | |
116 | |
117 // Auth token for Contacts service. Received by GoogleAuthenticator as | |
118 // part of ClientLogin response. | |
119 std::string auth_token_; | |
120 | |
121 DISALLOW_COPY_AND_ASSIGN(LoginUtilsImpl); | 104 DISALLOW_COPY_AND_ASSIGN(LoginUtilsImpl); |
122 }; | 105 }; |
123 | 106 |
124 class LoginUtilsWrapper { | 107 class LoginUtilsWrapper { |
125 public: | 108 public: |
126 LoginUtilsWrapper() {} | 109 LoginUtilsWrapper() {} |
127 | 110 |
128 LoginUtils* get() { | 111 LoginUtils* get() { |
129 AutoLock create(create_lock_); | 112 AutoLock create(create_lock_); |
130 if (!ptr_.get()) | 113 if (!ptr_.get()) |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
185 Profile* profile = profile_manager->GetDefaultProfile(user_data_dir); | 168 Profile* profile = profile_manager->GetDefaultProfile(user_data_dir); |
186 | 169 |
187 // Take the credentials passed in and try to exchange them for | 170 // Take the credentials passed in and try to exchange them for |
188 // full-fledged Google authentication cookies. This is | 171 // full-fledged Google authentication cookies. This is |
189 // best-effort; it's possible that we'll fail due to network | 172 // best-effort; it's possible that we'll fail due to network |
190 // troubles or some such. Either way, |cf| will call | 173 // troubles or some such. Either way, |cf| will call |
191 // DoBrowserLaunch on the UI thread when it's done, and then | 174 // DoBrowserLaunch on the UI thread when it's done, and then |
192 // delete itself. | 175 // delete itself. |
193 CookieFetcher* cf = new CookieFetcher(profile); | 176 CookieFetcher* cf = new CookieFetcher(profile); |
194 cf->AttemptFetch(credentials); | 177 cf->AttemptFetch(credentials); |
195 auth_token_ = get_auth_token(credentials); | 178 std::string auth = get_auth_token(credentials); |
| 179 if (!auth.empty()) |
| 180 new UserImageDownloader(username, auth); |
196 } | 181 } |
197 | 182 |
198 void LoginUtilsImpl::CompleteOffTheRecordLogin() { | 183 void LoginUtilsImpl::CompleteOffTheRecordLogin() { |
199 LOG(INFO) << "Completing off the record login"; | 184 LOG(INFO) << "Completing off the record login"; |
200 | 185 |
201 if (CrosLibrary::Get()->EnsureLoaded()) | 186 if (CrosLibrary::Get()->EnsureLoaded()) |
202 CrosLibrary::Get()->GetLoginLibrary()->StartSession(kIncognitoUser, ""); | 187 CrosLibrary::Get()->GetLoginLibrary()->StartSession(kIncognitoUser, ""); |
203 | 188 |
204 // Incognito flag is not set by default. | 189 // Incognito flag is not set by default. |
205 CommandLine::ForCurrentProcess()->AppendSwitch(switches::kIncognito); | 190 CommandLine::ForCurrentProcess()->AppendSwitch(switches::kIncognito); |
206 | 191 |
207 UserManager::Get()->OffTheRecordUserLoggedIn(); | 192 UserManager::Get()->OffTheRecordUserLoggedIn(); |
208 ConnectToPreferredNetwork(); | 193 ConnectToPreferredNetwork(); |
209 LoginUtils::DoBrowserLaunch( | 194 LoginUtils::DoBrowserLaunch( |
210 ProfileManager::GetDefaultProfile()->GetOffTheRecordProfile()); | 195 ProfileManager::GetDefaultProfile()->GetOffTheRecordProfile()); |
211 } | 196 } |
212 | 197 |
213 Authenticator* LoginUtilsImpl::CreateAuthenticator( | 198 Authenticator* LoginUtilsImpl::CreateAuthenticator( |
214 LoginStatusConsumer* consumer) { | 199 LoginStatusConsumer* consumer) { |
215 return new GoogleAuthenticator(consumer); | 200 return new GoogleAuthenticator(consumer); |
216 } | 201 } |
217 | 202 |
218 void LoginUtilsImpl::EnableBrowserLaunch(bool enable) { | |
219 browser_launch_enabled_ = enable; | |
220 } | |
221 | |
222 bool LoginUtilsImpl::IsBrowserLaunchEnabled() const { | |
223 return browser_launch_enabled_; | |
224 } | |
225 | |
226 void LoginUtilsImpl::Observe(NotificationType type, | 203 void LoginUtilsImpl::Observe(NotificationType type, |
227 const NotificationSource& source, | 204 const NotificationSource& source, |
228 const NotificationDetails& details) { | 205 const NotificationDetails& details) { |
229 if (type == NotificationType::LOGIN_USER_CHANGED) | 206 if (type == NotificationType::LOGIN_USER_CHANGED) |
230 base::OpenPersistentNSSDB(); | 207 base::OpenPersistentNSSDB(); |
231 } | 208 } |
232 | 209 |
233 void LoginUtilsImpl::ConnectToPreferredNetwork() { | 210 void LoginUtilsImpl::ConnectToPreferredNetwork() { |
234 NetworkLibrary* cros = CrosLibrary::Get()->GetNetworkLibrary(); | 211 NetworkLibrary* cros = CrosLibrary::Get()->GetNetworkLibrary(); |
235 wifi_connecting_ = cros->ConnectToPreferredNetworkIfAvailable(); | 212 wifi_connecting_ = cros->ConnectToPreferredNetworkIfAvailable(); |
(...skipping 11 matching lines...) Expand all Loading... |
247 | 224 |
248 void LoginUtils::DoBrowserLaunch(Profile* profile) { | 225 void LoginUtils::DoBrowserLaunch(Profile* profile) { |
249 // If we should wait for wifi connection, post this task with a 100ms delay. | 226 // If we should wait for wifi connection, post this task with a 100ms delay. |
250 if (LoginUtils::Get()->ShouldWaitForWifi()) { | 227 if (LoginUtils::Get()->ShouldWaitForWifi()) { |
251 ChromeThread::PostDelayedTask( | 228 ChromeThread::PostDelayedTask( |
252 ChromeThread::UI, FROM_HERE, | 229 ChromeThread::UI, FROM_HERE, |
253 NewRunnableFunction(&LoginUtils::DoBrowserLaunch, profile), 100); | 230 NewRunnableFunction(&LoginUtils::DoBrowserLaunch, profile), 100); |
254 return; | 231 return; |
255 } | 232 } |
256 | 233 |
257 // Browser launch was disabled due to some post login screen. | |
258 if (!LoginUtils::Get()->IsBrowserLaunchEnabled()) | |
259 return; | |
260 | |
261 LOG(INFO) << "Launching browser..."; | 234 LOG(INFO) << "Launching browser..."; |
262 BrowserInit browser_init; | 235 BrowserInit browser_init; |
263 int return_code; | 236 int return_code; |
264 browser_init.LaunchBrowser(*CommandLine::ForCurrentProcess(), | 237 browser_init.LaunchBrowser(*CommandLine::ForCurrentProcess(), |
265 profile, | 238 profile, |
266 std::wstring(), | 239 std::wstring(), |
267 true, | 240 true, |
268 &return_code); | 241 &return_code); |
269 } | 242 } |
270 | 243 |
271 } // namespace chromeos | 244 } // namespace chromeos |
OLD | NEW |