diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-10-12 14:27:29 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-10-13 09:35:20 +0000 |
commit | c30a6232df03e1efbd9f3b226777b07e087a1122 (patch) | |
tree | e992f45784689f373bcc38d1b79a239ebe17ee23 /chromium/extensions/renderer/bindings/api_signature.cc | |
parent | 7b5b123ac58f58ffde0f4f6e488bcd09aa4decd3 (diff) | |
download | qtwebengine-chromium-85-based.tar.gz |
BASELINE: Update Chromium to 85.0.4183.14085-based
Change-Id: Iaa42f4680837c57725b1344f108c0196741f6057
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'chromium/extensions/renderer/bindings/api_signature.cc')
-rw-r--r-- | chromium/extensions/renderer/bindings/api_signature.cc | 28 |
1 files changed, 24 insertions, 4 deletions
diff --git a/chromium/extensions/renderer/bindings/api_signature.cc b/chromium/extensions/renderer/bindings/api_signature.cc index 03b34af7ad7..e617533e508 100644 --- a/chromium/extensions/renderer/bindings/api_signature.cc +++ b/chromium/extensions/renderer/bindings/api_signature.cc @@ -19,10 +19,9 @@ namespace extensions { namespace { bool HasCallback(const std::vector<std::unique_ptr<ArgumentSpec>>& signature) { - // TODO(devlin): This is how extension APIs have always determined if a - // function has a callback, but it seems a little silly. In the long run (once - // signatures are generated), it probably makes sense to indicate this - // differently. + // TODO(tjudkins): Once we change the APISignature to represent the whole + // signature including any asynchronous return, we should replace this with a + // method on the APISignature object itself. return !signature.empty() && signature.back()->type() == ArgumentType::FUNCTION; } @@ -409,6 +408,27 @@ APISignature::APISignature(const base::ListValue& specification) { has_callback_ = HasCallback(signature_); } +APISignature::APISignature(const base::Value& specification_list, + bool supports_promises) { + auto size = specification_list.GetList().size() + (supports_promises ? 1 : 0); + signature_.reserve(size); + for (const auto& value : specification_list.GetList()) { + CHECK(value.is_dict()); + signature_.push_back(std::make_unique<ArgumentSpec>(value)); + } + // To allow promise supporting APIs to instead take a callback, we add an + // allowed function to the end of the signature. + if (supports_promises) { + auto callback = std::make_unique<ArgumentSpec>(ArgumentType::FUNCTION); + callback->set_name("callback"); + signature_.push_back(std::move(callback)); + } + + has_callback_ = HasCallback(signature_); + DCHECK(!supports_promises || has_callback_) + << "If an API supports promises, it must also support callbacks"; +} + APISignature::APISignature(std::vector<std::unique_ptr<ArgumentSpec>> signature) : signature_(std::move(signature)), has_callback_(HasCallback(signature_)) {} |