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/pref_names.h" | |
8 #include "base/bind.h" | |
9 #include "base/message_loop.h" | |
10 #include "base/prefs/pref_service.h" | |
11 #include "base/time.h" | |
12 #include "chrome/browser/browser_process.h" | |
7 #include "chrome/browser/extensions/api/app_runtime/app_runtime_api.h" | 13 #include "chrome/browser/extensions/api/app_runtime/app_runtime_api.h" |
8 #include "chrome/browser/extensions/api/file_handlers/app_file_handler_util.h" | 14 #include "chrome/browser/extensions/api/file_handlers/app_file_handler_util.h" |
9 #include "chrome/browser/extensions/event_router.h" | 15 #include "chrome/browser/extensions/event_router.h" |
10 #include "chrome/browser/extensions/extension_host.h" | 16 #include "chrome/browser/extensions/extension_host.h" |
11 #include "chrome/browser/extensions/extension_service.h" | 17 #include "chrome/browser/extensions/extension_service.h" |
12 #include "chrome/browser/extensions/extension_system.h" | 18 #include "chrome/browser/extensions/extension_system.h" |
13 #include "chrome/common/chrome_notification_types.h" | 19 #include "chrome/common/chrome_notification_types.h" |
14 #include "chrome/common/extensions/extension.h" | 20 #include "chrome/common/extensions/extension.h" |
15 #include "chrome/common/extensions/extension_set.h" | 21 #include "chrome/common/extensions/extension_set.h" |
16 #include "content/public/browser/notification_details.h" | 22 #include "content/public/browser/notification_details.h" |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
48 it != extensions->end(); ++it) { | 54 it != extensions->end(); ++it) { |
49 const Extension* extension = *it; | 55 const Extension* extension = *it; |
50 if (extension_prefs->IsExtensionRunning(extension->id())) { | 56 if (extension_prefs->IsExtensionRunning(extension->id())) { |
51 std::vector<SavedFileEntry> file_entries; | 57 std::vector<SavedFileEntry> file_entries; |
52 extension_prefs->GetSavedFileEntries(extension->id(), &file_entries); | 58 extension_prefs->GetSavedFileEntries(extension->id(), &file_entries); |
53 RecordAppStop(extension->id()); | 59 RecordAppStop(extension->id()); |
54 if (should_restore_apps) | 60 if (should_restore_apps) |
55 RestoreApp(*it, file_entries); | 61 RestoreApp(*it, file_entries); |
56 } | 62 } |
57 } | 63 } |
64 | |
65 MaybeHandleMetroRelaunch(extension_service); | |
58 } | 66 } |
59 | 67 |
60 void AppRestoreService::Observe(int type, | 68 void AppRestoreService::Observe(int type, |
61 const content::NotificationSource& source, | 69 const content::NotificationSource& source, |
62 const content::NotificationDetails& details) { | 70 const content::NotificationDetails& details) { |
63 switch (type) { | 71 switch (type) { |
64 case chrome::NOTIFICATION_EXTENSION_HOST_DID_STOP_LOADING: { | 72 case chrome::NOTIFICATION_EXTENSION_HOST_DID_STOP_LOADING: { |
65 ExtensionHost* host = content::Details<ExtensionHost>(details).ptr(); | 73 ExtensionHost* host = content::Details<ExtensionHost>(details).ptr(); |
66 const Extension* extension = host->extension(); | 74 const Extension* extension = host->extension(); |
67 if (extension && extension->is_platform_app()) | 75 if (extension && extension->is_platform_app()) |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
100 extension_prefs->ClearSavedFileEntries(extension_id); | 108 extension_prefs->ClearSavedFileEntries(extension_id); |
101 } | 109 } |
102 | 110 |
103 void AppRestoreService::RestoreApp( | 111 void AppRestoreService::RestoreApp( |
104 const Extension* extension, | 112 const Extension* extension, |
105 const std::vector<SavedFileEntry>& file_entries) { | 113 const std::vector<SavedFileEntry>& file_entries) { |
106 // TODO(koz): Make |file_entries| available to the newly restarted app. | 114 // TODO(koz): Make |file_entries| available to the newly restarted app. |
107 AppEventRouter::DispatchOnRestartedEvent(profile_, extension); | 115 AppEventRouter::DispatchOnRestartedEvent(profile_, extension); |
108 } | 116 } |
109 | 117 |
118 void AppRestoreService::LaunchAppWithId(const std::string& extension_id) { | |
benwells
2013/03/15 00:39:04
I would prefer all this in a different PKS dedicat
tapted
2013/03/15 00:51:16
I'll try that out.
Although I think the #if is st
| |
119 ExtensionService* extension_service = | |
120 ExtensionSystem::Get(profile_)->extension_service(); | |
121 const Extension* extension = | |
122 extension_service->GetExtensionById(extension_id, false); | |
123 // There is a possibility of the extension getting uninstalled. | |
124 if (!extension) | |
125 return; | |
126 | |
127 extensions::AppEventRouter::DispatchOnLaunchedEvent(profile_, extension); | |
128 } | |
129 | |
130 void AppRestoreService::MaybeHandleMetroRelaunch( | |
131 ExtensionService* extension_service) { | |
132 #if defined(OS_WIN) | |
133 const int kRestartAppLaunchDelayMs = 1000; | |
134 PrefService* prefs = g_browser_process->local_state(); | |
135 if (!prefs->HasPrefPath(prefs::kRestartFromMetroWithAppLaunch)) | |
136 return; | |
137 | |
138 std::string extension_id = | |
139 prefs->GetString(prefs::kRestartFromMetroWithAppLaunch); | |
140 if (extension_id.empty()) | |
141 return; | |
142 | |
143 prefs->ClearPref(prefs::kRestartFromMetroWithAppLaunch); | |
144 MessageLoop::current()->PostDelayedTask( | |
145 FROM_HERE, | |
146 base::Bind(&AppRestoreService::LaunchAppWithId, | |
147 base::Unretained(this), | |
148 extension_id), | |
149 base::TimeDelta::FromMilliseconds(kRestartAppLaunchDelayMs)); | |
150 #endif // defined(OS_WIN) | |
151 } | |
152 | |
110 } // namespace apps | 153 } // namespace apps |
OLD | NEW |