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

Unified Diff: chrome/common/extensions/api/extension_api.cc

Issue 15091002: Lazily load API schemas from resource files and convert all APIs to features (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 7 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 side-by-side diff with in-line comments
Download patch
Index: chrome/common/extensions/api/extension_api.cc
diff --git a/chrome/common/extensions/api/extension_api.cc b/chrome/common/extensions/api/extension_api.cc
index 829ec472a7661490b33fdae0d71d1fb6b2e27281..7e90599c6349b42a7668898595ac8abc1a80e015 100644
--- a/chrome/common/extensions/api/extension_api.cc
+++ b/chrome/common/extensions/api/extension_api.cc
@@ -8,6 +8,7 @@
#include <string>
#include <vector>
+#include "base/bind.h"
#include "base/json/json_reader.h"
#include "base/json/json_writer.h"
#include "base/lazy_instance.h"
@@ -286,66 +287,54 @@ void ExtensionAPI::InitDefaultConfiguration() {
// Schemas to be loaded from resources.
CHECK(unloaded_schemas_.empty());
- RegisterSchema("app", ReadFromResource(
- IDR_EXTENSION_API_JSON_APP));
- RegisterSchema("browserAction", ReadFromResource(
- IDR_EXTENSION_API_JSON_BROWSERACTION));
- RegisterSchema("browsingData", ReadFromResource(
- IDR_EXTENSION_API_JSON_BROWSINGDATA));
- RegisterSchema("commands", ReadFromResource(
- IDR_EXTENSION_API_JSON_COMMANDS));
- RegisterSchema("declarativeContent", ReadFromResource(
- IDR_EXTENSION_API_JSON_DECLARATIVE_CONTENT));
- RegisterSchema("declarativeWebRequest", ReadFromResource(
- IDR_EXTENSION_API_JSON_DECLARATIVE_WEBREQUEST));
- RegisterSchema("experimental.input.virtualKeyboard", ReadFromResource(
- IDR_EXTENSION_API_JSON_EXPERIMENTAL_INPUT_VIRTUALKEYBOARD));
- RegisterSchema("experimental.processes", ReadFromResource(
- IDR_EXTENSION_API_JSON_EXPERIMENTAL_PROCESSES));
- RegisterSchema("experimental.rlz", ReadFromResource(
- IDR_EXTENSION_API_JSON_EXPERIMENTAL_RLZ));
- RegisterSchema("runtime", ReadFromResource(
- IDR_EXTENSION_API_JSON_RUNTIME));
- RegisterSchema("fileBrowserHandler", ReadFromResource(
- IDR_EXTENSION_API_JSON_FILEBROWSERHANDLER));
- RegisterSchema("fileBrowserPrivate", ReadFromResource(
- IDR_EXTENSION_API_JSON_FILEBROWSERPRIVATE));
- RegisterSchema("input.ime", ReadFromResource(
- IDR_EXTENSION_API_JSON_INPUT_IME));
- RegisterSchema("inputMethodPrivate", ReadFromResource(
- IDR_EXTENSION_API_JSON_INPUTMETHODPRIVATE));
- RegisterSchema("pageAction", ReadFromResource(
- IDR_EXTENSION_API_JSON_PAGEACTION));
- RegisterSchema("pageActions", ReadFromResource(
- IDR_EXTENSION_API_JSON_PAGEACTIONS));
- RegisterSchema("privacy", ReadFromResource(
- IDR_EXTENSION_API_JSON_PRIVACY));
- RegisterSchema("proxy", ReadFromResource(
- IDR_EXTENSION_API_JSON_PROXY));
- RegisterSchema("scriptBadge", ReadFromResource(
- IDR_EXTENSION_API_JSON_SCRIPTBADGE));
- RegisterSchema("streamsPrivate", ReadFromResource(
- IDR_EXTENSION_API_JSON_STREAMSPRIVATE));
- RegisterSchema("ttsEngine", ReadFromResource(
- IDR_EXTENSION_API_JSON_TTSENGINE));
- RegisterSchema("tts", ReadFromResource(
- IDR_EXTENSION_API_JSON_TTS));
- RegisterSchema("types", ReadFromResource(
- IDR_EXTENSION_API_JSON_TYPES));
- RegisterSchema("webRequestInternal", ReadFromResource(
- IDR_EXTENSION_API_JSON_WEBREQUESTINTERNAL));
- RegisterSchema("webstore", ReadFromResource(
- IDR_EXTENSION_API_JSON_WEBSTORE));
- RegisterSchema("webstorePrivate", ReadFromResource(
- IDR_EXTENSION_API_JSON_WEBSTOREPRIVATE));
+ RegisterSchema("app", IDR_EXTENSION_API_JSON_APP);
+ RegisterSchema("browserAction", IDR_EXTENSION_API_JSON_BROWSERACTION);
+ RegisterSchema("browsingData", IDR_EXTENSION_API_JSON_BROWSINGDATA);
+ RegisterSchema("commands", IDR_EXTENSION_API_JSON_COMMANDS);
+ RegisterSchema("declarativeContent",
+ IDR_EXTENSION_API_JSON_DECLARATIVE_CONTENT);
+ RegisterSchema("declarativeWebRequest",
+ IDR_EXTENSION_API_JSON_DECLARATIVE_WEBREQUEST);
+ RegisterSchema("experimental.input.virtualKeyboard",
+ IDR_EXTENSION_API_JSON_EXPERIMENTAL_INPUT_VIRTUALKEYBOARD);
+ RegisterSchema("experimental.processes",
+ IDR_EXTENSION_API_JSON_EXPERIMENTAL_PROCESSES);
+ RegisterSchema("experimental.rlz", IDR_EXTENSION_API_JSON_EXPERIMENTAL_RLZ);
+ RegisterSchema("runtime", IDR_EXTENSION_API_JSON_RUNTIME);
+ RegisterSchema("fileBrowserHandler",
+ IDR_EXTENSION_API_JSON_FILEBROWSERHANDLER);
+ RegisterSchema("fileBrowserPrivate",
+ IDR_EXTENSION_API_JSON_FILEBROWSERPRIVATE);
+ RegisterSchema("input.ime", IDR_EXTENSION_API_JSON_INPUT_IME);
+ RegisterSchema("inputMethodPrivate",
+ IDR_EXTENSION_API_JSON_INPUTMETHODPRIVATE);
+ RegisterSchema("pageAction", IDR_EXTENSION_API_JSON_PAGEACTION);
+ RegisterSchema("pageActions", IDR_EXTENSION_API_JSON_PAGEACTIONS);
+ RegisterSchema("privacy", IDR_EXTENSION_API_JSON_PRIVACY);
+ RegisterSchema("proxy", IDR_EXTENSION_API_JSON_PROXY);
+ RegisterSchema("scriptBadge", IDR_EXTENSION_API_JSON_SCRIPTBADGE);
+ RegisterSchema("streamsPrivate", IDR_EXTENSION_API_JSON_STREAMSPRIVATE);
+ RegisterSchema("ttsEngine", IDR_EXTENSION_API_JSON_TTSENGINE);
+ RegisterSchema("tts", IDR_EXTENSION_API_JSON_TTS);
+ RegisterSchema("types", IDR_EXTENSION_API_JSON_TYPES);
+ RegisterSchema("webRequestInternal",
+ IDR_EXTENSION_API_JSON_WEBREQUESTINTERNAL);
+ RegisterSchema("webstore", IDR_EXTENSION_API_JSON_WEBSTORE);
+ RegisterSchema("webstorePrivate", IDR_EXTENSION_API_JSON_WEBSTOREPRIVATE);
// Schemas to be loaded via JSON generated from IDL files.
- GeneratedSchemas::Get(&unloaded_schemas_);
+ std::vector<std::string> names;
+ GeneratedSchemas::GetNames(&names);
+ for (size_t i = 0; i < names.size(); ++i)
+ RegisterGeneratedSchema(names[i]);
}
-void ExtensionAPI::RegisterSchema(const std::string& name,
- const base::StringPiece& source) {
- unloaded_schemas_[name] = source;
+void ExtensionAPI::RegisterSchema(const std::string& name, int resource_id) {
not at google - send to devlin 2013/05/10 02:46:45 RegisterSchemaResource?
cduvall 2013/05/10 03:31:07 Done.
+ unloaded_schemas_[name] = base::Bind(&ReadFromResource, resource_id);
+}
+
+void ExtensionAPI::RegisterGeneratedSchema(const std::string& name) {
+ unloaded_schemas_[name] = base::Bind(&GeneratedSchemas::Get, name);
not at google - send to devlin 2013/05/10 02:46:45 There should be some kind of optimisation possible
cduvall 2013/05/10 03:31:07 So I tried to optimize by adding the IsGenerated()
}
void ExtensionAPI::RegisterDependencyProvider(const std::string& name,
@@ -455,12 +444,13 @@ const DictionaryValue* ExtensionAPI::GetSchema(const std::string& full_name) {
result = maybe_schema->second.get();
} else {
// Might not have loaded yet; or might just not exist.
- std::map<std::string, base::StringPiece>::iterator maybe_schema_resource =
+ UnloadedSchemaMap ::iterator maybe_schema_resource =
not at google - send to devlin 2013/05/10 02:46:45 extra space?
cduvall 2013/05/10 03:31:07 Done.
unloaded_schemas_.find(api_name);
if (maybe_schema_resource == unloaded_schemas_.end())
return NULL;
- LoadSchema(maybe_schema_resource->first, maybe_schema_resource->second);
+ LoadSchema(maybe_schema_resource->first,
+ maybe_schema_resource->second.Run());
maybe_schema = schemas_.find(api_name);
CHECK(schemas_.end() != maybe_schema);
result = maybe_schema->second.get();

Powered by Google App Engine
This is Rietveld 408576698