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(); |