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

Unified Diff: extensions/renderer/storage_area.cc

Issue 2716883003: [Extensions Bindings] Store API type methods in the reference map (Closed)
Patch Set: . Created 3 years, 10 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
« no previous file with comments | « extensions/renderer/storage_area.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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", &parameters));
- 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
« no previous file with comments | « extensions/renderer/storage_area.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698