| OLD | NEW |
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 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/extensions/extension_service.h" | 5 #include "chrome/browser/extensions/extension_service.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <iterator> | 8 #include <iterator> |
| 9 #include <set> | 9 #include <set> |
| 10 | 10 |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 59 #include "chrome/browser/extensions/management_policy.h" | 59 #include "chrome/browser/extensions/management_policy.h" |
| 60 #include "chrome/browser/extensions/pending_extension_manager.h" | 60 #include "chrome/browser/extensions/pending_extension_manager.h" |
| 61 #include "chrome/browser/extensions/permissions_updater.h" | 61 #include "chrome/browser/extensions/permissions_updater.h" |
| 62 #include "chrome/browser/extensions/platform_app_launcher.h" | 62 #include "chrome/browser/extensions/platform_app_launcher.h" |
| 63 #include "chrome/browser/extensions/shell_window_registry.h" | 63 #include "chrome/browser/extensions/shell_window_registry.h" |
| 64 #include "chrome/browser/extensions/unpacked_installer.h" | 64 #include "chrome/browser/extensions/unpacked_installer.h" |
| 65 #include "chrome/browser/extensions/update_observer.h" | 65 #include "chrome/browser/extensions/update_observer.h" |
| 66 #include "chrome/browser/extensions/updater/extension_updater.h" | 66 #include "chrome/browser/extensions/updater/extension_updater.h" |
| 67 #include "chrome/browser/profiles/profile.h" | 67 #include "chrome/browser/profiles/profile.h" |
| 68 #include "chrome/browser/profiles/profile_manager.h" | 68 #include "chrome/browser/profiles/profile_manager.h" |
| 69 #include "chrome/browser/themes/theme_service.h" | |
| 70 #include "chrome/browser/themes/theme_service_factory.h" | |
| 71 #include "chrome/browser/ui/webui/favicon_source.h" | 69 #include "chrome/browser/ui/webui/favicon_source.h" |
| 72 #include "chrome/browser/ui/webui/ntp/thumbnail_source.h" | 70 #include "chrome/browser/ui/webui/ntp/thumbnail_source.h" |
| 73 #include "chrome/browser/ui/webui/theme_source.h" | 71 #include "chrome/browser/ui/webui/theme_source.h" |
| 74 #include "chrome/common/child_process_logging.h" | 72 #include "chrome/common/child_process_logging.h" |
| 75 #include "chrome/common/chrome_switches.h" | 73 #include "chrome/common/chrome_switches.h" |
| 76 #include "chrome/common/chrome_version_info.h" | 74 #include "chrome/common/chrome_version_info.h" |
| 77 #include "chrome/common/extensions/background_info.h" | 75 #include "chrome/common/extensions/background_info.h" |
| 78 #include "chrome/common/extensions/extension.h" | 76 #include "chrome/common/extensions/extension.h" |
| 79 #include "chrome/common/extensions/extension_constants.h" | 77 #include "chrome/common/extensions/extension_constants.h" |
| 80 #include "chrome/common/extensions/extension_file_util.h" | 78 #include "chrome/common/extensions/extension_file_util.h" |
| (...skipping 1035 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1116 | 1114 |
| 1117 void ExtensionService::NotifyExtensionUnloaded( | 1115 void ExtensionService::NotifyExtensionUnloaded( |
| 1118 const Extension* extension, | 1116 const Extension* extension, |
| 1119 extension_misc::UnloadedExtensionReason reason) { | 1117 extension_misc::UnloadedExtensionReason reason) { |
| 1120 UnloadedExtensionInfo details(extension, reason); | 1118 UnloadedExtensionInfo details(extension, reason); |
| 1121 content::NotificationService::current()->Notify( | 1119 content::NotificationService::current()->Notify( |
| 1122 chrome::NOTIFICATION_EXTENSION_UNLOADED, | 1120 chrome::NOTIFICATION_EXTENSION_UNLOADED, |
| 1123 content::Source<Profile>(profile_), | 1121 content::Source<Profile>(profile_), |
| 1124 content::Details<UnloadedExtensionInfo>(&details)); | 1122 content::Details<UnloadedExtensionInfo>(&details)); |
| 1125 | 1123 |
| 1126 #if defined(ENABLE_THEMES) | |
| 1127 // If the current theme is being unloaded, tell ThemeService to revert back | |
| 1128 // to the default theme. | |
| 1129 if (reason != extension_misc::UNLOAD_REASON_UPDATE && extension->is_theme()) { | |
| 1130 ThemeService* theme_service = ThemeServiceFactory::GetForProfile(profile_); | |
| 1131 if (extension->id() == theme_service->GetThemeID()) | |
| 1132 theme_service->UseDefaultTheme(); | |
| 1133 } | |
| 1134 #endif | |
| 1135 | |
| 1136 for (content::RenderProcessHost::iterator i( | 1124 for (content::RenderProcessHost::iterator i( |
| 1137 content::RenderProcessHost::AllHostsIterator()); | 1125 content::RenderProcessHost::AllHostsIterator()); |
| 1138 !i.IsAtEnd(); i.Advance()) { | 1126 !i.IsAtEnd(); i.Advance()) { |
| 1139 content::RenderProcessHost* host = i.GetCurrentValue(); | 1127 content::RenderProcessHost* host = i.GetCurrentValue(); |
| 1140 Profile* host_profile = | 1128 Profile* host_profile = |
| 1141 Profile::FromBrowserContext(host->GetBrowserContext()); | 1129 Profile::FromBrowserContext(host->GetBrowserContext()); |
| 1142 if (host_profile->GetOriginalProfile() == profile_->GetOriginalProfile()) | 1130 if (host_profile->GetOriginalProfile() == profile_->GetOriginalProfile()) |
| 1143 host->Send(new ExtensionMsg_Unloaded(extension->id())); | 1131 host->Send(new ExtensionMsg_Unloaded(extension->id())); |
| 1144 } | 1132 } |
| 1145 | 1133 |
| (...skipping 798 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1944 info->at(i)->extension_path)); | 1932 info->at(i)->extension_path)); |
| 1945 | 1933 |
| 1946 if (!GetFileTaskRunner()->PostTask( | 1934 if (!GetFileTaskRunner()->PostTask( |
| 1947 FROM_HERE, | 1935 FROM_HERE, |
| 1948 base::Bind( | 1936 base::Bind( |
| 1949 &extension_file_util::GarbageCollectExtensions, | 1937 &extension_file_util::GarbageCollectExtensions, |
| 1950 install_directory_, | 1938 install_directory_, |
| 1951 extension_paths))) { | 1939 extension_paths))) { |
| 1952 NOTREACHED(); | 1940 NOTREACHED(); |
| 1953 } | 1941 } |
| 1954 | |
| 1955 #if defined(ENABLE_THEMES) | |
| 1956 // Also garbage-collect themes. We check |profile_| to be | |
| 1957 // defensive; in the future, we may call GarbageCollectExtensions() | |
| 1958 // from somewhere other than Init() (e.g., in a timer). | |
| 1959 if (profile_) { | |
| 1960 ThemeServiceFactory::GetForProfile(profile_)->RemoveUnusedThemes(); | |
| 1961 } | |
| 1962 #endif | |
| 1963 } | 1942 } |
| 1964 | 1943 |
| 1965 void ExtensionService::SyncExtensionChangeIfNeeded(const Extension& extension) { | 1944 void ExtensionService::SyncExtensionChangeIfNeeded(const Extension& extension) { |
| 1966 if (extensions::sync_helper::IsSyncableApp(&extension)) { | 1945 if (extensions::sync_helper::IsSyncableApp(&extension)) { |
| 1967 if (app_sync_bundle_.IsSyncing()) | 1946 if (app_sync_bundle_.IsSyncing()) |
| 1968 app_sync_bundle_.SyncChangeIfNeeded(extension); | 1947 app_sync_bundle_.SyncChangeIfNeeded(extension); |
| 1969 else if (is_ready() && !flare_.is_null()) | 1948 else if (is_ready() && !flare_.is_null()) |
| 1970 flare_.Run(syncer::APPS); | 1949 flare_.Run(syncer::APPS); |
| 1971 } else if (extensions::sync_helper::IsSyncableExtension(&extension)) { | 1950 } else if (extensions::sync_helper::IsSyncableExtension(&extension)) { |
| 1972 if (extension_sync_bundle_.IsSyncing()) | 1951 if (extension_sync_bundle_.IsSyncing()) |
| (...skipping 571 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2544 | 2523 |
| 2545 // Unpacked extensions default to allowing file access, but if that has been | 2524 // Unpacked extensions default to allowing file access, but if that has been |
| 2546 // overridden, don't reset the value. | 2525 // overridden, don't reset the value. |
| 2547 if (Manifest::ShouldAlwaysAllowFileAccess(extension->location()) && | 2526 if (Manifest::ShouldAlwaysAllowFileAccess(extension->location()) && |
| 2548 !extension_prefs_->HasAllowFileAccessSetting(extension->id())) { | 2527 !extension_prefs_->HasAllowFileAccessSetting(extension->id())) { |
| 2549 extension_prefs_->SetAllowFileAccess(extension->id(), true); | 2528 extension_prefs_->SetAllowFileAccess(extension->id(), true); |
| 2550 } | 2529 } |
| 2551 | 2530 |
| 2552 AddExtension(extension); | 2531 AddExtension(extension); |
| 2553 | 2532 |
| 2554 #if defined(ENABLE_THEMES) | |
| 2555 // We do this here since AddExtension() is always called on browser startup, | |
| 2556 // and we only really care about the last theme installed. | |
| 2557 // If that ever changes and we have to move this code somewhere | |
| 2558 // else, it should be somewhere that's not in the startup path. | |
| 2559 if (extension->is_theme() && extensions_.GetByID(extension->id())) { | |
| 2560 DCHECK_EQ(extensions_.GetByID(extension->id()), extension); | |
| 2561 // Now that the theme extension is visible from outside the | |
| 2562 // ExtensionService, notify the ThemeService about the | |
| 2563 // newly-installed theme. | |
| 2564 ThemeServiceFactory::GetForProfile(profile_)->SetTheme(extension); | |
| 2565 } | |
| 2566 #endif | |
| 2567 | |
| 2568 // If this is a new external extension that was disabled, alert the user | 2533 // If this is a new external extension that was disabled, alert the user |
| 2569 // so he can reenable it. We do this last so that it has already been | 2534 // so he can reenable it. We do this last so that it has already been |
| 2570 // added to our list of extensions. | 2535 // added to our list of extensions. |
| 2571 if (unacknowledged_external) { | 2536 if (unacknowledged_external) { |
| 2572 UpdateExternalExtensionAlert(); | 2537 UpdateExternalExtensionAlert(); |
| 2573 UMA_HISTOGRAM_ENUMERATION("Extensions.ExternalExtensionEvent", | 2538 UMA_HISTOGRAM_ENUMERATION("Extensions.ExternalExtensionEvent", |
| 2574 EXTERNAL_EXTENSION_INSTALLED, | 2539 EXTERNAL_EXTENSION_INSTALLED, |
| 2575 EXTERNAL_EXTENSION_BUCKET_BOUNDARY); | 2540 EXTERNAL_EXTENSION_BUCKET_BOUNDARY); |
| 2576 } | 2541 } |
| 2577 | 2542 |
| (...skipping 537 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3115 } | 3080 } |
| 3116 | 3081 |
| 3117 void ExtensionService::AddUpdateObserver(extensions::UpdateObserver* observer) { | 3082 void ExtensionService::AddUpdateObserver(extensions::UpdateObserver* observer) { |
| 3118 update_observers_.AddObserver(observer); | 3083 update_observers_.AddObserver(observer); |
| 3119 } | 3084 } |
| 3120 | 3085 |
| 3121 void ExtensionService::RemoveUpdateObserver( | 3086 void ExtensionService::RemoveUpdateObserver( |
| 3122 extensions::UpdateObserver* observer) { | 3087 extensions::UpdateObserver* observer) { |
| 3123 update_observers_.RemoveObserver(observer); | 3088 update_observers_.RemoveObserver(observer); |
| 3124 } | 3089 } |
| OLD | NEW |