Chromium Code Reviews| 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(); |