Load the bookmark manager extension at Chrome startup.
Review URL: http://codereview.chromium.org/660232
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@40683 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/chrome/browser/extensions/extensions_service.cc b/chrome/browser/extensions/extensions_service.cc
index 77f7f48..e94d9bd1 100644
--- a/chrome/browser/extensions/extensions_service.cc
+++ b/chrome/browser/extensions/extensions_service.cc
@@ -38,6 +38,7 @@
#include "chrome/common/extensions/extension_l10n_util.h"
#include "chrome/common/notification_service.h"
#include "chrome/common/notification_type.h"
+#include "chrome/common/json_value_serializer.h"
#include "chrome/common/pref_names.h"
#include "chrome/common/url_constants.h"
#include "webkit/database/database_tracker.h"
@@ -321,9 +322,37 @@
extension_path, scoped_refptr<ExtensionsService>(this)));
}
+void ExtensionsService::LoadComponentExtensions() {
+ for (RegisteredComponentExtensions::iterator it =
+ component_extension_manifests_.begin();
+ it != component_extension_manifests_.end(); ++it) {
+ JSONStringValueSerializer serializer(it->manifest);
+ scoped_ptr<Value> manifest(serializer.Deserialize(NULL));
+ DCHECK(manifest.get());
+
+ scoped_ptr<Extension> extension(new Extension(it->root_directory));
+ extension->set_location(Extension::COMPONENT);
+
+ std::string error;
+ if (!extension->InitFromValue(
+ *static_cast<DictionaryValue*>(manifest.get()),
+ true, // require key
+ &error)) {
+ NOTREACHED();
+ return;
+ }
+
+ OnExtensionLoaded(extension.release(), false); // Don't allow privilege
+ // increase.
+ }
+}
+
void ExtensionsService::LoadAllExtensions() {
base::TimeTicks start_time = base::TimeTicks::Now();
+ // Load any component extensions.
+ LoadComponentExtensions();
+
// Load the previously installed extensions.
scoped_ptr<ExtensionPrefs::ExtensionsInfo> info(
ExtensionPrefs::CollectExtensionsInfo(extension_prefs_.get()));
@@ -363,43 +392,46 @@
UMA_HISTOGRAM_COUNTS_100("Extensions.LoadAll", extensions_.size());
UMA_HISTOGRAM_COUNTS_100("Extensions.Disabled", disabled_extensions_.size());
- if (extensions_.size()) {
- UMA_HISTOGRAM_TIMES("Extensions.LoadAllTime",
- base::TimeTicks::Now() - start_time);
+ UMA_HISTOGRAM_TIMES("Extensions.LoadAllTime",
+ base::TimeTicks::Now() - start_time);
- int user_script_count = 0;
- int extension_count = 0;
- int theme_count = 0;
- int external_count = 0;
- int page_action_count = 0;
- int browser_action_count = 0;
- ExtensionList::iterator ex;
- for (ex = extensions_.begin(); ex != extensions_.end(); ++ex) {
- if ((*ex)->IsTheme()) {
- theme_count++;
- } else if ((*ex)->converted_from_user_script()) {
- user_script_count++;
- } else {
- extension_count++;
- }
- if (Extension::IsExternalLocation((*ex)->location())) {
- external_count++;
- }
- if ((*ex)->page_action() != NULL) {
- page_action_count++;
- }
- if ((*ex)->browser_action() != NULL) {
- browser_action_count++;
- }
+ int user_script_count = 0;
+ int extension_count = 0;
+ int theme_count = 0;
+ int external_count = 0;
+ int page_action_count = 0;
+ int browser_action_count = 0;
+ ExtensionList::iterator ex;
+ for (ex = extensions_.begin(); ex != extensions_.end(); ++ex) {
+ // Don't count component extensions, since they are only extensions as an
+ // implementation detail.
+ if ((*ex)->location() == Extension::COMPONENT)
+ continue;
+
+ if ((*ex)->IsTheme()) {
+ theme_count++;
+ } else if ((*ex)->converted_from_user_script()) {
+ user_script_count++;
+ } else {
+ extension_count++;
}
- UMA_HISTOGRAM_COUNTS_100("Extensions.LoadExtension", extension_count);
- UMA_HISTOGRAM_COUNTS_100("Extensions.LoadUserScript", user_script_count);
- UMA_HISTOGRAM_COUNTS_100("Extensions.LoadTheme", theme_count);
- UMA_HISTOGRAM_COUNTS_100("Extensions.LoadExternal", external_count);
- UMA_HISTOGRAM_COUNTS_100("Extensions.LoadPageAction", page_action_count);
- UMA_HISTOGRAM_COUNTS_100("Extensions.LoadBrowserAction",
- browser_action_count);
+ if (Extension::IsExternalLocation((*ex)->location())) {
+ external_count++;
+ }
+ if ((*ex)->page_action() != NULL) {
+ page_action_count++;
+ }
+ if ((*ex)->browser_action() != NULL) {
+ browser_action_count++;
+ }
}
+ UMA_HISTOGRAM_COUNTS_100("Extensions.LoadExtension", extension_count);
+ UMA_HISTOGRAM_COUNTS_100("Extensions.LoadUserScript", user_script_count);
+ UMA_HISTOGRAM_COUNTS_100("Extensions.LoadTheme", theme_count);
+ UMA_HISTOGRAM_COUNTS_100("Extensions.LoadExternal", external_count);
+ UMA_HISTOGRAM_COUNTS_100("Extensions.LoadPageAction", page_action_count);
+ UMA_HISTOGRAM_COUNTS_100("Extensions.LoadBrowserAction",
+ browser_action_count);
}
void ExtensionsService::LoadInstalledExtension(const ExtensionInfo& info,