Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "apps/app_restore_service.h" | 5 #include "apps/app_restore_service.h" |
| 6 | 6 |
| 7 #include "apps/saved_files_service.h" | |
| 7 #include "chrome/browser/extensions/api/app_runtime/app_runtime_api.h" | 8 #include "chrome/browser/extensions/api/app_runtime/app_runtime_api.h" |
| 8 #include "chrome/browser/extensions/api/file_handlers/app_file_handler_util.h" | |
| 9 #include "chrome/browser/extensions/event_router.h" | 9 #include "chrome/browser/extensions/event_router.h" |
| 10 #include "chrome/browser/extensions/extension_host.h" | 10 #include "chrome/browser/extensions/extension_host.h" |
| 11 #include "chrome/browser/extensions/extension_prefs.h" | 11 #include "chrome/browser/extensions/extension_prefs.h" |
| 12 #include "chrome/browser/extensions/extension_service.h" | 12 #include "chrome/browser/extensions/extension_service.h" |
| 13 #include "chrome/browser/extensions/extension_system.h" | 13 #include "chrome/browser/extensions/extension_system.h" |
| 14 #include "chrome/browser/extensions/platform_app_launcher.h" | 14 #include "chrome/browser/extensions/platform_app_launcher.h" |
| 15 #include "chrome/browser/ui/extensions/shell_window.h" | 15 #include "chrome/browser/ui/extensions/shell_window.h" |
| 16 #include "chrome/common/chrome_notification_types.h" | 16 #include "chrome/common/chrome_notification_types.h" |
| 17 #include "chrome/common/extensions/extension.h" | 17 #include "chrome/common/extensions/extension.h" |
| 18 #include "chrome/common/extensions/extension_set.h" | 18 #include "chrome/common/extensions/extension_set.h" |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 63 void AppRestoreService::HandleStartup(bool should_restore_apps) { | 63 void AppRestoreService::HandleStartup(bool should_restore_apps) { |
| 64 ExtensionService* extension_service = | 64 ExtensionService* extension_service = |
| 65 ExtensionSystem::Get(profile_)->extension_service(); | 65 ExtensionSystem::Get(profile_)->extension_service(); |
| 66 const ExtensionSet* extensions = extension_service->extensions(); | 66 const ExtensionSet* extensions = extension_service->extensions(); |
| 67 ExtensionPrefs* extension_prefs = extension_service->extension_prefs(); | 67 ExtensionPrefs* extension_prefs = extension_service->extension_prefs(); |
| 68 | 68 |
| 69 for (ExtensionSet::const_iterator it = extensions->begin(); | 69 for (ExtensionSet::const_iterator it = extensions->begin(); |
| 70 it != extensions->end(); ++it) { | 70 it != extensions->end(); ++it) { |
| 71 const Extension* extension = *it; | 71 const Extension* extension = *it; |
| 72 if (extension_prefs->IsExtensionRunning(extension->id())) { | 72 if (extension_prefs->IsExtensionRunning(extension->id())) { |
| 73 std::vector<SavedFileEntry> file_entries; | |
| 74 extensions::app_file_handler_util::GetSavedFileEntries(extension_prefs, | |
| 75 extension->id(), | |
| 76 &file_entries); | |
| 77 RecordAppStop(extension->id()); | 73 RecordAppStop(extension->id()); |
| 74 // On a Chrome restart, restore the running apps. Otherwise, on startup, | |
|
koz (OOO until 15th September)
2013/05/23 07:32:22
I know Matt asked for this comment but I think it'
Matt Giuca
2013/05/24 00:24:02
OK I agree we shouldn't assume why the caller set
koz (OOO until 15th September)
2013/05/24 00:28:44
I love it!
Sam McNally
2013/05/24 00:46:03
Done.
| |
| 75 // flush the retained file entries. | |
| 78 if (should_restore_apps) | 76 if (should_restore_apps) |
| 79 RestoreApp(*it, file_entries); | 77 RestoreApp(*it); |
| 78 else | |
| 79 SavedFilesService::Get(profile_)->MaybeClearQueue(extension); | |
| 80 } | 80 } |
| 81 } | 81 } |
| 82 } | 82 } |
| 83 | 83 |
| 84 void AppRestoreService::Observe(int type, | 84 void AppRestoreService::Observe(int type, |
| 85 const content::NotificationSource& source, | 85 const content::NotificationSource& source, |
| 86 const content::NotificationDetails& details) { | 86 const content::NotificationDetails& details) { |
| 87 switch (type) { | 87 switch (type) { |
| 88 case chrome::NOTIFICATION_EXTENSION_HOST_DID_STOP_LOADING: { | 88 case chrome::NOTIFICATION_EXTENSION_HOST_DID_STOP_LOADING: { |
| 89 ExtensionHost* host = content::Details<ExtensionHost>(details).ptr(); | 89 ExtensionHost* host = content::Details<ExtensionHost>(details).ptr(); |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 131 void AppRestoreService::RecordAppStart(const std::string& extension_id) { | 131 void AppRestoreService::RecordAppStart(const std::string& extension_id) { |
| 132 ExtensionPrefs* extension_prefs = | 132 ExtensionPrefs* extension_prefs = |
| 133 ExtensionSystem::Get(profile_)->extension_service()->extension_prefs(); | 133 ExtensionSystem::Get(profile_)->extension_service()->extension_prefs(); |
| 134 extension_prefs->SetExtensionRunning(extension_id, true); | 134 extension_prefs->SetExtensionRunning(extension_id, true); |
| 135 } | 135 } |
| 136 | 136 |
| 137 void AppRestoreService::RecordAppStop(const std::string& extension_id) { | 137 void AppRestoreService::RecordAppStop(const std::string& extension_id) { |
| 138 ExtensionPrefs* extension_prefs = | 138 ExtensionPrefs* extension_prefs = |
| 139 ExtensionSystem::Get(profile_)->extension_service()->extension_prefs(); | 139 ExtensionSystem::Get(profile_)->extension_service()->extension_prefs(); |
| 140 extension_prefs->SetExtensionRunning(extension_id, false); | 140 extension_prefs->SetExtensionRunning(extension_id, false); |
| 141 extensions::app_file_handler_util::ClearSavedFileEntries( | |
| 142 extension_prefs, extension_id); | |
| 143 } | 141 } |
| 144 | 142 |
| 145 void AppRestoreService::RecordIfAppHasWindows( | 143 void AppRestoreService::RecordIfAppHasWindows( |
| 146 const std::string& id) { | 144 const std::string& id) { |
| 147 ExtensionService* extension_service = | 145 ExtensionService* extension_service = |
| 148 ExtensionSystem::Get(profile_)->extension_service(); | 146 ExtensionSystem::Get(profile_)->extension_service(); |
| 149 ExtensionPrefs* extension_prefs = extension_service->extension_prefs(); | 147 ExtensionPrefs* extension_prefs = extension_service->extension_prefs(); |
| 150 | 148 |
| 151 // If the extension isn't running then we will already have recorded whether | 149 // If the extension isn't running then we will already have recorded whether |
| 152 // it had windows or not. | 150 // it had windows or not. |
| 153 if (!extension_prefs->IsExtensionRunning(id)) | 151 if (!extension_prefs->IsExtensionRunning(id)) |
| 154 return; | 152 return; |
| 155 | 153 |
| 156 extensions::ShellWindowRegistry* shell_window_registry = | 154 extensions::ShellWindowRegistry* shell_window_registry = |
| 157 extensions::ShellWindowRegistry::Factory::GetForProfile( | 155 extensions::ShellWindowRegistry::Factory::GetForProfile( |
| 158 profile_, false /* create */); | 156 profile_, false /* create */); |
| 159 if (!shell_window_registry) | 157 if (!shell_window_registry) |
| 160 return; | 158 return; |
| 161 bool has_windows = !shell_window_registry->GetShellWindowsForApp(id).empty(); | 159 bool has_windows = !shell_window_registry->GetShellWindowsForApp(id).empty(); |
| 162 extension_prefs->SetHasWindows(id, has_windows); | 160 extension_prefs->SetHasWindows(id, has_windows); |
| 163 } | 161 } |
| 164 | 162 |
| 165 void AppRestoreService::RestoreApp( | 163 void AppRestoreService::RestoreApp(const Extension* extension) { |
| 166 const Extension* extension, | 164 extensions::RestartPlatformApp(profile_, extension); |
| 167 const std::vector<SavedFileEntry>& file_entries) { | |
| 168 extensions::RestartPlatformAppWithFileEntries(profile_, | |
| 169 extension, | |
| 170 file_entries); | |
| 171 } | 165 } |
| 172 | 166 |
| 173 void AppRestoreService::StartObservingShellWindows() { | 167 void AppRestoreService::StartObservingShellWindows() { |
| 174 extensions::ShellWindowRegistry* shell_window_registry = | 168 extensions::ShellWindowRegistry* shell_window_registry = |
| 175 extensions::ShellWindowRegistry::Factory::GetForProfile( | 169 extensions::ShellWindowRegistry::Factory::GetForProfile( |
| 176 profile_, false /* create */); | 170 profile_, false /* create */); |
| 177 if (shell_window_registry) | 171 if (shell_window_registry) |
| 178 shell_window_registry->AddObserver(this); | 172 shell_window_registry->AddObserver(this); |
| 179 } | 173 } |
| 180 | 174 |
| 181 void AppRestoreService::StopObservingShellWindows() { | 175 void AppRestoreService::StopObservingShellWindows() { |
| 182 extensions::ShellWindowRegistry* shell_window_registry = | 176 extensions::ShellWindowRegistry* shell_window_registry = |
| 183 extensions::ShellWindowRegistry::Factory::GetForProfile( | 177 extensions::ShellWindowRegistry::Factory::GetForProfile( |
| 184 profile_, false /* create */); | 178 profile_, false /* create */); |
| 185 if (shell_window_registry) | 179 if (shell_window_registry) |
| 186 shell_window_registry->RemoveObserver(this); | 180 shell_window_registry->RemoveObserver(this); |
| 187 } | 181 } |
| 188 | 182 |
| 189 } // namespace apps | 183 } // namespace apps |
| OLD | NEW |