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

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 test 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 13 matching lines...) Expand all
71 #include "chrome/browser/sync/api/sync_change.h" 72 #include "chrome/browser/sync/api/sync_change.h"
72 #include "chrome/browser/themes/theme_service.h" 73 #include "chrome/browser/themes/theme_service.h"
73 #include "chrome/browser/themes/theme_service_factory.h" 74 #include "chrome/browser/themes/theme_service_factory.h"
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/favicon_source.h" 80 #include "chrome/browser/ui/webui/favicon_source.h"
80 #include "chrome/browser/ui/webui/ntp/thumbnail_source.h" 81 #include "chrome/browser/ui/webui/ntp/thumbnail_source.h"
82 #include "chrome/browser/web_applications/web_app.h"
81 #include "chrome/common/child_process_logging.h" 83 #include "chrome/common/child_process_logging.h"
84 #include "chrome/common/chrome_constants.h"
82 #include "chrome/common/chrome_notification_types.h" 85 #include "chrome/common/chrome_notification_types.h"
83 #include "chrome/common/chrome_paths.h" 86 #include "chrome/common/chrome_paths.h"
84 #include "chrome/common/chrome_switches.h" 87 #include "chrome/common/chrome_switches.h"
85 #include "chrome/common/extensions/extension.h" 88 #include "chrome/common/extensions/extension.h"
86 #include "chrome/common/extensions/extension_constants.h" 89 #include "chrome/common/extensions/extension_constants.h"
87 #include "chrome/common/extensions/extension_error_utils.h" 90 #include "chrome/common/extensions/extension_error_utils.h"
88 #include "chrome/common/extensions/extension_file_util.h" 91 #include "chrome/common/extensions/extension_file_util.h"
89 #include "chrome/common/extensions/extension_messages.h" 92 #include "chrome/common/extensions/extension_messages.h"
90 #include "chrome/common/extensions/extension_resource.h" 93 #include "chrome/common/extensions/extension_resource.h"
91 #include "chrome/common/pref_names.h" 94 #include "chrome/common/pref_names.h"
(...skipping 2132 matching lines...) Expand 10 before | Expand all | Expand 10 after
2224 RecordPermissionMessagesHistogram( 2227 RecordPermissionMessagesHistogram(
2225 extension, "Extensions.Permissions_Install"); 2228 extension, "Extensions.Permissions_Install");
2226 } 2229 }
2227 2230
2228 extension_prefs_->OnExtensionInstalled( 2231 extension_prefs_->OnExtensionInstalled(
2229 extension, 2232 extension,
2230 initial_enable ? Extension::ENABLED : Extension::DISABLED, 2233 initial_enable ? Extension::ENABLED : Extension::DISABLED,
2231 from_webstore, 2234 from_webstore,
2232 page_ordinal); 2235 page_ordinal);
2233 2236
2234 // Unpacked extensions default to allowing file access, but if that has been 2237 if (initial_enable && extension->RequiresSeparateUserDataDirectory()) {
2235 // overridden, don't reset the value. 2238 SetupExtensionPrefsInSeparateDataDirectory(
2236 if (Extension::ShouldAlwaysAllowFileAccess(extension->location()) && 2239 extension, from_webstore, page_ordinal);
2237 !extension_prefs_->HasAllowFileAccessSetting(id)) {
2238 extension_prefs_->SetAllowFileAccess(id, true);
2239 } 2240 }
2240 2241
2241 // If the extension should automatically block network startup (e.g., it uses
2242 // the webRequest API), set the preference. Otherwise clear it, in case the
2243 // extension stopped using a relevant API.
2244 extension_prefs_->SetDelaysNetworkRequests(
2245 extension->id(), extension->ImplicitlyDelaysNetworkStartup());
2246
2247 content::NotificationService::current()->Notify( 2242 content::NotificationService::current()->Notify(
2248 chrome::NOTIFICATION_EXTENSION_INSTALLED, 2243 chrome::NOTIFICATION_EXTENSION_INSTALLED,
2249 content::Source<Profile>(profile_), 2244 content::Source<Profile>(profile_),
2250 content::Details<const Extension>(extension)); 2245 content::Details<const Extension>(extension));
2251 2246
2252 // Transfer ownership of |extension| to AddExtension. 2247 // Transfer ownership of |extension| to AddExtension.
2253 AddExtension(scoped_extension); 2248 AddExtension(scoped_extension);
2254 } 2249 }
2255 2250
2256 const Extension* ExtensionService::GetExtensionByIdInternal( 2251 const Extension* ExtensionService::GetExtensionByIdInternal(
(...skipping 372 matching lines...) Expand 10 before | Expand all | Expand 10 after
2629 // 2624 //
2630 // To coexist with certain unit tests that don't have an IO thread message 2625 // To coexist with certain unit tests that don't have an IO thread message
2631 // loop available at ExtensionService shutdown, we lazy-initialize this 2626 // loop available at ExtensionService shutdown, we lazy-initialize this
2632 // object so that those cases neither create nor destroy a SocketController. 2627 // object so that those cases neither create nor destroy a SocketController.
2633 CHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 2628 CHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
2634 if (!socket_controller_) { 2629 if (!socket_controller_) {
2635 socket_controller_ = new extensions::SocketController(); 2630 socket_controller_ = new extensions::SocketController();
2636 } 2631 }
2637 return socket_controller_; 2632 return socket_controller_;
2638 } 2633 }
2634
2635 void ExtensionService::SetupExtensionPrefsInSeparateDataDirectory(
2636 const Extension* extension,
2637 bool from_webstore,
2638 const StringOrdinal& page_ordinal) {
2639 const std::string& id = extension->id();
2640 FilePath data_dir =
2641 web_app::GetWebAppDataDirectory(profile_->GetPath(), *extension);
2642 FilePath profile_path = data_dir.AppendASCII(chrome::kInitialProfile);
2643 FilePath pref_path = profile_path.Append(chrome::kPreferencesFilename);
2644 scoped_ptr<PrefService> prefs_service(PrefService::CreatePrefService(
2645 pref_path, NULL, false));
2646
2647 ExtensionPrefValueMap map;
2648 ExtensionPrefs::RegisterUserPrefs(prefs_service.get());
2649 ExtensionPrefs extension_prefs(prefs_service.get(), install_directory_, &map);
2650 extension_prefs.Init(false);
2651 extension_prefs.OnExtensionInstalled(extension,
2652 Extension::ENABLED,
2653 from_webstore,
2654 page_ordinal);
2655 extension_prefs.AddGrantedPermissions(id, extension->GetActivePermissions());
Mihai Parparita -not on Chrome 2012/02/13 23:29:24 Is this a (partial) duplication of what CrxInstall
2656 extension_prefs.SetExtensionState(id, Extension::ENABLED);
2657
2658 prefs_service->CommitPendingWrite();
2659 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698