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/chromeos/app_mode/startup_app_launcher.h" | 5 #include "chrome/browser/chromeos/app_mode/startup_app_launcher.h" |
6 | 6 |
7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
8 #include "base/files/file_path.h" | 8 #include "base/files/file_path.h" |
9 #include "base/json/json_file_value_serializer.h" | 9 #include "base/json/json_file_value_serializer.h" |
10 #include "base/path_service.h" | 10 #include "base/path_service.h" |
(...skipping 16 matching lines...) Expand all Loading... |
27 #include "chrome/browser/ui/extensions/application_launch.h" | 27 #include "chrome/browser/ui/extensions/application_launch.h" |
28 #include "chrome/common/chrome_paths.h" | 28 #include "chrome/common/chrome_paths.h" |
29 #include "chrome/common/chrome_switches.h" | 29 #include "chrome/common/chrome_switches.h" |
30 #include "chrome/common/chrome_version_info.h" | 30 #include "chrome/common/chrome_version_info.h" |
31 #include "chrome/common/extensions/manifest_url_handler.h" | 31 #include "chrome/common/extensions/manifest_url_handler.h" |
32 #include "content/public/browser/browser_thread.h" | 32 #include "content/public/browser/browser_thread.h" |
33 #include "content/public/browser/notification_service.h" | 33 #include "content/public/browser/notification_service.h" |
34 #include "extensions/browser/extension_system.h" | 34 #include "extensions/browser/extension_system.h" |
35 #include "extensions/common/extension.h" | 35 #include "extensions/common/extension.h" |
36 #include "extensions/common/manifest_handlers/kiosk_mode_info.h" | 36 #include "extensions/common/manifest_handlers/kiosk_mode_info.h" |
| 37 #include "extensions/common/manifest_handlers/offline_enabled_info.h" |
37 #include "google_apis/gaia/gaia_auth_consumer.h" | 38 #include "google_apis/gaia/gaia_auth_consumer.h" |
38 #include "google_apis/gaia/gaia_constants.h" | 39 #include "google_apis/gaia/gaia_constants.h" |
39 #include "net/base/load_flags.h" | 40 #include "net/base/load_flags.h" |
40 #include "net/url_request/url_fetcher.h" | 41 #include "net/url_request/url_fetcher.h" |
41 #include "net/url_request/url_fetcher_delegate.h" | 42 #include "net/url_request/url_fetcher_delegate.h" |
42 #include "net/url_request/url_request_context_getter.h" | 43 #include "net/url_request/url_request_context_getter.h" |
43 #include "net/url_request/url_request_status.h" | 44 #include "net/url_request/url_request_status.h" |
44 #include "url/gurl.h" | 45 #include "url/gurl.h" |
45 | 46 |
46 using content::BrowserThread; | 47 using content::BrowserThread; |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
127 Version browser_min_version(update.browser_min_version); | 128 Version browser_min_version(update.browser_min_version); |
128 if (browser_version.IsValid() && | 129 if (browser_version.IsValid() && |
129 browser_min_version.IsValid() && | 130 browser_min_version.IsValid() && |
130 browser_min_version.CompareTo(browser_version) > 0) { | 131 browser_min_version.CompareTo(browser_version) > 0) { |
131 launcher_->OnUpdateCheckNoUpdate(); | 132 launcher_->OnUpdateCheckNoUpdate(); |
132 return; | 133 return; |
133 } | 134 } |
134 } | 135 } |
135 | 136 |
136 const Version& existing_version = *GetInstalledApp()->version(); | 137 const Version& existing_version = *GetInstalledApp()->version(); |
137 Version update_version(update.version); | 138 const Version update_version(update.version); |
138 if (existing_version.IsValid() && | 139 if (!update_version.IsValid() || |
139 update_version.IsValid() && | 140 (existing_version.IsValid() && |
140 update_version.CompareTo(existing_version) <= 0) { | 141 update_version.CompareTo(existing_version) <= 0)) { |
141 launcher_->OnUpdateCheckNoUpdate(); | 142 launcher_->OnUpdateCheckNoUpdate(); |
142 return; | 143 return; |
143 } | 144 } |
144 | 145 |
145 launcher_->OnUpdateCheckUpdateAvailable(); | 146 launcher_->OnUpdateCheckUpdateAvailable(); |
146 } | 147 } |
147 | 148 |
148 // net::URLFetcherDelegate implementation. | 149 // net::URLFetcherDelegate implementation. |
149 virtual void OnURLFetchComplete(const net::URLFetcher* source) OVERRIDE { | 150 virtual void OnURLFetchComplete(const net::URLFetcher* source) OVERRIDE { |
150 DCHECK_EQ(source, manifest_fetcher_.get()); | 151 DCHECK_EQ(source, manifest_fetcher_.get()); |
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
254 UserManager::Get()->SetAppModeChromeClientOAuthInfo( | 255 UserManager::Get()->SetAppModeChromeClientOAuthInfo( |
255 auth_params_.client_id, | 256 auth_params_.client_id, |
256 auth_params_.client_secret); | 257 auth_params_.client_secret); |
257 } | 258 } |
258 | 259 |
259 // If we are restarting chrome (i.e. on crash), we need to initialize | 260 // If we are restarting chrome (i.e. on crash), we need to initialize |
260 // OAuth2TokenService as well. | 261 // OAuth2TokenService as well. |
261 InitializeTokenService(); | 262 InitializeTokenService(); |
262 } | 263 } |
263 | 264 |
264 void StartupAppLauncher::InitializeNetwork() { | 265 void StartupAppLauncher::MaybeInitializeNetwork() { |
265 delegate_->InitializeNetwork(); | 266 const Extension* extension = extensions::ExtensionSystem::Get(profile_)-> |
| 267 extension_service()->GetInstalledExtension(app_id_); |
| 268 const bool requires_network = !extension || |
| 269 !extensions::OfflineEnabledInfo::IsOfflineEnabled(extension); |
| 270 |
| 271 if (requires_network) { |
| 272 delegate_->InitializeNetwork(); |
| 273 return; |
| 274 } |
| 275 |
| 276 // Offline enabled app attempts update if network is ready. Otherwise, |
| 277 // go directly to launch. |
| 278 if (delegate_->IsNetworkReady()) |
| 279 ContinueWithNetworkReady(); |
| 280 else |
| 281 OnReadyToLaunch(); |
266 } | 282 } |
267 | 283 |
268 void StartupAppLauncher::InitializeTokenService() { | 284 void StartupAppLauncher::InitializeTokenService() { |
269 delegate_->OnInitializingTokenService(); | 285 delegate_->OnInitializingTokenService(); |
270 | 286 |
271 ProfileOAuth2TokenService* profile_token_service = | 287 ProfileOAuth2TokenService* profile_token_service = |
272 ProfileOAuth2TokenServiceFactory::GetForProfile(profile_); | 288 ProfileOAuth2TokenServiceFactory::GetForProfile(profile_); |
273 SigninManagerBase* signin_manager = | 289 SigninManagerBase* signin_manager = |
274 SigninManagerFactory::GetForProfile(profile_); | 290 SigninManagerFactory::GetForProfile(profile_); |
275 if (profile_token_service->RefreshTokenIsAvailable( | 291 if (profile_token_service->RefreshTokenIsAvailable( |
276 signin_manager->GetAuthenticatedAccountId()) || | 292 signin_manager->GetAuthenticatedAccountId()) || |
277 auth_params_.refresh_token.empty()) { | 293 auth_params_.refresh_token.empty()) { |
278 InitializeNetwork(); | 294 MaybeInitializeNetwork(); |
279 } else { | 295 } else { |
280 // Pass oauth2 refresh token from the auth file. | 296 // Pass oauth2 refresh token from the auth file. |
281 // TODO(zelidrag): We should probably remove this option after M27. | 297 // TODO(zelidrag): We should probably remove this option after M27. |
282 // TODO(fgorski): This can go when we have persistence implemented on PO2TS. | 298 // TODO(fgorski): This can go when we have persistence implemented on PO2TS. |
283 // Unless the code is no longer needed. | 299 // Unless the code is no longer needed. |
284 // TODO(rogerta): Now that this CL implements token persistence in PO2TS, is | 300 // TODO(rogerta): Now that this CL implements token persistence in PO2TS, is |
285 // this code still needed? See above two TODOs. | 301 // this code still needed? See above two TODOs. |
286 // | 302 // |
287 // ProfileOAuth2TokenService triggers either OnRefreshTokenAvailable or | 303 // ProfileOAuth2TokenService triggers either OnRefreshTokenAvailable or |
288 // OnRefreshTokensLoaded. Given that we want to handle exactly one event, | 304 // OnRefreshTokensLoaded. Given that we want to handle exactly one event, |
289 // whichever comes first, both handlers call RemoveObserver on PO2TS. | 305 // whichever comes first, both handlers call RemoveObserver on PO2TS. |
290 // Handling any of the two events is the only way to resume the execution | 306 // Handling any of the two events is the only way to resume the execution |
291 // and enable Cleanup method to be called, self-invoking a destructor. | 307 // and enable Cleanup method to be called, self-invoking a destructor. |
292 profile_token_service->AddObserver(this); | 308 profile_token_service->AddObserver(this); |
293 | 309 |
294 profile_token_service->UpdateCredentials( | 310 profile_token_service->UpdateCredentials( |
295 "kiosk_mode@localhost", | 311 "kiosk_mode@localhost", |
296 auth_params_.refresh_token); | 312 auth_params_.refresh_token); |
297 } | 313 } |
298 } | 314 } |
299 | 315 |
300 void StartupAppLauncher::OnRefreshTokenAvailable( | 316 void StartupAppLauncher::OnRefreshTokenAvailable( |
301 const std::string& account_id) { | 317 const std::string& account_id) { |
302 ProfileOAuth2TokenServiceFactory::GetForProfile(profile_) | 318 ProfileOAuth2TokenServiceFactory::GetForProfile(profile_) |
303 ->RemoveObserver(this); | 319 ->RemoveObserver(this); |
304 InitializeNetwork(); | 320 MaybeInitializeNetwork(); |
305 } | 321 } |
306 | 322 |
307 void StartupAppLauncher::OnRefreshTokensLoaded() { | 323 void StartupAppLauncher::OnRefreshTokensLoaded() { |
308 ProfileOAuth2TokenServiceFactory::GetForProfile(profile_) | 324 ProfileOAuth2TokenServiceFactory::GetForProfile(profile_) |
309 ->RemoveObserver(this); | 325 ->RemoveObserver(this); |
310 InitializeNetwork(); | 326 MaybeInitializeNetwork(); |
311 } | 327 } |
312 | 328 |
313 void StartupAppLauncher::LaunchApp() { | 329 void StartupAppLauncher::LaunchApp() { |
314 if (!ready_to_launch_) { | 330 if (!ready_to_launch_) { |
315 NOTREACHED(); | 331 NOTREACHED(); |
316 LOG(ERROR) << "LaunchApp() called but launcher is not initialized."; | 332 LOG(ERROR) << "LaunchApp() called but launcher is not initialized."; |
317 } | 333 } |
318 | 334 |
319 const Extension* extension = extensions::ExtensionSystem::Get(profile_)-> | 335 const Extension* extension = extensions::ExtensionSystem::Get(profile_)-> |
320 extension_service()->GetInstalledExtension(app_id_); | 336 extension_service()->GetInstalledExtension(app_id_); |
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
419 ready_to_launch_ = true; | 435 ready_to_launch_ = true; |
420 delegate_->OnReadyToLaunch(); | 436 delegate_->OnReadyToLaunch(); |
421 } | 437 } |
422 | 438 |
423 void StartupAppLauncher::UpdateAppData() { | 439 void StartupAppLauncher::UpdateAppData() { |
424 KioskAppManager::Get()->ClearAppData(app_id_); | 440 KioskAppManager::Get()->ClearAppData(app_id_); |
425 KioskAppManager::Get()->UpdateAppDataFromProfile(app_id_, profile_, NULL); | 441 KioskAppManager::Get()->UpdateAppDataFromProfile(app_id_, profile_, NULL); |
426 } | 442 } |
427 | 443 |
428 } // namespace chromeos | 444 } // namespace chromeos |
OLD | NEW |