| Index: extensions/common/extension_api.cc
|
| diff --git a/extensions/common/extension_api.cc b/extensions/common/extension_api.cc
|
| index 9b3035ef3d53ea2ec3c25724750169221cf3abee..93130c2bcdfb6a1185ebe3dcbc7cd132773fb5b4 100644
|
| --- a/extensions/common/extension_api.cc
|
| +++ b/extensions/common/extension_api.cc
|
| @@ -212,6 +212,26 @@ bool ExtensionAPI::IsAvailableToWebUI(const std::string& name,
|
| return IsAvailable(name, NULL, Feature::WEBUI_CONTEXT, url).is_available();
|
| }
|
|
|
| +base::StringPiece ExtensionAPI::GetSchemaStringPiece(
|
| + const std::string& api_name) {
|
| + DCHECK_EQ(api_name, GetAPINameFromFullName(api_name, nullptr));
|
| + StringPieceMap::iterator cached = schema_strings_.find(api_name);
|
| + if (cached != schema_strings_.end())
|
| + return cached->second;
|
| +
|
| + ExtensionsClient* client = ExtensionsClient::Get();
|
| + DCHECK(client);
|
| + if (default_configuration_initialized_ &&
|
| + client->IsAPISchemaGenerated(api_name)) {
|
| + base::StringPiece schema = client->GetAPISchema(api_name);
|
| + CHECK(!schema.empty());
|
| + schema_strings_[api_name] = schema;
|
| + return schema;
|
| + }
|
| +
|
| + return base::StringPiece();
|
| +}
|
| +
|
| const base::DictionaryValue* ExtensionAPI::GetSchema(
|
| const std::string& full_name) {
|
| std::string child_name;
|
| @@ -222,16 +242,10 @@ const base::DictionaryValue* ExtensionAPI::GetSchema(
|
| if (maybe_schema != schemas_.end()) {
|
| result = maybe_schema->second.get();
|
| } else {
|
| - // Might not have loaded yet; or might just not exist.
|
| - extensions::ExtensionsClient* extensions_client =
|
| - extensions::ExtensionsClient::Get();
|
| - DCHECK(extensions_client);
|
| - if (default_configuration_initialized_ &&
|
| - extensions_client->IsAPISchemaGenerated(api_name)) {
|
| - LoadSchema(api_name, extensions_client->GetAPISchema(api_name));
|
| - } else {
|
| + base::StringPiece schema_string = GetSchemaStringPiece(api_name);
|
| + if (schema_string.empty())
|
| return nullptr;
|
| - }
|
| + LoadSchema(api_name, schema_string);
|
|
|
| maybe_schema = schemas_.find(api_name);
|
| CHECK(schemas_.end() != maybe_schema);
|
| @@ -287,7 +301,8 @@ std::string ExtensionAPI::GetAPINameFromFullName(const std::string& full_name,
|
| api_name_candidate = api_name_candidate.substr(0, last_dot_index);
|
| }
|
|
|
| - *child_name = "";
|
| + if (child_name)
|
| + *child_name = "";
|
| return std::string();
|
| }
|
|
|
|
|