| Index: extensions/renderer/storage_area.cc
|
| diff --git a/extensions/renderer/storage_area.cc b/extensions/renderer/storage_area.cc
|
| index a87a04964c746a880ee6ff9405c67b1bb7346178..4b68e717f03a61c812c6a6bc763c26e906d0bbbe 100644
|
| --- a/extensions/renderer/storage_area.cc
|
| +++ b/extensions/renderer/storage_area.cc
|
| @@ -6,11 +6,10 @@
|
|
|
| #include "base/memory/ptr_util.h"
|
| #include "base/strings/stringprintf.h"
|
| -#include "base/values.h"
|
| #include "extensions/common/api/storage.h"
|
| -#include "extensions/common/extension_api.h"
|
| #include "extensions/renderer/api_request_handler.h"
|
| #include "extensions/renderer/api_signature.h"
|
| +#include "extensions/renderer/api_type_reference_map.h"
|
| #include "gin/arguments.h"
|
| #include "gin/handle.h"
|
| #include "gin/object_template_builder.h"
|
| @@ -193,9 +192,12 @@ void StorageArea::HandleFunctionCall(const std::string& method_name,
|
| std::unique_ptr<base::ListValue> converted_arguments;
|
| v8::Local<v8::Function> callback;
|
| std::string error;
|
| - if (!GetFunctionSchema("storage", "storage.StorageArea", method_name)
|
| - .ParseArgumentsToJSON(context, argument_list, *type_refs_,
|
| - &converted_arguments, &callback, &error)) {
|
| + const APISignature* signature = type_refs_->GetTypeMethodSignature(
|
| + base::StringPrintf("%s.%s", "storage.StorageArea", method_name.c_str()));
|
| + DCHECK(signature);
|
| + if (!signature->ParseArgumentsToJSON(context, argument_list, *type_refs_,
|
| + &converted_arguments, &callback,
|
| + &error)) {
|
| arguments->ThrowTypeError("Invalid invocation");
|
| return;
|
| }
|
| @@ -206,50 +208,4 @@ void StorageArea::HandleFunctionCall(const std::string& method_name,
|
| v8::Local<v8::Function>());
|
| }
|
|
|
| -const APISignature& StorageArea::GetFunctionSchema(
|
| - base::StringPiece api_name,
|
| - base::StringPiece type_name,
|
| - base::StringPiece function_name) {
|
| - std::string full_name = base::StringPrintf(
|
| - "%s.%s.%s", api_name.data(), type_name.data(), function_name.data());
|
| - auto iter = signatures_.find(full_name);
|
| - if (iter != signatures_.end())
|
| - return *iter->second;
|
| -
|
| - const base::DictionaryValue* full_schema =
|
| - ExtensionAPI::GetSharedInstance()->GetSchema(api_name.as_string());
|
| - const base::ListValue* types = nullptr;
|
| - CHECK(full_schema->GetList("types", &types));
|
| - const base::DictionaryValue* type_schema = nullptr;
|
| - for (const auto& type : *types) {
|
| - const base::DictionaryValue* type_dict = nullptr;
|
| - CHECK(type->GetAsDictionary(&type_dict));
|
| - std::string id;
|
| - CHECK(type_dict->GetString("id", &id));
|
| - if (id == type_name) {
|
| - type_schema = type_dict;
|
| - break;
|
| - }
|
| - }
|
| - CHECK(type_schema);
|
| - const base::ListValue* type_functions = nullptr;
|
| - CHECK(type_schema->GetList("functions", &type_functions));
|
| - const base::ListValue* parameters = nullptr;
|
| - for (const auto& function : *type_functions) {
|
| - const base::DictionaryValue* function_dict = nullptr;
|
| - CHECK(function->GetAsDictionary(&function_dict));
|
| - std::string name;
|
| - CHECK(function_dict->GetString("name", &name));
|
| - if (name == function_name) {
|
| - CHECK(function_dict->GetList("parameters", ¶meters));
|
| - break;
|
| - }
|
| - }
|
| - CHECK(parameters);
|
| - auto signature = base::MakeUnique<APISignature>(*parameters);
|
| - const auto* raw_signature = signature.get();
|
| - signatures_[full_name] = std::move(signature);
|
| - return *raw_signature;
|
| -}
|
| -
|
| } // namespace extensions
|
|
|