Commit 9195ae87 authored by Yuki Shiino's avatar Yuki Shiino Committed by Commit Bot

bind-gen: Implement sequence<enumeration>

In order to fill the gap between the old and new bindings
generator, implements IDL sequence<enumeration> as
Vector<V8GeneratedEnumClass> (was: Vector<String>).

Bug: 839389
Change-Id: I3071406a8df088c70973b4069a778f8bdfa27660
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2068402
Commit-Queue: Yuki Shiino <yukishiino@chromium.org>
Reviewed-by: default avatarHitoshi Yoshida <peria@chromium.org>
Reviewed-by: default avatarKentaro Hara <haraken@chromium.org>
Cr-Commit-Position: refs/heads/master@{#790774}
parent 7317bd34
...@@ -20,6 +20,11 @@ Vector<double> SequenceTest::identityDoubleSequence( ...@@ -20,6 +20,11 @@ Vector<double> SequenceTest::identityDoubleSequence(
return arg; return arg;
} }
Vector<V8FoodEnum> SequenceTest::identityFoodEnumSequence(
const Vector<V8FoodEnum>& arg) const {
return arg;
}
Vector<String> SequenceTest::identityFoodEnumSequence( Vector<String> SequenceTest::identityFoodEnumSequence(
const Vector<String>& arg) const { const Vector<String>& arg) const {
return arg; return arg;
......
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
#include "base/optional.h" #include "base/optional.h"
#include "third_party/blink/renderer/bindings/core/v8/double_or_double_sequence.h" #include "third_party/blink/renderer/bindings/core/v8/double_or_double_sequence.h"
#include "third_party/blink/renderer/bindings/core/v8/v8_food_enum.h"
#include "third_party/blink/renderer/core/dom/element.h" #include "third_party/blink/renderer/core/dom/element.h"
#include "third_party/blink/renderer/platform/bindings/script_wrappable.h" #include "third_party/blink/renderer/platform/bindings/script_wrappable.h"
#include "third_party/blink/renderer/platform/heap/handle.h" #include "third_party/blink/renderer/platform/heap/handle.h"
...@@ -25,7 +26,11 @@ class SequenceTest final : public ScriptWrappable { ...@@ -25,7 +26,11 @@ class SequenceTest final : public ScriptWrappable {
Vector<Vector<String>> identityByteStringSequenceSequence( Vector<Vector<String>> identityByteStringSequenceSequence(
const Vector<Vector<String>>& arg) const; const Vector<Vector<String>>& arg) const;
Vector<double> identityDoubleSequence(const Vector<double>& arg) const; Vector<double> identityDoubleSequence(const Vector<double>& arg) const;
Vector<String> identityFoodEnumSequence(const Vector<String>& arg) const; Vector<V8FoodEnum> identityFoodEnumSequence(
const Vector<V8FoodEnum>& arg) const;
// TODO(crbug.com/1050474): Remove Vector<String> version.
Vector<String> identityFoodEnumSequence(
const Vector<String>& arg) const; // DEPRECATED
Vector<int32_t> identityLongSequence(const Vector<int32_t>& arg) const; Vector<int32_t> identityLongSequence(const Vector<int32_t>& arg) const;
base::Optional<Vector<uint8_t>> identityOctetSequenceOrNull( base::Optional<Vector<uint8_t>> identityOctetSequenceOrNull(
const base::Optional<Vector<uint8_t>>& arg) const; const base::Optional<Vector<uint8_t>>& arg) const;
......
...@@ -131,6 +131,89 @@ const Vector<String>& ContactsManager::GetProperties( ...@@ -131,6 +131,89 @@ const Vector<String>& ContactsManager::GetProperties(
return properties_; return properties_;
} }
ScriptPromise ContactsManager::select(
ScriptState* script_state,
const Vector<V8ContactProperty>& properties,
ContactsSelectOptions* options,
ExceptionState& exception_state) {
LocalFrame* frame = script_state->ContextIsValid()
? LocalDOMWindow::From(script_state)->GetFrame()
: nullptr;
if (!frame || !frame->IsMainFrame()) {
exception_state.ThrowDOMException(
DOMExceptionCode::kInvalidStateError,
"The contacts API can only be used in the top frame");
return ScriptPromise();
}
if (!LocalFrame::HasTransientUserActivation(frame)) {
exception_state.ThrowSecurityError(
"A user gesture is required to call this method");
return ScriptPromise();
}
if (properties.IsEmpty()) {
exception_state.ThrowTypeError("At least one property must be provided");
return ScriptPromise();
}
if (contact_picker_in_use_) {
exception_state.ThrowDOMException(DOMExceptionCode::kInvalidStateError,
"Contacts Picker is already in use.");
return ScriptPromise();
}
bool include_names = false;
bool include_emails = false;
bool include_tel = false;
bool include_addresses = false;
bool include_icons = false;
ExecutionContext* execution_context = ExecutionContext::From(script_state);
for (const auto& property : properties) {
if (!RuntimeEnabledFeatures::ContactsManagerExtraPropertiesEnabled(
execution_context) &&
(property == V8ContactProperty::Enum::kAddress ||
property == V8ContactProperty::Enum::kIcon)) {
exception_state.ThrowTypeError(
"The provided value '" + property.AsString() +
"' is not a valid enum value of type ContactProperty");
return ScriptPromise();
}
switch (property.AsEnum()) {
case V8ContactProperty::Enum::kName:
include_names = true;
break;
case V8ContactProperty::Enum::kEmail:
include_emails = true;
break;
case V8ContactProperty::Enum::kTel:
include_tel = true;
break;
case V8ContactProperty::Enum::kAddress:
include_addresses = true;
break;
case V8ContactProperty::Enum::kIcon:
include_icons = true;
break;
}
}
auto* resolver = MakeGarbageCollected<ScriptPromiseResolver>(script_state);
ScriptPromise promise = resolver->Promise();
contact_picker_in_use_ = true;
GetContactsManager(script_state)
->Select(options->multiple(), include_names, include_emails, include_tel,
include_addresses, include_icons,
WTF::Bind(&ContactsManager::OnContactsSelected,
WrapPersistent(this), WrapPersistent(resolver)));
return promise;
}
ScriptPromise ContactsManager::select(ScriptState* script_state, ScriptPromise ContactsManager::select(ScriptState* script_state,
const Vector<String>& properties, const Vector<String>& properties,
ContactsSelectOptions* options, ContactsSelectOptions* options,
......
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
#include "third_party/blink/public/mojom/contacts/contacts_manager.mojom-blink.h" #include "third_party/blink/public/mojom/contacts/contacts_manager.mojom-blink.h"
#include "third_party/blink/renderer/bindings/core/v8/script_promise.h" #include "third_party/blink/renderer/bindings/core/v8/script_promise.h"
#include "third_party/blink/renderer/bindings/modules/v8/v8_contact_property.h"
#include "third_party/blink/renderer/bindings/modules/v8/v8_contacts_select_options.h" #include "third_party/blink/renderer/bindings/modules/v8/v8_contacts_select_options.h"
#include "third_party/blink/renderer/core/execution_context/execution_context.h" #include "third_party/blink/renderer/core/execution_context/execution_context.h"
#include "third_party/blink/renderer/platform/bindings/script_wrappable.h" #include "third_party/blink/renderer/platform/bindings/script_wrappable.h"
...@@ -31,9 +32,14 @@ class ContactsManager final : public ScriptWrappable { ...@@ -31,9 +32,14 @@ class ContactsManager final : public ScriptWrappable {
// Web-exposed function defined in the IDL file. // Web-exposed function defined in the IDL file.
ScriptPromise select(ScriptState* script_state, ScriptPromise select(ScriptState* script_state,
const Vector<String>& properties, const Vector<V8ContactProperty>& properties,
ContactsSelectOptions* options, ContactsSelectOptions* options,
ExceptionState& exception_state); ExceptionState& exception_state);
// TODO(crbug.com/1050474): Remove Vector<String> version.
ScriptPromise select(ScriptState* script_state,
const Vector<String>& properties,
ContactsSelectOptions* options,
ExceptionState& exception_state); // DEPRECATED
ScriptPromise getProperties(ScriptState* script_state); ScriptPromise getProperties(ScriptState* script_state);
void Trace(Visitor*) const override; void Trace(Visitor*) const override;
......
...@@ -33,6 +33,56 @@ void PaymentManager::setUserHint(const String& user_hint) { ...@@ -33,6 +33,56 @@ void PaymentManager::setUserHint(const String& user_hint) {
manager_->SetUserHint(user_hint_); manager_->SetUserHint(user_hint_);
} }
ScriptPromise PaymentManager::enableDelegations(
ScriptState* script_state,
const Vector<V8PaymentDelegation>& delegations,
ExceptionState& exception_state) {
if (!script_state->ContextIsValid()) {
exception_state.ThrowDOMException(DOMExceptionCode::kInvalidStateError,
"Cannot enable payment delegations");
return ScriptPromise();
}
if (enable_delegations_resolver_) {
exception_state.ThrowDOMException(
DOMExceptionCode::kInvalidStateError,
"Cannot call enableDelegations() again until the previous "
"enableDelegations() is finished");
return ScriptPromise();
}
using MojoPaymentDelegation = payments::mojom::blink::PaymentDelegation;
Vector<MojoPaymentDelegation> mojo_delegations;
for (auto delegation : delegations) {
MojoPaymentDelegation mojo_delegation = MojoPaymentDelegation::PAYER_EMAIL;
switch (delegation.AsEnum()) {
case V8PaymentDelegation::Enum::kShippingAddress:
mojo_delegation = MojoPaymentDelegation::SHIPPING_ADDRESS;
break;
case V8PaymentDelegation::Enum::kPayerName:
mojo_delegation = MojoPaymentDelegation::PAYER_NAME;
break;
case V8PaymentDelegation::Enum::kPayerPhone:
mojo_delegation = MojoPaymentDelegation::PAYER_PHONE;
break;
case V8PaymentDelegation::Enum::kPayerEmail:
mojo_delegation = MojoPaymentDelegation::PAYER_EMAIL;
break;
default:
NOTREACHED();
}
mojo_delegations.push_back(mojo_delegation);
}
manager_->EnableDelegations(
std::move(mojo_delegations),
WTF::Bind(&PaymentManager::OnEnableDelegationsResponse,
WrapPersistent(this)));
enable_delegations_resolver_ =
MakeGarbageCollected<ScriptPromiseResolver>(script_state);
return enable_delegations_resolver_->Promise();
}
ScriptPromise PaymentManager::enableDelegations( ScriptPromise PaymentManager::enableDelegations(
ScriptState* script_state, ScriptState* script_state,
const Vector<String>& stringified_delegations, const Vector<String>& stringified_delegations,
......
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
#include "base/macros.h" #include "base/macros.h"
#include "third_party/blink/public/mojom/payments/payment_app.mojom-blink.h" #include "third_party/blink/public/mojom/payments/payment_app.mojom-blink.h"
#include "third_party/blink/renderer/bindings/modules/v8/v8_payment_delegation.h"
#include "third_party/blink/renderer/modules/modules_export.h" #include "third_party/blink/renderer/modules/modules_export.h"
#include "third_party/blink/renderer/platform/bindings/script_wrappable.h" #include "third_party/blink/renderer/platform/bindings/script_wrappable.h"
#include "third_party/blink/renderer/platform/heap/handle.h" #include "third_party/blink/renderer/platform/heap/handle.h"
...@@ -34,9 +35,14 @@ class MODULES_EXPORT PaymentManager final : public ScriptWrappable { ...@@ -34,9 +35,14 @@ class MODULES_EXPORT PaymentManager final : public ScriptWrappable {
void Trace(Visitor*) const override; void Trace(Visitor*) const override;
ScriptPromise enableDelegations(
ScriptState*,
const Vector<V8PaymentDelegation>& delegations,
ExceptionState&);
// TODO(crbug.com/1050474): Remove Vector<String> version.
ScriptPromise enableDelegations(ScriptState*, ScriptPromise enableDelegations(ScriptState*,
const Vector<String>& stringified_delegations, const Vector<String>& stringified_delegations,
ExceptionState&); ExceptionState&); // DEPRECATED
private: private:
void OnServiceConnectionError(); void OnServiceConnectionError();
......
...@@ -72,6 +72,11 @@ String RTCSessionDescription::type() const { ...@@ -72,6 +72,11 @@ String RTCSessionDescription::type() const {
return platform_session_description_->GetType(); return platform_session_description_->GetType();
} }
void RTCSessionDescription::setType(base::Optional<V8RTCSdpType> type) {
platform_session_description_->SetType(
type.has_value() ? type.value().AsString() : String());
}
void RTCSessionDescription::setType(const String& type) { void RTCSessionDescription::setType(const String& type) {
platform_session_description_->SetType(type); platform_session_description_->SetType(type);
} }
......
...@@ -31,6 +31,7 @@ ...@@ -31,6 +31,7 @@
#ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_PEERCONNECTION_RTC_SESSION_DESCRIPTION_H_ #ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_PEERCONNECTION_RTC_SESSION_DESCRIPTION_H_
#define THIRD_PARTY_BLINK_RENDERER_MODULES_PEERCONNECTION_RTC_SESSION_DESCRIPTION_H_ #define THIRD_PARTY_BLINK_RENDERER_MODULES_PEERCONNECTION_RTC_SESSION_DESCRIPTION_H_
#include "third_party/blink/renderer/bindings/modules/v8/v8_rtc_sdp_type.h"
#include "third_party/blink/renderer/platform/bindings/script_wrappable.h" #include "third_party/blink/renderer/platform/bindings/script_wrappable.h"
#include "third_party/blink/renderer/platform/peerconnection/rtc_session_description_platform.h" #include "third_party/blink/renderer/platform/peerconnection/rtc_session_description_platform.h"
#include "third_party/blink/renderer/platform/wtf/forward.h" #include "third_party/blink/renderer/platform/wtf/forward.h"
...@@ -53,7 +54,9 @@ class RTCSessionDescription final : public ScriptWrappable { ...@@ -53,7 +54,9 @@ class RTCSessionDescription final : public ScriptWrappable {
explicit RTCSessionDescription(RTCSessionDescriptionPlatform*); explicit RTCSessionDescription(RTCSessionDescriptionPlatform*);
String type() const; String type() const;
void setType(const String&); void setType(base::Optional<V8RTCSdpType> type);
// TODO(crbug.com/1050474): Remove String version.
void setType(const String&); // DEPRECATED
String sdp() const; String sdp() const;
void setSdp(const String&); void setSdp(const String&);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment