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 |
deleted file mode 100644 |
index 6f17c4b0dd404868e8df201920aefe820185ce77..0000000000000000000000000000000000000000 |
--- a/chrome/browser/apps/ephemeral_app_service.cc |
+++ /dev/null |
@@ -1,162 +0,0 @@ |
-// Copyright 2013 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "chrome/browser/apps/ephemeral_app_service.h" |
- |
-#include "apps/app_lifetime_monitor_factory.h" |
-#include "base/bind.h" |
-#include "base/command_line.h" |
-#include "base/thread_task_runner_handle.h" |
-#include "chrome/browser/apps/ephemeral_app_service_factory.h" |
-#include "chrome/browser/extensions/extension_service.h" |
-#include "chrome/browser/extensions/extension_util.h" |
-#include "chrome/browser/profiles/profile.h" |
-#include "content/public/browser/browser_thread.h" |
-#include "content/public/common/content_switches.h" |
-#include "extensions/browser/extension_prefs.h" |
-#include "extensions/browser/extension_registry.h" |
-#include "extensions/browser/extension_system.h" |
-#include "extensions/browser/extension_util.h" |
-#include "extensions/browser/uninstall_reason.h" |
-#include "extensions/common/extension.h" |
-#include "extensions/common/extension_set.h" |
-#include "extensions/common/one_shot_event.h" |
- |
-using extensions::Extension; |
-using extensions::ExtensionPrefs; |
-using extensions::ExtensionRegistry; |
-using extensions::ExtensionSet; |
-using extensions::ExtensionSystem; |
- |
-namespace { |
- |
-// The number of seconds after an app has stopped running before it will be |
-// disabled. |
-const int kDefaultDisableAppDelay = 1; |
- |
-} // namespace |
- |
-// static |
-EphemeralAppService* EphemeralAppService::Get(Profile* profile) { |
- return EphemeralAppServiceFactory::GetForProfile(profile); |
-} |
- |
-EphemeralAppService::EphemeralAppService(Profile* profile) |
- : profile_(profile), |
- extension_registry_observer_(this), |
- app_lifetime_monitor_observer_(this), |
- disable_idle_app_delay_(kDefaultDisableAppDelay), |
- weak_ptr_factory_(this) { |
- ExtensionSystem::Get(profile_)->ready().Post( |
- FROM_HERE, |
- base::Bind(&EphemeralAppService::Init, weak_ptr_factory_.GetWeakPtr())); |
-} |
- |
-EphemeralAppService::~EphemeralAppService() { |
-} |
- |
-void EphemeralAppService::ClearCachedApps() { |
- ExtensionRegistry* registry = ExtensionRegistry::Get(profile_); |
- DCHECK(registry); |
- ExtensionPrefs* prefs = ExtensionPrefs::Get(profile_); |
- DCHECK(prefs); |
- ExtensionService* service = |
- ExtensionSystem::Get(profile_)->extension_service(); |
- DCHECK(service); |
- |
- scoped_ptr<ExtensionSet> extensions = |
- registry->GenerateInstalledExtensionsSet(); |
- |
- for (ExtensionSet::const_iterator it = extensions->begin(); |
- it != extensions->end(); |
- ++it) { |
- std::string extension_id = (*it)->id(); |
- if (!prefs->IsEphemeralApp(extension_id)) |
- continue; |
- |
- DCHECK(registry->GetExtensionById(extension_id, |
- ExtensionRegistry::EVERYTHING)); |
- service->UninstallExtension( |
- extension_id, |
- extensions::UNINSTALL_REASON_ORPHANED_EPHEMERAL_EXTENSION, |
- base::Bind(&base::DoNothing), |
- NULL); |
- } |
-} |
- |
-void EphemeralAppService::OnExtensionWillBeInstalled( |
- content::BrowserContext* browser_context, |
- const extensions::Extension* extension, |
- bool is_update, |
- bool from_ephemeral, |
- const std::string& old_name) { |
- if (from_ephemeral) |
- HandleEphemeralAppPromoted(extension); |
-} |
- |
-void EphemeralAppService::OnAppStop(Profile* profile, |
- const std::string& app_id) { |
- if (!extensions::util::IsEphemeralApp(app_id, profile_)) |
- return; |
- |
- base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( |
- FROM_HERE, base::Bind(&EphemeralAppService::DisableEphemeralApp, |
- weak_ptr_factory_.GetWeakPtr(), app_id), |
- base::TimeDelta::FromSeconds(disable_idle_app_delay_)); |
-} |
- |
-void EphemeralAppService::OnChromeTerminating() { |
- extension_registry_observer_.RemoveAll(); |
- app_lifetime_monitor_observer_.RemoveAll(); |
-} |
- |
-void EphemeralAppService::Init() { |
- // Start observing. |
- extension_registry_observer_.Add(ExtensionRegistry::Get(profile_)); |
- app_lifetime_monitor_observer_.Add( |
- apps::AppLifetimeMonitorFactory::GetForProfile(profile_)); |
- |
- // Execute startup clean up tasks (except during tests). |
- if (base::CommandLine::ForCurrentProcess()->HasSwitch(switches::kTestType)) |
- return; |
- |
- content::BrowserThread::PostAfterStartupTask( |
- FROM_HERE, content::BrowserThread::GetMessageLoopProxyForThread( |
- content::BrowserThread::UI), |
- base::Bind(&EphemeralAppService::ClearCachedApps, |
- weak_ptr_factory_.GetWeakPtr())); |
-} |
- |
-void EphemeralAppService::DisableEphemeralApp(const std::string& app_id) { |
- if (!extensions::util::IsEphemeralApp(app_id, profile_) || |
- !extensions::util::IsExtensionIdle(app_id, profile_)) { |
- return; |
- } |
- |
- // After an ephemeral app has stopped running, unload it from extension |
- // system and disable it to prevent all background activity. |
- ExtensionService* service = |
- ExtensionSystem::Get(profile_)->extension_service(); |
- DCHECK(service); |
- service->DisableExtension(app_id, Extension::DISABLE_INACTIVE_EPHEMERAL_APP); |
-} |
- |
-void EphemeralAppService::HandleEphemeralAppPromoted(const Extension* app) { |
- // When ephemeral apps are promoted to regular install apps, remove the |
- // DISABLE_INACTIVE_EPHEMERAL_APP reason and enable the app if there are no |
- // other reasons. |
- ExtensionPrefs* prefs = ExtensionPrefs::Get(profile_); |
- DCHECK(prefs); |
- |
- int disable_reasons = prefs->GetDisableReasons(app->id()); |
- if (disable_reasons & Extension::DISABLE_INACTIVE_EPHEMERAL_APP) { |
- if (disable_reasons == Extension::DISABLE_INACTIVE_EPHEMERAL_APP) { |
- // This will also clear disable reasons. |
- prefs->SetExtensionEnabled(app->id()); |
- } else { |
- prefs->RemoveDisableReason(app->id(), |
- Extension::DISABLE_INACTIVE_EPHEMERAL_APP); |
- } |
- } |
-} |