gecko-dev/dom/webidl/TestFunctions.webidl
Edgar Chen 960446a64e Bug 1615741 - Make converting a buffer source follow the spec when a shared buffer is passed in; r=bzbarsky
Converting a shared buffer source to buffer souce type should
always throw if the type isn't annotated with [AllowShared].

Differential Revision: https://phabricator.services.mozilla.com/D63047

--HG--
extra : moz-landing-system : lando
2020-02-18 21:03:17 +00:00

139 lines
5.3 KiB
Plaintext

/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/.
*/
// A dumping ground for random testing functions
callback PromiseReturner = Promise<any>();
[Pref="dom.expose_test_interfaces",
Exposed=Window]
interface WrapperCachedNonISupportsTestInterface {
[Pref="dom.webidl.test1"] constructor();
};
// The type of string C++ sees.
enum StringType {
"literal", // A string with the LITERAL flag.
"stringbuffer", // A string with the REFCOUNTED flag.
"inline", // A string with the INLINE flag.
"other", // Anything else.
};
[Pref="dom.expose_test_interfaces",
Exposed=Window]
interface TestFunctions {
constructor();
[Throws]
static void throwUncatchableException();
// Simply returns its argument. Can be used to test Promise
// argument processing behavior.
static Promise<any> passThroughPromise(Promise<any> arg);
// Returns whatever Promise the given PromiseReturner returned.
[Throws]
static Promise<any> passThroughCallbackPromise(PromiseReturner callback);
// Some basic tests for string binding round-tripping behavior.
void setStringData(DOMString arg);
// Get the string data, using an nsAString argument on the C++ side.
// This will just use Assign/operator=, whatever that does.
DOMString getStringDataAsAString();
// Get the string data, but only "length" chars of it, using an
// nsAString argument on the C++ side. This will always copy on the
// C++ side.
DOMString getStringDataAsAString(unsigned long length);
// Get the string data, but only "length" chars of it, using a
// DOMString argument on the C++ side and trying to hand it
// stringbuffers. If length not passed, use our full length.
DOMString getStringDataAsDOMString(optional unsigned long length);
// Get a short (short enough to fit in a JS inline string) literal string.
DOMString getShortLiteralString();
// Get a medium (long enough to not be a JS inline, but short enough
// to fit in a FakeString inline buffer) literal string.
DOMString getMediumLiteralString();
// Get a long (long enough to not fit in any inline buffers) literal string.
DOMString getLongLiteralString();
// Get a stringbuffer string for whatever string is passed in.
DOMString getStringbufferString(DOMString input);
// Get the type of string that the C++ sees after going through bindings.
StringType getStringType(DOMString str);
// Returns true if both the incoming string and the stored (via setStringData())
// string have stringbuffers and they're the same stringbuffer.
boolean stringbufferMatchesStored(DOMString str);
// Functions that just punch through to mozITestInterfaceJS.idl
[Throws]
void testThrowNsresult();
[Throws]
void testThrowNsresultFromNative();
// Throws an InvalidStateError to auto-create a rejected promise.
[Throws]
static Promise<any> throwToRejectPromise();
// Some attributes for the toJSON to work with.
readonly attribute long one;
[Func="mozilla::dom::TestFunctions::ObjectFromAboutBlank"]
readonly attribute long two;
// Testing for how default toJSON behaves.
[Default] object toJSON();
// This returns a wrappercached non-ISupports object. While this will always
// return the same object, no optimization attributes like [Pure] should be
// used here because the object should not be held alive from JS by the
// bindings. This is needed to test wrapper preservation for weak map keys.
// See bug 1351501.
readonly attribute WrapperCachedNonISupportsTestInterface wrapperCachedNonISupportsObject;
attribute [Clamp] octet? clampedNullableOctet;
attribute [EnforceRange] octet? enforcedNullableOctet;
// Testing for [AllowShared]
[GetterThrows]
attribute ArrayBufferView arrayBufferView;
[GetterThrows]
attribute [AllowShared] ArrayBufferView allowSharedArrayBufferView;
[Cached, Pure, GetterThrows]
attribute sequence<ArrayBufferView> sequenceOfArrayBufferView;
[Cached, Pure, GetterThrows]
attribute sequence<[AllowShared] ArrayBufferView> sequenceOfAllowSharedArrayBufferView;
[GetterThrows]
attribute ArrayBuffer arrayBuffer;
[GetterThrows]
attribute [AllowShared] ArrayBuffer allowSharedArrayBuffer;
[Cached, Pure, GetterThrows]
attribute sequence<ArrayBuffer> sequenceOfArrayBuffer;
[Cached, Pure, GetterThrows]
attribute sequence<[AllowShared] ArrayBuffer> sequenceOfAllowSharedArrayBuffer;
void testNotAllowShared(ArrayBufferView buffer);
void testNotAllowShared(ArrayBuffer buffer);
void testNotAllowShared(DOMString buffer);
void testAllowShared([AllowShared] ArrayBufferView buffer);
void testAllowShared([AllowShared] ArrayBuffer buffer);
void testDictWithAllowShared(optional DictWithAllowSharedBufferSource buffer = {});
void testUnionOfBuffferSource((ArrayBuffer or ArrayBufferView or DOMString) foo);
void testUnionOfAllowSharedBuffferSource(([AllowShared] ArrayBuffer or [AllowShared] ArrayBufferView) foo);
};
dictionary DictWithAllowSharedBufferSource {
ArrayBuffer arrayBuffer;
ArrayBufferView arrayBufferView;
[AllowShared] ArrayBuffer allowSharedArrayBuffer;
[AllowShared] ArrayBufferView allowSharedArrayBufferView;
};