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

Unified Diff: chrome/browser/apps/ephemeral_app_service.cc

Issue 383703002: Clear the ephemeral app cache from Clear Browsing Data (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 5 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/apps/ephemeral_app_service.cc
diff --git a/chrome/browser/apps/ephemeral_app_service.cc b/chrome/browser/apps/ephemeral_app_service.cc
index da4a5d19ab9b5b79956e6ffd82be4a38ea52e4de..da8d4a592200c5e8b9ba2d3fed745f5ed1490c41 100644
--- a/chrome/browser/apps/ephemeral_app_service.cc
+++ b/chrome/browser/apps/ephemeral_app_service.cc
@@ -71,6 +71,40 @@ EphemeralAppService::EphemeralAppService(Profile* profile)
EphemeralAppService::~EphemeralAppService() {
}
+void EphemeralAppService::ClearCachedApps() {
+ // Cancel any pending garbage collects.
+ garbage_collect_apps_timer_.Stop();
+
+ scoped_ptr<ExtensionSet> extensions =
+ extensions::ExtensionRegistry::Get(profile_)
+ ->GenerateInstalledExtensionsSet();
+ ExtensionPrefs* prefs = ExtensionPrefs::Get(profile_);
+ DCHECK(prefs);
+
+ ExtensionService* service =
+ ExtensionSystem::Get(profile_)->extension_service();
+ DCHECK(service);
+
+ for (ExtensionSet::const_iterator it = extensions->begin();
+ it != extensions->end();
+ ++it) {
+ std::string extension_id = (*it)->id();
+ if (!prefs->IsEphemeralApp(extension_id) ||
+ !service->GetInstalledExtension(extension_id)) {
tapted 2014/07/11 01:16:36 I think GetInstalledExtension(..) should return tr
tmdiep 2014/07/11 02:28:31 There is a CHECK in ExtensionService::UninstallExt
+ continue;
+ }
+
+ // Do not remove apps that are running.
+ if (!extensions::util::IsExtensionIdle(extension_id, profile_))
+ continue;
+
+ service->UninstallExtension(
+ extension_id,
+ ExtensionService::UNINSTALL_REASON_ORPHANED_EPHEMERAL_EXTENSION,
+ NULL);
+ }
+}
+
void EphemeralAppService::Observe(
int type,
const content::NotificationSource& source,
@@ -189,11 +223,14 @@ void EphemeralAppService::GarbageCollectApps() {
ExtensionService* service =
ExtensionSystem::Get(profile_)->extension_service();
DCHECK(service);
- // Execute the replacement policies and remove apps marked for deletion.
+ // Execute the eviction policies and remove apps marked for deletion.
if (!app_launch_times.empty()) {
GetAppsToRemove(app_count, app_launch_times, &remove_app_ids);
for (std::set<std::string>::const_iterator id = remove_app_ids.begin();
id != remove_app_ids.end(); ++id) {
+ if (!service->GetInstalledExtension(*id))
tapted 2014/07/11 01:16:36 I don't think I've wrapped my head around this bit
tmdiep 2014/07/11 02:28:31 Same reason as above - in case of cascading uninst
+ continue;
+
if (service->UninstallExtension(
*id,
ExtensionService::UNINSTALL_REASON_ORPHANED_EPHEMERAL_EXTENSION,

Powered by Google App Engine
This is Rietveld 408576698