dom/bindings/test/TestBindingHeader.h

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/dom/bindings/test/TestBindingHeader.h	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,1260 @@
     1.4 +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
     1.5 +/* This Source Code Form is subject to the terms of the Mozilla Public
     1.6 + * License, v. 2.0. If a copy of the MPL was not distributed with this file,
     1.7 + * You can obtain one at http://mozilla.org/MPL/2.0/.
     1.8 + */
     1.9 +
    1.10 +#ifndef TestBindingHeader_h
    1.11 +#define TestBindingHeader_h
    1.12 +
    1.13 +#include "mozilla/dom/BindingUtils.h"
    1.14 +#include "mozilla/dom/Date.h"
    1.15 +#include "mozilla/dom/MozMap.h"
    1.16 +#include "mozilla/dom/TypedArray.h"
    1.17 +#include "mozilla/dom/UnionTypes.h"
    1.18 +#include "mozilla/ErrorResult.h"
    1.19 +#include "nsCOMPtr.h"
    1.20 +#include "nsGenericHTMLElement.h"
    1.21 +#include "nsWrapperCache.h"
    1.22 +
    1.23 +// Forward declare this before we include TestCodeGenBinding.h, because that header relies on including
    1.24 +// this one for it, for ParentDict. Hopefully it won't begin to rely on it in more fundamental ways.
    1.25 +namespace mozilla {
    1.26 +namespace dom {
    1.27 +class TestExternalInterface;
    1.28 +} // namespace dom
    1.29 +} // namespace mozilla
    1.30 +
    1.31 +// We don't export TestCodeGenBinding.h, but it's right in our parent dir.
    1.32 +#include "../TestCodeGenBinding.h"
    1.33 +
    1.34 +extern bool TestFuncControlledMember(JSContext*, JSObject*);
    1.35 +
    1.36 +namespace mozilla {
    1.37 +namespace dom {
    1.38 +
    1.39 +// IID for nsRenamedInterface
    1.40 +#define NS_RENAMED_INTERFACE_IID \
    1.41 +{ 0xd4b19ef3, 0xe68b, 0x4e3f, \
    1.42 + { 0x94, 0xbc, 0xc9, 0xde, 0x3a, 0x69, 0xb0, 0xe8 } }
    1.43 +
    1.44 +class nsRenamedInterface : public nsISupports,
    1.45 +                           public nsWrapperCache
    1.46 +{
    1.47 +public:
    1.48 +  NS_DECLARE_STATIC_IID_ACCESSOR(NS_RENAMED_INTERFACE_IID)
    1.49 +  NS_DECL_ISUPPORTS
    1.50 +
    1.51 +  // We need a GetParentObject to make binding codegen happy
    1.52 +  virtual nsISupports* GetParentObject();
    1.53 +};
    1.54 +
    1.55 +NS_DEFINE_STATIC_IID_ACCESSOR(nsRenamedInterface, NS_RENAMED_INTERFACE_IID)
    1.56 +
    1.57 +// IID for the IndirectlyImplementedInterface
    1.58 +#define NS_INDIRECTLY_IMPLEMENTED_INTERFACE_IID \
    1.59 +{ 0xfed55b69, 0x7012, 0x4849, \
    1.60 + { 0xaf, 0x56, 0x4b, 0xa9, 0xee, 0x41, 0x30, 0x89 } }
    1.61 +
    1.62 +class IndirectlyImplementedInterface : public nsISupports,
    1.63 +                                       public nsWrapperCache
    1.64 +{
    1.65 +public:
    1.66 +  NS_DECLARE_STATIC_IID_ACCESSOR(NS_INDIRECTLY_IMPLEMENTED_INTERFACE_IID)
    1.67 +  NS_DECL_ISUPPORTS
    1.68 +
    1.69 +  // We need a GetParentObject to make binding codegen happy
    1.70 +  virtual nsISupports* GetParentObject();
    1.71 +
    1.72 +  bool IndirectlyImplementedProperty();
    1.73 +  void IndirectlyImplementedProperty(bool);
    1.74 +  void IndirectlyImplementedMethod();
    1.75 +};
    1.76 +
    1.77 +NS_DEFINE_STATIC_IID_ACCESSOR(IndirectlyImplementedInterface, NS_INDIRECTLY_IMPLEMENTED_INTERFACE_IID)
    1.78 +
    1.79 +// IID for the TestExternalInterface
    1.80 +#define NS_TEST_EXTERNAL_INTERFACE_IID \
    1.81 +{ 0xd5ba0c99, 0x9b1d, 0x4e71, \
    1.82 + { 0x8a, 0x94, 0x56, 0x38, 0x6c, 0xa3, 0xda, 0x3d } }
    1.83 +class TestExternalInterface : public nsISupports
    1.84 +{
    1.85 +public:
    1.86 +  NS_DECLARE_STATIC_IID_ACCESSOR(NS_TEST_EXTERNAL_INTERFACE_IID)
    1.87 +  NS_DECL_ISUPPORTS
    1.88 +};
    1.89 +
    1.90 +NS_DEFINE_STATIC_IID_ACCESSOR(TestExternalInterface, NS_TEST_EXTERNAL_INTERFACE_IID)
    1.91 +
    1.92 +class TestNonWrapperCacheInterface : public nsISupports
    1.93 +{
    1.94 +public:
    1.95 +  NS_DECL_ISUPPORTS
    1.96 +
    1.97 +  virtual JSObject* WrapObject(JSContext* cx);
    1.98 +};
    1.99 +
   1.100 +class OnlyForUseInConstructor : public nsISupports,
   1.101 +                                public nsWrapperCache
   1.102 +{
   1.103 +public:
   1.104 +  NS_DECL_ISUPPORTS
   1.105 +  // We need a GetParentObject to make binding codegen happy
   1.106 +  virtual nsISupports* GetParentObject();
   1.107 +};
   1.108 +
   1.109 +class TestInterface : public nsISupports,
   1.110 +                      public nsWrapperCache
   1.111 +{
   1.112 +public:
   1.113 +  NS_DECL_ISUPPORTS
   1.114 +
   1.115 +  // We need a GetParentObject to make binding codegen happy
   1.116 +  virtual nsISupports* GetParentObject();
   1.117 +
   1.118 +  // And now our actual WebIDL API
   1.119 +  // Constructors
   1.120 +  static
   1.121 +  already_AddRefed<TestInterface>
   1.122 +    Constructor(const GlobalObject&, ErrorResult&);
   1.123 +  static
   1.124 +  already_AddRefed<TestInterface>
   1.125 +    Constructor(const GlobalObject&, const nsAString&, ErrorResult&);
   1.126 +  static
   1.127 +  already_AddRefed<TestInterface>
   1.128 +    Constructor(const GlobalObject&, uint32_t, const Nullable<bool>&,
   1.129 +                ErrorResult&);
   1.130 +  static
   1.131 +  already_AddRefed<TestInterface>
   1.132 +    Constructor(const GlobalObject&, TestInterface*, ErrorResult&);
   1.133 +  static
   1.134 +  already_AddRefed<TestInterface>
   1.135 +    Constructor(const GlobalObject&, uint32_t, IndirectlyImplementedInterface&, ErrorResult&);
   1.136 +
   1.137 +  static
   1.138 +  already_AddRefed<TestInterface>
   1.139 +    Constructor(const GlobalObject&, Date&, ErrorResult&);
   1.140 +  /*  static
   1.141 +  already_AddRefed<TestInterface>
   1.142 +    Constructor(const GlobalObject&, uint32_t, uint32_t,
   1.143 +                const TestInterfaceOrOnlyForUseInConstructor&, ErrorResult&);
   1.144 +  */
   1.145 +
   1.146 +  static
   1.147 +  already_AddRefed<TestInterface> Test(const GlobalObject&, ErrorResult&);
   1.148 +  static
   1.149 +  already_AddRefed<TestInterface> Test(const GlobalObject&, const nsAString&,
   1.150 +                                       ErrorResult&);
   1.151 +  static
   1.152 +  already_AddRefed<TestInterface> Test(const GlobalObject&, const nsACString&,
   1.153 +                                       ErrorResult&);
   1.154 +
   1.155 +  static
   1.156 +  already_AddRefed<TestInterface> Test2(const GlobalObject&,
   1.157 +                                        JSContext*,
   1.158 +                                        const DictForConstructor&,
   1.159 +                                        JS::Handle<JS::Value>,
   1.160 +                                        JS::Handle<JSObject*>,
   1.161 +                                        JS::Handle<JSObject*>,
   1.162 +                                        const Sequence<Dict>&,
   1.163 +                                        JS::Handle<JS::Value>,
   1.164 +                                        const Optional<JS::Handle<JSObject*> >&,
   1.165 +                                        const Optional<JS::Handle<JSObject*> >&,
   1.166 +                                        ErrorResult&);
   1.167 +
   1.168 +  // Integer types
   1.169 +  int8_t ReadonlyByte();
   1.170 +  int8_t WritableByte();
   1.171 +  void SetWritableByte(int8_t);
   1.172 +  void PassByte(int8_t);
   1.173 +  int8_t ReceiveByte();
   1.174 +  void PassOptionalByte(const Optional<int8_t>&);
   1.175 +  void PassOptionalByteBeforeRequired(const Optional<int8_t>&, int8_t);
   1.176 +  void PassOptionalByteWithDefault(int8_t);
   1.177 +  void PassOptionalByteWithDefaultBeforeRequired(int8_t, int8_t);
   1.178 +  void PassNullableByte(const Nullable<int8_t>&);
   1.179 +  void PassOptionalNullableByte(const Optional< Nullable<int8_t> >&);
   1.180 +  void PassVariadicByte(const Sequence<int8_t>&);
   1.181 +  int8_t CachedByte();
   1.182 +  int8_t CachedConstantByte();
   1.183 +  int8_t CachedWritableByte();
   1.184 +  void SetCachedWritableByte(int8_t);
   1.185 +
   1.186 +  int16_t ReadonlyShort();
   1.187 +  int16_t WritableShort();
   1.188 +  void SetWritableShort(int16_t);
   1.189 +  void PassShort(int16_t);
   1.190 +  int16_t ReceiveShort();
   1.191 +  void PassOptionalShort(const Optional<int16_t>&);
   1.192 +  void PassOptionalShortWithDefault(int16_t);
   1.193 +
   1.194 +  int32_t ReadonlyLong();
   1.195 +  int32_t WritableLong();
   1.196 +  void SetWritableLong(int32_t);
   1.197 +  void PassLong(int32_t);
   1.198 +  int16_t ReceiveLong();
   1.199 +  void PassOptionalLong(const Optional<int32_t>&);
   1.200 +  void PassOptionalLongWithDefault(int32_t);
   1.201 +
   1.202 +  int64_t ReadonlyLongLong();
   1.203 +  int64_t WritableLongLong();
   1.204 +  void SetWritableLongLong(int64_t);
   1.205 +  void PassLongLong(int64_t);
   1.206 +  int64_t ReceiveLongLong();
   1.207 +  void PassOptionalLongLong(const Optional<int64_t>&);
   1.208 +  void PassOptionalLongLongWithDefault(int64_t);
   1.209 +
   1.210 +  uint8_t ReadonlyOctet();
   1.211 +  uint8_t WritableOctet();
   1.212 +  void SetWritableOctet(uint8_t);
   1.213 +  void PassOctet(uint8_t);
   1.214 +  uint8_t ReceiveOctet();
   1.215 +  void PassOptionalOctet(const Optional<uint8_t>&);
   1.216 +  void PassOptionalOctetWithDefault(uint8_t);
   1.217 +
   1.218 +  uint16_t ReadonlyUnsignedShort();
   1.219 +  uint16_t WritableUnsignedShort();
   1.220 +  void SetWritableUnsignedShort(uint16_t);
   1.221 +  void PassUnsignedShort(uint16_t);
   1.222 +  uint16_t ReceiveUnsignedShort();
   1.223 +  void PassOptionalUnsignedShort(const Optional<uint16_t>&);
   1.224 +  void PassOptionalUnsignedShortWithDefault(uint16_t);
   1.225 +
   1.226 +  uint32_t ReadonlyUnsignedLong();
   1.227 +  uint32_t WritableUnsignedLong();
   1.228 +  void SetWritableUnsignedLong(uint32_t);
   1.229 +  void PassUnsignedLong(uint32_t);
   1.230 +  uint32_t ReceiveUnsignedLong();
   1.231 +  void PassOptionalUnsignedLong(const Optional<uint32_t>&);
   1.232 +  void PassOptionalUnsignedLongWithDefault(uint32_t);
   1.233 +
   1.234 +  uint64_t ReadonlyUnsignedLongLong();
   1.235 +  uint64_t WritableUnsignedLongLong();
   1.236 +  void SetWritableUnsignedLongLong(uint64_t);
   1.237 +  void PassUnsignedLongLong(uint64_t);
   1.238 +  uint64_t ReceiveUnsignedLongLong();
   1.239 +  void PassOptionalUnsignedLongLong(const Optional<uint64_t>&);
   1.240 +  void PassOptionalUnsignedLongLongWithDefault(uint64_t);
   1.241 +
   1.242 +  float WritableFloat() const;
   1.243 +  void SetWritableFloat(float);
   1.244 +  float WritableUnrestrictedFloat() const;
   1.245 +  void SetWritableUnrestrictedFloat(float);
   1.246 +  Nullable<float> GetWritableNullableFloat() const;
   1.247 +  void SetWritableNullableFloat(Nullable<float>);
   1.248 +  Nullable<float> GetWritableNullableUnrestrictedFloat() const;
   1.249 +  void SetWritableNullableUnrestrictedFloat(Nullable<float>);
   1.250 +  double WritableDouble() const;
   1.251 +  void SetWritableDouble(double);
   1.252 +  double WritableUnrestrictedDouble() const;
   1.253 +  void SetWritableUnrestrictedDouble(double);
   1.254 +  Nullable<double> GetWritableNullableDouble() const;
   1.255 +  void SetWritableNullableDouble(Nullable<double>);
   1.256 +  Nullable<double> GetWritableNullableUnrestrictedDouble() const;
   1.257 +  void SetWritableNullableUnrestrictedDouble(Nullable<double>);
   1.258 +  void PassFloat(float, float, Nullable<float>, Nullable<float>,
   1.259 +                 double, double, Nullable<double>, Nullable<double>,
   1.260 +                 const Sequence<float>&, const Sequence<float>&,
   1.261 +                 const Sequence<Nullable<float> >&,
   1.262 +                 const Sequence<Nullable<float> >&,
   1.263 +                 const Sequence<double>&, const Sequence<double>&,
   1.264 +                 const Sequence<Nullable<double> >&,
   1.265 +                 const Sequence<Nullable<double> >&);
   1.266 +  void PassLenientFloat(float, float, Nullable<float>, Nullable<float>,
   1.267 +                        double, double, Nullable<double>, Nullable<double>,
   1.268 +                        const Sequence<float>&, const Sequence<float>&,
   1.269 +                        const Sequence<Nullable<float> >&,
   1.270 +                        const Sequence<Nullable<float> >&,
   1.271 +                        const Sequence<double>&, const Sequence<double>&,
   1.272 +                        const Sequence<Nullable<double> >&,
   1.273 +                        const Sequence<Nullable<double> >&);
   1.274 +  float LenientFloatAttr() const;
   1.275 +  void SetLenientFloatAttr(float);
   1.276 +  double LenientDoubleAttr() const;
   1.277 +  void SetLenientDoubleAttr(double);
   1.278 +
   1.279 +  void PassUnrestricted(float arg1,
   1.280 +                        float arg2,
   1.281 +                        float arg3,
   1.282 +                        float arg4,
   1.283 +                        double arg5,
   1.284 +                        double arg6,
   1.285 +                        double arg7,
   1.286 +                        double arg8);
   1.287 +
   1.288 +  // Interface types
   1.289 +  already_AddRefed<TestInterface> ReceiveSelf();
   1.290 +  already_AddRefed<TestInterface> ReceiveNullableSelf();
   1.291 +  TestInterface* ReceiveWeakSelf();
   1.292 +  TestInterface* ReceiveWeakNullableSelf();
   1.293 +  void PassSelf(TestInterface&);
   1.294 +  void PassNullableSelf(TestInterface*);
   1.295 +  already_AddRefed<TestInterface> NonNullSelf();
   1.296 +  void SetNonNullSelf(TestInterface&);
   1.297 +  already_AddRefed<TestInterface> GetNullableSelf();
   1.298 +  already_AddRefed<TestInterface> CachedSelf();
   1.299 +  void SetNullableSelf(TestInterface*);
   1.300 +  void PassOptionalSelf(const Optional<TestInterface*> &);
   1.301 +  void PassOptionalNonNullSelf(const Optional<NonNull<TestInterface> >&);
   1.302 +  void PassOptionalSelfWithDefault(TestInterface*);
   1.303 +
   1.304 +  already_AddRefed<TestNonWrapperCacheInterface> ReceiveNonWrapperCacheInterface();
   1.305 +  already_AddRefed<TestNonWrapperCacheInterface> ReceiveNullableNonWrapperCacheInterface();
   1.306 +  void ReceiveNonWrapperCacheInterfaceSequence(nsTArray<nsRefPtr<TestNonWrapperCacheInterface> >&);
   1.307 +  void ReceiveNullableNonWrapperCacheInterfaceSequence(nsTArray<nsRefPtr<TestNonWrapperCacheInterface> >&);
   1.308 +  void ReceiveNonWrapperCacheInterfaceNullableSequence(Nullable<nsTArray<nsRefPtr<TestNonWrapperCacheInterface> > >&);
   1.309 +  void ReceiveNullableNonWrapperCacheInterfaceNullableSequence(Nullable<nsTArray<nsRefPtr<TestNonWrapperCacheInterface> > >&);
   1.310 +
   1.311 +  already_AddRefed<IndirectlyImplementedInterface> ReceiveOther();
   1.312 +  already_AddRefed<IndirectlyImplementedInterface> ReceiveNullableOther();
   1.313 +  IndirectlyImplementedInterface* ReceiveWeakOther();
   1.314 +  IndirectlyImplementedInterface* ReceiveWeakNullableOther();
   1.315 +  void PassOther(IndirectlyImplementedInterface&);
   1.316 +  void PassNullableOther(IndirectlyImplementedInterface*);
   1.317 +  already_AddRefed<IndirectlyImplementedInterface> NonNullOther();
   1.318 +  void SetNonNullOther(IndirectlyImplementedInterface&);
   1.319 +  already_AddRefed<IndirectlyImplementedInterface> GetNullableOther();
   1.320 +  void SetNullableOther(IndirectlyImplementedInterface*);
   1.321 +  void PassOptionalOther(const Optional<IndirectlyImplementedInterface*>&);
   1.322 +  void PassOptionalNonNullOther(const Optional<NonNull<IndirectlyImplementedInterface> >&);
   1.323 +  void PassOptionalOtherWithDefault(IndirectlyImplementedInterface*);
   1.324 +
   1.325 +  already_AddRefed<TestExternalInterface> ReceiveExternal();
   1.326 +  already_AddRefed<TestExternalInterface> ReceiveNullableExternal();
   1.327 +  TestExternalInterface* ReceiveWeakExternal();
   1.328 +  TestExternalInterface* ReceiveWeakNullableExternal();
   1.329 +  void PassExternal(TestExternalInterface*);
   1.330 +  void PassNullableExternal(TestExternalInterface*);
   1.331 +  already_AddRefed<TestExternalInterface> NonNullExternal();
   1.332 +  void SetNonNullExternal(TestExternalInterface*);
   1.333 +  already_AddRefed<TestExternalInterface> GetNullableExternal();
   1.334 +  void SetNullableExternal(TestExternalInterface*);
   1.335 +  void PassOptionalExternal(const Optional<TestExternalInterface*>&);
   1.336 +  void PassOptionalNonNullExternal(const Optional<TestExternalInterface*>&);
   1.337 +  void PassOptionalExternalWithDefault(TestExternalInterface*);
   1.338 +
   1.339 +  already_AddRefed<TestCallbackInterface> ReceiveCallbackInterface();
   1.340 +  already_AddRefed<TestCallbackInterface> ReceiveNullableCallbackInterface();
   1.341 +  TestCallbackInterface* ReceiveWeakCallbackInterface();
   1.342 +  TestCallbackInterface* ReceiveWeakNullableCallbackInterface();
   1.343 +  void PassCallbackInterface(TestCallbackInterface&);
   1.344 +  void PassNullableCallbackInterface(TestCallbackInterface*);
   1.345 +  already_AddRefed<TestCallbackInterface> NonNullCallbackInterface();
   1.346 +  void SetNonNullCallbackInterface(TestCallbackInterface&);
   1.347 +  already_AddRefed<TestCallbackInterface> GetNullableCallbackInterface();
   1.348 +  void SetNullableCallbackInterface(TestCallbackInterface*);
   1.349 +  void PassOptionalCallbackInterface(const Optional<nsRefPtr<TestCallbackInterface> >&);
   1.350 +  void PassOptionalNonNullCallbackInterface(const Optional<OwningNonNull<TestCallbackInterface> >&);
   1.351 +  void PassOptionalCallbackInterfaceWithDefault(TestCallbackInterface*);
   1.352 +
   1.353 +  already_AddRefed<IndirectlyImplementedInterface> ReceiveConsequentialInterface();
   1.354 +  void PassConsequentialInterface(IndirectlyImplementedInterface&);
   1.355 +
   1.356 +  // Sequence types
   1.357 +  void GetReadonlySequence(nsTArray<int32_t>&);
   1.358 +  void GetReadonlySequenceOfDictionaries(JSContext*, nsTArray<Dict>&);
   1.359 +  void GetReadonlyNullableSequenceOfDictionaries(JSContext*, Nullable<nsTArray<Dict> >&);
   1.360 +  void GetReadonlyFrozenSequence(JSContext*, nsTArray<Dict>&);
   1.361 +  void GetReadonlyFrozenNullableSequence(JSContext*, Nullable<nsTArray<Dict>>&);
   1.362 +  void ReceiveSequence(nsTArray<int32_t>&);
   1.363 +  void ReceiveNullableSequence(Nullable< nsTArray<int32_t> >&);
   1.364 +  void ReceiveSequenceOfNullableInts(nsTArray< Nullable<int32_t> >&);
   1.365 +  void ReceiveNullableSequenceOfNullableInts(Nullable< nsTArray< Nullable<int32_t> > >&);
   1.366 +  void PassSequence(const Sequence<int32_t> &);
   1.367 +  void PassNullableSequence(const Nullable< Sequence<int32_t> >&);
   1.368 +  void PassSequenceOfNullableInts(const Sequence<Nullable<int32_t> >&);
   1.369 +  void PassOptionalSequenceOfNullableInts(const Optional<Sequence<Nullable<int32_t> > > &);
   1.370 +  void PassOptionalNullableSequenceOfNullableInts(const Optional<Nullable<Sequence<Nullable<int32_t> > > > &);
   1.371 +  void ReceiveCastableObjectSequence(nsTArray< nsRefPtr<TestInterface> > &);
   1.372 +  void ReceiveCallbackObjectSequence(nsTArray< nsRefPtr<TestCallbackInterface> > &);
   1.373 +  void ReceiveNullableCastableObjectSequence(nsTArray< nsRefPtr<TestInterface> > &);
   1.374 +  void ReceiveNullableCallbackObjectSequence(nsTArray< nsRefPtr<TestCallbackInterface> > &);
   1.375 +  void ReceiveCastableObjectNullableSequence(Nullable< nsTArray< nsRefPtr<TestInterface> > >&);
   1.376 +  void ReceiveNullableCastableObjectNullableSequence(Nullable< nsTArray< nsRefPtr<TestInterface> > >&);
   1.377 +  void ReceiveWeakCastableObjectSequence(nsTArray<TestInterface*> &);
   1.378 +  void ReceiveWeakNullableCastableObjectSequence(nsTArray<TestInterface*> &);
   1.379 +  void ReceiveWeakCastableObjectNullableSequence(Nullable< nsTArray<TestInterface*> >&);
   1.380 +  void ReceiveWeakNullableCastableObjectNullableSequence(Nullable< nsTArray<TestInterface*> >&);
   1.381 +  void PassCastableObjectSequence(const Sequence< OwningNonNull<TestInterface> >&);
   1.382 +  void PassNullableCastableObjectSequence(const Sequence< nsRefPtr<TestInterface> > &);
   1.383 +  void PassCastableObjectNullableSequence(const Nullable< Sequence< OwningNonNull<TestInterface> > >&);
   1.384 +  void PassNullableCastableObjectNullableSequence(const Nullable< Sequence< nsRefPtr<TestInterface> > >&);
   1.385 +  void PassOptionalSequence(const Optional<Sequence<int32_t> >&);
   1.386 +  void PassOptionalNullableSequence(const Optional<Nullable<Sequence<int32_t> > >&);
   1.387 +  void PassOptionalNullableSequenceWithDefaultValue(const Nullable< Sequence<int32_t> >&);
   1.388 +  void PassOptionalObjectSequence(const Optional<Sequence<OwningNonNull<TestInterface> > >&);
   1.389 +  void PassExternalInterfaceSequence(const Sequence<nsRefPtr<TestExternalInterface> >&);
   1.390 +  void PassNullableExternalInterfaceSequence(const Sequence<nsRefPtr<TestExternalInterface> >&);
   1.391 +
   1.392 +  void ReceiveStringSequence(nsTArray<nsString>&);
   1.393 +  void PassStringSequence(const Sequence<nsString>&);
   1.394 +
   1.395 +  void ReceiveByteStringSequence(nsTArray<nsCString>&);
   1.396 +  void PassByteStringSequence(const Sequence<nsCString>&);
   1.397 +
   1.398 +  void ReceiveAnySequence(JSContext*, nsTArray<JS::Value>&);
   1.399 +  void ReceiveNullableAnySequence(JSContext*, Nullable<nsTArray<JS::Value> >&);
   1.400 +  void ReceiveAnySequenceSequence(JSContext*, nsTArray<nsTArray<JS::Value> >&);
   1.401 +
   1.402 +  void ReceiveObjectSequence(JSContext*, nsTArray<JSObject*>&);
   1.403 +  void ReceiveNullableObjectSequence(JSContext*, nsTArray<JSObject*>&);
   1.404 +
   1.405 +  void PassSequenceOfSequences(const Sequence< Sequence<int32_t> >&);
   1.406 +  void ReceiveSequenceOfSequences(nsTArray< nsTArray<int32_t> >&);
   1.407 +
   1.408 +  // MozMap types
   1.409 +  void PassMozMap(const MozMap<int32_t> &);
   1.410 +  void PassNullableMozMap(const Nullable< MozMap<int32_t> >&);
   1.411 +  void PassMozMapOfNullableInts(const MozMap<Nullable<int32_t> >&);
   1.412 +  void PassOptionalMozMapOfNullableInts(const Optional<MozMap<Nullable<int32_t> > > &);
   1.413 +  void PassOptionalNullableMozMapOfNullableInts(const Optional<Nullable<MozMap<Nullable<int32_t> > > > &);
   1.414 +  void PassCastableObjectMozMap(const MozMap< OwningNonNull<TestInterface> >&);
   1.415 +  void PassNullableCastableObjectMozMap(const MozMap< nsRefPtr<TestInterface> > &);
   1.416 +  void PassCastableObjectNullableMozMap(const Nullable< MozMap< OwningNonNull<TestInterface> > >&);
   1.417 +  void PassNullableCastableObjectNullableMozMap(const Nullable< MozMap< nsRefPtr<TestInterface> > >&);
   1.418 +  void PassOptionalMozMap(const Optional<MozMap<int32_t> >&);
   1.419 +  void PassOptionalNullableMozMap(const Optional<Nullable<MozMap<int32_t> > >&);
   1.420 +  void PassOptionalNullableMozMapWithDefaultValue(const Nullable< MozMap<int32_t> >&);
   1.421 +  void PassOptionalObjectMozMap(const Optional<MozMap<OwningNonNull<TestInterface> > >&);
   1.422 +  void PassExternalInterfaceMozMap(const MozMap<nsRefPtr<TestExternalInterface> >&);
   1.423 +  void PassNullableExternalInterfaceMozMap(const MozMap<nsRefPtr<TestExternalInterface> >&);
   1.424 +  void PassStringMozMap(const MozMap<nsString>&);
   1.425 +  void PassByteStringMozMap(const MozMap<nsCString>&);
   1.426 +  void PassMozMapOfMozMaps(const MozMap< MozMap<int32_t> >&);
   1.427 +  void ReceiveMozMap(MozMap<int32_t>&);
   1.428 +  void ReceiveNullableMozMap(Nullable<MozMap<int32_t>>&);
   1.429 +  void ReceiveMozMapOfNullableInts(MozMap<Nullable<int32_t>>&);
   1.430 +  void ReceiveNullableMozMapOfNullableInts(Nullable<MozMap<Nullable<int32_t>>>&);
   1.431 +  void ReceiveMozMapOfMozMaps(MozMap<MozMap<int32_t>>&);
   1.432 +  void ReceiveAnyMozMap(JSContext*, MozMap<JS::Value>&);
   1.433 +
   1.434 +  // Typed array types
   1.435 +  void PassArrayBuffer(const ArrayBuffer&);
   1.436 +  void PassNullableArrayBuffer(const Nullable<ArrayBuffer>&);
   1.437 +  void PassOptionalArrayBuffer(const Optional<ArrayBuffer>&);
   1.438 +  void PassOptionalNullableArrayBuffer(const Optional<Nullable<ArrayBuffer> >&);
   1.439 +  void PassOptionalNullableArrayBufferWithDefaultValue(const Nullable<ArrayBuffer>&);
   1.440 +  void PassArrayBufferView(const ArrayBufferView&);
   1.441 +  void PassInt8Array(const Int8Array&);
   1.442 +  void PassInt16Array(const Int16Array&);
   1.443 +  void PassInt32Array(const Int32Array&);
   1.444 +  void PassUint8Array(const Uint8Array&);
   1.445 +  void PassUint16Array(const Uint16Array&);
   1.446 +  void PassUint32Array(const Uint32Array&);
   1.447 +  void PassUint8ClampedArray(const Uint8ClampedArray&);
   1.448 +  void PassFloat32Array(const Float32Array&);
   1.449 +  void PassFloat64Array(const Float64Array&);
   1.450 +  void PassSequenceOfArrayBuffers(const Sequence<ArrayBuffer>&);
   1.451 +  void PassSequenceOfNullableArrayBuffers(const Sequence<Nullable<ArrayBuffer> >&);
   1.452 +  void PassMozMapOfArrayBuffers(const MozMap<ArrayBuffer>&);
   1.453 +  void PassMozMapOfNullableArrayBuffers(const MozMap<Nullable<ArrayBuffer> >&);
   1.454 +  void PassVariadicTypedArray(const Sequence<Float32Array>&);
   1.455 +  void PassVariadicNullableTypedArray(const Sequence<Nullable<Float32Array> >&);
   1.456 +  void ReceiveUint8Array(JSContext*, JS::MutableHandle<JSObject*>);
   1.457 +
   1.458 +  // DOMString types
   1.459 +  void PassString(const nsAString&);
   1.460 +  void PassNullableString(const nsAString&);
   1.461 +  void PassOptionalString(const Optional<nsAString>&);
   1.462 +  void PassOptionalStringWithDefaultValue(const nsAString&);
   1.463 +  void PassOptionalNullableString(const Optional<nsAString>&);
   1.464 +  void PassOptionalNullableStringWithDefaultValue(const nsAString&);
   1.465 +  void PassVariadicString(const Sequence<nsString>&);
   1.466 +
   1.467 +  // ByteString types
   1.468 +  void PassByteString(const nsCString&);
   1.469 +  void PassNullableByteString(const nsCString&);
   1.470 +  void PassOptionalByteString(const Optional<nsCString>&);
   1.471 +  void PassOptionalNullableByteString(const Optional<nsCString>&);
   1.472 +  void PassVariadicByteString(const Sequence<nsCString>&);
   1.473 +
   1.474 +  // Enumerated types
   1.475 +  void PassEnum(TestEnum);
   1.476 +  void PassNullableEnum(const Nullable<TestEnum>&);
   1.477 +  void PassOptionalEnum(const Optional<TestEnum>&);
   1.478 +  void PassEnumWithDefault(TestEnum);
   1.479 +  void PassOptionalNullableEnum(const Optional<Nullable<TestEnum> >&);
   1.480 +  void PassOptionalNullableEnumWithDefaultValue(const Nullable<TestEnum>&);
   1.481 +  void PassOptionalNullableEnumWithDefaultValue2(const Nullable<TestEnum>&);
   1.482 +  TestEnum ReceiveEnum();
   1.483 +  Nullable<TestEnum> ReceiveNullableEnum();
   1.484 +  TestEnum EnumAttribute();
   1.485 +  TestEnum ReadonlyEnumAttribute();
   1.486 +  void SetEnumAttribute(TestEnum);
   1.487 +
   1.488 +  // Callback types
   1.489 +  void PassCallback(TestCallback&);
   1.490 +  void PassNullableCallback(TestCallback*);
   1.491 +  void PassOptionalCallback(const Optional<OwningNonNull<TestCallback> >&);
   1.492 +  void PassOptionalNullableCallback(const Optional<nsRefPtr<TestCallback> >&);
   1.493 +  void PassOptionalNullableCallbackWithDefaultValue(TestCallback*);
   1.494 +  already_AddRefed<TestCallback> ReceiveCallback();
   1.495 +  already_AddRefed<TestCallback> ReceiveNullableCallback();
   1.496 +  void PassNullableTreatAsNullCallback(TestTreatAsNullCallback*);
   1.497 +  void PassOptionalNullableTreatAsNullCallback(const Optional<nsRefPtr<TestTreatAsNullCallback> >&);
   1.498 +  void PassOptionalNullableTreatAsNullCallbackWithDefaultValue(TestTreatAsNullCallback*);
   1.499 +  void SetTreatAsNullCallback(TestTreatAsNullCallback&);
   1.500 +  already_AddRefed<TestTreatAsNullCallback> TreatAsNullCallback();
   1.501 +  void SetNullableTreatAsNullCallback(TestTreatAsNullCallback*);
   1.502 +  already_AddRefed<TestTreatAsNullCallback> GetNullableTreatAsNullCallback();
   1.503 +
   1.504 +  // Any types
   1.505 +  void PassAny(JSContext*, JS::Handle<JS::Value>);
   1.506 +  void PassVariadicAny(JSContext*, const Sequence<JS::Value>&);
   1.507 +  void PassOptionalAny(JSContext*, JS::Handle<JS::Value>);
   1.508 +  void PassAnyDefaultNull(JSContext*, JS::Handle<JS::Value>);
   1.509 +  void PassSequenceOfAny(JSContext*, const Sequence<JS::Value>&);
   1.510 +  void PassNullableSequenceOfAny(JSContext*, const Nullable<Sequence<JS::Value> >&);
   1.511 +  void PassOptionalSequenceOfAny(JSContext*, const Optional<Sequence<JS::Value> >&);
   1.512 +  void PassOptionalNullableSequenceOfAny(JSContext*, const Optional<Nullable<Sequence<JS::Value> > >&);
   1.513 +  void PassOptionalSequenceOfAnyWithDefaultValue(JSContext*, const Nullable<Sequence<JS::Value> >&);
   1.514 +  void PassSequenceOfSequenceOfAny(JSContext*, const Sequence<Sequence<JS::Value> >&);
   1.515 +  void PassSequenceOfNullableSequenceOfAny(JSContext*, const Sequence<Nullable<Sequence<JS::Value> > >&);
   1.516 +  void PassNullableSequenceOfNullableSequenceOfAny(JSContext*, const Nullable<Sequence<Nullable<Sequence<JS::Value> > > >&);
   1.517 +  void PassOptionalNullableSequenceOfNullableSequenceOfAny(JSContext*, const Optional<Nullable<Sequence<Nullable<Sequence<JS::Value> > > > >&);
   1.518 +  void PassMozMapOfAny(JSContext*, const MozMap<JS::Value>&);
   1.519 +  void PassNullableMozMapOfAny(JSContext*, const Nullable<MozMap<JS::Value> >&);
   1.520 +  void PassOptionalMozMapOfAny(JSContext*, const Optional<MozMap<JS::Value> >&);
   1.521 +  void PassOptionalNullableMozMapOfAny(JSContext*, const Optional<Nullable<MozMap<JS::Value> > >&);
   1.522 +  void PassOptionalMozMapOfAnyWithDefaultValue(JSContext*, const Nullable<MozMap<JS::Value> >&);
   1.523 +  void PassMozMapOfMozMapOfAny(JSContext*, const MozMap<MozMap<JS::Value> >&);
   1.524 +  void PassMozMapOfNullableMozMapOfAny(JSContext*, const MozMap<Nullable<MozMap<JS::Value> > >&);
   1.525 +  void PassNullableMozMapOfNullableMozMapOfAny(JSContext*, const Nullable<MozMap<Nullable<MozMap<JS::Value> > > >&);
   1.526 +  void PassOptionalNullableMozMapOfNullableMozMapOfAny(JSContext*, const Optional<Nullable<MozMap<Nullable<MozMap<JS::Value>>>>>&);
   1.527 +  void PassOptionalNullableMozMapOfNullableSequenceOfAny(JSContext*, const Optional<Nullable<MozMap<Nullable<Sequence<JS::Value>>>>>&);
   1.528 +  void PassOptionalNullableSequenceOfNullableMozMapOfAny(JSContext*, const Optional<Nullable<Sequence<Nullable<MozMap<JS::Value>>>>>&);
   1.529 +  void ReceiveAny(JSContext*, JS::MutableHandle<JS::Value>);
   1.530 +
   1.531 +  // object types
   1.532 +  void PassObject(JSContext*, JS::Handle<JSObject*>);
   1.533 +  void PassVariadicObject(JSContext*, const Sequence<JSObject*>&);
   1.534 +  void PassNullableObject(JSContext*, JS::Handle<JSObject*>);
   1.535 +  void PassVariadicNullableObject(JSContext*, const Sequence<JSObject*>&);
   1.536 +  void PassOptionalObject(JSContext*, const Optional<JS::Handle<JSObject*> >&);
   1.537 +  void PassOptionalNullableObject(JSContext*, const Optional<JS::Handle<JSObject*> >&);
   1.538 +  void PassOptionalNullableObjectWithDefaultValue(JSContext*, JS::Handle<JSObject*>);
   1.539 +  void PassSequenceOfObject(JSContext*, const Sequence<JSObject*>&);
   1.540 +  void PassSequenceOfNullableObject(JSContext*, const Sequence<JSObject*>&);
   1.541 +  void PassNullableSequenceOfObject(JSContext*, const Nullable<Sequence<JSObject*> >&);
   1.542 +  void PassOptionalNullableSequenceOfNullableSequenceOfObject(JSContext*, const Optional<Nullable<Sequence<Nullable<Sequence<JSObject*> > > > >&);
   1.543 +  void PassOptionalNullableSequenceOfNullableSequenceOfNullableObject(JSContext*, const Optional<Nullable<Sequence<Nullable<Sequence<JSObject*> > > > >&);
   1.544 +  void PassMozMapOfObject(JSContext*, const MozMap<JSObject*>&);
   1.545 +  void ReceiveObject(JSContext*, JS::MutableHandle<JSObject*>);
   1.546 +  void ReceiveNullableObject(JSContext*, JS::MutableHandle<JSObject*>);
   1.547 +
   1.548 +  // Union types
   1.549 +  void PassUnion(JSContext*, const ObjectOrLong& arg);
   1.550 +  void PassUnionWithNullable(JSContext* cx, const ObjectOrNullOrLong& arg)
   1.551 +  {
   1.552 +    OwningObjectOrLong returnValue;
   1.553 +    if (arg.IsNull()) {
   1.554 +    } else if (arg.IsObject()) {
   1.555 +      JS::Rooted<JSObject*> obj(cx, arg.GetAsObject());
   1.556 +      JS_GetClass(obj);
   1.557 +      returnValue.SetAsObject() = obj;
   1.558 +    } else {
   1.559 +      int32_t i = arg.GetAsLong();
   1.560 +      i += 1;
   1.561 +      returnValue.SetAsLong() = i;
   1.562 +    }
   1.563 +  }
   1.564 +#ifdef DEBUG
   1.565 +  void PassUnion2(const LongOrBoolean& arg);
   1.566 +  void PassUnion3(JSContext*, const ObjectOrLongOrBoolean& arg);
   1.567 +  void PassUnion4(const NodeOrLongOrBoolean& arg);
   1.568 +  void PassUnion5(JSContext*, const ObjectOrBoolean& arg);
   1.569 +  void PassUnion6(JSContext*, const ObjectOrString& arg);
   1.570 +  void PassUnion7(JSContext*, const ObjectOrStringOrLong& arg);
   1.571 +  void PassUnion8(JSContext*, const ObjectOrStringOrBoolean& arg);
   1.572 +  void PassUnion9(JSContext*, const ObjectOrStringOrLongOrBoolean& arg);
   1.573 +  void PassUnion10(const EventInitOrLong& arg);
   1.574 +  void PassUnion11(JSContext*, const CustomEventInitOrLong& arg);
   1.575 +  void PassUnion12(const EventInitOrLong& arg);
   1.576 +  void PassUnion13(JSContext*, const ObjectOrLongOrNull& arg);
   1.577 +  void PassUnion14(JSContext*, const ObjectOrLongOrNull& arg);
   1.578 +  void PassUnionWithCallback(const EventHandlerNonNullOrNullOrLong& arg);
   1.579 +#endif
   1.580 +  void PassNullableUnion(JSContext*, const Nullable<ObjectOrLong>&);
   1.581 +  void PassOptionalUnion(JSContext*, const Optional<ObjectOrLong>&);
   1.582 +  void PassOptionalNullableUnion(JSContext*, const Optional<Nullable<ObjectOrLong> >&);
   1.583 +  void PassOptionalNullableUnionWithDefaultValue(JSContext*, const Nullable<ObjectOrLong>&);
   1.584 +  //void PassUnionWithInterfaces(const TestInterfaceOrTestExternalInterface& arg);
   1.585 +  //void PassUnionWithInterfacesAndNullable(const TestInterfaceOrNullOrTestExternalInterface& arg);
   1.586 +  void PassUnionWithArrayBuffer(const ArrayBufferOrLong&);
   1.587 +  void PassUnionWithString(JSContext*, const StringOrObject&);
   1.588 +  //void PassUnionWithEnum(JSContext*, const TestEnumOrObject&);
   1.589 +  //void PassUnionWithCallback(JSContext*, const TestCallbackOrLong&);
   1.590 +  void PassUnionWithObject(JSContext*, const ObjectOrLong&);
   1.591 +
   1.592 +  void PassUnionWithDefaultValue1(const DoubleOrString& arg);
   1.593 +  void PassUnionWithDefaultValue2(const DoubleOrString& arg);
   1.594 +  void PassUnionWithDefaultValue3(const DoubleOrString& arg);
   1.595 +  void PassUnionWithDefaultValue4(const FloatOrString& arg);
   1.596 +  void PassUnionWithDefaultValue5(const FloatOrString& arg);
   1.597 +  void PassUnionWithDefaultValue6(const FloatOrString& arg);
   1.598 +  void PassUnionWithDefaultValue7(const UnrestrictedDoubleOrString& arg);
   1.599 +  void PassUnionWithDefaultValue8(const UnrestrictedDoubleOrString& arg);
   1.600 +  void PassUnionWithDefaultValue9(const UnrestrictedDoubleOrString& arg);
   1.601 +  void PassUnionWithDefaultValue10(const UnrestrictedDoubleOrString& arg);
   1.602 +  void PassUnionWithDefaultValue11(const UnrestrictedFloatOrString& arg);
   1.603 +  void PassUnionWithDefaultValue12(const UnrestrictedFloatOrString& arg);
   1.604 +  void PassUnionWithDefaultValue13(const UnrestrictedFloatOrString& arg);
   1.605 +  void PassUnionWithDefaultValue14(const UnrestrictedFloatOrString& arg);
   1.606 +
   1.607 +  void PassNullableUnionWithDefaultValue1(const Nullable<DoubleOrString>& arg);
   1.608 +  void PassNullableUnionWithDefaultValue2(const Nullable<DoubleOrString>& arg);
   1.609 +  void PassNullableUnionWithDefaultValue3(const Nullable<DoubleOrString>& arg);
   1.610 +  void PassNullableUnionWithDefaultValue4(const Nullable<FloatOrString>& arg);
   1.611 +  void PassNullableUnionWithDefaultValue5(const Nullable<FloatOrString>& arg);
   1.612 +  void PassNullableUnionWithDefaultValue6(const Nullable<FloatOrString>& arg);
   1.613 +  void PassNullableUnionWithDefaultValue7(const Nullable<UnrestrictedDoubleOrString>& arg);
   1.614 +  void PassNullableUnionWithDefaultValue8(const Nullable<UnrestrictedDoubleOrString>& arg);
   1.615 +  void PassNullableUnionWithDefaultValue9(const Nullable<UnrestrictedDoubleOrString>& arg);
   1.616 +  void PassNullableUnionWithDefaultValue10(const Nullable<UnrestrictedFloatOrString>& arg);
   1.617 +  void PassNullableUnionWithDefaultValue11(const Nullable<UnrestrictedFloatOrString>& arg);
   1.618 +  void PassNullableUnionWithDefaultValue12(const Nullable<UnrestrictedFloatOrString>& arg);
   1.619 +
   1.620 +  void PassSequenceOfUnions(const Sequence<OwningCanvasPatternOrCanvasGradient>&);
   1.621 +  void PassSequenceOfUnions2(JSContext*, const Sequence<OwningObjectOrLong>&);
   1.622 +  void PassVariadicUnion(const Sequence<OwningCanvasPatternOrCanvasGradient>&);
   1.623 +
   1.624 +  void PassSequenceOfNullableUnions(const Sequence<Nullable<OwningCanvasPatternOrCanvasGradient>>&);
   1.625 +  void PassVariadicNullableUnion(const Sequence<Nullable<OwningCanvasPatternOrCanvasGradient>>&);
   1.626 +  void PassMozMapOfUnions(const MozMap<OwningCanvasPatternOrCanvasGradient>&);
   1.627 +  void PassMozMapOfUnions2(JSContext*, const MozMap<OwningObjectOrLong>&);
   1.628 +
   1.629 +  void ReceiveUnion(OwningCanvasPatternOrCanvasGradient&);
   1.630 +  void ReceiveUnion2(JSContext*, OwningObjectOrLong&);
   1.631 +  void ReceiveUnionContainingNull(OwningCanvasPatternOrNullOrCanvasGradient&);
   1.632 +  void ReceiveNullableUnion(Nullable<OwningCanvasPatternOrCanvasGradient>&);
   1.633 +  void ReceiveNullableUnion2(JSContext*, Nullable<OwningObjectOrLong>&);
   1.634 +  void GetWritableUnion(OwningCanvasPatternOrCanvasGradient&);
   1.635 +  void SetWritableUnion(const CanvasPatternOrCanvasGradient&);
   1.636 +  void GetWritableUnionContainingNull(OwningCanvasPatternOrNullOrCanvasGradient&);
   1.637 +  void SetWritableUnionContainingNull(const CanvasPatternOrNullOrCanvasGradient&);
   1.638 +  void GetWritableNullableUnion(Nullable<OwningCanvasPatternOrCanvasGradient>&);
   1.639 +  void SetWritableNullableUnion(const Nullable<CanvasPatternOrCanvasGradient>&);
   1.640 +
   1.641 +  // Date types
   1.642 +  void PassDate(Date);
   1.643 +  void PassNullableDate(const Nullable<Date>&);
   1.644 +  void PassOptionalDate(const Optional<Date>&);
   1.645 +  void PassOptionalNullableDate(const Optional<Nullable<Date> >&);
   1.646 +  void PassOptionalNullableDateWithDefaultValue(const Nullable<Date>&);
   1.647 +  void PassDateSequence(const Sequence<Date>&);
   1.648 +  void PassDateMozMap(const MozMap<Date>&);
   1.649 +  void PassNullableDateSequence(const Sequence<Nullable<Date> >&);
   1.650 +  Date ReceiveDate();
   1.651 +  Nullable<Date> ReceiveNullableDate();
   1.652 +
   1.653 +  // binaryNames tests
   1.654 +  void MethodRenamedTo();
   1.655 +  void MethodRenamedTo(int8_t);
   1.656 +  int8_t AttributeGetterRenamedTo();
   1.657 +  int8_t AttributeRenamedTo();
   1.658 +  void SetAttributeRenamedTo(int8_t);
   1.659 +
   1.660 +  // Dictionary tests
   1.661 +  void PassDictionary(JSContext*, const Dict&);
   1.662 +  void GetReadonlyDictionary(JSContext*, Dict&);
   1.663 +  void GetReadonlyNullableDictionary(JSContext*, Nullable<Dict>&);
   1.664 +  void GetWritableDictionary(JSContext*, Dict&);
   1.665 +  void SetWritableDictionary(JSContext*, const Dict&);
   1.666 +  void GetReadonlyFrozenDictionary(JSContext*, Dict&);
   1.667 +  void GetReadonlyFrozenNullableDictionary(JSContext*, Nullable<Dict>&);
   1.668 +  void GetWritableFrozenDictionary(JSContext*, Dict&);
   1.669 +  void SetWritableFrozenDictionary(JSContext*, const Dict&);
   1.670 +  void ReceiveDictionary(JSContext*, Dict&);
   1.671 +  void ReceiveNullableDictionary(JSContext*, Nullable<Dict>&);
   1.672 +  void PassOtherDictionary(const GrandparentDict&);
   1.673 +  void PassSequenceOfDictionaries(JSContext*, const Sequence<Dict>&);
   1.674 +  void PassMozMapOfDictionaries(const MozMap<GrandparentDict>&);
   1.675 +  void PassDictionaryOrLong(JSContext*, const Dict&);
   1.676 +  void PassDictionaryOrLong(int32_t);
   1.677 +  void PassDictContainingDict(JSContext*, const DictContainingDict&);
   1.678 +  void PassDictContainingSequence(JSContext*, const DictContainingSequence&);
   1.679 +  void ReceiveDictContainingSequence(JSContext*, DictContainingSequence&);
   1.680 +
   1.681 +  // Typedefs
   1.682 +  void ExerciseTypedefInterfaces1(TestInterface&);
   1.683 +  already_AddRefed<TestInterface> ExerciseTypedefInterfaces2(TestInterface*);
   1.684 +  void ExerciseTypedefInterfaces3(TestInterface&);
   1.685 +
   1.686 +  // Static methods and attributes
   1.687 +  static void StaticMethod(const GlobalObject&, bool);
   1.688 +  static void StaticMethodWithContext(const GlobalObject&, JSContext*,
   1.689 +                                      JS::Value);
   1.690 +  static bool StaticAttribute(const GlobalObject&);
   1.691 +  static void SetStaticAttribute(const GlobalObject&, bool);
   1.692 +
   1.693 +  // Overload resolution tests
   1.694 +  bool Overload1(TestInterface&);
   1.695 +  TestInterface* Overload1(const nsAString&, TestInterface&);
   1.696 +  void Overload2(TestInterface&);
   1.697 +  void Overload2(JSContext*, const Dict&);
   1.698 +  void Overload2(bool);
   1.699 +  void Overload2(const nsAString&);
   1.700 +  void Overload2(Date);
   1.701 +  void Overload3(TestInterface&);
   1.702 +  void Overload3(const TestCallback&);
   1.703 +  void Overload3(bool);
   1.704 +  void Overload4(TestInterface&);
   1.705 +  void Overload4(TestCallbackInterface&);
   1.706 +  void Overload4(const nsAString&);
   1.707 +  void Overload5(int32_t);
   1.708 +  void Overload5(TestEnum);
   1.709 +  void Overload6(int32_t);
   1.710 +  void Overload6(bool);
   1.711 +  void Overload7(int32_t);
   1.712 +  void Overload7(bool);
   1.713 +  void Overload7(const nsCString&);
   1.714 +  void Overload8(int32_t);
   1.715 +  void Overload8(TestInterface&);
   1.716 +  void Overload9(const Nullable<int32_t>&);
   1.717 +  void Overload9(const nsAString&);
   1.718 +  void Overload10(const Nullable<int32_t>&);
   1.719 +  void Overload10(JSContext*, JS::Handle<JSObject*>);
   1.720 +  void Overload11(int32_t);
   1.721 +  void Overload11(const nsAString&);
   1.722 +  void Overload12(int32_t);
   1.723 +  void Overload12(const Nullable<bool>&);
   1.724 +  void Overload13(const Nullable<int32_t>&);
   1.725 +  void Overload13(bool);
   1.726 +  void Overload14(const Optional<int32_t>&);
   1.727 +  void Overload14(TestInterface&);
   1.728 +  void Overload15(int32_t);
   1.729 +  void Overload15(const Optional<NonNull<TestInterface> >&);
   1.730 +  void Overload16(int32_t);
   1.731 +  void Overload16(const Optional<TestInterface*>&);
   1.732 +
   1.733 +  // Variadic handling
   1.734 +  void PassVariadicThirdArg(const nsAString&, int32_t,
   1.735 +                            const Sequence<OwningNonNull<TestInterface> >&);
   1.736 +
   1.737 +  // Conditionally exposed methods/attributes
   1.738 +  bool Prefable1();
   1.739 +  bool Prefable2();
   1.740 +  bool Prefable3();
   1.741 +  bool Prefable4();
   1.742 +  bool Prefable5();
   1.743 +  bool Prefable6();
   1.744 +  bool Prefable7();
   1.745 +  bool Prefable8();
   1.746 +  bool Prefable9();
   1.747 +  void Prefable10();
   1.748 +  void Prefable11();
   1.749 +  bool Prefable12();
   1.750 +  void Prefable13();
   1.751 +  bool Prefable14();
   1.752 +  bool Prefable15();
   1.753 +  bool Prefable16();
   1.754 +  void Prefable17();
   1.755 +  void Prefable18();
   1.756 +  void Prefable19();
   1.757 +  void Prefable20();
   1.758 +  void Prefable21();
   1.759 +  void Prefable22();
   1.760 +  void Prefable23();
   1.761 +  void Prefable24();
   1.762 +
   1.763 +  // Miscellania
   1.764 +  int32_t AttrWithLenientThis();
   1.765 +  void SetAttrWithLenientThis(int32_t);
   1.766 +  uint32_t UnforgeableAttr();
   1.767 +  uint32_t UnforgeableAttr2();
   1.768 +  void Stringify(nsString&);
   1.769 +  void PassRenamedInterface(nsRenamedInterface&);
   1.770 +  TestInterface* PutForwardsAttr();
   1.771 +  TestInterface* PutForwardsAttr2();
   1.772 +  TestInterface* PutForwardsAttr3();
   1.773 +  void GetJsonifierShouldSkipThis(JSContext*, JS::MutableHandle<JS::Value>);
   1.774 +  void SetJsonifierShouldSkipThis(JSContext*, JS::Rooted<JS::Value>&);
   1.775 +  TestParentInterface* JsonifierShouldSkipThis2();
   1.776 +  void SetJsonifierShouldSkipThis2(TestParentInterface&);
   1.777 +  TestCallbackInterface* JsonifierShouldSkipThis3();
   1.778 +  void SetJsonifierShouldSkipThis3(TestCallbackInterface&);
   1.779 +  void ThrowingMethod(ErrorResult& aRv);
   1.780 +  bool GetThrowingAttr(ErrorResult& aRv) const;
   1.781 +  void SetThrowingAttr(bool arg, ErrorResult& aRv);
   1.782 +  bool GetThrowingGetterAttr(ErrorResult& aRv) const;
   1.783 +  void SetThrowingGetterAttr(bool arg);
   1.784 +  bool ThrowingSetterAttr() const;
   1.785 +  void SetThrowingSetterAttr(bool arg, ErrorResult& aRv);
   1.786 +  int16_t LegacyCall(JS::Value, uint32_t, TestInterface&);
   1.787 +  void PassArgsWithDefaults(JSContext*, const Optional<int32_t>&,
   1.788 +                            TestInterface*, const Dict&, double,
   1.789 +                            const Optional<float>&);
   1.790 +
   1.791 +  // Methods and properties imported via "implements"
   1.792 +  bool ImplementedProperty();
   1.793 +  void SetImplementedProperty(bool);
   1.794 +  void ImplementedMethod();
   1.795 +  bool ImplementedParentProperty();
   1.796 +  void SetImplementedParentProperty(bool);
   1.797 +  void ImplementedParentMethod();
   1.798 +  bool IndirectlyImplementedProperty();
   1.799 +  void SetIndirectlyImplementedProperty(bool);
   1.800 +  void IndirectlyImplementedMethod();
   1.801 +  uint32_t DiamondImplementedProperty();
   1.802 +
   1.803 +  // Test EnforceRange/Clamp
   1.804 +  void DontEnforceRangeOrClamp(int8_t);
   1.805 +  void DoEnforceRange(int8_t);
   1.806 +  void DoClamp(int8_t);
   1.807 +  void SetEnforcedByte(int8_t);
   1.808 +  int8_t EnforcedByte();
   1.809 +  void SetClampedByte(int8_t);
   1.810 +  int8_t ClampedByte();
   1.811 +
   1.812 +private:
   1.813 +  // We add signatures here that _could_ start matching if the codegen
   1.814 +  // got data types wrong.  That way if it ever does we'll have a call
   1.815 +  // to these private deleted methods and compilation will fail.
   1.816 +  void SetReadonlyByte(int8_t) MOZ_DELETE;
   1.817 +  template<typename T>
   1.818 +  void SetWritableByte(T) MOZ_DELETE;
   1.819 +  template<typename T>
   1.820 +  void PassByte(T) MOZ_DELETE;
   1.821 +  void PassNullableByte(Nullable<int8_t>&) MOZ_DELETE;
   1.822 +  template<typename T>
   1.823 +  void PassOptionalByte(const Optional<T>&) MOZ_DELETE;
   1.824 +  template<typename T>
   1.825 +  void PassOptionalByteWithDefault(T) MOZ_DELETE;
   1.826 +  void PassVariadicByte(Sequence<int8_t>&) MOZ_DELETE;
   1.827 +
   1.828 +  void SetReadonlyShort(int16_t) MOZ_DELETE;
   1.829 +  template<typename T>
   1.830 +  void SetWritableShort(T) MOZ_DELETE;
   1.831 +  template<typename T>
   1.832 +  void PassShort(T) MOZ_DELETE;
   1.833 +  template<typename T>
   1.834 +  void PassOptionalShort(const Optional<T>&) MOZ_DELETE;
   1.835 +  template<typename T>
   1.836 +  void PassOptionalShortWithDefault(T) MOZ_DELETE;
   1.837 +
   1.838 +  void SetReadonlyLong(int32_t) MOZ_DELETE;
   1.839 +  template<typename T>
   1.840 +  void SetWritableLong(T) MOZ_DELETE;
   1.841 +  template<typename T>
   1.842 +  void PassLong(T) MOZ_DELETE;
   1.843 +  template<typename T>
   1.844 +  void PassOptionalLong(const Optional<T>&) MOZ_DELETE;
   1.845 +  template<typename T>
   1.846 +  void PassOptionalLongWithDefault(T) MOZ_DELETE;
   1.847 +
   1.848 +  void SetReadonlyLongLong(int64_t) MOZ_DELETE;
   1.849 +  template<typename T>
   1.850 +  void SetWritableLongLong(T) MOZ_DELETE;
   1.851 +  template<typename T>
   1.852 +  void PassLongLong(T) MOZ_DELETE;
   1.853 +  template<typename T>
   1.854 +  void PassOptionalLongLong(const Optional<T>&) MOZ_DELETE;
   1.855 +  template<typename T>
   1.856 +  void PassOptionalLongLongWithDefault(T) MOZ_DELETE;
   1.857 +
   1.858 +  void SetReadonlyOctet(uint8_t) MOZ_DELETE;
   1.859 +  template<typename T>
   1.860 +  void SetWritableOctet(T) MOZ_DELETE;
   1.861 +  template<typename T>
   1.862 +  void PassOctet(T) MOZ_DELETE;
   1.863 +  template<typename T>
   1.864 +  void PassOptionalOctet(const Optional<T>&) MOZ_DELETE;
   1.865 +  template<typename T>
   1.866 +  void PassOptionalOctetWithDefault(T) MOZ_DELETE;
   1.867 +
   1.868 +  void SetReadonlyUnsignedShort(uint16_t) MOZ_DELETE;
   1.869 +  template<typename T>
   1.870 +  void SetWritableUnsignedShort(T) MOZ_DELETE;
   1.871 +  template<typename T>
   1.872 +  void PassUnsignedShort(T) MOZ_DELETE;
   1.873 +  template<typename T>
   1.874 +  void PassOptionalUnsignedShort(const Optional<T>&) MOZ_DELETE;
   1.875 +  template<typename T>
   1.876 +  void PassOptionalUnsignedShortWithDefault(T) MOZ_DELETE;
   1.877 +
   1.878 +  void SetReadonlyUnsignedLong(uint32_t) MOZ_DELETE;
   1.879 +  template<typename T>
   1.880 +  void SetWritableUnsignedLong(T) MOZ_DELETE;
   1.881 +  template<typename T>
   1.882 +  void PassUnsignedLong(T) MOZ_DELETE;
   1.883 +  template<typename T>
   1.884 +  void PassOptionalUnsignedLong(const Optional<T>&) MOZ_DELETE;
   1.885 +  template<typename T>
   1.886 +  void PassOptionalUnsignedLongWithDefault(T) MOZ_DELETE;
   1.887 +
   1.888 +  void SetReadonlyUnsignedLongLong(uint64_t) MOZ_DELETE;
   1.889 +  template<typename T>
   1.890 +  void SetWritableUnsignedLongLong(T) MOZ_DELETE;
   1.891 +  template<typename T>
   1.892 +  void PassUnsignedLongLong(T) MOZ_DELETE;
   1.893 +  template<typename T>
   1.894 +  void PassOptionalUnsignedLongLong(const Optional<T>&) MOZ_DELETE;
   1.895 +  template<typename T>
   1.896 +  void PassOptionalUnsignedLongLongWithDefault(T) MOZ_DELETE;
   1.897 +
   1.898 +  // Enforce that only const things are passed for sequences
   1.899 +  void PassSequence(Sequence<int32_t> &) MOZ_DELETE;
   1.900 +  void PassNullableSequence(Nullable< Sequence<int32_t> >&) MOZ_DELETE;
   1.901 +  void PassOptionalNullableSequenceWithDefaultValue(Nullable< Sequence<int32_t> >&) MOZ_DELETE;
   1.902 +  void PassSequenceOfAny(JSContext*, Sequence<JS::Value>&) MOZ_DELETE;
   1.903 +  void PassNullableSequenceOfAny(JSContext*, Nullable<Sequence<JS::Value> >&) MOZ_DELETE;
   1.904 +  void PassOptionalSequenceOfAny(JSContext*, Optional<Sequence<JS::Value> >&) MOZ_DELETE;
   1.905 +  void PassOptionalNullableSequenceOfAny(JSContext*, Optional<Nullable<Sequence<JS::Value> > >&) MOZ_DELETE;
   1.906 +  void PassOptionalSequenceOfAnyWithDefaultValue(JSContext*, Nullable<Sequence<JS::Value> >&) MOZ_DELETE;
   1.907 +  void PassSequenceOfSequenceOfAny(JSContext*, Sequence<Sequence<JS::Value> >&) MOZ_DELETE;
   1.908 +  void PassSequenceOfNullableSequenceOfAny(JSContext*, Sequence<Nullable<Sequence<JS::Value> > >&) MOZ_DELETE;
   1.909 +  void PassNullableSequenceOfNullableSequenceOfAny(JSContext*, Nullable<Sequence<Nullable<Sequence<JS::Value> > > >&) MOZ_DELETE;
   1.910 +  void PassOptionalNullableSequenceOfNullableSequenceOfAny(JSContext*, Optional<Nullable<Sequence<Nullable<Sequence<JS::Value> > > > >&) MOZ_DELETE;
   1.911 +  void PassSequenceOfObject(JSContext*, Sequence<JSObject*>&) MOZ_DELETE;
   1.912 +  void PassSequenceOfNullableObject(JSContext*, Sequence<JSObject*>&) MOZ_DELETE;
   1.913 +  void PassOptionalNullableSequenceOfNullableSequenceOfObject(JSContext*, Optional<Nullable<Sequence<Nullable<Sequence<JSObject*> > > > >&) MOZ_DELETE;
   1.914 +  void PassOptionalNullableSequenceOfNullableSequenceOfNullableObject(JSContext*, Optional<Nullable<Sequence<Nullable<Sequence<JSObject*> > > > >&) MOZ_DELETE;
   1.915 +
   1.916 +  // Enforce that only const things are passed for optional
   1.917 +  void PassOptionalByte(Optional<int8_t>&) MOZ_DELETE;
   1.918 +  void PassOptionalNullableByte(Optional<Nullable<int8_t> >&) MOZ_DELETE;
   1.919 +  void PassOptionalShort(Optional<int16_t>&) MOZ_DELETE;
   1.920 +  void PassOptionalLong(Optional<int32_t>&) MOZ_DELETE;
   1.921 +  void PassOptionalLongLong(Optional<int64_t>&) MOZ_DELETE;
   1.922 +  void PassOptionalOctet(Optional<uint8_t>&) MOZ_DELETE;
   1.923 +  void PassOptionalUnsignedShort(Optional<uint16_t>&) MOZ_DELETE;
   1.924 +  void PassOptionalUnsignedLong(Optional<uint32_t>&) MOZ_DELETE;
   1.925 +  void PassOptionalUnsignedLongLong(Optional<uint64_t>&) MOZ_DELETE;
   1.926 +  void PassOptionalSelf(Optional<TestInterface*> &) MOZ_DELETE;
   1.927 +  void PassOptionalNonNullSelf(Optional<NonNull<TestInterface> >&) MOZ_DELETE;
   1.928 +  void PassOptionalOther(Optional<IndirectlyImplementedInterface*>&);
   1.929 +  void PassOptionalNonNullOther(Optional<NonNull<IndirectlyImplementedInterface> >&);
   1.930 +  void PassOptionalExternal(Optional<TestExternalInterface*>&) MOZ_DELETE;
   1.931 +  void PassOptionalNonNullExternal(Optional<TestExternalInterface*>&) MOZ_DELETE;
   1.932 +  void PassOptionalSequence(Optional<Sequence<int32_t> >&) MOZ_DELETE;
   1.933 +  void PassOptionalNullableSequence(Optional<Nullable<Sequence<int32_t> > >&) MOZ_DELETE;
   1.934 +  void PassOptionalObjectSequence(Optional<Sequence<OwningNonNull<TestInterface> > >&) MOZ_DELETE;
   1.935 +  void PassOptionalArrayBuffer(Optional<ArrayBuffer>&) MOZ_DELETE;
   1.936 +  void PassOptionalNullableArrayBuffer(Optional<ArrayBuffer*>&) MOZ_DELETE;
   1.937 +  void PassOptionalEnum(Optional<TestEnum>&) MOZ_DELETE;
   1.938 +  void PassOptionalCallback(JSContext*, Optional<OwningNonNull<TestCallback> >&) MOZ_DELETE;
   1.939 +  void PassOptionalNullableCallback(JSContext*, Optional<nsRefPtr<TestCallback> >&) MOZ_DELETE;
   1.940 +  void PassOptionalAny(Optional<JS::Handle<JS::Value> >&) MOZ_DELETE;
   1.941 +
   1.942 +  // And test that string stuff is always const
   1.943 +  void PassString(nsAString&) MOZ_DELETE;
   1.944 +  void PassNullableString(nsAString&) MOZ_DELETE;
   1.945 +  void PassOptionalString(Optional<nsAString>&) MOZ_DELETE;
   1.946 +  void PassOptionalStringWithDefaultValue(nsAString&) MOZ_DELETE;
   1.947 +  void PassOptionalNullableString(Optional<nsAString>&) MOZ_DELETE;
   1.948 +  void PassOptionalNullableStringWithDefaultValue(nsAString&) MOZ_DELETE;
   1.949 +  void PassVariadicString(Sequence<nsString>&) MOZ_DELETE;
   1.950 +
   1.951 +  // cstrings should be const as well
   1.952 +  void PassByteString(nsCString&) MOZ_DELETE;
   1.953 +  void PassNullableByteString(nsCString&) MOZ_DELETE;
   1.954 +  void PassOptionalByteString(Optional<nsCString>&) MOZ_DELETE;
   1.955 +  void PassOptionalNullableByteString(Optional<nsCString>&) MOZ_DELETE;
   1.956 +  void PassVariadicByteString(Sequence<nsCString>&) MOZ_DELETE;
   1.957 +
   1.958 +  // Make sure dictionary arguments are always const
   1.959 +  void PassDictionary(JSContext*, Dict&) MOZ_DELETE;
   1.960 +  void PassOtherDictionary(GrandparentDict&) MOZ_DELETE;
   1.961 +  void PassSequenceOfDictionaries(JSContext*, Sequence<Dict>&) MOZ_DELETE;
   1.962 +  void PassDictionaryOrLong(JSContext*, Dict&) MOZ_DELETE;
   1.963 +  void PassDictContainingDict(JSContext*, DictContainingDict&) MOZ_DELETE;
   1.964 +  void PassDictContainingSequence(DictContainingSequence&) MOZ_DELETE;
   1.965 +
   1.966 +  // Make sure various nullable things are always const
   1.967 +  void PassNullableEnum(Nullable<TestEnum>&) MOZ_DELETE;
   1.968 +
   1.969 +  // Make sure unions are always const
   1.970 +  void PassUnion(JSContext*, ObjectOrLong& arg) MOZ_DELETE;
   1.971 +  void PassUnionWithNullable(JSContext*, ObjectOrNullOrLong& arg) MOZ_DELETE;
   1.972 +  void PassNullableUnion(JSContext*, Nullable<ObjectOrLong>&) MOZ_DELETE;
   1.973 +  void PassOptionalUnion(JSContext*, Optional<ObjectOrLong>&) MOZ_DELETE;
   1.974 +  void PassOptionalNullableUnion(JSContext*, Optional<Nullable<ObjectOrLong> >&) MOZ_DELETE;
   1.975 +  void PassOptionalNullableUnionWithDefaultValue(JSContext*, Nullable<ObjectOrLong>&) MOZ_DELETE;
   1.976 +
   1.977 +  // Make sure various date stuff is const as needed
   1.978 +  void PassNullableDate(Nullable<Date>&) MOZ_DELETE;
   1.979 +  void PassOptionalDate(Optional<Date>&) MOZ_DELETE;
   1.980 +  void PassOptionalNullableDate(Optional<Nullable<Date> >&) MOZ_DELETE;
   1.981 +  void PassOptionalNullableDateWithDefaultValue(Nullable<Date>&) MOZ_DELETE;
   1.982 +  void PassDateSequence(Sequence<Date>&) MOZ_DELETE;
   1.983 +  void PassNullableDateSequence(Sequence<Nullable<Date> >&) MOZ_DELETE;
   1.984 +
   1.985 +  // Make sure variadics are const as needed
   1.986 +  void PassVariadicAny(JSContext*, Sequence<JS::Value>&) MOZ_DELETE;
   1.987 +  void PassVariadicObject(JSContext*, Sequence<JSObject*>&) MOZ_DELETE;
   1.988 +  void PassVariadicNullableObject(JSContext*, Sequence<JSObject*>&) MOZ_DELETE;
   1.989 +
   1.990 +  // Ensure NonNull does not leak in
   1.991 +  void PassSelf(NonNull<TestInterface>&) MOZ_DELETE;
   1.992 +  void PassSelf(OwningNonNull<TestInterface>&) MOZ_DELETE;
   1.993 +  void PassSelf(const NonNull<TestInterface>&) MOZ_DELETE;
   1.994 +  void PassSelf(const OwningNonNull<TestInterface>&) MOZ_DELETE;
   1.995 +  void PassOther(NonNull<IndirectlyImplementedInterface>&) MOZ_DELETE;
   1.996 +  void PassOther(const NonNull<IndirectlyImplementedInterface>&) MOZ_DELETE;
   1.997 +  void PassOther(OwningNonNull<IndirectlyImplementedInterface>&) MOZ_DELETE;
   1.998 +  void PassOther(const OwningNonNull<IndirectlyImplementedInterface>&) MOZ_DELETE;
   1.999 +  void PassCallbackInterface(OwningNonNull<TestCallbackInterface>&) MOZ_DELETE;
  1.1000 +  void PassCallbackInterface(const OwningNonNull<TestCallbackInterface>&) MOZ_DELETE;
  1.1001 +  void PassCallbackInterface(NonNull<TestCallbackInterface>&) MOZ_DELETE;
  1.1002 +  void PassCallbackInterface(const NonNull<TestCallbackInterface>&) MOZ_DELETE;
  1.1003 +  void PassCallback(OwningNonNull<TestCallback>&) MOZ_DELETE;
  1.1004 +  void PassCallback(const OwningNonNull<TestCallback>&) MOZ_DELETE;
  1.1005 +  void PassCallback(NonNull<TestCallback>&) MOZ_DELETE;
  1.1006 +  void PassCallback(const NonNull<TestCallback>&) MOZ_DELETE;
  1.1007 +  void PassString(const NonNull<nsAString>&) MOZ_DELETE;
  1.1008 +  void PassString(NonNull<nsAString>&) MOZ_DELETE;
  1.1009 +  void PassString(const OwningNonNull<nsAString>&) MOZ_DELETE;
  1.1010 +  void PassString(OwningNonNull<nsAString>&) MOZ_DELETE;
  1.1011 +};
  1.1012 +
  1.1013 +class TestIndexedGetterInterface : public nsISupports,
  1.1014 +                                   public nsWrapperCache
  1.1015 +{
  1.1016 +public:
  1.1017 +  NS_DECL_ISUPPORTS
  1.1018 +
  1.1019 +  // We need a GetParentObject to make binding codegen happy
  1.1020 +  virtual nsISupports* GetParentObject();
  1.1021 +
  1.1022 +  uint32_t IndexedGetter(uint32_t, bool&);
  1.1023 +  uint32_t IndexedGetter(uint32_t&) MOZ_DELETE;
  1.1024 +  uint32_t Item(uint32_t&);
  1.1025 +  uint32_t Item(uint32_t, bool&) MOZ_DELETE;
  1.1026 +  uint32_t Length();
  1.1027 +  void LegacyCall(JS::Handle<JS::Value>);
  1.1028 +};
  1.1029 +
  1.1030 +class TestNamedGetterInterface : public nsISupports,
  1.1031 +                                 public nsWrapperCache
  1.1032 +{
  1.1033 +public:
  1.1034 +  NS_DECL_ISUPPORTS
  1.1035 +
  1.1036 +  // We need a GetParentObject to make binding codegen happy
  1.1037 +  virtual nsISupports* GetParentObject();
  1.1038 +
  1.1039 +  void NamedGetter(const nsAString&, bool&, nsAString&);
  1.1040 +  bool NameIsEnumerable(const nsAString&);
  1.1041 +  void GetSupportedNames(unsigned, nsTArray<nsString>&);
  1.1042 +};
  1.1043 +
  1.1044 +class TestIndexedGetterAndSetterAndNamedGetterInterface : public nsISupports,
  1.1045 +                                                          public nsWrapperCache
  1.1046 +{
  1.1047 +public:
  1.1048 +  NS_DECL_ISUPPORTS
  1.1049 +
  1.1050 +  // We need a GetParentObject to make binding codegen happy
  1.1051 +  virtual nsISupports* GetParentObject();
  1.1052 +
  1.1053 +  void NamedGetter(const nsAString&, bool&, nsAString&);
  1.1054 +  bool NameIsEnumerable(const nsAString&);
  1.1055 +  void GetSupportedNames(unsigned, nsTArray<nsString>&);
  1.1056 +  int32_t IndexedGetter(uint32_t, bool&);
  1.1057 +  void IndexedSetter(uint32_t, int32_t);
  1.1058 +  uint32_t Length();
  1.1059 +};
  1.1060 +
  1.1061 +class TestIndexedAndNamedGetterInterface : public nsISupports,
  1.1062 +                                           public nsWrapperCache
  1.1063 +{
  1.1064 +public:
  1.1065 +  NS_DECL_ISUPPORTS
  1.1066 +
  1.1067 +  // We need a GetParentObject to make binding codegen happy
  1.1068 +  virtual nsISupports* GetParentObject();
  1.1069 +
  1.1070 +  uint32_t IndexedGetter(uint32_t, bool&);
  1.1071 +  void NamedGetter(const nsAString&, bool&, nsAString&);
  1.1072 +  bool NameIsEnumerable(const nsAString&);
  1.1073 +  void NamedItem(const nsAString&, nsAString&);
  1.1074 +  uint32_t Length();
  1.1075 +  void GetSupportedNames(unsigned, nsTArray<nsString>&);
  1.1076 +};
  1.1077 +
  1.1078 +class TestIndexedSetterInterface : public nsISupports,
  1.1079 +                                   public nsWrapperCache
  1.1080 +{
  1.1081 +public:
  1.1082 +  NS_DECL_ISUPPORTS
  1.1083 +
  1.1084 +  // We need a GetParentObject to make binding codegen happy
  1.1085 +  virtual nsISupports* GetParentObject();
  1.1086 +
  1.1087 +  void IndexedSetter(uint32_t, const nsAString&);
  1.1088 +  void IndexedGetter(uint32_t, bool&, nsString&);
  1.1089 +  uint32_t Length();
  1.1090 +  void SetItem(uint32_t, const nsAString&);
  1.1091 +};
  1.1092 +
  1.1093 +class TestNamedSetterInterface : public nsISupports,
  1.1094 +                                 public nsWrapperCache
  1.1095 +{
  1.1096 +public:
  1.1097 +  NS_DECL_ISUPPORTS
  1.1098 +
  1.1099 +  // We need a GetParentObject to make binding codegen happy
  1.1100 +  virtual nsISupports* GetParentObject();
  1.1101 +
  1.1102 +  void NamedSetter(const nsAString&, TestIndexedSetterInterface&);
  1.1103 +  TestIndexedSetterInterface* NamedGetter(const nsAString&, bool&);
  1.1104 +  bool NameIsEnumerable(const nsAString&);
  1.1105 +  void GetSupportedNames(unsigned, nsTArray<nsString>&);
  1.1106 +};
  1.1107 +
  1.1108 +class TestIndexedAndNamedSetterInterface : public nsISupports,
  1.1109 +                                           public nsWrapperCache
  1.1110 +{
  1.1111 +public:
  1.1112 +  NS_DECL_ISUPPORTS
  1.1113 +
  1.1114 +  // We need a GetParentObject to make binding codegen happy
  1.1115 +  virtual nsISupports* GetParentObject();
  1.1116 +
  1.1117 +  void IndexedSetter(uint32_t, TestIndexedSetterInterface&);
  1.1118 +  TestIndexedSetterInterface* IndexedGetter(uint32_t, bool&);
  1.1119 +  uint32_t Length();
  1.1120 +  void NamedSetter(const nsAString&, TestIndexedSetterInterface&);
  1.1121 +  TestIndexedSetterInterface* NamedGetter(const nsAString&, bool&);
  1.1122 +  bool NameIsEnumerable(const nsAString&);
  1.1123 +  void SetNamedItem(const nsAString&, TestIndexedSetterInterface&);
  1.1124 +  void GetSupportedNames(unsigned, nsTArray<nsString>&);
  1.1125 +};
  1.1126 +
  1.1127 +class TestIndexedAndNamedGetterAndSetterInterface : public TestIndexedSetterInterface
  1.1128 +{
  1.1129 +public:
  1.1130 +  uint32_t IndexedGetter(uint32_t, bool&);
  1.1131 +  uint32_t Item(uint32_t);
  1.1132 +  void NamedGetter(const nsAString&, bool&, nsAString&);
  1.1133 +  bool NameIsEnumerable(const nsAString&);
  1.1134 +  void NamedItem(const nsAString&, nsAString&);
  1.1135 +  void IndexedSetter(uint32_t, int32_t&);
  1.1136 +  void IndexedSetter(uint32_t, const nsAString&) MOZ_DELETE;
  1.1137 +  void NamedSetter(const nsAString&, const nsAString&);
  1.1138 +  void Stringify(nsAString&);
  1.1139 +  uint32_t Length();
  1.1140 +  void GetSupportedNames(unsigned, nsTArray<nsString>&);
  1.1141 +};
  1.1142 +
  1.1143 +class TestCppKeywordNamedMethodsInterface : public nsISupports,
  1.1144 +                                            public nsWrapperCache
  1.1145 +{
  1.1146 +public:
  1.1147 +  NS_DECL_ISUPPORTS
  1.1148 +
  1.1149 +  // We need a GetParentObject to make binding codegen happy
  1.1150 +  virtual nsISupports* GetParentObject();
  1.1151 +
  1.1152 +  bool Continue();
  1.1153 +  bool Delete();
  1.1154 +  int32_t Volatile();
  1.1155 +};
  1.1156 +
  1.1157 +class TestIndexedDeleterInterface : public nsISupports,
  1.1158 +                                    public nsWrapperCache
  1.1159 +{
  1.1160 +public:
  1.1161 +  NS_DECL_ISUPPORTS
  1.1162 +
  1.1163 +  // We need a GetParentObject to make binding codegen happy
  1.1164 +  virtual nsISupports* GetParentObject();
  1.1165 +
  1.1166 +  void IndexedDeleter(uint32_t, bool&);
  1.1167 +  void IndexedDeleter(uint32_t) MOZ_DELETE;
  1.1168 +  long IndexedGetter(uint32_t, bool&);
  1.1169 +  uint32_t Length();
  1.1170 +  void DelItem(uint32_t);
  1.1171 +  void DelItem(uint32_t, bool&) MOZ_DELETE;
  1.1172 +};
  1.1173 +
  1.1174 +class TestIndexedDeleterWithRetvalInterface : public nsISupports,
  1.1175 +                                              public nsWrapperCache
  1.1176 +{
  1.1177 +public:
  1.1178 +  NS_DECL_ISUPPORTS
  1.1179 +
  1.1180 +  // We need a GetParentObject to make binding codegen happy
  1.1181 +  virtual nsISupports* GetParentObject();
  1.1182 +
  1.1183 +  bool IndexedDeleter(uint32_t, bool&);
  1.1184 +  bool IndexedDeleter(uint32_t) MOZ_DELETE;
  1.1185 +  long IndexedGetter(uint32_t, bool&);
  1.1186 +  uint32_t Length();
  1.1187 +  bool DelItem(uint32_t);
  1.1188 +  bool DelItem(uint32_t, bool&) MOZ_DELETE;
  1.1189 +};
  1.1190 +
  1.1191 +class TestNamedDeleterInterface : public nsISupports,
  1.1192 +                                  public nsWrapperCache
  1.1193 +{
  1.1194 +public:
  1.1195 +  NS_DECL_ISUPPORTS
  1.1196 +
  1.1197 +  // We need a GetParentObject to make binding codegen happy
  1.1198 +  virtual nsISupports* GetParentObject();
  1.1199 +
  1.1200 +  void NamedDeleter(const nsAString&, bool&);
  1.1201 +  long NamedGetter(const nsAString&, bool&);
  1.1202 +  bool NameIsEnumerable(const nsAString&);
  1.1203 +  void GetSupportedNames(unsigned, nsTArray<nsString>&);
  1.1204 +};
  1.1205 +
  1.1206 +class TestNamedDeleterWithRetvalInterface : public nsISupports,
  1.1207 +                                            public nsWrapperCache
  1.1208 +{
  1.1209 +public:
  1.1210 +  NS_DECL_ISUPPORTS
  1.1211 +
  1.1212 +  // We need a GetParentObject to make binding codegen happy
  1.1213 +  virtual nsISupports* GetParentObject();
  1.1214 +
  1.1215 +  bool NamedDeleter(const nsAString&, bool&);
  1.1216 +  bool NamedDeleter(const nsAString&) MOZ_DELETE;
  1.1217 +  long NamedGetter(const nsAString&, bool&);
  1.1218 +  bool NameIsEnumerable(const nsAString&);
  1.1219 +  bool DelNamedItem(const nsAString&);
  1.1220 +  bool DelNamedItem(const nsAString&, bool&) MOZ_DELETE;
  1.1221 +  void GetSupportedNames(unsigned, nsTArray<nsString>&);
  1.1222 +};
  1.1223 +
  1.1224 +class TestIndexedAndNamedDeleterInterface : public nsISupports,
  1.1225 +                                            public nsWrapperCache
  1.1226 +{
  1.1227 +public:
  1.1228 +  NS_DECL_ISUPPORTS
  1.1229 +
  1.1230 +  // We need a GetParentObject to make binding codegen happy
  1.1231 +  virtual nsISupports* GetParentObject();
  1.1232 +
  1.1233 +  void IndexedDeleter(uint32_t, bool&);
  1.1234 +  long IndexedGetter(uint32_t, bool&);
  1.1235 +  uint32_t Length();
  1.1236 +
  1.1237 +  void NamedDeleter(const nsAString&, bool&);
  1.1238 +  void NamedDeleter(const nsAString&) MOZ_DELETE;
  1.1239 +  long NamedGetter(const nsAString&, bool&);
  1.1240 +  bool NameIsEnumerable(const nsAString&);
  1.1241 +  void DelNamedItem(const nsAString&);
  1.1242 +  void DelNamedItem(const nsAString&, bool&) MOZ_DELETE;
  1.1243 +  void GetSupportedNames(unsigned, nsTArray<nsString>&);
  1.1244 +};
  1.1245 +
  1.1246 +class TestParentInterface : public nsISupports,
  1.1247 +                            public nsWrapperCache
  1.1248 +{
  1.1249 +public:
  1.1250 +  NS_DECL_ISUPPORTS
  1.1251 +
  1.1252 +  // We need a GetParentObject to make binding codegen happy
  1.1253 +  virtual nsISupports* GetParentObject();
  1.1254 +};
  1.1255 +
  1.1256 +class TestChildInterface : public TestParentInterface
  1.1257 +{
  1.1258 +};
  1.1259 +
  1.1260 +} // namespace dom
  1.1261 +} // namespace mozilla
  1.1262 +
  1.1263 +#endif /* TestBindingHeader_h */

mercurial