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

Side by Side Diff: chrome/browser/extensions/extension_service.cc

Issue 9374009: Install platform apps into a separate data directory (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix comment Created 8 years, 10 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 "chrome/browser/extensions/extension_service.h" 5 #include "chrome/browser/extensions/extension_service.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <set> 8 #include <set>
9 9
10 #include "base/basictypes.h" 10 #include "base/basictypes.h"
(...skipping 27 matching lines...) Expand all
38 #include "chrome/browser/extensions/crx_installer.h" 38 #include "chrome/browser/extensions/crx_installer.h"
39 #include "chrome/browser/extensions/default_apps_trial.h" 39 #include "chrome/browser/extensions/default_apps_trial.h"
40 #include "chrome/browser/extensions/extension_browser_event_router.h" 40 #include "chrome/browser/extensions/extension_browser_event_router.h"
41 #include "chrome/browser/extensions/extension_cookies_api.h" 41 #include "chrome/browser/extensions/extension_cookies_api.h"
42 #include "chrome/browser/extensions/extension_data_deleter.h" 42 #include "chrome/browser/extensions/extension_data_deleter.h"
43 #include "chrome/browser/extensions/extension_error_reporter.h" 43 #include "chrome/browser/extensions/extension_error_reporter.h"
44 #include "chrome/browser/extensions/extension_global_error.h" 44 #include "chrome/browser/extensions/extension_global_error.h"
45 #include "chrome/browser/extensions/extension_host.h" 45 #include "chrome/browser/extensions/extension_host.h"
46 #include "chrome/browser/extensions/extension_input_ime_api.h" 46 #include "chrome/browser/extensions/extension_input_ime_api.h"
47 #include "chrome/browser/extensions/extension_management_api.h" 47 #include "chrome/browser/extensions/extension_management_api.h"
48 #include "chrome/browser/extensions/extension_pref_value_map.h"
48 #include "chrome/browser/extensions/extension_preference_api.h" 49 #include "chrome/browser/extensions/extension_preference_api.h"
49 #include "chrome/browser/extensions/extension_process_manager.h" 50 #include "chrome/browser/extensions/extension_process_manager.h"
50 #include "chrome/browser/extensions/extension_processes_api.h" 51 #include "chrome/browser/extensions/extension_processes_api.h"
51 #include "chrome/browser/extensions/extension_sorting.h" 52 #include "chrome/browser/extensions/extension_sorting.h"
52 #include "chrome/browser/extensions/extension_special_storage_policy.h" 53 #include "chrome/browser/extensions/extension_special_storage_policy.h"
53 #include "chrome/browser/extensions/extension_sync_data.h" 54 #include "chrome/browser/extensions/extension_sync_data.h"
54 #include "chrome/browser/extensions/extension_updater.h" 55 #include "chrome/browser/extensions/extension_updater.h"
55 #include "chrome/browser/extensions/extension_web_ui.h" 56 #include "chrome/browser/extensions/extension_web_ui.h"
56 #include "chrome/browser/extensions/extension_webnavigation_api.h" 57 #include "chrome/browser/extensions/extension_webnavigation_api.h"
57 #include "chrome/browser/extensions/external_extension_provider_impl.h" 58 #include "chrome/browser/extensions/external_extension_provider_impl.h"
(...skipping 16 matching lines...) Expand all
74 #include "chrome/browser/ui/browser.h" 75 #include "chrome/browser/ui/browser.h"
75 #include "chrome/browser/ui/browser_list.h" 76 #include "chrome/browser/ui/browser_list.h"
76 #include "chrome/browser/ui/global_error_service.h" 77 #include "chrome/browser/ui/global_error_service.h"
77 #include "chrome/browser/ui/global_error_service_factory.h" 78 #include "chrome/browser/ui/global_error_service_factory.h"
78 #include "chrome/browser/ui/webui/chrome_url_data_manager.h" 79 #include "chrome/browser/ui/webui/chrome_url_data_manager.h"
79 #include "chrome/browser/ui/webui/extensions/extension_icon_source.h" 80 #include "chrome/browser/ui/webui/extensions/extension_icon_source.h"
80 #include "chrome/browser/ui/webui/favicon_source.h" 81 #include "chrome/browser/ui/webui/favicon_source.h"
81 #include "chrome/browser/ui/webui/ntp/thumbnail_source.h" 82 #include "chrome/browser/ui/webui/ntp/thumbnail_source.h"
82 #include "chrome/browser/web_applications/web_app.h" 83 #include "chrome/browser/web_applications/web_app.h"
83 #include "chrome/common/child_process_logging.h" 84 #include "chrome/common/child_process_logging.h"
85 #include "chrome/common/chrome_constants.h"
84 #include "chrome/common/chrome_notification_types.h" 86 #include "chrome/common/chrome_notification_types.h"
85 #include "chrome/common/chrome_paths.h" 87 #include "chrome/common/chrome_paths.h"
86 #include "chrome/common/chrome_switches.h" 88 #include "chrome/common/chrome_switches.h"
87 #include "chrome/common/extensions/extension.h" 89 #include "chrome/common/extensions/extension.h"
88 #include "chrome/common/extensions/extension_constants.h" 90 #include "chrome/common/extensions/extension_constants.h"
89 #include "chrome/common/extensions/extension_error_utils.h" 91 #include "chrome/common/extensions/extension_error_utils.h"
90 #include "chrome/common/extensions/extension_file_util.h" 92 #include "chrome/common/extensions/extension_file_util.h"
91 #include "chrome/common/extensions/extension_messages.h" 93 #include "chrome/common/extensions/extension_messages.h"
92 #include "chrome/common/extensions/extension_resource.h" 94 #include "chrome/common/extensions/extension_resource.h"
93 #include "chrome/common/pref_names.h" 95 #include "chrome/common/pref_names.h"
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
147 static bool IsSyncableExtension(const Extension& extension) { 149 static bool IsSyncableExtension(const Extension& extension) {
148 return extension.GetSyncType() == Extension::SYNC_TYPE_EXTENSION; 150 return extension.GetSyncType() == Extension::SYNC_TYPE_EXTENSION;
149 } 151 }
150 152
151 static bool IsSyncableApp(const Extension& extension) { 153 static bool IsSyncableApp(const Extension& extension) {
152 return extension.GetSyncType() == Extension::SYNC_TYPE_APP; 154 return extension.GetSyncType() == Extension::SYNC_TYPE_APP;
153 } 155 }
154 156
155 } // namespace 157 } // namespace
156 158
159 // static
160 bool ExtensionService::PlatformAppRequiresSeparateDataDirectory() {
161 #if defined(OS_MACOSX)
162 return true;
163 #else
164 return false;
Robert Sesek 2012/02/09 18:43:59 Leave a TODO here.
sail 2012/02/10 00:13:18 I'm not sure what the plans are for other platform
165 #endif
166 }
167
157 ExtensionService::ExtensionRuntimeData::ExtensionRuntimeData() 168 ExtensionService::ExtensionRuntimeData::ExtensionRuntimeData()
158 : background_page_ready(false), 169 : background_page_ready(false),
159 being_upgraded(false), 170 being_upgraded(false),
160 has_used_webrequest(false) { 171 has_used_webrequest(false) {
161 } 172 }
162 173
163 ExtensionService::ExtensionRuntimeData::~ExtensionRuntimeData() { 174 ExtensionService::ExtensionRuntimeData::~ExtensionRuntimeData() {
164 } 175 }
165 176
166 ExtensionService::NaClModuleInfo::NaClModuleInfo() { 177 ExtensionService::NaClModuleInfo::NaClModuleInfo() {
(...skipping 2054 matching lines...) Expand 10 before | Expand all | Expand 10 after
2221 } 2232 }
2222 2233
2223 // Do not record the install histograms for upgrades. 2234 // Do not record the install histograms for upgrades.
2224 if (!GetExtensionByIdInternal(extension->id(), true, true, false)) { 2235 if (!GetExtensionByIdInternal(extension->id(), true, true, false)) {
2225 UMA_HISTOGRAM_ENUMERATION("Extensions.InstallType", 2236 UMA_HISTOGRAM_ENUMERATION("Extensions.InstallType",
2226 extension->GetType(), 100); 2237 extension->GetType(), 100);
2227 RecordPermissionMessagesHistogram( 2238 RecordPermissionMessagesHistogram(
2228 extension, "Extensions.Permissions_Install"); 2239 extension, "Extensions.Permissions_Install");
2229 } 2240 }
2230 2241
2231 extension_prefs_->OnExtensionInstalled( 2242 SetupExtensionPrefs(
2232 extension, 2243 extension_prefs_, extension, from_webstore, page_ordinal, initial_enable);
2233 initial_enable ? Extension::ENABLED : Extension::DISABLED, 2244 if (initial_enable && PlatformAppRequiresSeparateDataDirectory()) {
2234 from_webstore, 2245 SetupExtensionPrefsInSeparateDataDirectory(
2235 page_ordinal); 2246 extension, from_webstore, page_ordinal);
2236
2237 // Unpacked extensions default to allowing file access, but if that has been
2238 // overridden, don't reset the value.
2239 if (Extension::ShouldAlwaysAllowFileAccess(extension->location()) &&
2240 !extension_prefs_->HasAllowFileAccessSetting(id)) {
2241 extension_prefs_->SetAllowFileAccess(id, true);
2242 } 2247 }
2243 2248
2244 // If the extension should automatically block network startup (e.g., it uses
2245 // the webRequest API), set the preference. Otherwise clear it, in case the
2246 // extension stopped using a relevant API.
2247 extension_prefs_->SetDelaysNetworkRequests(
2248 extension->id(), extension->ImplicitlyDelaysNetworkStartup());
2249
2250 content::NotificationService::current()->Notify( 2249 content::NotificationService::current()->Notify(
2251 chrome::NOTIFICATION_EXTENSION_INSTALLED, 2250 chrome::NOTIFICATION_EXTENSION_INSTALLED,
2252 content::Source<Profile>(profile_), 2251 content::Source<Profile>(profile_),
2253 content::Details<const Extension>(extension)); 2252 content::Details<const Extension>(extension));
2254 2253
2255 // Temporary feature to always install shortcuts for platform apps to 2254 // Temporary feature to always install shortcuts for platform apps to
2256 // facilitate early testing. 2255 // facilitate early testing.
2257 // TODO(benwells): Remove before launching platform apps. 2256 // TODO(benwells): Remove before launching platform apps.
2258 if (extension->is_platform_app()) { 2257 if (extension->is_platform_app()) {
2259 StartInstallApplicationShortcut(extension); 2258 StartInstallApplicationShortcut(extension);
(...skipping 440 matching lines...) Expand 10 before | Expand all | Expand 10 after
2700 // 2699 //
2701 // To coexist with certain unit tests that don't have an IO thread message 2700 // To coexist with certain unit tests that don't have an IO thread message
2702 // loop available at ExtensionService shutdown, we lazy-initialize this 2701 // loop available at ExtensionService shutdown, we lazy-initialize this
2703 // object so that those cases neither create nor destroy a SocketController. 2702 // object so that those cases neither create nor destroy a SocketController.
2704 CHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 2703 CHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
2705 if (!socket_controller_) { 2704 if (!socket_controller_) {
2706 socket_controller_ = new extensions::SocketController(); 2705 socket_controller_ = new extensions::SocketController();
2707 } 2706 }
2708 return socket_controller_; 2707 return socket_controller_;
2709 } 2708 }
2709
2710 void ExtensionService::SetupExtensionPrefs(ExtensionPrefs* prefs,
2711 const Extension* extension,
2712 bool from_webstore,
2713 const StringOrdinal& page_ordinal,
2714 bool initial_enable) {
2715 const std::string& id = extension->id();
2716 prefs->OnExtensionInstalled(
2717 extension,
2718 initial_enable ? Extension::ENABLED : Extension::DISABLED,
2719 from_webstore,
2720 page_ordinal);
2721
2722 // Unpacked extensions default to allowing file access, but if that has been
2723 // overridden, don't reset the value.
2724 if (Extension::ShouldAlwaysAllowFileAccess(extension->location()) &&
2725 !prefs->HasAllowFileAccessSetting(id)) {
2726 prefs->SetAllowFileAccess(id, true);
2727 }
2728
2729 // If the extension should automatically block network startup (e.g., it uses
2730 // the webRequest API), set the preference. Otherwise clear it, in case the
2731 // extension stopped using a relevant API.
2732 prefs->SetDelaysNetworkRequests(
2733 id, extension->ImplicitlyDelaysNetworkStartup());
2734 }
2735
2736 void ExtensionService::SetupExtensionPrefsInSeparateDataDirectory(
2737 const Extension* extension,
2738 bool from_webstore,
2739 const StringOrdinal& page_ordinal) {
2740 const std::string& id = extension->id();
2741 FilePath data_dir = web_app::GetWebAppDataDirectory(
2742 profile_->GetPath(), id, GURL(extension->launch_web_url()));
2743 FilePath profile_path = data_dir.AppendASCII(chrome::kInitialProfile);
2744 FilePath pref_path = profile_path.Append(chrome::kPreferencesFilename);
2745 scoped_ptr<PrefService> prefs_service(PrefService::CreatePrefService(
2746 pref_path, NULL, false));
2747
2748 ExtensionPrefValueMap map;
2749 ExtensionPrefs::RegisterUserPrefs(prefs_service.get());
2750 ExtensionPrefs extension_prefs(prefs_service.get(), install_directory_, &map);
2751 extension_prefs.Init(false);
2752
2753 SetupExtensionPrefs(
2754 &extension_prefs, extension, from_webstore, page_ordinal, true);
2755 extension_prefs.AddGrantedPermissions(id, extension->GetActivePermissions());
2756 extension_prefs.SetExtensionState(id, Extension::ENABLED);
2757
2758 prefs_service->CommitPendingWrite();
2759 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698