Index: extensions/renderer/api_signature.h |
diff --git a/extensions/renderer/api_signature.h b/extensions/renderer/api_signature.h |
index c2f3ab888749c7824f9c4c5e511a43621d2fb0d7..c9b120183cb5975256134be88cea7c581cf22fe7 100644 |
--- a/extensions/renderer/api_signature.h |
+++ b/extensions/renderer/api_signature.h |
@@ -30,32 +30,52 @@ class APISignature { |
APISignature(const base::ListValue& specification); |
~APISignature(); |
+ // Parses |arguments| against this signature, and populates |args_out| with |
+ // the v8 values (performing no conversion). The resulting vector may differ |
+ // from the list of arguments passed in because it will include null-filled |
+ // optional arguments. |
+ // Returns true if the arguments were successfully parsed and converted. |
+ bool ParseArgumentsToV8(gin::Arguments* arguments, |
+ const ArgumentSpec::RefMap& type_refs, |
+ std::vector<v8::Local<v8::Value>>* args_out, |
+ std::string* error) const; |
+ |
// Parses |arguments| against this signature, converting to a base::ListValue. |
- // If the arguments don't match, null is returned and |error| is populated. |
- std::unique_ptr<base::ListValue> ParseArguments( |
- gin::Arguments* arguments, |
- const ArgumentSpec::RefMap& type_refs, |
- v8::Local<v8::Function>* callback_out, |
- std::string* error) const; |
+ // Returns true if the arguments were successfully parsed and converted, and |
+ // populates |args_out| and |callback_out| with the JSON arguments and |
+ // callback values, respectively. On failure, returns false populates |error|. |
+ bool ParseArgumentsToJSON(gin::Arguments* arguments, |
+ const ArgumentSpec::RefMap& type_refs, |
+ std::unique_ptr<base::ListValue>* args_out, |
+ v8::Local<v8::Function>* callback_out, |
+ std::string* error) const; |
private: |
+ // Common implementation for ParseArgumentsToJSON and ParseArgumentsToV8. |
+ bool ParseArgumentsImpl(gin::Arguments* arguments, |
+ const ArgumentSpec::RefMap& type_refs, |
+ std::vector<v8::Local<v8::Value>>* v8_out, |
+ std::unique_ptr<base::ListValue>* json_out, |
+ v8::Local<v8::Function>* callback_out, |
+ std::string* error) const; |
+ |
// Attempts to match an argument from |arguments| to the given |spec|. |
- // If the next argmument does not match and |spec| is optional, a null |
- // base::Value is returned. |
- // If the argument matches, |arguments| is advanced and the converted value is |
- // returned. |
- // If the argument does not match and it is not optional, returns null and |
- // populates error. |
- std::unique_ptr<base::Value> ParseArgument( |
- const ArgumentSpec& spec, |
- v8::Local<v8::Context> context, |
- gin::Arguments* arguments, |
- const ArgumentSpec::RefMap& type_refs, |
- std::string* error) const; |
+ // If the next argmument does not match and |spec| is optional, uses a null |
+ // value. |
+ // If the argument matches, |arguments| is advanced, and the matched value is |
+ // added to either |v8_out| or |json_out|. |
+ // Returns true on success. |
+ bool ParseArgument(const ArgumentSpec& spec, |
+ v8::Local<v8::Context> context, |
+ gin::Arguments* arguments, |
+ const ArgumentSpec::RefMap& type_refs, |
+ std::vector<v8::Local<v8::Value>>* v8_out, |
+ base::ListValue* json_out, |
+ std::string* error) const; |
// Parses the callback from |arguments| according to |callback_spec|. Since |
- // the callback isn't converted into a base::Value, this is different from |
- // ParseArgument() above. |
+ // the callback can be treated differently than the rest of the arguments, |
+ // this differs from ParseArgument() above. |
bool ParseCallback(gin::Arguments* arguments, |
const ArgumentSpec& callback_spec, |
std::string* error, |