OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/extensions/external_provider_impl.h" | 5 #include "chrome/browser/extensions/external_provider_impl.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/logging.h" | 9 #include "base/logging.h" |
10 #include "base/memory/linked_ptr.h" | 10 #include "base/memory/linked_ptr.h" |
11 #include "base/metrics/field_trial.h" | 11 #include "base/metrics/field_trial.h" |
12 #include "base/path_service.h" | 12 #include "base/path_service.h" |
13 #include "base/string_util.h" | 13 #include "base/string_util.h" |
14 #include "base/values.h" | 14 #include "base/values.h" |
15 #include "base/version.h" | 15 #include "base/version.h" |
16 #include "chrome/browser/browser_process.h" | 16 #include "chrome/browser/browser_process.h" |
17 #include "chrome/browser/extensions/extension_service.h" | 17 #include "chrome/browser/extensions/extension_service.h" |
18 #include "chrome/browser/extensions/external_policy_loader.h" | 18 #include "chrome/browser/extensions/external_policy_loader.h" |
19 #include "chrome/browser/extensions/external_pref_loader.h" | 19 #include "chrome/browser/extensions/external_pref_loader.h" |
20 #include "chrome/browser/extensions/external_provider_interface.h" | 20 #include "chrome/browser/extensions/external_provider_interface.h" |
21 #include "chrome/browser/profiles/profile.h" | 21 #include "chrome/browser/profiles/profile.h" |
22 #include "chrome/common/chrome_paths.h" | 22 #include "chrome/common/chrome_paths.h" |
23 #include "chrome/common/chrome_switches.h" | 23 #include "chrome/common/chrome_switches.h" |
24 #include "chrome/common/extensions/extension.h" | 24 #include "chrome/common/extensions/extension.h" |
25 #include "chrome/common/extensions/manifest.h" | 25 #include "chrome/common/extensions/manifest.h" |
26 #include "chrome/common/pref_names.h" | 26 #include "chrome/common/pref_names.h" |
27 #include "content/public/browser/browser_thread.h" | 27 #include "content/public/browser/browser_thread.h" |
28 #include "ui/base/l10n/l10n_util.h" | 28 #include "ui/base/l10n/l10n_util.h" |
29 | 29 |
| 30 #if defined(ENABLE_MANAGED_USERS) |
| 31 #include "chrome/browser/managed_mode/managed_user_service.h" |
| 32 #include "chrome/browser/managed_mode/managed_user_service_factory.h" |
| 33 #endif |
| 34 |
30 #if defined(OS_CHROMEOS) | 35 #if defined(OS_CHROMEOS) |
31 #include "chrome/browser/chromeos/login/user_manager.h" | 36 #include "chrome/browser/chromeos/login/user_manager.h" |
32 #include "chrome/browser/policy/app_pack_updater.h" | 37 #include "chrome/browser/policy/app_pack_updater.h" |
33 #include "chrome/browser/policy/browser_policy_connector.h" | 38 #include "chrome/browser/policy/browser_policy_connector.h" |
34 #endif | 39 #endif |
35 | 40 |
36 #if !defined(OS_CHROMEOS) | 41 #if !defined(OS_CHROMEOS) |
37 #include "chrome/browser/extensions/default_apps.h" | 42 #include "chrome/browser/extensions/default_apps.h" |
38 #endif | 43 #endif |
39 | 44 |
(...skipping 309 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
349 #if defined(OS_CHROMEOS) | 354 #if defined(OS_CHROMEOS) |
350 chromeos::UserManager* user_manager = chromeos::UserManager::Get(); | 355 chromeos::UserManager* user_manager = chromeos::UserManager::Get(); |
351 is_chromeos_demo_session = | 356 is_chromeos_demo_session = |
352 user_manager && user_manager->IsLoggedInAsDemoUser() && | 357 user_manager && user_manager->IsLoggedInAsDemoUser() && |
353 g_browser_process->browser_policy_connector()->GetDeviceMode() == | 358 g_browser_process->browser_policy_connector()->GetDeviceMode() == |
354 policy::DEVICE_MODE_KIOSK; | 359 policy::DEVICE_MODE_KIOSK; |
355 bundled_extension_creation_flags = Extension::FROM_WEBSTORE | | 360 bundled_extension_creation_flags = Extension::FROM_WEBSTORE | |
356 Extension::WAS_INSTALLED_BY_DEFAULT; | 361 Extension::WAS_INSTALLED_BY_DEFAULT; |
357 #endif | 362 #endif |
358 | 363 |
| 364 bool is_managed_profile = false; |
| 365 int external_apps_path_id = chrome::DIR_EXTERNAL_EXTENSIONS; |
| 366 #if defined(ENABLE_MANAGED_USERS) |
| 367 ManagedUserService* managed_user_service = |
| 368 ManagedUserServiceFactory::GetForProfile(profile); |
| 369 is_managed_profile = managed_user_service->ProfileIsManaged(); |
| 370 if (is_managed_profile) |
| 371 external_apps_path_id = chrome::DIR_MANAGED_USERS_DEFAULT_APPS; |
| 372 #endif |
| 373 |
359 if (!is_chromeos_demo_session) { | 374 if (!is_chromeos_demo_session) { |
360 provider_list->push_back( | 375 provider_list->push_back( |
361 linked_ptr<ExternalProviderInterface>( | 376 linked_ptr<ExternalProviderInterface>( |
362 new ExternalProviderImpl( | 377 new ExternalProviderImpl( |
363 service, | 378 service, |
364 new ExternalPrefLoader(chrome::DIR_EXTERNAL_EXTENSIONS, | 379 new ExternalPrefLoader(external_apps_path_id, |
365 check_admin_permissions_on_mac), | 380 check_admin_permissions_on_mac), |
366 Manifest::EXTERNAL_PREF, | 381 Manifest::EXTERNAL_PREF, |
367 Manifest::EXTERNAL_PREF_DOWNLOAD, | 382 Manifest::EXTERNAL_PREF_DOWNLOAD, |
368 bundled_extension_creation_flags))); | 383 bundled_extension_creation_flags))); |
369 } | 384 } |
370 | 385 |
| 386 if (!is_managed_profile) { |
371 #if defined(OS_CHROMEOS) || defined (OS_MACOSX) | 387 #if defined(OS_CHROMEOS) || defined (OS_MACOSX) |
372 // Define a per-user source of external extensions. | 388 // Define a per-user source of external extensions. |
373 // On Chrome OS, this serves as a source for OEM customization. | 389 // On Chrome OS, this serves as a source for OEM customization. |
374 provider_list->push_back( | 390 provider_list->push_back( |
375 linked_ptr<ExternalProviderInterface>( | 391 linked_ptr<ExternalProviderInterface>( |
376 new ExternalProviderImpl( | 392 new ExternalProviderImpl( |
377 service, | 393 service, |
378 new ExternalPrefLoader(chrome::DIR_USER_EXTERNAL_EXTENSIONS, | 394 new ExternalPrefLoader(chrome::DIR_USER_EXTERNAL_EXTENSIONS, |
379 ExternalPrefLoader::NONE), | 395 ExternalPrefLoader::NONE), |
380 Manifest::EXTERNAL_PREF, | 396 Manifest::EXTERNAL_PREF, |
381 Manifest::EXTERNAL_PREF_DOWNLOAD, | 397 Manifest::EXTERNAL_PREF_DOWNLOAD, |
382 Extension::NO_FLAGS))); | 398 Extension::NO_FLAGS))); |
383 #endif | 399 #endif |
| 400 |
384 #if defined(OS_WIN) | 401 #if defined(OS_WIN) |
385 provider_list->push_back( | 402 provider_list->push_back( |
386 linked_ptr<ExternalProviderInterface>( | 403 linked_ptr<ExternalProviderInterface>( |
387 new ExternalProviderImpl( | 404 new ExternalProviderImpl( |
388 service, | 405 service, |
389 new ExternalRegistryLoader, | 406 new ExternalRegistryLoader, |
390 Manifest::EXTERNAL_REGISTRY, | 407 Manifest::EXTERNAL_REGISTRY, |
391 Manifest::INVALID_LOCATION, | 408 Manifest::INVALID_LOCATION, |
392 Extension::NO_FLAGS))); | 409 Extension::NO_FLAGS))); |
393 #endif | 410 #endif |
394 | 411 |
395 #if defined(OS_LINUX) | 412 #if defined(OS_LINUX) |
396 provider_list->push_back( | 413 provider_list->push_back( |
397 linked_ptr<ExternalProviderInterface>( | 414 linked_ptr<ExternalProviderInterface>( |
398 new ExternalProviderImpl( | 415 new ExternalProviderImpl( |
399 service, | 416 service, |
400 new ExternalPrefLoader(chrome::DIR_STANDALONE_EXTERNAL_EXTENSIONS, | 417 new ExternalPrefLoader( |
401 ExternalPrefLoader::NONE), | 418 chrome::DIR_STANDALONE_EXTERNAL_EXTENSIONS, |
402 Manifest::EXTERNAL_PREF, | 419 ExternalPrefLoader::NONE), |
403 Manifest::EXTERNAL_PREF_DOWNLOAD, | 420 Manifest::EXTERNAL_PREF, |
404 bundled_extension_creation_flags))); | 421 Manifest::EXTERNAL_PREF_DOWNLOAD, |
| 422 bundled_extension_creation_flags))); |
405 #endif | 423 #endif |
406 | 424 |
407 #if !defined(OS_CHROMEOS) | 425 #if !defined(OS_CHROMEOS) |
408 // The default apps are installed as INTERNAL but use the external | 426 // The default apps are installed as INTERNAL but use the external |
409 // extension installer codeflow. | 427 // extension installer codeflow. |
410 provider_list->push_back( | 428 provider_list->push_back( |
411 linked_ptr<ExternalProviderInterface>( | 429 linked_ptr<ExternalProviderInterface>( |
412 new default_apps::Provider( | 430 new default_apps::Provider( |
413 profile, | 431 profile, |
414 service, | 432 service, |
415 new ExternalPrefLoader(chrome::DIR_DEFAULT_APPS, | 433 new ExternalPrefLoader(chrome::DIR_DEFAULT_APPS, |
416 ExternalPrefLoader::NONE), | 434 ExternalPrefLoader::NONE), |
417 Manifest::INTERNAL, | 435 Manifest::INTERNAL, |
418 Manifest::INVALID_LOCATION, | 436 Manifest::INVALID_LOCATION, |
419 Extension::FROM_WEBSTORE | | 437 Extension::FROM_WEBSTORE | |
420 Extension::WAS_INSTALLED_BY_DEFAULT))); | 438 Extension::WAS_INSTALLED_BY_DEFAULT))); |
421 #endif | 439 #endif |
422 | 440 |
423 #if defined(OS_CHROMEOS) | 441 #if defined(OS_CHROMEOS) |
424 policy::BrowserPolicyConnector* connector = | 442 policy::BrowserPolicyConnector* connector = |
425 g_browser_process->browser_policy_connector(); | 443 g_browser_process->browser_policy_connector(); |
426 if (is_chromeos_demo_session && connector->GetAppPackUpdater()) { | 444 if (is_chromeos_demo_session && connector->GetAppPackUpdater()) { |
427 provider_list->push_back( | 445 provider_list->push_back( |
428 linked_ptr<ExternalProviderInterface>( | 446 linked_ptr<ExternalProviderInterface>( |
429 new ExternalProviderImpl( | 447 new ExternalProviderImpl( |
430 service, | 448 service, |
431 connector->GetAppPackUpdater()->CreateExternalLoader(), | 449 connector->GetAppPackUpdater()->CreateExternalLoader(), |
432 Manifest::EXTERNAL_PREF, | 450 Manifest::EXTERNAL_PREF, |
433 Manifest::INVALID_LOCATION, | 451 Manifest::INVALID_LOCATION, |
434 Extension::NO_FLAGS))); | 452 Extension::NO_FLAGS))); |
| 453 } |
| 454 #endif |
435 } | 455 } |
436 #endif | |
437 } | 456 } |
438 | 457 |
439 } // namespace extensions | 458 } // namespace extensions |
OLD | NEW |