summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authortzik@chromium.org <tzik@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-05-10 07:22:57 +0000
committertzik@chromium.org <tzik@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-05-10 07:22:57 +0000
commit53795d06911da21970b1700ee2156937664e6af6 (patch)
tree172482d8ab16e72c5fc678b31cca338c7e60df13
parent95ef3fe7cdd419bc218fc5f52b33f8a6325a7266 (diff)
downloadchromium_src-53795d06911da21970b1700ee2156937664e6af6.zip
chromium_src-53795d06911da21970b1700ee2156937664e6af6.tar.gz
chromium_src-53795d06911da21970b1700ee2156937664e6af6.tar.bz2
Revert 199406 "Restart apps that don't listen to onRestarted() b..."
> Restart apps that don't listen to onRestarted() by sending them onLaunched(). > > We only do this if the app had windows opened the last time it was running, > otherwise apps that were running but had no windows may restart by opening > windows, which manifests as apps coming back on a restart after the user > already closed them. > > BUG=230667,167740,162057 > > Review URL: https://chromiumcodereview.appspot.com/14878008 TBR=koz@chromium.org Review URL: https://codereview.chromium.org/14711009 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@199409 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--apps/app_restore_service.cc45
-rw-r--r--apps/app_restore_service.h14
-rw-r--r--apps/app_restore_service_factory.cc2
-rw-r--r--chrome/browser/extensions/extension_prefs.cc18
-rw-r--r--chrome/browser/extensions/extension_prefs.h6
-rw-r--r--chrome/browser/extensions/platform_app_launcher.cc26
-rw-r--r--chrome/browser/extensions/shell_window_registry.h8
-rw-r--r--chrome/browser/ui/extensions/shell_window.cc4
-rw-r--r--chrome/browser/ui/extensions/shell_window.h1
9 files changed, 9 insertions, 115 deletions
diff --git a/apps/app_restore_service.cc b/apps/app_restore_service.cc
index a42f073..f8932fb 100644
--- a/apps/app_restore_service.cc
+++ b/apps/app_restore_service.cc
@@ -8,11 +8,9 @@
#include "chrome/browser/extensions/api/file_handlers/app_file_handler_util.h"
#include "chrome/browser/extensions/event_router.h"
#include "chrome/browser/extensions/extension_host.h"
-#include "chrome/browser/extensions/extension_prefs.h"
#include "chrome/browser/extensions/extension_service.h"
#include "chrome/browser/extensions/extension_system.h"
#include "chrome/browser/extensions/platform_app_launcher.h"
-#include "chrome/browser/ui/extensions/shell_window.h"
#include "chrome/common/chrome_notification_types.h"
#include "chrome/common/extensions/extension.h"
#include "chrome/common/extensions/extension_set.h"
@@ -57,9 +55,6 @@ AppRestoreService::AppRestoreService(Profile* profile)
registrar_.Add(
this, chrome::NOTIFICATION_APP_TERMINATING,
content::NotificationService::AllSources());
- extensions::ShellWindowRegistry* shell_window_registry =
- extensions::ShellWindowRegistry::Get(profile);
- shell_window_registry->AddObserver(this);
}
void AppRestoreService::HandleStartup(bool should_restore_apps) {
@@ -107,34 +102,11 @@ void AppRestoreService::Observe(int type,
// Stop listening to NOTIFICATION_EXTENSION_HOST_DESTROYED in particular
// as all extension hosts will be destroyed as a result of shutdown.
registrar_.RemoveAll();
- // Stop listening to the ShellWindowRegistry for window closes, because
- // all windows will be closed as a result of shutdown.
- extensions::ShellWindowRegistry* shell_window_registry =
- extensions::ShellWindowRegistry::Get(profile_);
- shell_window_registry->RemoveObserver(this);
break;
}
}
}
-void AppRestoreService::OnShellWindowAdded(ShellWindow* shell_window) {
- RecordIfAppHasWindows(shell_window->extension()->id());
-}
-
-void AppRestoreService::OnShellWindowIconChanged(ShellWindow* shell_window) {
-}
-
-void AppRestoreService::OnShellWindowRemoved(ShellWindow* shell_window) {
- // A shell window may be getting removed because its extension is uninstalled.
- if (shell_window->extension())
- RecordIfAppHasWindows(shell_window->extension()->id());
-}
-
-void AppRestoreService::Shutdown() {
- extensions::ShellWindowRegistry* shell_window_registry =
- extensions::ShellWindowRegistry::Get(profile_);
- shell_window_registry->RemoveObserver(this);
-}
void AppRestoreService::RecordAppStart(const std::string& extension_id) {
ExtensionPrefs* extension_prefs =
@@ -150,23 +122,6 @@ void AppRestoreService::RecordAppStop(const std::string& extension_id) {
extension_prefs, extension_id);
}
-void AppRestoreService::RecordIfAppHasWindows(
- const std::string& id) {
- ExtensionService* extension_service =
- ExtensionSystem::Get(profile_)->extension_service();
- ExtensionPrefs* extension_prefs = extension_service->extension_prefs();
-
- // If the extension isn't running then we will already have recorded whether
- // it had windows or not.
- if (!extension_prefs->IsExtensionRunning(id))
- return;
-
- extensions::ShellWindowRegistry* shell_window_registry =
- extensions::ShellWindowRegistry::Get(profile_);
- bool has_windows = !shell_window_registry->GetShellWindowsForApp(id).empty();
- extension_prefs->SetHasWindows(id, has_windows);
-}
-
void AppRestoreService::RestoreApp(
const Extension* extension,
const std::vector<SavedFileEntry>& file_entries) {
diff --git a/apps/app_restore_service.h b/apps/app_restore_service.h
index 287a21c..f27c83c 100644
--- a/apps/app_restore_service.h
+++ b/apps/app_restore_service.h
@@ -8,7 +8,6 @@
#include <string>
#include <vector>
-#include "chrome/browser/extensions/shell_window_registry.h"
#include "chrome/browser/profiles/profile_keyed_service.h"
#include "content/public/browser/notification_observer.h"
#include "content/public/browser/notification_registrar.h"
@@ -30,8 +29,7 @@ namespace apps {
// Tracks what apps need to be restarted when the browser restarts.
class AppRestoreService : public ProfileKeyedService,
- public content::NotificationObserver,
- public extensions::ShellWindowRegistry::Observer {
+ public content::NotificationObserver {
public:
// Returns true if apps should be restored on the current platform, given
// whether this new browser process launched due to a restart.
@@ -49,18 +47,8 @@ class AppRestoreService : public ProfileKeyedService,
const content::NotificationSource& source,
const content::NotificationDetails& details) OVERRIDE;
- // extensions::ShellWindowRegistry::Observer.
- virtual void OnShellWindowAdded(ShellWindow* shell_window) OVERRIDE;
- virtual void OnShellWindowIconChanged(ShellWindow* shell_window) OVERRIDE;
- virtual void OnShellWindowRemoved(ShellWindow* shell_window) OVERRIDE;
-
- // ProfileKeyedService.
- virtual void Shutdown() OVERRIDE;
-
void RecordAppStart(const std::string& extension_id);
void RecordAppStop(const std::string& extension_id);
- void RecordIfAppHasWindows(const std::string& id);
-
void RestoreApp(
const extensions::Extension* extension,
const std::vector<SavedFileEntry>& file_entries);
diff --git a/apps/app_restore_service_factory.cc b/apps/app_restore_service_factory.cc
index 091487e..71dd80b 100644
--- a/apps/app_restore_service_factory.cc
+++ b/apps/app_restore_service_factory.cc
@@ -5,7 +5,6 @@
#include "apps/app_restore_service_factory.h"
#include "apps/app_restore_service.h"
-#include "chrome/browser/extensions/shell_window_registry.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/profiles/profile_dependency_manager.h"
@@ -31,7 +30,6 @@ AppRestoreServiceFactory* AppRestoreServiceFactory::GetInstance() {
AppRestoreServiceFactory::AppRestoreServiceFactory()
: ProfileKeyedServiceFactory("AppRestoreService",
ProfileDependencyManager::GetInstance()) {
- DependsOn(extensions::ShellWindowRegistry::Factory::GetInstance());
}
AppRestoreServiceFactory::~AppRestoreServiceFactory() {
diff --git a/chrome/browser/extensions/extension_prefs.cc b/chrome/browser/extensions/extension_prefs.cc
index 32736a9..a200bfc 100644
--- a/chrome/browser/extensions/extension_prefs.cc
+++ b/chrome/browser/extensions/extension_prefs.cc
@@ -51,9 +51,6 @@ namespace {
// Whether this extension was running when chrome last shutdown.
const char kPrefRunning[] = "running";
-// Whether this extension had windows when it was last running.
-const char kHasWindows[] = "has_windows";
-
// Where an extension was installed from. (see Manifest::Location)
const char kPrefLocation[] = "location";
@@ -1149,21 +1146,6 @@ bool ExtensionPrefs::IsExtensionRunning(const std::string& extension_id) {
return running;
}
-void ExtensionPrefs::SetHasWindows(const std::string& extension_id,
- bool has_windows) {
- Value* value = Value::CreateBooleanValue(has_windows);
- UpdateExtensionPref(extension_id, kHasWindows, value);
-}
-
-bool ExtensionPrefs::HasWindows(const std::string& extension_id) {
- const DictionaryValue* extension = GetExtensionPref(extension_id);
- if (!extension)
- return false;
- bool has_windows = false;
- extension->GetBoolean(kHasWindows, &has_windows);
- return has_windows;
-}
-
bool ExtensionPrefs::IsIncognitoEnabled(const std::string& extension_id) {
return ReadPrefAsBooleanAndReturn(extension_id, kPrefIncognitoEnabled);
}
diff --git a/chrome/browser/extensions/extension_prefs.h b/chrome/browser/extensions/extension_prefs.h
index c8c648c..68870da 100644
--- a/chrome/browser/extensions/extension_prefs.h
+++ b/chrome/browser/extensions/extension_prefs.h
@@ -363,12 +363,6 @@ class ExtensionPrefs : public ContentSettingsStore::Observer,
// restart apps across browser restarts.
bool IsExtensionRunning(const std::string& extension_id);
- // Set/Get whether or not the extension has windows associated with it. Used
- // to force a launch of apps that don't handle onRestarted() on a restart. We
- // can only safely do that if the app had windows when it was last running.
- void SetHasWindows(const std::string& extension_id, bool has_windows);
- bool HasWindows(const std::string& extension_id);
-
// Returns true if the user enabled this extension to be loaded in incognito
// mode.
bool IsIncognitoEnabled(const std::string& extension_id);
diff --git a/chrome/browser/extensions/platform_app_launcher.cc b/chrome/browser/extensions/platform_app_launcher.cc
index e4e630c..34ee359 100644
--- a/chrome/browser/extensions/platform_app_launcher.cc
+++ b/chrome/browser/extensions/platform_app_launcher.cc
@@ -14,8 +14,6 @@
#include "chrome/browser/extensions/api/app_runtime/app_runtime_api.h"
#include "chrome/browser/extensions/api/file_handlers/app_file_handler_util.h"
#include "chrome/browser/extensions/api/file_system/file_system_api.h"
-#include "chrome/browser/extensions/event_names.h"
-#include "chrome/browser/extensions/event_router.h"
#include "chrome/browser/extensions/extension_host.h"
#include "chrome/browser/extensions/extension_prefs.h"
#include "chrome/browser/extensions/extension_process_manager.h"
@@ -423,27 +421,9 @@ void RestartPlatformAppWithFileEntries(
Profile* profile,
const Extension* extension,
const std::vector<SavedFileEntry>& file_entries) {
- extensions::EventRouter* event_router =
- ExtensionSystem::Get(profile)->event_router();
- bool listening_to_restart = event_router->
- ExtensionHasEventListener(extension->id(), event_names::kOnRestarted);
-
- if (listening_to_restart) {
- scoped_refptr<SavedFileEntryLauncher> launcher = new SavedFileEntryLauncher(
- profile, extension, file_entries);
- launcher->Launch();
- return;
- }
-
- ExtensionPrefs* extension_prefs = ExtensionSystem::Get(profile)->
- extension_service()->extension_prefs();
- bool had_windows = extension_prefs->HasWindows(extension->id());
- extension_prefs->SetHasWindows(extension->id(), false);
- bool listening_to_launch = event_router->
- ExtensionHasEventListener(extension->id(), event_names::kOnLaunched);
-
- if (listening_to_launch && had_windows)
- LaunchPlatformAppWithNoData(profile, extension);
+ scoped_refptr<SavedFileEntryLauncher> launcher = new SavedFileEntryLauncher(
+ profile, extension, file_entries);
+ launcher->Launch();
}
} // namespace extensions
diff --git a/chrome/browser/extensions/shell_window_registry.h b/chrome/browser/extensions/shell_window_registry.h
index dca2105..062b2ad 100644
--- a/chrome/browser/extensions/shell_window_registry.h
+++ b/chrome/browser/extensions/shell_window_registry.h
@@ -98,6 +98,10 @@ class ShellWindowRegistry : public ProfileKeyedService {
// ShellWindow::WindowType, or 0 for any window type.
static bool IsShellWindowRegisteredInAnyProfile(int window_type_mask);
+ protected:
+ void OnDevToolsStateChanged(content::DevToolsAgentHost*, bool attached);
+
+ private:
class Factory : public ProfileKeyedServiceFactory {
public:
static ShellWindowRegistry* GetForProfile(Profile* profile, bool create);
@@ -118,10 +122,6 @@ class ShellWindowRegistry : public ProfileKeyedService {
content::BrowserContext* context) const OVERRIDE;
};
- protected:
- void OnDevToolsStateChanged(content::DevToolsAgentHost*, bool attached);
-
- private:
Profile* profile_;
ShellWindowSet shell_windows_;
InspectedWindowSet inspected_windows_;
diff --git a/chrome/browser/ui/extensions/shell_window.cc b/chrome/browser/ui/extensions/shell_window.cc
index f9a06cd..f167e74 100644
--- a/chrome/browser/ui/extensions/shell_window.cc
+++ b/chrome/browser/ui/extensions/shell_window.cc
@@ -530,10 +530,8 @@ void ShellWindow::Observe(int type,
const extensions::Extension* unloaded_extension =
content::Details<extensions::UnloadedExtensionInfo>(
details)->extension;
- if (extension_ == unloaded_extension) {
+ if (extension_ == unloaded_extension)
native_app_window_->Close();
- extension_ = NULL;
- }
break;
}
case chrome::NOTIFICATION_APP_TERMINATING:
diff --git a/chrome/browser/ui/extensions/shell_window.h b/chrome/browser/ui/extensions/shell_window.h
index fee67a5..05b06ab 100644
--- a/chrome/browser/ui/extensions/shell_window.h
+++ b/chrome/browser/ui/extensions/shell_window.h
@@ -274,7 +274,6 @@ class ShellWindow : public content::NotificationObserver,
Profile* profile_; // weak pointer - owned by ProfileManager.
// weak pointer - owned by ExtensionService.
- // This gets set to NULL when the extension is uninstalled.
const extensions::Extension* extension_;
// Identifier that is used when saving and restoring geometry for this