Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(357)

Unified Diff: chrome/browser/extensions/extension_service.cc

Issue 204983020: Remove ExtensionService Garbage-Collecting methods. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Remove lazy global empty delta Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/extensions/extension_service.cc
diff --git a/chrome/browser/extensions/extension_service.cc b/chrome/browser/extensions/extension_service.cc
index 99962eb16de8fdbdcf8a5da9582cd1e8fdfb1281..a7cbda8587b7e671f013b570829f7418288f66c4 100644
--- a/chrome/browser/extensions/extension_service.cc
+++ b/chrome/browser/extensions/extension_service.cc
@@ -34,6 +34,7 @@
#include "chrome/browser/extensions/extension_disabled_ui.h"
#include "chrome/browser/extensions/extension_error_reporter.h"
#include "chrome/browser/extensions/extension_error_ui.h"
+#include "chrome/browser/extensions/extension_garbage_collector.h"
#include "chrome/browser/extensions/extension_install_ui.h"
#include "chrome/browser/extensions/extension_special_storage_policy.h"
#include "chrome/browser/extensions/extension_sync_service.h"
@@ -57,7 +58,6 @@
#include "chrome/common/extensions/extension_constants.h"
#include "chrome/common/extensions/extension_file_util.h"
#include "chrome/common/extensions/features/feature_channel.h"
-#include "chrome/common/extensions/manifest_handlers/app_isolation_info.h"
#include "chrome/common/extensions/manifest_url_handler.h"
#include "chrome/common/pref_names.h"
#include "chrome/common/url_constants.h"
@@ -147,13 +147,6 @@ static const int kMaxExtensionAcknowledgePromptCount = 3;
// Wait this many seconds after an extensions becomes idle before updating it.
static const int kUpdateIdleDelay = 5;
-// Wait this many seconds before trying to garbage collect extensions again.
-static const int kGarbageCollectRetryDelay = 30;
-
-// Wait this many seconds after startup to see if there are any extensions
-// which can be garbage collected.
-static const int kGarbageCollectStartupDelay = 30;
-
static bool IsSharedModule(const Extension* extension) {
return SharedModuleInfo::IsSharedModule(extension);
}
@@ -340,10 +333,8 @@ ExtensionService::ExtensionService(Profile* profile,
update_once_all_providers_are_ready_(false),
browser_terminating_(false),
installs_delayed_for_gc_(false),
- is_first_run_(false) {
-#if defined(OS_CHROMEOS)
- disable_garbage_collection_ = false;
-#endif
+ is_first_run_(false),
+ garbage_collector_(new extensions::ExtensionGarbageCollector(this)) {
CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
// Figure out if extension installation should be enabled.
@@ -529,15 +520,6 @@ void ExtensionService::Init() {
// rather than running immediately at startup.
CheckForExternalUpdates();
- base::MessageLoop::current()->PostDelayedTask(
- FROM_HERE,
- base::Bind(&ExtensionService::GarbageCollectExtensions, AsWeakPtr()),
- base::TimeDelta::FromSeconds(kGarbageCollectStartupDelay));
-
- if (extension_prefs_->NeedsStorageGarbageCollection()) {
- GarbageCollectIsolatedStorage();
- extension_prefs_->SetNeedsStorageGarbageCollection(false);
- }
system_->management_policy()->RegisterProvider(
shared_module_policy_provider_.get());
@@ -1563,52 +1545,6 @@ void ExtensionService::ReloadExtensionsForTest() {
// times.
}
-void ExtensionService::GarbageCollectExtensions() {
-#if defined(OS_CHROMEOS)
- if (disable_garbage_collection_)
- return;
-#endif
-
- if (extension_prefs_->pref_service()->ReadOnly())
- return;
-
- bool clean_temp_dir = true;
-
- if (pending_extension_manager()->HasPendingExtensions()) {
- // Don't garbage collect temp dir while there are pending installations,
- // which may be using the temporary installation directory. Try to garbage
- // collect again later.
- clean_temp_dir = false;
- base::MessageLoop::current()->PostDelayedTask(
- FROM_HERE,
- base::Bind(&ExtensionService::GarbageCollectExtensions, AsWeakPtr()),
- base::TimeDelta::FromSeconds(kGarbageCollectRetryDelay));
- }
-
- scoped_ptr<extensions::ExtensionPrefs::ExtensionsInfo> info(
- extension_prefs_->GetInstalledExtensionsInfo());
-
- std::multimap<std::string, base::FilePath> extension_paths;
- for (size_t i = 0; i < info->size(); ++i)
- extension_paths.insert(std::make_pair(info->at(i)->extension_id,
- info->at(i)->extension_path));
-
- info = extension_prefs_->GetAllDelayedInstallInfo();
- for (size_t i = 0; i < info->size(); ++i)
- extension_paths.insert(std::make_pair(info->at(i)->extension_id,
- info->at(i)->extension_path));
-
- if (!GetFileTaskRunner()->PostTask(
- FROM_HERE,
- base::Bind(
- &extension_file_util::GarbageCollectExtensions,
- install_directory_,
- extension_paths,
- clean_temp_dir))) {
- NOTREACHED();
- }
-}
-
void ExtensionService::SetReadyAndNotifyListeners() {
ready_->Signal();
content::NotificationService::current()->Notify(
@@ -2094,7 +2030,7 @@ void ExtensionService::OnExtensionInstalled(
}
ImportStatus status = SatisfyImports(extension);
- if (installs_delayed_for_gc()) {
+ if (installs_delayed_for_gc_) {
extension_prefs_->SetDelayedInstallInfo(
extension,
initial_state,
@@ -2549,44 +2485,14 @@ bool ExtensionService::ShouldDelayExtensionUpdate(
}
}
-void ExtensionService::GarbageCollectIsolatedStorage() {
- scoped_ptr<base::hash_set<base::FilePath> > active_paths(
- new base::hash_set<base::FilePath>());
- const ExtensionSet& extensions = registry_->enabled_extensions();
- for (ExtensionSet::const_iterator it = extensions.begin();
- it != extensions.end(); ++it) {
- if (extensions::AppIsolationInfo::HasIsolatedStorage(it->get())) {
- active_paths->insert(BrowserContext::GetStoragePartitionForSite(
- profile_,
- extensions::util::GetSiteForExtensionId(
- (*it)->id(), profile()))->GetPath());
- }
- }
-
- // The data of ephemeral apps can outlive their cache lifetime. Ensure
- // they are not garbage collected.
- scoped_ptr<extensions::ExtensionPrefs::ExtensionsInfo> evicted_apps_info(
- extension_prefs_->GetEvictedEphemeralAppsInfo());
- for (size_t i = 0; i < evicted_apps_info->size(); ++i) {
- extensions::ExtensionInfo* info = evicted_apps_info->at(i).get();
- if (extensions::util::HasIsolatedStorage(*info)) {
- active_paths->insert(BrowserContext::GetStoragePartitionForSite(
- profile_,
- extensions::util::GetSiteForExtensionId(
- info->extension_id, profile()))->GetPath());
- }
- }
-
- DCHECK(!installs_delayed_for_gc());
- set_installs_delayed_for_gc(true);
- BrowserContext::GarbageCollectStoragePartitions(
- profile_, active_paths.Pass(),
- base::Bind(&ExtensionService::OnGarbageCollectIsolatedStorageFinished,
- AsWeakPtr()));
+void ExtensionService::OnGarbageCollectIsolatedStorageStart() {
+ DCHECK(!installs_delayed_for_gc_);
+ installs_delayed_for_gc_ = true;
}
void ExtensionService::OnGarbageCollectIsolatedStorageFinished() {
- set_installs_delayed_for_gc(false);
+ DCHECK(installs_delayed_for_gc_);
+ installs_delayed_for_gc_ = false;
MaybeFinishDelayedInstallations();
}
« no previous file with comments | « chrome/browser/extensions/extension_service.h ('k') | chrome/browser/extensions/extension_service_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698