summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMoonchild <moonchild@palemoon.org>2020-06-08 18:12:08 +0000
committerMoonchild <moonchild@palemoon.org>2020-06-08 18:12:08 +0000
commitb0901eb0990191e1f063bfa13cb11701571612fd (patch)
treea2bf352e4f2cb73fc2000636ea8c2aec0130e82a
parente8bdf27ac712ffca8fd680100f3c7d4b33241e49 (diff)
downloaduxp-b0901eb0990191e1f063bfa13cb11701571612fd.tar.gz
Issue #439 - Remove, fix and clean up automated tests
With the big amount of code churn around DOM a lot of tests broke severely enough that they caused build bustage. This commit cleans up, removes or otherwise fixes tests that are broken, no longer relevant or obsolete.
-rw-r--r--dom/base/test/chrome/chrome.ini2
-rw-r--r--dom/base/test/mochitest.ini2
-rw-r--r--dom/bindings/moz.build29
-rw-r--r--dom/bindings/test/Makefile.in21
-rw-r--r--dom/bindings/test/TestBindingHeader.h1464
-rw-r--r--dom/bindings/test/TestCImplementedInterface.h43
-rw-r--r--dom/bindings/test/TestCodeGen.webidl1281
-rw-r--r--dom/bindings/test/TestDictionary.webidl9
-rw-r--r--dom/bindings/test/TestExampleGen.webidl815
-rw-r--r--dom/bindings/test/TestFunctions.cpp94
-rw-r--r--dom/bindings/test/TestFunctions.h52
-rw-r--r--dom/bindings/test/TestInterfaceIterableDouble.cpp82
-rw-r--r--dom/bindings/test/TestInterfaceIterableDouble.h51
-rw-r--r--dom/bindings/test/TestInterfaceIterableDoubleUnion.cpp83
-rw-r--r--dom/bindings/test/TestInterfaceIterableDoubleUnion.h51
-rw-r--r--dom/bindings/test/TestInterfaceIterableSingle.cpp77
-rw-r--r--dom/bindings/test/TestInterfaceIterableSingle.h51
-rw-r--r--dom/bindings/test/TestInterfaceJS.js166
-rw-r--r--dom/bindings/test/TestInterfaceJS.manifest4
-rw-r--r--dom/bindings/test/TestInterfaceJSMaplike.js38
-rw-r--r--dom/bindings/test/TestInterfaceMaplike.cpp84
-rw-r--r--dom/bindings/test/TestInterfaceMaplike.h52
-rw-r--r--dom/bindings/test/TestInterfaceMaplikeObject.cpp88
-rw-r--r--dom/bindings/test/TestInterfaceMaplikeObject.h52
-rw-r--r--dom/bindings/test/TestInterfaceSetlike.cpp58
-rw-r--r--dom/bindings/test/TestInterfaceSetlike.h46
-rw-r--r--dom/bindings/test/TestInterfaceSetlikeNode.cpp58
-rw-r--r--dom/bindings/test/TestInterfaceSetlikeNode.h46
-rw-r--r--dom/bindings/test/TestJSImplGen.webidl840
-rw-r--r--dom/bindings/test/TestJSImplInheritanceGen.webidl29
-rw-r--r--dom/bindings/test/TestTypedef.webidl7
-rw-r--r--dom/bindings/test/chrome.ini22
-rw-r--r--dom/bindings/test/file_InstanceOf.html12
-rw-r--r--dom/bindings/test/file_bug775543.html5
-rw-r--r--dom/bindings/test/file_document_location_set_via_xray.html5
-rw-r--r--dom/bindings/test/file_dom_xrays.html24
-rw-r--r--dom/bindings/test/file_focuser.html24
-rw-r--r--dom/bindings/test/file_fullScreenPropertyAccessor.html24
-rw-r--r--dom/bindings/test/file_proxies_via_xray.html8
-rw-r--r--dom/bindings/test/forOf_iframe.html13
-rw-r--r--dom/bindings/test/mochitest.ini79
-rw-r--r--dom/bindings/test/moz.build58
-rw-r--r--dom/bindings/test/test_ByteString.html32
-rw-r--r--dom/bindings/test/test_InstanceOf.html54
-rw-r--r--dom/bindings/test/test_Object.prototype_props.html20
-rw-r--r--dom/bindings/test/test_async_stacks.html108
-rw-r--r--dom/bindings/test/test_barewordGetsWindow.html60
-rw-r--r--dom/bindings/test/test_blacklisted_prerendering_function.xul124
-rw-r--r--dom/bindings/test/test_bug1036214.html123
-rw-r--r--dom/bindings/test/test_bug1041646.html49
-rw-r--r--dom/bindings/test/test_bug1123516_maplikesetlike.html271
-rw-r--r--dom/bindings/test/test_bug1123516_maplikesetlikechrome.xul68
-rw-r--r--dom/bindings/test/test_bug1123875.html14
-rw-r--r--dom/bindings/test/test_bug1287912.html37
-rw-r--r--dom/bindings/test/test_bug560072.html34
-rw-r--r--dom/bindings/test/test_bug742191.html36
-rw-r--r--dom/bindings/test/test_bug759621.html29
-rw-r--r--dom/bindings/test/test_bug773326.html11
-rw-r--r--dom/bindings/test/test_bug775543.html37
-rw-r--r--dom/bindings/test/test_bug788369.html30
-rw-r--r--dom/bindings/test/test_bug852846.html34
-rw-r--r--dom/bindings/test/test_bug862092.html37
-rw-r--r--dom/bindings/test/test_bug963382.html43
-rw-r--r--dom/bindings/test/test_callback_across_document_open.html21
-rw-r--r--dom/bindings/test/test_callback_default_thisval.html36
-rw-r--r--dom/bindings/test/test_callback_exceptions.html17
-rw-r--r--dom/bindings/test/test_cloneAndImportNode.html48
-rw-r--r--dom/bindings/test/test_crossOriginWindowSymbolAccess.html23
-rw-r--r--dom/bindings/test/test_defineProperty.html157
-rw-r--r--dom/bindings/test/test_document_location_set_via_xray.html49
-rw-r--r--dom/bindings/test/test_document_location_via_xray_cached.html36
-rw-r--r--dom/bindings/test/test_domProxyArrayLengthGetter.html28
-rw-r--r--dom/bindings/test/test_dom_xrays.html231
-rw-r--r--dom/bindings/test/test_enums.html15
-rw-r--r--dom/bindings/test/test_exceptionSanitization.html45
-rw-r--r--dom/bindings/test/test_exceptionThrowing.html56
-rw-r--r--dom/bindings/test/test_exception_messages.html82
-rw-r--r--dom/bindings/test/test_exception_options_from_jsimplemented.html166
-rw-r--r--dom/bindings/test/test_exceptions_from_jsimplemented.html56
-rw-r--r--dom/bindings/test/test_forOf.html86
-rw-r--r--dom/bindings/test/test_integers.html50
-rw-r--r--dom/bindings/test/test_interfaceName.html28
-rw-r--r--dom/bindings/test/test_interfaceToString.html47
-rw-r--r--dom/bindings/test/test_iterable.html241
-rw-r--r--dom/bindings/test/test_jsimplemented_eventhandler.html47
-rw-r--r--dom/bindings/test/test_kill_longrunning_prerendered_content.xul85
-rw-r--r--dom/bindings/test/test_lenientThis.html27
-rw-r--r--dom/bindings/test/test_lookupGetter.html49
-rw-r--r--dom/bindings/test/test_namedNoIndexed.html36
-rw-r--r--dom/bindings/test/test_named_getter_enumerability.html40
-rw-r--r--dom/bindings/test/test_oom_reporting.html42
-rw-r--r--dom/bindings/test/test_primitive_this.html45
-rw-r--r--dom/bindings/test/test_promise_rejections_from_jsimplemented.html143
-rw-r--r--dom/bindings/test/test_proxies_via_xray.html99
-rw-r--r--dom/bindings/test/test_queryInterface.html41
-rw-r--r--dom/bindings/test/test_returnUnion.html59
-rw-r--r--dom/bindings/test/test_sequence_detection.html53
-rw-r--r--dom/bindings/test/test_sequence_wrapping.html59
-rw-r--r--dom/bindings/test/test_setWithNamedGetterNoNamedSetter.html40
-rw-r--r--dom/bindings/test/test_stringBindings.html59
-rw-r--r--dom/bindings/test/test_throwing_method_noDCE.html27
-rw-r--r--dom/bindings/test/test_traceProtos.html37
-rw-r--r--dom/bindings/test/test_treat_non_object_as_null.html39
-rw-r--r--dom/bindings/test/test_unforgeablesonexpando.html18
-rw-r--r--dom/bindings/test/test_usvstring.html41
-rw-r--r--dom/bindings/test/test_worker_UnwrapArg.html58
-rw-r--r--dom/media/gtest/moz.build5
-rw-r--r--dom/media/webaudio/gtest/TestAudioEventTimeline.cpp11
-rw-r--r--dom/plugins/test/mochitest/mochitest.ini1
-rw-r--r--dom/tests/mochitest/webcomponents/mochitest.ini5
-rw-r--r--image/moz.build2
-rw-r--r--image/test/gtest/Common.cpp673
-rw-r--r--image/test/gtest/Common.h419
-rw-r--r--image/test/gtest/TestADAM7InterpolatingFilter.cpp671
-rw-r--r--image/test/gtest/TestCopyOnWrite.cpp235
-rw-r--r--image/test/gtest/TestDecodeToSurface.cpp123
-rw-r--r--image/test/gtest/TestDecoders.cpp669
-rw-r--r--image/test/gtest/TestDeinterlacingFilter.cpp672
-rw-r--r--image/test/gtest/TestDownscalingFilter.cpp231
-rw-r--r--image/test/gtest/TestDownscalingFilterNoSkia.cpp57
-rw-r--r--image/test/gtest/TestLoader.cpp84
-rw-r--r--image/test/gtest/TestMetadata.cpp255
-rw-r--r--image/test/gtest/TestRemoveFrameRectFilter.cpp327
-rw-r--r--image/test/gtest/TestSourceBuffer.cpp810
-rw-r--r--image/test/gtest/TestStreamingLexer.cpp973
-rw-r--r--image/test/gtest/TestSurfacePipeIntegration.cpp508
-rw-r--r--image/test/gtest/TestSurfaceSink.cpp1491
-rw-r--r--image/test/gtest/animated-with-extra-image-sub-blocks.gifbin434 -> 0 bytes
-rw-r--r--image/test/gtest/corrupt-with-bad-bmp-height.icobin41663 -> 0 bytes
-rw-r--r--image/test/gtest/corrupt-with-bad-bmp-width.icobin41663 -> 0 bytes
-rw-r--r--image/test/gtest/corrupt.jpgbin2477 -> 0 bytes
-rw-r--r--image/test/gtest/downscaled.bmpbin30138 -> 0 bytes
-rw-r--r--image/test/gtest/downscaled.gifbin223 -> 0 bytes
-rw-r--r--image/test/gtest/downscaled.icobin41662 -> 0 bytes
-rw-r--r--image/test/gtest/downscaled.iconbin40003 -> 0 bytes
-rw-r--r--image/test/gtest/downscaled.jpgbin6035 -> 0 bytes
-rw-r--r--image/test/gtest/downscaled.pngbin1015 -> 0 bytes
-rw-r--r--image/test/gtest/first-frame-green.gifbin317 -> 0 bytes
-rw-r--r--image/test/gtest/first-frame-green.pngbin364 -> 0 bytes
-rw-r--r--image/test/gtest/first-frame-padding.gifbin49 -> 0 bytes
-rw-r--r--image/test/gtest/green-1x1-truncated.gifbin53 -> 0 bytes
-rw-r--r--image/test/gtest/green.bmpbin30138 -> 0 bytes
-rw-r--r--image/test/gtest/green.gifbin156 -> 0 bytes
-rw-r--r--image/test/gtest/green.icobin41662 -> 0 bytes
-rw-r--r--image/test/gtest/green.iconbin40002 -> 0 bytes
-rw-r--r--image/test/gtest/green.jpgbin361 -> 0 bytes
-rw-r--r--image/test/gtest/green.pngbin255 -> 0 bytes
-rw-r--r--image/test/gtest/invalid-truncated-metadata.bmpbin54 -> 0 bytes
-rw-r--r--image/test/gtest/moz.build79
-rw-r--r--image/test/gtest/no-frame-delay.gifbin317 -> 0 bytes
-rw-r--r--image/test/gtest/rle4.bmpbin3686 -> 0 bytes
-rw-r--r--image/test/gtest/rle8.bmpbin1288 -> 0 bytes
-rw-r--r--image/test/gtest/transparent-ico-with-and-mask.icobin3262 -> 0 bytes
-rw-r--r--image/test/gtest/transparent-if-within-ico.bmpbin4234 -> 0 bytes
-rw-r--r--image/test/gtest/transparent.gifbin355 -> 0 bytes
-rw-r--r--image/test/gtest/transparent.pngbin419 -> 0 bytes
-rw-r--r--security/manager/ssl/tests/unit/moz.build1
-rw-r--r--toolkit/mozapps/update/updater/moz.build2
-rw-r--r--toolkit/mozapps/update/updater/updater-xpcshell/Makefile.in41
-rw-r--r--toolkit/mozapps/update/updater/updater-xpcshell/moz.build14
160 files changed, 0 insertions, 18321 deletions
diff --git a/dom/base/test/chrome/chrome.ini b/dom/base/test/chrome/chrome.ini
index c6ee423918..64b1c8454b 100644
--- a/dom/base/test/chrome/chrome.ini
+++ b/dom/base/test/chrome/chrome.ini
@@ -62,8 +62,6 @@ support-files = ../file_bug357450.js
[test_bug1139964.xul]
[test_bug1209621.xul]
[test_cpows.xul]
-[test_custom_element_content.xul]
-[test_custom_element_ep.xul]
[test_domparsing.xul]
[test_fileconstructor.xul]
[test_fileconstructor_tempfile.xul]
diff --git a/dom/base/test/mochitest.ini b/dom/base/test/mochitest.ini
index 928727f81d..8183dab8be 100644
--- a/dom/base/test/mochitest.ini
+++ b/dom/base/test/mochitest.ini
@@ -630,7 +630,6 @@ skip-if = toolkit == 'android' #bug 904183
[test_document.all_unqualified.html]
[test_document_constructor.html]
[test_document_importNode_document.html]
-[test_custom_element.html]
[test_domcursor.html]
[test_domparser_null_char.html]
[test_domparsing.html]
@@ -698,7 +697,6 @@ skip-if = (os != 'android') # meta-viewport tag support is mobile-only
skip-if = toolkit == 'android' #TIMED_OUT
[test_mozMatchesSelector.html]
[test_mutationobserver_anonymous.html]
-[test_mutationobservers.html]
[test_named_frames.html]
[test_navigator_hardwareConcurrency.html]
[test_navigator_language.html]
diff --git a/dom/bindings/moz.build b/dom/bindings/moz.build
index 649689c41c..fae0fd15a9 100644
--- a/dom/bindings/moz.build
+++ b/dom/bindings/moz.build
@@ -4,8 +4,6 @@
# 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/.
-TEST_DIRS += ['test']
-
XPIDL_SOURCES += [
'nsIScriptError.idl'
]
@@ -107,33 +105,6 @@ SOURCES += [
'StructuredClone.cpp',
]
-# Tests for maplike and setlike require bindings to be built, which means they
-# must be included in libxul. This breaks the "no test classes are exported"
-# rule stated in the test/ directory, but it's the only way this will work.
-# Test classes are only built in debug mode, and all tests requiring use of
-# them are only run in debug mode.
-if CONFIG['MOZ_DEBUG']:
- EXPORTS.mozilla.dom += [
- "test/TestFunctions.h",
- "test/TestInterfaceIterableDouble.h",
- "test/TestInterfaceIterableDoubleUnion.h",
- "test/TestInterfaceIterableSingle.h",
- "test/TestInterfaceMaplike.h",
- "test/TestInterfaceMaplikeObject.h",
- "test/TestInterfaceSetlike.h",
- "test/TestInterfaceSetlikeNode.h"
- ]
- UNIFIED_SOURCES += [
- "test/TestFunctions.cpp",
- "test/TestInterfaceIterableDouble.cpp",
- "test/TestInterfaceIterableDoubleUnion.cpp",
- "test/TestInterfaceIterableSingle.cpp",
- "test/TestInterfaceMaplike.cpp",
- "test/TestInterfaceMaplikeObject.cpp",
- "test/TestInterfaceSetlike.cpp",
- "test/TestInterfaceSetlikeNode.cpp",
- ]
-
include('/ipc/chromium/chromium-config.mozbuild')
if CONFIG['MOZ_AUDIO_CHANNEL_MANAGER']:
diff --git a/dom/bindings/test/Makefile.in b/dom/bindings/test/Makefile.in
deleted file mode 100644
index 844a51c270..0000000000
--- a/dom/bindings/test/Makefile.in
+++ /dev/null
@@ -1,21 +0,0 @@
-# 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/.
-
-ifdef COMPILE_ENVIRONMENT
-
-include ../webidlsrcs.mk
-
-# $(test_sources) comes from webidlsrcs.mk.
-# TODO Update this variable in backend.mk.
-CPPSRCS += $(addprefix ../,$(test_sources))
-
-# Include rules.mk before any of our targets so our first target is coming from
-# rules.mk and running make with no target in this dir does the right thing.
-include $(topsrcdir)/config/rules.mk
-
-endif
-
-check::
- PYTHONDONTWRITEBYTECODE=1 $(PYTHON) $(topsrcdir)/config/pythonpath.py \
- $(PLY_INCLUDE) $(srcdir)/../parser/runtests.py
diff --git a/dom/bindings/test/TestBindingHeader.h b/dom/bindings/test/TestBindingHeader.h
deleted file mode 100644
index 4e2e10e43e..0000000000
--- a/dom/bindings/test/TestBindingHeader.h
+++ /dev/null
@@ -1,1464 +0,0 @@
-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim: set ts=8 sts=2 et sw=2 tw=80: */
-/* 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/.
- */
-
-#ifndef TestBindingHeader_h
-#define TestBindingHeader_h
-
-#include "mozilla/dom/BindingUtils.h"
-#include "mozilla/dom/Date.h"
-#include "mozilla/dom/MozMap.h"
-#include "mozilla/dom/TypedArray.h"
-#include "mozilla/ErrorResult.h"
-#include "nsCOMPtr.h"
-#include "nsGenericHTMLElement.h"
-#include "nsWrapperCache.h"
-
-// Forward declare this before we include TestCodeGenBinding.h, because that header relies on including
-// this one for it, for ParentDict. Hopefully it won't begin to rely on it in more fundamental ways.
-namespace mozilla {
-namespace dom {
-class DocGroup;
-class TestExternalInterface;
-class Promise;
-} // namespace dom
-} // namespace mozilla
-
-// We don't export TestCodeGenBinding.h, but it's right in our parent dir.
-#include "../TestCodeGenBinding.h"
-
-extern bool TestFuncControlledMember(JSContext*, JSObject*);
-
-namespace mozilla {
-namespace dom {
-
-// IID for nsRenamedInterface
-#define NS_RENAMED_INTERFACE_IID \
-{ 0xd4b19ef3, 0xe68b, 0x4e3f, \
- { 0x94, 0xbc, 0xc9, 0xde, 0x3a, 0x69, 0xb0, 0xe8 } }
-
-class nsRenamedInterface : public nsISupports,
- public nsWrapperCache
-{
-public:
- NS_DECLARE_STATIC_IID_ACCESSOR(NS_RENAMED_INTERFACE_IID)
- NS_DECL_ISUPPORTS
-
- // We need a GetParentObject and GetDocGroup to make binding codegen happy
- virtual nsISupports* GetParentObject();
- DocGroup* GetDocGroup() const;
-};
-
-NS_DEFINE_STATIC_IID_ACCESSOR(nsRenamedInterface, NS_RENAMED_INTERFACE_IID)
-
-// IID for the IndirectlyImplementedInterface
-#define NS_INDIRECTLY_IMPLEMENTED_INTERFACE_IID \
-{ 0xfed55b69, 0x7012, 0x4849, \
- { 0xaf, 0x56, 0x4b, 0xa9, 0xee, 0x41, 0x30, 0x89 } }
-
-class IndirectlyImplementedInterface : public nsISupports,
- public nsWrapperCache
-{
-public:
- NS_DECLARE_STATIC_IID_ACCESSOR(NS_INDIRECTLY_IMPLEMENTED_INTERFACE_IID)
- NS_DECL_ISUPPORTS
-
- // We need a GetParentObject and GetDocGroup to make binding codegen happy
- virtual nsISupports* GetParentObject();
- DocGroup* GetDocGroup() const;
-
- bool IndirectlyImplementedProperty();
- void IndirectlyImplementedProperty(bool);
- void IndirectlyImplementedMethod();
-};
-
-NS_DEFINE_STATIC_IID_ACCESSOR(IndirectlyImplementedInterface, NS_INDIRECTLY_IMPLEMENTED_INTERFACE_IID)
-
-// IID for the TestExternalInterface
-#define NS_TEST_EXTERNAL_INTERFACE_IID \
-{ 0xd5ba0c99, 0x9b1d, 0x4e71, \
- { 0x8a, 0x94, 0x56, 0x38, 0x6c, 0xa3, 0xda, 0x3d } }
-class TestExternalInterface : public nsISupports
-{
-public:
- NS_DECLARE_STATIC_IID_ACCESSOR(NS_TEST_EXTERNAL_INTERFACE_IID)
- NS_DECL_ISUPPORTS
-};
-
-NS_DEFINE_STATIC_IID_ACCESSOR(TestExternalInterface, NS_TEST_EXTERNAL_INTERFACE_IID)
-
-class TestNonWrapperCacheInterface : public nsISupports
-{
-public:
- NS_DECL_ISUPPORTS
-
- bool WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto, JS::MutableHandle<JSObject*> aReflector);
-};
-
-class OnlyForUseInConstructor : public nsISupports,
- public nsWrapperCache
-{
-public:
- NS_DECL_ISUPPORTS
- // We need a GetParentObject to make binding codegen happy
- virtual nsISupports* GetParentObject();
-};
-
-class TestInterface : public nsISupports,
- public nsWrapperCache
-{
-public:
- NS_DECL_ISUPPORTS
-
- // We need a GetParentObject to make binding codegen happy
- virtual nsISupports* GetParentObject();
-
- // And now our actual WebIDL API
- // Constructors
- static
- already_AddRefed<TestInterface>
- Constructor(const GlobalObject&, ErrorResult&);
- static
- already_AddRefed<TestInterface>
- Constructor(const GlobalObject&, const nsAString&, ErrorResult&);
- static
- already_AddRefed<TestInterface>
- Constructor(const GlobalObject&, uint32_t, const Nullable<bool>&,
- ErrorResult&);
- static
- already_AddRefed<TestInterface>
- Constructor(const GlobalObject&, TestInterface*, ErrorResult&);
- static
- already_AddRefed<TestInterface>
- Constructor(const GlobalObject&, uint32_t, IndirectlyImplementedInterface&, ErrorResult&);
-
- static
- already_AddRefed<TestInterface>
- Constructor(const GlobalObject&, Date&, ErrorResult&);
- static
- already_AddRefed<TestInterface>
- Constructor(const GlobalObject&, const ArrayBuffer&, ErrorResult&);
- static
- already_AddRefed<TestInterface>
- Constructor(const GlobalObject&, const Uint8Array&, ErrorResult&);
- /* static
- already_AddRefed<TestInterface>
- Constructor(const GlobalObject&, uint32_t, uint32_t,
- const TestInterfaceOrOnlyForUseInConstructor&, ErrorResult&);
- */
-
- static
- already_AddRefed<TestInterface> Test(const GlobalObject&, ErrorResult&);
- static
- already_AddRefed<TestInterface> Test(const GlobalObject&, const nsAString&,
- ErrorResult&);
- static
- already_AddRefed<TestInterface> Test(const GlobalObject&, const nsACString&,
- ErrorResult&);
-
- static
- already_AddRefed<TestInterface> Test2(const GlobalObject&,
- const DictForConstructor&,
- JS::Handle<JS::Value>,
- JS::Handle<JSObject*>,
- JS::Handle<JSObject*>,
- const Sequence<Dict>&,
- JS::Handle<JS::Value>,
- const Optional<JS::Handle<JSObject*> >&,
- const Optional<JS::Handle<JSObject*> >&,
- ErrorResult&);
-
- static
- already_AddRefed<TestInterface> Test3(const GlobalObject&,
- const LongOrAnyMozMap&,
- ErrorResult&);
-
- // Integer types
- int8_t ReadonlyByte();
- int8_t WritableByte();
- void SetWritableByte(int8_t);
- void PassByte(int8_t);
- int8_t ReceiveByte();
- void PassOptionalByte(const Optional<int8_t>&);
- void PassOptionalByteBeforeRequired(const Optional<int8_t>&, int8_t);
- void PassOptionalByteWithDefault(int8_t);
- void PassOptionalByteWithDefaultBeforeRequired(int8_t, int8_t);
- void PassNullableByte(const Nullable<int8_t>&);
- void PassOptionalNullableByte(const Optional< Nullable<int8_t> >&);
- void PassVariadicByte(const Sequence<int8_t>&);
- int8_t CachedByte();
- int8_t CachedConstantByte();
- int8_t CachedWritableByte();
- void SetCachedWritableByte(int8_t);
- int8_t SideEffectFreeByte();
- int8_t SetSideEffectFreeByte(int8_t);
- int8_t DomDependentByte();
- int8_t SetDomDependentByte(int8_t);
- int8_t ConstantByte();
- int8_t DeviceStateDependentByte();
- int8_t ReturnByteSideEffectFree();
- int8_t ReturnDOMDependentByte();
- int8_t ReturnConstantByte();
- int8_t ReturnDeviceStateDependentByte();
-
- void UnsafePrerenderMethod();
- int32_t UnsafePrerenderWritable();
- void SetUnsafePrerenderWritable(int32_t);
- int32_t UnsafePrerenderReadonly();
- int16_t ReadonlyShort();
- int16_t WritableShort();
- void SetWritableShort(int16_t);
- void PassShort(int16_t);
- int16_t ReceiveShort();
- void PassOptionalShort(const Optional<int16_t>&);
- void PassOptionalShortWithDefault(int16_t);
-
- int32_t ReadonlyLong();
- int32_t WritableLong();
- void SetWritableLong(int32_t);
- void PassLong(int32_t);
- int16_t ReceiveLong();
- void PassOptionalLong(const Optional<int32_t>&);
- void PassOptionalLongWithDefault(int32_t);
-
- int64_t ReadonlyLongLong();
- int64_t WritableLongLong();
- void SetWritableLongLong(int64_t);
- void PassLongLong(int64_t);
- int64_t ReceiveLongLong();
- void PassOptionalLongLong(const Optional<int64_t>&);
- void PassOptionalLongLongWithDefault(int64_t);
-
- uint8_t ReadonlyOctet();
- uint8_t WritableOctet();
- void SetWritableOctet(uint8_t);
- void PassOctet(uint8_t);
- uint8_t ReceiveOctet();
- void PassOptionalOctet(const Optional<uint8_t>&);
- void PassOptionalOctetWithDefault(uint8_t);
-
- uint16_t ReadonlyUnsignedShort();
- uint16_t WritableUnsignedShort();
- void SetWritableUnsignedShort(uint16_t);
- void PassUnsignedShort(uint16_t);
- uint16_t ReceiveUnsignedShort();
- void PassOptionalUnsignedShort(const Optional<uint16_t>&);
- void PassOptionalUnsignedShortWithDefault(uint16_t);
-
- uint32_t ReadonlyUnsignedLong();
- uint32_t WritableUnsignedLong();
- void SetWritableUnsignedLong(uint32_t);
- void PassUnsignedLong(uint32_t);
- uint32_t ReceiveUnsignedLong();
- void PassOptionalUnsignedLong(const Optional<uint32_t>&);
- void PassOptionalUnsignedLongWithDefault(uint32_t);
-
- uint64_t ReadonlyUnsignedLongLong();
- uint64_t WritableUnsignedLongLong();
- void SetWritableUnsignedLongLong(uint64_t);
- void PassUnsignedLongLong(uint64_t);
- uint64_t ReceiveUnsignedLongLong();
- void PassOptionalUnsignedLongLong(const Optional<uint64_t>&);
- void PassOptionalUnsignedLongLongWithDefault(uint64_t);
-
- float WritableFloat() const;
- void SetWritableFloat(float);
- float WritableUnrestrictedFloat() const;
- void SetWritableUnrestrictedFloat(float);
- Nullable<float> GetWritableNullableFloat() const;
- void SetWritableNullableFloat(Nullable<float>);
- Nullable<float> GetWritableNullableUnrestrictedFloat() const;
- void SetWritableNullableUnrestrictedFloat(Nullable<float>);
- double WritableDouble() const;
- void SetWritableDouble(double);
- double WritableUnrestrictedDouble() const;
- void SetWritableUnrestrictedDouble(double);
- Nullable<double> GetWritableNullableDouble() const;
- void SetWritableNullableDouble(Nullable<double>);
- Nullable<double> GetWritableNullableUnrestrictedDouble() const;
- void SetWritableNullableUnrestrictedDouble(Nullable<double>);
- void PassFloat(float, float, Nullable<float>, Nullable<float>,
- double, double, Nullable<double>, Nullable<double>,
- const Sequence<float>&, const Sequence<float>&,
- const Sequence<Nullable<float> >&,
- const Sequence<Nullable<float> >&,
- const Sequence<double>&, const Sequence<double>&,
- const Sequence<Nullable<double> >&,
- const Sequence<Nullable<double> >&);
- void PassLenientFloat(float, float, Nullable<float>, Nullable<float>,
- double, double, Nullable<double>, Nullable<double>,
- const Sequence<float>&, const Sequence<float>&,
- const Sequence<Nullable<float> >&,
- const Sequence<Nullable<float> >&,
- const Sequence<double>&, const Sequence<double>&,
- const Sequence<Nullable<double> >&,
- const Sequence<Nullable<double> >&);
- float LenientFloatAttr() const;
- void SetLenientFloatAttr(float);
- double LenientDoubleAttr() const;
- void SetLenientDoubleAttr(double);
-
- void PassUnrestricted(float arg1,
- float arg2,
- float arg3,
- float arg4,
- double arg5,
- double arg6,
- double arg7,
- double arg8);
-
- // Interface types
- already_AddRefed<TestInterface> ReceiveSelf();
- already_AddRefed<TestInterface> ReceiveNullableSelf();
- TestInterface* ReceiveWeakSelf();
- TestInterface* ReceiveWeakNullableSelf();
- void PassSelf(TestInterface&);
- void PassNullableSelf(TestInterface*);
- already_AddRefed<TestInterface> NonNullSelf();
- void SetNonNullSelf(TestInterface&);
- already_AddRefed<TestInterface> GetNullableSelf();
- already_AddRefed<TestInterface> CachedSelf();
- void SetNullableSelf(TestInterface*);
- void PassOptionalSelf(const Optional<TestInterface*> &);
- void PassOptionalNonNullSelf(const Optional<NonNull<TestInterface> >&);
- void PassOptionalSelfWithDefault(TestInterface*);
-
- already_AddRefed<TestNonWrapperCacheInterface> ReceiveNonWrapperCacheInterface();
- already_AddRefed<TestNonWrapperCacheInterface> ReceiveNullableNonWrapperCacheInterface();
- void ReceiveNonWrapperCacheInterfaceSequence(nsTArray<RefPtr<TestNonWrapperCacheInterface> >&);
- void ReceiveNullableNonWrapperCacheInterfaceSequence(nsTArray<RefPtr<TestNonWrapperCacheInterface> >&);
- void ReceiveNonWrapperCacheInterfaceNullableSequence(Nullable<nsTArray<RefPtr<TestNonWrapperCacheInterface> > >&);
- void ReceiveNullableNonWrapperCacheInterfaceNullableSequence(Nullable<nsTArray<RefPtr<TestNonWrapperCacheInterface> > >&);
-
- already_AddRefed<IndirectlyImplementedInterface> ReceiveOther();
- already_AddRefed<IndirectlyImplementedInterface> ReceiveNullableOther();
- IndirectlyImplementedInterface* ReceiveWeakOther();
- IndirectlyImplementedInterface* ReceiveWeakNullableOther();
- void PassOther(IndirectlyImplementedInterface&);
- void PassNullableOther(IndirectlyImplementedInterface*);
- already_AddRefed<IndirectlyImplementedInterface> NonNullOther();
- void SetNonNullOther(IndirectlyImplementedInterface&);
- already_AddRefed<IndirectlyImplementedInterface> GetNullableOther();
- void SetNullableOther(IndirectlyImplementedInterface*);
- void PassOptionalOther(const Optional<IndirectlyImplementedInterface*>&);
- void PassOptionalNonNullOther(const Optional<NonNull<IndirectlyImplementedInterface> >&);
- void PassOptionalOtherWithDefault(IndirectlyImplementedInterface*);
-
- already_AddRefed<TestExternalInterface> ReceiveExternal();
- already_AddRefed<TestExternalInterface> ReceiveNullableExternal();
- TestExternalInterface* ReceiveWeakExternal();
- TestExternalInterface* ReceiveWeakNullableExternal();
- void PassExternal(TestExternalInterface*);
- void PassNullableExternal(TestExternalInterface*);
- already_AddRefed<TestExternalInterface> NonNullExternal();
- void SetNonNullExternal(TestExternalInterface*);
- already_AddRefed<TestExternalInterface> GetNullableExternal();
- void SetNullableExternal(TestExternalInterface*);
- void PassOptionalExternal(const Optional<TestExternalInterface*>&);
- void PassOptionalNonNullExternal(const Optional<TestExternalInterface*>&);
- void PassOptionalExternalWithDefault(TestExternalInterface*);
-
- already_AddRefed<TestCallbackInterface> ReceiveCallbackInterface();
- already_AddRefed<TestCallbackInterface> ReceiveNullableCallbackInterface();
- TestCallbackInterface* ReceiveWeakCallbackInterface();
- TestCallbackInterface* ReceiveWeakNullableCallbackInterface();
- void PassCallbackInterface(TestCallbackInterface&);
- void PassNullableCallbackInterface(TestCallbackInterface*);
- already_AddRefed<TestCallbackInterface> NonNullCallbackInterface();
- void SetNonNullCallbackInterface(TestCallbackInterface&);
- already_AddRefed<TestCallbackInterface> GetNullableCallbackInterface();
- void SetNullableCallbackInterface(TestCallbackInterface*);
- void PassOptionalCallbackInterface(const Optional<RefPtr<TestCallbackInterface> >&);
- void PassOptionalNonNullCallbackInterface(const Optional<OwningNonNull<TestCallbackInterface> >&);
- void PassOptionalCallbackInterfaceWithDefault(TestCallbackInterface*);
-
- already_AddRefed<IndirectlyImplementedInterface> ReceiveConsequentialInterface();
- void PassConsequentialInterface(IndirectlyImplementedInterface&);
-
- // Sequence types
- void GetReadonlySequence(nsTArray<int32_t>&);
- void GetReadonlySequenceOfDictionaries(JSContext*, nsTArray<Dict>&);
- void GetReadonlyNullableSequenceOfDictionaries(JSContext*, Nullable<nsTArray<Dict> >&);
- void GetReadonlyFrozenSequence(JSContext*, nsTArray<Dict>&);
- void GetReadonlyFrozenNullableSequence(JSContext*, Nullable<nsTArray<Dict>>&);
- void ReceiveSequence(nsTArray<int32_t>&);
- void ReceiveNullableSequence(Nullable< nsTArray<int32_t> >&);
- void ReceiveSequenceOfNullableInts(nsTArray< Nullable<int32_t> >&);
- void ReceiveNullableSequenceOfNullableInts(Nullable< nsTArray< Nullable<int32_t> > >&);
- void PassSequence(const Sequence<int32_t> &);
- void PassNullableSequence(const Nullable< Sequence<int32_t> >&);
- void PassSequenceOfNullableInts(const Sequence<Nullable<int32_t> >&);
- void PassOptionalSequenceOfNullableInts(const Optional<Sequence<Nullable<int32_t> > > &);
- void PassOptionalNullableSequenceOfNullableInts(const Optional<Nullable<Sequence<Nullable<int32_t> > > > &);
- void ReceiveCastableObjectSequence(nsTArray< RefPtr<TestInterface> > &);
- void ReceiveCallbackObjectSequence(nsTArray< RefPtr<TestCallbackInterface> > &);
- void ReceiveNullableCastableObjectSequence(nsTArray< RefPtr<TestInterface> > &);
- void ReceiveNullableCallbackObjectSequence(nsTArray< RefPtr<TestCallbackInterface> > &);
- void ReceiveCastableObjectNullableSequence(Nullable< nsTArray< RefPtr<TestInterface> > >&);
- void ReceiveNullableCastableObjectNullableSequence(Nullable< nsTArray< RefPtr<TestInterface> > >&);
- void ReceiveWeakCastableObjectSequence(nsTArray<RefPtr<TestInterface>> &);
- void ReceiveWeakNullableCastableObjectSequence(nsTArray<RefPtr<TestInterface>> &);
- void ReceiveWeakCastableObjectNullableSequence(Nullable< nsTArray<RefPtr<TestInterface>> >&);
- void ReceiveWeakNullableCastableObjectNullableSequence(Nullable< nsTArray<RefPtr<TestInterface>> >&);
- void PassCastableObjectSequence(const Sequence< OwningNonNull<TestInterface> >&);
- void PassNullableCastableObjectSequence(const Sequence< RefPtr<TestInterface> > &);
- void PassCastableObjectNullableSequence(const Nullable< Sequence< OwningNonNull<TestInterface> > >&);
- void PassNullableCastableObjectNullableSequence(const Nullable< Sequence< RefPtr<TestInterface> > >&);
- void PassOptionalSequence(const Optional<Sequence<int32_t> >&);
- void PassOptionalSequenceWithDefaultValue(const Sequence<int32_t> &);
- void PassOptionalNullableSequence(const Optional<Nullable<Sequence<int32_t> > >&);
- void PassOptionalNullableSequenceWithDefaultValue(const Nullable< Sequence<int32_t> >&);
- void PassOptionalNullableSequenceWithDefaultValue2(const Nullable< Sequence<int32_t> >&);
- void PassOptionalObjectSequence(const Optional<Sequence<OwningNonNull<TestInterface> > >&);
- void PassExternalInterfaceSequence(const Sequence<RefPtr<TestExternalInterface> >&);
- void PassNullableExternalInterfaceSequence(const Sequence<RefPtr<TestExternalInterface> >&);
-
- void ReceiveStringSequence(nsTArray<nsString>&);
- void PassStringSequence(const Sequence<nsString>&);
-
- void ReceiveByteStringSequence(nsTArray<nsCString>&);
- void PassByteStringSequence(const Sequence<nsCString>&);
-
- void ReceiveAnySequence(JSContext*, nsTArray<JS::Value>&);
- void ReceiveNullableAnySequence(JSContext*, Nullable<nsTArray<JS::Value> >&);
- void ReceiveAnySequenceSequence(JSContext*, nsTArray<nsTArray<JS::Value> >&);
-
- void ReceiveObjectSequence(JSContext*, nsTArray<JSObject*>&);
- void ReceiveNullableObjectSequence(JSContext*, nsTArray<JSObject*>&);
-
- void PassSequenceOfSequences(const Sequence< Sequence<int32_t> >&);
- void PassSequenceOfSequencesOfSequences(const Sequence<Sequence<Sequence<int32_t>>>&);
- void ReceiveSequenceOfSequences(nsTArray< nsTArray<int32_t> >&);
- void ReceiveSequenceOfSequencesOfSequences(nsTArray<nsTArray<nsTArray<int32_t>>>&);
-
- // MozMap types
- void PassMozMap(const MozMap<int32_t> &);
- void PassNullableMozMap(const Nullable< MozMap<int32_t> >&);
- void PassMozMapOfNullableInts(const MozMap<Nullable<int32_t> >&);
- void PassOptionalMozMapOfNullableInts(const Optional<MozMap<Nullable<int32_t> > > &);
- void PassOptionalNullableMozMapOfNullableInts(const Optional<Nullable<MozMap<Nullable<int32_t> > > > &);
- void PassCastableObjectMozMap(const MozMap< OwningNonNull<TestInterface> >&);
- void PassNullableCastableObjectMozMap(const MozMap< RefPtr<TestInterface> > &);
- void PassCastableObjectNullableMozMap(const Nullable< MozMap< OwningNonNull<TestInterface> > >&);
- void PassNullableCastableObjectNullableMozMap(const Nullable< MozMap< RefPtr<TestInterface> > >&);
- void PassOptionalMozMap(const Optional<MozMap<int32_t> >&);
- void PassOptionalNullableMozMap(const Optional<Nullable<MozMap<int32_t> > >&);
- void PassOptionalNullableMozMapWithDefaultValue(const Nullable< MozMap<int32_t> >&);
- void PassOptionalObjectMozMap(const Optional<MozMap<OwningNonNull<TestInterface> > >&);
- void PassExternalInterfaceMozMap(const MozMap<RefPtr<TestExternalInterface> >&);
- void PassNullableExternalInterfaceMozMap(const MozMap<RefPtr<TestExternalInterface> >&);
- void PassStringMozMap(const MozMap<nsString>&);
- void PassByteStringMozMap(const MozMap<nsCString>&);
- void PassMozMapOfMozMaps(const MozMap< MozMap<int32_t> >&);
- void ReceiveMozMap(MozMap<int32_t>&);
- void ReceiveNullableMozMap(Nullable<MozMap<int32_t>>&);
- void ReceiveMozMapOfNullableInts(MozMap<Nullable<int32_t>>&);
- void ReceiveNullableMozMapOfNullableInts(Nullable<MozMap<Nullable<int32_t>>>&);
- void ReceiveMozMapOfMozMaps(MozMap<MozMap<int32_t>>&);
- void ReceiveAnyMozMap(JSContext*, MozMap<JS::Value>&);
-
- // Typed array types
- void PassArrayBuffer(const ArrayBuffer&);
- void PassNullableArrayBuffer(const Nullable<ArrayBuffer>&);
- void PassOptionalArrayBuffer(const Optional<ArrayBuffer>&);
- void PassOptionalNullableArrayBuffer(const Optional<Nullable<ArrayBuffer> >&);
- void PassOptionalNullableArrayBufferWithDefaultValue(const Nullable<ArrayBuffer>&);
- void PassArrayBufferView(const ArrayBufferView&);
- void PassInt8Array(const Int8Array&);
- void PassInt16Array(const Int16Array&);
- void PassInt32Array(const Int32Array&);
- void PassUint8Array(const Uint8Array&);
- void PassUint16Array(const Uint16Array&);
- void PassUint32Array(const Uint32Array&);
- void PassUint8ClampedArray(const Uint8ClampedArray&);
- void PassFloat32Array(const Float32Array&);
- void PassFloat64Array(const Float64Array&);
- void PassSequenceOfArrayBuffers(const Sequence<ArrayBuffer>&);
- void PassSequenceOfNullableArrayBuffers(const Sequence<Nullable<ArrayBuffer> >&);
- void PassMozMapOfArrayBuffers(const MozMap<ArrayBuffer>&);
- void PassMozMapOfNullableArrayBuffers(const MozMap<Nullable<ArrayBuffer> >&);
- void PassVariadicTypedArray(const Sequence<Float32Array>&);
- void PassVariadicNullableTypedArray(const Sequence<Nullable<Float32Array> >&);
- void ReceiveUint8Array(JSContext*, JS::MutableHandle<JSObject*>);
- void SetUint8ArrayAttr(const Uint8Array&);
- void GetUint8ArrayAttr(JSContext*, JS::MutableHandle<JSObject*>);
-
- // DOMString types
- void PassString(const nsAString&);
- void PassNullableString(const nsAString&);
- void PassOptionalString(const Optional<nsAString>&);
- void PassOptionalStringWithDefaultValue(const nsAString&);
- void PassOptionalNullableString(const Optional<nsAString>&);
- void PassOptionalNullableStringWithDefaultValue(const nsAString&);
- void PassVariadicString(const Sequence<nsString>&);
- void ReceiveString(DOMString&);
-
- // ByteString types
- void PassByteString(const nsCString&);
- void PassNullableByteString(const nsCString&);
- void PassOptionalByteString(const Optional<nsCString>&);
- void PassOptionalByteStringWithDefaultValue(const nsCString&);
- void PassOptionalNullableByteString(const Optional<nsCString>&);
- void PassOptionalNullableByteStringWithDefaultValue(const nsCString&);
- void PassVariadicByteString(const Sequence<nsCString>&);
- void PassOptionalUnionByteString(const Optional<ByteStringOrLong>&);
- void PassOptionalUnionByteStringWithDefaultValue(const ByteStringOrLong&);
-
- // USVString types
- void PassUSVS(const nsAString&);
- void PassNullableUSVS(const nsAString&);
- void PassOptionalUSVS(const Optional<nsAString>&);
- void PassOptionalUSVSWithDefaultValue(const nsAString&);
- void PassOptionalNullableUSVS(const Optional<nsAString>&);
- void PassOptionalNullableUSVSWithDefaultValue(const nsAString&);
- void PassVariadicUSVS(const Sequence<nsString>&);
- void ReceiveUSVS(DOMString&);
-
- // Enumerated types
- void PassEnum(TestEnum);
- void PassNullableEnum(const Nullable<TestEnum>&);
- void PassOptionalEnum(const Optional<TestEnum>&);
- void PassEnumWithDefault(TestEnum);
- void PassOptionalNullableEnum(const Optional<Nullable<TestEnum> >&);
- void PassOptionalNullableEnumWithDefaultValue(const Nullable<TestEnum>&);
- void PassOptionalNullableEnumWithDefaultValue2(const Nullable<TestEnum>&);
- TestEnum ReceiveEnum();
- Nullable<TestEnum> ReceiveNullableEnum();
- TestEnum EnumAttribute();
- TestEnum ReadonlyEnumAttribute();
- void SetEnumAttribute(TestEnum);
-
- // Callback types
- void PassCallback(TestCallback&);
- void PassNullableCallback(TestCallback*);
- void PassOptionalCallback(const Optional<OwningNonNull<TestCallback> >&);
- void PassOptionalNullableCallback(const Optional<RefPtr<TestCallback> >&);
- void PassOptionalNullableCallbackWithDefaultValue(TestCallback*);
- already_AddRefed<TestCallback> ReceiveCallback();
- already_AddRefed<TestCallback> ReceiveNullableCallback();
- void PassNullableTreatAsNullCallback(TestTreatAsNullCallback*);
- void PassOptionalNullableTreatAsNullCallback(const Optional<RefPtr<TestTreatAsNullCallback> >&);
- void PassOptionalNullableTreatAsNullCallbackWithDefaultValue(TestTreatAsNullCallback*);
- void SetTreatAsNullCallback(TestTreatAsNullCallback&);
- already_AddRefed<TestTreatAsNullCallback> TreatAsNullCallback();
- void SetNullableTreatAsNullCallback(TestTreatAsNullCallback*);
- already_AddRefed<TestTreatAsNullCallback> GetNullableTreatAsNullCallback();
-
- void ForceCallbackGeneration(TestIntegerReturn&,
- TestNullableIntegerReturn&,
- TestBooleanReturn&,
- TestFloatReturn&,
- TestStringReturn&,
- TestEnumReturn&,
- TestInterfaceReturn&,
- TestNullableInterfaceReturn&,
- TestExternalInterfaceReturn&,
- TestNullableExternalInterfaceReturn&,
- TestCallbackInterfaceReturn&,
- TestNullableCallbackInterfaceReturn&,
- TestCallbackReturn&,
- TestNullableCallbackReturn&,
- TestObjectReturn&,
- TestNullableObjectReturn&,
- TestTypedArrayReturn&,
- TestNullableTypedArrayReturn&,
- TestSequenceReturn&,
- TestNullableSequenceReturn&,
- TestIntegerArguments&,
- TestInterfaceArguments&,
- TestStringEnumArguments&,
- TestObjectArguments&,
- TestOptionalArguments&);
-
- // Any types
- void PassAny(JSContext*, JS::Handle<JS::Value>);
- void PassVariadicAny(JSContext*, const Sequence<JS::Value>&);
- void PassOptionalAny(JSContext*, JS::Handle<JS::Value>);
- void PassAnyDefaultNull(JSContext*, JS::Handle<JS::Value>);
- void PassSequenceOfAny(JSContext*, const Sequence<JS::Value>&);
- void PassNullableSequenceOfAny(JSContext*, const Nullable<Sequence<JS::Value> >&);
- void PassOptionalSequenceOfAny(JSContext*, const Optional<Sequence<JS::Value> >&);
- void PassOptionalNullableSequenceOfAny(JSContext*, const Optional<Nullable<Sequence<JS::Value> > >&);
- void PassOptionalSequenceOfAnyWithDefaultValue(JSContext*, const Nullable<Sequence<JS::Value> >&);
- void PassSequenceOfSequenceOfAny(JSContext*, const Sequence<Sequence<JS::Value> >&);
- void PassSequenceOfNullableSequenceOfAny(JSContext*, const Sequence<Nullable<Sequence<JS::Value> > >&);
- void PassNullableSequenceOfNullableSequenceOfAny(JSContext*, const Nullable<Sequence<Nullable<Sequence<JS::Value> > > >&);
- void PassOptionalNullableSequenceOfNullableSequenceOfAny(JSContext*, const Optional<Nullable<Sequence<Nullable<Sequence<JS::Value> > > > >&);
- void PassMozMapOfAny(JSContext*, const MozMap<JS::Value>&);
- void PassNullableMozMapOfAny(JSContext*, const Nullable<MozMap<JS::Value> >&);
- void PassOptionalMozMapOfAny(JSContext*, const Optional<MozMap<JS::Value> >&);
- void PassOptionalNullableMozMapOfAny(JSContext*, const Optional<Nullable<MozMap<JS::Value> > >&);
- void PassOptionalMozMapOfAnyWithDefaultValue(JSContext*, const Nullable<MozMap<JS::Value> >&);
- void PassMozMapOfMozMapOfAny(JSContext*, const MozMap<MozMap<JS::Value> >&);
- void PassMozMapOfNullableMozMapOfAny(JSContext*, const MozMap<Nullable<MozMap<JS::Value> > >&);
- void PassNullableMozMapOfNullableMozMapOfAny(JSContext*, const Nullable<MozMap<Nullable<MozMap<JS::Value> > > >&);
- void PassOptionalNullableMozMapOfNullableMozMapOfAny(JSContext*, const Optional<Nullable<MozMap<Nullable<MozMap<JS::Value>>>>>&);
- void PassOptionalNullableMozMapOfNullableSequenceOfAny(JSContext*, const Optional<Nullable<MozMap<Nullable<Sequence<JS::Value>>>>>&);
- void PassOptionalNullableSequenceOfNullableMozMapOfAny(JSContext*, const Optional<Nullable<Sequence<Nullable<MozMap<JS::Value>>>>>&);
- void ReceiveAny(JSContext*, JS::MutableHandle<JS::Value>);
-
- // object types
- void PassObject(JSContext*, JS::Handle<JSObject*>);
- void PassVariadicObject(JSContext*, const Sequence<JSObject*>&);
- void PassNullableObject(JSContext*, JS::Handle<JSObject*>);
- void PassVariadicNullableObject(JSContext*, const Sequence<JSObject*>&);
- void PassOptionalObject(JSContext*, const Optional<JS::Handle<JSObject*> >&);
- void PassOptionalNullableObject(JSContext*, const Optional<JS::Handle<JSObject*> >&);
- void PassOptionalNullableObjectWithDefaultValue(JSContext*, JS::Handle<JSObject*>);
- void PassSequenceOfObject(JSContext*, const Sequence<JSObject*>&);
- void PassSequenceOfNullableObject(JSContext*, const Sequence<JSObject*>&);
- void PassNullableSequenceOfObject(JSContext*, const Nullable<Sequence<JSObject*> >&);
- void PassOptionalNullableSequenceOfNullableSequenceOfObject(JSContext*, const Optional<Nullable<Sequence<Nullable<Sequence<JSObject*> > > > >&);
- void PassOptionalNullableSequenceOfNullableSequenceOfNullableObject(JSContext*, const Optional<Nullable<Sequence<Nullable<Sequence<JSObject*> > > > >&);
- void PassMozMapOfObject(JSContext*, const MozMap<JSObject*>&);
- void ReceiveObject(JSContext*, JS::MutableHandle<JSObject*>);
- void ReceiveNullableObject(JSContext*, JS::MutableHandle<JSObject*>);
-
- // Union types
- void PassUnion(JSContext*, const ObjectOrLong& arg);
- void PassUnionWithNullable(JSContext* cx, const ObjectOrNullOrLong& arg)
- {
- OwningObjectOrLong returnValue;
- if (arg.IsNull()) {
- } else if (arg.IsObject()) {
- JS::Rooted<JSObject*> obj(cx, arg.GetAsObject());
- JS_GetClass(obj);
- returnValue.SetAsObject() = obj;
- } else {
- int32_t i = arg.GetAsLong();
- i += 1;
- returnValue.SetAsLong() = i;
- }
- }
-#ifdef DEBUG
- void PassUnion2(const LongOrBoolean& arg);
- void PassUnion3(JSContext*, const ObjectOrLongOrBoolean& arg);
- void PassUnion4(const NodeOrLongOrBoolean& arg);
- void PassUnion5(JSContext*, const ObjectOrBoolean& arg);
- void PassUnion6(JSContext*, const ObjectOrString& arg);
- void PassUnion7(JSContext*, const ObjectOrStringOrLong& arg);
- void PassUnion8(JSContext*, const ObjectOrStringOrBoolean& arg);
- void PassUnion9(JSContext*, const ObjectOrStringOrLongOrBoolean& arg);
- void PassUnion10(const EventInitOrLong& arg);
- void PassUnion11(JSContext*, const CustomEventInitOrLong& arg);
- void PassUnion12(const EventInitOrLong& arg);
- void PassUnion13(JSContext*, const ObjectOrLongOrNull& arg);
- void PassUnion14(JSContext*, const ObjectOrLongOrNull& arg);
- void PassUnion15(const LongSequenceOrLong&);
- void PassUnion16(const Optional<LongSequenceOrLong>&);
- void PassUnion17(const LongSequenceOrNullOrLong&);
- void PassUnion18(JSContext*, const ObjectSequenceOrLong&);
- void PassUnion19(JSContext*, const Optional<ObjectSequenceOrLong>&);
- void PassUnion20(JSContext*, const ObjectSequenceOrLong&);
- void PassUnion21(const LongMozMapOrLong&);
- void PassUnion22(JSContext*, const ObjectMozMapOrLong&);
- void PassUnion23(const ImageDataSequenceOrLong&);
- void PassUnion24(const ImageDataOrNullSequenceOrLong&);
- void PassUnion25(const ImageDataSequenceSequenceOrLong&);
- void PassUnion26(const ImageDataOrNullSequenceSequenceOrLong&);
- void PassUnion27(const StringSequenceOrEventInit&);
- void PassUnion28(const EventInitOrStringSequence&);
- void PassUnionWithCallback(const EventHandlerNonNullOrNullOrLong& arg);
- void PassUnionWithByteString(const ByteStringOrLong&);
- void PassUnionWithMozMap(const StringMozMapOrString&);
- void PassUnionWithMozMapAndSequence(const StringMozMapOrStringSequence&);
- void PassUnionWithSequenceAndMozMap(const StringSequenceOrStringMozMap&);
- void PassUnionWithUSVS(const USVStringOrLong&);
-#endif
- void PassNullableUnion(JSContext*, const Nullable<ObjectOrLong>&);
- void PassOptionalUnion(JSContext*, const Optional<ObjectOrLong>&);
- void PassOptionalNullableUnion(JSContext*, const Optional<Nullable<ObjectOrLong> >&);
- void PassOptionalNullableUnionWithDefaultValue(JSContext*, const Nullable<ObjectOrLong>&);
- //void PassUnionWithInterfaces(const TestInterfaceOrTestExternalInterface& arg);
- //void PassUnionWithInterfacesAndNullable(const TestInterfaceOrNullOrTestExternalInterface& arg);
- void PassUnionWithArrayBuffer(const ArrayBufferOrLong&);
- void PassUnionWithString(JSContext*, const StringOrObject&);
- void PassUnionWithEnum(JSContext*, const SupportedTypeOrObject&);
- //void PassUnionWithCallback(JSContext*, const TestCallbackOrLong&);
- void PassUnionWithObject(JSContext*, const ObjectOrLong&);
-
- void PassUnionWithDefaultValue1(const DoubleOrString& arg);
- void PassUnionWithDefaultValue2(const DoubleOrString& arg);
- void PassUnionWithDefaultValue3(const DoubleOrString& arg);
- void PassUnionWithDefaultValue4(const FloatOrString& arg);
- void PassUnionWithDefaultValue5(const FloatOrString& arg);
- void PassUnionWithDefaultValue6(const FloatOrString& arg);
- void PassUnionWithDefaultValue7(const UnrestrictedDoubleOrString& arg);
- void PassUnionWithDefaultValue8(const UnrestrictedDoubleOrString& arg);
- void PassUnionWithDefaultValue9(const UnrestrictedDoubleOrString& arg);
- void PassUnionWithDefaultValue10(const UnrestrictedDoubleOrString& arg);
- void PassUnionWithDefaultValue11(const UnrestrictedFloatOrString& arg);
- void PassUnionWithDefaultValue12(const UnrestrictedFloatOrString& arg);
- void PassUnionWithDefaultValue13(const UnrestrictedFloatOrString& arg);
- void PassUnionWithDefaultValue14(const DoubleOrByteString& arg);
- void PassUnionWithDefaultValue15(const DoubleOrByteString& arg);
- void PassUnionWithDefaultValue16(const DoubleOrByteString& arg);
- void PassUnionWithDefaultValue17(const DoubleOrSupportedType& arg);
- void PassUnionWithDefaultValue18(const DoubleOrSupportedType& arg);
- void PassUnionWithDefaultValue19(const DoubleOrSupportedType& arg);
-
- void PassNullableUnionWithDefaultValue1(const Nullable<DoubleOrString>& arg);
- void PassNullableUnionWithDefaultValue2(const Nullable<DoubleOrString>& arg);
- void PassNullableUnionWithDefaultValue3(const Nullable<DoubleOrString>& arg);
- void PassNullableUnionWithDefaultValue4(const Nullable<FloatOrString>& arg);
- void PassNullableUnionWithDefaultValue5(const Nullable<FloatOrString>& arg);
- void PassNullableUnionWithDefaultValue6(const Nullable<FloatOrString>& arg);
- void PassNullableUnionWithDefaultValue7(const Nullable<UnrestrictedDoubleOrString>& arg);
- void PassNullableUnionWithDefaultValue8(const Nullable<UnrestrictedDoubleOrString>& arg);
- void PassNullableUnionWithDefaultValue9(const Nullable<UnrestrictedDoubleOrString>& arg);
- void PassNullableUnionWithDefaultValue10(const Nullable<UnrestrictedFloatOrString>& arg);
- void PassNullableUnionWithDefaultValue11(const Nullable<UnrestrictedFloatOrString>& arg);
- void PassNullableUnionWithDefaultValue12(const Nullable<UnrestrictedFloatOrString>& arg);
- void PassNullableUnionWithDefaultValue13(const Nullable<DoubleOrByteString>& arg);
- void PassNullableUnionWithDefaultValue14(const Nullable<DoubleOrByteString>& arg);
- void PassNullableUnionWithDefaultValue15(const Nullable<DoubleOrByteString>& arg);
- void PassNullableUnionWithDefaultValue16(const Nullable<DoubleOrByteString>& arg);
- void PassNullableUnionWithDefaultValue17(const Nullable<DoubleOrSupportedType>& arg);
- void PassNullableUnionWithDefaultValue18(const Nullable<DoubleOrSupportedType>& arg);
- void PassNullableUnionWithDefaultValue19(const Nullable<DoubleOrSupportedType>& arg);
- void PassNullableUnionWithDefaultValue20(const Nullable<DoubleOrSupportedType>& arg);
-
- void PassSequenceOfUnions(const Sequence<OwningCanvasPatternOrCanvasGradient>&);
- void PassSequenceOfUnions2(JSContext*, const Sequence<OwningObjectOrLong>&);
- void PassVariadicUnion(const Sequence<OwningCanvasPatternOrCanvasGradient>&);
-
- void PassSequenceOfNullableUnions(const Sequence<Nullable<OwningCanvasPatternOrCanvasGradient>>&);
- void PassVariadicNullableUnion(const Sequence<Nullable<OwningCanvasPatternOrCanvasGradient>>&);
- void PassMozMapOfUnions(const MozMap<OwningCanvasPatternOrCanvasGradient>&);
- void PassMozMapOfUnions2(JSContext*, const MozMap<OwningObjectOrLong>&);
-
- void ReceiveUnion(OwningCanvasPatternOrCanvasGradient&);
- void ReceiveUnion2(JSContext*, OwningObjectOrLong&);
- void ReceiveUnionContainingNull(OwningCanvasPatternOrNullOrCanvasGradient&);
- void ReceiveNullableUnion(Nullable<OwningCanvasPatternOrCanvasGradient>&);
- void ReceiveNullableUnion2(JSContext*, Nullable<OwningObjectOrLong>&);
- void GetWritableUnion(OwningCanvasPatternOrCanvasGradient&);
- void SetWritableUnion(const CanvasPatternOrCanvasGradient&);
- void GetWritableUnionContainingNull(OwningCanvasPatternOrNullOrCanvasGradient&);
- void SetWritableUnionContainingNull(const CanvasPatternOrNullOrCanvasGradient&);
- void GetWritableNullableUnion(Nullable<OwningCanvasPatternOrCanvasGradient>&);
- void SetWritableNullableUnion(const Nullable<CanvasPatternOrCanvasGradient>&);
-
- // Date types
- void PassDate(Date);
- void PassNullableDate(const Nullable<Date>&);
- void PassOptionalDate(const Optional<Date>&);
- void PassOptionalNullableDate(const Optional<Nullable<Date> >&);
- void PassOptionalNullableDateWithDefaultValue(const Nullable<Date>&);
- void PassDateSequence(const Sequence<Date>&);
- void PassDateMozMap(const MozMap<Date>&);
- void PassNullableDateSequence(const Sequence<Nullable<Date> >&);
- Date ReceiveDate();
- Nullable<Date> ReceiveNullableDate();
-
- // Promise types
- void PassPromise(Promise&);
- void PassNullablePromise(Promise*);
- void PassOptionalPromise(const Optional<OwningNonNull<Promise>>&);
- void PassOptionalNullablePromise(const Optional<RefPtr<Promise>>&);
- void PassOptionalNullablePromiseWithDefaultValue(Promise*);
- void PassPromiseSequence(const Sequence<OwningNonNull<Promise>>&);
- void PassPromiseMozMap(const MozMap<RefPtr<Promise>>&);
- void PassNullablePromiseSequence(const Sequence<RefPtr<Promise>> &);
- Promise* ReceivePromise();
- already_AddRefed<Promise> ReceiveAddrefedPromise();
-
- // binaryNames tests
- void MethodRenamedTo();
- void OtherMethodRenamedTo();
- void MethodRenamedTo(int8_t);
- int8_t AttributeGetterRenamedTo();
- int8_t AttributeRenamedTo();
- void SetAttributeRenamedTo(int8_t);
- int8_t OtherAttributeRenamedTo();
- void SetOtherAttributeRenamedTo(int8_t);
-
- // Dictionary tests
- void PassDictionary(JSContext*, const Dict&);
- void PassDictionary2(JSContext*, const Dict&);
- void GetReadonlyDictionary(JSContext*, Dict&);
- void GetReadonlyNullableDictionary(JSContext*, Nullable<Dict>&);
- void GetWritableDictionary(JSContext*, Dict&);
- void SetWritableDictionary(JSContext*, const Dict&);
- void GetReadonlyFrozenDictionary(JSContext*, Dict&);
- void GetReadonlyFrozenNullableDictionary(JSContext*, Nullable<Dict>&);
- void GetWritableFrozenDictionary(JSContext*, Dict&);
- void SetWritableFrozenDictionary(JSContext*, const Dict&);
- void ReceiveDictionary(JSContext*, Dict&);
- void ReceiveNullableDictionary(JSContext*, Nullable<Dict>&);
- void PassOtherDictionary(const GrandparentDict&);
- void PassSequenceOfDictionaries(JSContext*, const Sequence<Dict>&);
- void PassMozMapOfDictionaries(const MozMap<GrandparentDict>&);
- void PassDictionaryOrLong(JSContext*, const Dict&);
- void PassDictionaryOrLong(int32_t);
- void PassDictContainingDict(JSContext*, const DictContainingDict&);
- void PassDictContainingSequence(JSContext*, const DictContainingSequence&);
- void ReceiveDictContainingSequence(JSContext*, DictContainingSequence&);
- void PassVariadicDictionary(JSContext*, const Sequence<Dict>&);
-
- // Typedefs
- void ExerciseTypedefInterfaces1(TestInterface&);
- already_AddRefed<TestInterface> ExerciseTypedefInterfaces2(TestInterface*);
- void ExerciseTypedefInterfaces3(TestInterface&);
-
- // Deprecated methods and attributes
- int8_t DeprecatedAttribute();
- int8_t SetDeprecatedAttribute(int8_t);
- int8_t DeprecatedMethod();
- int8_t DeprecatedMethodWithContext(JSContext*, const JS::Value&);
-
- // Static methods and attributes
- static void StaticMethod(const GlobalObject&, bool);
- static void StaticMethodWithContext(const GlobalObject&, const JS::Value&);
- static bool StaticAttribute(const GlobalObject&);
- static void SetStaticAttribute(const GlobalObject&, bool);
- static void Assert(const GlobalObject&, bool);
-
- // Deprecated static methods and attributes
- static int8_t StaticDeprecatedAttribute(const GlobalObject&);
- static int8_t SetStaticDeprecatedAttribute(const GlobalObject&, int8_t);
- static int8_t StaticDeprecatedMethod(const GlobalObject&);
- static int8_t StaticDeprecatedMethodWithContext(const GlobalObject&, const JS::Value&);
-
- // Overload resolution tests
- bool Overload1(TestInterface&);
- TestInterface* Overload1(const nsAString&, TestInterface&);
- void Overload2(TestInterface&);
- void Overload2(JSContext*, const Dict&);
- void Overload2(bool);
- void Overload2(const nsAString&);
- void Overload2(Date);
- void Overload3(TestInterface&);
- void Overload3(const TestCallback&);
- void Overload3(bool);
- void Overload4(TestInterface&);
- void Overload4(TestCallbackInterface&);
- void Overload4(const nsAString&);
- void Overload5(int32_t);
- void Overload5(TestEnum);
- void Overload6(int32_t);
- void Overload6(bool);
- void Overload7(int32_t);
- void Overload7(bool);
- void Overload7(const nsCString&);
- void Overload8(int32_t);
- void Overload8(TestInterface&);
- void Overload9(const Nullable<int32_t>&);
- void Overload9(const nsAString&);
- void Overload10(const Nullable<int32_t>&);
- void Overload10(JSContext*, JS::Handle<JSObject*>);
- void Overload11(int32_t);
- void Overload11(const nsAString&);
- void Overload12(int32_t);
- void Overload12(const Nullable<bool>&);
- void Overload13(const Nullable<int32_t>&);
- void Overload13(bool);
- void Overload14(const Optional<int32_t>&);
- void Overload14(TestInterface&);
- void Overload15(int32_t);
- void Overload15(const Optional<NonNull<TestInterface> >&);
- void Overload16(int32_t);
- void Overload16(const Optional<TestInterface*>&);
- void Overload17(const Sequence<int32_t>&);
- void Overload17(const MozMap<int32_t>&);
- void Overload18(const MozMap<nsString>&);
- void Overload18(const Sequence<nsString>&);
- void Overload19(const Sequence<int32_t>&);
- void Overload19(JSContext*, const Dict&);
- void Overload20(JSContext*, const Dict&);
- void Overload20(const Sequence<int32_t>&);
-
- // Variadic handling
- void PassVariadicThirdArg(const nsAString&, int32_t,
- const Sequence<OwningNonNull<TestInterface> >&);
-
- // Conditionally exposed methods/attributes
- bool Prefable1();
- bool Prefable2();
- bool Prefable3();
- bool Prefable4();
- bool Prefable5();
- bool Prefable6();
- bool Prefable7();
- bool Prefable8();
- bool Prefable9();
- void Prefable10();
- void Prefable11();
- bool Prefable12();
- void Prefable13();
- bool Prefable14();
- bool Prefable15();
- bool Prefable16();
- void Prefable17();
- void Prefable18();
- void Prefable19();
- void Prefable20();
- void Prefable21();
- void Prefable22();
- void Prefable23();
- void Prefable24();
-
- // Conditionally exposed methods/attributes involving [SecureContext]
- bool ConditionalOnSecureContext1();
- bool ConditionalOnSecureContext2();
- bool ConditionalOnSecureContext3();
- bool ConditionalOnSecureContext4();
- void ConditionalOnSecureContext5();
- void ConditionalOnSecureContext6();
- void ConditionalOnSecureContext7();
- void ConditionalOnSecureContext8();
-
- // Miscellania
- int32_t AttrWithLenientThis();
- void SetAttrWithLenientThis(int32_t);
- uint32_t UnforgeableAttr();
- uint32_t UnforgeableAttr2();
- uint32_t UnforgeableMethod();
- uint32_t UnforgeableMethod2();
- void Stringify(nsString&);
- void PassRenamedInterface(nsRenamedInterface&);
- TestInterface* PutForwardsAttr();
- TestInterface* PutForwardsAttr2();
- TestInterface* PutForwardsAttr3();
- void GetJsonifierShouldSkipThis(JSContext*, JS::MutableHandle<JS::Value>);
- void SetJsonifierShouldSkipThis(JSContext*, JS::Rooted<JS::Value>&);
- TestParentInterface* JsonifierShouldSkipThis2();
- void SetJsonifierShouldSkipThis2(TestParentInterface&);
- TestCallbackInterface* JsonifierShouldSkipThis3();
- void SetJsonifierShouldSkipThis3(TestCallbackInterface&);
- void ThrowingMethod(ErrorResult& aRv);
- bool GetThrowingAttr(ErrorResult& aRv) const;
- void SetThrowingAttr(bool arg, ErrorResult& aRv);
- bool GetThrowingGetterAttr(ErrorResult& aRv) const;
- void SetThrowingGetterAttr(bool arg);
- bool ThrowingSetterAttr() const;
- void SetThrowingSetterAttr(bool arg, ErrorResult& aRv);
- void NeedsSubjectPrincipalMethod(nsIPrincipal&);
- bool NeedsSubjectPrincipalAttr(nsIPrincipal&);
- void SetNeedsSubjectPrincipalAttr(bool, nsIPrincipal&);
- void NeedsCallerTypeMethod(CallerType);
- bool NeedsCallerTypeAttr(CallerType);
- void SetNeedsCallerTypeAttr(bool, CallerType);
- void CeReactionsMethod();
- void CeReactionsMethodOverload();
- void CeReactionsMethodOverload(const nsAString&);
- bool CeReactionsAttr() const;
- void SetCeReactionsAttr(bool);
- int16_t LegacyCall(const JS::Value&, uint32_t, TestInterface&);
- void PassArgsWithDefaults(JSContext*, const Optional<int32_t>&,
- TestInterface*, const Dict&, double,
- const Optional<float>&);
-
- void SetDashed_attribute(int8_t);
- int8_t Dashed_attribute();
- void Dashed_method();
-
- // Methods and properties imported via "implements"
- bool ImplementedProperty();
- void SetImplementedProperty(bool);
- void ImplementedMethod();
- bool ImplementedParentProperty();
- void SetImplementedParentProperty(bool);
- void ImplementedParentMethod();
- bool IndirectlyImplementedProperty();
- void SetIndirectlyImplementedProperty(bool);
- void IndirectlyImplementedMethod();
- uint32_t DiamondImplementedProperty();
-
- // Test EnforceRange/Clamp
- void DontEnforceRangeOrClamp(int8_t);
- void DoEnforceRange(int8_t);
- void DoClamp(int8_t);
- void SetEnforcedByte(int8_t);
- int8_t EnforcedByte();
- void SetClampedByte(int8_t);
- int8_t ClampedByte();
-
-private:
- // We add signatures here that _could_ start matching if the codegen
- // got data types wrong. That way if it ever does we'll have a call
- // to these private deleted methods and compilation will fail.
- void SetReadonlyByte(int8_t) = delete;
- template<typename T>
- void SetWritableByte(T) = delete;
- template<typename T>
- void PassByte(T) = delete;
- void PassNullableByte(Nullable<int8_t>&) = delete;
- template<typename T>
- void PassOptionalByte(const Optional<T>&) = delete;
- template<typename T>
- void PassOptionalByteWithDefault(T) = delete;
- void PassVariadicByte(Sequence<int8_t>&) = delete;
-
- void SetReadonlyShort(int16_t) = delete;
- template<typename T>
- void SetWritableShort(T) = delete;
- template<typename T>
- void PassShort(T) = delete;
- template<typename T>
- void PassOptionalShort(const Optional<T>&) = delete;
- template<typename T>
- void PassOptionalShortWithDefault(T) = delete;
-
- void SetReadonlyLong(int32_t) = delete;
- template<typename T>
- void SetWritableLong(T) = delete;
- template<typename T>
- void PassLong(T) = delete;
- template<typename T>
- void PassOptionalLong(const Optional<T>&) = delete;
- template<typename T>
- void PassOptionalLongWithDefault(T) = delete;
-
- void SetReadonlyLongLong(int64_t) = delete;
- template<typename T>
- void SetWritableLongLong(T) = delete;
- template<typename T>
- void PassLongLong(T) = delete;
- template<typename T>
- void PassOptionalLongLong(const Optional<T>&) = delete;
- template<typename T>
- void PassOptionalLongLongWithDefault(T) = delete;
-
- void SetReadonlyOctet(uint8_t) = delete;
- template<typename T>
- void SetWritableOctet(T) = delete;
- template<typename T>
- void PassOctet(T) = delete;
- template<typename T>
- void PassOptionalOctet(const Optional<T>&) = delete;
- template<typename T>
- void PassOptionalOctetWithDefault(T) = delete;
-
- void SetReadonlyUnsignedShort(uint16_t) = delete;
- template<typename T>
- void SetWritableUnsignedShort(T) = delete;
- template<typename T>
- void PassUnsignedShort(T) = delete;
- template<typename T>
- void PassOptionalUnsignedShort(const Optional<T>&) = delete;
- template<typename T>
- void PassOptionalUnsignedShortWithDefault(T) = delete;
-
- void SetReadonlyUnsignedLong(uint32_t) = delete;
- template<typename T>
- void SetWritableUnsignedLong(T) = delete;
- template<typename T>
- void PassUnsignedLong(T) = delete;
- template<typename T>
- void PassOptionalUnsignedLong(const Optional<T>&) = delete;
- template<typename T>
- void PassOptionalUnsignedLongWithDefault(T) = delete;
-
- void SetReadonlyUnsignedLongLong(uint64_t) = delete;
- template<typename T>
- void SetWritableUnsignedLongLong(T) = delete;
- template<typename T>
- void PassUnsignedLongLong(T) = delete;
- template<typename T>
- void PassOptionalUnsignedLongLong(const Optional<T>&) = delete;
- template<typename T>
- void PassOptionalUnsignedLongLongWithDefault(T) = delete;
-
- // Enforce that only const things are passed for sequences
- void PassSequence(Sequence<int32_t> &) = delete;
- void PassNullableSequence(Nullable< Sequence<int32_t> >&) = delete;
- void PassOptionalNullableSequenceWithDefaultValue(Nullable< Sequence<int32_t> >&) = delete;
- void PassSequenceOfAny(JSContext*, Sequence<JS::Value>&) = delete;
- void PassNullableSequenceOfAny(JSContext*, Nullable<Sequence<JS::Value> >&) = delete;
- void PassOptionalSequenceOfAny(JSContext*, Optional<Sequence<JS::Value> >&) = delete;
- void PassOptionalNullableSequenceOfAny(JSContext*, Optional<Nullable<Sequence<JS::Value> > >&) = delete;
- void PassOptionalSequenceOfAnyWithDefaultValue(JSContext*, Nullable<Sequence<JS::Value> >&) = delete;
- void PassSequenceOfSequenceOfAny(JSContext*, Sequence<Sequence<JS::Value> >&) = delete;
- void PassSequenceOfNullableSequenceOfAny(JSContext*, Sequence<Nullable<Sequence<JS::Value> > >&) = delete;
- void PassNullableSequenceOfNullableSequenceOfAny(JSContext*, Nullable<Sequence<Nullable<Sequence<JS::Value> > > >&) = delete;
- void PassOptionalNullableSequenceOfNullableSequenceOfAny(JSContext*, Optional<Nullable<Sequence<Nullable<Sequence<JS::Value> > > > >&) = delete;
- void PassSequenceOfObject(JSContext*, Sequence<JSObject*>&) = delete;
- void PassSequenceOfNullableObject(JSContext*, Sequence<JSObject*>&) = delete;
- void PassOptionalNullableSequenceOfNullableSequenceOfObject(JSContext*, Optional<Nullable<Sequence<Nullable<Sequence<JSObject*> > > > >&) = delete;
- void PassOptionalNullableSequenceOfNullableSequenceOfNullableObject(JSContext*, Optional<Nullable<Sequence<Nullable<Sequence<JSObject*> > > > >&) = delete;
-
- // Enforce that only const things are passed for optional
- void PassOptionalByte(Optional<int8_t>&) = delete;
- void PassOptionalNullableByte(Optional<Nullable<int8_t> >&) = delete;
- void PassOptionalShort(Optional<int16_t>&) = delete;
- void PassOptionalLong(Optional<int32_t>&) = delete;
- void PassOptionalLongLong(Optional<int64_t>&) = delete;
- void PassOptionalOctet(Optional<uint8_t>&) = delete;
- void PassOptionalUnsignedShort(Optional<uint16_t>&) = delete;
- void PassOptionalUnsignedLong(Optional<uint32_t>&) = delete;
- void PassOptionalUnsignedLongLong(Optional<uint64_t>&) = delete;
- void PassOptionalSelf(Optional<TestInterface*> &) = delete;
- void PassOptionalNonNullSelf(Optional<NonNull<TestInterface> >&) = delete;
- void PassOptionalOther(Optional<IndirectlyImplementedInterface*>&);
- void PassOptionalNonNullOther(Optional<NonNull<IndirectlyImplementedInterface> >&);
- void PassOptionalExternal(Optional<TestExternalInterface*>&) = delete;
- void PassOptionalNonNullExternal(Optional<TestExternalInterface*>&) = delete;
- void PassOptionalSequence(Optional<Sequence<int32_t> >&) = delete;
- void PassOptionalNullableSequence(Optional<Nullable<Sequence<int32_t> > >&) = delete;
- void PassOptionalObjectSequence(Optional<Sequence<OwningNonNull<TestInterface> > >&) = delete;
- void PassOptionalArrayBuffer(Optional<ArrayBuffer>&) = delete;
- void PassOptionalNullableArrayBuffer(Optional<ArrayBuffer*>&) = delete;
- void PassOptionalEnum(Optional<TestEnum>&) = delete;
- void PassOptionalCallback(JSContext*, Optional<OwningNonNull<TestCallback> >&) = delete;
- void PassOptionalNullableCallback(JSContext*, Optional<RefPtr<TestCallback> >&) = delete;
- void PassOptionalAny(Optional<JS::Handle<JS::Value> >&) = delete;
-
- // And test that string stuff is always const
- void PassString(nsAString&) = delete;
- void PassNullableString(nsAString&) = delete;
- void PassOptionalString(Optional<nsAString>&) = delete;
- void PassOptionalStringWithDefaultValue(nsAString&) = delete;
- void PassOptionalNullableString(Optional<nsAString>&) = delete;
- void PassOptionalNullableStringWithDefaultValue(nsAString&) = delete;
- void PassVariadicString(Sequence<nsString>&) = delete;
-
- // cstrings should be const as well
- void PassByteString(nsCString&) = delete;
- void PassNullableByteString(nsCString&) = delete;
- void PassOptionalByteString(Optional<nsCString>&) = delete;
- void PassOptionalByteStringWithDefaultValue(nsCString&) = delete;
- void PassOptionalNullableByteString(Optional<nsCString>&) = delete;
- void PassOptionalNullableByteStringWithDefaultValue(nsCString&) = delete;
- void PassVariadicByteString(Sequence<nsCString>&) = delete;
-
- // Make sure dictionary arguments are always const
- void PassDictionary(JSContext*, Dict&) = delete;
- void PassOtherDictionary(GrandparentDict&) = delete;
- void PassSequenceOfDictionaries(JSContext*, Sequence<Dict>&) = delete;
- void PassDictionaryOrLong(JSContext*, Dict&) = delete;
- void PassDictContainingDict(JSContext*, DictContainingDict&) = delete;
- void PassDictContainingSequence(DictContainingSequence&) = delete;
-
- // Make sure various nullable things are always const
- void PassNullableEnum(Nullable<TestEnum>&) = delete;
-
- // Make sure unions are always const
- void PassUnion(JSContext*, ObjectOrLong& arg) = delete;
- void PassUnionWithNullable(JSContext*, ObjectOrNullOrLong& arg) = delete;
- void PassNullableUnion(JSContext*, Nullable<ObjectOrLong>&) = delete;
- void PassOptionalUnion(JSContext*, Optional<ObjectOrLong>&) = delete;
- void PassOptionalNullableUnion(JSContext*, Optional<Nullable<ObjectOrLong> >&) = delete;
- void PassOptionalNullableUnionWithDefaultValue(JSContext*, Nullable<ObjectOrLong>&) = delete;
-
- // Make sure various date stuff is const as needed
- void PassNullableDate(Nullable<Date>&) = delete;
- void PassOptionalDate(Optional<Date>&) = delete;
- void PassOptionalNullableDate(Optional<Nullable<Date> >&) = delete;
- void PassOptionalNullableDateWithDefaultValue(Nullable<Date>&) = delete;
- void PassDateSequence(Sequence<Date>&) = delete;
- void PassNullableDateSequence(Sequence<Nullable<Date> >&) = delete;
-
- // Make sure variadics are const as needed
- void PassVariadicAny(JSContext*, Sequence<JS::Value>&) = delete;
- void PassVariadicObject(JSContext*, Sequence<JSObject*>&) = delete;
- void PassVariadicNullableObject(JSContext*, Sequence<JSObject*>&) = delete;
-
- // Ensure NonNull does not leak in
- void PassSelf(NonNull<TestInterface>&) = delete;
- void PassSelf(OwningNonNull<TestInterface>&) = delete;
- void PassSelf(const NonNull<TestInterface>&) = delete;
- void PassSelf(const OwningNonNull<TestInterface>&) = delete;
- void PassOther(NonNull<IndirectlyImplementedInterface>&) = delete;
- void PassOther(const NonNull<IndirectlyImplementedInterface>&) = delete;
- void PassOther(OwningNonNull<IndirectlyImplementedInterface>&) = delete;
- void PassOther(const OwningNonNull<IndirectlyImplementedInterface>&) = delete;
- void PassCallbackInterface(OwningNonNull<TestCallbackInterface>&) = delete;
- void PassCallbackInterface(const OwningNonNull<TestCallbackInterface>&) = delete;
- void PassCallbackInterface(NonNull<TestCallbackInterface>&) = delete;
- void PassCallbackInterface(const NonNull<TestCallbackInterface>&) = delete;
- void PassCallback(OwningNonNull<TestCallback>&) = delete;
- void PassCallback(const OwningNonNull<TestCallback>&) = delete;
- void PassCallback(NonNull<TestCallback>&) = delete;
- void PassCallback(const NonNull<TestCallback>&) = delete;
- void PassString(const NonNull<nsAString>&) = delete;
- void PassString(NonNull<nsAString>&) = delete;
- void PassString(const OwningNonNull<nsAString>&) = delete;
- void PassString(OwningNonNull<nsAString>&) = delete;
-};
-
-class TestIndexedGetterInterface : public nsISupports,
- public nsWrapperCache
-{
-public:
- NS_DECL_ISUPPORTS
-
- // We need a GetParentObject to make binding codegen happy
- virtual nsISupports* GetParentObject();
-
- uint32_t IndexedGetter(uint32_t, bool&);
- uint32_t IndexedGetter(uint32_t&) = delete;
- uint32_t Item(uint32_t&);
- uint32_t Item(uint32_t, bool&) = delete;
- uint32_t Length();
- void LegacyCall(JS::Handle<JS::Value>);
-};
-
-class TestNamedGetterInterface : public nsISupports,
- public nsWrapperCache
-{
-public:
- NS_DECL_ISUPPORTS
-
- // We need a GetParentObject to make binding codegen happy
- virtual nsISupports* GetParentObject();
-
- void NamedGetter(const nsAString&, bool&, nsAString&);
- void GetSupportedNames(nsTArray<nsString>&);
-};
-
-class TestIndexedGetterAndSetterAndNamedGetterInterface : public nsISupports,
- public nsWrapperCache
-{
-public:
- NS_DECL_ISUPPORTS
-
- // We need a GetParentObject to make binding codegen happy
- virtual nsISupports* GetParentObject();
-
- void NamedGetter(const nsAString&, bool&, nsAString&);
- void GetSupportedNames(nsTArray<nsString>&);
- int32_t IndexedGetter(uint32_t, bool&);
- void IndexedSetter(uint32_t, int32_t);
- uint32_t Length();
-};
-
-class TestIndexedAndNamedGetterInterface : public nsISupports,
- public nsWrapperCache
-{
-public:
- NS_DECL_ISUPPORTS
-
- // We need a GetParentObject to make binding codegen happy
- virtual nsISupports* GetParentObject();
-
- uint32_t IndexedGetter(uint32_t, bool&);
- void NamedGetter(const nsAString&, bool&, nsAString&);
- void NamedItem(const nsAString&, nsAString&);
- uint32_t Length();
- void GetSupportedNames(nsTArray<nsString>&);
-};
-
-class TestIndexedSetterInterface : public nsISupports,
- public nsWrapperCache
-{
-public:
- NS_DECL_ISUPPORTS
-
- // We need a GetParentObject to make binding codegen happy
- virtual nsISupports* GetParentObject();
-
- void IndexedSetter(uint32_t, const nsAString&);
- void IndexedGetter(uint32_t, bool&, nsString&);
- uint32_t Length();
- void SetItem(uint32_t, const nsAString&);
-};
-
-class TestNamedSetterInterface : public nsISupports,
- public nsWrapperCache
-{
-public:
- NS_DECL_ISUPPORTS
-
- // We need a GetParentObject to make binding codegen happy
- virtual nsISupports* GetParentObject();
-
- void NamedSetter(const nsAString&, TestIndexedSetterInterface&);
- TestIndexedSetterInterface* NamedGetter(const nsAString&, bool&);
- void GetSupportedNames(nsTArray<nsString>&);
-};
-
-class TestIndexedAndNamedSetterInterface : public nsISupports,
- public nsWrapperCache
-{
-public:
- NS_DECL_ISUPPORTS
-
- // We need a GetParentObject to make binding codegen happy
- virtual nsISupports* GetParentObject();
-
- void IndexedSetter(uint32_t, TestIndexedSetterInterface&);
- TestIndexedSetterInterface* IndexedGetter(uint32_t, bool&);
- uint32_t Length();
- void NamedSetter(const nsAString&, TestIndexedSetterInterface&);
- TestIndexedSetterInterface* NamedGetter(const nsAString&, bool&);
- void SetNamedItem(const nsAString&, TestIndexedSetterInterface&);
- void GetSupportedNames(nsTArray<nsString>&);
-};
-
-class TestIndexedAndNamedGetterAndSetterInterface : public TestIndexedSetterInterface
-{
-public:
- uint32_t IndexedGetter(uint32_t, bool&);
- uint32_t Item(uint32_t);
- void NamedGetter(const nsAString&, bool&, nsAString&);
- void NamedItem(const nsAString&, nsAString&);
- void IndexedSetter(uint32_t, int32_t&);
- void IndexedSetter(uint32_t, const nsAString&) = delete;
- void NamedSetter(const nsAString&, const nsAString&);
- void Stringify(nsAString&);
- uint32_t Length();
- void GetSupportedNames(nsTArray<nsString>&);
-};
-
-class TestCppKeywordNamedMethodsInterface : public nsISupports,
- public nsWrapperCache
-{
-public:
- NS_DECL_ISUPPORTS
-
- // We need a GetParentObject to make binding codegen happy
- virtual nsISupports* GetParentObject();
-
- bool Continue();
- bool Delete();
- int32_t Volatile();
-};
-
-class TestNamedDeleterInterface : public nsISupports,
- public nsWrapperCache
-{
-public:
- NS_DECL_ISUPPORTS
-
- // We need a GetParentObject to make binding codegen happy
- virtual nsISupports* GetParentObject();
-
- void NamedDeleter(const nsAString&, bool&);
- long NamedGetter(const nsAString&, bool&);
- void GetSupportedNames(nsTArray<nsString>&);
-};
-
-class TestNamedDeleterWithRetvalInterface : public nsISupports,
- public nsWrapperCache
-{
-public:
- NS_DECL_ISUPPORTS
-
- // We need a GetParentObject to make binding codegen happy
- virtual nsISupports* GetParentObject();
-
- bool NamedDeleter(const nsAString&, bool&);
- bool NamedDeleter(const nsAString&) = delete;
- long NamedGetter(const nsAString&, bool&);
- bool DelNamedItem(const nsAString&);
- bool DelNamedItem(const nsAString&, bool&) = delete;
- void GetSupportedNames(nsTArray<nsString>&);
-};
-
-class TestParentInterface : public nsISupports,
- public nsWrapperCache
-{
-public:
- NS_DECL_ISUPPORTS
-
- // We need a GetParentObject to make binding codegen happy
- virtual nsISupports* GetParentObject();
-};
-
-class TestChildInterface : public TestParentInterface
-{
-};
-
-class TestDeprecatedInterface : public nsISupports, public nsWrapperCache
-{
-public:
- NS_DECL_ISUPPORTS
-
- static
- already_AddRefed<TestDeprecatedInterface>
- Constructor(const GlobalObject&, ErrorResult&);
-
- static void AlsoDeprecated(const GlobalObject&);
-
- virtual nsISupports* GetParentObject();
-};
-
-class TestInterfaceWithPromiseConstructorArg : public nsISupports, public nsWrapperCache
-{
-public:
- NS_DECL_ISUPPORTS
-
- static
- already_AddRefed<TestInterfaceWithPromiseConstructorArg>
- Constructor(const GlobalObject&, Promise&, ErrorResult&);
-
- virtual nsISupports* GetParentObject();
-};
-
-class TestSecureContextInterface : public nsISupports, public nsWrapperCache
-{
-public:
- NS_DECL_ISUPPORTS
-
- static
- already_AddRefed<TestSecureContextInterface>
- Constructor(const GlobalObject&, ErrorResult&);
-
- static void AlsoSecureContext(const GlobalObject&);
-
- virtual nsISupports* GetParentObject();
-};
-
-class TestNamespace {
-public:
- static bool Foo(const GlobalObject&);
- static int32_t Bar(const GlobalObject&);
- static void Baz(const GlobalObject&);
-};
-
-class TestRenamedNamespace {
-};
-
-class TestProtoObjectHackedNamespace {
-};
-
-class TestWorkerExposedInterface : public nsISupports,
- public nsWrapperCache
-{
-public:
- NS_DECL_ISUPPORTS
-
- // We need a GetParentObject to make binding codegen happy
- nsISupports* GetParentObject();
-
- void NeedsSubjectPrincipalMethod(Maybe<nsIPrincipal*>);
- bool NeedsSubjectPrincipalAttr(Maybe<nsIPrincipal*>);
- void SetNeedsSubjectPrincipalAttr(bool, Maybe<nsIPrincipal*>);
- void NeedsCallerTypeMethod(CallerType);
- bool NeedsCallerTypeAttr(CallerType);
- void SetNeedsCallerTypeAttr(bool, CallerType);
-};
-
-class TestHTMLConstructorInterface : public nsGenericHTMLElement
-{
-public:
- virtual nsISupports* GetParentObject();
-};
-
-class TestCEReactionsInterface : public nsISupports,
- public nsWrapperCache
-{
-public:
- NS_DECL_ISUPPORTS
-
- // We need a GetParentObject to make binding codegen happy
- virtual nsISupports* GetParentObject();
-
- int32_t Item(uint32_t);
- uint32_t Length() const;
- int32_t IndexedGetter(uint32_t, bool &);
- void IndexedSetter(uint32_t, int32_t);
- void NamedDeleter(const nsAString&, bool &);
- void NamedGetter(const nsAString&, bool &, nsString&);
- void NamedSetter(const nsAString&, const nsAString&);
- void GetSupportedNames(nsTArray<nsString>&);
-};
-
-} // namespace dom
-} // namespace mozilla
-
-#endif /* TestBindingHeader_h */
diff --git a/dom/bindings/test/TestCImplementedInterface.h b/dom/bindings/test/TestCImplementedInterface.h
deleted file mode 100644
index 64b5c9954a..0000000000
--- a/dom/bindings/test/TestCImplementedInterface.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim: set ts=8 sts=2 et sw=2 tw=80: */
-/* 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/.
- */
-
-#ifndef TestCImplementedInterface_h
-#define TestCImplementedInterface_h
-
-#include "../TestJSImplGenBinding.h"
-
-namespace mozilla {
-namespace dom {
-
-class TestCImplementedInterface : public TestJSImplInterface
-{
-public:
- TestCImplementedInterface(JS::Handle<JSObject*> aJSImpl,
- nsIGlobalObject* aParent)
- : TestJSImplInterface(aJSImpl, aParent)
- {}
-};
-
-class TestCImplementedInterface2 : public nsISupports,
- public nsWrapperCache
-{
-public:
- explicit TestCImplementedInterface2(nsIGlobalObject* aParent)
- {}
- NS_DECL_CYCLE_COLLECTING_ISUPPORTS
- NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(TestCImplementedInterface2)
-
- // We need a GetParentObject to make binding codegen happy
- nsISupports* GetParentObject();
-};
-
-
-
-} // namespace dom
-} // namespace mozilla
-
-#endif // TestCImplementedInterface_h
diff --git a/dom/bindings/test/TestCodeGen.webidl b/dom/bindings/test/TestCodeGen.webidl
deleted file mode 100644
index 3fce5e21b7..0000000000
--- a/dom/bindings/test/TestCodeGen.webidl
+++ /dev/null
@@ -1,1281 +0,0 @@
-/* -*- 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/.
- */
-
-typedef long myLong;
-typedef TestInterface AnotherNameForTestInterface;
-typedef TestInterface? NullableTestInterface;
-typedef CustomEventInit TestDictionaryTypedef;
-
-interface TestExternalInterface;
-
-[Pref="xyz"]
-interface TestRenamedInterface {
-};
-
-callback interface TestCallbackInterface {
- readonly attribute long foo;
- attribute DOMString bar;
- void doSomething();
- long doSomethingElse(DOMString arg, TestInterface otherArg);
- void doSequenceLongArg(sequence<long> arg);
- void doSequenceStringArg(sequence<DOMString> arg);
- void doMozMapLongArg(MozMap<long> arg);
- sequence<long> getSequenceOfLong();
- sequence<TestInterface> getSequenceOfInterfaces();
- sequence<TestInterface>? getNullableSequenceOfInterfaces();
- sequence<TestInterface?> getSequenceOfNullableInterfaces();
- sequence<TestInterface?>? getNullableSequenceOfNullableInterfaces();
- sequence<TestCallbackInterface> getSequenceOfCallbackInterfaces();
- sequence<TestCallbackInterface>? getNullableSequenceOfCallbackInterfaces();
- sequence<TestCallbackInterface?> getSequenceOfNullableCallbackInterfaces();
- sequence<TestCallbackInterface?>? getNullableSequenceOfNullableCallbackInterfaces();
- MozMap<long> getMozMapOfLong();
- Dict? getDictionary();
- void passArrayBuffer(ArrayBuffer arg);
- void passNullableArrayBuffer(ArrayBuffer? arg);
- void passOptionalArrayBuffer(optional ArrayBuffer arg);
- void passOptionalNullableArrayBuffer(optional ArrayBuffer? arg);
- void passOptionalNullableArrayBufferWithDefaultValue(optional ArrayBuffer? arg= null);
- void passArrayBufferView(ArrayBufferView arg);
- void passInt8Array(Int8Array arg);
- void passInt16Array(Int16Array arg);
- void passInt32Array(Int32Array arg);
- void passUint8Array(Uint8Array arg);
- void passUint16Array(Uint16Array arg);
- void passUint32Array(Uint32Array arg);
- void passUint8ClampedArray(Uint8ClampedArray arg);
- void passFloat32Array(Float32Array arg);
- void passFloat64Array(Float64Array arg);
- void passSequenceOfArrayBuffers(sequence<ArrayBuffer> arg);
- void passSequenceOfNullableArrayBuffers(sequence<ArrayBuffer?> arg);
- void passVariadicTypedArray(Float32Array... arg);
- void passVariadicNullableTypedArray(Float32Array?... arg);
- Uint8Array receiveUint8Array();
- attribute Uint8Array uint8ArrayAttr;
- Promise<void> receivePromise();
-};
-
-callback interface TestSingleOperationCallbackInterface {
- TestInterface doSomething(short arg, sequence<double> anotherArg);
-};
-
-enum TestEnum {
- "1",
- "a",
- "b"
-};
-
-callback TestCallback = void();
-[TreatNonCallableAsNull] callback TestTreatAsNullCallback = void();
-
-// Callback return value tests
-callback TestIntegerReturn = long();
-callback TestNullableIntegerReturn = long?();
-callback TestBooleanReturn = boolean();
-callback TestFloatReturn = float();
-callback TestStringReturn = DOMString(long arg);
-callback TestEnumReturn = TestEnum();
-callback TestInterfaceReturn = TestInterface();
-callback TestNullableInterfaceReturn = TestInterface?();
-callback TestExternalInterfaceReturn = TestExternalInterface();
-callback TestNullableExternalInterfaceReturn = TestExternalInterface?();
-callback TestCallbackInterfaceReturn = TestCallbackInterface();
-callback TestNullableCallbackInterfaceReturn = TestCallbackInterface?();
-callback TestCallbackReturn = TestCallback();
-callback TestNullableCallbackReturn = TestCallback?();
-callback TestObjectReturn = object();
-callback TestNullableObjectReturn = object?();
-callback TestTypedArrayReturn = ArrayBuffer();
-callback TestNullableTypedArrayReturn = ArrayBuffer?();
-callback TestSequenceReturn = sequence<boolean>();
-callback TestNullableSequenceReturn = sequence<boolean>?();
-// Callback argument tests
-callback TestIntegerArguments = sequence<long>(long arg1, long? arg2,
- sequence<long> arg3,
- sequence<long?>? arg4);
-callback TestInterfaceArguments = void(TestInterface arg1, TestInterface? arg2,
- TestExternalInterface arg3,
- TestExternalInterface? arg4,
- TestCallbackInterface arg5,
- TestCallbackInterface? arg6,
- sequence<TestInterface> arg7,
- sequence<TestInterface?>? arg8,
- sequence<TestExternalInterface> arg9,
- sequence<TestExternalInterface?>? arg10,
- sequence<TestCallbackInterface> arg11,
- sequence<TestCallbackInterface?>? arg12);
-callback TestStringEnumArguments = void(DOMString myString, DOMString? nullString,
- TestEnum myEnum);
-callback TestObjectArguments = void(object anObj, object? anotherObj,
- ArrayBuffer buf, ArrayBuffer? buf2);
-callback TestOptionalArguments = void(optional DOMString aString,
- optional object something,
- optional sequence<TestInterface> aSeq,
- optional TestInterface? anInterface,
- optional TestInterface anotherInterface,
- optional long aLong);
-// If you add a new test callback, add it to the forceCallbackGeneration
-// method on TestInterface so it actually gets tested.
-
-TestInterface implements ImplementedInterface;
-
-// This interface is only for use in the constructor below
-interface OnlyForUseInConstructor {
-};
-
-[Constructor,
- Constructor(DOMString str),
- Constructor(unsigned long num, boolean? boolArg),
- Constructor(TestInterface? iface),
- Constructor(long arg1, IndirectlyImplementedInterface iface),
- Constructor(Date arg1),
- Constructor(ArrayBuffer arrayBuf),
- Constructor(Uint8Array typedArr),
- // Constructor(long arg1, long arg2, (TestInterface or OnlyForUseInConstructor) arg3),
- NamedConstructor=Test,
- NamedConstructor=Test(DOMString str),
- NamedConstructor=Test2(DictForConstructor dict, any any1, object obj1,
- object? obj2, sequence<Dict> seq, optional any any2,
- optional object obj3, optional object? obj4),
- NamedConstructor=Test3((long or MozMap<any>) arg1)
- ]
-interface TestInterface {
- // Integer types
- // XXXbz add tests for throwing versions of all the integer stuff
- readonly attribute byte readonlyByte;
- attribute byte writableByte;
- void passByte(byte arg);
- byte receiveByte();
- void passOptionalByte(optional byte arg);
- void passOptionalByteBeforeRequired(optional byte arg1, byte arg2);
- void passOptionalByteWithDefault(optional byte arg = 0);
- void passOptionalByteWithDefaultBeforeRequired(optional byte arg1 = 0, byte arg2);
- void passNullableByte(byte? arg);
- void passOptionalNullableByte(optional byte? arg);
- void passVariadicByte(byte... arg);
- [StoreInSlot, Pure]
- readonly attribute byte cachedByte;
- [StoreInSlot, Constant]
- readonly attribute byte cachedConstantByte;
- [StoreInSlot, Pure]
- attribute byte cachedWritableByte;
- [Affects=Nothing]
- attribute byte sideEffectFreeByte;
- [Affects=Nothing, DependsOn=DOMState]
- attribute byte domDependentByte;
- [Affects=Nothing, DependsOn=Nothing]
- readonly attribute byte constantByte;
- [DependsOn=DeviceState, Affects=Nothing]
- readonly attribute byte deviceStateDependentByte;
- [Affects=Nothing]
- byte returnByteSideEffectFree();
- [Affects=Nothing, DependsOn=DOMState]
- byte returnDOMDependentByte();
- [Affects=Nothing, DependsOn=Nothing]
- byte returnConstantByte();
- [DependsOn=DeviceState, Affects=Nothing]
- byte returnDeviceStateDependentByte();
-
- [UnsafeInPrerendering]
- void unsafePrerenderMethod();
- [UnsafeInPrerendering]
- attribute long unsafePrerenderWritable;
- [UnsafeInPrerendering]
- readonly attribute long unsafePrerenderReadonly;
- readonly attribute short readonlyShort;
- attribute short writableShort;
- void passShort(short arg);
- short receiveShort();
- void passOptionalShort(optional short arg);
- void passOptionalShortWithDefault(optional short arg = 5);
-
- readonly attribute long readonlyLong;
- attribute long writableLong;
- void passLong(long arg);
- long receiveLong();
- void passOptionalLong(optional long arg);
- void passOptionalLongWithDefault(optional long arg = 7);
-
- readonly attribute long long readonlyLongLong;
- attribute long long writableLongLong;
- void passLongLong(long long arg);
- long long receiveLongLong();
- void passOptionalLongLong(optional long long arg);
- void passOptionalLongLongWithDefault(optional long long arg = -12);
-
- readonly attribute octet readonlyOctet;
- attribute octet writableOctet;
- void passOctet(octet arg);
- octet receiveOctet();
- void passOptionalOctet(optional octet arg);
- void passOptionalOctetWithDefault(optional octet arg = 19);
-
- readonly attribute unsigned short readonlyUnsignedShort;
- attribute unsigned short writableUnsignedShort;
- void passUnsignedShort(unsigned short arg);
- unsigned short receiveUnsignedShort();
- void passOptionalUnsignedShort(optional unsigned short arg);
- void passOptionalUnsignedShortWithDefault(optional unsigned short arg = 2);
-
- readonly attribute unsigned long readonlyUnsignedLong;
- attribute unsigned long writableUnsignedLong;
- void passUnsignedLong(unsigned long arg);
- unsigned long receiveUnsignedLong();
- void passOptionalUnsignedLong(optional unsigned long arg);
- void passOptionalUnsignedLongWithDefault(optional unsigned long arg = 6);
-
- readonly attribute unsigned long long readonlyUnsignedLongLong;
- attribute unsigned long long writableUnsignedLongLong;
- void passUnsignedLongLong(unsigned long long arg);
- unsigned long long receiveUnsignedLongLong();
- void passOptionalUnsignedLongLong(optional unsigned long long arg);
- void passOptionalUnsignedLongLongWithDefault(optional unsigned long long arg = 17);
-
- attribute float writableFloat;
- attribute unrestricted float writableUnrestrictedFloat;
- attribute float? writableNullableFloat;
- attribute unrestricted float? writableNullableUnrestrictedFloat;
- attribute double writableDouble;
- attribute unrestricted double writableUnrestrictedDouble;
- attribute double? writableNullableDouble;
- attribute unrestricted double? writableNullableUnrestrictedDouble;
- void passFloat(float arg1, unrestricted float arg2,
- float? arg3, unrestricted float? arg4,
- double arg5, unrestricted double arg6,
- double? arg7, unrestricted double? arg8,
- sequence<float> arg9, sequence<unrestricted float> arg10,
- sequence<float?> arg11, sequence<unrestricted float?> arg12,
- sequence<double> arg13, sequence<unrestricted double> arg14,
- sequence<double?> arg15, sequence<unrestricted double?> arg16);
- [LenientFloat]
- void passLenientFloat(float arg1, unrestricted float arg2,
- float? arg3, unrestricted float? arg4,
- double arg5, unrestricted double arg6,
- double? arg7, unrestricted double? arg8,
- sequence<float> arg9,
- sequence<unrestricted float> arg10,
- sequence<float?> arg11,
- sequence<unrestricted float?> arg12,
- sequence<double> arg13,
- sequence<unrestricted double> arg14,
- sequence<double?> arg15,
- sequence<unrestricted double?> arg16);
- [LenientFloat]
- attribute float lenientFloatAttr;
- [LenientFloat]
- attribute double lenientDoubleAttr;
-
- void passUnrestricted(optional unrestricted float arg1 = 0,
- optional unrestricted float arg2 = Infinity,
- optional unrestricted float arg3 = -Infinity,
- optional unrestricted float arg4 = NaN,
- optional unrestricted double arg5 = 0,
- optional unrestricted double arg6 = Infinity,
- optional unrestricted double arg7 = -Infinity,
- optional unrestricted double arg8 = NaN);
-
- // Castable interface types
- // XXXbz add tests for throwing versions of all the castable interface stuff
- TestInterface receiveSelf();
- TestInterface? receiveNullableSelf();
- TestInterface receiveWeakSelf();
- TestInterface? receiveWeakNullableSelf();
- void passSelf(TestInterface arg);
- void passNullableSelf(TestInterface? arg);
- attribute TestInterface nonNullSelf;
- attribute TestInterface? nullableSelf;
- [Cached, Pure]
- readonly attribute TestInterface cachedSelf;
- // Optional arguments
- void passOptionalSelf(optional TestInterface? arg);
- void passOptionalNonNullSelf(optional TestInterface arg);
- void passOptionalSelfWithDefault(optional TestInterface? arg = null);
-
- // Non-wrapper-cache interface types
- [NewObject]
- TestNonWrapperCacheInterface receiveNonWrapperCacheInterface();
- [NewObject]
- TestNonWrapperCacheInterface? receiveNullableNonWrapperCacheInterface();
- [NewObject]
- sequence<TestNonWrapperCacheInterface> receiveNonWrapperCacheInterfaceSequence();
- [NewObject]
- sequence<TestNonWrapperCacheInterface?> receiveNullableNonWrapperCacheInterfaceSequence();
- [NewObject]
- sequence<TestNonWrapperCacheInterface>? receiveNonWrapperCacheInterfaceNullableSequence();
- [NewObject]
- sequence<TestNonWrapperCacheInterface?>? receiveNullableNonWrapperCacheInterfaceNullableSequence();
-
- // Non-castable interface types
- IndirectlyImplementedInterface receiveOther();
- IndirectlyImplementedInterface? receiveNullableOther();
- IndirectlyImplementedInterface receiveWeakOther();
- IndirectlyImplementedInterface? receiveWeakNullableOther();
- void passOther(IndirectlyImplementedInterface arg);
- void passNullableOther(IndirectlyImplementedInterface? arg);
- attribute IndirectlyImplementedInterface nonNullOther;
- attribute IndirectlyImplementedInterface? nullableOther;
- // Optional arguments
- void passOptionalOther(optional IndirectlyImplementedInterface? arg);
- void passOptionalNonNullOther(optional IndirectlyImplementedInterface arg);
- void passOptionalOtherWithDefault(optional IndirectlyImplementedInterface? arg = null);
-
- // External interface types
- TestExternalInterface receiveExternal();
- TestExternalInterface? receiveNullableExternal();
- TestExternalInterface receiveWeakExternal();
- TestExternalInterface? receiveWeakNullableExternal();
- void passExternal(TestExternalInterface arg);
- void passNullableExternal(TestExternalInterface? arg);
- attribute TestExternalInterface nonNullExternal;
- attribute TestExternalInterface? nullableExternal;
- // Optional arguments
- void passOptionalExternal(optional TestExternalInterface? arg);
- void passOptionalNonNullExternal(optional TestExternalInterface arg);
- void passOptionalExternalWithDefault(optional TestExternalInterface? arg = null);
-
- // Callback interface types
- TestCallbackInterface receiveCallbackInterface();
- TestCallbackInterface? receiveNullableCallbackInterface();
- TestCallbackInterface receiveWeakCallbackInterface();
- TestCallbackInterface? receiveWeakNullableCallbackInterface();
- void passCallbackInterface(TestCallbackInterface arg);
- void passNullableCallbackInterface(TestCallbackInterface? arg);
- attribute TestCallbackInterface nonNullCallbackInterface;
- attribute TestCallbackInterface? nullableCallbackInterface;
- // Optional arguments
- void passOptionalCallbackInterface(optional TestCallbackInterface? arg);
- void passOptionalNonNullCallbackInterface(optional TestCallbackInterface arg);
- void passOptionalCallbackInterfaceWithDefault(optional TestCallbackInterface? arg = null);
-
- // Miscellaneous interface tests
- IndirectlyImplementedInterface receiveConsequentialInterface();
- void passConsequentialInterface(IndirectlyImplementedInterface arg);
-
- // Sequence types
- [Cached, Pure]
- readonly attribute sequence<long> readonlySequence;
- [Cached, Pure]
- readonly attribute sequence<Dict> readonlySequenceOfDictionaries;
- [Cached, Pure]
- readonly attribute sequence<Dict>? readonlyNullableSequenceOfDictionaries;
- [Cached, Pure, Frozen]
- readonly attribute sequence<Dict> readonlyFrozenSequence;
- [Cached, Pure, Frozen]
- readonly attribute sequence<Dict>? readonlyFrozenNullableSequence;
- sequence<long> receiveSequence();
- sequence<long>? receiveNullableSequence();
- sequence<long?> receiveSequenceOfNullableInts();
- sequence<long?>? receiveNullableSequenceOfNullableInts();
- void passSequence(sequence<long> arg);
- void passNullableSequence(sequence<long>? arg);
- void passSequenceOfNullableInts(sequence<long?> arg);
- void passOptionalSequenceOfNullableInts(optional sequence<long?> arg);
- void passOptionalNullableSequenceOfNullableInts(optional sequence<long?>? arg);
- sequence<TestInterface> receiveCastableObjectSequence();
- sequence<TestCallbackInterface> receiveCallbackObjectSequence();
- sequence<TestInterface?> receiveNullableCastableObjectSequence();
- sequence<TestCallbackInterface?> receiveNullableCallbackObjectSequence();
- sequence<TestInterface>? receiveCastableObjectNullableSequence();
- sequence<TestInterface?>? receiveNullableCastableObjectNullableSequence();
- sequence<TestInterface> receiveWeakCastableObjectSequence();
- sequence<TestInterface?> receiveWeakNullableCastableObjectSequence();
- sequence<TestInterface>? receiveWeakCastableObjectNullableSequence();
- sequence<TestInterface?>? receiveWeakNullableCastableObjectNullableSequence();
- void passCastableObjectSequence(sequence<TestInterface> arg);
- void passNullableCastableObjectSequence(sequence<TestInterface?> arg);
- void passCastableObjectNullableSequence(sequence<TestInterface>? arg);
- void passNullableCastableObjectNullableSequence(sequence<TestInterface?>? arg);
- void passOptionalSequence(optional sequence<long> arg);
- void passOptionalSequenceWithDefaultValue(optional sequence<long> arg = []);
- void passOptionalNullableSequence(optional sequence<long>? arg);
- void passOptionalNullableSequenceWithDefaultValue(optional sequence<long>? arg = null);
- void passOptionalNullableSequenceWithDefaultValue2(optional sequence<long>? arg = []);
- void passOptionalObjectSequence(optional sequence<TestInterface> arg);
- void passExternalInterfaceSequence(sequence<TestExternalInterface> arg);
- void passNullableExternalInterfaceSequence(sequence<TestExternalInterface?> arg);
-
- sequence<DOMString> receiveStringSequence();
- void passStringSequence(sequence<DOMString> arg);
-
- sequence<ByteString> receiveByteStringSequence();
- void passByteStringSequence(sequence<ByteString> arg);
-
- sequence<any> receiveAnySequence();
- sequence<any>? receiveNullableAnySequence();
- sequence<sequence<any>> receiveAnySequenceSequence();
-
- sequence<object> receiveObjectSequence();
- sequence<object?> receiveNullableObjectSequence();
-
- void passSequenceOfSequences(sequence<sequence<long>> arg);
- void passSequenceOfSequencesOfSequences(sequence<sequence<sequence<long>>> arg);
- sequence<sequence<long>> receiveSequenceOfSequences();
- sequence<sequence<sequence<long>>> receiveSequenceOfSequencesOfSequences();
-
- // MozMap types
- void passMozMap(MozMap<long> arg);
- void passNullableMozMap(MozMap<long>? arg);
- void passMozMapOfNullableInts(MozMap<long?> arg);
- void passOptionalMozMapOfNullableInts(optional MozMap<long?> arg);
- void passOptionalNullableMozMapOfNullableInts(optional MozMap<long?>? arg);
- void passCastableObjectMozMap(MozMap<TestInterface> arg);
- void passNullableCastableObjectMozMap(MozMap<TestInterface?> arg);
- void passCastableObjectNullableMozMap(MozMap<TestInterface>? arg);
- void passNullableCastableObjectNullableMozMap(MozMap<TestInterface?>? arg);
- void passOptionalMozMap(optional MozMap<long> arg);
- void passOptionalNullableMozMap(optional MozMap<long>? arg);
- void passOptionalNullableMozMapWithDefaultValue(optional MozMap<long>? arg = null);
- void passOptionalObjectMozMap(optional MozMap<TestInterface> arg);
- void passExternalInterfaceMozMap(MozMap<TestExternalInterface> arg);
- void passNullableExternalInterfaceMozMap(MozMap<TestExternalInterface?> arg);
- void passStringMozMap(MozMap<DOMString> arg);
- void passByteStringMozMap(MozMap<ByteString> arg);
- void passMozMapOfMozMaps(MozMap<MozMap<long>> arg);
- MozMap<long> receiveMozMap();
- MozMap<long>? receiveNullableMozMap();
- MozMap<long?> receiveMozMapOfNullableInts();
- MozMap<long?>? receiveNullableMozMapOfNullableInts();
- MozMap<MozMap<long>> receiveMozMapOfMozMaps();
- MozMap<any> receiveAnyMozMap();
-
- // Typed array types
- void passArrayBuffer(ArrayBuffer arg);
- void passNullableArrayBuffer(ArrayBuffer? arg);
- void passOptionalArrayBuffer(optional ArrayBuffer arg);
- void passOptionalNullableArrayBuffer(optional ArrayBuffer? arg);
- void passOptionalNullableArrayBufferWithDefaultValue(optional ArrayBuffer? arg= null);
- void passArrayBufferView(ArrayBufferView arg);
- void passInt8Array(Int8Array arg);
- void passInt16Array(Int16Array arg);
- void passInt32Array(Int32Array arg);
- void passUint8Array(Uint8Array arg);
- void passUint16Array(Uint16Array arg);
- void passUint32Array(Uint32Array arg);
- void passUint8ClampedArray(Uint8ClampedArray arg);
- void passFloat32Array(Float32Array arg);
- void passFloat64Array(Float64Array arg);
- void passSequenceOfArrayBuffers(sequence<ArrayBuffer> arg);
- void passSequenceOfNullableArrayBuffers(sequence<ArrayBuffer?> arg);
- void passMozMapOfArrayBuffers(MozMap<ArrayBuffer> arg);
- void passMozMapOfNullableArrayBuffers(MozMap<ArrayBuffer?> arg);
- void passVariadicTypedArray(Float32Array... arg);
- void passVariadicNullableTypedArray(Float32Array?... arg);
- Uint8Array receiveUint8Array();
- attribute Uint8Array uint8ArrayAttr;
-
- // DOMString types
- void passString(DOMString arg);
- void passNullableString(DOMString? arg);
- void passOptionalString(optional DOMString arg);
- void passOptionalStringWithDefaultValue(optional DOMString arg = "abc");
- void passOptionalNullableString(optional DOMString? arg);
- void passOptionalNullableStringWithDefaultValue(optional DOMString? arg = null);
- void passVariadicString(DOMString... arg);
- DOMString receiveString();
-
- // ByteString types
- void passByteString(ByteString arg);
- void passNullableByteString(ByteString? arg);
- void passOptionalByteString(optional ByteString arg);
- void passOptionalByteStringWithDefaultValue(optional ByteString arg = "abc");
- void passOptionalNullableByteString(optional ByteString? arg);
- void passOptionalNullableByteStringWithDefaultValue(optional ByteString? arg = null);
- void passVariadicByteString(ByteString... arg);
- void passOptionalUnionByteString(optional (ByteString or long) arg);
- void passOptionalUnionByteStringWithDefaultValue(optional (ByteString or long) arg = "abc");
-
- // USVString types
- void passUSVS(USVString arg);
- void passNullableUSVS(USVString? arg);
- void passOptionalUSVS(optional USVString arg);
- void passOptionalUSVSWithDefaultValue(optional USVString arg = "abc");
- void passOptionalNullableUSVS(optional USVString? arg);
- void passOptionalNullableUSVSWithDefaultValue(optional USVString? arg = null);
- void passVariadicUSVS(USVString... arg);
- USVString receiveUSVS();
-
- // Enumerated types
- void passEnum(TestEnum arg);
- void passNullableEnum(TestEnum? arg);
- void passOptionalEnum(optional TestEnum arg);
- void passEnumWithDefault(optional TestEnum arg = "a");
- void passOptionalNullableEnum(optional TestEnum? arg);
- void passOptionalNullableEnumWithDefaultValue(optional TestEnum? arg = null);
- void passOptionalNullableEnumWithDefaultValue2(optional TestEnum? arg = "a");
- TestEnum receiveEnum();
- TestEnum? receiveNullableEnum();
- attribute TestEnum enumAttribute;
- readonly attribute TestEnum readonlyEnumAttribute;
-
- // Callback types
- void passCallback(TestCallback arg);
- void passNullableCallback(TestCallback? arg);
- void passOptionalCallback(optional TestCallback arg);
- void passOptionalNullableCallback(optional TestCallback? arg);
- void passOptionalNullableCallbackWithDefaultValue(optional TestCallback? arg = null);
- TestCallback receiveCallback();
- TestCallback? receiveNullableCallback();
- void passNullableTreatAsNullCallback(TestTreatAsNullCallback? arg);
- void passOptionalNullableTreatAsNullCallback(optional TestTreatAsNullCallback? arg);
- void passOptionalNullableTreatAsNullCallbackWithDefaultValue(optional TestTreatAsNullCallback? arg = null);
- attribute TestTreatAsNullCallback treatAsNullCallback;
- attribute TestTreatAsNullCallback? nullableTreatAsNullCallback;
-
- // Force code generation of the various test callbacks we have.
- void forceCallbackGeneration(TestIntegerReturn arg1,
- TestNullableIntegerReturn arg2,
- TestBooleanReturn arg3,
- TestFloatReturn arg4,
- TestStringReturn arg5,
- TestEnumReturn arg6,
- TestInterfaceReturn arg7,
- TestNullableInterfaceReturn arg8,
- TestExternalInterfaceReturn arg9,
- TestNullableExternalInterfaceReturn arg10,
- TestCallbackInterfaceReturn arg11,
- TestNullableCallbackInterfaceReturn arg12,
- TestCallbackReturn arg13,
- TestNullableCallbackReturn arg14,
- TestObjectReturn arg15,
- TestNullableObjectReturn arg16,
- TestTypedArrayReturn arg17,
- TestNullableTypedArrayReturn arg18,
- TestSequenceReturn arg19,
- TestNullableSequenceReturn arg20,
- TestIntegerArguments arg21,
- TestInterfaceArguments arg22,
- TestStringEnumArguments arg23,
- TestObjectArguments arg24,
- TestOptionalArguments arg25);
-
- // Any types
- void passAny(any arg);
- void passVariadicAny(any... arg);
- void passOptionalAny(optional any arg);
- void passAnyDefaultNull(optional any arg = null);
- void passSequenceOfAny(sequence<any> arg);
- void passNullableSequenceOfAny(sequence<any>? arg);
- void passOptionalSequenceOfAny(optional sequence<any> arg);
- void passOptionalNullableSequenceOfAny(optional sequence<any>? arg);
- void passOptionalSequenceOfAnyWithDefaultValue(optional sequence<any>? arg = null);
- void passSequenceOfSequenceOfAny(sequence<sequence<any>> arg);
- void passSequenceOfNullableSequenceOfAny(sequence<sequence<any>?> arg);
- void passNullableSequenceOfNullableSequenceOfAny(sequence<sequence<any>?>? arg);
- void passOptionalNullableSequenceOfNullableSequenceOfAny(optional sequence<sequence<any>?>? arg);
- void passMozMapOfAny(MozMap<any> arg);
- void passNullableMozMapOfAny(MozMap<any>? arg);
- void passOptionalMozMapOfAny(optional MozMap<any> arg);
- void passOptionalNullableMozMapOfAny(optional MozMap<any>? arg);
- void passOptionalMozMapOfAnyWithDefaultValue(optional MozMap<any>? arg = null);
- void passMozMapOfMozMapOfAny(MozMap<MozMap<any>> arg);
- void passMozMapOfNullableMozMapOfAny(MozMap<MozMap<any>?> arg);
- void passNullableMozMapOfNullableMozMapOfAny(MozMap<MozMap<any>?>? arg);
- void passOptionalNullableMozMapOfNullableMozMapOfAny(optional MozMap<MozMap<any>?>? arg);
- void passOptionalNullableMozMapOfNullableSequenceOfAny(optional MozMap<sequence<any>?>? arg);
- void passOptionalNullableSequenceOfNullableMozMapOfAny(optional sequence<MozMap<any>?>? arg);
- any receiveAny();
-
- // object types
- void passObject(object arg);
- void passVariadicObject(object... arg);
- void passNullableObject(object? arg);
- void passVariadicNullableObject(object... arg);
- void passOptionalObject(optional object arg);
- void passOptionalNullableObject(optional object? arg);
- void passOptionalNullableObjectWithDefaultValue(optional object? arg = null);
- void passSequenceOfObject(sequence<object> arg);
- void passSequenceOfNullableObject(sequence<object?> arg);
- void passNullableSequenceOfObject(sequence<object>? arg);
- void passOptionalNullableSequenceOfNullableSequenceOfObject(optional sequence<sequence<object>?>? arg);
- void passOptionalNullableSequenceOfNullableSequenceOfNullableObject(optional sequence<sequence<object?>?>? arg);
- void passMozMapOfObject(MozMap<object> arg);
- object receiveObject();
- object? receiveNullableObject();
-
- // Union types
- void passUnion((object or long) arg);
- // Some union tests are debug-only to avoid creating all those
- // unused union types in opt builds.
-#ifdef DEBUG
- void passUnion2((long or boolean) arg);
- void passUnion3((object or long or boolean) arg);
- void passUnion4((Node or long or boolean) arg);
- void passUnion5((object or boolean) arg);
- void passUnion6((object or DOMString) arg);
- void passUnion7((object or DOMString or long) arg);
- void passUnion8((object or DOMString or boolean) arg);
- void passUnion9((object or DOMString or long or boolean) arg);
- void passUnion10(optional (EventInit or long) arg);
- void passUnion11(optional (CustomEventInit or long) arg);
- void passUnion12(optional (EventInit or long) arg = 5);
- void passUnion13(optional (object or long?) arg = null);
- void passUnion14(optional (object or long?) arg = 5);
- void passUnion15((sequence<long> or long) arg);
- void passUnion16(optional (sequence<long> or long) arg);
- void passUnion17(optional (sequence<long>? or long) arg = 5);
- void passUnion18((sequence<object> or long) arg);
- void passUnion19(optional (sequence<object> or long) arg);
- void passUnion20(optional (sequence<object> or long) arg = []);
- void passUnion21((MozMap<long> or long) arg);
- void passUnion22((MozMap<object> or long) arg);
- void passUnion23((sequence<ImageData> or long) arg);
- void passUnion24((sequence<ImageData?> or long) arg);
- void passUnion25((sequence<sequence<ImageData>> or long) arg);
- void passUnion26((sequence<sequence<ImageData?>> or long) arg);
- void passUnion27(optional (sequence<DOMString> or EventInit) arg);
- void passUnion28(optional (EventInit or sequence<DOMString>) arg);
- void passUnionWithCallback((EventHandler or long) arg);
- void passUnionWithByteString((ByteString or long) arg);
- void passUnionWithMozMap((MozMap<DOMString> or DOMString) arg);
- void passUnionWithMozMapAndSequence((MozMap<DOMString> or sequence<DOMString>) arg);
- void passUnionWithSequenceAndMozMap((sequence<DOMString> or MozMap<DOMString>) arg);
- void passUnionWithUSVS((USVString or long) arg);
-#endif
- void passUnionWithNullable((object? or long) arg);
- void passNullableUnion((object or long)? arg);
- void passOptionalUnion(optional (object or long) arg);
- void passOptionalNullableUnion(optional (object or long)? arg);
- void passOptionalNullableUnionWithDefaultValue(optional (object or long)? arg = null);
- //void passUnionWithInterfaces((TestInterface or TestExternalInterface) arg);
- //void passUnionWithInterfacesAndNullable((TestInterface? or TestExternalInterface) arg);
- //void passUnionWithSequence((sequence<object> or long) arg);
- void passUnionWithArrayBuffer((ArrayBuffer or long) arg);
- void passUnionWithString((DOMString or object) arg);
- // Using an enum in a union. Note that we use some enum not declared in our
- // binding file, because UnionTypes.h will need to include the binding header
- // for this enum. Pick an enum from an interface that won't drag in too much
- // stuff.
- void passUnionWithEnum((SupportedType or object) arg);
-
- // Trying to use a callback in a union won't include the test
- // headers, unfortunately, so won't compile.
- //void passUnionWithCallback((TestCallback or long) arg);
- void passUnionWithObject((object or long) arg);
- //void passUnionWithDict((Dict or long) arg);
-
- void passUnionWithDefaultValue1(optional (double or DOMString) arg = "");
- void passUnionWithDefaultValue2(optional (double or DOMString) arg = 1);
- void passUnionWithDefaultValue3(optional (double or DOMString) arg = 1.5);
- void passUnionWithDefaultValue4(optional (float or DOMString) arg = "");
- void passUnionWithDefaultValue5(optional (float or DOMString) arg = 1);
- void passUnionWithDefaultValue6(optional (float or DOMString) arg = 1.5);
- void passUnionWithDefaultValue7(optional (unrestricted double or DOMString) arg = "");
- void passUnionWithDefaultValue8(optional (unrestricted double or DOMString) arg = 1);
- void passUnionWithDefaultValue9(optional (unrestricted double or DOMString) arg = 1.5);
- void passUnionWithDefaultValue10(optional (unrestricted double or DOMString) arg = Infinity);
- void passUnionWithDefaultValue11(optional (unrestricted float or DOMString) arg = "");
- void passUnionWithDefaultValue12(optional (unrestricted float or DOMString) arg = 1);
- void passUnionWithDefaultValue13(optional (unrestricted float or DOMString) arg = Infinity);
- void passUnionWithDefaultValue14(optional (double or ByteString) arg = "");
- void passUnionWithDefaultValue15(optional (double or ByteString) arg = 1);
- void passUnionWithDefaultValue16(optional (double or ByteString) arg = 1.5);
- void passUnionWithDefaultValue17(optional (double or SupportedType) arg = "text/html");
- void passUnionWithDefaultValue18(optional (double or SupportedType) arg = 1);
- void passUnionWithDefaultValue19(optional (double or SupportedType) arg = 1.5);
-
- void passNullableUnionWithDefaultValue1(optional (double or DOMString)? arg = "");
- void passNullableUnionWithDefaultValue2(optional (double or DOMString)? arg = 1);
- void passNullableUnionWithDefaultValue3(optional (double or DOMString)? arg = null);
- void passNullableUnionWithDefaultValue4(optional (float or DOMString)? arg = "");
- void passNullableUnionWithDefaultValue5(optional (float or DOMString)? arg = 1);
- void passNullableUnionWithDefaultValue6(optional (float or DOMString)? arg = null);
- void passNullableUnionWithDefaultValue7(optional (unrestricted double or DOMString)? arg = "");
- void passNullableUnionWithDefaultValue8(optional (unrestricted double or DOMString)? arg = 1);
- void passNullableUnionWithDefaultValue9(optional (unrestricted double or DOMString)? arg = null);
- void passNullableUnionWithDefaultValue10(optional (unrestricted float or DOMString)? arg = "");
- void passNullableUnionWithDefaultValue11(optional (unrestricted float or DOMString)? arg = 1);
- void passNullableUnionWithDefaultValue12(optional (unrestricted float or DOMString)? arg = null);
- void passNullableUnionWithDefaultValue13(optional (double or ByteString)? arg = "");
- void passNullableUnionWithDefaultValue14(optional (double or ByteString)? arg = 1);
- void passNullableUnionWithDefaultValue15(optional (double or ByteString)? arg = 1.5);
- void passNullableUnionWithDefaultValue16(optional (double or ByteString)? arg = null);
- void passNullableUnionWithDefaultValue17(optional (double or SupportedType)? arg = "text/html");
- void passNullableUnionWithDefaultValue18(optional (double or SupportedType)? arg = 1);
- void passNullableUnionWithDefaultValue19(optional (double or SupportedType)? arg = 1.5);
- void passNullableUnionWithDefaultValue20(optional (double or SupportedType)? arg = null);
-
- void passSequenceOfUnions(sequence<(CanvasPattern or CanvasGradient)> arg);
- void passSequenceOfUnions2(sequence<(object or long)> arg);
- void passVariadicUnion((CanvasPattern or CanvasGradient)... arg);
-
- void passSequenceOfNullableUnions(sequence<(CanvasPattern or CanvasGradient)?> arg);
- void passVariadicNullableUnion((CanvasPattern or CanvasGradient)?... arg);
- void passMozMapOfUnions(MozMap<(CanvasPattern or CanvasGradient)> arg);
- // XXXbz no move constructor on some unions
- // void passMozMapOfUnions2(MozMap<(object or long)> arg);
-
- (CanvasPattern or CanvasGradient) receiveUnion();
- (object or long) receiveUnion2();
- (CanvasPattern? or CanvasGradient) receiveUnionContainingNull();
- (CanvasPattern or CanvasGradient)? receiveNullableUnion();
- (object or long)? receiveNullableUnion2();
-
- attribute (CanvasPattern or CanvasGradient) writableUnion;
- attribute (CanvasPattern? or CanvasGradient) writableUnionContainingNull;
- attribute (CanvasPattern or CanvasGradient)? writableNullableUnion;
-
- // Date types
- void passDate(Date arg);
- void passNullableDate(Date? arg);
- void passOptionalDate(optional Date arg);
- void passOptionalNullableDate(optional Date? arg);
- void passOptionalNullableDateWithDefaultValue(optional Date? arg = null);
- void passDateSequence(sequence<Date> arg);
- void passNullableDateSequence(sequence<Date?> arg);
- void passDateMozMap(MozMap<Date> arg);
- Date receiveDate();
- Date? receiveNullableDate();
-
- // Promise types
- void passPromise(Promise<any> arg);
- void passNullablePromise(Promise<any>? arg);
- void passOptionalPromise(optional Promise<any> arg);
- void passOptionalNullablePromise(optional Promise<any>? arg);
- void passOptionalNullablePromiseWithDefaultValue(optional Promise<any>? arg = null);
- void passPromiseSequence(sequence<Promise<any>> arg);
- void passNullablePromiseSequence(sequence<Promise<any>?> arg);
- Promise<any> receivePromise();
- Promise<any> receiveAddrefedPromise();
-
- // binaryNames tests
- void methodRenamedFrom();
- [BinaryName="otherMethodRenamedTo"]
- void otherMethodRenamedFrom();
- void methodRenamedFrom(byte argument);
- readonly attribute byte attributeGetterRenamedFrom;
- attribute byte attributeRenamedFrom;
- [BinaryName="otherAttributeRenamedTo"]
- attribute byte otherAttributeRenamedFrom;
-
- void passDictionary(optional Dict x);
- void passDictionary2(Dict x);
- [Cached, Pure]
- readonly attribute Dict readonlyDictionary;
- [Cached, Pure]
- readonly attribute Dict? readonlyNullableDictionary;
- [Cached, Pure]
- attribute Dict writableDictionary;
- [Cached, Pure, Frozen]
- readonly attribute Dict readonlyFrozenDictionary;
- [Cached, Pure, Frozen]
- readonly attribute Dict? readonlyFrozenNullableDictionary;
- [Cached, Pure, Frozen]
- attribute Dict writableFrozenDictionary;
- Dict receiveDictionary();
- Dict? receiveNullableDictionary();
- void passOtherDictionary(optional GrandparentDict x);
- void passSequenceOfDictionaries(sequence<Dict> x);
- void passMozMapOfDictionaries(MozMap<GrandparentDict> x);
- // No support for nullable dictionaries inside a sequence (nor should there be)
- // void passSequenceOfNullableDictionaries(sequence<Dict?> x);
- void passDictionaryOrLong(optional Dict x);
- void passDictionaryOrLong(long x);
-
- void passDictContainingDict(optional DictContainingDict arg);
- void passDictContainingSequence(optional DictContainingSequence arg);
- DictContainingSequence receiveDictContainingSequence();
- void passVariadicDictionary(Dict... arg);
-
- // EnforceRange/Clamp tests
- void dontEnforceRangeOrClamp(byte arg);
- void doEnforceRange([EnforceRange] byte arg);
- void doClamp([Clamp] byte arg);
- [EnforceRange] attribute byte enforcedByte;
- [Clamp] attribute byte clampedByte;
-
- // Typedefs
- const myLong myLongConstant = 5;
- void exerciseTypedefInterfaces1(AnotherNameForTestInterface arg);
- AnotherNameForTestInterface exerciseTypedefInterfaces2(NullableTestInterface arg);
- void exerciseTypedefInterfaces3(YetAnotherNameForTestInterface arg);
-
- // Deprecated methods and attributes
- [Deprecated="GetAttributeNode"]
- attribute byte deprecatedAttribute;
- [Deprecated="GetAttributeNode"]
- byte deprecatedMethod();
- [Deprecated="GetAttributeNode"]
- byte deprecatedMethodWithContext(any arg);
-
- // Static methods and attributes
- static attribute boolean staticAttribute;
- static void staticMethod(boolean arg);
- static void staticMethodWithContext(any arg);
-
- // Testing static method with a reserved C++ keyword as the name
- static void assert(boolean arg);
-
- // Deprecated static methods and attributes
- [Deprecated="GetAttributeNode"]
- static attribute byte staticDeprecatedAttribute;
- [Deprecated="GetAttributeNode"]
- static void staticDeprecatedMethod();
- [Deprecated="GetAttributeNode"]
- static void staticDeprecatedMethodWithContext(any arg);
-
- // Overload resolution tests
- //void overload1(DOMString... strs);
- boolean overload1(TestInterface arg);
- TestInterface overload1(DOMString strs, TestInterface arg);
- void overload2(TestInterface arg);
- void overload2(optional Dict arg);
- void overload2(boolean arg);
- void overload2(DOMString arg);
- void overload2(Date arg);
- void overload3(TestInterface arg);
- void overload3(TestCallback arg);
- void overload3(boolean arg);
- void overload4(TestInterface arg);
- void overload4(TestCallbackInterface arg);
- void overload4(DOMString arg);
- void overload5(long arg);
- void overload5(TestEnum arg);
- void overload6(long arg);
- void overload6(boolean arg);
- void overload7(long arg);
- void overload7(boolean arg);
- void overload7(ByteString arg);
- void overload8(long arg);
- void overload8(TestInterface arg);
- void overload9(long? arg);
- void overload9(DOMString arg);
- void overload10(long? arg);
- void overload10(object arg);
- void overload11(long arg);
- void overload11(DOMString? arg);
- void overload12(long arg);
- void overload12(boolean? arg);
- void overload13(long? arg);
- void overload13(boolean arg);
- void overload14(optional long arg);
- void overload14(TestInterface arg);
- void overload15(long arg);
- void overload15(optional TestInterface arg);
- void overload16(long arg);
- void overload16(optional TestInterface? arg);
- void overload17(sequence<long> arg);
- void overload17(MozMap<long> arg);
- void overload18(MozMap<DOMString> arg);
- void overload18(sequence<DOMString> arg);
- void overload19(sequence<long> arg);
- void overload19(optional Dict arg);
- void overload20(optional Dict arg);
- void overload20(sequence<long> arg);
-
- // Variadic handling
- void passVariadicThirdArg(DOMString arg1, long arg2, TestInterface... arg3);
-
- // Conditionally exposed methods/attributes
- [Pref="abc.def"]
- readonly attribute boolean prefable1;
- [Pref="abc.def"]
- readonly attribute boolean prefable2;
- [Pref="ghi.jkl"]
- readonly attribute boolean prefable3;
- [Pref="ghi.jkl"]
- readonly attribute boolean prefable4;
- [Pref="abc.def"]
- readonly attribute boolean prefable5;
- [Pref="abc.def", Func="nsGenericHTMLElement::TouchEventsEnabled"]
- readonly attribute boolean prefable6;
- [Pref="abc.def", Func="nsGenericHTMLElement::TouchEventsEnabled"]
- readonly attribute boolean prefable7;
- [Pref="ghi.jkl", Func="nsGenericHTMLElement::TouchEventsEnabled"]
- readonly attribute boolean prefable8;
- [Pref="abc.def", Func="nsGenericHTMLElement::TouchEventsEnabled"]
- readonly attribute boolean prefable9;
- [Pref="abc.def"]
- void prefable10();
- [Pref="abc.def", Func="nsGenericHTMLElement::TouchEventsEnabled"]
- void prefable11();
- [Pref="abc.def", Func="TestFuncControlledMember"]
- readonly attribute boolean prefable12;
- [Pref="abc.def", Func="nsGenericHTMLElement::TouchEventsEnabled"]
- void prefable13();
- [Pref="abc.def", Func="TestFuncControlledMember"]
- readonly attribute boolean prefable14;
- [Func="TestFuncControlledMember"]
- readonly attribute boolean prefable15;
- [Func="TestFuncControlledMember"]
- readonly attribute boolean prefable16;
- [Pref="abc.def", Func="TestFuncControlledMember"]
- void prefable17();
- [Func="TestFuncControlledMember"]
- void prefable18();
- [Func="TestFuncControlledMember"]
- void prefable19();
- [Pref="abc.def", Func="TestFuncControlledMember", ChromeOnly]
- void prefable20();
-
- // Conditionally exposed methods/attributes involving [SecureContext]
- [SecureContext]
- readonly attribute boolean conditionalOnSecureContext1;
- [SecureContext, Pref="abc.def"]
- readonly attribute boolean conditionalOnSecureContext2;
- [SecureContext, Pref="abc.def", Func="nsGenericHTMLElement::TouchEventsEnabled"]
- readonly attribute boolean conditionalOnSecureContext3;
- [SecureContext, Pref="abc.def", Func="TestFuncControlledMember"]
- readonly attribute boolean conditionalOnSecureContext4;
- [SecureContext]
- void conditionalOnSecureContext5();
- [SecureContext, Pref="abc.def"]
- void conditionalOnSecureContext6();
- [SecureContext, Pref="abc.def", Func="nsGenericHTMLElement::TouchEventsEnabled"]
- void conditionalOnSecureContext7();
- [SecureContext, Pref="abc.def", Func="TestFuncControlledMember"]
- void conditionalOnSecureContext8();
-
- // Miscellania
- [LenientThis] attribute long attrWithLenientThis;
- [Unforgeable] readonly attribute long unforgeableAttr;
- [Unforgeable, ChromeOnly] readonly attribute long unforgeableAttr2;
- [Unforgeable] long unforgeableMethod();
- [Unforgeable, ChromeOnly] long unforgeableMethod2();
- stringifier;
- void passRenamedInterface(TestRenamedInterface arg);
- [PutForwards=writableByte] readonly attribute TestInterface putForwardsAttr;
- [PutForwards=writableByte, LenientThis] readonly attribute TestInterface putForwardsAttr2;
- [PutForwards=writableByte, ChromeOnly] readonly attribute TestInterface putForwardsAttr3;
- [Throws] void throwingMethod();
- [Throws] attribute boolean throwingAttr;
- [GetterThrows] attribute boolean throwingGetterAttr;
- [SetterThrows] attribute boolean throwingSetterAttr;
- [NeedsSubjectPrincipal] void needsSubjectPrincipalMethod();
- [NeedsSubjectPrincipal] attribute boolean needsSubjectPrincipalAttr;
- [NeedsCallerType] void needsCallerTypeMethod();
- [NeedsCallerType] attribute boolean needsCallerTypeAttr;
- [CEReactions] void ceReactionsMethod();
- [CEReactions] void ceReactionsMethodOverload();
- [CEReactions] void ceReactionsMethodOverload(DOMString bar);
- [CEReactions] attribute boolean ceReactionsAttr;
- legacycaller short(unsigned long arg1, TestInterface arg2);
- void passArgsWithDefaults(optional long arg1,
- optional TestInterface? arg2 = null,
- optional Dict arg3, optional double arg4 = 5.0,
- optional float arg5);
-
- attribute any jsonifierShouldSkipThis;
- attribute TestParentInterface jsonifierShouldSkipThis2;
- attribute TestCallbackInterface jsonifierShouldSkipThis3;
- jsonifier;
-
- attribute byte dashed-attribute;
- void dashed-method();
-
- // If you add things here, add them to TestExampleGen and TestJSImplGen as well
-};
-
-interface TestParentInterface {
-};
-
-interface TestChildInterface : TestParentInterface {
-};
-
-interface TestNonWrapperCacheInterface {
-};
-
-[NoInterfaceObject]
-interface ImplementedInterfaceParent {
- void implementedParentMethod();
- attribute boolean implementedParentProperty;
-
- const long implementedParentConstant = 8;
-};
-
-ImplementedInterfaceParent implements IndirectlyImplementedInterface;
-
-[NoInterfaceObject]
-interface IndirectlyImplementedInterface {
- void indirectlyImplementedMethod();
- attribute boolean indirectlyImplementedProperty;
-
- const long indirectlyImplementedConstant = 9;
-};
-
-[NoInterfaceObject]
-interface ImplementedInterface : ImplementedInterfaceParent {
- void implementedMethod();
- attribute boolean implementedProperty;
-
- const long implementedConstant = 5;
-};
-
-[NoInterfaceObject]
-interface DiamondImplements {
- readonly attribute long diamondImplementedProperty;
-};
-[NoInterfaceObject]
-interface DiamondBranch1A {
-};
-[NoInterfaceObject]
-interface DiamondBranch1B {
-};
-[NoInterfaceObject]
-interface DiamondBranch2A : DiamondImplements {
-};
-[NoInterfaceObject]
-interface DiamondBranch2B : DiamondImplements {
-};
-TestInterface implements DiamondBranch1A;
-TestInterface implements DiamondBranch1B;
-TestInterface implements DiamondBranch2A;
-TestInterface implements DiamondBranch2B;
-DiamondBranch1A implements DiamondImplements;
-DiamondBranch1B implements DiamondImplements;
-
-dictionary Dict : ParentDict {
- TestEnum someEnum;
- long x;
- long a;
- long b = 8;
- long z = 9;
- [EnforceRange] unsigned long enforcedUnsignedLong;
- [Clamp] unsigned long clampedUnsignedLong;
- DOMString str;
- DOMString empty = "";
- TestEnum otherEnum = "b";
- DOMString otherStr = "def";
- DOMString? yetAnotherStr = null;
- DOMString template;
- ByteString byteStr;
- ByteString emptyByteStr = "";
- ByteString otherByteStr = "def";
- object someObj;
- boolean prototype;
- object? anotherObj = null;
- TestCallback? someCallback = null;
- any someAny;
- any anotherAny = null;
-
- unrestricted float urFloat = 0;
- unrestricted float urFloat2 = 1.1;
- unrestricted float urFloat3 = -1.1;
- unrestricted float? urFloat4 = null;
- unrestricted float infUrFloat = Infinity;
- unrestricted float negativeInfUrFloat = -Infinity;
- unrestricted float nanUrFloat = NaN;
-
- unrestricted double urDouble = 0;
- unrestricted double urDouble2 = 1.1;
- unrestricted double urDouble3 = -1.1;
- unrestricted double? urDouble4 = null;
- unrestricted double infUrDouble = Infinity;
- unrestricted double negativeInfUrDouble = -Infinity;
- unrestricted double nanUrDouble = NaN;
-
- (float or DOMString) floatOrString = "str";
- (float or DOMString)? nullableFloatOrString = "str";
- (object or long) objectOrLong;
-#ifdef DEBUG
- (EventInit or long) eventInitOrLong;
- (EventInit or long)? nullableEventInitOrLong;
- (HTMLElement or long)? nullableHTMLElementOrLong;
- // CustomEventInit is useful to test because it needs rooting.
- (CustomEventInit or long) eventInitOrLong2;
- (CustomEventInit or long)? nullableEventInitOrLong2;
- (EventInit or long) eventInitOrLongWithDefaultValue = null;
- (CustomEventInit or long) eventInitOrLongWithDefaultValue2 = null;
- (EventInit or long) eventInitOrLongWithDefaultValue3 = 5;
- (CustomEventInit or long) eventInitOrLongWithDefaultValue4 = 5;
- (EventInit or long)? nullableEventInitOrLongWithDefaultValue = null;
- (CustomEventInit or long)? nullableEventInitOrLongWithDefaultValue2 = null;
- (EventInit or long)? nullableEventInitOrLongWithDefaultValue3 = 5;
- (CustomEventInit or long)? nullableEventInitOrLongWithDefaultValue4 = 5;
- (sequence<object> or long) objectSequenceOrLong;
- (sequence<object> or long) objectSequenceOrLongWithDefaultValue1 = 1;
- (sequence<object> or long) objectSequenceOrLongWithDefaultValue2 = [];
- (sequence<object> or long)? nullableObjectSequenceOrLong;
- (sequence<object> or long)? nullableObjectSequenceOrLongWithDefaultValue1 = 1;
- (sequence<object> or long)? nullableObjectSequenceOrLongWithDefaultValue2 = [];
-#endif
-
- ArrayBuffer arrayBuffer;
- ArrayBuffer? nullableArrayBuffer;
- Uint8Array uint8Array;
- Float64Array? float64Array = null;
-
- sequence<long> seq1;
- sequence<long> seq2 = [];
- sequence<long>? seq3;
- sequence<long>? seq4 = null;
- sequence<long>? seq5 = [];
-
- long dashed-name;
-
- required long requiredLong;
- required object requiredObject;
-
- CustomEventInit customEventInit;
- TestDictionaryTypedef dictionaryTypedef;
-
- Promise<void> promise;
- sequence<Promise<void>> promiseSequence;
-};
-
-dictionary ParentDict : GrandparentDict {
- long c = 5;
- TestInterface someInterface;
- TestInterface? someNullableInterface = null;
- TestExternalInterface someExternalInterface;
- any parentAny;
-};
-
-dictionary DictContainingDict {
- Dict memberDict;
-};
-
-dictionary DictContainingSequence {
- sequence<long> ourSequence;
- sequence<TestInterface> ourSequence2;
- sequence<any> ourSequence3;
- sequence<object> ourSequence4;
- sequence<object?> ourSequence5;
- sequence<object>? ourSequence6;
- sequence<object?>? ourSequence7;
- sequence<object>? ourSequence8 = null;
- sequence<object?>? ourSequence9 = null;
- sequence<(float or DOMString)> ourSequence10;
-};
-
-dictionary DictForConstructor {
- Dict dict;
- DictContainingDict dict2;
- sequence<Dict> seq1;
- sequence<sequence<Dict>>? seq2;
- sequence<sequence<Dict>?> seq3;
- sequence<any> seq4;
- sequence<any> seq5;
- sequence<DictContainingSequence> seq6;
- object obj1;
- object? obj2;
- any any1 = null;
-};
-
-dictionary DictWithConditionalMembers {
- [ChromeOnly]
- long chromeOnlyMember;
- [Func="TestFuncControlledMember"]
- long funcControlledMember;
- [ChromeOnly, Func="nsGenericHTMLElement::TouchEventsEnabled"]
- long chromeOnlyFuncControlledMember;
-};
-
-interface TestIndexedGetterInterface {
- getter long item(unsigned long idx);
- readonly attribute unsigned long length;
- legacycaller void();
-};
-
-interface TestNamedGetterInterface {
- getter DOMString (DOMString name);
-};
-
-interface TestIndexedGetterAndSetterAndNamedGetterInterface {
- getter DOMString (DOMString myName);
- getter long (unsigned long index);
- setter creator void (unsigned long index, long arg);
-};
-
-interface TestIndexedAndNamedGetterInterface {
- getter long (unsigned long index);
- getter DOMString namedItem(DOMString name);
- readonly attribute unsigned long length;
-};
-
-interface TestIndexedSetterInterface {
- setter creator void setItem(unsigned long idx, DOMString item);
- getter DOMString (unsigned long idx);
-};
-
-interface TestNamedSetterInterface {
- setter creator void (DOMString myName, TestIndexedSetterInterface item);
- getter TestIndexedSetterInterface (DOMString name);
-};
-
-interface TestIndexedAndNamedSetterInterface {
- setter creator void (unsigned long index, TestIndexedSetterInterface item);
- getter TestIndexedSetterInterface (unsigned long index);
- setter creator void setNamedItem(DOMString name, TestIndexedSetterInterface item);
- getter TestIndexedSetterInterface (DOMString name);
-};
-
-interface TestIndexedAndNamedGetterAndSetterInterface : TestIndexedSetterInterface {
- getter long item(unsigned long index);
- getter DOMString namedItem(DOMString name);
- setter creator void (unsigned long index, long item);
- setter creator void (DOMString name, DOMString item);
- stringifier DOMString ();
- readonly attribute unsigned long length;
-};
-
-interface TestNamedDeleterInterface {
- deleter void (DOMString name);
- getter long (DOMString name);
-};
-
-interface TestNamedDeleterWithRetvalInterface {
- deleter boolean delNamedItem(DOMString name);
- getter long (DOMString name);
-};
-
-interface TestCppKeywordNamedMethodsInterface {
- boolean continue();
- boolean delete();
- long volatile();
-};
-
-[Deprecated="GetAttributeNode", Constructor()]
-interface TestDeprecatedInterface {
- static void alsoDeprecated();
-};
-
-
-[Constructor(Promise<void> promise)]
-interface TestInterfaceWithPromiseConstructorArg {
-};
-
-namespace TestNamespace {
- readonly attribute boolean foo;
- long bar();
-};
-
-partial namespace TestNamespace {
- void baz();
-};
-
-[ClassString="RenamedNamespaceClassName"]
-namespace TestRenamedNamespace {
-};
-
-[ProtoObjectHack]
-namespace TestProtoObjectHackedNamespace {
-};
-
-[SecureContext]
-interface TestSecureContextInterface {
- static void alsoSecureContext();
-};
-
-[Exposed=(Window,Worker)]
-interface TestWorkerExposedInterface {
- [NeedsSubjectPrincipal] void needsSubjectPrincipalMethod();
- [NeedsSubjectPrincipal] attribute boolean needsSubjectPrincipalAttr;
- [NeedsCallerType] void needsCallerTypeMethod();
- [NeedsCallerType] attribute boolean needsCallerTypeAttr;
-};
-
-[HTMLConstructor]
-interface TestHTMLConstructorInterface {
-};
-
-interface TestCEReactionsInterface {
- [CEReactions] setter creator void (unsigned long index, long item);
- [CEReactions] setter creator void (DOMString name, DOMString item);
- [CEReactions] deleter void (DOMString name);
- getter long item(unsigned long index);
- getter DOMString (DOMString name);
- readonly attribute unsigned long length;
-};
diff --git a/dom/bindings/test/TestDictionary.webidl b/dom/bindings/test/TestDictionary.webidl
deleted file mode 100644
index 3dd91bd650..0000000000
--- a/dom/bindings/test/TestDictionary.webidl
+++ /dev/null
@@ -1,9 +0,0 @@
-/* -*- 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/.
- */
-
-dictionary GrandparentDict {
- double someNum;
-}; \ No newline at end of file
diff --git a/dom/bindings/test/TestExampleGen.webidl b/dom/bindings/test/TestExampleGen.webidl
deleted file mode 100644
index a2183c0026..0000000000
--- a/dom/bindings/test/TestExampleGen.webidl
+++ /dev/null
@@ -1,815 +0,0 @@
-/* -*- 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/.
- */
-[Constructor,
- Constructor(DOMString str),
- Constructor(unsigned long num, boolean? boolArg),
- Constructor(TestInterface? iface),
- Constructor(long arg1, IndirectlyImplementedInterface iface),
- Constructor(Date arg1),
- Constructor(ArrayBuffer arrayBuf),
- Constructor(Uint8Array typedArr),
- // Constructor(long arg1, long arg2, (TestInterface or OnlyForUseInConstructor) arg3),
- NamedConstructor=Example,
- NamedConstructor=Example(DOMString str),
- NamedConstructor=Example2(DictForConstructor dict, any any1, object obj1,
- object? obj2, sequence<Dict> seq, optional any any2,
- optional object obj3, optional object? obj4),
- NamedConstructor=Example2((long or MozMap<any>) arg1)
- ]
-interface TestExampleInterface {
- // Integer types
- // XXXbz add tests for throwing versions of all the integer stuff
- readonly attribute byte readonlyByte;
- attribute byte writableByte;
- void passByte(byte arg);
- byte receiveByte();
- void passOptionalByte(optional byte arg);
- void passOptionalByteBeforeRequired(optional byte arg1, byte arg2);
- void passOptionalByteWithDefault(optional byte arg = 0);
- void passOptionalByteWithDefaultBeforeRequired(optional byte arg1 = 0, byte arg2);
- void passNullableByte(byte? arg);
- void passOptionalNullableByte(optional byte? arg);
- void passVariadicByte(byte... arg);
- [Cached, Pure]
- readonly attribute byte cachedByte;
- [StoreInSlot, Constant]
- readonly attribute byte cachedConstantByte;
- [Cached, Pure]
- attribute byte cachedWritableByte;
- [Affects=Nothing]
- attribute byte sideEffectFreeByte;
- [Affects=Nothing, DependsOn=DOMState]
- attribute byte domDependentByte;
- [Affects=Nothing, DependsOn=Nothing]
- readonly attribute byte constantByte;
- [DependsOn=DeviceState, Affects=Nothing]
- readonly attribute byte deviceStateDependentByte;
- [Affects=Nothing]
- byte returnByteSideEffectFree();
- [Affects=Nothing, DependsOn=DOMState]
- byte returnDOMDependentByte();
- [Affects=Nothing, DependsOn=Nothing]
- byte returnConstantByte();
- [DependsOn=DeviceState, Affects=Nothing]
- byte returnDeviceStateDependentByte();
-
- readonly attribute short readonlyShort;
- attribute short writableShort;
- void passShort(short arg);
- short receiveShort();
- void passOptionalShort(optional short arg);
- void passOptionalShortWithDefault(optional short arg = 5);
-
- readonly attribute long readonlyLong;
- attribute long writableLong;
- void passLong(long arg);
- long receiveLong();
- void passOptionalLong(optional long arg);
- void passOptionalLongWithDefault(optional long arg = 7);
-
- readonly attribute long long readonlyLongLong;
- attribute long long writableLongLong;
- void passLongLong(long long arg);
- long long receiveLongLong();
- void passOptionalLongLong(optional long long arg);
- void passOptionalLongLongWithDefault(optional long long arg = -12);
-
- readonly attribute octet readonlyOctet;
- attribute octet writableOctet;
- void passOctet(octet arg);
- octet receiveOctet();
- void passOptionalOctet(optional octet arg);
- void passOptionalOctetWithDefault(optional octet arg = 19);
-
- readonly attribute unsigned short readonlyUnsignedShort;
- attribute unsigned short writableUnsignedShort;
- void passUnsignedShort(unsigned short arg);
- unsigned short receiveUnsignedShort();
- void passOptionalUnsignedShort(optional unsigned short arg);
- void passOptionalUnsignedShortWithDefault(optional unsigned short arg = 2);
-
- readonly attribute unsigned long readonlyUnsignedLong;
- attribute unsigned long writableUnsignedLong;
- void passUnsignedLong(unsigned long arg);
- unsigned long receiveUnsignedLong();
- void passOptionalUnsignedLong(optional unsigned long arg);
- void passOptionalUnsignedLongWithDefault(optional unsigned long arg = 6);
-
- readonly attribute unsigned long long readonlyUnsignedLongLong;
- attribute unsigned long long writableUnsignedLongLong;
- void passUnsignedLongLong(unsigned long long arg);
- unsigned long long receiveUnsignedLongLong();
- void passOptionalUnsignedLongLong(optional unsigned long long arg);
- void passOptionalUnsignedLongLongWithDefault(optional unsigned long long arg = 17);
-
- attribute float writableFloat;
- attribute unrestricted float writableUnrestrictedFloat;
- attribute float? writableNullableFloat;
- attribute unrestricted float? writableNullableUnrestrictedFloat;
- attribute double writableDouble;
- attribute unrestricted double writableUnrestrictedDouble;
- attribute double? writableNullableDouble;
- attribute unrestricted double? writableNullableUnrestrictedDouble;
- void passFloat(float arg1, unrestricted float arg2,
- float? arg3, unrestricted float? arg4,
- double arg5, unrestricted double arg6,
- double? arg7, unrestricted double? arg8,
- sequence<float> arg9, sequence<unrestricted float> arg10,
- sequence<float?> arg11, sequence<unrestricted float?> arg12,
- sequence<double> arg13, sequence<unrestricted double> arg14,
- sequence<double?> arg15, sequence<unrestricted double?> arg16);
- [LenientFloat]
- void passLenientFloat(float arg1, unrestricted float arg2,
- float? arg3, unrestricted float? arg4,
- double arg5, unrestricted double arg6,
- double? arg7, unrestricted double? arg8,
- sequence<float> arg9,
- sequence<unrestricted float> arg10,
- sequence<float?> arg11,
- sequence<unrestricted float?> arg12,
- sequence<double> arg13,
- sequence<unrestricted double> arg14,
- sequence<double?> arg15,
- sequence<unrestricted double?> arg16);
- [LenientFloat]
- attribute float lenientFloatAttr;
- [LenientFloat]
- attribute double lenientDoubleAttr;
-
- // Castable interface types
- // XXXbz add tests for throwing versions of all the castable interface stuff
- TestInterface receiveSelf();
- TestInterface? receiveNullableSelf();
- TestInterface receiveWeakSelf();
- TestInterface? receiveWeakNullableSelf();
- void passSelf(TestInterface arg);
- void passNullableSelf(TestInterface? arg);
- attribute TestInterface nonNullSelf;
- attribute TestInterface? nullableSelf;
- [Cached, Pure]
- readonly attribute TestInterface cachedSelf;
- // Optional arguments
- void passOptionalSelf(optional TestInterface? arg);
- void passOptionalNonNullSelf(optional TestInterface arg);
- void passOptionalSelfWithDefault(optional TestInterface? arg = null);
-
- // Non-wrapper-cache interface types
- [NewObject]
- TestNonWrapperCacheInterface receiveNonWrapperCacheInterface();
- [NewObject]
- TestNonWrapperCacheInterface? receiveNullableNonWrapperCacheInterface();
- [NewObject]
- sequence<TestNonWrapperCacheInterface> receiveNonWrapperCacheInterfaceSequence();
- [NewObject]
- sequence<TestNonWrapperCacheInterface?> receiveNullableNonWrapperCacheInterfaceSequence();
- [NewObject]
- sequence<TestNonWrapperCacheInterface>? receiveNonWrapperCacheInterfaceNullableSequence();
- [NewObject]
- sequence<TestNonWrapperCacheInterface?>? receiveNullableNonWrapperCacheInterfaceNullableSequence();
-
- // Non-castable interface types
- IndirectlyImplementedInterface receiveOther();
- IndirectlyImplementedInterface? receiveNullableOther();
- IndirectlyImplementedInterface receiveWeakOther();
- IndirectlyImplementedInterface? receiveWeakNullableOther();
- void passOther(IndirectlyImplementedInterface arg);
- void passNullableOther(IndirectlyImplementedInterface? arg);
- attribute IndirectlyImplementedInterface nonNullOther;
- attribute IndirectlyImplementedInterface? nullableOther;
- // Optional arguments
- void passOptionalOther(optional IndirectlyImplementedInterface? arg);
- void passOptionalNonNullOther(optional IndirectlyImplementedInterface arg);
- void passOptionalOtherWithDefault(optional IndirectlyImplementedInterface? arg = null);
-
- // External interface types
- TestExternalInterface receiveExternal();
- TestExternalInterface? receiveNullableExternal();
- TestExternalInterface receiveWeakExternal();
- TestExternalInterface? receiveWeakNullableExternal();
- void passExternal(TestExternalInterface arg);
- void passNullableExternal(TestExternalInterface? arg);
- attribute TestExternalInterface nonNullExternal;
- attribute TestExternalInterface? nullableExternal;
- // Optional arguments
- void passOptionalExternal(optional TestExternalInterface? arg);
- void passOptionalNonNullExternal(optional TestExternalInterface arg);
- void passOptionalExternalWithDefault(optional TestExternalInterface? arg = null);
-
- // Callback interface types
- TestCallbackInterface receiveCallbackInterface();
- TestCallbackInterface? receiveNullableCallbackInterface();
- TestCallbackInterface receiveWeakCallbackInterface();
- TestCallbackInterface? receiveWeakNullableCallbackInterface();
- void passCallbackInterface(TestCallbackInterface arg);
- void passNullableCallbackInterface(TestCallbackInterface? arg);
- attribute TestCallbackInterface nonNullCallbackInterface;
- attribute TestCallbackInterface? nullableCallbackInterface;
- // Optional arguments
- void passOptionalCallbackInterface(optional TestCallbackInterface? arg);
- void passOptionalNonNullCallbackInterface(optional TestCallbackInterface arg);
- void passOptionalCallbackInterfaceWithDefault(optional TestCallbackInterface? arg = null);
-
- // Miscellaneous interface tests
- IndirectlyImplementedInterface receiveConsequentialInterface();
- void passConsequentialInterface(IndirectlyImplementedInterface arg);
-
- // Sequence types
- [Cached, Pure]
- readonly attribute sequence<long> readonlySequence;
- [Cached, Pure]
- readonly attribute sequence<Dict> readonlySequenceOfDictionaries;
- [Cached, Pure]
- readonly attribute sequence<Dict>? readonlyNullableSequenceOfDictionaries;
- [Cached, Pure, Frozen]
- readonly attribute sequence<long> readonlyFrozenSequence;
- [Cached, Pure, Frozen]
- readonly attribute sequence<long>? readonlyFrozenNullableSequence;
- sequence<long> receiveSequence();
- sequence<long>? receiveNullableSequence();
- sequence<long?> receiveSequenceOfNullableInts();
- sequence<long?>? receiveNullableSequenceOfNullableInts();
- void passSequence(sequence<long> arg);
- void passNullableSequence(sequence<long>? arg);
- void passSequenceOfNullableInts(sequence<long?> arg);
- void passOptionalSequenceOfNullableInts(optional sequence<long?> arg);
- void passOptionalNullableSequenceOfNullableInts(optional sequence<long?>? arg);
- sequence<TestInterface> receiveCastableObjectSequence();
- sequence<TestCallbackInterface> receiveCallbackObjectSequence();
- sequence<TestInterface?> receiveNullableCastableObjectSequence();
- sequence<TestCallbackInterface?> receiveNullableCallbackObjectSequence();
- sequence<TestInterface>? receiveCastableObjectNullableSequence();
- sequence<TestInterface?>? receiveNullableCastableObjectNullableSequence();
- sequence<TestInterface> receiveWeakCastableObjectSequence();
- sequence<TestInterface?> receiveWeakNullableCastableObjectSequence();
- sequence<TestInterface>? receiveWeakCastableObjectNullableSequence();
- sequence<TestInterface?>? receiveWeakNullableCastableObjectNullableSequence();
- void passCastableObjectSequence(sequence<TestInterface> arg);
- void passNullableCastableObjectSequence(sequence<TestInterface?> arg);
- void passCastableObjectNullableSequence(sequence<TestInterface>? arg);
- void passNullableCastableObjectNullableSequence(sequence<TestInterface?>? arg);
- void passOptionalSequence(optional sequence<long> arg);
- void passOptionalSequenceWithDefaultValue(optional sequence<long> arg = []);
- void passOptionalNullableSequence(optional sequence<long>? arg);
- void passOptionalNullableSequenceWithDefaultValue(optional sequence<long>? arg = null);
- void passOptionalNullableSequenceWithDefaultValue2(optional sequence<long>? arg = []);
- void passOptionalObjectSequence(optional sequence<TestInterface> arg);
- void passExternalInterfaceSequence(sequence<TestExternalInterface> arg);
- void passNullableExternalInterfaceSequence(sequence<TestExternalInterface?> arg);
-
- sequence<DOMString> receiveStringSequence();
- void passStringSequence(sequence<DOMString> arg);
-
- sequence<ByteString> receiveByteStringSequence();
- void passByteStringSequence(sequence<ByteString> arg);
-
- sequence<any> receiveAnySequence();
- sequence<any>? receiveNullableAnySequence();
- //XXXbz No support for sequence of sequence return values yet.
- //sequence<sequence<any>> receiveAnySequenceSequence();
-
- sequence<object> receiveObjectSequence();
- sequence<object?> receiveNullableObjectSequence();
-
- void passSequenceOfSequences(sequence<sequence<long>> arg);
- void passSequenceOfSequencesOfSequences(sequence<sequence<sequence<long>>> arg);
- //XXXbz No support for sequence of sequence return values yet.
- //sequence<sequence<long>> receiveSequenceOfSequences();
-
- // MozMap types
- void passMozMap(MozMap<long> arg);
- void passNullableMozMap(MozMap<long>? arg);
- void passMozMapOfNullableInts(MozMap<long?> arg);
- void passOptionalMozMapOfNullableInts(optional MozMap<long?> arg);
- void passOptionalNullableMozMapOfNullableInts(optional MozMap<long?>? arg);
- void passCastableObjectMozMap(MozMap<TestInterface> arg);
- void passNullableCastableObjectMozMap(MozMap<TestInterface?> arg);
- void passCastableObjectNullableMozMap(MozMap<TestInterface>? arg);
- void passNullableCastableObjectNullableMozMap(MozMap<TestInterface?>? arg);
- void passOptionalMozMap(optional MozMap<long> arg);
- void passOptionalNullableMozMap(optional MozMap<long>? arg);
- void passOptionalNullableMozMapWithDefaultValue(optional MozMap<long>? arg = null);
- void passOptionalObjectMozMap(optional MozMap<TestInterface> arg);
- void passExternalInterfaceMozMap(MozMap<TestExternalInterface> arg);
- void passNullableExternalInterfaceMozMap(MozMap<TestExternalInterface?> arg);
- void passStringMozMap(MozMap<DOMString> arg);
- void passByteStringMozMap(MozMap<ByteString> arg);
- void passMozMapOfMozMaps(MozMap<MozMap<long>> arg);
- MozMap<long> receiveMozMap();
- MozMap<long>? receiveNullableMozMap();
- MozMap<long?> receiveMozMapOfNullableInts();
- MozMap<long?>? receiveNullableMozMapOfNullableInts();
- //XXXbz No support for MozMap of MozMaps return values yet.
- //MozMap<MozMap<long>> receiveMozMapOfMozMaps();
- MozMap<any> receiveAnyMozMap();
-
- // Typed array types
- void passArrayBuffer(ArrayBuffer arg);
- void passNullableArrayBuffer(ArrayBuffer? arg);
- void passOptionalArrayBuffer(optional ArrayBuffer arg);
- void passOptionalNullableArrayBuffer(optional ArrayBuffer? arg);
- void passOptionalNullableArrayBufferWithDefaultValue(optional ArrayBuffer? arg= null);
- void passArrayBufferView(ArrayBufferView arg);
- void passInt8Array(Int8Array arg);
- void passInt16Array(Int16Array arg);
- void passInt32Array(Int32Array arg);
- void passUint8Array(Uint8Array arg);
- void passUint16Array(Uint16Array arg);
- void passUint32Array(Uint32Array arg);
- void passUint8ClampedArray(Uint8ClampedArray arg);
- void passFloat32Array(Float32Array arg);
- void passFloat64Array(Float64Array arg);
- void passSequenceOfArrayBuffers(sequence<ArrayBuffer> arg);
- void passSequenceOfNullableArrayBuffers(sequence<ArrayBuffer?> arg);
- void passMozMapOfArrayBuffers(MozMap<ArrayBuffer> arg);
- void passMozMapOfNullableArrayBuffers(MozMap<ArrayBuffer?> arg);
- void passVariadicTypedArray(Float32Array... arg);
- void passVariadicNullableTypedArray(Float32Array?... arg);
- Uint8Array receiveUint8Array();
- attribute Uint8Array uint8ArrayAttr;
-
- // DOMString types
- void passString(DOMString arg);
- void passNullableString(DOMString? arg);
- void passOptionalString(optional DOMString arg);
- void passOptionalStringWithDefaultValue(optional DOMString arg = "abc");
- void passOptionalNullableString(optional DOMString? arg);
- void passOptionalNullableStringWithDefaultValue(optional DOMString? arg = null);
- void passVariadicString(DOMString... arg);
-
- // ByteString types
- void passByteString(ByteString arg);
- void passNullableByteString(ByteString? arg);
- void passOptionalByteString(optional ByteString arg);
- void passOptionalByteStringWithDefaultValue(optional ByteString arg = "abc");
- void passOptionalNullableByteString(optional ByteString? arg);
- void passOptionalNullableByteStringWithDefaultValue(optional ByteString? arg = null);
- void passVariadicByteString(ByteString... arg);
- void passUnionByteString((ByteString or long) arg);
- void passOptionalUnionByteString(optional (ByteString or long) arg);
- void passOptionalUnionByteStringWithDefaultValue(optional (ByteString or long) arg = "abc");
-
- // USVString types
- void passSVS(USVString arg);
- void passNullableSVS(USVString? arg);
- void passOptionalSVS(optional USVString arg);
- void passOptionalSVSWithDefaultValue(optional USVString arg = "abc");
- void passOptionalNullableSVS(optional USVString? arg);
- void passOptionalNullableSVSWithDefaultValue(optional USVString? arg = null);
- void passVariadicSVS(USVString... arg);
- USVString receiveSVS();
-
- // Enumerated types
- void passEnum(TestEnum arg);
- void passNullableEnum(TestEnum? arg);
- void passOptionalEnum(optional TestEnum arg);
- void passEnumWithDefault(optional TestEnum arg = "a");
- void passOptionalNullableEnum(optional TestEnum? arg);
- void passOptionalNullableEnumWithDefaultValue(optional TestEnum? arg = null);
- void passOptionalNullableEnumWithDefaultValue2(optional TestEnum? arg = "a");
- TestEnum receiveEnum();
- TestEnum? receiveNullableEnum();
- attribute TestEnum enumAttribute;
- readonly attribute TestEnum readonlyEnumAttribute;
-
- // Callback types
- void passCallback(TestCallback arg);
- void passNullableCallback(TestCallback? arg);
- void passOptionalCallback(optional TestCallback arg);
- void passOptionalNullableCallback(optional TestCallback? arg);
- void passOptionalNullableCallbackWithDefaultValue(optional TestCallback? arg = null);
- TestCallback receiveCallback();
- TestCallback? receiveNullableCallback();
- void passNullableTreatAsNullCallback(TestTreatAsNullCallback? arg);
- void passOptionalNullableTreatAsNullCallback(optional TestTreatAsNullCallback? arg);
- void passOptionalNullableTreatAsNullCallbackWithDefaultValue(optional TestTreatAsNullCallback? arg = null);
-
- // Any types
- void passAny(any arg);
- void passVariadicAny(any... arg);
- void passOptionalAny(optional any arg);
- void passAnyDefaultNull(optional any arg = null);
- void passSequenceOfAny(sequence<any> arg);
- void passNullableSequenceOfAny(sequence<any>? arg);
- void passOptionalSequenceOfAny(optional sequence<any> arg);
- void passOptionalNullableSequenceOfAny(optional sequence<any>? arg);
- void passOptionalSequenceOfAnyWithDefaultValue(optional sequence<any>? arg = null);
- void passSequenceOfSequenceOfAny(sequence<sequence<any>> arg);
- void passSequenceOfNullableSequenceOfAny(sequence<sequence<any>?> arg);
- void passNullableSequenceOfNullableSequenceOfAny(sequence<sequence<any>?>? arg);
- void passOptionalNullableSequenceOfNullableSequenceOfAny(optional sequence<sequence<any>?>? arg);
- void passMozMapOfAny(MozMap<any> arg);
- void passNullableMozMapOfAny(MozMap<any>? arg);
- void passOptionalMozMapOfAny(optional MozMap<any> arg);
- void passOptionalNullableMozMapOfAny(optional MozMap<any>? arg);
- void passOptionalMozMapOfAnyWithDefaultValue(optional MozMap<any>? arg = null);
- void passMozMapOfMozMapOfAny(MozMap<MozMap<any>> arg);
- void passMozMapOfNullableMozMapOfAny(MozMap<MozMap<any>?> arg);
- void passNullableMozMapOfNullableMozMapOfAny(MozMap<MozMap<any>?>? arg);
- void passOptionalNullableMozMapOfNullableMozMapOfAny(optional MozMap<MozMap<any>?>? arg);
- void passOptionalNullableMozMapOfNullableSequenceOfAny(optional MozMap<sequence<any>?>? arg);
- void passOptionalNullableSequenceOfNullableMozMapOfAny(optional sequence<MozMap<any>?>? arg);
- any receiveAny();
-
- // object types
- void passObject(object arg);
- void passVariadicObject(object... arg);
- void passNullableObject(object? arg);
- void passVariadicNullableObject(object... arg);
- void passOptionalObject(optional object arg);
- void passOptionalNullableObject(optional object? arg);
- void passOptionalNullableObjectWithDefaultValue(optional object? arg = null);
- void passSequenceOfObject(sequence<object> arg);
- void passSequenceOfNullableObject(sequence<object?> arg);
- void passNullableSequenceOfObject(sequence<object>? arg);
- void passOptionalNullableSequenceOfNullableSequenceOfObject(optional sequence<sequence<object>?>? arg);
- void passOptionalNullableSequenceOfNullableSequenceOfNullableObject(optional sequence<sequence<object?>?>? arg);
- void passMozMapOfObject(MozMap<object> arg);
- object receiveObject();
- object? receiveNullableObject();
-
- // Union types
- void passUnion((object or long) arg);
- // Some union tests are debug-only to avoid creating all those
- // unused union types in opt builds.
-#ifdef DEBUG
- void passUnion2((long or boolean) arg);
- void passUnion3((object or long or boolean) arg);
- void passUnion4((Node or long or boolean) arg);
- void passUnion5((object or boolean) arg);
- void passUnion6((object or DOMString) arg);
- void passUnion7((object or DOMString or long) arg);
- void passUnion8((object or DOMString or boolean) arg);
- void passUnion9((object or DOMString or long or boolean) arg);
- void passUnion10(optional (EventInit or long) arg);
- void passUnion11(optional (CustomEventInit or long) arg);
- void passUnion12(optional (EventInit or long) arg = 5);
- void passUnion13(optional (object or long?) arg = null);
- void passUnion14(optional (object or long?) arg = 5);
- void passUnion15((sequence<long> or long) arg);
- void passUnion16(optional (sequence<long> or long) arg);
- void passUnion17(optional (sequence<long>? or long) arg = 5);
- void passUnion18((sequence<object> or long) arg);
- void passUnion19(optional (sequence<object> or long) arg);
- void passUnion20(optional (sequence<object> or long) arg = []);
- void passUnion21((MozMap<long> or long) arg);
- void passUnion22((MozMap<object> or long) arg);
- void passUnion23((sequence<ImageData> or long) arg);
- void passUnion24((sequence<ImageData?> or long) arg);
- void passUnion25((sequence<sequence<ImageData>> or long) arg);
- void passUnion26((sequence<sequence<ImageData?>> or long) arg);
- void passUnion27(optional (sequence<DOMString> or EventInit) arg);
- void passUnion28(optional (EventInit or sequence<DOMString>) arg);
- void passUnionWithCallback((EventHandler or long) arg);
- void passUnionWithByteString((ByteString or long) arg);
- void passUnionWithMozMap((MozMap<DOMString> or DOMString) arg);
- void passUnionWithMozMapAndSequence((MozMap<DOMString> or sequence<DOMString>) arg);
- void passUnionWithSequenceAndMozMap((sequence<DOMString> or MozMap<DOMString>) arg);
- void passUnionWithSVS((USVString or long) arg);
-#endif
- void passUnionWithNullable((object? or long) arg);
- void passNullableUnion((object or long)? arg);
- void passOptionalUnion(optional (object or long) arg);
- void passOptionalNullableUnion(optional (object or long)? arg);
- void passOptionalNullableUnionWithDefaultValue(optional (object or long)? arg = null);
- //void passUnionWithInterfaces((TestInterface or TestExternalInterface) arg);
- //void passUnionWithInterfacesAndNullable((TestInterface? or TestExternalInterface) arg);
- //void passUnionWithSequence((sequence<object> or long) arg);
- void passUnionWithArrayBuffer((ArrayBuffer or long) arg);
- void passUnionWithString((DOMString or object) arg);
- // Using an enum in a union. Note that we use some enum not declared in our
- // binding file, because UnionTypes.h will need to include the binding header
- // for this enum. Pick an enum from an interface that won't drag in too much
- // stuff.
- void passUnionWithEnum((SupportedType or object) arg);
-
- // Trying to use a callback in a union won't include the test
- // headers, unfortunately, so won't compile.
- // void passUnionWithCallback((TestCallback or long) arg);
- void passUnionWithObject((object or long) arg);
- //void passUnionWithDict((Dict or long) arg);
-
- void passUnionWithDefaultValue1(optional (double or DOMString) arg = "");
- void passUnionWithDefaultValue2(optional (double or DOMString) arg = 1);
- void passUnionWithDefaultValue3(optional (double or DOMString) arg = 1.5);
- void passUnionWithDefaultValue4(optional (float or DOMString) arg = "");
- void passUnionWithDefaultValue5(optional (float or DOMString) arg = 1);
- void passUnionWithDefaultValue6(optional (float or DOMString) arg = 1.5);
- void passUnionWithDefaultValue7(optional (unrestricted double or DOMString) arg = "");
- void passUnionWithDefaultValue8(optional (unrestricted double or DOMString) arg = 1);
- void passUnionWithDefaultValue9(optional (unrestricted double or DOMString) arg = 1.5);
- void passUnionWithDefaultValue10(optional (unrestricted double or DOMString) arg = Infinity);
- void passUnionWithDefaultValue11(optional (unrestricted float or DOMString) arg = "");
- void passUnionWithDefaultValue12(optional (unrestricted float or DOMString) arg = 1);
- void passUnionWithDefaultValue13(optional (unrestricted float or DOMString) arg = Infinity);
- void passUnionWithDefaultValue14(optional (double or ByteString) arg = "");
- void passUnionWithDefaultValue15(optional (double or ByteString) arg = 1);
- void passUnionWithDefaultValue16(optional (double or ByteString) arg = 1.5);
- void passUnionWithDefaultValue17(optional (double or SupportedType) arg = "text/html");
- void passUnionWithDefaultValue18(optional (double or SupportedType) arg = 1);
- void passUnionWithDefaultValue19(optional (double or SupportedType) arg = 1.5);
-
- void passNullableUnionWithDefaultValue1(optional (double or DOMString)? arg = "");
- void passNullableUnionWithDefaultValue2(optional (double or DOMString)? arg = 1);
- void passNullableUnionWithDefaultValue3(optional (double or DOMString)? arg = null);
- void passNullableUnionWithDefaultValue4(optional (float or DOMString)? arg = "");
- void passNullableUnionWithDefaultValue5(optional (float or DOMString)? arg = 1);
- void passNullableUnionWithDefaultValue6(optional (float or DOMString)? arg = null);
- void passNullableUnionWithDefaultValue7(optional (unrestricted double or DOMString)? arg = "");
- void passNullableUnionWithDefaultValue8(optional (unrestricted double or DOMString)? arg = 1);
- void passNullableUnionWithDefaultValue9(optional (unrestricted double or DOMString)? arg = null);
- void passNullableUnionWithDefaultValue10(optional (unrestricted float or DOMString)? arg = "");
- void passNullableUnionWithDefaultValue11(optional (unrestricted float or DOMString)? arg = 1);
- void passNullableUnionWithDefaultValue12(optional (unrestricted float or DOMString)? arg = null);
- void passNullableUnionWithDefaultValue13(optional (double or ByteString)? arg = "");
- void passNullableUnionWithDefaultValue14(optional (double or ByteString)? arg = 1);
- void passNullableUnionWithDefaultValue15(optional (double or ByteString)? arg = 1.5);
- void passNullableUnionWithDefaultValue16(optional (double or ByteString)? arg = null);
- void passNullableUnionWithDefaultValue17(optional (double or SupportedType)? arg = "text/html");
- void passNullableUnionWithDefaultValue18(optional (double or SupportedType)? arg = 1);
- void passNullableUnionWithDefaultValue19(optional (double or SupportedType)? arg = 1.5);
- void passNullableUnionWithDefaultValue20(optional (double or SupportedType)? arg = null);
-
- void passSequenceOfUnions(sequence<(CanvasPattern or CanvasGradient)> arg);
- void passSequenceOfUnions2(sequence<(object or long)> arg);
- void passVariadicUnion((CanvasPattern or CanvasGradient)... arg);
-
- void passSequenceOfNullableUnions(sequence<(CanvasPattern or CanvasGradient)?> arg);
- void passVariadicNullableUnion((CanvasPattern or CanvasGradient)?... arg);
- void passMozMapOfUnions(MozMap<(CanvasPattern or CanvasGradient)> arg);
- // XXXbz no move constructor on some unions
- // void passMozMapOfUnions2(MozMap<(object or long)> arg);
-
- (CanvasPattern or CanvasGradient) receiveUnion();
- (object or long) receiveUnion2();
- (CanvasPattern? or CanvasGradient) receiveUnionContainingNull();
- (CanvasPattern or CanvasGradient)? receiveNullableUnion();
- (object or long)? receiveNullableUnion2();
-
- attribute (CanvasPattern or CanvasGradient) writableUnion;
- attribute (CanvasPattern? or CanvasGradient) writableUnionContainingNull;
- attribute (CanvasPattern or CanvasGradient)? writableNullableUnion;
-
- // Date types
- void passDate(Date arg);
- void passNullableDate(Date? arg);
- void passOptionalDate(optional Date arg);
- void passOptionalNullableDate(optional Date? arg);
- void passOptionalNullableDateWithDefaultValue(optional Date? arg = null);
- void passDateSequence(sequence<Date> arg);
- void passNullableDateSequence(sequence<Date?> arg);
- void passDateMozMap(MozMap<Date> arg);
- Date receiveDate();
- Date? receiveNullableDate();
-
- // Promise types
- void passPromise(Promise<any> arg);
- void passNullablePromise(Promise<any>? arg);
- void passOptionalPromise(optional Promise<any> arg);
- void passOptionalNullablePromise(optional Promise<any>? arg);
- void passOptionalNullablePromiseWithDefaultValue(optional Promise<any>? arg = null);
- void passPromiseSequence(sequence<Promise<any>> arg);
- void passNullablePromiseSequence(sequence<Promise<any>?> arg);
- Promise<any> receivePromise();
- Promise<any> receiveAddrefedPromise();
-
- // binaryNames tests
- void methodRenamedFrom();
- [BinaryName="otherMethodRenamedTo"]
- void otherMethodRenamedFrom();
- void methodRenamedFrom(byte argument);
- readonly attribute byte attributeGetterRenamedFrom;
- attribute byte attributeRenamedFrom;
- [BinaryName="otherAttributeRenamedTo"]
- attribute byte otherAttributeRenamedFrom;
-
- void passDictionary(optional Dict x);
- void passDictionary2(Dict x);
- [Cached, Pure]
- readonly attribute Dict readonlyDictionary;
- [Cached, Pure]
- readonly attribute Dict? readonlyNullableDictionary;
- [Cached, Pure]
- attribute Dict writableDictionary;
- [Cached, Pure, Frozen]
- readonly attribute Dict readonlyFrozenDictionary;
- [Cached, Pure, Frozen]
- readonly attribute Dict? readonlyFrozenNullableDictionary;
- [Cached, Pure, Frozen]
- attribute Dict writableFrozenDictionary;
- Dict receiveDictionary();
- Dict? receiveNullableDictionary();
- void passOtherDictionary(optional GrandparentDict x);
- void passSequenceOfDictionaries(sequence<Dict> x);
- void passMozMapOfDictionaries(MozMap<GrandparentDict> x);
- // No support for nullable dictionaries inside a sequence (nor should there be)
- // void passSequenceOfNullableDictionaries(sequence<Dict?> x);
- void passDictionaryOrLong(optional Dict x);
- void passDictionaryOrLong(long x);
-
- void passDictContainingDict(optional DictContainingDict arg);
- void passDictContainingSequence(optional DictContainingSequence arg);
- DictContainingSequence receiveDictContainingSequence();
- void passVariadicDictionary(Dict... arg);
-
- // EnforceRange/Clamp tests
- void dontEnforceRangeOrClamp(byte arg);
- void doEnforceRange([EnforceRange] byte arg);
- void doClamp([Clamp] byte arg);
- [EnforceRange] attribute byte enforcedByte;
- [Clamp] attribute byte clampedByte;
-
- // Typedefs
- const myLong myLongConstant = 5;
- void exerciseTypedefInterfaces1(AnotherNameForTestInterface arg);
- AnotherNameForTestInterface exerciseTypedefInterfaces2(NullableTestInterface arg);
- void exerciseTypedefInterfaces3(YetAnotherNameForTestInterface arg);
-
- // Deprecated methods and attributes
- [Deprecated="GetAttributeNode"]
- attribute boolean deprecatedAttribute;
- [Deprecated="GetAttributeNode"]
- void deprecatedMethod(boolean arg);
- [Deprecated="GetAttributeNode"]
- void deprecatedMethodWithContext(any arg);
-
- // Static methods and attributes
- static attribute boolean staticAttribute;
- static void staticMethod(boolean arg);
- static void staticMethodWithContext(any arg);
-
- // Deprecated methods and attributes;
- [Deprecated="GetAttributeNode"]
- static attribute boolean staticDeprecatedAttribute;
- [Deprecated="GetAttributeNode"]
- static void staticDeprecatedMethod(boolean arg);
- [Deprecated="GetAttributeNode"]
- static void staticDeprecatedMethodWithContext(any arg);
-
- // Overload resolution tests
- //void overload1(DOMString... strs);
- boolean overload1(TestInterface arg);
- TestInterface overload1(DOMString strs, TestInterface arg);
- void overload2(TestInterface arg);
- void overload2(optional Dict arg);
- void overload2(boolean arg);
- void overload2(DOMString arg);
- void overload2(Date arg);
- void overload3(TestInterface arg);
- void overload3(TestCallback arg);
- void overload3(boolean arg);
- void overload4(TestInterface arg);
- void overload4(TestCallbackInterface arg);
- void overload4(DOMString arg);
- void overload5(long arg);
- void overload5(TestEnum arg);
- void overload6(long arg);
- void overload6(boolean arg);
- void overload7(long arg);
- void overload7(boolean arg);
- void overload7(ByteString arg);
- void overload8(long arg);
- void overload8(TestInterface arg);
- void overload9(long? arg);
- void overload9(DOMString arg);
- void overload10(long? arg);
- void overload10(object arg);
- void overload11(long arg);
- void overload11(DOMString? arg);
- void overload12(long arg);
- void overload12(boolean? arg);
- void overload13(long? arg);
- void overload13(boolean arg);
- void overload14(optional long arg);
- void overload14(TestInterface arg);
- void overload15(long arg);
- void overload15(optional TestInterface arg);
- void overload16(long arg);
- void overload16(optional TestInterface? arg);
- void overload17(sequence<long> arg);
- void overload17(MozMap<long> arg);
- void overload18(MozMap<DOMString> arg);
- void overload18(sequence<DOMString> arg);
- void overload19(sequence<long> arg);
- void overload19(optional Dict arg);
- void overload20(optional Dict arg);
- void overload20(sequence<long> arg);
-
- // Variadic handling
- void passVariadicThirdArg(DOMString arg1, long arg2, TestInterface... arg3);
-
- // Conditionally exposed methods/attributes
- [Pref="abc.def"]
- readonly attribute boolean prefable1;
- [Pref="abc.def"]
- readonly attribute boolean prefable2;
- [Pref="ghi.jkl"]
- readonly attribute boolean prefable3;
- [Pref="ghi.jkl"]
- readonly attribute boolean prefable4;
- [Pref="abc.def"]
- readonly attribute boolean prefable5;
- [Pref="abc.def", Func="nsGenericHTMLElement::TouchEventsEnabled"]
- readonly attribute boolean prefable6;
- [Pref="abc.def", Func="nsGenericHTMLElement::TouchEventsEnabled"]
- readonly attribute boolean prefable7;
- [Pref="ghi.jkl", Func="nsGenericHTMLElement::TouchEventsEnabled"]
- readonly attribute boolean prefable8;
- [Pref="abc.def", Func="nsGenericHTMLElement::TouchEventsEnabled"]
- readonly attribute boolean prefable9;
- [Pref="abc.def"]
- void prefable10();
- [Pref="abc.def", Func="nsGenericHTMLElement::TouchEventsEnabled"]
- void prefable11();
- [Pref="abc.def", Func="TestFuncControlledMember"]
- readonly attribute boolean prefable12;
- [Pref="abc.def", Func="nsGenericHTMLElement::TouchEventsEnabled"]
- void prefable13();
- [Pref="abc.def", Func="TestFuncControlledMember"]
- readonly attribute boolean prefable14;
- [Func="TestFuncControlledMember"]
- readonly attribute boolean prefable15;
- [Func="TestFuncControlledMember"]
- readonly attribute boolean prefable16;
- [Pref="abc.def", Func="TestFuncControlledMember"]
- void prefable17();
- [Func="TestFuncControlledMember"]
- void prefable18();
- [Func="TestFuncControlledMember"]
- void prefable19();
-
- // Conditionally exposed methods/attributes involving [SecureContext]
- [SecureContext]
- readonly attribute boolean conditionalOnSecureContext1;
- [SecureContext, Pref="abc.def"]
- readonly attribute boolean conditionalOnSecureContext2;
- [SecureContext, Pref="abc.def", Func="nsGenericHTMLElement::TouchEventsEnabled"]
- readonly attribute boolean conditionalOnSecureContext3;
- [SecureContext, Pref="abc.def", Func="TestFuncControlledMember"]
- readonly attribute boolean conditionalOnSecureContext4;
- [SecureContext]
- void conditionalOnSecureContext5();
- [SecureContext, Pref="abc.def"]
- void conditionalOnSecureContext6();
- [SecureContext, Pref="abc.def", Func="nsGenericHTMLElement::TouchEventsEnabled"]
- void conditionalOnSecureContext7();
- [SecureContext, Pref="abc.def", Func="TestFuncControlledMember"]
- void conditionalOnSecureContext8();
-
- // Miscellania
- [LenientThis] attribute long attrWithLenientThis;
- [Unforgeable] readonly attribute long unforgeableAttr;
- [Unforgeable, ChromeOnly] readonly attribute long unforgeableAttr2;
- [Unforgeable] long unforgeableMethod();
- [Unforgeable, ChromeOnly] long unforgeableMethod2();
- stringifier;
- void passRenamedInterface(TestRenamedInterface arg);
- [PutForwards=writableByte] readonly attribute TestExampleInterface putForwardsAttr;
- [PutForwards=writableByte, LenientThis] readonly attribute TestExampleInterface putForwardsAttr2;
- [PutForwards=writableByte, ChromeOnly] readonly attribute TestExampleInterface putForwardsAttr3;
- [Throws] void throwingMethod();
- [Throws] attribute boolean throwingAttr;
- [GetterThrows] attribute boolean throwingGetterAttr;
- [SetterThrows] attribute boolean throwingSetterAttr;
- [NeedsSubjectPrincipal] void needsSubjectPrincipalMethod();
- [NeedsSubjectPrincipal] attribute boolean needsSubjectPrincipalAttr;
- [NeedsCallerType] void needsCallerTypeMethod();
- [NeedsCallerType] attribute boolean needsCallerTypeAttr;
- [CEReactions] void ceReactionsMethod();
- [CEReactions] void ceReactionsMethodOverload();
- [CEReactions] void ceReactionsMethodOverload(DOMString bar);
- [CEReactions] attribute boolean ceReactionsAttr;
- legacycaller short(unsigned long arg1, TestInterface arg2);
- void passArgsWithDefaults(optional long arg1,
- optional TestInterface? arg2 = null,
- optional Dict arg3, optional double arg4 = 5.0,
- optional float arg5);
- attribute any jsonifierShouldSkipThis;
- attribute TestParentInterface jsonifierShouldSkipThis2;
- attribute TestCallbackInterface jsonifierShouldSkipThis3;
- jsonifier;
-
- attribute byte dashed-attribute;
- void dashed-method();
-
- // If you add things here, add them to TestCodeGen and TestJSImplGen as well
-};
-
-interface TestExampleProxyInterface {
- getter long longIndexedGetter(unsigned long ix);
- setter creator void longIndexedSetter(unsigned long y, long z);
- stringifier DOMString myStringifier();
- getter short shortNameGetter(DOMString nom);
- deleter void (DOMString nomnom);
- setter creator void shortNamedSetter(DOMString me, short value);
-};
-
-[Exposed=(Window,Worker)]
-interface TestExampleWorkerInterface {
- [NeedsSubjectPrincipal] void needsSubjectPrincipalMethod();
- [NeedsSubjectPrincipal] attribute boolean needsSubjectPrincipalAttr;
- [NeedsCallerType] void needsCallerTypeMethod();
- [NeedsCallerType] attribute boolean needsCallerTypeAttr;
-};
diff --git a/dom/bindings/test/TestFunctions.cpp b/dom/bindings/test/TestFunctions.cpp
deleted file mode 100644
index f05c92b48d..0000000000
--- a/dom/bindings/test/TestFunctions.cpp
+++ /dev/null
@@ -1,94 +0,0 @@
-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim: set ts=8 sts=2 et sw=2 tw=80: */
-/* 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/. */
-
-#include "mozilla/dom/TestFunctions.h"
-#include "mozilla/dom/TestFunctionsBinding.h"
-#include "nsStringBuffer.h"
-
-namespace mozilla {
-namespace dom {
-
-/* static */ TestFunctions*
-TestFunctions::Constructor(GlobalObject& aGlobal, ErrorResult& aRv)
-{
- return new TestFunctions;
-}
-
-/* static */ void
-TestFunctions::ThrowUncatchableException(GlobalObject& aGlobal,
- ErrorResult& aRv)
-{
- aRv.ThrowUncatchableException();
-}
-
-/* static */ Promise*
-TestFunctions::PassThroughPromise(GlobalObject& aGlobal, Promise& aPromise)
-{
- return &aPromise;
-}
-
-/* static */ already_AddRefed<Promise>
-TestFunctions::PassThroughCallbackPromise(GlobalObject& aGlobal,
- PromiseReturner& aCallback,
- ErrorResult& aRv)
-{
- return aCallback.Call(aRv);
-}
-
-void
-TestFunctions::SetStringData(const nsAString& aString)
-{
- mStringData = aString;
-}
-
-void
-TestFunctions::GetStringDataAsAString(nsAString& aString)
-{
- aString = mStringData;
-}
-
-void
-TestFunctions::GetStringDataAsAString(uint32_t aLength, nsAString& aString)
-{
- MOZ_RELEASE_ASSERT(aLength <= mStringData.Length(),
- "Bogus test passing in a too-big length");
- aString.Assign(mStringData.BeginReading(), aLength);
-}
-
-void
-TestFunctions::GetStringDataAsDOMString(const Optional<uint32_t>& aLength,
- DOMString& aString)
-{
- uint32_t length;
- if (aLength.WasPassed()) {
- length = aLength.Value();
- MOZ_RELEASE_ASSERT(length <= mStringData.Length(),
- "Bogus test passing in a too-big length");
- } else {
- length = mStringData.Length();
- }
-
- nsStringBuffer* buf = nsStringBuffer::FromString(mStringData);
- if (buf) {
- aString.SetStringBuffer(buf, length);
- return;
- }
-
- // We better have an empty mStringData; otherwise why did we not have a string
- // buffer?
- MOZ_RELEASE_ASSERT(length == 0, "Why no stringbuffer?");
- // No need to do anything here; aString is already empty.
-}
-
-bool
-TestFunctions::WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto,
- JS::MutableHandle<JSObject*> aWrapper)
-{
- return TestFunctionsBinding::Wrap(aCx, this, aGivenProto, aWrapper);
-}
-
-}
-}
diff --git a/dom/bindings/test/TestFunctions.h b/dom/bindings/test/TestFunctions.h
deleted file mode 100644
index b35464824a..0000000000
--- a/dom/bindings/test/TestFunctions.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim: set ts=8 sts=2 et sw=2 tw=80: */
-/* 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/. */
-
-#ifndef mozilla_dom_TestFunctions_h
-#define mozilla_dom_TestFunctions_h
-
-#include "mozilla/ErrorResult.h"
-#include "mozilla/dom/BindingDeclarations.h"
-#include "mozilla/dom/NonRefcountedDOMObject.h"
-#include "nsString.h"
-
-namespace mozilla {
-namespace dom {
-
-class Promise;
-class PromiseReturner;
-
-class TestFunctions : public NonRefcountedDOMObject {
-public:
- static TestFunctions* Constructor(GlobalObject& aGlobal, ErrorResult& aRv);
-
- static void
- ThrowUncatchableException(GlobalObject& aGlobal, ErrorResult& aRv);
-
- static Promise*
- PassThroughPromise(GlobalObject& aGlobal, Promise& aPromise);
-
- static already_AddRefed<Promise>
- PassThroughCallbackPromise(GlobalObject& aGlobal,
- PromiseReturner& aCallback,
- ErrorResult& aRv);
-
- void SetStringData(const nsAString& aString);
-
- void GetStringDataAsAString(nsAString& aString);
- void GetStringDataAsAString(uint32_t aLength, nsAString& aString);
- void GetStringDataAsDOMString(const Optional<uint32_t>& aLength,
- DOMString& aString);
-
- bool WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto,
- JS::MutableHandle<JSObject*> aWrapper);
-private:
- nsString mStringData;
-};
-
-} // namespace dom
-} // namespace mozilla
-
-#endif // mozilla_dom_TestFunctions_h
diff --git a/dom/bindings/test/TestInterfaceIterableDouble.cpp b/dom/bindings/test/TestInterfaceIterableDouble.cpp
deleted file mode 100644
index 33a4c97d1f..0000000000
--- a/dom/bindings/test/TestInterfaceIterableDouble.cpp
+++ /dev/null
@@ -1,82 +0,0 @@
-/* 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/. */
-
-#include "mozilla/dom/TestInterfaceIterableDouble.h"
-#include "mozilla/dom/TestInterfaceJSMaplikeSetlikeIterableBinding.h"
-#include "nsPIDOMWindow.h"
-#include "mozilla/dom/BindingUtils.h"
-
-namespace mozilla {
-namespace dom {
-
-NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(TestInterfaceIterableDouble, mParent)
-
-NS_IMPL_CYCLE_COLLECTING_ADDREF(TestInterfaceIterableDouble)
-NS_IMPL_CYCLE_COLLECTING_RELEASE(TestInterfaceIterableDouble)
-
-NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(TestInterfaceIterableDouble)
-NS_WRAPPERCACHE_INTERFACE_MAP_ENTRY
-NS_INTERFACE_MAP_ENTRY(nsISupports)
-NS_INTERFACE_MAP_END
-
-TestInterfaceIterableDouble::TestInterfaceIterableDouble(nsPIDOMWindowInner* aParent)
- : mParent(aParent)
-{
- mValues.AppendElement(std::pair<nsString, nsString>(NS_LITERAL_STRING("a"),
- NS_LITERAL_STRING("b")));
- mValues.AppendElement(std::pair<nsString, nsString>(NS_LITERAL_STRING("c"),
- NS_LITERAL_STRING("d")));
- mValues.AppendElement(std::pair<nsString, nsString>(NS_LITERAL_STRING("e"),
- NS_LITERAL_STRING("f")));
-}
-
-//static
-already_AddRefed<TestInterfaceIterableDouble>
-TestInterfaceIterableDouble::Constructor(const GlobalObject& aGlobal,
- ErrorResult& aRv)
-{
- nsCOMPtr<nsPIDOMWindowInner> window = do_QueryInterface(aGlobal.GetAsSupports());
- if (!window) {
- aRv.Throw(NS_ERROR_FAILURE);
- return nullptr;
- }
-
- RefPtr<TestInterfaceIterableDouble> r = new TestInterfaceIterableDouble(window);
- return r.forget();
-}
-
-JSObject*
-TestInterfaceIterableDouble::WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto)
-{
- return TestInterfaceIterableDoubleBinding::Wrap(aCx, this, aGivenProto);
-}
-
-nsPIDOMWindowInner*
-TestInterfaceIterableDouble::GetParentObject() const
-{
- return mParent;
-}
-
-size_t
-TestInterfaceIterableDouble::GetIterableLength()
-{
- return mValues.Length();
-}
-
-nsAString&
-TestInterfaceIterableDouble::GetKeyAtIndex(uint32_t aIndex)
-{
- MOZ_ASSERT(aIndex < mValues.Length());
- return mValues.ElementAt(aIndex).first;
-}
-
-nsAString&
-TestInterfaceIterableDouble::GetValueAtIndex(uint32_t aIndex)
-{
- MOZ_ASSERT(aIndex < mValues.Length());
- return mValues.ElementAt(aIndex).second;
-}
-
-} // namespace dom
-} // namespace mozilla
diff --git a/dom/bindings/test/TestInterfaceIterableDouble.h b/dom/bindings/test/TestInterfaceIterableDouble.h
deleted file mode 100644
index 1e9ff7acd3..0000000000
--- a/dom/bindings/test/TestInterfaceIterableDouble.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim:set ts=2 sw=2 sts=2 et cindent: */
-/* 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/. */
-
-#ifndef mozilla_dom_TestInterfaceIterableDouble_h
-#define mozilla_dom_TestInterfaceIterableDouble_h
-
-#include "nsWrapperCache.h"
-#include "nsCOMPtr.h"
-
-class nsPIDOMWindowInner;
-
-namespace mozilla {
-
-class ErrorResult;
-
-namespace dom {
-
-class GlobalObject;
-
-// Implementation of test binding for webidl iterable interfaces, using
-// primitives for value type
-class TestInterfaceIterableDouble final : public nsISupports,
- public nsWrapperCache
-{
-public:
- NS_DECL_CYCLE_COLLECTING_ISUPPORTS
- NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(TestInterfaceIterableDouble)
-
- explicit TestInterfaceIterableDouble(nsPIDOMWindowInner* aParent);
- nsPIDOMWindowInner* GetParentObject() const;
- virtual JSObject* WrapObject(JSContext* aCx,
- JS::Handle<JSObject*> aGivenProto) override;
- static already_AddRefed<TestInterfaceIterableDouble>
- Constructor(const GlobalObject& aGlobal, ErrorResult& rv);
-
- size_t GetIterableLength();
- nsAString& GetKeyAtIndex(uint32_t aIndex);
- nsAString& GetValueAtIndex(uint32_t aIndex);
-private:
- virtual ~TestInterfaceIterableDouble() {}
- nsCOMPtr<nsPIDOMWindowInner> mParent;
- nsTArray<std::pair<nsString, nsString>> mValues;
-};
-
-} // namespace dom
-} // namespace mozilla
-
-#endif // mozilla_dom_TestInterfaceIterableDouble_h
diff --git a/dom/bindings/test/TestInterfaceIterableDoubleUnion.cpp b/dom/bindings/test/TestInterfaceIterableDoubleUnion.cpp
deleted file mode 100644
index 29151a4c56..0000000000
--- a/dom/bindings/test/TestInterfaceIterableDoubleUnion.cpp
+++ /dev/null
@@ -1,83 +0,0 @@
-/* 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/. */
-
-#include "mozilla/dom/TestInterfaceIterableDoubleUnion.h"
-#include "mozilla/dom/TestInterfaceJSMaplikeSetlikeIterableBinding.h"
-#include "nsPIDOMWindow.h"
-#include "mozilla/dom/BindingUtils.h"
-
-namespace mozilla {
-namespace dom {
-
-NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(TestInterfaceIterableDoubleUnion, mParent)
-
-NS_IMPL_CYCLE_COLLECTING_ADDREF(TestInterfaceIterableDoubleUnion)
-NS_IMPL_CYCLE_COLLECTING_RELEASE(TestInterfaceIterableDoubleUnion)
-
-NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(TestInterfaceIterableDoubleUnion)
-NS_WRAPPERCACHE_INTERFACE_MAP_ENTRY
-NS_INTERFACE_MAP_ENTRY(nsISupports)
-NS_INTERFACE_MAP_END
-
-TestInterfaceIterableDoubleUnion::TestInterfaceIterableDoubleUnion(nsPIDOMWindowInner* aParent)
- : mParent(aParent)
-{
- OwningStringOrLong a;
- a.SetAsLong() = 1;
- mValues.AppendElement(std::pair<nsString, OwningStringOrLong>(NS_LITERAL_STRING("long"),
- a));
- a.SetAsString() = NS_LITERAL_STRING("a");
- mValues.AppendElement(std::pair<nsString, OwningStringOrLong>(NS_LITERAL_STRING("string"),
- a));
-}
-
-//static
-already_AddRefed<TestInterfaceIterableDoubleUnion>
-TestInterfaceIterableDoubleUnion::Constructor(const GlobalObject& aGlobal,
- ErrorResult& aRv)
-{
- nsCOMPtr<nsPIDOMWindowInner> window = do_QueryInterface(aGlobal.GetAsSupports());
- if (!window) {
- aRv.Throw(NS_ERROR_FAILURE);
- return nullptr;
- }
-
- RefPtr<TestInterfaceIterableDoubleUnion> r = new TestInterfaceIterableDoubleUnion(window);
- return r.forget();
-}
-
-JSObject*
-TestInterfaceIterableDoubleUnion::WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto)
-{
- return TestInterfaceIterableDoubleUnionBinding::Wrap(aCx, this, aGivenProto);
-}
-
-nsPIDOMWindowInner*
-TestInterfaceIterableDoubleUnion::GetParentObject() const
-{
- return mParent;
-}
-
-size_t
-TestInterfaceIterableDoubleUnion::GetIterableLength()
-{
- return mValues.Length();
-}
-
-nsAString&
-TestInterfaceIterableDoubleUnion::GetKeyAtIndex(uint32_t aIndex)
-{
- MOZ_ASSERT(aIndex < mValues.Length());
- return mValues.ElementAt(aIndex).first;
-}
-
-OwningStringOrLong&
-TestInterfaceIterableDoubleUnion::GetValueAtIndex(uint32_t aIndex)
-{
- MOZ_ASSERT(aIndex < mValues.Length());
- return mValues.ElementAt(aIndex).second;
-}
-
-} // namespace dom
-} // namespace mozilla
diff --git a/dom/bindings/test/TestInterfaceIterableDoubleUnion.h b/dom/bindings/test/TestInterfaceIterableDoubleUnion.h
deleted file mode 100644
index ff6ea21752..0000000000
--- a/dom/bindings/test/TestInterfaceIterableDoubleUnion.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim:set ts=2 sw=2 sts=2 et cindent: */
-/* 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/. */
-
-#ifndef mozilla_dom_TestInterfaceIterableDoubleUnion_h
-#define mozilla_dom_TestInterfaceIterableDoubleUnion_h
-
-#include "nsWrapperCache.h"
-#include "nsCOMPtr.h"
-
-class nsPIDOMWindowInner;
-
-namespace mozilla {
-
-class ErrorResult;
-
-namespace dom {
-
-class GlobalObject;
-
-// Implementation of test binding for webidl iterable interfaces, using
-// primitives for value type
-class TestInterfaceIterableDoubleUnion final : public nsISupports,
- public nsWrapperCache
-{
-public:
- NS_DECL_CYCLE_COLLECTING_ISUPPORTS
- NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(TestInterfaceIterableDoubleUnion)
-
- explicit TestInterfaceIterableDoubleUnion(nsPIDOMWindowInner* aParent);
- nsPIDOMWindowInner* GetParentObject() const;
- virtual JSObject* WrapObject(JSContext* aCx,
- JS::Handle<JSObject*> aGivenProto) override;
- static already_AddRefed<TestInterfaceIterableDoubleUnion>
- Constructor(const GlobalObject& aGlobal, ErrorResult& rv);
-
- size_t GetIterableLength();
- nsAString& GetKeyAtIndex(uint32_t aIndex);
- OwningStringOrLong& GetValueAtIndex(uint32_t aIndex);
-private:
- virtual ~TestInterfaceIterableDoubleUnion() {}
- nsCOMPtr<nsPIDOMWindowInner> mParent;
- nsTArray<std::pair<nsString, OwningStringOrLong>> mValues;
-};
-
-} // namespace dom
-} // namespace mozilla
-
-#endif // mozilla_dom_TestInterfaceIterableDoubleUnion_h
diff --git a/dom/bindings/test/TestInterfaceIterableSingle.cpp b/dom/bindings/test/TestInterfaceIterableSingle.cpp
deleted file mode 100644
index 5f8d6c640f..0000000000
--- a/dom/bindings/test/TestInterfaceIterableSingle.cpp
+++ /dev/null
@@ -1,77 +0,0 @@
-/* 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/. */
-
-#include "mozilla/dom/TestInterfaceIterableSingle.h"
-#include "mozilla/dom/TestInterfaceJSMaplikeSetlikeIterableBinding.h"
-#include "nsPIDOMWindow.h"
-#include "mozilla/dom/BindingUtils.h"
-
-namespace mozilla {
-namespace dom {
-
-NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(TestInterfaceIterableSingle, mParent)
-
-NS_IMPL_CYCLE_COLLECTING_ADDREF(TestInterfaceIterableSingle)
-NS_IMPL_CYCLE_COLLECTING_RELEASE(TestInterfaceIterableSingle)
-
-NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(TestInterfaceIterableSingle)
-NS_WRAPPERCACHE_INTERFACE_MAP_ENTRY
-NS_INTERFACE_MAP_ENTRY(nsISupports)
-NS_INTERFACE_MAP_END
-
-TestInterfaceIterableSingle::TestInterfaceIterableSingle(nsPIDOMWindowInner* aParent)
- : mParent(aParent)
-{
- for (int i = 0; i < 3; ++i) {
- mValues.AppendElement(i);
- }
-}
-
-//static
-already_AddRefed<TestInterfaceIterableSingle>
-TestInterfaceIterableSingle::Constructor(const GlobalObject& aGlobal,
- ErrorResult& aRv)
-{
- nsCOMPtr<nsPIDOMWindowInner> window = do_QueryInterface(aGlobal.GetAsSupports());
- if (!window) {
- aRv.Throw(NS_ERROR_FAILURE);
- return nullptr;
- }
-
- RefPtr<TestInterfaceIterableSingle> r = new TestInterfaceIterableSingle(window);
- return r.forget();
-}
-
-JSObject*
-TestInterfaceIterableSingle::WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto)
-{
- return TestInterfaceIterableSingleBinding::Wrap(aCx, this, aGivenProto);
-}
-
-nsPIDOMWindowInner*
-TestInterfaceIterableSingle::GetParentObject() const
-{
- return mParent;
-}
-
-uint32_t
-TestInterfaceIterableSingle::Length() const
-{
- return mValues.Length();
-}
-
-int32_t
-TestInterfaceIterableSingle::IndexedGetter(uint32_t aIndex, bool& aFound) const
-{
- if (aIndex >= mValues.Length()) {
- aFound = false;
- return 0;
- }
-
- aFound = true;
- return mValues[aIndex];
-}
-
-} // namespace dom
-} // namespace mozilla
diff --git a/dom/bindings/test/TestInterfaceIterableSingle.h b/dom/bindings/test/TestInterfaceIterableSingle.h
deleted file mode 100644
index a071ada8b0..0000000000
--- a/dom/bindings/test/TestInterfaceIterableSingle.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim:set ts=2 sw=2 sts=2 et cindent: */
-/* 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/. */
-
-#ifndef mozilla_dom_TestInterfaceIterableSingle_h
-#define mozilla_dom_TestInterfaceIterableSingle_h
-
-#include "nsWrapperCache.h"
-#include "nsCOMPtr.h"
-
-class nsPIDOMWindowInner;
-
-namespace mozilla {
-
-class ErrorResult;
-
-namespace dom {
-
-class GlobalObject;
-
-// Implementation of test binding for webidl iterable interfaces, using
-// primitives for value type
-class TestInterfaceIterableSingle final : public nsISupports,
- public nsWrapperCache
-{
-public:
- NS_DECL_CYCLE_COLLECTING_ISUPPORTS
- NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(TestInterfaceIterableSingle)
-
- explicit TestInterfaceIterableSingle(nsPIDOMWindowInner* aParent);
- nsPIDOMWindowInner* GetParentObject() const;
- virtual JSObject* WrapObject(JSContext* aCx,
- JS::Handle<JSObject*> aGivenProto) override;
- static already_AddRefed<TestInterfaceIterableSingle>
- Constructor(const GlobalObject& aGlobal, ErrorResult& rv);
-
- uint32_t Length() const;
- int32_t IndexedGetter(uint32_t aIndex, bool& aFound) const;
-
-private:
- virtual ~TestInterfaceIterableSingle() {}
- nsCOMPtr<nsPIDOMWindowInner> mParent;
- nsTArray<int32_t> mValues;
-};
-
-} // namespace dom
-} // namespace mozilla
-
-#endif // mozilla_dom_TestInterfaceIterableSingle_h
diff --git a/dom/bindings/test/TestInterfaceJS.js b/dom/bindings/test/TestInterfaceJS.js
deleted file mode 100644
index 1a5bf8e61d..0000000000
--- a/dom/bindings/test/TestInterfaceJS.js
+++ /dev/null
@@ -1,166 +0,0 @@
-/* -*- Mode: JavaScript; 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/. */
-
-"use strict";
-const Cu = Components.utils;
-const Ci = Components.interfaces;
-
-Cu.import("resource://gre/modules/XPCOMUtils.jsm");
-Cu.import("resource://gre/modules/Services.jsm");
-
-function TestInterfaceJS(anyArg, objectArg) {}
-
-TestInterfaceJS.prototype = {
- classID: Components.ID("{2ac4e026-cf25-47d5-b067-78d553c3cad8}"),
- contractID: "@mozilla.org/dom/test-interface-js;1",
- QueryInterface: XPCOMUtils.generateQI([Ci.nsISupports,
- Ci.nsIDOMGlobalPropertyInitializer]),
-
- init: function(win) { this._win = win; },
-
- __init: function (anyArg, objectArg, dictionaryArg) {
- this._anyAttr = undefined;
- this._objectAttr = null;
- this._anyArg = anyArg;
- this._objectArg = objectArg;
- this._dictionaryArg = dictionaryArg;
- this._cachedAttr = 15;
- },
-
- get anyArg() { return this._anyArg; },
- get objectArg() { return this._objectArg; },
- get dictionaryArg() { return this._dictionaryArg; },
- get anyAttr() { return this._anyAttr; },
- set anyAttr(val) { this._anyAttr = val; },
- get objectAttr() { return this._objectAttr; },
- set objectAttr(val) { this._objectAttr = val; },
- get dictionaryAttr() { return this._dictionaryAttr; },
- set dictionaryAttr(val) { this._dictionaryAttr = val; },
- pingPongAny: function(any) { return any; },
- pingPongObject: function(obj) { return obj; },
- pingPongObjectOrString: function(objectOrString) { return objectOrString; },
- pingPongDictionary: function(dict) { return dict; },
- pingPongDictionaryOrLong: function(dictOrLong) { return dictOrLong.anyMember || dictOrLong; },
- pingPongMap: function(map) { return JSON.stringify(map); },
- objectSequenceLength: function(seq) { return seq.length; },
- anySequenceLength: function(seq) { return seq.length; },
-
-
- getCallerPrincipal: function() { return Cu.getWebIDLCallerPrincipal().origin; },
-
- convertSVS: function(svs) { return svs; },
-
- pingPongUnion: function(x) { return x; },
- pingPongUnionContainingNull: function(x) { return x; },
- pingPongNullableUnion: function(x) { return x; },
- returnBadUnion: function(x) { return 3; },
-
- get cachedAttr() { return this._cachedAttr; },
- setCachedAttr: function(n) { this._cachedAttr = n; },
- clearCachedAttrCache: function () { this.__DOM_IMPL__._clearCachedCachedAttrValue(); },
-
- testSequenceOverload: function(arg) {},
- testSequenceUnion: function(arg) {},
-
- testThrowError: function() {
- throw new this._win.Error("We are an Error");
- },
-
- testThrowDOMException: function() {
- throw new this._win.DOMException("We are a DOMException",
- "NotSupportedError");
- },
-
- testThrowTypeError: function() {
- throw new this._win.TypeError("We are a TypeError");
- },
-
- testThrowCallbackError: function(callback) {
- callback();
- },
-
- testThrowXraySelfHosted: function() {
- this._win.Array.indexOf();
- },
-
- testThrowSelfHosted: function() {
- Array.indexOf();
- },
-
- testPromiseWithThrowingChromePromiseInit: function() {
- return new this._win.Promise(function() {
- noSuchMethodExistsYo1();
- })
- },
-
- testPromiseWithThrowingContentPromiseInit: function(func) {
- return new this._win.Promise(func);
- },
-
- testPromiseWithDOMExceptionThrowingPromiseInit: function() {
- return new this._win.Promise(() => {
- throw new this._win.DOMException("We are a second DOMException",
- "NotFoundError");
- })
- },
-
- testPromiseWithThrowingChromeThenFunction: function() {
- return this._win.Promise.resolve(5).then(function() {
- noSuchMethodExistsYo2();
- });
- },
-
- testPromiseWithThrowingContentThenFunction: function(func) {
- return this._win.Promise.resolve(10).then(func);
- },
-
- testPromiseWithDOMExceptionThrowingThenFunction: function() {
- return this._win.Promise.resolve(5).then(() => {
- throw new this._win.DOMException("We are a third DOMException",
- "NetworkError");
- });
- },
-
- testPromiseWithThrowingChromeThenable: function() {
- var thenable = {
- then: function() {
- noSuchMethodExistsYo3()
- }
- };
- return new this._win.Promise(function(resolve) {
- resolve(thenable)
- });
- },
-
- testPromiseWithThrowingContentThenable: function(thenable) {
- // Waive Xrays on the thenable, because we're calling resolve() in the
- // chrome compartment, so that's the compartment the "then" property get
- // will happen in, and if we leave the Xray in place the function-valued
- // property won't return the function.
- return this._win.Promise.resolve(Cu.waiveXrays(thenable));
- },
-
- testPromiseWithDOMExceptionThrowingThenable: function() {
- var thenable = {
- then: () => {
- throw new this._win.DOMException("We are a fourth DOMException",
- "TypeMismatchError");
- }
- };
- return new this._win.Promise(function(resolve) {
- resolve(thenable)
- });
- },
-
- get onsomething() {
- return this.__DOM_IMPL__.getEventHandler("onsomething");
- },
-
- set onsomething(val) {
- this.__DOM_IMPL__.setEventHandler("onsomething", val);
- }
-};
-
-this.NSGetFactory = XPCOMUtils.generateNSGetFactory([TestInterfaceJS])
diff --git a/dom/bindings/test/TestInterfaceJS.manifest b/dom/bindings/test/TestInterfaceJS.manifest
deleted file mode 100644
index 161a421560..0000000000
--- a/dom/bindings/test/TestInterfaceJS.manifest
+++ /dev/null
@@ -1,4 +0,0 @@
-component {2ac4e026-cf25-47d5-b067-78d553c3cad8} TestInterfaceJS.js
-contract @mozilla.org/dom/test-interface-js;1 {2ac4e026-cf25-47d5-b067-78d553c3cad8}
-component {4bc6f6f3-e005-4f0a-b42d-4d1663a9013a} TestInterfaceJSMaplike.js
-contract @mozilla.org/dom/test-interface-js-maplike;1 {4bc6f6f3-e005-4f0a-b42d-4d1663a9013a}
diff --git a/dom/bindings/test/TestInterfaceJSMaplike.js b/dom/bindings/test/TestInterfaceJSMaplike.js
deleted file mode 100644
index b108ef5b61..0000000000
--- a/dom/bindings/test/TestInterfaceJSMaplike.js
+++ /dev/null
@@ -1,38 +0,0 @@
-/* -*- Mode: JavaScript; 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/. */
-
-"use strict";
-const Cu = Components.utils;
-const Ci = Components.interfaces;
-
-Cu.import("resource://gre/modules/XPCOMUtils.jsm");
-Cu.import("resource://gre/modules/Services.jsm");
-
-function TestInterfaceJSMaplike() {}
-
-TestInterfaceJSMaplike.prototype = {
- classID: Components.ID("{4bc6f6f3-e005-4f0a-b42d-4d1663a9013a}"),
- contractID: "@mozilla.org/dom/test-interface-js-maplike;1",
- QueryInterface: XPCOMUtils.generateQI([Ci.nsISupports,
- Ci.nsIDOMGlobalPropertyInitializer]),
-
- init: function(win) { this._win = win; },
-
- __init: function () {},
-
- setInternal: function(aKey, aValue) {
- return this.__DOM_IMPL__.__set(aKey, aValue);
- },
-
- deleteInternal: function(aKey) {
- return this.__DOM_IMPL__.__delete(aKey);
- },
-
- clearInternal: function() {
- return this.__DOM_IMPL__.__clear();
- }
-};
-
-this.NSGetFactory = XPCOMUtils.generateNSGetFactory([TestInterfaceJSMaplike])
diff --git a/dom/bindings/test/TestInterfaceMaplike.cpp b/dom/bindings/test/TestInterfaceMaplike.cpp
deleted file mode 100644
index 4abace83c1..0000000000
--- a/dom/bindings/test/TestInterfaceMaplike.cpp
+++ /dev/null
@@ -1,84 +0,0 @@
-/* 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/. */
-
-#include "mozilla/dom/TestInterfaceMaplike.h"
-#include "mozilla/dom/TestInterfaceJSMaplikeSetlikeIterableBinding.h"
-#include "nsPIDOMWindow.h"
-#include "mozilla/dom/BindingUtils.h"
-
-namespace mozilla {
-namespace dom {
-
-NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(TestInterfaceMaplike, mParent)
-
-NS_IMPL_CYCLE_COLLECTING_ADDREF(TestInterfaceMaplike)
-NS_IMPL_CYCLE_COLLECTING_RELEASE(TestInterfaceMaplike)
-
-NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(TestInterfaceMaplike)
-NS_WRAPPERCACHE_INTERFACE_MAP_ENTRY
-NS_INTERFACE_MAP_ENTRY(nsISupports)
-NS_INTERFACE_MAP_END
-
-TestInterfaceMaplike::TestInterfaceMaplike(nsPIDOMWindowInner* aParent)
-: mParent(aParent)
-{
-}
-
-//static
-already_AddRefed<TestInterfaceMaplike>
-TestInterfaceMaplike::Constructor(const GlobalObject& aGlobal,
- ErrorResult& aRv)
-{
- nsCOMPtr<nsPIDOMWindowInner> window = do_QueryInterface(aGlobal.GetAsSupports());
- if (!window) {
- aRv.Throw(NS_ERROR_FAILURE);
- return nullptr;
- }
-
- RefPtr<TestInterfaceMaplike> r = new TestInterfaceMaplike(window);
- return r.forget();
-}
-
-JSObject*
-TestInterfaceMaplike::WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto)
-{
- return TestInterfaceMaplikeBinding::Wrap(aCx, this, aGivenProto);
-}
-
-nsPIDOMWindowInner*
-TestInterfaceMaplike::GetParentObject() const
-{
- return mParent;
-}
-
-void
-TestInterfaceMaplike::SetInternal(const nsAString& aKey, int32_t aValue)
-{
- ErrorResult rv;
- TestInterfaceMaplikeBinding::MaplikeHelpers::Set(this, aKey, aValue, rv);
-}
-
-void
-TestInterfaceMaplike::ClearInternal()
-{
- ErrorResult rv;
- TestInterfaceMaplikeBinding::MaplikeHelpers::Clear(this, rv);
-}
-
-bool
-TestInterfaceMaplike::DeleteInternal(const nsAString& aKey)
-{
- ErrorResult rv;
- return TestInterfaceMaplikeBinding::MaplikeHelpers::Delete(this, aKey, rv);
-}
-
-bool
-TestInterfaceMaplike::HasInternal(const nsAString& aKey)
-{
- ErrorResult rv;
- return TestInterfaceMaplikeBinding::MaplikeHelpers::Has(this, aKey, rv);
-}
-
-} // namespace dom
-} // namespace mozilla
diff --git a/dom/bindings/test/TestInterfaceMaplike.h b/dom/bindings/test/TestInterfaceMaplike.h
deleted file mode 100644
index c012a7a214..0000000000
--- a/dom/bindings/test/TestInterfaceMaplike.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim:set ts=2 sw=2 sts=2 et cindent: */
-/* 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/. */
-
-#ifndef mozilla_dom_TestInterfaceMaplike_h
-#define mozilla_dom_TestInterfaceMaplike_h
-
-#include "nsWrapperCache.h"
-#include "nsCOMPtr.h"
-
-class nsPIDOMWindowInner;
-
-namespace mozilla {
-
-class ErrorResult;
-
-namespace dom {
-
-class GlobalObject;
-
-// Implementation of test binding for webidl maplike interfaces, using
-// primitives for key and value types.
-class TestInterfaceMaplike final : public nsISupports,
- public nsWrapperCache
-{
-public:
- NS_DECL_CYCLE_COLLECTING_ISUPPORTS
- NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(TestInterfaceMaplike)
-
- explicit TestInterfaceMaplike(nsPIDOMWindowInner* aParent);
- nsPIDOMWindowInner* GetParentObject() const;
- virtual JSObject* WrapObject(JSContext* aCx,
- JS::Handle<JSObject*> aGivenProto) override;
- static already_AddRefed<TestInterfaceMaplike>
- Constructor(const GlobalObject& aGlobal, ErrorResult& rv);
-
- // External access for testing internal convenience functions.
- void SetInternal(const nsAString& aKey, int32_t aValue);
- void ClearInternal();
- bool DeleteInternal(const nsAString& aKey);
- bool HasInternal(const nsAString& aKey);
-private:
- virtual ~TestInterfaceMaplike() {}
- nsCOMPtr<nsPIDOMWindowInner> mParent;
-};
-
-} // namespace dom
-} // namespace mozilla
-
-#endif // mozilla_dom_TestInterfaceMaplike_h
diff --git a/dom/bindings/test/TestInterfaceMaplikeObject.cpp b/dom/bindings/test/TestInterfaceMaplikeObject.cpp
deleted file mode 100644
index 3dc1ffdc43..0000000000
--- a/dom/bindings/test/TestInterfaceMaplikeObject.cpp
+++ /dev/null
@@ -1,88 +0,0 @@
-/* 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/. */
-
-#include "mozilla/dom/TestInterfaceMaplikeObject.h"
-#include "mozilla/dom/TestInterfaceMaplike.h"
-#include "mozilla/dom/TestInterfaceJSMaplikeSetlikeIterableBinding.h"
-#include "nsPIDOMWindow.h"
-#include "mozilla/dom/BindingUtils.h"
-
-namespace mozilla {
-namespace dom {
-
-NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(TestInterfaceMaplikeObject, mParent)
-
-NS_IMPL_CYCLE_COLLECTING_ADDREF(TestInterfaceMaplikeObject)
-NS_IMPL_CYCLE_COLLECTING_RELEASE(TestInterfaceMaplikeObject)
-
-NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(TestInterfaceMaplikeObject)
-NS_WRAPPERCACHE_INTERFACE_MAP_ENTRY
-NS_INTERFACE_MAP_ENTRY(nsISupports)
-NS_INTERFACE_MAP_END
-
-TestInterfaceMaplikeObject::TestInterfaceMaplikeObject(nsPIDOMWindowInner* aParent)
-: mParent(aParent)
-{
-}
-
-//static
-already_AddRefed<TestInterfaceMaplikeObject>
-TestInterfaceMaplikeObject::Constructor(const GlobalObject& aGlobal,
- ErrorResult& aRv)
-{
- nsCOMPtr<nsPIDOMWindowInner> window = do_QueryInterface(aGlobal.GetAsSupports());
- if (!window) {
- aRv.Throw(NS_ERROR_FAILURE);
- return nullptr;
- }
-
- RefPtr<TestInterfaceMaplikeObject> r =
- new TestInterfaceMaplikeObject(window);
- return r.forget();
-}
-
-JSObject*
-TestInterfaceMaplikeObject::WrapObject(JSContext* aCx,
- JS::Handle<JSObject*> aGivenProto)
-{
- return TestInterfaceMaplikeObjectBinding::Wrap(aCx, this, aGivenProto);
-}
-
-nsPIDOMWindowInner*
-TestInterfaceMaplikeObject::GetParentObject() const
-{
- return mParent;
-}
-
-void
-TestInterfaceMaplikeObject::SetInternal(const nsAString& aKey)
-{
- RefPtr<TestInterfaceMaplike> p(new TestInterfaceMaplike(mParent));
- ErrorResult rv;
- TestInterfaceMaplikeObjectBinding::MaplikeHelpers::Set(this, aKey, *p, rv);
-}
-
-void
-TestInterfaceMaplikeObject::ClearInternal()
-{
- ErrorResult rv;
- TestInterfaceMaplikeObjectBinding::MaplikeHelpers::Clear(this, rv);
-}
-
-bool
-TestInterfaceMaplikeObject::DeleteInternal(const nsAString& aKey)
-{
- ErrorResult rv;
- return TestInterfaceMaplikeObjectBinding::MaplikeHelpers::Delete(this, aKey, rv);
-}
-
-bool
-TestInterfaceMaplikeObject::HasInternal(const nsAString& aKey)
-{
- ErrorResult rv;
- return TestInterfaceMaplikeObjectBinding::MaplikeHelpers::Has(this, aKey, rv);
-}
-
-} // namespace dom
-} // namespace mozilla
diff --git a/dom/bindings/test/TestInterfaceMaplikeObject.h b/dom/bindings/test/TestInterfaceMaplikeObject.h
deleted file mode 100644
index af4660c0d3..0000000000
--- a/dom/bindings/test/TestInterfaceMaplikeObject.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim:set ts=2 sw=2 sts=2 et cindent: */
-/* 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/. */
-
-#ifndef mozilla_dom_TestInterfaceMaplikeObject_h
-#define mozilla_dom_TestInterfaceMaplikeObject_h
-
-#include "nsWrapperCache.h"
-#include "nsCOMPtr.h"
-
-class nsPIDOMWindowInner;
-
-namespace mozilla {
-
-class ErrorResult;
-
-namespace dom {
-
-class GlobalObject;
-
-// Implementation of test binding for webidl maplike interfaces, using
-// primitives for key types and objects for value types.
-class TestInterfaceMaplikeObject final : public nsISupports,
- public nsWrapperCache
-{
-public:
- NS_DECL_CYCLE_COLLECTING_ISUPPORTS
- NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(TestInterfaceMaplikeObject)
-
- explicit TestInterfaceMaplikeObject(nsPIDOMWindowInner* aParent);
- nsPIDOMWindowInner* GetParentObject() const;
- virtual JSObject* WrapObject(JSContext* aCx,
- JS::Handle<JSObject*> aGivenProto) override;
- static already_AddRefed<TestInterfaceMaplikeObject>
- Constructor(const GlobalObject& aGlobal,ErrorResult& rv);
-
- // External access for testing internal convenience functions.
- void SetInternal(const nsAString& aKey);
- void ClearInternal();
- bool DeleteInternal(const nsAString& aKey);
- bool HasInternal(const nsAString& aKey);
-private:
- virtual ~TestInterfaceMaplikeObject() {}
- nsCOMPtr<nsPIDOMWindowInner> mParent;
-};
-
-} // namespace dom
-} // namespace mozilla
-
-#endif // mozilla_dom_TestInterfaceMaplikeObject_h
diff --git a/dom/bindings/test/TestInterfaceSetlike.cpp b/dom/bindings/test/TestInterfaceSetlike.cpp
deleted file mode 100644
index c9f5560760..0000000000
--- a/dom/bindings/test/TestInterfaceSetlike.cpp
+++ /dev/null
@@ -1,58 +0,0 @@
-/* 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/. */
-
-#include "mozilla/dom/TestInterfaceSetlike.h"
-#include "mozilla/dom/TestInterfaceJSMaplikeSetlikeIterableBinding.h"
-#include "nsPIDOMWindow.h"
-#include "mozilla/dom/BindingUtils.h"
-
-namespace mozilla {
-namespace dom {
-
-NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(TestInterfaceSetlike, mParent)
-
-NS_IMPL_CYCLE_COLLECTING_ADDREF(TestInterfaceSetlike)
-NS_IMPL_CYCLE_COLLECTING_RELEASE(TestInterfaceSetlike)
-
-NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(TestInterfaceSetlike)
-NS_WRAPPERCACHE_INTERFACE_MAP_ENTRY
-NS_INTERFACE_MAP_ENTRY(nsISupports)
-NS_INTERFACE_MAP_END
-
-TestInterfaceSetlike::TestInterfaceSetlike(JSContext* aCx,
- nsPIDOMWindowInner* aParent)
-: mParent(aParent)
-{
-}
-
-//static
-already_AddRefed<TestInterfaceSetlike>
-TestInterfaceSetlike::Constructor(const GlobalObject& aGlobal,
- ErrorResult& aRv)
-{
- nsCOMPtr<nsPIDOMWindowInner> window = do_QueryInterface(aGlobal.GetAsSupports());
- if (!window) {
- aRv.Throw(NS_ERROR_FAILURE);
- return nullptr;
- }
-
- RefPtr<TestInterfaceSetlike> r = new TestInterfaceSetlike(nullptr, window);
- return r.forget();
-}
-
-JSObject*
-TestInterfaceSetlike::WrapObject(JSContext* aCx,
- JS::Handle<JSObject*> aGivenProto)
-{
- return TestInterfaceSetlikeBinding::Wrap(aCx, this, aGivenProto);
-}
-
-nsPIDOMWindowInner*
-TestInterfaceSetlike::GetParentObject() const
-{
- return mParent;
-}
-
-} // namespace dom
-} // namespace mozilla
diff --git a/dom/bindings/test/TestInterfaceSetlike.h b/dom/bindings/test/TestInterfaceSetlike.h
deleted file mode 100644
index c9f4649605..0000000000
--- a/dom/bindings/test/TestInterfaceSetlike.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim:set ts=2 sw=2 sts=2 et cindent: */
-/* 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/. */
-
-#ifndef mozilla_dom_TestInterfaceSetlike_h
-#define mozilla_dom_TestInterfaceSetlike_h
-
-#include "nsWrapperCache.h"
-#include "nsCOMPtr.h"
-
-class nsPIDOMWindowInner;
-
-namespace mozilla {
-
-class ErrorResult;
-
-namespace dom {
-
-class GlobalObject;
-
-// Implementation of test binding for webidl setlike interfaces, using
-// primitives for key type.
-class TestInterfaceSetlike final : public nsISupports,
- public nsWrapperCache
-{
-public:
- NS_DECL_CYCLE_COLLECTING_ISUPPORTS
- NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(TestInterfaceSetlike)
- explicit TestInterfaceSetlike(JSContext* aCx,
- nsPIDOMWindowInner* aParent);
- nsPIDOMWindowInner* GetParentObject() const;
- virtual JSObject* WrapObject(JSContext* aCx,
- JS::Handle<JSObject*> aGivenProto) override;
- static already_AddRefed<TestInterfaceSetlike>
- Constructor(const GlobalObject& aGlobal, ErrorResult& rv);
-private:
- virtual ~TestInterfaceSetlike() {}
- nsCOMPtr<nsPIDOMWindowInner> mParent;
-};
-
-} // namespace dom
-} // namespace mozilla
-
-#endif // mozilla_dom_TestInterfaceSetlike_h
diff --git a/dom/bindings/test/TestInterfaceSetlikeNode.cpp b/dom/bindings/test/TestInterfaceSetlikeNode.cpp
deleted file mode 100644
index 5499553fa5..0000000000
--- a/dom/bindings/test/TestInterfaceSetlikeNode.cpp
+++ /dev/null
@@ -1,58 +0,0 @@
-/* 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/. */
-
-#include "mozilla/dom/TestInterfaceSetlikeNode.h"
-#include "mozilla/dom/TestInterfaceJSMaplikeSetlikeIterableBinding.h"
-#include "nsPIDOMWindow.h"
-#include "mozilla/dom/BindingUtils.h"
-
-namespace mozilla {
-namespace dom {
-
-NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(TestInterfaceSetlikeNode, mParent)
-
-NS_IMPL_CYCLE_COLLECTING_ADDREF(TestInterfaceSetlikeNode)
-NS_IMPL_CYCLE_COLLECTING_RELEASE(TestInterfaceSetlikeNode)
-
-NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(TestInterfaceSetlikeNode)
-NS_WRAPPERCACHE_INTERFACE_MAP_ENTRY
-NS_INTERFACE_MAP_ENTRY(nsISupports)
-NS_INTERFACE_MAP_END
-
-TestInterfaceSetlikeNode::TestInterfaceSetlikeNode(JSContext* aCx,
- nsPIDOMWindowInner* aParent)
-: mParent(aParent)
-{
-}
-
-//static
-already_AddRefed<TestInterfaceSetlikeNode>
-TestInterfaceSetlikeNode::Constructor(const GlobalObject& aGlobal,
- ErrorResult& aRv)
-{
- nsCOMPtr<nsPIDOMWindowInner> window = do_QueryInterface(aGlobal.GetAsSupports());
- if (!window) {
- aRv.Throw(NS_ERROR_FAILURE);
- return nullptr;
- }
-
- RefPtr<TestInterfaceSetlikeNode> r = new TestInterfaceSetlikeNode(nullptr, window);
- return r.forget();
-}
-
-JSObject*
-TestInterfaceSetlikeNode::WrapObject(JSContext* aCx,
- JS::Handle<JSObject*> aGivenProto)
-{
- return TestInterfaceSetlikeNodeBinding::Wrap(aCx, this, aGivenProto);
-}
-
-nsPIDOMWindowInner*
-TestInterfaceSetlikeNode::GetParentObject() const
-{
- return mParent;
-}
-
-} // namespace dom
-} // namespace mozilla
diff --git a/dom/bindings/test/TestInterfaceSetlikeNode.h b/dom/bindings/test/TestInterfaceSetlikeNode.h
deleted file mode 100644
index 05b14190e0..0000000000
--- a/dom/bindings/test/TestInterfaceSetlikeNode.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim:set ts=2 sw=2 sts=2 et cindent: */
-/* 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/. */
-
-#ifndef mozilla_dom_TestInterfaceSetlikeNode_h
-#define mozilla_dom_TestInterfaceSetlikeNode_h
-
-#include "nsWrapperCache.h"
-#include "nsCOMPtr.h"
-
-class nsPIDOMWindowInner;
-
-namespace mozilla {
-
-class ErrorResult;
-
-namespace dom {
-
-class GlobalObject;
-
-// Implementation of test binding for webidl setlike interfaces, using
-// primitives for key type.
-class TestInterfaceSetlikeNode final : public nsISupports,
- public nsWrapperCache
-{
-public:
- NS_DECL_CYCLE_COLLECTING_ISUPPORTS
- NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(TestInterfaceSetlikeNode)
- explicit TestInterfaceSetlikeNode(JSContext* aCx,
- nsPIDOMWindowInner* aParent);
- nsPIDOMWindowInner* GetParentObject() const;
- virtual JSObject* WrapObject(JSContext* aCx,
- JS::Handle<JSObject*> aGivenProto) override;
- static already_AddRefed<TestInterfaceSetlikeNode>
- Constructor(const GlobalObject& aGlobal, ErrorResult& rv);
-private:
- virtual ~TestInterfaceSetlikeNode() {}
- nsCOMPtr<nsPIDOMWindowInner> mParent;
-};
-
-} // namespace dom
-} // namespace mozilla
-
-#endif // mozilla_dom_TestInterfaceSetlikeNode_h
diff --git a/dom/bindings/test/TestJSImplGen.webidl b/dom/bindings/test/TestJSImplGen.webidl
deleted file mode 100644
index a133b9981a..0000000000
--- a/dom/bindings/test/TestJSImplGen.webidl
+++ /dev/null
@@ -1,840 +0,0 @@
-/* -*- 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/.
- */
-
-typedef TestJSImplInterface AnotherNameForTestJSImplInterface;
-typedef TestJSImplInterface YetAnotherNameForTestJSImplInterface;
-typedef TestJSImplInterface? NullableTestJSImplInterface;
-
-callback MyTestCallback = void();
-
-enum MyTestEnum {
- "a",
- "b"
-};
-
-// We don't support multiple constructors (bug 869268) or named constructors
-// for JS-implemented WebIDL.
-[Constructor(DOMString str, unsigned long num, boolean? boolArg,
- TestInterface? iface, long arg1,
- DictForConstructor dict, any any1,
- object obj1,
- object? obj2, sequence<Dict> seq, optional any any2,
- optional object obj3,
- optional object? obj4,
- Uint8Array typedArr,
- ArrayBuffer arrayBuf),
- JSImplementation="@mozilla.org/test-js-impl-interface;1"]
-interface TestJSImplInterface {
- // Integer types
- // XXXbz add tests for throwing versions of all the integer stuff
- readonly attribute byte readonlyByte;
- attribute byte writableByte;
- void passByte(byte arg);
- byte receiveByte();
- void passOptionalByte(optional byte arg);
- void passOptionalByteBeforeRequired(optional byte arg1, byte arg2);
- void passOptionalByteWithDefault(optional byte arg = 0);
- void passOptionalByteWithDefaultBeforeRequired(optional byte arg1 = 0, byte arg2);
- void passNullableByte(byte? arg);
- void passOptionalNullableByte(optional byte? arg);
- void passVariadicByte(byte... arg);
- [Cached, Pure]
- readonly attribute byte cachedByte;
- [Cached, Constant]
- readonly attribute byte cachedConstantByte;
- [Cached, Pure]
- attribute byte cachedWritableByte;
- [Affects=Nothing]
- attribute byte sideEffectFreeByte;
- [Affects=Nothing, DependsOn=DOMState]
- attribute byte domDependentByte;
- [Affects=Nothing, DependsOn=Nothing]
- readonly attribute byte constantByte;
- [DependsOn=DeviceState, Affects=Nothing]
- readonly attribute byte deviceStateDependentByte;
- [Affects=Nothing]
- byte returnByteSideEffectFree();
- [Affects=Nothing, DependsOn=DOMState]
- byte returnDOMDependentByte();
- [Affects=Nothing, DependsOn=Nothing]
- byte returnConstantByte();
- [DependsOn=DeviceState, Affects=Nothing]
- byte returnDeviceStateDependentByte();
-
- readonly attribute short readonlyShort;
- attribute short writableShort;
- void passShort(short arg);
- short receiveShort();
- void passOptionalShort(optional short arg);
- void passOptionalShortWithDefault(optional short arg = 5);
-
- readonly attribute long readonlyLong;
- attribute long writableLong;
- void passLong(long arg);
- long receiveLong();
- void passOptionalLong(optional long arg);
- void passOptionalLongWithDefault(optional long arg = 7);
-
- readonly attribute long long readonlyLongLong;
- attribute long long writableLongLong;
- void passLongLong(long long arg);
- long long receiveLongLong();
- void passOptionalLongLong(optional long long arg);
- void passOptionalLongLongWithDefault(optional long long arg = -12);
-
- readonly attribute octet readonlyOctet;
- attribute octet writableOctet;
- void passOctet(octet arg);
- octet receiveOctet();
- void passOptionalOctet(optional octet arg);
- void passOptionalOctetWithDefault(optional octet arg = 19);
-
- readonly attribute unsigned short readonlyUnsignedShort;
- attribute unsigned short writableUnsignedShort;
- void passUnsignedShort(unsigned short arg);
- unsigned short receiveUnsignedShort();
- void passOptionalUnsignedShort(optional unsigned short arg);
- void passOptionalUnsignedShortWithDefault(optional unsigned short arg = 2);
-
- readonly attribute unsigned long readonlyUnsignedLong;
- attribute unsigned long writableUnsignedLong;
- void passUnsignedLong(unsigned long arg);
- unsigned long receiveUnsignedLong();
- void passOptionalUnsignedLong(optional unsigned long arg);
- void passOptionalUnsignedLongWithDefault(optional unsigned long arg = 6);
-
- readonly attribute unsigned long long readonlyUnsignedLongLong;
- attribute unsigned long long writableUnsignedLongLong;
- void passUnsignedLongLong(unsigned long long arg);
- unsigned long long receiveUnsignedLongLong();
- void passOptionalUnsignedLongLong(optional unsigned long long arg);
- void passOptionalUnsignedLongLongWithDefault(optional unsigned long long arg = 17);
-
- attribute float writableFloat;
- attribute unrestricted float writableUnrestrictedFloat;
- attribute float? writableNullableFloat;
- attribute unrestricted float? writableNullableUnrestrictedFloat;
- attribute double writableDouble;
- attribute unrestricted double writableUnrestrictedDouble;
- attribute double? writableNullableDouble;
- attribute unrestricted double? writableNullableUnrestrictedDouble;
- void passFloat(float arg1, unrestricted float arg2,
- float? arg3, unrestricted float? arg4,
- double arg5, unrestricted double arg6,
- double? arg7, unrestricted double? arg8,
- sequence<float> arg9, sequence<unrestricted float> arg10,
- sequence<float?> arg11, sequence<unrestricted float?> arg12,
- sequence<double> arg13, sequence<unrestricted double> arg14,
- sequence<double?> arg15, sequence<unrestricted double?> arg16);
- [LenientFloat]
- void passLenientFloat(float arg1, unrestricted float arg2,
- float? arg3, unrestricted float? arg4,
- double arg5, unrestricted double arg6,
- double? arg7, unrestricted double? arg8,
- sequence<float> arg9,
- sequence<unrestricted float> arg10,
- sequence<float?> arg11,
- sequence<unrestricted float?> arg12,
- sequence<double> arg13,
- sequence<unrestricted double> arg14,
- sequence<double?> arg15,
- sequence<unrestricted double?> arg16);
- [LenientFloat]
- attribute float lenientFloatAttr;
- [LenientFloat]
- attribute double lenientDoubleAttr;
-
- // Castable interface types
- // XXXbz add tests for throwing versions of all the castable interface stuff
- TestJSImplInterface receiveSelf();
- TestJSImplInterface? receiveNullableSelf();
-
- TestJSImplInterface receiveWeakSelf();
- TestJSImplInterface? receiveWeakNullableSelf();
-
- // A version to test for casting to TestJSImplInterface&
- void passSelf(TestJSImplInterface arg);
- void passNullableSelf(TestJSImplInterface? arg);
- attribute TestJSImplInterface nonNullSelf;
- attribute TestJSImplInterface? nullableSelf;
- [Cached, Pure]
- readonly attribute TestJSImplInterface cachedSelf;
- // Optional arguments
- void passOptionalSelf(optional TestJSImplInterface? arg);
- void passOptionalNonNullSelf(optional TestJSImplInterface arg);
- void passOptionalSelfWithDefault(optional TestJSImplInterface? arg = null);
-
- // Non-wrapper-cache interface types
- [NewObject]
- TestNonWrapperCacheInterface receiveNonWrapperCacheInterface();
- [NewObject]
- TestNonWrapperCacheInterface? receiveNullableNonWrapperCacheInterface();
-
- [NewObject]
- sequence<TestNonWrapperCacheInterface> receiveNonWrapperCacheInterfaceSequence();
- [NewObject]
- sequence<TestNonWrapperCacheInterface?> receiveNullableNonWrapperCacheInterfaceSequence();
- [NewObject]
- sequence<TestNonWrapperCacheInterface>? receiveNonWrapperCacheInterfaceNullableSequence();
- [NewObject]
- sequence<TestNonWrapperCacheInterface?>? receiveNullableNonWrapperCacheInterfaceNullableSequence();
-
- // Non-castable interface types
- IndirectlyImplementedInterface receiveOther();
- IndirectlyImplementedInterface? receiveNullableOther();
- IndirectlyImplementedInterface receiveWeakOther();
- IndirectlyImplementedInterface? receiveWeakNullableOther();
-
- void passOther(IndirectlyImplementedInterface arg);
- void passNullableOther(IndirectlyImplementedInterface? arg);
- attribute IndirectlyImplementedInterface nonNullOther;
- attribute IndirectlyImplementedInterface? nullableOther;
- // Optional arguments
- void passOptionalOther(optional IndirectlyImplementedInterface? arg);
- void passOptionalNonNullOther(optional IndirectlyImplementedInterface arg);
- void passOptionalOtherWithDefault(optional IndirectlyImplementedInterface? arg = null);
-
- // External interface types
- TestExternalInterface receiveExternal();
- TestExternalInterface? receiveNullableExternal();
- TestExternalInterface receiveWeakExternal();
- TestExternalInterface? receiveWeakNullableExternal();
- void passExternal(TestExternalInterface arg);
- void passNullableExternal(TestExternalInterface? arg);
- attribute TestExternalInterface nonNullExternal;
- attribute TestExternalInterface? nullableExternal;
- // Optional arguments
- void passOptionalExternal(optional TestExternalInterface? arg);
- void passOptionalNonNullExternal(optional TestExternalInterface arg);
- void passOptionalExternalWithDefault(optional TestExternalInterface? arg = null);
-
- // Callback interface types
- TestCallbackInterface receiveCallbackInterface();
- TestCallbackInterface? receiveNullableCallbackInterface();
- TestCallbackInterface receiveWeakCallbackInterface();
- TestCallbackInterface? receiveWeakNullableCallbackInterface();
- void passCallbackInterface(TestCallbackInterface arg);
- void passNullableCallbackInterface(TestCallbackInterface? arg);
- attribute TestCallbackInterface nonNullCallbackInterface;
- attribute TestCallbackInterface? nullableCallbackInterface;
- // Optional arguments
- void passOptionalCallbackInterface(optional TestCallbackInterface? arg);
- void passOptionalNonNullCallbackInterface(optional TestCallbackInterface arg);
- void passOptionalCallbackInterfaceWithDefault(optional TestCallbackInterface? arg = null);
-
- // Miscellaneous interface tests
- IndirectlyImplementedInterface receiveConsequentialInterface();
- void passConsequentialInterface(IndirectlyImplementedInterface arg);
-
- // Sequence types
- [Cached, Pure]
- readonly attribute sequence<long> readonlySequence;
- [Cached, Pure]
- readonly attribute sequence<Dict> readonlySequenceOfDictionaries;
- [Cached, Pure]
- readonly attribute sequence<Dict>? readonlyNullableSequenceOfDictionaries;
- [Cached, Pure, Frozen]
- readonly attribute sequence<long> readonlyFrozenSequence;
- [Cached, Pure, Frozen]
- readonly attribute sequence<long>? readonlyFrozenNullableSequence;
- sequence<long> receiveSequence();
- sequence<long>? receiveNullableSequence();
- sequence<long?> receiveSequenceOfNullableInts();
- sequence<long?>? receiveNullableSequenceOfNullableInts();
- void passSequence(sequence<long> arg);
- void passNullableSequence(sequence<long>? arg);
- void passSequenceOfNullableInts(sequence<long?> arg);
- void passOptionalSequenceOfNullableInts(optional sequence<long?> arg);
- void passOptionalNullableSequenceOfNullableInts(optional sequence<long?>? arg);
- sequence<TestJSImplInterface> receiveCastableObjectSequence();
- sequence<TestCallbackInterface> receiveCallbackObjectSequence();
- sequence<TestJSImplInterface?> receiveNullableCastableObjectSequence();
- sequence<TestCallbackInterface?> receiveNullableCallbackObjectSequence();
- sequence<TestJSImplInterface>? receiveCastableObjectNullableSequence();
- sequence<TestJSImplInterface?>? receiveNullableCastableObjectNullableSequence();
- sequence<TestJSImplInterface> receiveWeakCastableObjectSequence();
- sequence<TestJSImplInterface?> receiveWeakNullableCastableObjectSequence();
- sequence<TestJSImplInterface>? receiveWeakCastableObjectNullableSequence();
- sequence<TestJSImplInterface?>? receiveWeakNullableCastableObjectNullableSequence();
- void passCastableObjectSequence(sequence<TestJSImplInterface> arg);
- void passNullableCastableObjectSequence(sequence<TestJSImplInterface?> arg);
- void passCastableObjectNullableSequence(sequence<TestJSImplInterface>? arg);
- void passNullableCastableObjectNullableSequence(sequence<TestJSImplInterface?>? arg);
- void passOptionalSequence(optional sequence<long> arg);
- void passOptionalSequenceWithDefaultValue(optional sequence<long> arg = []);
- void passOptionalNullableSequence(optional sequence<long>? arg);
- void passOptionalNullableSequenceWithDefaultValue(optional sequence<long>? arg = null);
- void passOptionalNullableSequenceWithDefaultValue2(optional sequence<long>? arg = []);
- void passOptionalObjectSequence(optional sequence<TestJSImplInterface> arg);
- void passExternalInterfaceSequence(sequence<TestExternalInterface> arg);
- void passNullableExternalInterfaceSequence(sequence<TestExternalInterface?> arg);
-
- sequence<DOMString> receiveStringSequence();
- sequence<ByteString> receiveByteStringSequence();
- // Callback interface problem. See bug 843261.
- //void passStringSequence(sequence<DOMString> arg);
- sequence<any> receiveAnySequence();
- sequence<any>? receiveNullableAnySequence();
- //XXXbz No support for sequence of sequence return values yet.
- //sequence<sequence<any>> receiveAnySequenceSequence();
-
- sequence<object> receiveObjectSequence();
- sequence<object?> receiveNullableObjectSequence();
-
- void passSequenceOfSequences(sequence<sequence<long>> arg);
- void passSequenceOfSequencesOfSequences(sequence<sequence<sequence<long>>> arg);
- //XXXbz No support for sequence of sequence return values yet.
- //sequence<sequence<long>> receiveSequenceOfSequences();
-
- // MozMap types
- void passMozMap(MozMap<long> arg);
- void passNullableMozMap(MozMap<long>? arg);
- void passMozMapOfNullableInts(MozMap<long?> arg);
- void passOptionalMozMapOfNullableInts(optional MozMap<long?> arg);
- void passOptionalNullableMozMapOfNullableInts(optional MozMap<long?>? arg);
- void passCastableObjectMozMap(MozMap<TestJSImplInterface> arg);
- void passNullableCastableObjectMozMap(MozMap<TestJSImplInterface?> arg);
- void passCastableObjectNullableMozMap(MozMap<TestJSImplInterface>? arg);
- void passNullableCastableObjectNullableMozMap(MozMap<TestJSImplInterface?>? arg);
- void passOptionalMozMap(optional MozMap<long> arg);
- void passOptionalNullableMozMap(optional MozMap<long>? arg);
- void passOptionalNullableMozMapWithDefaultValue(optional MozMap<long>? arg = null);
- void passOptionalObjectMozMap(optional MozMap<TestJSImplInterface> arg);
- void passExternalInterfaceMozMap(MozMap<TestExternalInterface> arg);
- void passNullableExternalInterfaceMozMap(MozMap<TestExternalInterface?> arg);
- void passStringMozMap(MozMap<DOMString> arg);
- void passByteStringMozMap(MozMap<ByteString> arg);
- void passMozMapOfMozMaps(MozMap<MozMap<long>> arg);
- MozMap<long> receiveMozMap();
- MozMap<long>? receiveNullableMozMap();
- MozMap<long?> receiveMozMapOfNullableInts();
- MozMap<long?>? receiveNullableMozMapOfNullableInts();
- //XXXbz No support for MozMap of MozMaps return values yet.
- //MozMap<MozMap<long>> receiveMozMapOfMozMaps();
- MozMap<any> receiveAnyMozMap();
-
- // Typed array types
- void passArrayBuffer(ArrayBuffer arg);
- void passNullableArrayBuffer(ArrayBuffer? arg);
- void passOptionalArrayBuffer(optional ArrayBuffer arg);
- void passOptionalNullableArrayBuffer(optional ArrayBuffer? arg);
- void passOptionalNullableArrayBufferWithDefaultValue(optional ArrayBuffer? arg= null);
- void passArrayBufferView(ArrayBufferView arg);
- void passInt8Array(Int8Array arg);
- void passInt16Array(Int16Array arg);
- void passInt32Array(Int32Array arg);
- void passUint8Array(Uint8Array arg);
- void passUint16Array(Uint16Array arg);
- void passUint32Array(Uint32Array arg);
- void passUint8ClampedArray(Uint8ClampedArray arg);
- void passFloat32Array(Float32Array arg);
- void passFloat64Array(Float64Array arg);
- void passSequenceOfArrayBuffers(sequence<ArrayBuffer> arg);
- void passSequenceOfNullableArrayBuffers(sequence<ArrayBuffer?> arg);
- void passMozMapOfArrayBuffers(MozMap<ArrayBuffer> arg);
- void passMozMapOfNullableArrayBuffers(MozMap<ArrayBuffer?> arg);
- void passVariadicTypedArray(Float32Array... arg);
- void passVariadicNullableTypedArray(Float32Array?... arg);
- Uint8Array receiveUint8Array();
- attribute Uint8Array uint8ArrayAttr;
-
- // DOMString types
- void passString(DOMString arg);
- void passNullableString(DOMString? arg);
- void passOptionalString(optional DOMString arg);
- void passOptionalStringWithDefaultValue(optional DOMString arg = "abc");
- void passOptionalNullableString(optional DOMString? arg);
- void passOptionalNullableStringWithDefaultValue(optional DOMString? arg = null);
- void passVariadicString(DOMString... arg);
-
- // ByteString types
- void passByteString(ByteString arg);
- void passNullableByteString(ByteString? arg);
- void passOptionalByteString(optional ByteString arg);
- void passOptionalByteStringWithDefaultValue(optional ByteString arg = "abc");
- void passOptionalNullableByteString(optional ByteString? arg);
- void passOptionalNullableByteStringWithDefaultValue(optional ByteString? arg = null);
- void passVariadicByteString(ByteString... arg);
- void passUnionByteString((ByteString or long) arg);
- void passOptionalUnionByteString(optional (ByteString or long) arg);
- void passOptionalUnionByteStringWithDefaultValue(optional (ByteString or long) arg = "abc");
-
- // USVString types
- void passSVS(USVString arg);
- void passNullableSVS(USVString? arg);
- void passOptionalSVS(optional USVString arg);
- void passOptionalSVSWithDefaultValue(optional USVString arg = "abc");
- void passOptionalNullableSVS(optional USVString? arg);
- void passOptionalNullableSVSWithDefaultValue(optional USVString? arg = null);
- void passVariadicSVS(USVString... arg);
- USVString receiveSVS();
-
- // Enumerated types
- void passEnum(MyTestEnum arg);
- void passNullableEnum(MyTestEnum? arg);
- void passOptionalEnum(optional MyTestEnum arg);
- void passEnumWithDefault(optional MyTestEnum arg = "a");
- void passOptionalNullableEnum(optional MyTestEnum? arg);
- void passOptionalNullableEnumWithDefaultValue(optional MyTestEnum? arg = null);
- void passOptionalNullableEnumWithDefaultValue2(optional MyTestEnum? arg = "a");
- MyTestEnum receiveEnum();
- MyTestEnum? receiveNullableEnum();
- attribute MyTestEnum enumAttribute;
- readonly attribute MyTestEnum readonlyEnumAttribute;
-
- // Callback types
- void passCallback(MyTestCallback arg);
- void passNullableCallback(MyTestCallback? arg);
- void passOptionalCallback(optional MyTestCallback arg);
- void passOptionalNullableCallback(optional MyTestCallback? arg);
- void passOptionalNullableCallbackWithDefaultValue(optional MyTestCallback? arg = null);
- MyTestCallback receiveCallback();
- MyTestCallback? receiveNullableCallback();
- // Hmm. These two don't work, I think because I need a locally modified version of TestTreatAsNullCallback.
- //void passNullableTreatAsNullCallback(TestTreatAsNullCallback? arg);
- //void passOptionalNullableTreatAsNullCallback(optional TestTreatAsNullCallback? arg);
- void passOptionalNullableTreatAsNullCallbackWithDefaultValue(optional TestTreatAsNullCallback? arg = null);
-
- // Any types
- void passAny(any arg);
- void passVariadicAny(any... arg);
- void passOptionalAny(optional any arg);
- void passAnyDefaultNull(optional any arg = null);
- void passSequenceOfAny(sequence<any> arg);
- void passNullableSequenceOfAny(sequence<any>? arg);
- void passOptionalSequenceOfAny(optional sequence<any> arg);
- void passOptionalNullableSequenceOfAny(optional sequence<any>? arg);
- void passOptionalSequenceOfAnyWithDefaultValue(optional sequence<any>? arg = null);
- void passSequenceOfSequenceOfAny(sequence<sequence<any>> arg);
- void passSequenceOfNullableSequenceOfAny(sequence<sequence<any>?> arg);
- void passNullableSequenceOfNullableSequenceOfAny(sequence<sequence<any>?>? arg);
- void passOptionalNullableSequenceOfNullableSequenceOfAny(optional sequence<sequence<any>?>? arg);
- void passMozMapOfAny(MozMap<any> arg);
- void passNullableMozMapOfAny(MozMap<any>? arg);
- void passOptionalMozMapOfAny(optional MozMap<any> arg);
- void passOptionalNullableMozMapOfAny(optional MozMap<any>? arg);
- void passOptionalMozMapOfAnyWithDefaultValue(optional MozMap<any>? arg = null);
- void passMozMapOfMozMapOfAny(MozMap<MozMap<any>> arg);
- void passMozMapOfNullableMozMapOfAny(MozMap<MozMap<any>?> arg);
- void passNullableMozMapOfNullableMozMapOfAny(MozMap<MozMap<any>?>? arg);
- void passOptionalNullableMozMapOfNullableMozMapOfAny(optional MozMap<MozMap<any>?>? arg);
- void passOptionalNullableMozMapOfNullableSequenceOfAny(optional MozMap<sequence<any>?>? arg);
- void passOptionalNullableSequenceOfNullableMozMapOfAny(optional sequence<MozMap<any>?>? arg);
- any receiveAny();
-
- // object types
- void passObject(object arg);
- void passVariadicObject(object... arg);
- void passNullableObject(object? arg);
- void passVariadicNullableObject(object... arg);
- void passOptionalObject(optional object arg);
- void passOptionalNullableObject(optional object? arg);
- void passOptionalNullableObjectWithDefaultValue(optional object? arg = null);
- void passSequenceOfObject(sequence<object> arg);
- void passSequenceOfNullableObject(sequence<object?> arg);
- void passNullableSequenceOfObject(sequence<object>? arg);
- void passOptionalNullableSequenceOfNullableSequenceOfObject(optional sequence<sequence<object>?>? arg);
- void passOptionalNullableSequenceOfNullableSequenceOfNullableObject(optional sequence<sequence<object?>?>? arg);
- void passMozMapOfObject(MozMap<object> arg);
- object receiveObject();
- object? receiveNullableObject();
-
- // Union types
- void passUnion((object or long) arg);
- // Some union tests are debug-only to avoid creating all those
- // unused union types in opt builds.
-#ifdef DEBUG
- void passUnion2((long or boolean) arg);
- void passUnion3((object or long or boolean) arg);
- void passUnion4((Node or long or boolean) arg);
- void passUnion5((object or boolean) arg);
- void passUnion6((object or DOMString) arg);
- void passUnion7((object or DOMString or long) arg);
- void passUnion8((object or DOMString or boolean) arg);
- void passUnion9((object or DOMString or long or boolean) arg);
- void passUnion10(optional (EventInit or long) arg);
- void passUnion11(optional (CustomEventInit or long) arg);
- void passUnion12(optional (EventInit or long) arg = 5);
- void passUnion13(optional (object or long?) arg = null);
- void passUnion14(optional (object or long?) arg = 5);
- void passUnion15((sequence<long> or long) arg);
- void passUnion16(optional (sequence<long> or long) arg);
- void passUnion17(optional (sequence<long>? or long) arg = 5);
- void passUnion18((sequence<object> or long) arg);
- void passUnion19(optional (sequence<object> or long) arg);
- void passUnion20(optional (sequence<object> or long) arg = []);
- void passUnion21((MozMap<long> or long) arg);
- void passUnion22((MozMap<object> or long) arg);
- void passUnion23((sequence<ImageData> or long) arg);
- void passUnion24((sequence<ImageData?> or long) arg);
- void passUnion25((sequence<sequence<ImageData>> or long) arg);
- void passUnion26((sequence<sequence<ImageData?>> or long) arg);
- void passUnion27(optional (sequence<DOMString> or EventInit) arg);
- void passUnion28(optional (EventInit or sequence<DOMString>) arg);
- void passUnionWithCallback((EventHandler or long) arg);
- void passUnionWithByteString((ByteString or long) arg);
- void passUnionWithMozMap((MozMap<DOMString> or DOMString) arg);
- void passUnionWithMozMapAndSequence((MozMap<DOMString> or sequence<DOMString>) arg);
- void passUnionWithSequenceAndMozMap((sequence<DOMString> or MozMap<DOMString>) arg);
- void passUnionWithSVS((USVString or long) arg);
-#endif
- void passUnionWithNullable((object? or long) arg);
- void passNullableUnion((object or long)? arg);
- void passOptionalUnion(optional (object or long) arg);
- void passOptionalNullableUnion(optional (object or long)? arg);
- void passOptionalNullableUnionWithDefaultValue(optional (object or long)? arg = null);
- //void passUnionWithInterfaces((TestJSImplInterface or TestExternalInterface) arg);
- //void passUnionWithInterfacesAndNullable((TestJSImplInterface? or TestExternalInterface) arg);
- //void passUnionWithSequence((sequence<object> or long) arg);
- void passUnionWithArrayBuffer((ArrayBuffer or long) arg);
- void passUnionWithString((DOMString or object) arg);
- // Using an enum in a union. Note that we use some enum not declared in our
- // binding file, because UnionTypes.h will need to include the binding header
- // for this enum. Pick an enum from an interface that won't drag in too much
- // stuff.
- void passUnionWithEnum((SupportedType or object) arg);
-
- // Trying to use a callback in a union won't include the test
- // headers, unfortunately, so won't compile.
- // void passUnionWithCallback((MyTestCallback or long) arg);
- void passUnionWithObject((object or long) arg);
- //void passUnionWithDict((Dict or long) arg);
-
- void passUnionWithDefaultValue1(optional (double or DOMString) arg = "");
- void passUnionWithDefaultValue2(optional (double or DOMString) arg = 1);
- void passUnionWithDefaultValue3(optional (double or DOMString) arg = 1.5);
- void passUnionWithDefaultValue4(optional (float or DOMString) arg = "");
- void passUnionWithDefaultValue5(optional (float or DOMString) arg = 1);
- void passUnionWithDefaultValue6(optional (float or DOMString) arg = 1.5);
- void passUnionWithDefaultValue7(optional (unrestricted double or DOMString) arg = "");
- void passUnionWithDefaultValue8(optional (unrestricted double or DOMString) arg = 1);
- void passUnionWithDefaultValue9(optional (unrestricted double or DOMString) arg = 1.5);
- void passUnionWithDefaultValue10(optional (unrestricted double or DOMString) arg = Infinity);
- void passUnionWithDefaultValue11(optional (unrestricted float or DOMString) arg = "");
- void passUnionWithDefaultValue12(optional (unrestricted float or DOMString) arg = 1);
- void passUnionWithDefaultValue13(optional (unrestricted float or DOMString) arg = Infinity);
- void passUnionWithDefaultValue14(optional (double or ByteString) arg = "");
- void passUnionWithDefaultValue15(optional (double or ByteString) arg = 1);
- void passUnionWithDefaultValue16(optional (double or ByteString) arg = 1.5);
- void passUnionWithDefaultValue17(optional (double or SupportedType) arg = "text/html");
- void passUnionWithDefaultValue18(optional (double or SupportedType) arg = 1);
- void passUnionWithDefaultValue19(optional (double or SupportedType) arg = 1.5);
-
- void passNullableUnionWithDefaultValue1(optional (double or DOMString)? arg = "");
- void passNullableUnionWithDefaultValue2(optional (double or DOMString)? arg = 1);
- void passNullableUnionWithDefaultValue3(optional (double or DOMString)? arg = null);
- void passNullableUnionWithDefaultValue4(optional (float or DOMString)? arg = "");
- void passNullableUnionWithDefaultValue5(optional (float or DOMString)? arg = 1);
- void passNullableUnionWithDefaultValue6(optional (float or DOMString)? arg = null);
- void passNullableUnionWithDefaultValue7(optional (unrestricted double or DOMString)? arg = "");
- void passNullableUnionWithDefaultValue8(optional (unrestricted double or DOMString)? arg = 1);
- void passNullableUnionWithDefaultValue9(optional (unrestricted double or DOMString)? arg = null);
- void passNullableUnionWithDefaultValue10(optional (unrestricted float or DOMString)? arg = "");
- void passNullableUnionWithDefaultValue11(optional (unrestricted float or DOMString)? arg = 1);
- void passNullableUnionWithDefaultValue12(optional (unrestricted float or DOMString)? arg = null);
- void passNullableUnionWithDefaultValue13(optional (double or ByteString)? arg = "");
- void passNullableUnionWithDefaultValue14(optional (double or ByteString)? arg = 1);
- void passNullableUnionWithDefaultValue15(optional (double or ByteString)? arg = 1.5);
- void passNullableUnionWithDefaultValue16(optional (double or ByteString)? arg = null);
- void passNullableUnionWithDefaultValue17(optional (double or SupportedType)? arg = "text/html");
- void passNullableUnionWithDefaultValue18(optional (double or SupportedType)? arg = 1);
- void passNullableUnionWithDefaultValue19(optional (double or SupportedType)? arg = 1.5);
- void passNullableUnionWithDefaultValue20(optional (double or SupportedType)? arg = null);
-
- void passSequenceOfUnions(sequence<(CanvasPattern or CanvasGradient)> arg);
- void passSequenceOfUnions2(sequence<(object or long)> arg);
- void passVariadicUnion((CanvasPattern or CanvasGradient)... arg);
-
- void passSequenceOfNullableUnions(sequence<(CanvasPattern or CanvasGradient)?> arg);
- void passVariadicNullableUnion((CanvasPattern or CanvasGradient)?... arg);
- void passMozMapOfUnions(MozMap<(CanvasPattern or CanvasGradient)> arg);
- // XXXbz no move constructor on some unions
- // void passMozMapOfUnions2(MozMap<(object or long)> arg);
-
- (CanvasPattern or CanvasGradient) receiveUnion();
- (object or long) receiveUnion2();
- (CanvasPattern? or CanvasGradient) receiveUnionContainingNull();
- (CanvasPattern or CanvasGradient)? receiveNullableUnion();
- (object or long)? receiveNullableUnion2();
-
- attribute (CanvasPattern or CanvasGradient) writableUnion;
- attribute (CanvasPattern? or CanvasGradient) writableUnionContainingNull;
- attribute (CanvasPattern or CanvasGradient)? writableNullableUnion;
-
- // Date types
- void passDate(Date arg);
- void passNullableDate(Date? arg);
- void passOptionalDate(optional Date arg);
- void passOptionalNullableDate(optional Date? arg);
- void passOptionalNullableDateWithDefaultValue(optional Date? arg = null);
- void passDateSequence(sequence<Date> arg);
- void passNullableDateSequence(sequence<Date?> arg);
- void passDateMozMap(MozMap<Date> arg);
- Date receiveDate();
- Date? receiveNullableDate();
-
- // Promise types
- void passPromise(Promise<any> arg);
- void passNullablePromise(Promise<any>? arg);
- void passOptionalPromise(optional Promise<any> arg);
- void passOptionalNullablePromise(optional Promise<any>? arg);
- void passOptionalNullablePromiseWithDefaultValue(optional Promise<any>? arg = null);
- void passPromiseSequence(sequence<Promise<any>> arg);
- void passNullablePromiseSequence(sequence<Promise<any>?> arg);
- Promise<any> receivePromise();
- Promise<any> receiveAddrefedPromise();
-
- // binaryNames tests
- void methodRenamedFrom();
- [BinaryName="otherMethodRenamedTo"]
- void otherMethodRenamedFrom();
- void methodRenamedFrom(byte argument);
- readonly attribute byte attributeGetterRenamedFrom;
- attribute byte attributeRenamedFrom;
- [BinaryName="otherAttributeRenamedTo"]
- attribute byte otherAttributeRenamedFrom;
-
- void passDictionary(optional Dict x);
- void passDictionary2(Dict x);
- [Cached, Pure]
- readonly attribute Dict readonlyDictionary;
- [Cached, Pure]
- readonly attribute Dict? readonlyNullableDictionary;
- [Cached, Pure]
- attribute Dict writableDictionary;
- [Cached, Pure, Frozen]
- readonly attribute Dict readonlyFrozenDictionary;
- [Cached, Pure, Frozen]
- readonly attribute Dict? readonlyFrozenNullableDictionary;
- [Cached, Pure, Frozen]
- attribute Dict writableFrozenDictionary;
- Dict receiveDictionary();
- Dict? receiveNullableDictionary();
- void passOtherDictionary(optional GrandparentDict x);
- void passSequenceOfDictionaries(sequence<Dict> x);
- void passMozMapOfDictionaries(MozMap<GrandparentDict> x);
- // No support for nullable dictionaries inside a sequence (nor should there be)
- // void passSequenceOfNullableDictionaries(sequence<Dict?> x);
- void passDictionaryOrLong(optional Dict x);
- void passDictionaryOrLong(long x);
-
- void passDictContainingDict(optional DictContainingDict arg);
- void passDictContainingSequence(optional DictContainingSequence arg);
- DictContainingSequence receiveDictContainingSequence();
- void passVariadicDictionary(Dict... arg);
-
- // EnforceRange/Clamp tests
- void dontEnforceRangeOrClamp(byte arg);
- void doEnforceRange([EnforceRange] byte arg);
- void doClamp([Clamp] byte arg);
- [EnforceRange] attribute byte enforcedByte;
- [Clamp] attribute byte clampedByte;
-
- // Typedefs
- const myLong myLongConstant = 5;
- void exerciseTypedefInterfaces1(AnotherNameForTestJSImplInterface arg);
- AnotherNameForTestJSImplInterface exerciseTypedefInterfaces2(NullableTestJSImplInterface arg);
- void exerciseTypedefInterfaces3(YetAnotherNameForTestJSImplInterface arg);
-
- // Deprecated methods and attributes
- [Deprecated="GetAttributeNode"]
- attribute byte deprecatedAttribute;
- [Deprecated="GetAttributeNode"]
- byte deprecatedMethod();
- [Deprecated="GetAttributeNode"]
- void deprecatedMethodWithContext(any arg);
-
- // Static methods and attributes
- // FIXME: Bug 863952 Static things are not supported yet
- /*
- static attribute boolean staticAttribute;
- static void staticMethod(boolean arg);
- static void staticMethodWithContext(any arg);
-
- // Deprecated static methods and attributes
- [Deprecated="GetAttributeNode"]
- static attribute byte staticDeprecatedAttribute;
- [Deprecated="GetAttributeNode"]
- static byte staticDeprecatedMethod();
- [Deprecated="GetAttributeNode"]
- static byte staticDeprecatedMethodWithContext();
- */
-
- // Overload resolution tests
- //void overload1(DOMString... strs);
- boolean overload1(TestJSImplInterface arg);
- TestJSImplInterface overload1(DOMString strs, TestJSImplInterface arg);
- void overload2(TestJSImplInterface arg);
- void overload2(optional Dict arg);
- void overload2(boolean arg);
- void overload2(DOMString arg);
- void overload2(Date arg);
- void overload3(TestJSImplInterface arg);
- void overload3(MyTestCallback arg);
- void overload3(boolean arg);
- void overload4(TestJSImplInterface arg);
- void overload4(TestCallbackInterface arg);
- void overload4(DOMString arg);
- void overload5(long arg);
- void overload5(MyTestEnum arg);
- void overload6(long arg);
- void overload6(boolean arg);
- void overload7(long arg);
- void overload7(boolean arg);
- void overload7(ByteString arg);
- void overload8(long arg);
- void overload8(TestJSImplInterface arg);
- void overload9(long? arg);
- void overload9(DOMString arg);
- void overload10(long? arg);
- void overload10(object arg);
- void overload11(long arg);
- void overload11(DOMString? arg);
- void overload12(long arg);
- void overload12(boolean? arg);
- void overload13(long? arg);
- void overload13(boolean arg);
- void overload14(optional long arg);
- void overload14(TestInterface arg);
- void overload15(long arg);
- void overload15(optional TestInterface arg);
- void overload16(long arg);
- void overload16(optional TestInterface? arg);
- void overload17(sequence<long> arg);
- void overload17(MozMap<long> arg);
- void overload18(MozMap<DOMString> arg);
- void overload18(sequence<DOMString> arg);
- void overload19(sequence<long> arg);
- void overload19(optional Dict arg);
- void overload20(optional Dict arg);
- void overload20(sequence<long> arg);
-
- // Variadic handling
- void passVariadicThirdArg(DOMString arg1, long arg2, TestJSImplInterface... arg3);
-
- // Conditionally exposed methods/attributes
- [Pref="abc.def"]
- readonly attribute boolean prefable1;
- [Pref="abc.def"]
- readonly attribute boolean prefable2;
- [Pref="ghi.jkl"]
- readonly attribute boolean prefable3;
- [Pref="ghi.jkl"]
- readonly attribute boolean prefable4;
- [Pref="abc.def"]
- readonly attribute boolean prefable5;
- [Pref="abc.def", Func="nsGenericHTMLElement::TouchEventsEnabled"]
- readonly attribute boolean prefable6;
- [Pref="abc.def", Func="nsGenericHTMLElement::TouchEventsEnabled"]
- readonly attribute boolean prefable7;
- [Pref="ghi.jkl", Func="nsGenericHTMLElement::TouchEventsEnabled"]
- readonly attribute boolean prefable8;
- [Pref="abc.def", Func="nsGenericHTMLElement::TouchEventsEnabled"]
- readonly attribute boolean prefable9;
- [Pref="abc.def"]
- void prefable10();
- [Pref="abc.def", Func="nsGenericHTMLElement::TouchEventsEnabled"]
- void prefable11();
- [Pref="abc.def", Func="TestFuncControlledMember"]
- readonly attribute boolean prefable12;
- [Pref="abc.def", Func="nsGenericHTMLElement::TouchEventsEnabled"]
- void prefable13();
- [Pref="abc.def", Func="TestFuncControlledMember"]
- readonly attribute boolean prefable14;
- [Func="TestFuncControlledMember"]
- readonly attribute boolean prefable15;
- [Func="TestFuncControlledMember"]
- readonly attribute boolean prefable16;
- [Pref="abc.def", Func="TestFuncControlledMember"]
- void prefable17();
- [Func="TestFuncControlledMember"]
- void prefable18();
- [Func="TestFuncControlledMember"]
- void prefable19();
- [Pref="abc.def", Func="TestFuncControlledMember", ChromeOnly]
- void prefable20();
-
- // Conditionally exposed methods/attributes involving [SecureContext]
- [SecureContext]
- readonly attribute boolean conditionalOnSecureContext1;
- [SecureContext, Pref="abc.def"]
- readonly attribute boolean conditionalOnSecureContext2;
- [SecureContext, Pref="abc.def", Func="nsGenericHTMLElement::TouchEventsEnabled"]
- readonly attribute boolean conditionalOnSecureContext3;
- [SecureContext, Pref="abc.def", Func="TestFuncControlledMember"]
- readonly attribute boolean conditionalOnSecureContext4;
- [SecureContext]
- void conditionalOnSecureContext5();
- [SecureContext, Pref="abc.def"]
- void conditionalOnSecureContext6();
- [SecureContext, Pref="abc.def", Func="nsGenericHTMLElement::TouchEventsEnabled"]
- void conditionalOnSecureContext7();
- [SecureContext, Pref="abc.def", Func="TestFuncControlledMember"]
- void conditionalOnSecureContext8();
-
- // Miscellania
- [LenientThis] attribute long attrWithLenientThis;
- // FIXME: Bug 863954 Unforgeable things get all confused when
- // non-JS-implemented interfaces inherit from JS-implemented ones or vice
- // versa.
- // [Unforgeable] readonly attribute long unforgeableAttr;
- // [Unforgeable, ChromeOnly] readonly attribute long unforgeableAttr2;
- // [Unforgeable] long unforgeableMethod();
- // [Unforgeable, ChromeOnly] long unforgeableMethod2();
- // FIXME: Bug 863955 No stringifiers yet
- // stringifier;
- void passRenamedInterface(TestRenamedInterface arg);
- [PutForwards=writableByte] readonly attribute TestJSImplInterface putForwardsAttr;
- [PutForwards=writableByte, LenientThis] readonly attribute TestJSImplInterface putForwardsAttr2;
- [PutForwards=writableByte, ChromeOnly] readonly attribute TestJSImplInterface putForwardsAttr3;
- [Throws] void throwingMethod();
- [Throws] attribute boolean throwingAttr;
- [GetterThrows] attribute boolean throwingGetterAttr;
- [SetterThrows] attribute boolean throwingSetterAttr;
- [CEReactions] void ceReactionsMethod();
- [CEReactions] void ceReactionsMethodOverload();
- [CEReactions] void ceReactionsMethodOverload(DOMString bar);
- [CEReactions] attribute boolean ceReactionsAttr;
- // NeedsSubjectPrincipal not supported on JS-implemented things for
- // now, because we always pass in the caller principal anyway.
- // [NeedsSubjectPrincipal] void needsSubjectPrincipalMethod();
- // [NeedsSubjectPrincipal] attribute boolean needsSubjectPrincipalAttr;
- // legacycaller short(unsigned long arg1, TestInterface arg2);
- void passArgsWithDefaults(optional long arg1,
- optional TestInterface? arg2 = null,
- optional Dict arg3, optional double arg4 = 5.0,
- optional float arg5);
- attribute any jsonifierShouldSkipThis;
- attribute TestParentInterface jsonifierShouldSkipThis2;
- attribute TestCallbackInterface jsonifierShouldSkipThis3;
- jsonifier;
-
- attribute byte dashed-attribute;
- void dashed-method();
-
- // If you add things here, add them to TestCodeGen as well
-};
-
-[NavigatorProperty="TestNavigator", JSImplementation="@mozilla.org/test;1"]
-interface TestNavigator {
-};
-
-[Constructor, NavigatorProperty="TestNavigatorWithConstructor", JSImplementation="@mozilla.org/test;1"]
-interface TestNavigatorWithConstructor {
-};
-
-interface TestCImplementedInterface : TestJSImplInterface {
-};
-
-interface TestCImplementedInterface2 {
-};
-
-[NoInterfaceObject,
- JSImplementation="@mozilla.org/test-js-impl-interface;2"]
-interface TestJSImplNoInterfaceObject {
- [Cached, Pure]
- readonly attribute byte cachedByte;
-};
diff --git a/dom/bindings/test/TestJSImplInheritanceGen.webidl b/dom/bindings/test/TestJSImplInheritanceGen.webidl
deleted file mode 100644
index e62dbd10be..0000000000
--- a/dom/bindings/test/TestJSImplInheritanceGen.webidl
+++ /dev/null
@@ -1,29 +0,0 @@
-/* -*- 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/.
- */
-
-[Constructor, JSImplementation="@mozilla.org/test-js-impl-interface2;1"]
-interface TestJSImplInterface2 : TestCImplementedInterface {
-};
-
-[Constructor, JSImplementation="@mozilla.org/test-js-impl-interface3;1"]
-interface TestJSImplInterface3 : TestCImplementedInterface2 {
-};
-
-// Important: TestJSImplInterface5 needs to come before TestJSImplInterface6 in
-// this file to test what it's trying to test.
-[Constructor, JSImplementation="@mozilla.org/test-js-impl-interface5;1"]
-interface TestJSImplInterface5 : TestJSImplInterface6 {
-};
-
-// Important: TestJSImplInterface6 needs to come after TestJSImplInterface3 in
-// this file to test what it's trying to test.
-[Constructor, JSImplementation="@mozilla.org/test-js-impl-interface6;1"]
-interface TestJSImplInterface6 : TestJSImplInterface3 {
-};
-
-[Constructor, JSImplementation="@mozilla.org/test-js-impl-interface4;1"]
-interface TestJSImplInterface4 : EventTarget {
-};
diff --git a/dom/bindings/test/TestTypedef.webidl b/dom/bindings/test/TestTypedef.webidl
deleted file mode 100644
index 7f758c79e8..0000000000
--- a/dom/bindings/test/TestTypedef.webidl
+++ /dev/null
@@ -1,7 +0,0 @@
-/* -*- 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/.
- */
-
-typedef TestInterface YetAnotherNameForTestInterface;
diff --git a/dom/bindings/test/chrome.ini b/dom/bindings/test/chrome.ini
deleted file mode 100644
index 9fdbd7fd30..0000000000
--- a/dom/bindings/test/chrome.ini
+++ /dev/null
@@ -1,22 +0,0 @@
-[DEFAULT]
-support-files =
- !/dom/bindings/test/file_bug775543.html
- !/dom/bindings/test/file_document_location_set_via_xray.html
- !/dom/bindings/test/file_dom_xrays.html
- !/dom/bindings/test/file_proxies_via_xray.html
-
-[test_bug775543.html]
-[test_document_location_set_via_xray.html]
-[test_dom_xrays.html]
-[test_proxies_via_xray.html]
-[test_document_location_via_xray_cached.html]
-[test_blacklisted_prerendering_function.xul]
-support-files =
- file_focuser.html
- file_fullScreenPropertyAccessor.html
-skip-if = e10s # prerendering doesn't work in e10s yet
-[test_kill_longrunning_prerendered_content.xul]
-skip-if = e10s # prerendering doesn't work in e10s yet
-[test_bug1123516_maplikesetlikechrome.xul]
-skip-if = debug == false
-[test_bug1287912.html]
diff --git a/dom/bindings/test/file_InstanceOf.html b/dom/bindings/test/file_InstanceOf.html
deleted file mode 100644
index 487010fa42..0000000000
--- a/dom/bindings/test/file_InstanceOf.html
+++ /dev/null
@@ -1,12 +0,0 @@
-<!DOCTYPE HTML>
-<html>
-<body>
-<script type="application/javascript">
-function runTest()
-{
- return [ parent.HTMLElement.prototype instanceof Element,
- parent.HTMLElement.prototype instanceof parent.Element ];
-}
-</script>
-</body>
-</html>
diff --git a/dom/bindings/test/file_bug775543.html b/dom/bindings/test/file_bug775543.html
deleted file mode 100644
index ee8c14c4d9..0000000000
--- a/dom/bindings/test/file_bug775543.html
+++ /dev/null
@@ -1,5 +0,0 @@
-<body>
-<script>
-worker = new Worker("a");
-</script>
-</body>
diff --git a/dom/bindings/test/file_document_location_set_via_xray.html b/dom/bindings/test/file_document_location_set_via_xray.html
deleted file mode 100644
index 323acba666..0000000000
--- a/dom/bindings/test/file_document_location_set_via_xray.html
+++ /dev/null
@@ -1,5 +0,0 @@
-<body>
-<script>
-document.x = 5;
-</script>
-</body>
diff --git a/dom/bindings/test/file_dom_xrays.html b/dom/bindings/test/file_dom_xrays.html
deleted file mode 100644
index 36b3f8a300..0000000000
--- a/dom/bindings/test/file_dom_xrays.html
+++ /dev/null
@@ -1,24 +0,0 @@
-<!DOCTYPE html>
-<html>
- <script>
- window.expando = 42;
- window.shadowedIframe = 42;
- Object.setPrototypeOf(window, Object.create(Window.prototype,
- {
- shadowedIframe: { value: 42 },
- iframe: { value: 42 },
- document: { value: 42 },
- addEventListener: { value: 42 },
- toString: { value: 42 }
- }));
- window.documentElement.expando = 42;
- Object.defineProperty(window.documentElement, "version", { value: 42 });
- </script>
- <iframe name="shadowedIframe" id="shadowedIframe"></iframe>
- <iframe name="iframe" id="iframe"></iframe>
- <iframe name="document" id="document"></iframe>
- <iframe name="self" id="self"></iframe>
- <iframe name="addEventListener" id="addEventListener"></iframe>
- <iframe name="toString" id="toString"></iframe>
- <iframe name="item" id="item"></iframe>
-</html>
diff --git a/dom/bindings/test/file_focuser.html b/dom/bindings/test/file_focuser.html
deleted file mode 100644
index 0d5240f95b..0000000000
--- a/dom/bindings/test/file_focuser.html
+++ /dev/null
@@ -1,24 +0,0 @@
-<!DOCTYPE HTML>
-<div id="stage"></div>
-<script>
- function stage(str) {
- var s = document.getElementById("stage");
- s.textContent = str;
- }
- stage("before");
- setTimeout(function() {
- stage("in timeout");
- });
- setInterval(function() {
- stage("in interval");
- });
- addEventListener("keydown", function() {
- stage("keydown");
- }, false);
- try {
- focus();
- stage("after");
- } catch(e) {
- stage("exception raised");
- }
-</script>
diff --git a/dom/bindings/test/file_fullScreenPropertyAccessor.html b/dom/bindings/test/file_fullScreenPropertyAccessor.html
deleted file mode 100644
index 92a37e0bac..0000000000
--- a/dom/bindings/test/file_fullScreenPropertyAccessor.html
+++ /dev/null
@@ -1,24 +0,0 @@
-<!DOCTYPE HTML>
-<div id="stage"></div>
-<script>
- function stage(str) {
- var s = document.getElementById("stage");
- s.textContent = str;
- }
- stage("before");
- setTimeout(function() {
- stage("in timeout");
- });
- setInterval(function() {
- stage("in interval");
- });
- addEventListener("keydown", function() {
- stage("keydown");
- }, false);
- try {
- window.fullScreen;
- stage("after");
- } catch(e) {
- stage("exception raised");
- }
-</script>
diff --git a/dom/bindings/test/file_proxies_via_xray.html b/dom/bindings/test/file_proxies_via_xray.html
deleted file mode 100644
index 2e9a318309..0000000000
--- a/dom/bindings/test/file_proxies_via_xray.html
+++ /dev/null
@@ -1,8 +0,0 @@
-<!DOCTYPE html>
-<html>
- <script>
- document.x = 5
- </script>
- <img id="y" name="y"></div>
- <img id="z" name="z"></div>
-</html>
diff --git a/dom/bindings/test/forOf_iframe.html b/dom/bindings/test/forOf_iframe.html
deleted file mode 100644
index 91417aba0e..0000000000
--- a/dom/bindings/test/forOf_iframe.html
+++ /dev/null
@@ -1,13 +0,0 @@
-<!DOCTYPE HTML>
-<html>
-<head>
- <title>iframe content for test_forOf_iframe.html</title>
-</head>
-<body>
- <div id="basket">
- <span id="egg0"></span>
- <span id="egg1"><span id="duckling1"></span></span>
- <span id="egg2"></span>
- </div>
-</body>
-</html>
diff --git a/dom/bindings/test/mochitest.ini b/dom/bindings/test/mochitest.ini
deleted file mode 100644
index 2cd322e741..0000000000
--- a/dom/bindings/test/mochitest.ini
+++ /dev/null
@@ -1,79 +0,0 @@
-[DEFAULT]
-support-files =
- file_InstanceOf.html
- file_bug775543.html
- file_document_location_set_via_xray.html
- file_dom_xrays.html
- file_proxies_via_xray.html
- forOf_iframe.html
- !/js/xpconnect/tests/mochitest/file_empty.html
-
-[test_async_stacks.html]
-[test_ByteString.html]
-[test_InstanceOf.html]
-[test_bug560072.html]
-[test_bug742191.html]
-[test_bug759621.html]
-[test_bug773326.html]
-[test_bug788369.html]
-[test_bug852846.html]
-[test_bug862092.html]
-[test_bug1036214.html]
-skip-if = debug == false
-[test_bug963382.html]
-skip-if = debug == false
-[test_bug1041646.html]
-[test_bug1123875.html]
-[test_barewordGetsWindow.html]
-[test_callback_across_document_open.html]
-[test_callback_default_thisval.html]
-[test_cloneAndImportNode.html]
-[test_defineProperty.html]
-[test_enums.html]
-[test_exceptionThrowing.html]
-[test_exception_messages.html]
-[test_forOf.html]
-[test_integers.html]
-[test_interfaceName.html]
-[test_interfaceToString.html]
-[test_exceptions_from_jsimplemented.html]
-tags = webrtc
-[test_lenientThis.html]
-[test_lookupGetter.html]
-[test_namedNoIndexed.html]
-[test_named_getter_enumerability.html]
-[test_Object.prototype_props.html]
-[test_queryInterface.html]
-[test_returnUnion.html]
-skip-if = debug == false
-[test_usvstring.html]
-skip-if = debug == false
-[test_sequence_wrapping.html]
-subsuite = gpu
-[test_setWithNamedGetterNoNamedSetter.html]
-[test_throwing_method_noDCE.html]
-[test_treat_non_object_as_null.html]
-[test_traceProtos.html]
-[test_sequence_detection.html]
-skip-if = debug == false
-[test_exception_options_from_jsimplemented.html]
-skip-if = debug == false
-[test_promise_rejections_from_jsimplemented.html]
-skip-if = debug == false
-[test_worker_UnwrapArg.html]
-[test_unforgeablesonexpando.html]
-[test_crossOriginWindowSymbolAccess.html]
-[test_primitive_this.html]
-[test_callback_exceptions.html]
-[test_bug1123516_maplikesetlike.html]
-skip-if = debug == false
-[test_jsimplemented_eventhandler.html]
-skip-if = debug == false
-[test_iterable.html]
-skip-if = debug == false
-[test_oom_reporting.html]
-[test_domProxyArrayLengthGetter.html]
-[test_exceptionSanitization.html]
-skip-if = os == "android"
-[test_stringBindings.html]
-skip-if = debug == false
diff --git a/dom/bindings/test/moz.build b/dom/bindings/test/moz.build
deleted file mode 100644
index 7d0cb6c212..0000000000
--- a/dom/bindings/test/moz.build
+++ /dev/null
@@ -1,58 +0,0 @@
-# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
-# vim: set filetype=python:
-# 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/.
-
-DEFINES.update({
- 'IMPL_LIBXUL': True,
- 'MOZILLA_INTERNAL_API': True,
-})
-
-# Do NOT export this library. We don't actually want our test code
-# being added to libxul or anything.
-
-Library('dombindings_test_s')
-
-EXTRA_COMPONENTS += [
- 'TestInterfaceJS.js',
- 'TestInterfaceJS.manifest',
- 'TestInterfaceJSMaplike.js'
-]
-
-MOCHITEST_MANIFESTS += ['mochitest.ini']
-
-MOCHITEST_CHROME_MANIFESTS += ['chrome.ini']
-
-TEST_WEBIDL_FILES += [
- 'TestDictionary.webidl',
- 'TestJSImplInheritanceGen.webidl',
- 'TestTypedef.webidl',
-]
-
-PREPROCESSED_TEST_WEBIDL_FILES += [
- 'TestCodeGen.webidl',
- 'TestExampleGen.webidl',
- 'TestJSImplGen.webidl',
-]
-
-WEBIDL_EXAMPLE_INTERFACES += [
- 'TestExampleInterface',
- 'TestExampleProxyInterface',
- 'TestExampleWorkerInterface',
-]
-
-# Bug 932082 tracks having bindings use namespaced includes.
-LOCAL_INCLUDES += [
- '!/dist/include/mozilla/dom',
-]
-
-LOCAL_INCLUDES += [
- '!..',
- '/dom/bindings',
- '/js/xpconnect/src',
- '/js/xpconnect/wrappers',
-]
-
-if CONFIG['GNU_CXX']:
- CXXFLAGS += ['-Wno-error=shadow']
diff --git a/dom/bindings/test/test_ByteString.html b/dom/bindings/test/test_ByteString.html
deleted file mode 100644
index c7e6321173..0000000000
--- a/dom/bindings/test/test_ByteString.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE HTML>
-<html>
-<!--
-https://bugzilla.mozilla.org/show_bug.cgi?id=796850
--->
-<head>
- <meta charset="utf-8">
- <title>Test for ByteString support</title>
- <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
- <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
-</head>
-<body>
-<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=796850">Mozilla Bug 796850</a>
-<p id="display"></p>
-<pre id="test">
-<script type="application/javascript">
-
- /** Test for Bug 796850 **/
- var xhr = new XMLHttpRequest();
- caught = false;
- try {
- xhr.open("\u5427", "about:mozilla", true);
- }
- catch (TypeError) {
- caught = true;
- }
- ok(caught, "Character values > 255 not rejected for ByteString");
-
-</script>
-</pre>
-</body>
-</html>
diff --git a/dom/bindings/test/test_InstanceOf.html b/dom/bindings/test/test_InstanceOf.html
deleted file mode 100644
index 514ec1b2aa..0000000000
--- a/dom/bindings/test/test_InstanceOf.html
+++ /dev/null
@@ -1,54 +0,0 @@
-<!DOCTYPE HTML>
-<html>
-<!--
-https://bugzilla.mozilla.org/show_bug.cgi?id=748983
--->
-<head>
- <meta charset="utf-8">
- <title>Test for Bug 748983</title>
- <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
- <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
-</head>
-<body>
-<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=748983">Mozilla Bug 748983</a>
-<p id="display"></p>
-<div id="content" style="display: none">
-</div>
-<pre id="test">
-<script type="application/javascript">
-
-/** Test for Bug 748983 **/
-
-SimpleTest.waitForExplicitFinish();
-
-function runTest()
-{
- ok(document instanceof EventTarget, "document is an event target")
- ok(new XMLHttpRequest() instanceof XMLHttpRequest, "instanceof should work on XHR");
- ok(HTMLElement.prototype instanceof Node, "instanceof needs to walk the prototype chain")
-
- var otherWin = document.getElementById("testFrame").contentWindow;
-
- ok(otherWin.HTMLElement.prototype instanceof otherWin.Node, "Same-origin instanceof of a interface prototype object should work, even if called cross-origin");
- ok(!(otherWin.HTMLElement.prototype instanceof Node), "Cross-origin instanceof of a interface prototype object shouldn't work");
-
- // We need to reset HTMLElement.prototype.__proto__ to the original value
- // before using anything from the harness, otherwise the harness code breaks
- // in weird ways.
- HTMLElement.prototype.__proto__ = otherWin.Element.prototype;
- var [ shouldSucceed, shouldFail ] = otherWin.runTest();
- shouldSucceed = shouldSucceed && HTMLElement.prototype instanceof otherWin.Element;
- shouldFail = shouldFail && HTMLElement.prototype instanceof Element;
- HTMLElement.prototype.__proto__ = Element.prototype;
-
- ok(shouldSucceed, "If an interface prototype object is on the protochain then instanceof with the interface object should succeed");
- ok(!shouldFail, "If an interface prototype object is not on the protochain then instanceof with the interface object should succeed");
-
- SimpleTest.finish();
-}
-
-</script>
-</pre>
-<iframe id="testFrame" src="file_InstanceOf.html" onload="runTest()"></iframe>
-</body>
-</html>
diff --git a/dom/bindings/test/test_Object.prototype_props.html b/dom/bindings/test/test_Object.prototype_props.html
deleted file mode 100644
index 3ab27c5e4a..0000000000
--- a/dom/bindings/test/test_Object.prototype_props.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE html>
-<meta charset=utf-8>
-<title>Test for bug 987110</title>
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<div id="log"></div>
-<script>
-test(function() {
- var props = Object.getOwnPropertyNames(Object.prototype);
- // If you change this list, make sure it continues to match the list in
- // Codegen.py's CGDictionary.getMemberDefinition method.
- var expected = [
- "constructor", "toSource", "toString", "toLocaleString", "valueOf",
- "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable",
- "__defineGetter__", "__defineSetter__", "__lookupGetter__",
- "__lookupSetter__", "__proto__"
- ];
- assert_array_equals(props.sort(), expected.sort());
-}, "Own properties of Object.prototype");
-</script>
diff --git a/dom/bindings/test/test_async_stacks.html b/dom/bindings/test/test_async_stacks.html
deleted file mode 100644
index 8b655a14d7..0000000000
--- a/dom/bindings/test/test_async_stacks.html
+++ /dev/null
@@ -1,108 +0,0 @@
-<!DOCTYPE HTML>
-<html>
-<!--
-https://bugzilla.mozilla.org/show_bug.cgi?id=1148593
--->
-<head>
- <meta charset="utf-8">
- <title>Test for Bug 1148593</title>
- <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
- <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
- <script type="application/javascript">
-
- /** Test for Bug 1148593 **/
-
- SimpleTest.waitForExplicitFinish();
-
- var TESTS;
-
- function nextTest() {
- var t = TESTS.pop();
- if (t) {
- t();
- } else {
- SimpleTest.finish();
- }
- }
-
- function checkStack(functionName) {
- try {
- noSuchFunction();
- } catch (e) {
- ok(e.stack.indexOf(functionName) >= 0, "stack includes " + functionName);
- }
- nextTest();
- }
-
- function eventListener() {
- checkStack("registerEventListener");
- }
- function registerEventListener(link) {
- link.onload = eventListener;
- }
- function eventTest() {
- var link = document.createElement("link");
- link.rel = "stylesheet";
- link.href = "data:text/css,";
- registerEventListener(link);
- document.body.appendChild(link);
- }
-
- function xhrListener() {
- checkStack("xhrTest");
- }
- function xhrTest() {
- var ourFile = location.href;
- var x = new XMLHttpRequest();
- x.onload = xhrListener;
- x.open("get", ourFile, true);
- x.send();
- }
-
- function rafListener() {
- checkStack("rafTest");
- }
- function rafTest() {
- requestAnimationFrame(rafListener);
- }
-
- var intervalId;
- function intervalHandler() {
- clearInterval(intervalId);
- checkStack("intervalTest");
- }
- function intervalTest() {
- intervalId = setInterval(intervalHandler, 5);
- }
-
- function postMessageHandler(ev) {
- ev.stopPropagation();
- checkStack("postMessageTest");
- }
- function postMessageTest() {
- window.addEventListener("message", postMessageHandler, true);
- window.postMessage("whatever", "*");
- }
-
- function runTests() {
- TESTS = [postMessageTest, intervalTest, rafTest, xhrTest, eventTest];
- nextTest();
- }
-
- addLoadEvent(function() {
- SpecialPowers.pushPrefEnv(
- {"set": [['javascript.options.asyncstack', true]]},
- runTests);
- });
- </script>
-</head>
-<body>
-<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1148593">Mozilla Bug 1148593</a>
-<p id="display"></p>
-<div id="content" style="display: none">
-
-</div>
-<pre id="test">
-</pre>
-</body>
-</html>
diff --git a/dom/bindings/test/test_barewordGetsWindow.html b/dom/bindings/test/test_barewordGetsWindow.html
deleted file mode 100644
index e098eea539..0000000000
--- a/dom/bindings/test/test_barewordGetsWindow.html
+++ /dev/null
@@ -1,60 +0,0 @@
-<!DOCTYPE HTML>
-<html>
-<!--
-https://bugzilla.mozilla.org/show_bug.cgi?id=936056
--->
-<head>
- <meta charset="utf-8">
- <title>Test for Bug 936056</title>
- <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
- <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
- <script type="application/javascript">
-
- /** Test for Bug 936056 **/
- SimpleTest.waitForExplicitFinish();
- window.onload = function() {
- var desc = Object.getOwnPropertyDescriptor(frames[0], "document");
- if (!desc || !desc.get) {
- todo(false, "This test does nothing so far, but will once Window is on WebIDL bindings");
- SimpleTest.finish();
- return;
- }
- get = desc.get;
- ok(get, "Couldn't find document getter");
- Object.defineProperty(frames[0], "foo", { get: get, configurable: true });
-
- var barewordFunc = frames[0].eval("(function (count) { var doc; for (var i = 0; i < count; ++i) doc = foo; return doc.documentElement; })");
- var qualifiedFunc = frames[0].eval("(function (count) { var doc; for (var i = 0; i < count; ++i) doc = window.document; return doc.documentElement; })");
- document.querySelector("iframe").onload = function () {
- // interp
- is(barewordFunc(1).textContent, "OLD", "Bareword should see own inner 1");
- is(qualifiedFunc(1).textContent, "NEW",
- "Qualified should see current inner 1");
- // baseline
- is(barewordFunc(100).textContent, "OLD", "Bareword should see own inner 2");
- is(qualifiedFunc(100).textContent, "NEW",
- "Qualified should see current inner 2");
- // ion
- is(barewordFunc(10000).textContent, "OLD", "Bareword should see own inner 3");
- is(qualifiedFunc(10000).textContent, "NEW",
- "Qualified should see current inner 2");
- SimpleTest.finish();
- }
- frames[0].location = "data:text/plain,NEW";
- }
-
-
-
-
- </script>
-</head>
-<body>
-<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=936056">Mozilla Bug 936056</a>
-<p id="display"></p>
-<div id="content" style="display: none">
-<iframe src="data:text/plain,OLD"></iframe>
-</div>
-<pre id="test">
-</pre>
-</body>
-</html>
diff --git a/dom/bindings/test/test_blacklisted_prerendering_function.xul b/dom/bindings/test/test_blacklisted_prerendering_function.xul
deleted file mode 100644
index 02a76d88d9..0000000000
--- a/dom/bindings/test/test_blacklisted_prerendering_function.xul
+++ /dev/null
@@ -1,124 +0,0 @@
-<?xml version="1.0"?>
-<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
-<?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css" type="text/css"?>
-<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
- xmlns:html="http://www.w3.org/1999/xhtml"
- onload="runTest();">
- <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
- <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/EventUtils.js"></script>
-
-<script class="testbody" type="application/javascript">
-<![CDATA[
-
- SimpleTest.waitForExplicitFinish();
-
- function Listener(aBrowser, aPrerendered, aCallback) {
- this.init(aBrowser, aPrerendered, aCallback);
- }
-
- Listener.prototype = {
- init: function(aBrowser, aPrerendered, aCallback) {
- this.mBrowser = aBrowser;
- this.mPrerendered = aPrerendered;
- this.mCallback = aCallback;
- },
- QueryInterface: function(aIID) {
- if (aIID.equals(Components.interfaces.nsIWebProgressListener) ||
- aIID.equals(Components.interfaces.nsISupportsWeakReference) ||
- aIID.equals(Components.interfaces.nsISupports))
- return this;
- throw Components.results.NS_NOINTERFACE;
- },
- onStateChange : function(aWebProgress, aRequest, aStateFlags, aStatus) {
- if ((aStateFlags & Components.interfaces.nsIWebProgressListener.STATE_STOP) &&
- (aStateFlags & Components.interfaces.nsIWebProgressListener.STATE_IS_DOCUMENT)) {
- var doc = this.mBrowser.contentDocument;
- var stage = doc.getElementById("stage");
- if (this.mPrerendered) {
- is(stage.textContent, "before", "The blacklisted call should properly be intercepted in prerendering mode");
- } else {
- // In normal mode, we may or may not have run the timeout and/or the interval.
- switch (stage.textContent) {
- case "after":
- case "in timeout":
- case "in interval":
- ok(true, "The blacklisted call should work fine in normal mode");
- break;
- default:
- ok(false, "The blacklisted call should work fine in normal mode");
- break;
- }
- }
- progress.removeProgressListener(progressListener);
-
- // Set three timeouts to see if the interval triggered
- var self = this;
- function checkInterval() {
- var expected = self.mPrerendered ? "before" : "in interval";
- var desc = self.mPrerendered ? "No timer should be running" : "Timers should run as normal";
- is(stage.textContent, expected, desc);
- // Now, dispatch a key event to the window and see if the keydown handler runs
- synthesizeKey("a", {}, self.mBrowser.contentWindow);
- expected = self.mPrerendered ? "before" : "keydown";
- desc = self.mPrerendered ? "No event handler should be running" : "Event handlers should run as normal";
- is(stage.textContent, expected, desc);
- self.mCallback();
- }
- setTimeout(function() {
- setTimeout(function() {
- setTimeout(function() {
- checkInterval();
- }, 0);
- }, 0);
- }, 0);
- }
- },
- onProgressChange : function(aWebProgress, aRequest,
- aCurSelfProgress, aMaxSelfProgress,
- aCurTotalProgress, aMaxTotalProgress) {},
- onLocationChange : function(aWebProgress, aRequest, aLocation, aFlags) {},
- onStatusChange : function(aWebProgress, aRequest, aStatus, aMessage) {},
- onSecurityChange : function(aWebProgress, aRequest, aState) {},
- mBrowser: null,
- mPrerendered: false,
- mCallback: null
- };
-
- var progress, progressListener;
-
- function runTest() {
- testStep(false, "file_focuser.html", function() {
- testStep(true, "file_focuser.html", function() {
- testStep(false, "file_fullScreenPropertyAccessor.html", function() {
- testStep(true, "file_fullScreenPropertyAccessor.html", function() {
- SimpleTest.finish();
- });
- });
- });
- });
- }
-
- function testStep(aPrerendered, aFileName, aCallback) {
- var browser = document.getElementById(aPrerendered ? "prerendered" : "normal");;
- progressListener = new Listener(browser, aPrerendered, aCallback);
- var docShell = browser.docShell;
- progress = docShell.QueryInterface(Components.interfaces.nsIInterfaceRequestor)
- .getInterface(Components.interfaces.nsIWebProgress);
- progress.addProgressListener(progressListener,
- Components.interfaces.nsIWebProgress.NOTIFY_ALL);
- browser.loadURI("chrome://mochitests/content/chrome/dom/bindings/test/" + aFileName);
- }
-
-]]>
-</script>
-
-<body id="html_body" xmlns="http://www.w3.org/1999/xhtml">
-<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1069719">Mozilla Bug 1069719</a>
-<p id="display"></p>
-
-<pre id="test">
-</pre>
-</body>
-<browser prerendered="true" id="prerendered"/>
-<browser id="normal"/>
-</window>
diff --git a/dom/bindings/test/test_bug1036214.html b/dom/bindings/test/test_bug1036214.html
deleted file mode 100644
index dd98eb482f..0000000000
--- a/dom/bindings/test/test_bug1036214.html
+++ /dev/null
@@ -1,123 +0,0 @@
-<!DOCTYPE HTML>
-<html>
-<!--
-https://bugzilla.mozilla.org/show_bug.cgi?id=1036214
--->
-<head>
- <meta charset="utf-8">
- <title>Test for Bug 1036214</title>
- <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
- <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
- <script type="application/javascript">
-
- /** Test for subsumes-checking |any| and |object| for js-implemented WebIDL. **/
- SimpleTest.waitForExplicitFinish();
- var xoObjects = [];
- function setup() {
- xoObjects.push(window[0]);
- xoObjects.push(window[0].location);
- xoObjects.push(SpecialPowers.unwrap(SpecialPowers.wrap(window[0]).document));
- xoObjects.push(SpecialPowers);
- xoObjects.push(SpecialPowers.wrap);
- SpecialPowers.pushPrefEnv({set: [['dom.expose_test_interfaces', true]]}, go);
- }
-
- function checkThrows(f, msg) {
- try {
- f();
- ok(false, "Should have thrown: " + msg);
- } catch (e) {
- ok(true, "Threw correctly: " + msg);
- ok(/denied|insecure/.test(e), "Threw security exception: " + e);
- }
- }
-
- function go() {
-
- //
- // Test the basics of the test interface.
- //
-
- var any = { a: 11 };
- var obj = { b: 22, c: "str" };
- var obj2 = { foo: "baz" };
- var myDict = { anyMember: 42, objectMember: { answer: 42 }, objectOrStringMember: { answer: "anobject" },
- anySequenceMember: [{}, 1, "thirdinsequence"],
- innerDictionary: { innerObject: { answer: "rabbithole" } } };
- var t = new TestInterfaceJS(any, obj, myDict);
- is(Object.getPrototypeOf(t), TestInterfaceJS.prototype, "Prototype setup works correctly");
- is(t.anyArg, any, "anyArg is correct");
- is(t.objectArg, obj, "objectArg is correct");
- is(t.dictionaryArg.anyMember, 42, "dictionaryArg looks correct");
- is(t.dictionaryArg.objectMember.answer, 42, "dictionaryArg looks correct");
- t.anyAttr = 2;
- is(t.anyAttr, 2, "ping-pong any attribute works");
- t.objAttr = obj2;
- is(t.objAttr, obj2, "ping-pong object attribute works");
- t.dictionaryAttr = myDict;
- is(t.dictionaryAttr.anyMember, 42, "ping-pong dictionary attribute works");
- is(t.dictionaryAttr.objectMember.answer, 42, "ping-pong dictionary attribute works");
-
- is(any, t.pingPongAny(any), "ping-pong works with any");
- is(obj, t.pingPongObject(obj), "ping-pong works with obj");
- is(obj, t.pingPongObjectOrString(obj), "ping-pong works with obj or string");
- is("foo", t.pingPongObjectOrString("foo"), "ping-pong works with obj or string");
- is(t.pingPongDictionary(myDict).anyMember, 42, "ping pong works with dict");
- is(t.pingPongDictionary(myDict).objectMember.answer, 42, "ping pong works with dict");
- is(t.pingPongDictionary(myDict).objectOrStringMember.answer, "anobject", "ping pong works with dict");
- is(t.pingPongDictionary(myDict).anySequenceMember[2], "thirdinsequence", "ping pong works with dict");
- is(t.pingPongDictionary(myDict).innerDictionary.innerObject.answer, "rabbithole", "ping pong works with layered dicts");
- is(t.pingPongDictionaryOrLong({anyMember: 42}), 42, "ping pong (dict or long) works with dict");
- is(t.pingPongDictionaryOrLong(42), 42, "ping pong (dict or long) works with long");
- ok(/canary/.test(t.pingPongMap({ someVal: 42, someOtherVal: "canary" })), "ping pong works with mozmap");
- is(t.objectSequenceLength([{}, {}, {}]), 3, "ping pong works with object sequence");
- is(t.anySequenceLength([42, 'string', {}, undefined]), 4, "ping pong works with any sequence");
-
- //
- // Test that we throw in the cross-origin cases.
- //
-
- xoObjects.forEach(function(xoObj) {
- var blank = new TestInterfaceJS();
- checkThrows(() => new TestInterfaceJS(xoObj, undefined), "any param for constructor");
- checkThrows(() => new TestInterfaceJS(undefined, xoObj), "obj param for constructor");
- checkThrows(() => new TestInterfaceJS(undefined, undefined, { anyMember: xoObj }), "any dict param for constructor");
- checkThrows(() => new TestInterfaceJS(undefined, undefined, { objectMember: xoObj }), "object dict param for constructor");
- checkThrows(() => new TestInterfaceJS(undefined, undefined, { objectOrStringMember: xoObj }), "union dict param for constructor");
- checkThrows(() => new TestInterfaceJS(undefined, undefined, { anySequenceMember: [0, xoObj, 'hi' ] }), "sequence dict param for constructor");
- checkThrows(() => new TestInterfaceJS(undefined, undefined, { innerDictionary: { innerObject: xoObj } }), "inner dict param for constructor");
- checkThrows(() => t.anyAttr = xoObj, "anyAttr");
- checkThrows(() => t.objectAttr = xoObj, "objAttr");
- checkThrows(() => t.dictionaryAttr = { anyMember: xoObj }, "dictionaryAttr any");
- checkThrows(() => t.dictionaryAttr = { objectMember: xoObj }, "dictionaryAttr object");
- checkThrows(() => t.pingPongAny(xoObj), "pingpong any");
- checkThrows(() => t.pingPongObject(xoObj), "pingpong obj");
- checkThrows(() => t.pingPongObjectOrString(xoObj), "pingpong union");
- checkThrows(() => t.pingPongDictionary({ anyMember: xoObj }), "dictionary pingpong any");
- checkThrows(() => t.pingPongDictionary({ objectMember: xoObj }), "dictionary pingpong object");
- checkThrows(() => t.pingPongDictionary({ anyMember: xoObj, objectMember: xoObj }), "dictionary pingpong both");
- checkThrows(() => t.pingPongDictionary({ objectOrStringMember: xoObj }), "dictionary pingpong objectorstring");
- checkThrows(() => t.pingPongDictionaryOrLong({ objectMember: xoObj }), "unionable dictionary");
- checkThrows(() => t.pingPongDictionaryOrLong({ anyMember: xoObj }), "unionable dictionary");
- checkThrows(() => t.pingPongMap({ someMember: 42, someOtherMember: {}, crossOriginMember: xoObj }), "mozmap");
- checkThrows(() => t.objectSequenceLength([{}, {}, xoObj, {}]), "object sequence");
- checkThrows(() => t.anySequenceLength([42, 'someString', xoObj, {}]), "any sequence");
- });
-
-
- SimpleTest.finish();
- }
-
- </script>
-</head>
-<body>
-<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1036214">Mozilla Bug 1036214</a>
-<p id="display"></p>
-<div id="content" style="display: none">
-
-</div>
-<pre id="test">
-</pre>
-<iframe id="ifr" onload="setup();" src="http://example.org/tests/js/xpconnect/tests/mochitest/file_empty.html"></iframe>
-</body>
-</html>
diff --git a/dom/bindings/test/test_bug1041646.html b/dom/bindings/test/test_bug1041646.html
deleted file mode 100644
index 22baed454e..0000000000
--- a/dom/bindings/test/test_bug1041646.html
+++ /dev/null
@@ -1,49 +0,0 @@
-<!DOCTYPE HTML>
-<html>
-<!--
-https://bugzilla.mozilla.org/show_bug.cgi?id=1041646
--->
-<head>
- <meta charset="utf-8">
- <title>Test for Bug 1041646</title>
- <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
- <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
- <script type="application/javascript">
-
- /** Test for Bug 1041646 **/
- // We need to reject the promise with a DOMException, so make sure we have
- // something that produces one.
- function throwException() {
- document.createTextNode("").appendChild(document);
- }
- try {
- throwException();
- } catch (e) {
- ok(e instanceof DOMException, "This test won't test what it should be testing");
- }
-
- SimpleTest.waitForExplicitFinish();
-
- // We want a new DOMException each time here.
- for (var i = 0; i < 100; ++i) {
- new Promise(throwException);
- }
-
- // Now make sure we wait for all those promises above to reject themselves
- Promise.resolve(1).then(function() {
- SpecialPowers.gc(); // This should not assert or crash
- SimpleTest.finish();
- });
-
- </script>
-</head>
-<body>
-<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1041646">Mozilla Bug 1041646</a>
-<p id="display"></p>
-<div id="content" style="display: none">
-
-</div>
-<pre id="test">
-</pre>
-</body>
-</html>
diff --git a/dom/bindings/test/test_bug1123516_maplikesetlike.html b/dom/bindings/test/test_bug1123516_maplikesetlike.html
deleted file mode 100644
index 18ede38ace..0000000000
--- a/dom/bindings/test/test_bug1123516_maplikesetlike.html
+++ /dev/null
@@ -1,271 +0,0 @@
-<!-- Any copyright is dedicated to the Public Domain.
-- http://creativecommons.org/publicdomain/zero/1.0/ -->
-<!DOCTYPE HTML>
-<html>
- <head>
- <title>Test Maplike Interface</title>
- <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
- <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
- </head>
- <body>
- <script class="testbody" type="application/javascript">
- SimpleTest.waitForExplicitFinish();
- SpecialPowers.pushPrefEnv({set: [['dom.expose_test_interfaces', true]]}, function() {
-
- base_properties = [["has", "function", 1],
- ["entries", "function", 0],
- ["keys", "function", 0],
- ["values", "function", 0],
- ["forEach", "function", 1],
- ["size", "number"]];
- maplike_properties = base_properties.concat([["set", "function", 2]]);
- setlike_properties = base_properties;
- rw_properties = [["clear", "function", 0],
- ["delete", "function", 1]];
- setlike_rw_properties = base_properties.concat(rw_properties).concat([["add", "function", 1]]);
- maplike_rw_properties = maplike_properties.concat(rw_properties).concat([["get", "function",1]]);
- var testExistence = function testExistence(prefix, obj, properties) {
- for (var [name, type, args] of properties) {
- // Properties are somewhere up the proto chain, hasOwnProperty won't work
- isnot(obj[name], undefined,
- `${prefix} object has property ${name}`);
-
- is(typeof obj[name], type,
- `${prefix} object property ${name} is a ${type}`);
- // Check function length
- if (type == "function") {
- is(obj[name].length, args,
- `${prefix} object property ${name} is length ${args}`);
- is(obj[name].name, name,
- `${prefix} object method name is ${name}`);
- }
-
- // Find where property is on proto chain, check for enumerablility there.
- var owner = obj;
- while (owner) {
- var propDesc = Object.getOwnPropertyDescriptor(owner, name);
- if (propDesc) {
- ok(!propDesc.enumerable,
- `${prefix} object property ${name} is not enumerable`);
- break;
- }
- owner = Object.getPrototypeOf(owner);
- }
- }
- }
-
- var m;
- var testSet;
- var testIndex;
- // Simple map creation and functionality test
- info("SimpleMap: Testing simple map creation and functionality");
- m = new TestInterfaceMaplike();
- ok(m, "SimpleMap: got a TestInterfaceMaplike object");
- testExistence("SimpleMap: ", m, maplike_rw_properties);
- is(m.size, 0, "SimpleMap: size should be zero");
- ok(!m.has("test"), "SimpleMap: maplike has should return false");
- is(m.get("test"), undefined, "SimpleMap: maplike get should return undefined on bogus lookup");
- m1 = m.set("test", 1);
- is(m, m1, "SimpleMap: return from set should be map object");
- is(m.size, 1, "SimpleMap: size should be 1");
- ok(m.has("test"), "SimpleMap: maplike has should return true");
- is(m.get("test"), 1, "SimpleMap: maplike get should return value entered");
- m2 = m.set("test2", 2);
- is(m.size, 2, "SimpleMap: size should be 2");
- testSet = [["test", 1], ["test2", 2]];
- testIndex = 0;
- m.forEach(function(v, k, o) {
- "use strict";
- is(o, m, "SimpleMap: foreach obj is correct");
- is(k, testSet[testIndex][0], "SimpleMap: foreach map key: " + k + " = " + testSet[testIndex][0]);
- is(v, testSet[testIndex][1], "SimpleMap: foreach map value: " + v + " = " + testSet[testIndex][1]);
- testIndex += 1;
- });
- is(testIndex, 2, "SimpleMap: foreach ran correct number of times");
- ok(m.has("test2"), "SimpleMap: maplike has should return true");
- is(m.get("test2"), 2, "SimpleMap: maplike get should return value entered");
- is(m.delete("test2"), true, "SimpleMap: maplike deletion should return boolean");
- is(m.size, 1, "SimpleMap: size should be 1");
- iterable = false;
- for (var e of m) {
- iterable = true;
- is(e[0], "test", "SimpleMap: iterable first array element should be key");
- is(e[1], 1, "SimpleMap: iterable second array element should be value");
- }
- is(m[Symbol.iterator].length, 0, "SimpleMap: @@iterator symbol is correct length");
- is(m[Symbol.iterator].name, "entries", "SimpleMap: @@iterator symbol has correct name");
- is(m[Symbol.iterator], m.entries, 'SimpleMap: @@iterator is an alias for "entries"');
- ok(iterable, "SimpleMap: @@iterator symbol resolved correctly");
- for (var k of m.keys()) {
- is(k, "test", "SimpleMap: first keys element should be 'test'");
- }
- for (var v of m.values()) {
- is(v, 1, "SimpleMap: first values elements should be 1");
- }
- for (var e of m.entries()) {
- is(e[0], "test", "SimpleMap: entries first array element should be 'test'");
- is(e[1], 1, "SimpleMap: entries second array element should be 1");
- }
- m.clear();
- is(m.size, 0, "SimpleMap: size should be 0 after clear");
-
- // Simple set creation and functionality test
- info("SimpleSet: Testing simple set creation and functionality");
- m = new TestInterfaceSetlike();
- ok(m, "SimpleSet: got a TestInterfaceSetlike object");
- testExistence("SimpleSet: ", m, setlike_rw_properties);
- is(m.size, 0, "SimpleSet: size should be zero");
- ok(!m.has("test"), "SimpleSet: maplike has should return false");
- m1 = m.add("test");
- is(m, m1, "SimpleSet: return from set should be map object");
- is(m.size, 1, "SimpleSet: size should be 1");
- ok(m.has("test"), "SimpleSet: maplike has should return true");
- m2 = m.add("test2");
- is(m.size, 2, "SimpleSet: size should be 2");
- testSet = ["test", "test2"];
- testIndex = 0;
- m.forEach(function(v, k, o) {
- "use strict";
- is(o, m, "SimpleSet: foreach obj is correct");
- is(k, testSet[testIndex], "SimpleSet: foreach set key: " + k + " = " + testSet[testIndex]);
- testIndex += 1;
- });
- is(testIndex, 2, "SimpleSet: foreach ran correct number of times");
- ok(m.has("test2"), "SimpleSet: maplike has should return true");
- is(m.delete("test2"), true, "SimpleSet: maplike deletion should return true");
- is(m.size, 1, "SimpleSet: size should be 1");
- iterable = false;
- for (var e of m) {
- iterable = true;
- is(e, "test", "SimpleSet: iterable first array element should be key");
- }
- is(m[Symbol.iterator].length, 0, "SimpleSet: @@iterator symbol is correct length");
- is(m[Symbol.iterator].name, "values", "SimpleSet: @@iterator symbol has correct name");
- is(m[Symbol.iterator], m.values, 'SimpleSet: @@iterator is an alias for "values"');
- ok(iterable, "SimpleSet: @@iterator symbol resolved correctly");
- for (var k of m.keys()) {
- is(k, "test", "SimpleSet: first keys element should be 'test'");
- }
- for (var v of m.values()) {
- is(v, "test", "SimpleSet: first values elements should be 'test'");
- }
- for (var e of m.entries()) {
- is(e[0], "test", "SimpleSet: Entries first array element should be 'test'");
- is(e[1], "test", "SimpleSet: Entries second array element should be 'test'");
- }
- m.clear();
- is(m.size, 0, "SimpleSet: size should be 0 after clear");
-
- // Map convenience function test
- info("Testing map convenience functions");
- m = new TestInterfaceMaplike();
- ok(m, "MapConvenience: got a TestInterfaceMaplike object");
- is(m.size, 0, "MapConvenience: size should be zero");
- ok(!m.hasInternal("test"), "MapConvenience: maplike hasInternal should return false");
- m.setInternal("test", 1);
- is(m.size, 1, "MapConvenience: size should be 1");
- ok(m.hasInternal("test"), "MapConvenience: maplike hasInternal should return true");
- is(m.get("test"), 1, "MapConvenience: maplike get should return value entered");
- m2 = m.setInternal("test2", 2);
- is(m.size, 2, "size should be 2");
- ok(m.hasInternal("test2"), "MapConvenience: maplike hasInternal should return true");
- is(m.get("test2"), 2, "MapConvenience: maplike get should return value entered");
- is(m.deleteInternal("test2"), true, "MapConvenience: maplike deleteInternal should return true");
- is(m.size, 1, "MapConvenience: size should be 1");
- m.clearInternal();
- is(m.size, 0, "MapConvenience: size should be 0 after clearInternal");
-
- // Map convenience function test using objects and readonly
-
- info("Testing Map convenience function test using objects and readonly");
- m = new TestInterfaceMaplikeObject();
- ok(m, "ReadOnlyMapConvenience: got a TestInterfaceMaplikeObject object");
- is(m.size, 0, "ReadOnlyMapConvenience: size should be zero");
- is(m["set"], undefined, "ReadOnlyMapConvenience: readonly map, should be no set function");
- is(m["clear"], undefined, "ReadOnlyMapConvenience: readonly map, should be no clear function");
- is(m["delete"], undefined, "ReadOnlyMapConvenience: readonly map, should be no delete function");
- ok(!m.hasInternal("test"), "ReadOnlyMapConvenience: maplike hasInternal should return false");
- m.setInternal("test");
- is(m.size, 1, "size should be 1");
- ok(m.hasInternal("test"), "ReadOnlyMapConvenience: maplike hasInternal should return true");
- m2 = m.setInternal("test2");
- is(m.size, 2, "size should be 2");
- ok(m.hasInternal("test2"), "ReadOnlyMapConvenience: maplike hasInternal should return true");
- is(m.deleteInternal("test2"), true, "ReadOnlyMapConvenience: maplike deleteInternal should return true");
- is(m.size, 1, "ReadOnlyMapConvenience: size should be 1");
- m.clearInternal();
- is(m.size, 0, "ReadOnlyMapConvenience: size should be 0 after clearInternal");
-
- // JS implemented map creation convenience function test
-
- info("JSMapConvenience: Testing JS implemented map creation convenience functions");
- m = new TestInterfaceJSMaplike();
- ok(m, "JSMapConvenience: got a TestInterfaceJSMaplike object");
- is(m.size, 0, "JSMapConvenience: size should be zero");
- ok(!m.has("test"), "JSMapConvenience: maplike has should return false");
- m.setInternal("test", 1);
- is(m.size, 1, "JSMapConvenience: size should be 1");
- ok(m.has("test"), "JSMapConvenience: maplike has should return true");
- is(m.get("test"), 1, "JSMapConvenience: maplike get should return value entered");
- m2 = m.setInternal("test2", 2);
- is(m.size, 2, "JSMapConvenience: size should be 2");
- ok(m.has("test2"), "JSMapConvenience: maplike has should return true");
- is(m.get("test2"), 2, "JSMapConvenience: maplike get should return value entered");
- is(m.deleteInternal("test2"), true, "JSMapConvenience: maplike deleteInternal should return true");
- is(m.size, 1, "JSMapConvenience: size should be 1");
- for (var k of m.keys()) {
- is(k, "test", "JSMapConvenience: first keys element should be 'test'");
- }
- for (var v of m.values()) {
- is(v, 1, "JSMapConvenience: first values elements should be 1");
- }
- for (var e of m.entries()) {
- is(e[0], "test", "JSMapConvenience: entries first array element should be 'test'");
- is(e[1], 1, "JSMapConvenience: entries second array element should be 1");
- }
- m.clearInternal();
- is(m.size, 0, "JSMapConvenience: size should be 0 after clearInternal");
-
- // Test this override for forEach
- info("ForEachThisOverride: Testing this override for forEach");
- m = new TestInterfaceMaplike();
- m.set("test", 1);
- m.forEach(function(v, k, o) {
- "use strict";
- is(o, m, "ForEachThisOverride: foreach obj is correct");
- is(this, 5, "ForEachThisOverride: 'this' value should be correct");
- }, 5);
-
- // Test defaulting arguments on maplike to undefined
- info("MapArgsDefault: Testing maplike defaulting arguments to undefined");
- m = new TestInterfaceMaplike();
- m.set();
- is(m.size, 1, "MapArgsDefault: should have 1 entry");
- m.forEach(function(v, k) {
- "use strict";
- is(typeof k, "string", "MapArgsDefault: key is a string");
- is(k, "undefined", "MapArgsDefault: key is the string undefined");
- is(v, 0, "MapArgsDefault: value is 0");
- });
- is(m.get(), 0, "MapArgsDefault: no argument to get() returns correct value");
- m.delete();
- is(m.size, 0, "MapArgsDefault: should have 0 entries");
-
- // Test defaulting arguments on setlike to undefined
- info("SetArgsDefault: Testing setlike defaulting arguments to undefined");
- m = new TestInterfaceSetlike();
- m.add();
- is(m.size, 1, "SetArgsDefault: should have 1 entry");
- m.forEach(function(v, k) {
- "use strict";
- is(typeof k, "string", "SetArgsDefault: key is a string");
- is(k, "undefined", "SetArgsDefault: key is the string undefined");
- });
- m.delete();
- is(m.size, 0, "SetArgsDefault: should have 0 entries");
-
- SimpleTest.finish();
- });
- </script>
- </body>
-</html>
diff --git a/dom/bindings/test/test_bug1123516_maplikesetlikechrome.xul b/dom/bindings/test/test_bug1123516_maplikesetlikechrome.xul
deleted file mode 100644
index 4bc45cdddc..0000000000
--- a/dom/bindings/test/test_bug1123516_maplikesetlikechrome.xul
+++ /dev/null
@@ -1,68 +0,0 @@
-<?xml version="1.0"?>
-<?xml-stylesheet type="text/css" href="chrome://global/skin"?>
-<?xml-stylesheet type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"?>
-<!--
-https://bugzilla.mozilla.org/show_bug.cgi?id=1123516
--->
-<window title="Mozilla Bug 1123516"
- xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
- <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
- <iframe id="t"></iframe>
-
- <!-- test results are displayed in the html:body -->
- <body xmlns="http://www.w3.org/1999/xhtml">
- <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1123516"
- target="_blank">Mozilla Bug 1123516</a>
- </body>
-
- <!-- test code goes here -->
- <script type="application/javascript">
- <![CDATA[
-
- /** Test for Bug 1123516 **/
- const Cu = Components.utils;
- function doTest() {
- var win = $("t").contentWindow;
- var sandbox = Components.utils.Sandbox(win, { sandboxPrototype: win });
- is(sandbox._content, undefined, "_content does nothing over Xray");
- // Test cross-compartment usage of maplike/setlike WebIDL structures.
- SpecialPowers.pushPrefEnv({set: [['dom.expose_test_interfaces', true]]}, function() {
- try {
- var maplike = Components.utils.evalInSandbox("var m = new TestInterfaceMaplike(); m;", sandbox);
- maplike.set("test2", 2);
- is(maplike.get("test2"), 2, "Should be able to create and use maplike/setlike across compartments");
- var test = Components.utils.evalInSandbox("m.get('test2');", sandbox);
- is(test, 2, "Maplike/setlike should still work in original compartment");
- is(maplike.size, 1, "Testing size retrieval across compartments");
- } catch(e) {
- ok(false, "Shouldn't throw when working with cross-compartment maplike/setlike interfaces " + e)
- };
- try {
- var setlike = Components.utils.evalInSandbox("var m = new TestInterfaceSetlikeNode(); m.add(document.documentElement); m;", sandbox);
- is(TestInterfaceSetlikeNode.prototype.has.call(setlike, win.document.documentElement), true,
- "Cross-compartment unwrapping/comparison has works");
- // TODO: Should throw until iterators are handled by Xrays, Bug 1023984
- try {
- var e = TestInterfaceSetlikeNode.prototype.keys.call(setlike);
- ok(false, "Calling iterators via xrays should fail");
- } catch(e) {
- ok(true, "Calling iterators via xrays should fail");
- }
-
- setlike.forEach((v,k,t) => { is(v, win.document.documentElement, "Cross-compartment forEach works"); });
- TestInterfaceSetlikeNode.prototype.forEach.call(setlike,
- (v,k,t) => { is(v, win.document.documentElement, "Cross-compartment forEach works"); });
- is(TestInterfaceSetlikeNode.prototype.delete.call(setlike, win.document.documentElement), true,
- "Cross-compartment unwrapping/comparison delete works");
- } catch(e) {
- ok(false, "Shouldn't throw when working with cross-compartment maplike/setlike interfaces " + e)
- };
- SimpleTest.finish();
- });
- }
-
- SimpleTest.waitForExplicitFinish();
- addLoadEvent(doTest);
- ]]>
- </script>
-</window>
diff --git a/dom/bindings/test/test_bug1123875.html b/dom/bindings/test/test_bug1123875.html
deleted file mode 100644
index 5658091c44..0000000000
--- a/dom/bindings/test/test_bug1123875.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!doctype html>
-<meta charset=utf-8>
-<title>Test for Bug 1123875</title>
-<script src=/resources/testharness.js></script>
-<script src=/resources/testharnessreport.js></script>
-<div id=log></div>
-<script>
- test(() => {
- assert_throws(new TypeError, () => {
- "use strict";
- document.childNodes.length = 0;
- });
- }, "setting a readonly attribute on a proxy in strict mode should throw a TypeError");
-</script>
diff --git a/dom/bindings/test/test_bug1287912.html b/dom/bindings/test/test_bug1287912.html
deleted file mode 100644
index ae72b23165..0000000000
--- a/dom/bindings/test/test_bug1287912.html
+++ /dev/null
@@ -1,37 +0,0 @@
-<!DOCTYPE HTML>
-<html>
-<!--
-https://bugzilla.mozilla.org/show_bug.cgi?id=1287912
--->
-<head>
- <meta charset="utf-8">
- <title>Test for Bug 1287912</title>
- <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
- <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"/>
-</head>
-<body>
-<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1287912">Mozilla Bug 1287912</a>
-<p id="display"></p>
-<div id="content" style="display: none">
-<iframe id="t" src="http://example.org/tests/dom/bindings/test/"></iframe>
-</div>
-<pre id="test">
-<script type="application/javascript">
-function test()
-{
- var win = document.getElementById("t").contentWindow;
- is(Object.getPrototypeOf(win.Image), win.Function.prototype, "The __proto__ of a named constructor is Function.prototype");
- is(win.Image.prototype, win.HTMLImageElement.prototype, "The prototype property of a named constructor is the interface prototype object");
- is(win.HTMLImageElement['foo'], undefined, "Should not have a property named foo on the HTMLImageElement interface object");
- is(win.Image['foo'], undefined, "Should not have a property named foo on the Image named constructor");
-
- SimpleTest.finish();
-}
-
-SimpleTest.waitForExplicitFinish();
-addLoadEvent(test);
-
-</script>
-</pre>
-</body>
-</html>
diff --git a/dom/bindings/test/test_bug560072.html b/dom/bindings/test/test_bug560072.html
deleted file mode 100644
index 0eebff1160..0000000000
--- a/dom/bindings/test/test_bug560072.html
+++ /dev/null
@@ -1,34 +0,0 @@
-<!DOCTYPE HTML>
-<html>
-<!--
-https://bugzilla.mozilla.org/show_bug.cgi?id=560072
--->
-<head>
- <meta charset="utf-8">
- <title>Test for Bug 560072</title>
- <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
- <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
-</head>
-<body>
-<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=560072">Mozilla Bug 560072</a>
-<p id="display"></p>
-<div id="content" style="display: none">
-
-</div>
-<pre id="test">
-<script type="application/javascript">
-
-/** Test for Bug 560072 **/
-is(document.body,
- Object.getOwnPropertyDescriptor(Document.prototype, "body").get.call(document),
- "Should get body out of property descriptor");
-
-is(document.body,
- Object.getOwnPropertyDescriptor(
- Object.getPrototypeOf(Object.getPrototypeOf(document)), "body").get.call(document),
- "Should get body out of property descriptor this way too");
-
-</script>
-</pre>
-</body>
-</html>
diff --git a/dom/bindings/test/test_bug742191.html b/dom/bindings/test/test_bug742191.html
deleted file mode 100644
index b4b3151d77..0000000000
--- a/dom/bindings/test/test_bug742191.html
+++ /dev/null
@@ -1,36 +0,0 @@
-<!DOCTYPE HTML>
-<html>
-<!--
-https://bugzilla.mozilla.org/show_bug.cgi?id=742191
--->
-<head>
- <meta charset="utf-8">
- <title>Test for invalid argument object</title>
- <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
- <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
-</head>
-<body>
-<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=742191">Mozilla Bug 742191</a>
-<p id="display"></p>
-<pre id="test">
-<script type="application/javascript">
-
-/** Test for Bug 742191 **/
-function doTest() {
- var gotTypeError = false;
- var ctx = document.createElement("canvas").getContext("2d");
- try {
- ctx.drawImage({}, 0, 0);
- } catch(e) {
- if (e instanceof TypeError) {
- gotTypeError = true;
- }
- }
-
- ok(gotTypeError, "passing an invalid argument should cause a type error!");
-}
-doTest();
-</script>
-</pre>
-</body>
-</html>
diff --git a/dom/bindings/test/test_bug759621.html b/dom/bindings/test/test_bug759621.html
deleted file mode 100644
index 602a0cd7cd..0000000000
--- a/dom/bindings/test/test_bug759621.html
+++ /dev/null
@@ -1,29 +0,0 @@
-<!DOCTYPE HTML>
-<html>
-<!--
-https://bugzilla.mozilla.org/show_bug.cgi?id=759621
--->
-<head>
- <meta charset="utf-8">
- <title>Test for Bug 759621</title>
- <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
- <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
-</head>
-<body>
-<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=759621">Mozilla Bug 759621</a>
-<p id="display"></p>
-<div id="content" style="display: none">
-
-</div>
-<pre id="test">
-<script type="application/javascript">
-
-/** Test for Bug 759621 **/
-var l = document.getElementsByTagName("*");
-l.namedItem = "pass";
-is(l.namedItem, "pass", "Should be able to set expando shadowing a proto prop");
-
-</script>
-</pre>
-</body>
-</html>
diff --git a/dom/bindings/test/test_bug773326.html b/dom/bindings/test/test_bug773326.html
deleted file mode 100644
index 2e3b1ea304..0000000000
--- a/dom/bindings/test/test_bug773326.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<!doctype html>
-<meta charset=utf-8>
-<title>Test for Bug 773326</title>
-<script src=/resources/testharness.js></script>
-<script src=/resources/testharnessreport.js></script>
-<div id=log></div>
-<script>
-test(function() {
- new Worker("data:text/javascript,new XMLHttpRequest(42)");
-}, "Should not crash")
-</script>
diff --git a/dom/bindings/test/test_bug775543.html b/dom/bindings/test/test_bug775543.html
deleted file mode 100644
index d8df05f630..0000000000
--- a/dom/bindings/test/test_bug775543.html
+++ /dev/null
@@ -1,37 +0,0 @@
-<!DOCTYPE HTML>
-<html>
-<!--
-https://bugzilla.mozilla.org/show_bug.cgi?id=775543
--->
-<head>
- <meta charset="utf-8">
- <title>Test for Bug 775543</title>
- <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
- <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"/>
-</head>
-<body>
-<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=775543">Mozilla Bug 775543</a>
-<p id="display"></p>
-<div id="content" style="display: none">
-<iframe id="t" src="http://example.org/tests/dom/bindings/test/file_bug775543.html" onload="test();"></iframe>
-</div>
-<pre id="test">
-<script type="application/javascript">
-
-/** Test for Bug 775543 **/
-
-function test()
-{
- var a = XPCNativeWrapper(document.getElementById("t").contentWindow.wrappedJSObject.worker);
- isnot(XPCNativeWrapper.unwrap(a), a, "XPCNativeWrapper(Worker) should be an Xray wrapper");
- a.toString();
- ok(true, "Shouldn't crash when calling a method on an Xray wrapper around a worker");
- SimpleTest.finish();
-}
-
-SimpleTest.waitForExplicitFinish();
-
-</script>
-</pre>
-</body>
-</html>
diff --git a/dom/bindings/test/test_bug788369.html b/dom/bindings/test/test_bug788369.html
deleted file mode 100644
index 787bd28fe3..0000000000
--- a/dom/bindings/test/test_bug788369.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!DOCTYPE HTML>
-<html>
-<!--
-https://bugzilla.mozilla.org/show_bug.cgi?id=788369
--->
-<head>
- <meta charset="utf-8">
- <title>Test for Bug 788369</title>
- <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
- <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
-</head>
-<body>
-<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=788369">Mozilla Bug 788369</a>
-<p id="display"></p>
-<div id="content" style="display: none">
-</div>
-<pre id="test">
-<script type="application/javascript">
-
-/** Test for Bug 788369 **/
-try {
- var xhr = new(window.ActiveXObject || XMLHttpRequest)("Microsoft.XMLHTTP");
- ok(xhr instanceof XMLHttpRequest, "Should have an XHR object");
-} catch (e) {
- ok(false, "Should not throw exception when constructing: " + e);
-}
-</script>
-</pre>
-</body>
-</html>
diff --git a/dom/bindings/test/test_bug852846.html b/dom/bindings/test/test_bug852846.html
deleted file mode 100644
index 0ca2c7dad4..0000000000
--- a/dom/bindings/test/test_bug852846.html
+++ /dev/null
@@ -1,34 +0,0 @@
-<!DOCTYPE HTML>
-<html>
-<!--
-https://bugzilla.mozilla.org/show_bug.cgi?id=852846
--->
-<head>
- <meta charset="utf-8">
- <title>Test for Bug 852846</title>
- <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
- <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
- <script type="application/javascript">
-
- /** Test for Bug 852846 **/
- var elem = document.createElement("div");
- is(elem.style.color, "", "Shouldn't have color set on HTML element")
- elem.style = "color: green";
- is(elem.style.color, "green", "Should have color set on HTML element")
-
- elem = document.createElementNS("http://www.w3.org/2000/svg", "svg");
- is(elem.style.color, "", "Shouldn't have color set on SVG element")
- elem.style = "color: green";
- is(elem.style.color, "green", "Should have color set on SVG element")
- </script>
-</head>
-<body>
-<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=852846">Mozilla Bug 852846</a>
-<p id="display"></p>
-<div id="content" style="display: none">
-
-</div>
-<pre id="test">
-</pre>
-</body>
-</html>
diff --git a/dom/bindings/test/test_bug862092.html b/dom/bindings/test/test_bug862092.html
deleted file mode 100644
index 4b06333281..0000000000
--- a/dom/bindings/test/test_bug862092.html
+++ /dev/null
@@ -1,37 +0,0 @@
-<!DOCTYPE HTML>
-<html>
-<!--
-https://bugzilla.mozilla.org/show_bug.cgi?id=862092
--->
-<head>
- <meta charset="utf-8">
- <title>Test for Bug 862092</title>
- <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
- <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
- <script type="application/javascript">
-
- /** Test for Bug 862092 **/
-
- SimpleTest.waitForExplicitFinish();
- function runTest()
- {
- var frameDoc = document.getElementById("f").contentDocument;
- var a = document.createElement("select");
- a.expando = "test";
- a = frameDoc.adoptNode(a)
- is(a.expando, "test", "adoptNode needs to preserve expandos");
- SimpleTest.finish();
- }
-
- </script>
-</head>
-<body onload="runTest();">
-<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=862092">Mozilla Bug 862092</a>
-<p id="display"></p>
-<div id="content" style="display: none">
-<iframe id="f"></iframe>
-</div>
-<pre id="test">
-</pre>
-</body>
-</html>
diff --git a/dom/bindings/test/test_bug963382.html b/dom/bindings/test/test_bug963382.html
deleted file mode 100644
index f48d2e8b0f..0000000000
--- a/dom/bindings/test/test_bug963382.html
+++ /dev/null
@@ -1,43 +0,0 @@
-<!DOCTYPE HTML>
-<html>
-<!--
-https://bugzilla.mozilla.org/show_bug.cgi?id=963382
--->
-<head>
- <meta charset="utf-8">
- <title>Test for Bug 963382</title>
- <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
- <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
- <script type="application/javascript">
-
- /** Test for clearing cache attributes in JS-implemented WebIDL implementations. **/
- SimpleTest.waitForExplicitFinish();
- SpecialPowers.pushPrefEnv({set: [['dom.expose_test_interfaces', true]]}, go);
-
- function go() {
- var t = new TestInterfaceJS();
-
- // Test [Cached] attribute clearing.
- is(t.cachedAttr, 15, "Initial value of number");
-
- t.setCachedAttr(3);
- is(t.cachedAttr, 15, "Setting the number on the inner JS object should not affect cached value");
-
- t.clearCachedAttrCache();
- is(t.cachedAttr, 3, "Setting the number on the inner JS object should affect cached value after clearing the cache.");
-
- SimpleTest.finish();
- }
-
- </script>
-</head>
-<body>
-<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=963382">Mozilla Bug 963382</a>
-<p id="display"></p>
-<div id="content" style="display: none">
-
-</div>
-<pre id="test">
-</pre>
-</body>
-</html>
diff --git a/dom/bindings/test/test_callback_across_document_open.html b/dom/bindings/test/test_callback_across_document_open.html
deleted file mode 100644
index 2a505cefab..0000000000
--- a/dom/bindings/test/test_callback_across_document_open.html
+++ /dev/null
@@ -1,21 +0,0 @@
-<!DOCTYPE html>
-<meta charset=utf-8>
-<title>Test for callback invocation for a callback that comes from a
- no-longer-current window that still has an active document.</title>
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<div id="log"></div>
-<iframe srcdoc='<script>function f() { parent.callCount++; }</script>'></iframe>
-<script>
- var callCount = 0;
- var t = async_test("A test of callback invocation in a no-longer-current window with a still-active document");
- window.addEventListener("load", t.step_func_done(function() {
- var d = document.createElement("div");
- d.addEventListener("xyz", frames[0].f);
- frames[0].document.open();
- frames[0].document.write("All gone");
- frames[0].document.close();
- d.dispatchEvent(new Event("xyz"));
- assert_equals(callCount, 1, "Callback should have been called");
- }));
-</script>
diff --git a/dom/bindings/test/test_callback_default_thisval.html b/dom/bindings/test/test_callback_default_thisval.html
deleted file mode 100644
index d98ed87b25..0000000000
--- a/dom/bindings/test/test_callback_default_thisval.html
+++ /dev/null
@@ -1,36 +0,0 @@
-<!DOCTYPE HTML>
-<html>
-<!--
-https://bugzilla.mozilla.org/show_bug.cgi?id=957929
--->
-<head>
- <meta charset="utf-8">
- <title>Test for Bug 957929</title>
- <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
- <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
- <script type="application/javascript">
-
- /** Test for Bug 957929 **/
- SimpleTest.waitForExplicitFinish();
-
- function f() {
- "use strict";
- is(this, undefined, "Should have undefined this value");
- SimpleTest.finish();
- }
-
- addLoadEvent(function() {
- requestAnimationFrame(f);
- });
- </script>
-</head>
-<body>
-<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=957929">Mozilla Bug 957929</a>
-<p id="display"></p>
-<div id="content" style="display: none">
-
-</div>
-<pre id="test">
-</pre>
-</body>
-</html>
diff --git a/dom/bindings/test/test_callback_exceptions.html b/dom/bindings/test/test_callback_exceptions.html
deleted file mode 100644
index a40b0b94fa..0000000000
--- a/dom/bindings/test/test_callback_exceptions.html
+++ /dev/null
@@ -1,17 +0,0 @@
-<!DOCTYPE html>
-<meta charset=utf-8>
-<title>Test for ...</title>
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<div id="log"></div>
-<script>
-promise_test(function(t) {
- var iterator = document.createNodeIterator(document, NodeFilter.SHOW_ALL, JSON.parse);
- return promise_rejects(t, new SyntaxError,
- Promise.resolve().then(iterator.nextNode.bind(iterator)));
-}, "Trying to use JSON.parse as filter should throw a catchable SyntaxError exception even when the filter is invoked async");
-
-promise_test(function(t) {
- return promise_rejects(t, new SyntaxError, Promise.resolve('{').then(JSON.parse));
-}, "Trying to use JSON.parse as a promise callback should allow the next promise to handle the resulting exception.");
-</script>
diff --git a/dom/bindings/test/test_cloneAndImportNode.html b/dom/bindings/test/test_cloneAndImportNode.html
deleted file mode 100644
index fc53c87476..0000000000
--- a/dom/bindings/test/test_cloneAndImportNode.html
+++ /dev/null
@@ -1,48 +0,0 @@
-<!DOCTYPE HTML>
-<html>
-<!--
-https://bugzilla.mozilla.org/show_bug.cgi?id=882541
--->
-<head>
- <meta charset="utf-8">
- <title>Test for Bug 882541</title>
- <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
- <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
- <script type="application/javascript">
-
- /** Test for Bug 882541 **/
- var div = document.createElement("div");
- div.appendChild(document.createElement("span"));
-
- var div2;
-
- div2 = div.cloneNode();
- is(div2.childNodes.length, 0, "cloneNode() should do a shallow clone");
-
- div2 = div.cloneNode(undefined);
- is(div2.childNodes.length, 0, "cloneNode(undefined) should do a shallow clone");
-
- div2 = div.cloneNode(true);
- is(div2.childNodes.length, 1, "cloneNode(true) should do a deep clone");
-
- div2 = document.importNode(div);
- is(div2.childNodes.length, 0, "importNode(node) should do a deep import");
-
- div2 = document.importNode(div, undefined);
- is(div2.childNodes.length, 0, "importNode(undefined) should do a shallow import");
-
- div2 = document.importNode(div, true);
- is(div2.childNodes.length, 1, "importNode(true) should do a deep import");
-
- </script>
-</head>
-<body>
-<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=882541">Mozilla Bug 882541</a>
-<p id="display"></p>
-<div id="content" style="display: none">
-
-</div>
-<pre id="test">
-</pre>
-</body>
-</html>
diff --git a/dom/bindings/test/test_crossOriginWindowSymbolAccess.html b/dom/bindings/test/test_crossOriginWindowSymbolAccess.html
deleted file mode 100644
index 7808631b6b..0000000000
--- a/dom/bindings/test/test_crossOriginWindowSymbolAccess.html
+++ /dev/null
@@ -1,23 +0,0 @@
-<!DOCTYPE html>
-<meta charset=utf-8>
-<title>Test for accessing symbols on a cross-origin window</title>
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<div id="log"></div>
-<iframe src="http://www1.w3c-test.org/common/blank.html"></iframe>
-<script>
-async_test(function (t) {
- window.addEventListener("load", t.step_func(
- function() {
- assert_equals(document.querySelector("iframe").contentDocument, null, "Should have a crossorigin frame");
- assert_throws(new Error(), function() {
- frames[0][Symbol.iterator];
- }, "Should throw exception on cross-origin Window symbol-named get");
- assert_throws(new Error(), function() {
- frames[0].location[Symbol.iterator];
- }, "Should throw exception on cross-origin Location symbol-named get");
- t.done();
- }
- ));
-}, "Check Symbol access on load");
-</script>
diff --git a/dom/bindings/test/test_defineProperty.html b/dom/bindings/test/test_defineProperty.html
deleted file mode 100644
index f8f5f6283e..0000000000
--- a/dom/bindings/test/test_defineProperty.html
+++ /dev/null
@@ -1,157 +0,0 @@
-<!DOCTYPE HTML>
-<html>
-<!--
-https://bugzilla.mozilla.org/show_bug.cgi?id=910220
--->
-<head>
- <meta charset="utf-8">
- <title>Test for Bug 910220</title>
- <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
- <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
-</head>
-<body>
-<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=910220">Mozilla Bug 910220</a>
-<p id="display"></p>
-<div id="content" style="display: none">
-<form name="x"></form>
-</div>
-<pre id="test">
-</pre>
-<script type="application/javascript">
-
-/** Test for Bug 910220 **/
-
-function getX() {
- return "x";
-}
-
-function namedSetStrict(obj) {
- "use strict";
- var threw;
- try {
- obj.x = 5;
- threw = false;
- } catch (e) {
- threw = true;
- }
- ok(threw,
- "Should throw in strict mode when setting named property on " + obj);
-
- try {
- obj[getX()] = 5;
- threw = false;
- } catch (e) {
- threw = true;
- }
- ok(threw,
- "Should throw in strict mode when setting named property via SETELEM on " + obj);
-
- try {
- Object.defineProperty(obj, "x", { value: 17 });
- threw = false;
- } catch (e) {
- threw = true;
- }
- ok(threw,
- "Should throw in strict mode when defining named property on " + obj);
-}
-function namedSetNonStrict(obj) {
- var threw;
- try {
- obj.x = 5;
- threw = false;
- } catch (e) {
- threw = true;
- }
- ok(!threw,
- "Should not throw in non-strict mode when setting named property on " + obj);
-
- try {
- obj[getX()] = 5;
- threw = false;
- } catch (e) {
- threw = true;
- }
- ok(!threw,
- "Should not throw in non-strict mode when setting named property via SETELEM on" + obj);
-
- try {
- Object.defineProperty(obj, "x", { value: 17 });
- threw = false;
- } catch (e) {
- threw = true;
- }
- ok(threw,
- "Should throw in non-strict mode when defining named property on " + obj);
-}
-for (var obj of [ document, document.forms ]) {
- namedSetStrict(obj);
- namedSetNonStrict(obj);
-}
-
-function indexedSetStrict(obj) {
- "use strict";
- var threw;
- try {
- obj[0] = 5;
- threw = false;
- } catch (e) {
- threw = true;
- }
- ok(threw,
- "Should throw in strict mode when setting indexed property on " + obj);
-
- try {
- obj[1000] = 5;
- threw = false;
- } catch (e) {
- threw = true;
- }
- ok(threw,
- "Should throw in strict mode when setting out of bounds indexed property on " + obj);
-
- try {
- Object.defineProperty(obj, "0", { value: 17 });
- threw = false;
- } catch (e) {
- threw = true;
- }
- ok(threw,
- "Should throw in strict mode when defining indexed property on " + obj);
-}
-function indexedSetNonStrict(obj) {
- var threw;
- try {
- obj[0] = 5;
- threw = false;
- } catch (e) {
- threw = true;
- }
- ok(!threw,
- "Should not throw in non-strict mode when setting indexed property on " + obj);
-
- try {
- obj[1000] = 5;
- threw = false;
- } catch (e) {
- threw = true;
- }
- ok(!threw,
- "Should not throw in non-strict mode when setting out of bounds indexed property on " + obj);
-
- try {
- Object.defineProperty(obj, "0", { value: 17 });
- threw = false;
- } catch (e) {
- threw = true;
- }
- ok(threw,
- "Should throw in non-strict mode when defining indexed property on " + obj);
-}
-for (var obj of [ document.forms, document.childNodes ]) {
- indexedSetStrict(obj);
- indexedSetNonStrict(obj);
-}
-</script>
-</body>
-</html>
diff --git a/dom/bindings/test/test_document_location_set_via_xray.html b/dom/bindings/test/test_document_location_set_via_xray.html
deleted file mode 100644
index cdadc50639..0000000000
--- a/dom/bindings/test/test_document_location_set_via_xray.html
+++ /dev/null
@@ -1,49 +0,0 @@
-<!DOCTYPE HTML>
-<html>
-<!--
-https://bugzilla.mozilla.org/show_bug.cgi?id=905493
--->
-<head>
- <meta charset="utf-8">
- <title>Test for Bug 905493</title>
- <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
- <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"/>
-</head>
-<body>
-<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=905493">Mozilla Bug 905493</a>
-<p id="display"></p>
-<div id="content" style="display: none">
-<iframe id="t" src="http://example.org/tests/dom/bindings/test/file_document_location_set_via_xray.html"></iframe>
-</div>
-<pre id="test">
-<script type="application/javascript">
-
-/** Test for Bug 905493 **/
-
-function test()
-{
- var doc = document.getElementById("t").contentWindow.document;
- ok(!("x" in doc), "Should have an Xray here");
- is(doc.x, undefined, "Really should have an Xray here");
- is(doc.wrappedJSObject.x, 5, "And wrapping the right thing");
- document.getElementById("t").onload = function() {
- ok(true, "Load happened");
- SimpleTest.finish();
- };
- try {
- // Test the forwarding location setter
- doc.location = "chrome://mochikit/content/tests/SimpleTest/test.css";
- } catch (e) {
- // Load failed
- ok(false, "Load failed");
- SimpleTest.finish();
- }
-}
-
-SimpleTest.waitForExplicitFinish();
-addLoadEvent(test);
-
-</script>
-</pre>
-</body>
-</html>
diff --git a/dom/bindings/test/test_document_location_via_xray_cached.html b/dom/bindings/test/test_document_location_via_xray_cached.html
deleted file mode 100644
index 20eef10fbe..0000000000
--- a/dom/bindings/test/test_document_location_via_xray_cached.html
+++ /dev/null
@@ -1,36 +0,0 @@
-<!DOCTYPE HTML>
-<html>
-<!--
-https://bugzilla.mozilla.org/show_bug.cgi?id=1041731
--->
-<head>
- <meta charset="utf-8">
- <title>Test for Bug 1041731</title>
- <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
- <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"/>
-</head>
-<body>
-<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1041731">Mozilla Bug 1041731</a>
-<p id="display"></p>
-<div id="content" style="display: none">
-<iframe id="t" src="http://example.org/tests/dom/bindings/test/file_document_location_set_via_xray.html"></iframe>
-</div>
-<pre id="test">
-<script type="application/javascript">
-
-/** Test for Bug 1041731 **/
-
-function test()
-{
- var loc = document.getElementById("t").contentWindow.document.location;
- is(loc.toString, loc.toString, "Unforgeable method on the Xray should be cached");
- SimpleTest.finish();
-}
-
-SimpleTest.waitForExplicitFinish();
-addLoadEvent(test);
-
-</script>
-</pre>
-</body>
-</html>
diff --git a/dom/bindings/test/test_domProxyArrayLengthGetter.html b/dom/bindings/test/test_domProxyArrayLengthGetter.html
deleted file mode 100644
index a62adff2ed..0000000000
--- a/dom/bindings/test/test_domProxyArrayLengthGetter.html
+++ /dev/null
@@ -1,28 +0,0 @@
-<!DOCTYPE html>
-<html>
-<!--
-https://bugzilla.mozilla.org/show_bug.cgi?id=1221421
--->
-<head>
- <meta charset="utf-8">
- <title>Test for Bug 1221421</title>
- <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
- <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
- <script type="text/javascript">
-
- var x = document.documentElement.style;
- x.__proto__ = [1, 2, 3];
-
- var res = 0;
- for (var h = 0; h < 5000; ++h) {
- res += x.length;
- }
- is(res, 15000, "length getter should return array length");
-
- </script>
-</head>
-
-<body>
- <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1221421">Mozilla Bug 1221421</a>
-</body>
-</html>
diff --git a/dom/bindings/test/test_dom_xrays.html b/dom/bindings/test/test_dom_xrays.html
deleted file mode 100644
index 15d7013ade..0000000000
--- a/dom/bindings/test/test_dom_xrays.html
+++ /dev/null
@@ -1,231 +0,0 @@
-<!DOCTYPE HTML>
-<html>
-<!--
-https://bugzilla.mozilla.org/show_bug.cgi?id=787070
--->
-<head>
- <meta charset="utf-8">
- <title>Test for Bug 787070</title>
- <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
- <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"/>
-</head>
-<body>
-<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=787070">Mozilla Bug 787070</a>
-<p id="display"></p>
-<div id="content" style="display: none">
-<iframe id="t" src="http://example.org/tests/dom/bindings/test/file_dom_xrays.html"></iframe>
-</div>
-<pre id="test">
-<script type="application/javascript">
-
-/** Test for Bug 1021066 **/
-
-var Cu = Components.utils;
-
-// values should contain the values that the property should have on each of
-// the objects on the prototype chain of obj. A value of undefined signals
-// that the value should not be present on that prototype.
-function checkXrayProperty(obj, name, values)
-{
- var instance = obj;
- do {
- var value = values.shift();
- if (typeof value == "undefined") {
- ok(!obj.hasOwnProperty(name), "hasOwnProperty shouldn't see \"" + name + "\" through Xrays");
- is(Object.getOwnPropertyDescriptor(obj, name), undefined, "getOwnPropertyDescriptor shouldn't see \"" + name + "\" through Xrays");
- ok(Object.keys(obj).indexOf(name) == -1, "Enumerating the Xray should not return \"" + name + "\"");
- } else {
- ok(obj.hasOwnProperty(name), "hasOwnProperty should see \"" + name + "\" through Xrays");
- var pd = Object.getOwnPropertyDescriptor(obj, name);
- ok(pd, "getOwnPropertyDescriptor should see \"" + name + "\" through Xrays");
- if (pd && pd.get) {
- is(pd.get.call(instance), value, "Should get the right value for \"" + name + "\" through Xrays");
- } else {
- is(obj[name], value, "Should get the right value for \"" + name + "\" through Xrays");
- }
- if (pd && pd.enumerable) {
- ok(Object.keys(obj).indexOf("" + name) > -1, "Enumerating the Xray should return \"" + name + "\"");
- }
- }
- } while ((obj = Object.getPrototypeOf(obj)));
-}
-
-function checkWindowXrayProperty(obj, name, windowValue, windowPrototypeValue, namedPropertiesValue, eventTargetValue)
-{
- checkXrayProperty(obj, name, [ windowValue, windowPrototypeValue, namedPropertiesValue, eventTargetValue ]);
-}
-
-function test()
-{
- // Window
- var win = document.getElementById("t").contentWindow;
- var doc = document.getElementById("t").contentDocument;
-
- var winProto = Object.getPrototypeOf(win);
- is(winProto, win.Window.prototype, "The proto chain of the Xray should mirror the prototype chain of the Xrayed object");
-
- var namedPropertiesObject = Object.getPrototypeOf(winProto);
- is(Cu.getClassName(namedPropertiesObject, /* unwrap = */ true), "WindowProperties", "The proto chain of the Xray should mirror the prototype chain of the Xrayed object");
-
- var eventTargetProto = Object.getPrototypeOf(namedPropertiesObject);
- is(eventTargetProto, win.EventTarget.prototype, "The proto chain of the Xray should mirror the prototype chain of the Xrayed object");
-
- // Xrays need to filter expandos.
- checkWindowXrayProperty(win, "expando", undefined);
- ok(!("expando" in win), "Xrays should filter expandos");
-
- checkWindowXrayProperty(win, "shadowedIframe", undefined, undefined, doc.getElementById("shadowedIframe").contentWindow);
- ok("shadowedIframe" in win, "Named properties should be exposed through Xrays");
-
- // Named properties live on the named properties object for global objects.
- checkWindowXrayProperty(win, "iframe", undefined, undefined, doc.getElementById("iframe").contentWindow);
- ok("iframe" in win, "Named properties should be exposed through Xrays");
-
- // Window properties live on the instance, shadowing the properties of the named property object.
- checkWindowXrayProperty(win, "document", doc, undefined, doc.getElementById("document").contentWindow);
- ok("document" in win, "WebIDL properties should be exposed through Xrays");
-
- // Unforgeable properties live on the instance, shadowing the properties of the named property object.
- checkWindowXrayProperty(win, "self", win, undefined, doc.getElementById("self").contentWindow);
- ok("self" in win, "WebIDL properties should be exposed through Xrays");
-
- // Object.prototype is at the end of the prototype chain.
- var obj = win;
- while ((proto = Object.getPrototypeOf(obj))) {
- obj = proto;
- }
- is(obj, win.Object.prototype, "Object.prototype should be at the end of the prototype chain");
-
- // Named properties shouldn't shadow WebIDL- or ECMAScript-defined properties.
- checkWindowXrayProperty(win, "addEventListener", undefined, undefined, undefined, eventTargetProto.addEventListener);
- is(win.addEventListener, eventTargetProto.addEventListener, "Named properties shouldn't shadow WebIDL-defined properties");
-
- is(win.toString, win.Object.prototype.toString, "Named properties shouldn't shadow ECMAScript-defined properties");
-
- // HTMLDocument
- // Unforgeable properties live on the instance.
- checkXrayProperty(doc, "location", [ win.location ]);
- is(String(win.location), document.getElementById("t").src,
- "Should have the right stringification");
-
- // HTMLHtmlElement
- var elem = doc.documentElement;
-
- var elemProto = Object.getPrototypeOf(elem);
- is(elemProto, win.HTMLHtmlElement.prototype, "The proto chain of the Xray should mirror the prototype chain of the Xrayed object");
-
- elemProto = Object.getPrototypeOf(elemProto);
- is(elemProto, win.HTMLElement.prototype, "The proto chain of the Xray should mirror the prototype chain of the Xrayed object");
-
- elemProto = Object.getPrototypeOf(elemProto);
- is(elemProto, win.Element.prototype, "The proto chain of the Xray should mirror the prototype chain of the Xrayed object");
-
- elemProto = Object.getPrototypeOf(elemProto);
- is(elemProto, win.Node.prototype, "The proto chain of the Xray should mirror the prototype chain of the Xrayed object");
-
- elemProto = Object.getPrototypeOf(elemProto);
- is(elemProto, win.EventTarget.prototype, "The proto chain of the Xray should mirror the prototype chain of the Xrayed object");
-
- // Xrays need to filter expandos.
- ok(!("expando" in elem), "Xrays should filter expandos");
-
- // WebIDL-defined properties live on the prototype.
- checkXrayProperty(elem, "version", [ undefined, "" ]);
- is(elem.version, "", "WebIDL properties should be exposed through Xrays");
-
- // HTMLCollection
- var coll = doc.getElementsByTagName("iframe");
-
- // Named properties live on the instance for non-global objects.
- checkXrayProperty(coll, "iframe", [ doc.getElementById("iframe") ]);
-
- // Indexed properties live on the instance.
- checkXrayProperty(coll, 0, [ doc.getElementById("shadowedIframe") ]);
-
- // WebIDL-defined properties live on the prototype, overriding any named properties.
- checkXrayProperty(coll, "item", [ undefined, win.HTMLCollection.prototype.item ]);
-
- // ECMAScript-defined properties live on the prototype, overriding any named properties.
- checkXrayProperty(coll, "toString", [ undefined, undefined, win.Object.prototype.toString ]);
-
- // Frozen arrays should come from our compartment, not the target one.
- var languages1 = win.navigator.languages;
- isnot(languages1, undefined, "Must have .languages");
- ok(Array.isArray(languages1), ".languages should be an array");
- ok(Object.isFrozen(languages1), ".languages should be a frozen array");
- ok(!Cu.isXrayWrapper(languages1), "Should have our own version of array");
- is(Cu.getGlobalForObject(languages1), window,
- "languages1 should come from our window");
- // We want to get .languages in the content compartment, but without waiving
- // Xrays altogether.
- var languages2 = win.eval("navigator.languages");
- isnot(languages2, undefined, "Must still have .languages");
- ok(Array.isArray(languages2), ".languages should still be an array");
- ok(Cu.isXrayWrapper(languages2), "Should have xray for content version of array");
- is(Cu.getGlobalForObject(languages2), win,
- "languages2 come from the underlying window");
- ok(Object.isFrozen(languages2.wrappedJSObject),
- ".languages should still be a frozen array underneath");
- isnot(languages1, languages2, "Must have distinct arrays");
- isnot(languages1, languages2.wrappedJSObject,
- "Must have distinct arrays no matter how we slice it");
-
- // Check that DataTransfer's .types has the hack to alias contains()
- // to includes().
- var dataTransfer = new win.DataTransfer();
- is(dataTransfer.types.contains, dataTransfer.types.includes,
- "Should have contains() set up as an alias to includes()");
- // Waive Xrays on the dataTransfer itself, since the .types we get is
- // different over Xrays vs not.
- is(dataTransfer.wrappedJSObject.types.contains, undefined,
- "Underlying object should not have contains() set up as an alias to " +
- "includes()");
-
- // Check that deleters work correctly in the [OverrideBuiltins] case.
- var elem = win.document.documentElement;
- var dataset = elem.dataset;
- is(dataset.foo, undefined, "Should not have a 'foo' property");
- ok(!('foo' in dataset), "Really should not have a 'foo' property");
- is(elem.getAttribute("data-foo"), null,
- "Should not have a 'data-foo' attribute");
- ok(!elem.hasAttribute("data-foo"),
- "Really should not have a 'data-foo' attribute");
- dataset.foo = "bar";
- is(dataset.foo, "bar", "Should now have a 'foo' property");
- ok('foo' in dataset, "Really should have a 'foo' property");
- is(elem.getAttribute("data-foo"), "bar",
- "Should have a 'data-foo' attribute");
- ok(elem.hasAttribute("data-foo"),
- "Really should have a 'data-foo' attribute");
- delete dataset.foo;
- is(dataset.foo, undefined, "Should not have a 'foo' property again");
- ok(!('foo' in dataset), "Really should not have a 'foo' property again");
- is(elem.getAttribute("data-foo"), null,
- "Should not have a 'data-foo' attribute again");
- ok(!elem.hasAttribute("data-foo"),
- "Really should not have a 'data-foo' attribute again");
-
- // Check that deleters work correctly in the non-[OverrideBuiltins] case.
- var storage = win.sessionStorage;
- is(storage.foo, undefined, "Should not have a 'foo' property");
- ok(!('foo' in storage), "Really should not have a 'foo' property");
- is(storage.getItem("foo"), null, "Should not have an item named 'foo'");
- storage.foo = "bar";
- is(storage.foo, "bar", "Should have a 'foo' property");
- ok('foo' in storage, "Really should have a 'foo' property");
- is(storage.getItem("foo"), "bar", "Should have an item named 'foo'");
- delete storage.foo
- is(storage.foo, undefined, "Should not have a 'foo' property again");
- ok(!('foo' in storage), "Really should not have a 'foo' property again");
- is(storage.getItem("foo"), null, "Should not have an item named 'foo' again");
-
- SimpleTest.finish();
-}
-
-SimpleTest.waitForExplicitFinish();
-addLoadEvent(test);
-
-</script>
-</pre>
-</body>
-</html>
diff --git a/dom/bindings/test/test_enums.html b/dom/bindings/test/test_enums.html
deleted file mode 100644
index e5dc519a0c..0000000000
--- a/dom/bindings/test/test_enums.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<!doctype html>
-<meta charset=utf-8>
-<title>Enums</title>
-<script src=/resources/testharness.js></script>
-<script src=/resources/testharnessreport.js></script>
-<div id=log></div>
-<script>
-test(function() {
- var xhr = new XMLHttpRequest();
- xhr.open("get", "foo")
- assert_equals(xhr.responseType, "");
- xhr.responseType = "foo";
- assert_equals(xhr.responseType, "");
-}, "Assigning an invalid value to an enum attribute should not throw.");
-</script>
diff --git a/dom/bindings/test/test_exceptionSanitization.html b/dom/bindings/test/test_exceptionSanitization.html
deleted file mode 100644
index 9a6ab6088c..0000000000
--- a/dom/bindings/test/test_exceptionSanitization.html
+++ /dev/null
@@ -1,45 +0,0 @@
-<!DOCTYPE HTML>
-<html>
-<!--
-https://bugzilla.mozilla.org/show_bug.cgi?id=1295322
--->
-<head>
- <meta charset="utf-8">
- <title>Test for Bug 1295322</title>
- <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
- <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
-</head>
-<body>
-<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1295322">Mozilla Bug 1295322</a>
-<p id="display"></p>
-<div id="content" style="display: none">
-
-</div>
-<pre id="test">
-</pre>
- <script type="application/javascript">
-
- /** Test for Bug 1295322 **/
- iframe = document.createElement('iframe');
- iframe.name = "eWin";
- document.body.appendChild(iframe);
-
- try{
- // NOTE: The idea here is to call something that will end up throwing an
- // exception in a JS component and then propagate back to C++ code before
- // returning to us. If opening a feed: URI stops doing that, we will need a
- // new guinea pig here.
- open('feed://java:script:codeshouldgohere','eWin');
- ok(false, "Should have thrown!");
- } catch(e){
- try {
- is(e.name, "NS_ERROR_UNEXPECTED", "Should have the right exception");
- is(e.filename, location.href,
- "Should not be seeing where the exception really came from");
- } catch (e2) {
- ok(false, "Should be able to work with the exception");
- }
- }
- </script>
-</body>
-</html>
diff --git a/dom/bindings/test/test_exceptionThrowing.html b/dom/bindings/test/test_exceptionThrowing.html
deleted file mode 100644
index 376c2bc578..0000000000
--- a/dom/bindings/test/test_exceptionThrowing.html
+++ /dev/null
@@ -1,56 +0,0 @@
-<!DOCTYPE HTML>
-<html>
-<!--
-https://bugzilla.mozilla.org/show_bug.cgi?id=847119
--->
-<head>
- <meta charset="utf-8">
- <title>Test for Bug 847119</title>
- <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
- <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
- <script type="application/javascript">
-
- /** Test for Bug 847119 **/
-
- var xhr = new XMLHttpRequest();
- var domthrows = function() { xhr.open(); }
-
- var count = 20000;
-
- function f() {
- var k = 0;
- for (var j = 0; j < count; ++j) {
- try { domthrows(); } catch(e) { ++k; }
- }
- return k;
- }
- function g() { return count; }
-
- is(f(), count, "Should get count exceptions");
- for (var h of [f, g]) {
- try { is(h(), count, "Should get count exceptions here too"); } catch (e) {}
- }
- ok(true, "We should get here");
-
- var domthrows = function() { xhr.withCredentials = false; }
- xhr.open("GET", "");
- xhr.send();
-
- is(f(), count, "Should get count exceptions from getter");
- for (var h of [f, g]) {
- try { is(h(), count, "Should get count exceptions from getter here too"); } catch (e) {}
- }
- ok(true, "We should get here too");
-
- </script>
-</head>
-<body>
-<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=847119">Mozilla Bug 847119</a>
-<p id="display"></p>
-<div id="content" style="display: none">
-
-</div>
-<pre id="test">
-</pre>
-</body>
-</html>
diff --git a/dom/bindings/test/test_exception_messages.html b/dom/bindings/test/test_exception_messages.html
deleted file mode 100644
index a0f0cabe63..0000000000
--- a/dom/bindings/test/test_exception_messages.html
+++ /dev/null
@@ -1,82 +0,0 @@
-<!DOCTYPE HTML>
-<html>
-<!--
-https://bugzilla.mozilla.org/show_bug.cgi?id=882653
--->
-<head>
- <meta charset="utf-8">
- <title>Test for Bug 882653</title>
- <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
- <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
- <script type="application/javascript">
-
- /** Test for Bug 882653 **/
- // Each test is a string to eval, the expected exception message, and the
- // test description.
- var tests = [
- [ 'document.documentElement.appendChild.call({}, new Image())',
- "'appendChild' called on an object that does not implement interface Node.",
- "bogus method this object" ],
- [ 'Object.getOwnPropertyDescriptor(Document.prototype, "documentElement").get.call({})',
- "'get documentElement' called on an object that does not implement interface Document.",
- "bogus getter this object" ],
- [ 'Object.getOwnPropertyDescriptor(Element.prototype, "innerHTML").set.call({})',
- "'set innerHTML' called on an object that does not implement interface Element.",
- "bogus setter this object" ],
- [ 'document.documentElement.appendChild(5)',
- "Argument 1 of Node.appendChild is not an object.",
- "bogus interface argument" ],
- [ 'document.documentElement.appendChild(null)',
- "Argument 1 of Node.appendChild is not an object.",
- "null interface argument" ],
- [ 'document.createTreeWalker(document).currentNode = 5',
- "Value being assigned to TreeWalker.currentNode is not an object.",
- "interface setter call" ],
- [ 'document.documentElement.appendChild({})',
- "Argument 1 of Node.appendChild does not implement interface Node.",
- "wrong interface argument" ],
- [ 'document.createTreeWalker(document).currentNode = {}',
- "Value being assigned to TreeWalker.currentNode does not implement interface Node.",
- "wrong interface setter call" ],
- [ 'document.createElement("canvas").getContext("2d").fill("bogus")',
- "Argument 1 of CanvasRenderingContext2D.fill 'bogus' is not a valid value for enumeration CanvasWindingRule.",
- "bogus enum value" ],
- [ 'document.createTreeWalker(document, 0xFFFFFFFF, { acceptNode: 5 }).nextNode()',
- "Property 'acceptNode' is not callable.",
- "non-callable callback interface operation property" ],
- [ '(new TextDecoder).decode(new Uint8Array(), new RegExp())',
- "Argument 2 of TextDecoder.decode can't be converted to a dictionary.",
- "regexp passed for a dictionary" ],
- [ 'URL.createObjectURL(null, null)',
- "Argument 1 is not valid for any of the 2-argument overloads of URL.createObjectURL.",
- "overload resolution failure" ],
- [ 'document.createElement("select").add({})',
- "Argument 1 of HTMLSelectElement.add could not be converted to any of: HTMLOptionElement, HTMLOptGroupElement.",
- "invalid value passed for union" ],
- [ 'document.createElement("canvas").getContext("2d").createLinearGradient(0, 1, 0, 1).addColorStop(NaN, "")',
- "Argument 1 of CanvasGradient.addColorStop is not a finite floating-point value.",
- "invalid float" ]
- ];
-
- for (var i = 0; i < tests.length; ++i) {
- msg = "Correct exception should be thrown for " + tests[i][2];
- try {
- eval(tests[i][0]);
- ok(false, msg);
- } catch (e) {
- is(e.message, tests[i][1], msg);
- }
- }
-
- </script>
-</head>
-<body>
-<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=882653">Mozilla Bug 882653</a>
-<p id="display"></p>
-<div id="content" style="display: none">
-
-</div>
-<pre id="test">
-</pre>
-</body>
-</html>
diff --git a/dom/bindings/test/test_exception_options_from_jsimplemented.html b/dom/bindings/test/test_exception_options_from_jsimplemented.html
deleted file mode 100644
index 8a98a8fb63..0000000000
--- a/dom/bindings/test/test_exception_options_from_jsimplemented.html
+++ /dev/null
@@ -1,166 +0,0 @@
-<!DOCTYPE HTML>
-<html>
-<!--
-https://bugzilla.mozilla.org/show_bug.cgi?id=1107592
--->
-<head>
- <meta charset="utf-8">
- <title>Test for Bug 1107592</title>
- <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
- <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
- <script type="application/javascript">
-
- /** Test for Bug 1107592 **/
-
- SimpleTest.waitForExplicitFinish();
-
- function doTest() {
- var file = location.href;
- var asyncFrame;
- /* Async parent frames from pushPrefEnv don't show up in e10s. */
- var isE10S = !SpecialPowers.isMainProcess();
- if (!isE10S && SpecialPowers.getBoolPref("javascript.options.asyncstack")) {
- asyncFrame = `Async*@${file}:153:3
-`;
- } else {
- asyncFrame = "";
- }
-
- var t = new TestInterfaceJS();
- try {
- t.testThrowError();
- } catch (e) {
- ok(e instanceof Error, "Should have an Error here");
- ok(!(e instanceof DOMException), "Should not have DOMException here");
- ok(!("code" in e), "Should not have a 'code' property");
- is(e.name, "Error", "Should not have an interesting name here");
- is(e.message, "We are an Error", "Should have the right message");
- is(e.stack,
- `doTest@${file}:31:7
-${asyncFrame}`,
- "Exception stack should still only show our code");
- is(e.fileName,
- file,
- "Should have the right file name");
- is(e.lineNumber, 31, "Should have the right line number");
- is(e.columnNumber, 7, "Should have the right column number");
- }
-
- try {
- t.testThrowDOMException();
- } catch (e) {
- ok(e instanceof Error, "Should also have an Error here");
- ok(e instanceof DOMException, "Should have DOMException here");
- is(e.name, "NotSupportedError", "Should have the right name here");
- is(e.message, "We are a DOMException",
- "Should also have the right message");
- is(e.code, DOMException.NOT_SUPPORTED_ERR,
- "Should have the right 'code'");
- is(e.stack,
- `doTest@${file}:50:7
-${asyncFrame}`,
- "Exception stack should still only show our code");
- is(e.filename,
- file,
- "Should still have the right file name");
- is(e.lineNumber, 50, "Should still have the right line number");
- todo_isnot(e.columnNumber, 0,
- "No column number support for DOMException yet");
- }
-
- try {
- t.testThrowTypeError();
- } catch (e) {
- ok(e instanceof TypeError, "Should have a TypeError here");
- ok(!(e instanceof DOMException), "Should not have DOMException here (2)");
- ok(!("code" in e), "Should not have a 'code' property (2)");
- is(e.name, "TypeError", "Should be named TypeError");
- is(e.message, "We are a TypeError",
- "Should also have the right message (2)");
- is(e.stack,
- `doTest@${file}:72:7
-${asyncFrame}`,
- "Exception stack for TypeError should only show our code");
- is(e.fileName,
- file,
- "Should still have the right file name for TypeError");
- is(e.lineNumber, 72, "Should still have the right line number for TypeError");
- is(e.columnNumber, 7, "Should have the right column number for TypeError");
- }
-
- try {
- t.testThrowCallbackError(function() { Array.indexOf() });
- } catch (e) {
- ok(e instanceof TypeError, "Should have a TypeError here (3)");
- ok(!(e instanceof DOMException), "Should not have DOMException here (3)");
- ok(!("code" in e), "Should not have a 'code' property (3)");
- is(e.name, "TypeError", "Should be named TypeError (3)");
- is(e.message, "missing argument 0 when calling function Array.indexOf",
- "Should also have the right message (3)");
- is(e.stack,
- `doTest/<@${file}:92:45
-doTest@${file}:92:7
-${asyncFrame}`,
- "Exception stack for TypeError should only show our code (3)");
- is(e.fileName,
- file,
- "Should still have the right file name for TypeError (3)");
- is(e.lineNumber, 92, "Should still have the right line number for TypeError (3)");
- is(e.columnNumber, 45, "Should have the right column number for TypeError (3)");
- }
-
- try {
- t.testThrowXraySelfHosted();
- } catch (e) {
- ok(!(e instanceof Error), "Should have an Exception here (4)");
- ok(!(e instanceof DOMException), "Should not have DOMException here (4)");
- ok(!("code" in e), "Should not have a 'code' property (4)");
- is(e.name, "NS_ERROR_UNEXPECTED", "Name should be sanitized (4)");
- is(e.message, "", "Message should be sanitized (5)");
- is(e.stack,
- `doTest@${file}:113:7
-${asyncFrame}`,
- "Exception stack for sanitized exception should only show our code (4)");
- is(e.filename,
- file,
- "Should still have the right file name for sanitized exception (4)");
- is(e.lineNumber, 113, "Should still have the right line number for sanitized exception (4)");
- todo_isnot(e.columnNumber, 0, "Should have the right column number for sanitized exception (4)");
- }
-
- try {
- t.testThrowSelfHosted();
- } catch (e) {
- ok(!(e instanceof Error), "Should have an Exception here (5)");
- ok(!(e instanceof DOMException), "Should not have DOMException here (5)");
- ok(!("code" in e), "Should not have a 'code' property (5)");
- is(e.name, "NS_ERROR_UNEXPECTED", "Name should be sanitized (5)");
- is(e.message, "", "Message should be sanitized (5)");
- is(e.stack,
- `doTest@${file}:132:7
-${asyncFrame}`,
- "Exception stack for sanitized exception should only show our code (5)");
- is(e.filename,
- file,
- "Should still have the right file name for sanitized exception (5)");
- is(e.lineNumber, 132, "Should still have the right line number for sanitized exception (5)");
- todo_isnot(e.columnNumber, 0, "Should have the right column number for sanitized exception (5)");
- }
-
- SimpleTest.finish();
- }
-
- SpecialPowers.pushPrefEnv({set: [['dom.expose_test_interfaces', true]]},
- doTest);
- </script>
-</head>
-<body>
-<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1107592">Mozilla Bug 1107592</a>
-<p id="display"></p>
-<div id="content" style="display: none">
-
-</div>
-<pre id="test">
-</pre>
-</body>
-</html>
diff --git a/dom/bindings/test/test_exceptions_from_jsimplemented.html b/dom/bindings/test/test_exceptions_from_jsimplemented.html
deleted file mode 100644
index d0f599353a..0000000000
--- a/dom/bindings/test/test_exceptions_from_jsimplemented.html
+++ /dev/null
@@ -1,56 +0,0 @@
-<!DOCTYPE HTML>
-<html>
-<!--
-https://bugzilla.mozilla.org/show_bug.cgi?id=923010
--->
-<head>
- <meta charset="utf-8">
- <title>Test for Bug 923010</title>
- <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
- <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
- <script type="application/javascript">
- /** Test for Bug 923010 **/
- try {
- var conn = new RTCPeerConnection();
-
- var candidate = new RTCIceCandidate({candidate: null });
- conn.addIceCandidate(candidate)
- .then(function() {
- ok(false, "addIceCandidate succeeded when it should have failed");
- }, function(reason) {
- is(reason.lineNumber, 17, "Rejection should have been on line 17");
- is(reason.message,
- "Invalid candidate passed to addIceCandidate!",
- "Should have the rejection we expect");
- })
- .catch(function(reason) {
- ok(false, "unexpected error: " + reason);
- });
- } catch (e) {
- // b2g has no WebRTC, apparently
- todo(false, "No WebRTC on b2g yet");
- }
-
- conn.close();
- try {
- conn.setIdentityProvider("example.com", "foo");
- ok(false, "That call to setIdentityProvider should have thrown");
- } catch (e) {
- is(e.lineNumber, 36, "Exception should have been on line 36");
- is(e.message,
- "Peer connection is closed",
- "Should have the exception we expect");
- }
-
- </script>
-</head>
-<body>
-<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=923010">Mozilla Bug 923010</a>
-<p id="display"></p>
-<div id="content" style="display: none">
-
-</div>
-<pre id="test">
-</pre>
-</body>
-</html>
diff --git a/dom/bindings/test/test_forOf.html b/dom/bindings/test/test_forOf.html
deleted file mode 100644
index 53969a23e7..0000000000
--- a/dom/bindings/test/test_forOf.html
+++ /dev/null
@@ -1,86 +0,0 @@
-<!DOCTYPE HTML>
-<html>
-<!--
-https://bugzilla.mozilla.org/show_bug.cgi?id=725907
--->
-<head>
- <meta charset="utf-8">
- <title>Test for Bug 725907</title>
- <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
- <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
-</head>
-<body>
-<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=725907">Mozilla Bug 725907</a>
-<p id="display"></p>
-<div id="content" style="display: none">
-
-</div>
-<div id="basket">
- <span id="egg0"></span>
- <span id="egg1"><span id="duckling1"></span></span>
- <span id="egg2"></span>
-</div>
-<pre id="test">
-<script type="application/javascript">
-
-/** Test for Bug 725907 **/
-
-function runTestsForDocument(document, msgSuffix) {
- function is(a, b, msg) { SimpleTest.is(a, b, msg + msgSuffix); }
- function isnot(a, b, msg) { SimpleTest.isnot(a, b, msg + msgSuffix); }
-
- var basket = document.getElementById("basket");
- var egg3 = document.createElement("span");
- egg3.id = "egg3";
-
- var log = '';
- for (var x of basket.childNodes) {
- if (x.nodeType != x.TEXT_NODE)
- log += x.id + ";";
- }
- is(log, "egg0;egg1;egg2;", "'for (x of div.childNodes)' should iterate over child nodes");
-
- log = '';
- for (var x of basket.childNodes) {
- if (x.nodeType != x.TEXT_NODE) {
- log += x.id + ";";
- if (x.id == "egg1")
- basket.appendChild(egg3);
- }
- }
- is(log, "egg0;egg1;egg2;egg3;", "'for (x of div.childNodes)' should see elements added during iteration");
-
- log = '';
- basket.appendChild(document.createTextNode("some text"));
- for (var x of basket.children)
- log += x.id + ";";
- is(log, "egg0;egg1;egg2;egg3;", "'for (x of div.children)' should iterate over child elements");
-
- var count = 0;
- for (var x of document.getElementsByClassName("hazardous-materials"))
- count++;
- is(count, 0, "'for (x of emptyNodeList)' loop should run zero times");
-
- var log = '';
- for (var x of document.querySelectorAll("span"))
- log += x.id + ";";
- is(log, "egg0;egg1;duckling1;egg2;egg3;", "for-of loop should work with a querySelectorAll() NodeList");
-}
-
-/* All the tests run twice. First, in this document, so without any wrappers. */
-runTestsForDocument(document, "");
-
-/* And once using the document of an iframe, so working with cross-compartment wrappers. */
-SimpleTest.waitForExplicitFinish();
-function iframeLoaded(iframe) {
- runTestsForDocument(iframe.contentWindow.document, " (in iframe)");
- SimpleTest.finish();
-}
-
-</script>
-
-<iframe src="forOf_iframe.html" onload="iframeLoaded(this)"></iframe>
-
-</pre>
-</body>
-</html>
diff --git a/dom/bindings/test/test_integers.html b/dom/bindings/test/test_integers.html
deleted file mode 100644
index c74b68216c..0000000000
--- a/dom/bindings/test/test_integers.html
+++ /dev/null
@@ -1,50 +0,0 @@
-<!DOCTYPE HTML>
-<html>
-<head>
- <meta charset="utf-8">
- <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
- <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
-</head>
-<body>
-<p id="display"></p>
-<div id="content" style="display: none">
- <canvas id="c" width="1" height="1"></canvas>
-</div>
-<pre id="test">
-<script type="application/javascript">
-
- function testInt64NonFinite(arg) {
- // We can use a WebGLRenderingContext to test conversion to 64-bit signed
- // ints edge cases.
- var gl = $("c").getContext("experimental-webgl");
- if (!gl) {
- // No WebGL support on MacOS 10.5. Just skip this test
- todo(false, "WebGL not supported");
- return;
- }
- var error = gl.getError()
-
- // on the b2g emulator we get GL_INVALID_FRAMEBUFFER_OPERATION
- if (error == 0x0506) // GL_INVALID_FRAMEBUFFER_OPERATION
- return;
-
- is(error, 0, "Should not start in an error state");
-
- var b = gl.createBuffer();
- gl.bindBuffer(gl.ARRAY_BUFFER, b);
-
- var a = new Float32Array(1);
- gl.bufferData(gl.ARRAY_BUFFER, a, gl.STATIC_DRAW);
-
- gl.bufferSubData(gl.ARRAY_BUFFER, arg, a);
-
- is(gl.getError(), 0, "Should have treated non-finite double as 0");
- }
-
- testInt64NonFinite(NaN);
- testInt64NonFinite(Infinity);
- testInt64NonFinite(-Infinity);
-</script>
-</pre>
-</body>
-</html>
diff --git a/dom/bindings/test/test_interfaceName.html b/dom/bindings/test/test_interfaceName.html
deleted file mode 100644
index 59828a2cf2..0000000000
--- a/dom/bindings/test/test_interfaceName.html
+++ /dev/null
@@ -1,28 +0,0 @@
-<!DOCTYPE HTML>
-<html>
-<!--
-https://bugzilla.mozilla.org/show_bug.cgi?id=1084001
--->
-<head>
- <meta charset="utf-8">
- <title>Test for Bug 1084001</title>
- <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
- <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
- <script type="application/javascript">
-
- /** Test for Bug 1084001 **/
- is(Image.name, "Image", "Image name");
- is(Promise.name, "Promise", "Promise name");
-
- </script>
-</head>
-<body>
-<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1084001">Mozilla Bug 1084001</a>
-<p id="display"></p>
-<div id="content" style="display: none">
-
-</div>
-<pre id="test">
-</pre>
-</body>
-</html>
diff --git a/dom/bindings/test/test_interfaceToString.html b/dom/bindings/test/test_interfaceToString.html
deleted file mode 100644
index c97b2f63b5..0000000000
--- a/dom/bindings/test/test_interfaceToString.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!DOCTYPE HTML>
-<html>
-<!--
-https://bugzilla.mozilla.org/show_bug.cgi?id=742156
--->
-<head>
- <meta charset="utf-8">
- <title>Test for Bug 742156</title>
- <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
- <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
-</head>
-<body>
-<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=742156">Mozilla Bug 742156</a>
-<p id="display"></p>
-<div id="content" style="display: none">
-
-</div>
-<pre id="test">
-<script type="application/javascript">
-
-/** Test for Bug 742156 **/
-
-var nativeToString = ("" + String.replace).replace("replace", "EventTarget");
-try {
- var eventTargetToString = "" + EventTarget;
- is(eventTargetToString, nativeToString,
- "Stringifying a DOM interface object should return the same string" +
- "as stringifying a native function.");
-}
-catch (e) {
- ok(false, "Stringifying a DOM interface object shouldn't throw.");
-}
-
-try {
- eventTargetToString = Function.prototype.toString.call(EventTarget);
- is(eventTargetToString, nativeToString,
- "Stringifying a DOM interface object via Function.prototype.toString " +
- "should return the same string as stringifying a native function.");
-}
-catch (e) {
- ok(false, "Stringifying a DOM interface object shouldn't throw.");
-}
-
-</script>
-</pre>
-</body>
-</html>
diff --git a/dom/bindings/test/test_iterable.html b/dom/bindings/test/test_iterable.html
deleted file mode 100644
index 8ce818e764..0000000000
--- a/dom/bindings/test/test_iterable.html
+++ /dev/null
@@ -1,241 +0,0 @@
-<!-- Any copyright is dedicated to the Public Domain.
-- http://creativecommons.org/publicdomain/zero/1.0/ -->
-<!DOCTYPE HTML>
-<html>
- <head>
- <title>Test Iterable Interface</title>
- <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
- <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
- </head>
- <body>
- <script class="testbody" type="application/javascript">
- SimpleTest.waitForExplicitFinish();
- SpecialPowers.pushPrefEnv({set: [['dom.expose_test_interfaces', true]]}, function() {
-
- base_properties = [["entries", "function", 0],
- ["keys", "function", 0],
- ["values", "function", 0],
- ["forEach", "function", 1]]
- var testExistence = function testExistence(prefix, obj, properties) {
- for (var [name, type, args] of properties) {
- // Properties are somewhere up the proto chain, hasOwnProperty won't work
- isnot(obj[name], undefined,
- `${prefix} object has property ${name}`);
-
- is(typeof obj[name], type,
- `${prefix} object property ${name} is a ${type}`);
- // Check function length
- if (type == "function") {
- is(obj[name].length, args,
- `${prefix} object property ${name} is length ${args}`);
- is(obj[name].name, name,
- `${prefix} object method name is ${name}`);
- }
-
- // Find where property is on proto chain, check for enumerablility there.
- var owner = obj;
- while (owner) {
- var propDesc = Object.getOwnPropertyDescriptor(owner, name);
- if (propDesc) {
- ok(propDesc.enumerable,
- `${prefix} object property ${name} is enumerable`);
- break;
- }
- owner = Object.getPrototypeOf(owner);
- }
- }
- }
-
- var itr;
- // Simple single type iterable creation and functionality test
- info("IterableSingle: Testing simple iterable creation and functionality");
- itr = new TestInterfaceIterableSingle();
- testExistence("IterableSingle: ", itr, base_properties);
- is(itr[Symbol.iterator], Array.prototype[Symbol.iterator],
- "IterableSingle: Should be using %ArrayIterator% for @@iterator");
- is(itr.keys, Array.prototype.keys,
- "IterableSingle: Should be using %ArrayIterator% for 'keys'");
- is(itr.entries, Array.prototype.entries,
- "IterableSingle: Should be using %ArrayIterator% for 'entries'");
- is(itr.values, itr[Symbol.iterator],
- "IterableSingle: Should be using @@iterator for 'values'");
- is(itr.forEach, Array.prototype.forEach,
- "IterableSingle: Should be using %ArrayIterator% for 'forEach'");
- var keys = [...itr.keys()];
- var values = [...itr.values()];
- var entries = [...itr.entries()];
- var key_itr = itr.keys();
- var value_itr = itr.values();
- var entries_itr = itr.entries();
- for (var i = 0; i < 3; ++i) {
- var key = key_itr.next();
- var value = value_itr.next();
- var entry = entries_itr.next();
- is(key.value, i, "IterableSingle: Key iterator value should be " + i);
- is(key.value, keys[i],
- "IterableSingle: Key iterator value should match destructuring " + i);
- is(value.value, key.value, "IterableSingle: Value iterator value should be " + key.value);
- is(value.value, values[i],
- "IterableSingle: Value iterator value should match destructuring " + i);
- is(entry.value[0], i, "IterableSingle: Entry iterator value 0 should be " + i);
- is(entry.value[1], i, "IterableSingle: Entry iterator value 1 should be " + i);
- is(entry.value[0], entries[i][0],
- "IterableSingle: Entry iterator value 0 should match destructuring " + i);
- is(entry.value[1], entries[i][1],
- "IterableSingle: Entry iterator value 1 should match destructuring " + i);
- }
-
- var callsToForEachCallback = 0;
- var thisArg = {};
- itr.forEach(function(value, index, obj) {
- is(index, callsToForEachCallback,
- `IterableSingle: Should have the right index at ${callsToForEachCallback} calls to forEach callback`);
- is(value, values[index],
- `IterableSingle: Should have the right value at ${callsToForEachCallback} calls to forEach callback`);
- is(this, thisArg,
- "IterableSingle: Should have the right this value for forEach callback");
- is(obj, itr,
- "IterableSingle: Should have the right third arg for forEach callback");
- ++callsToForEachCallback;
- }, thisArg);
- is(callsToForEachCallback, 3,
- "IterableSingle: Should have right total number of calls to forEach callback");
-
- var key = key_itr.next();
- var value = value_itr.next();
- var entry = entries_itr.next();
- is(key.value, undefined, "IterableSingle: Key iterator value should be undefined");
- is(key.done, true, "IterableSingle: Key iterator done should be true");
- is(value.value, undefined, "IterableSingle: Value iterator value should be undefined");
- is(value.done, true, "IterableSingle: Value iterator done should be true");
- is(entry.value, undefined, "IterableDouble: Entry iterator value should be undefined");
- is(entry.done, true, "IterableSingle: Entry iterator done should be true");
- is(Object.prototype.toString.call(Object.getPrototypeOf(key_itr)),
- "[object Array Iterator]",
- "iterator prototype should have the right brand");
-
- // Simple dual type iterable creation and functionality test
- info("IterableDouble: Testing simple iterable creation and functionality");
- itr = new TestInterfaceIterableDouble();
- testExistence("IterableDouble: ", itr, base_properties);
- is(itr.entries, itr[Symbol.iterator],
- "IterableDouble: Should be using @@iterator for 'entries'");
- var elements = [["a", "b"], ["c", "d"], ["e", "f"]]
- var keys = [...itr.keys()];
- var values = [...itr.values()];
- var entries = [...itr.entries()];
- var key_itr = itr.keys();
- var value_itr = itr.values();
- var entries_itr = itr.entries();
- for (var i = 0; i < 3; ++i) {
- var key = key_itr.next();
- var value = value_itr.next();
- var entry = entries_itr.next();
- is(key.value, elements[i][0], "IterableDouble: Key iterator value should be " + elements[i][0]);
- is(key.value, keys[i],
- "IterableDouble: Key iterator value should match destructuring " + i);
- is(value.value, elements[i][1], "IterableDouble: Value iterator value should be " + elements[i][1]);
- is(value.value, values[i],
- "IterableDouble: Value iterator value should match destructuring " + i);
- is(entry.value[0], elements[i][0], "IterableDouble: Entry iterator value 0 should be " + elements[i][0]);
- is(entry.value[1], elements[i][1], "IterableDouble: Entry iterator value 1 should be " + elements[i][1]);
- is(entry.value[0], entries[i][0],
- "IterableDouble: Entry iterator value 0 should match destructuring " + i);
- is(entry.value[1], entries[i][1],
- "IterableDouble: Entry iterator value 1 should match destructuring " + i);
- }
-
- callsToForEachCallback = 0;
- thisArg = {};
- itr.forEach(function(value, key, obj) {
- is(key, keys[callsToForEachCallback],
- `IterableDouble: Should have the right key at ${callsToForEachCallback} calls to forEach callback`);
- is(value, values[callsToForEachCallback],
- `IterableDouble: Should have the right value at ${callsToForEachCallback} calls to forEach callback`);
- is(this, thisArg,
- "IterableDouble: Should have the right this value for forEach callback");
- is(obj, itr,
- "IterableSingle: Should have the right third arg for forEach callback");
- ++callsToForEachCallback;
- }, thisArg);
- is(callsToForEachCallback, 3,
- "IterableDouble: Should have right total number of calls to forEach callback");
-
- var key = key_itr.next();
- var value = value_itr.next();
- var entry = entries_itr.next()
- is(key.value, undefined, "IterableDouble: Key iterator value should be undefined");
- is(key.done, true, "IterableDouble: Key iterator done should be true");
- is(value.value, undefined, "IterableDouble: Value iterator value should be undefined");
- is(value.done, true, "IterableDouble: Value iterator done should be true");
- is(entry.value, undefined, "IterableDouble: Entry iterator value should be undefined");
- is(entry.done, true, "IterableDouble: Entry iterator done should be true");
- is(Object.prototype.toString.call(Object.getPrototypeOf(key_itr)),
- "[object TestInterfaceIterableDoubleIteratorPrototype]",
- "iterator prototype should have the right brand");
-
- // Simple dual type iterable creation and functionality test
- info("IterableDoubleUnion: Testing simple iterable creation and functionality");
- itr = new TestInterfaceIterableDoubleUnion();
- testExistence("IterableDoubleUnion: ", itr, base_properties);
- is(itr.entries, itr[Symbol.iterator],
- "IterableDoubleUnion: Should be using @@iterator for 'entries'");
- var elements = [["long", 1], ["string", "a"]]
- var keys = [...itr.keys()];
- var values = [...itr.values()];
- var entries = [...itr.entries()];
- var key_itr = itr.keys();
- var value_itr = itr.values();
- var entries_itr = itr.entries();
- for (var i = 0; i < elements.length; ++i) {
- var key = key_itr.next();
- var value = value_itr.next();
- var entry = entries_itr.next();
- is(key.value, elements[i][0], "IterableDoubleUnion: Key iterator value should be " + elements[i][0]);
- is(key.value, keys[i],
- "IterableDoubleUnion: Key iterator value should match destructuring " + i);
- is(value.value, elements[i][1], "IterableDoubleUnion: Value iterator value should be " + elements[i][1]);
- is(value.value, values[i],
- "IterableDoubleUnion: Value iterator value should match destructuring " + i);
- is(entry.value[0], elements[i][0], "IterableDoubleUnion: Entry iterator value 0 should be " + elements[i][0]);
- is(entry.value[1], elements[i][1], "IterableDoubleUnion: Entry iterator value 1 should be " + elements[i][1]);
- is(entry.value[0], entries[i][0],
- "IterableDoubleUnion: Entry iterator value 0 should match destructuring " + i);
- is(entry.value[1], entries[i][1],
- "IterableDoubleUnion: Entry iterator value 1 should match destructuring " + i);
- }
-
- callsToForEachCallback = 0;
- thisArg = {};
- itr.forEach(function(value, key, obj) {
- is(key, keys[callsToForEachCallback],
- `IterableDoubleUnion: Should have the right key at ${callsToForEachCallback} calls to forEach callback`);
- is(value, values[callsToForEachCallback],
- `IterableDoubleUnion: Should have the right value at ${callsToForEachCallback} calls to forEach callback`);
- is(this, thisArg,
- "IterableDoubleUnion: Should have the right this value for forEach callback");
- is(obj, itr,
- "IterableSingle: Should have the right third arg for forEach callback");
- ++callsToForEachCallback;
- }, thisArg);
- is(callsToForEachCallback, 2,
- "IterableDoubleUnion: Should have right total number of calls to forEach callback");
-
- var key = key_itr.next();
- var value = value_itr.next();
- var entry = entries_itr.next()
- is(key.value, undefined, "IterableDoubleUnion: Key iterator value should be undefined");
- is(key.done, true, "IterableDoubleUnion: Key iterator done should be true");
- is(value.value, undefined, "IterableDoubleUnion: Value iterator value should be undefined");
- is(value.done, true, "IterableDoubleUnion: Value iterator done should be true");
- is(entry.value, undefined, "IterableDoubleUnion: Entry iterator value should be undefined");
- is(entry.done, true, "IterableDoubleUnion: Entry iterator done should be true");
- is(Object.prototype.toString.call(Object.getPrototypeOf(key_itr)),
- "[object TestInterfaceIterableDoubleUnionIteratorPrototype]",
- "iterator prototype should have the right brand");
-
- SimpleTest.finish();
- });
- </script>
- </body>
-</html>
diff --git a/dom/bindings/test/test_jsimplemented_eventhandler.html b/dom/bindings/test/test_jsimplemented_eventhandler.html
deleted file mode 100644
index 2854a31125..0000000000
--- a/dom/bindings/test/test_jsimplemented_eventhandler.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!DOCTYPE HTML>
-<html>
-<!--
-https://bugzilla.mozilla.org/show_bug.cgi?id=1186696
--->
-<head>
- <meta charset="utf-8">
- <title>Test for Bug 1186696</title>
- <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
- <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
- <script type="application/javascript">
-
- /** Test for Bug 1186696 **/
- SimpleTest.waitForExplicitFinish();
-
- function doTest() {
- var values = [ function() {}, 5, null, undefined, "some string", {} ];
-
- while (values.length != 0) {
- var value = values.pop();
- var t = new TestInterfaceJS();
- t.onsomething = value;
- var gottenValue = t.onsomething;
- if (typeof value == "object" || typeof value == "function") {
- is(gottenValue, value, "Should get back the object-or-null we put in");
- } else {
- is(gottenValue, null, "Should get back null");
- }
- }
-
- SimpleTest.finish();
- }
-
- SpecialPowers.pushPrefEnv({set: [['dom.expose_test_interfaces', true]]},
- doTest);
- </script>
-</head>
-<body>
-<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1186696">Mozilla Bug 1186696</a>
-<p id="display"></p>
-<div id="content" style="display: none">
-
-</div>
-<pre id="test">
-</pre>
-</body>
-</html>
diff --git a/dom/bindings/test/test_kill_longrunning_prerendered_content.xul b/dom/bindings/test/test_kill_longrunning_prerendered_content.xul
deleted file mode 100644
index d86b15ad9f..0000000000
--- a/dom/bindings/test/test_kill_longrunning_prerendered_content.xul
+++ /dev/null
@@ -1,85 +0,0 @@
-<?xml version="1.0"?>
-<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
-<?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css" type="text/css"?>
-<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
- xmlns:html="http://www.w3.org/1999/xhtml"
- onload="runTest();">
- <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
- <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/EventUtils.js"></script>
-
-<script class="testbody" type="application/javascript">
-<![CDATA[
-
- SimpleTest.waitForExplicitFinish();
-
- function Listener(aBrowser, aPrerendered, aCallback) {
- this.init(aBrowser, aPrerendered, aCallback);
- }
-
- Listener.prototype = {
- init: function(aBrowser, aCallback) {
- this.mBrowser = aBrowser;
- this.mCallback = aCallback;
- },
- QueryInterface: function(aIID) {
- if (aIID.equals(Components.interfaces.nsIWebProgressListener) ||
- aIID.equals(Components.interfaces.nsISupportsWeakReference) ||
- aIID.equals(Components.interfaces.nsISupports))
- return this;
- throw Components.results.NS_NOINTERFACE;
- },
- onStateChange : function(aWebProgress, aRequest, aStateFlags, aStatus) {
- if ((aStateFlags & Components.interfaces.nsIWebProgressListener.STATE_STOP) &&
- (aStateFlags & Components.interfaces.nsIWebProgressListener.STATE_IS_DOCUMENT)) {
- setTimeout(this.mCallback, 0);
- }
- },
- onProgressChange : function(aWebProgress, aRequest,
- aCurSelfProgress, aMaxSelfProgress,
- aCurTotalProgress, aMaxTotalProgress) {},
- onLocationChange : function(aWebProgress, aRequest, aLocation, aFlags) {},
- onStatusChange : function(aWebProgress, aRequest, aStatus, aMessage) {},
- onSecurityChange : function(aWebProgress, aRequest, aState) {},
- mBrowser: null,
- mPrerendered: false,
- mCallback: null
- };
-
- var progress, progressListener;
-
- function runTest() {
- SpecialPowers.pushPrefEnv({
- "set": [
- ["dom.max_script_run_time", 1]
- ]
- }, function() {
- test(function() {
- ok("The page is successfully interrupted.");
- SimpleTest.finish();
- });
- });
- }
-
- function test(aCallback) {
- var browser = document.getElementById("prerendered");;
- progressListener = new Listener(browser, aCallback);
- var docShell = browser.docShell;
- progress = docShell.QueryInterface(Components.interfaces.nsIInterfaceRequestor)
- .getInterface(Components.interfaces.nsIWebProgress);
- progress.addProgressListener(progressListener,
- Components.interfaces.nsIWebProgress.NOTIFY_ALL);
- browser.loadURI("data:text/html,<script>;for(;;);</script" + ">");
- }
-
-]]>
-</script>
-
-<body id="html_body" xmlns="http://www.w3.org/1999/xhtml">
-<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1050456">Mozilla Bug 1050456</a>
-<p id="display"></p>
-
-<pre id="test">
-</pre>
-</body>
-<browser prerendered="true" id="prerendered"/>
-</window>
diff --git a/dom/bindings/test/test_lenientThis.html b/dom/bindings/test/test_lenientThis.html
deleted file mode 100644
index cfbdcebcda..0000000000
--- a/dom/bindings/test/test_lenientThis.html
+++ /dev/null
@@ -1,27 +0,0 @@
-<!doctype html>
-<meta charset=utf-8>
-<title>[LenientThis]</title>
-<script src=/resources/testharness.js></script>
-<script src=/resources/testharnessreport.js></script>
-<div id=log></div>
-<script>
-function noop1() { }
-function noop2() { }
-
-test(function() {
- var desc = Object.getOwnPropertyDescriptor(Document.prototype, "onreadystatechange");
-
- document.onreadystatechange = noop1;
- assert_equals(document.onreadystatechange, noop1, "document.onreadystatechange == noop1");
- assert_equals(desc.get.call({ }), undefined, "document.onreadystatechange getter.call({}) == undefined");
-}, "invoking Document.onreadystatechange's getter with an invalid this object returns undefined");
-
-test(function() {
- var desc = Object.getOwnPropertyDescriptor(Document.prototype, "onreadystatechange");
-
- document.onreadystatechange = noop1;
- assert_equals(document.onreadystatechange, noop1, "document.onreadystatechange == noop1");
- assert_equals(desc.set.call({ }, noop2), undefined, "document.onreadystatechange setter.call({}) == undefined");
- assert_equals(document.onreadystatechange, noop1, "document.onreadystatechange == noop1 (still)");
-}, "invoking Document.onreadystatechange's setter with an invalid this object does nothing and returns undefined");
-</script>
diff --git a/dom/bindings/test/test_lookupGetter.html b/dom/bindings/test/test_lookupGetter.html
deleted file mode 100644
index 306ee4f643..0000000000
--- a/dom/bindings/test/test_lookupGetter.html
+++ /dev/null
@@ -1,49 +0,0 @@
-<!DOCTYPE HTML>
-<html>
-<!--
-https://bugzilla.mozilla.org/show_bug.cgi?id=462428
--->
-<head>
- <title>Test for Bug 462428</title>
- <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
- <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
-</head>
-<body>
-<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=462428">Mozilla Bug 462428</a>
-<p id="display"></p>
-<div id="content" style="display: none">
-
-</div>
-<pre id="test">
-<script type="application/javascript">
-
-/** Test for Bug 462428 **/
-var x = new XMLHttpRequest;
-x.open("GET", "");
-var getter = x.__lookupGetter__('readyState');
-ok(getter !== undefined, "But able to look it up the normal way");
-ok(!x.hasOwnProperty('readyState'), "property should still be on the prototype");
-
-var sawProp = false;
-for (var i in x) {
- if (i === "readyState") {
- sawProp = true;
- }
-}
-
-ok(sawProp, "property should be enumerable");
-
-is(getter.call(x), 1, "the getter actually works");
-
-Object.getPrototypeOf(x).__defineSetter__('readyState', function() {});
-is(getter.call(x), 1, "the getter works after defineSetter");
-
-is(x.responseType, "", "Should have correct responseType up front");
-var setter = x.__lookupSetter__('responseType');
-setter.call(x, "document");
-is(x.responseType, "document", "the setter is bound correctly");
-
-</script>
-</pre>
-</body>
-</html>
diff --git a/dom/bindings/test/test_namedNoIndexed.html b/dom/bindings/test/test_namedNoIndexed.html
deleted file mode 100644
index 205ec89f95..0000000000
--- a/dom/bindings/test/test_namedNoIndexed.html
+++ /dev/null
@@ -1,36 +0,0 @@
-<!DOCTYPE HTML>
-<html>
-<!--
-https://bugzilla.mozilla.org/show_bug.cgi?id=808991
--->
-<head>
- <meta charset="utf-8">
- <title>Test for Bug 808991</title>
- <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
- <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
-</head>
-<body>
-<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=808991">Mozilla Bug 808991</a>
-<p id="display"></p>
-<div id="content" style="display: none" data-1="foo" data-bar="baz">
-
-</div>
-<pre id="test">
-<script type="application/javascript">
-
-/** Test for Bug 808991 **/
-is($("content").dataset[1], "foo",
- "Indexed props should work like named on dataset");
-is($("content").dataset["1"], "foo",
- "Indexed props as strings should work like named on dataset");
-is($("content").dataset.bar, "baz",
- "Named props should work on dataset");
-is($("content").dataset['bar'], "baz",
- "Named props as strings should work on dataset");
-
-
-
-</script>
-</pre>
-</body>
-</html>
diff --git a/dom/bindings/test/test_named_getter_enumerability.html b/dom/bindings/test/test_named_getter_enumerability.html
deleted file mode 100644
index 641f78ab29..0000000000
--- a/dom/bindings/test/test_named_getter_enumerability.html
+++ /dev/null
@@ -1,40 +0,0 @@
-<!DOCTYPE html>
-<meta charset=utf-8>
-<title>Test for named getter enumerability</title>
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<div id="log"></div>
-<script>
-test(function() {
- var list = document.getElementsByTagName("div");
- var desc = Object.getOwnPropertyDescriptor(list, "0");
- assert_equals(typeof desc, "object", "Should have a '0' property");
- assert_true(desc.enumerable, "'0' property should be enumerable");
- desc = Object.getOwnPropertyDescriptor(list, "log");
- assert_equals(typeof desc, "object", "Should have a 'log' property");
- assert_false(desc.enumerable, "'log' property should not be enumerable");
-}, "Correct getOwnPropertyDescriptor behavior");
-test(function() {
- var list = document.getElementsByTagName("div");
- props = [];
- for (var prop in list) {
- props.push(prop);
- }
- assert_not_equals(props.indexOf("0"), -1, "Should enumerate '0'");
- assert_equals(props.indexOf("log"), -1, "Should not enumerate 'log'");
-}, "Correct enumeration behavior");
-test(function() {
- var list = document.getElementsByTagName("div");
- props = Object.keys(list)
- assert_not_equals(props.indexOf("0"), -1, "Keys should contain '0'");
- assert_equals(props.indexOf("log"), -1, "Keys should not contain 'log'");
-}, "Correct keys() behavior");
-test(function() {
- var list = document.getElementsByTagName("div");
- props = Object.getOwnPropertyNames(list)
- assert_not_equals(props.indexOf("0"), -1,
- "own prop names should contain '0'");
- assert_not_equals(props.indexOf("log"), -1,
- "own prop names should contain 'log'");
-}, "Correct getOwnPropertyNames() behavior");
-</script>
diff --git a/dom/bindings/test/test_oom_reporting.html b/dom/bindings/test/test_oom_reporting.html
deleted file mode 100644
index 7323736e50..0000000000
--- a/dom/bindings/test/test_oom_reporting.html
+++ /dev/null
@@ -1,42 +0,0 @@
-<!DOCTYPE HTML>
-<html>
-<!--
-https://bugzilla.mozilla.org/show_bug.cgi?id=
--->
-<head>
- <meta charset="utf-8">
- <title>Test for Bug </title>
- <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
- <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
- <script type="application/javascript">
-
- /** Test for Bug **/
- SimpleTest.waitForExplicitFinish();
-
- SimpleTest.expectUncaughtException();
- setTimeout(function() {
- SpecialPowers.Cu.getJSTestingFunctions().throwOutOfMemory();
- }, 0);
-
- addEventListener("error", function(e) {
- is(e.type, "error", "Should have an error event");
- is(e.message, "uncaught exception: out of memory",
- "Should have the right error message");
- // Make sure we finish async, in case the expectUncaughtException assertion
- // about having seen the exception runs after our listener
- SimpleTest.executeSoon(SimpleTest.finish);
- });
-
-
- </script>
-</head>
-<body>
-<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=">Mozilla Bug </a>
-<p id="display"></p>
-<div id="content" style="display: none">
-
-</div>
-<pre id="test">
-</pre>
-</body>
-</html>
diff --git a/dom/bindings/test/test_primitive_this.html b/dom/bindings/test/test_primitive_this.html
deleted file mode 100644
index d2b733dffe..0000000000
--- a/dom/bindings/test/test_primitive_this.html
+++ /dev/null
@@ -1,45 +0,0 @@
-<!DOCTYPE HTML>
-<html>
-<!--
-https://bugzilla.mozilla.org/show_bug.cgi?id=603201
--->
-<head>
- <meta charset="utf-8">
- <title>Test for Bug 603201</title>
- <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
- <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
- <script type="application/javascript">
-
- /** Test for Bug 603201 **/
-
- SimpleTest.waitForExplicitFinish();
- function runTest()
- {
- var nodes = document.body.childNodes;
-
- Object.setPrototypeOf(Number.prototype, nodes);
-
- Object.defineProperty(nodes, "getter", {get: function() {
- "use strict";
- is(this, 1);
- return "getter";
- }});
- Object.defineProperty(Object.getPrototypeOf(nodes), "getter2", {get: function() {
- "use strict";
- is(this, 1);
- return "getter2";
- }});
-
- var number = 1;
- is(number.getter, "getter");
- is(number.getter2, "getter2");
-
- SimpleTest.finish();
- }
-
- </script>
-</head>
-<body onload="runTest();">
-<pre>Test</pre>
-</body>
-</html>
diff --git a/dom/bindings/test/test_promise_rejections_from_jsimplemented.html b/dom/bindings/test/test_promise_rejections_from_jsimplemented.html
deleted file mode 100644
index 68de079ed6..0000000000
--- a/dom/bindings/test/test_promise_rejections_from_jsimplemented.html
+++ /dev/null
@@ -1,143 +0,0 @@
-<!DOCTYPE HTML>
-<html>
-<!--
-https://bugzilla.mozilla.org/show_bug.cgi?id=1107592
--->
-<head>
- <meta charset="utf-8">
- <title>Test for Bug 1107592</title>
- <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
- <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
- <script type="application/javascript">
-
- /** Test for Bug 1107592 **/
-
- SimpleTest.waitForExplicitFinish();
-
- function checkExn(lineNumber, name, message, code, filename, testNumber, stack, exn) {
- is(exn.lineNumber, lineNumber,
- "Should have the right line number in test " + testNumber);
- is(exn.name, name,
- "Should have the right exception name in test " + testNumber);
- is("filename" in exn ? exn.filename : exn.fileName, filename,
- "Should have the right file name in test " + testNumber);
- is(exn.message, message,
- "Should have the right message in test " + testNumber);
- is(exn.code, code, "Should have the right .code in test " + testNumber);
- if (message === "") {
- is(exn.name, "InternalError",
- "Should have one of our synthetic exceptions in test " + testNumber);
- }
- is(exn.stack, stack, "Should have the right stack in test " + testNumber);
- }
-
- function ensurePromiseFail(testNumber, value) {
- ok(false, "Test " + testNumber + " should not have a fulfilled promise");
- }
-
- function doTest() {
- var t = new TestInterfaceJS();
- /* Async parent frames from pushPrefEnv don't show up in e10s. */
- var isE10S = !SpecialPowers.isMainProcess();
- var asyncStack = SpecialPowers.getBoolPref("javascript.options.asyncstack");
- var ourFile = location.href;
- var unwrapError = "Promise rejection value is a non-unwrappable cross-compartment wrapper.";
- var parentFrame = (asyncStack && !isE10S) ? `Async*@${ourFile}:130:3
-` : "";
-
- Promise.all([
- t.testPromiseWithThrowingChromePromiseInit().then(
- ensurePromiseFail.bind(null, 1),
- checkExn.bind(null, 49, "InternalError", unwrapError,
- undefined, ourFile, 1,
- `doTest@${ourFile}:49:7
-` +
- parentFrame)),
- t.testPromiseWithThrowingContentPromiseInit(function() {
- thereIsNoSuchContentFunction1();
- }).then(
- ensurePromiseFail.bind(null, 2),
- checkExn.bind(null, 57, "ReferenceError",
- "thereIsNoSuchContentFunction1 is not defined",
- undefined, ourFile, 2,
- `doTest/<@${ourFile}:57:11
-doTest@${ourFile}:56:7
-` +
- parentFrame)),
- t.testPromiseWithThrowingChromeThenFunction().then(
- ensurePromiseFail.bind(null, 3),
- checkExn.bind(null, 0, "InternalError", unwrapError, undefined, "", 3, asyncStack ? (`Async*doTest@${ourFile}:67:7
-` +
- parentFrame) : "")),
- t.testPromiseWithThrowingContentThenFunction(function() {
- thereIsNoSuchContentFunction2();
- }).then(
- ensurePromiseFail.bind(null, 4),
- checkExn.bind(null, 73, "ReferenceError",
- "thereIsNoSuchContentFunction2 is not defined",
- undefined, ourFile, 4,
- `doTest/<@${ourFile}:73:11
-` +
- (asyncStack ? `Async*doTest@${ourFile}:72:7
-` : "") +
- parentFrame)),
- t.testPromiseWithThrowingChromeThenable().then(
- ensurePromiseFail.bind(null, 5),
- checkExn.bind(null, 0, "InternalError", unwrapError, undefined, "", 5, asyncStack ? (`Async*doTest@${ourFile}:84:7
-` +
- parentFrame) : "")),
- t.testPromiseWithThrowingContentThenable({
- then: function() { thereIsNoSuchContentFunction3(); }
- }).then(
- ensurePromiseFail.bind(null, 6),
- checkExn.bind(null, 90, "ReferenceError",
- "thereIsNoSuchContentFunction3 is not defined",
- undefined, ourFile, 6,
- `then@${ourFile}:90:32
-` + (asyncStack ? `Async*doTest@${ourFile}:89:7\n` + parentFrame : ""))),
- t.testPromiseWithDOMExceptionThrowingPromiseInit().then(
- ensurePromiseFail.bind(null, 7),
- checkExn.bind(null, 98, "NotFoundError",
- "We are a second DOMException",
- DOMException.NOT_FOUND_ERR, ourFile, 7,
- `doTest@${ourFile}:98:7
-` +
- parentFrame)),
- t.testPromiseWithDOMExceptionThrowingThenFunction().then(
- ensurePromiseFail.bind(null, 8),
- checkExn.bind(null, asyncStack ? 106 : 0, "NetworkError",
- "We are a third DOMException",
- DOMException.NETWORK_ERR, asyncStack ? ourFile : "", 8,
- (asyncStack ? `Async*doTest@${ourFile}:106:7
-` +
- parentFrame : ""))),
- t.testPromiseWithDOMExceptionThrowingThenable().then(
- ensurePromiseFail.bind(null, 9),
- checkExn.bind(null, asyncStack ? 114 : 0, "TypeMismatchError",
- "We are a fourth DOMException",
- DOMException.TYPE_MISMATCH_ERR,
- asyncStack ? ourFile : "", 9,
- (asyncStack ? `Async*doTest@${ourFile}:114:7
-` +
- parentFrame : ""))),
- ]).then(SimpleTest.finish,
- function(err) {
- ok(false, "One of our catch statements totally failed with err" + err + ', stack: ' + (err ? err.stack : ''));
- SimpleTest.finish();
- });
- }
-
- SpecialPowers.pushPrefEnv({set: [['dom.expose_test_interfaces', true]]},
- doTest);
- </script>
-</head>
-<body>
-<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1107592">Mozilla Bug 1107592</a>
-<p id="display"></p>
-<div id="content" style="display: none">
-
-</div>
-<pre id="test">
-</pre>
-</body>
-</html>
diff --git a/dom/bindings/test/test_proxies_via_xray.html b/dom/bindings/test/test_proxies_via_xray.html
deleted file mode 100644
index 59affe6c05..0000000000
--- a/dom/bindings/test/test_proxies_via_xray.html
+++ /dev/null
@@ -1,99 +0,0 @@
-<!DOCTYPE HTML>
-<html>
-<!--
-https://bugzilla.mozilla.org/show_bug.cgi?id=1021066
--->
-<head>
- <meta charset="utf-8">
- <title>Test for Bug 1021066</title>
- <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
- <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"/>
-</head>
-<body>
-<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1021066">Mozilla Bug 1021066</a>
-<p id="display"></p>
-<div id="content" style="display: none">
-<iframe id="t" src="http://example.org/tests/dom/bindings/test/file_proxies_via_xray.html"></iframe>
-</div>
-<pre id="test">
-<script type="application/javascript">
-
-/** Test for Bug 1021066 **/
-
-function test()
-{
- "use strict"; // So we'll get exceptions on sets
- var doc = document.getElementById("t").contentWindow.document;
- ok(!("x" in doc), "Should have an Xray here");
- is(doc.x, undefined, "Really should have an Xray here");
- is(doc.wrappedJSObject.x, 5, "And wrapping the right thing");
-
- // Test overridebuiltins binding without named setter
- is(doc.y, doc.getElementById("y"),
- "Named getter should work on Document");
- try {
- doc.z = 5;
- ok(false, "Should have thrown on set of readonly property on Document");
- } catch (e) {
- ok(/read-only/.test(e.message),
- "Threw the right exception on set of readonly property on Document");
- }
-
- doc.w = 5;
- is(doc.w, 5, "Should be able to set things that are not named props");
-
- // Test non-overridebuiltins binding without named setter
- var l = doc.getElementsByTagName("img");
- is(l.y, doc.getElementById("y"),
- "Named getter should work on HTMLCollection");
- try {
- l.z = 5;
- ok(false, "Should have thrown on set of readonly property on HTMLCollection");
- } catch (e) {
- ok(/read-only/.test(e.message),
- "Should throw the right exception on set of readonly property on HTMLCollection");
- }
- try {
- l[10] = 5;
- ok(false, "Should have thrown on set of indexed property on HTMLCollection");
- } catch (e) {
- ok(/doesn't have an indexed property setter/.test(e.message),
- "Should throw the right exception on set of indexed property on HTMLCollection");
- }
-
- // Test overridebuiltins binding with named setter
- var d = doc.documentElement.dataset;
- d.foo = "bar";
- // Check that this actually got passed on to the underlying object.
- is(d.wrappedJSObject.foo, "bar",
- "Set should get forwarded to the underlying object");
- is(doc.documentElement.getAttribute("data-foo"), "bar",
- "Attribute setter should have been called");
- d.foo = "baz";
- // Check that this actually got passed on to the underlying object.
- is(d.wrappedJSObject.foo, "baz",
- "Set should get forwarded to the underlying object again");
- is(doc.documentElement.getAttribute("data-foo"), "baz",
- "Attribute setter should have been called again");
-
- // Test non-overridebuiltins binding with named setter
- var s = doc.defaultView.localStorage;
- s["test_proxies_via_xray"] = "bar";
- // Check that this actually got passed on to the underlying object.
- is(s.wrappedJSObject["test_proxies_via_xray"], "bar",
- "Set should get forwarded to the underlying object without overridebuiltins");
- s["test_proxies_via_xray"] = "baz";
- // Check that this actually got passed on to the underlying object.
- is(s.wrappedJSObject["test_proxies_via_xray"], "baz",
- "Set should get forwarded to the underlying object again without overridebuiltins");
-
- SimpleTest.finish();
-}
-
-SimpleTest.waitForExplicitFinish();
-addLoadEvent(test);
-
-</script>
-</pre>
-</body>
-</html>
diff --git a/dom/bindings/test/test_queryInterface.html b/dom/bindings/test/test_queryInterface.html
deleted file mode 100644
index 076bf9e7db..0000000000
--- a/dom/bindings/test/test_queryInterface.html
+++ /dev/null
@@ -1,41 +0,0 @@
-<!DOCTYPE HTML>
-<html>
-<!--
-https://bugzilla.mozilla.org/show_bug.cgi?id=827546
--->
-<head>
- <meta charset="utf-8">
- <title>Test for Bug 827546</title>
- <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
- <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
- <script type="application/javascript">
-
- /** Test for Bug 827546 **/
-
- var notEditable = document.createElement("div");
- var thrown;
- try {
- thrown = false;
- SpecialPowers.do_QueryInterface(notEditable, "nsIDOMNSEditableElement");
- } catch (e) {
- thrown = true;
- }
- ok(thrown,
- "QI to nsIDOMNSEditableElement on a non-editable element should fail");
-
- var editable = document.createElement("input");
- ok(SpecialPowers.do_QueryInterface(editable, "nsIDOMNSEditableElement"),
- "Editable element needs to support QI to nsIDOMNSEditableElement");
-
- </script>
-</head>
-<body>
-<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=827546">Mozilla Bug 827546</a>
-<p id="display"></p>
-<div id="content" style="display: none">
-
-</div>
-<pre id="test">
-</pre>
-</body>
-</html>
diff --git a/dom/bindings/test/test_returnUnion.html b/dom/bindings/test/test_returnUnion.html
deleted file mode 100644
index 5be10ba3c6..0000000000
--- a/dom/bindings/test/test_returnUnion.html
+++ /dev/null
@@ -1,59 +0,0 @@
-<!DOCTYPE HTML>
-<html>
-<!--
-https://bugzilla.mozilla.org/show_bug.cgi?id=1048659
--->
-<head>
- <meta charset="utf-8">
- <title>Test for Bug 1048659</title>
- <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
- <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
- <script type="application/javascript">
-
- /** Test for returning unions from JS-implemented WebIDL. **/
- SimpleTest.waitForExplicitFinish();
- SpecialPowers.pushPrefEnv({set: [['dom.expose_test_interfaces', true]]}, go);
-
- function go() {
- var t = new TestInterfaceJS();
- var t2 = new TestInterfaceJS();
-
- is(t.pingPongUnion(t2), t2, "ping pong union for left case should be identity");
- is(t.pingPongUnion(12), 12, "ping pong union for right case should be identity");
-
- is(t.pingPongUnionContainingNull("this is not a string"), "this is not a string",
- "ping pong union containing union for left case should be identity");
- is(t.pingPongUnionContainingNull(null), null,
- "ping pong union containing null for right case null should be identity");
- is(t.pingPongUnionContainingNull(t2), t2,
- "ping pong union containing null for right case should be identity");
-
- is(t.pingPongNullableUnion(t2), t2, "ping pong nullable union for left case should be identity");
- is(t.pingPongNullableUnion(12), 12, "ping pong nullable union for right case should be identity");
- is(t.pingPongNullableUnion(null), null, "ping pong nullable union for null case should be identity");
-
- var rejectedBadUnion = false;
- var result = null;
- try {
- result = t.returnBadUnion();
- } catch (e) {
- rejectedBadUnion = true;
- }
- is(result, null, "bad union should not set a value for result");
- ok(rejectedBadUnion, "bad union should throw an exception");
-
- SimpleTest.finish();
- }
-
- </script>
-</head>
-<body>
-<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1048659">Mozilla Bug 1048659</a>
-<p id="display"></p>
-<div id="content" style="display: none">
-
-</div>
-<pre id="test">
-</pre>
-</body>
-</html>
diff --git a/dom/bindings/test/test_sequence_detection.html b/dom/bindings/test/test_sequence_detection.html
deleted file mode 100644
index 80dfac4db9..0000000000
--- a/dom/bindings/test/test_sequence_detection.html
+++ /dev/null
@@ -1,53 +0,0 @@
-<!DOCTYPE HTML>
-<html>
-<!--
-https://bugzilla.mozilla.org/show_bug.cgi?id=1066432
--->
-<head>
- <meta charset="utf-8">
- <title>Test for Bug 1066432</title>
- <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
- <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
- <script type="application/javascript">
-
- /** Test for Bug 1066432 **/
- SimpleTest.waitForExplicitFinish();
- SpecialPowers.pushPrefEnv({set: [['dom.expose_test_interfaces', true]]}, function() {
- var testInterfaceJS = new TestInterfaceJS();
- ok(testInterfaceJS, "got a TestInterfaceJS object");
-
- var nonIterableObject = {[Symbol.iterator]: 5};
-
- try {
- testInterfaceJS.testSequenceOverload(nonIterableObject);
- ok(false, "Should have thrown in the overload case"); // see long comment above!
- } catch (e) {
- is(e.name, "TypeError", "Should get a TypeError for the overload case");
- ok(e.message.includes("not iterable"),
- "Should have a message about being non-iterable in the overload case");
- }
-
- try {
- testInterfaceJS.testSequenceUnion(nonIterableObject);
- ok(false, "Should have thrown in the union case");
- } catch (e) {
- is(e.name, "TypeError", "Should get a TypeError for the union case");
- ok(e.message.includes("not iterable"),
- "Should have a message about being non-iterable in the union case");
- }
-
- SimpleTest.finish();
- });
-
- </script>
-</head>
-<body>
-<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1066432">Mozilla Bug 1066432</a>
-<p id="display"></p>
-<div id="content" style="display: none">
-
-</div>
-<pre id="test">
-</pre>
-</body>
-</html>
diff --git a/dom/bindings/test/test_sequence_wrapping.html b/dom/bindings/test/test_sequence_wrapping.html
deleted file mode 100644
index 7132e56019..0000000000
--- a/dom/bindings/test/test_sequence_wrapping.html
+++ /dev/null
@@ -1,59 +0,0 @@
-<!DOCTYPE HTML>
-<html>
-<!--
-https://bugzilla.mozilla.org/show_bug.cgi?id=775852
--->
-<head>
- <meta charset="utf-8">
- <title>Test for Bug 775852</title>
- <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
- <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
-</head>
-<body>
-<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=775852">Mozilla Bug 775852</a>
-<p id="display"></p>
-<div id="content" style="display: none">
- <canvas width="1" height="1" id="c"></canvas>
-</div>
-<pre id="test">
-<script type="application/javascript">
-
-/** Test for Bug 775852 **/
-function doTest() {
- var gl = $("c").getContext("experimental-webgl");
- if (!gl) {
- // No WebGL support on MacOS 10.5. Just skip this test
- todo(false, "WebGL not supported");
- return;
- }
- var setterCalled = false;
-
- extLength = gl.getSupportedExtensions().length;
- ok(extLength > 0,
- "This test won't work right if we have no supported extensions");
-
- Object.defineProperty(Array.prototype, "0",
- {
- set: function(val) {
- setterCalled = true;
- }
- });
-
- // Test that our property got defined correctly
- var arr = []
- arr[0] = 5;
- is(setterCalled, true, "Setter should be called when setting prop on array");
-
- setterCalled = false;
-
- is(gl.getSupportedExtensions().length, extLength,
- "We should still have the same number of extensions");
-
- is(setterCalled, false,
- "Setter should not be called when getting supported extensions");
-}
-doTest();
-</script>
-</pre>
-</body>
-</html>
diff --git a/dom/bindings/test/test_setWithNamedGetterNoNamedSetter.html b/dom/bindings/test/test_setWithNamedGetterNoNamedSetter.html
deleted file mode 100644
index 52f56151d4..0000000000
--- a/dom/bindings/test/test_setWithNamedGetterNoNamedSetter.html
+++ /dev/null
@@ -1,40 +0,0 @@
-<!DOCTYPE HTML>
-<html>
-<!--
-https://bugzilla.mozilla.org/show_bug.cgi?id=1043690
--->
-<head>
- <meta charset="utf-8">
- <title>Test for Bug 1043690</title>
- <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
- <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
-</head>
-<body>
-<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1043690">Mozilla Bug 1043690</a>
-<p id="display"></p>
-<div id="content" style="display: none">
-<form>
- <input name="action">
-</form>
-</div>
- <script type="application/javascript">
-
- /** Test for Bug 1043690 **/
- var f = document.querySelector("form");
- var i = document.querySelector("input");
- is(f.getAttribute("action"), null, "Should have no action attribute");
- is(f.action, i, "form.action should be the input");
- f.action = "http://example.org";
- is(f.getAttribute("action"), "http://example.org",
- "Should have an action attribute now");
- is(f.action, i, "form.action should still be the input");
- i.remove();
- is(f.action, "http://example.org/",
- "form.action should no longer be shadowed");
-
-
- </script>
-<pre id="test">
-</pre>
-</body>
-</html>
diff --git a/dom/bindings/test/test_stringBindings.html b/dom/bindings/test/test_stringBindings.html
deleted file mode 100644
index 1895b0342d..0000000000
--- a/dom/bindings/test/test_stringBindings.html
+++ /dev/null
@@ -1,59 +0,0 @@
-<!DOCTYPE HTML>
-<html>
-<!--
-https://bugzilla.mozilla.org/show_bug.cgi?id=1334537
--->
-<head>
- <meta charset="utf-8">
- <title>Test for Bug 1334537</title>
- <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
- <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
- <script type="application/javascript">
-
- /** Test for Bug 1334537 **/
- SimpleTest.waitForExplicitFinish();
-
- function go() {
- // Need a new global that will pick up our pref.
- var ifr = document.createElement("iframe");
- document.body.appendChild(ifr);
-
- var t = new ifr.contentWindow.TestFunctions();
- var testString = "abcdefghijklmnopqrstuvwxyz";
- const substringLength = 10;
- var shortTestString = testString.substring(0, substringLength);
-
- t.setStringData(testString);
- // Note: we want to do all our gets before we start running code we don't
- // control inside the test harness, if we really want to exercise the string
- // cache in controlled ways.
-
- var asShortDOMString = t.getStringDataAsDOMString(substringLength);
- var asFullDOMString = t.getStringDataAsDOMString();
- var asShortAString = t.getStringDataAsAString(substringLength);
- var asAString = t.getStringDataAsAString();
-
- is(asShortAString, shortTestString, "Short DOMString should be short");
- is(asFullDOMString, testString, "Full DOMString should be test string");
- is(asShortAString, shortTestString, "Short AString should be short");
- is(asAString, testString, "Full AString should be test string");
-
- SimpleTest.finish();
- }
-
- addLoadEvent(function() {
- SpecialPowers.pushPrefEnv({set: [['dom.expose_test_interfaces', true]]},
- go);
- });
- </script>
-</head>
-<body>
-<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1334537">Mozilla Bug 1334537</a>
-<p id="display"></p>
-<div id="content" style="display: none">
-
-</div>
-<pre id="test">
-</pre>
-</body>
-</html>
diff --git a/dom/bindings/test/test_throwing_method_noDCE.html b/dom/bindings/test/test_throwing_method_noDCE.html
deleted file mode 100644
index e952819a8b..0000000000
--- a/dom/bindings/test/test_throwing_method_noDCE.html
+++ /dev/null
@@ -1,27 +0,0 @@
-<!DOCTYPE html>
-<meta charset=utf-8>
-<title>Test that we don't DCE functions that can throw</title>
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<div id="log"></div>
-<script>
-test(function() {
- function test(root) {
- var threw = false;
- try {
- root.querySelectorAll("");
- } catch(e){ threw = true; };
- // Hot loop to make sure the JIT heuristics ion-compile this function even
- // though it's throwing exceptions (which would normally make us back off
- // of ion compilation).
- for (var i=0; i<1500; i++) {}
- return threw;
- }
-
- var threw = false;
- var el = document.createElement("div");
- for (var i=0; i<200; i++)
- threw = test(el);
- assert_true(threw);
-}, "Shouldn't optimize away throwing functions");
-</script>
diff --git a/dom/bindings/test/test_traceProtos.html b/dom/bindings/test/test_traceProtos.html
deleted file mode 100644
index 17a5cb96d4..0000000000
--- a/dom/bindings/test/test_traceProtos.html
+++ /dev/null
@@ -1,37 +0,0 @@
-<!DOCTYPE HTML>
-<html>
-<!--
-https://bugzilla.mozilla.org/show_bug.cgi?id=744772
--->
-<head>
- <meta charset="utf-8">
- <title>Test for Bug 744772</title>
- <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
- <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
-</head>
-<body>
-<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=744772">Mozilla Bug 744772</a>
-<p id="display"></p>
-<div id="content" style="display: none">
-
-</div>
-<pre id="test">
-<script type="application/javascript">
-
-/** Test for Bug 744772 **/
-
-SimpleTest.waitForExplicitFinish();
-
-function callback() {
- new XMLHttpRequest().upload;
- ok(true, "Accessing unreferenced DOM interface objects shouldn't crash");
- SimpleTest.finish();
-}
-
-delete window.XMLHttpRequestUpload;
-SpecialPowers.exactGC(callback);
-
-</script>
-</pre>
-</body>
-</html>
diff --git a/dom/bindings/test/test_treat_non_object_as_null.html b/dom/bindings/test/test_treat_non_object_as_null.html
deleted file mode 100644
index fbb6ceb66b..0000000000
--- a/dom/bindings/test/test_treat_non_object_as_null.html
+++ /dev/null
@@ -1,39 +0,0 @@
-<!DOCTYPE HTML>
-<html>
-<!--
-https://bugzilla.mozilla.org/show_bug.cgi?id=952365
--->
-<head>
- <meta charset="utf-8">
- <title>Test for Bug 952365</title>
- <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
- <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
- <script type="application/javascript">
-
- /** Test for Bug 952365 **/
-
- var onvolumechange;
- var x = {};
-
- (function() {
- onvolumechange = x;
- is(onvolumechange, x,
- "Should preserve an object value when assigning to event handler");
- // Test that we don't try to actually call the non-callable object
- window.dispatchEvent(new Event("volumechange"));
- onvolumechange = 5;
- is(onvolumechange, null,
- "Non-object values should become null when assigning to event handler");
- })();
- </script>
-</head>
-<body>
-<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=952365">Mozilla Bug 952365</a>
-<p id="display"></p>
-<div id="content" style="display: none">
-
-</div>
-<pre id="test">
-</pre>
-</body>
-</html>
diff --git a/dom/bindings/test/test_unforgeablesonexpando.html b/dom/bindings/test/test_unforgeablesonexpando.html
deleted file mode 100644
index 419e6ac7d5..0000000000
--- a/dom/bindings/test/test_unforgeablesonexpando.html
+++ /dev/null
@@ -1,18 +0,0 @@
-<!DOCTYPE html>
-<meta charset=utf-8>
-<title>Test for making sure named getters don't override the unforgeable location on HTMLDocument</title>
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<div id="log"></div>
-<img name="location">
-<script>
-test(function() {
- assert_equals(document.location, window.location,
- 'The <img name="location"> should not override the location getter');
-}, "document.location is the right thing");
-test(function() {
- var doc = new DOMParser().parseFromString("<img name='location'>", "text/html");
- assert_equals(doc.location, null,
- 'The <img name="location"> should not override the location getter on a data document');
-}, "document.location is the right thing on non-rendered document");
-</script>
diff --git a/dom/bindings/test/test_usvstring.html b/dom/bindings/test/test_usvstring.html
deleted file mode 100644
index cbb1e7971d..0000000000
--- a/dom/bindings/test/test_usvstring.html
+++ /dev/null
@@ -1,41 +0,0 @@
-<!-- Any copyright is dedicated to the Public Domain.
- - http://creativecommons.org/publicdomain/zero/1.0/ -->
-<!DOCTYPE HTML>
-<html>
-<head>
- <title>Test USVString</title>
- <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
- <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
-</head>
-<body>
-<script class="testbody" type="application/javascript">
-SimpleTest.waitForExplicitFinish();
-SpecialPowers.pushPrefEnv({set: [['dom.expose_test_interfaces', true]]}, function() {
- var testInterfaceJS = new TestInterfaceJS();
- ok(testInterfaceJS, "got a TestInterfaceJS object");
- // For expected values, see algorithm definition here:
- // http://heycam.github.io/webidl/#dfn-obtain-unicode
- var testList = [
- { string: "foo",
- expected: "foo" },
- { string: "This is U+2070E: \ud841\udf0e",
- expected: "This is U+2070E: \ud841\udf0e" },
- { string: "Missing low surrogate: \ud841",
- expected: "Missing low surrogate: \ufffd" },
- { string: "Missing low surrogate with trailer: \ud841!!",
- expected: "Missing low surrogate with trailer: \ufffd!!" },
- { string: "Missing high surrogate: \udf0e",
- expected: "Missing high surrogate: \ufffd" },
- { string: "Missing high surrogate with trailer: \udf0e!!",
- expected: "Missing high surrogate with trailer: \ufffd!!" },
- { string: "U+2070E after malformed: \udf0e\ud841\udf0e",
- expected: "U+2070E after malformed: \ufffd\ud841\udf0e" }
- ];
- testList.forEach(function(test) {
- is(testInterfaceJS.convertSVS(test.string), test.expected, "Convert '" + test.string + "'");
- });
- SimpleTest.finish();
-});
-</script>
-</body>
-</html>
diff --git a/dom/bindings/test/test_worker_UnwrapArg.html b/dom/bindings/test/test_worker_UnwrapArg.html
deleted file mode 100644
index 1331a83f41..0000000000
--- a/dom/bindings/test/test_worker_UnwrapArg.html
+++ /dev/null
@@ -1,58 +0,0 @@
-<!DOCTYPE HTML>
-<html>
-<!--
-https://bugzilla.mozilla.org/show_bug.cgi?id=1127206
--->
-<head>
- <meta charset="utf-8">
- <title>Test for Bug 1127206</title>
- <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
- <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
- <script type="application/javascript">
-
- /** Test for Bug 1127206 **/
- SimpleTest.waitForExplicitFinish();
- var blob = new Blob([
- `try { new File({}); }
- catch (e) {
- postMessage("throwing on random object");
- }
- try { new File(new Blob(["abc"])); }
- catch (e) {
- postMessage("throwing on Blob");
- }
- try { new File("abc"); }
- catch (e) {
- postMessage("throwing on string");
- }
- postMessage('finishTest')`]);
- var url = URL.createObjectURL(blob);
- var w = new Worker(url);
- var expectedResults = [
- "throwing on random object",
- "throwing on Blob",
- "throwing on string",
- ];
- var curIndex = 0;
- w.onmessage = function(e) {
- if (curIndex == expectedResults.length) {
- is(e.data, "finishTest", "What message is this?");
- SimpleTest.finish();
- } else {
- is(e.data, expectedResults[curIndex],
- "Message " + (curIndex+1) + " should be correct");
- ++curIndex;
- }
- }
- </script>
-</head>
-<body>
-<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1127206">Mozilla Bug 1127206</a>
-<p id="display"></p>
-<div id="content" style="display: none">
-
-</div>
-<pre id="test">
-</pre>
-</body>
-</html>
diff --git a/dom/media/gtest/moz.build b/dom/media/gtest/moz.build
index ae059962c8..a7ea738073 100644
--- a/dom/media/gtest/moz.build
+++ b/dom/media/gtest/moz.build
@@ -28,11 +28,6 @@ UNIFIED_SOURCES += [
'TestWebMBuffered.cpp',
]
-if CONFIG['MOZ_EME']:
- UNIFIED_SOURCES += [
- 'TestEME.cpp',
- ]
-
if CONFIG['MOZ_WEBM_ENCODER']:
UNIFIED_SOURCES += [
'TestVideoTrackEncoder.cpp',
diff --git a/dom/media/webaudio/gtest/TestAudioEventTimeline.cpp b/dom/media/webaudio/gtest/TestAudioEventTimeline.cpp
index cc731d3e2b..661b6cbd26 100644
--- a/dom/media/webaudio/gtest/TestAudioEventTimeline.cpp
+++ b/dom/media/webaudio/gtest/TestAudioEventTimeline.cpp
@@ -9,17 +9,6 @@
#include <limits>
#include "gtest/gtest.h"
-// Mock the MediaStream class
-namespace mozilla {
-class MediaStream
-{
- NS_INLINE_DECL_THREADSAFE_REFCOUNTING(MediaStream)
-private:
- ~MediaStream() {
- };
-};
-}
-
using namespace mozilla;
using namespace mozilla::dom;
using std::numeric_limits;
diff --git a/dom/plugins/test/mochitest/mochitest.ini b/dom/plugins/test/mochitest/mochitest.ini
index 0e8587f34d..64aefcd12a 100644
--- a/dom/plugins/test/mochitest/mochitest.ini
+++ b/dom/plugins/test/mochitest/mochitest.ini
@@ -23,7 +23,6 @@ support-files =
pluginstream.js
post.sjs
plugin-utils.js
- !/toolkit/components/passwordmgr/test/authenticate.sjs
[test_bug406541.html]
[test_bug532208.html]
diff --git a/dom/tests/mochitest/webcomponents/mochitest.ini b/dom/tests/mochitest/webcomponents/mochitest.ini
index 84322d21d0..428cc0e73f 100644
--- a/dom/tests/mochitest/webcomponents/mochitest.ini
+++ b/dom/tests/mochitest/webcomponents/mochitest.ini
@@ -22,19 +22,14 @@ skip-if = true || stylo # disabled - See bug 1390396 and 1293844
[test_custom_element_when_defined.html]
[test_custom_element_uncatchable_exception.html]
skip-if = !debug # TestFunctions only applied in debug builds
-[test_custom_element_define.html]
-[test_custom_element_define_parser.html]
-[test_custom_element_template.html]
[test_detached_style.html]
[test_document_adoptnode.html]
[test_document_importnode.html]
[test_document_register.html]
[test_document_register_lifecycle.html]
skip-if = true # disabled - See bug 1390396
-[test_document_register_parser.html]
[test_document_register_stack.html]
skip-if = true # disabled - See bug 1390396
-[test_document_shared_registry.html]
[test_event_retarget.html]
[test_event_stopping.html]
[test_template.html]
diff --git a/image/moz.build b/image/moz.build
index 7e7e0fe700..9eed46d31e 100644
--- a/image/moz.build
+++ b/image/moz.build
@@ -5,8 +5,6 @@
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
DIRS += ['build', 'decoders', 'encoders']
-if CONFIG['ENABLE_TESTS']:
- DIRS += ['test/gtest']
with Files('**'):
BUG_COMPONENT = ('Core', 'ImageLib')
diff --git a/image/test/gtest/Common.cpp b/image/test/gtest/Common.cpp
deleted file mode 100644
index 5a24bbb145..0000000000
--- a/image/test/gtest/Common.cpp
+++ /dev/null
@@ -1,673 +0,0 @@
-/* -*- Mode: C++; 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/. */
-
-#include "Common.h"
-
-#include <cstdlib>
-
-#include "nsDirectoryServiceDefs.h"
-#include "nsIDirectoryService.h"
-#include "nsIFile.h"
-#include "nsIInputStream.h"
-#include "nsIProperties.h"
-#include "nsNetUtil.h"
-#include "mozilla/RefPtr.h"
-#include "nsStreamUtils.h"
-#include "nsString.h"
-
-namespace mozilla {
-namespace image {
-
-using namespace gfx;
-
-using std::abs;
-using std::vector;
-
-///////////////////////////////////////////////////////////////////////////////
-// General Helpers
-///////////////////////////////////////////////////////////////////////////////
-
-// These macros work like gtest's ASSERT_* macros, except that they can be used
-// in functions that return values.
-#define ASSERT_TRUE_OR_RETURN(e, rv) \
- EXPECT_TRUE(e); \
- if (!(e)) { \
- return rv; \
- }
-
-#define ASSERT_EQ_OR_RETURN(a, b, rv) \
- EXPECT_EQ(a, b); \
- if ((a) != (b)) { \
- return rv; \
- }
-
-#define ASSERT_GE_OR_RETURN(a, b, rv) \
- EXPECT_GE(a, b); \
- if (!((a) >= (b))) { \
- return rv; \
- }
-
-#define ASSERT_LE_OR_RETURN(a, b, rv) \
- EXPECT_LE(a, b); \
- if (!((a) <= (b))) { \
- return rv; \
- }
-
-#define ASSERT_LT_OR_RETURN(a, b, rv) \
- EXPECT_LT(a, b); \
- if (!((a) < (b))) { \
- return rv; \
- }
-
-already_AddRefed<nsIInputStream>
-LoadFile(const char* aRelativePath)
-{
- nsresult rv;
-
- nsCOMPtr<nsIProperties> dirService =
- do_GetService(NS_DIRECTORY_SERVICE_CONTRACTID);
- ASSERT_TRUE_OR_RETURN(dirService != nullptr, nullptr);
-
- // Retrieve the current working directory.
- nsCOMPtr<nsIFile> file;
- rv = dirService->Get(NS_OS_CURRENT_WORKING_DIR,
- NS_GET_IID(nsIFile), getter_AddRefs(file));
- ASSERT_TRUE_OR_RETURN(NS_SUCCEEDED(rv), nullptr);
-
- // Construct the final path by appending the working path to the current
- // working directory.
- file->AppendNative(nsDependentCString(aRelativePath));
-
- // Construct an input stream for the requested file.
- nsCOMPtr<nsIInputStream> inputStream;
- rv = NS_NewLocalFileInputStream(getter_AddRefs(inputStream), file);
- ASSERT_TRUE_OR_RETURN(NS_SUCCEEDED(rv), nullptr);
-
- // Ensure the resulting input stream is buffered.
- if (!NS_InputStreamIsBuffered(inputStream)) {
- nsCOMPtr<nsIInputStream> bufStream;
- rv = NS_NewBufferedInputStream(getter_AddRefs(bufStream),
- inputStream, 1024);
- ASSERT_TRUE_OR_RETURN(NS_SUCCEEDED(rv), nullptr);
- inputStream = bufStream;
- }
-
- return inputStream.forget();
-}
-
-bool
-IsSolidColor(SourceSurface* aSurface,
- BGRAColor aColor,
- uint8_t aFuzz /* = 0 */)
-{
- IntSize size = aSurface->GetSize();
- return RectIsSolidColor(aSurface, IntRect(0, 0, size.width, size.height),
- aColor, aFuzz);
-}
-
-bool
-IsSolidPalettedColor(Decoder* aDecoder, uint8_t aColor)
-{
- RawAccessFrameRef currentFrame = aDecoder->GetCurrentFrameRef();
- return PalettedRectIsSolidColor(aDecoder, currentFrame->GetRect(), aColor);
-}
-
-bool
-RowsAreSolidColor(SourceSurface* aSurface,
- int32_t aStartRow,
- int32_t aRowCount,
- BGRAColor aColor,
- uint8_t aFuzz /* = 0 */)
-{
- IntSize size = aSurface->GetSize();
- return RectIsSolidColor(aSurface, IntRect(0, aStartRow, size.width, aRowCount),
- aColor, aFuzz);
-}
-
-bool
-PalettedRowsAreSolidColor(Decoder* aDecoder,
- int32_t aStartRow,
- int32_t aRowCount,
- uint8_t aColor)
-{
- RawAccessFrameRef currentFrame = aDecoder->GetCurrentFrameRef();
- IntRect frameRect = currentFrame->GetRect();
- IntRect solidColorRect(frameRect.x, aStartRow, frameRect.width, aRowCount);
- return PalettedRectIsSolidColor(aDecoder, solidColorRect, aColor);
-}
-
-bool
-RectIsSolidColor(SourceSurface* aSurface,
- const IntRect& aRect,
- BGRAColor aColor,
- uint8_t aFuzz /* = 0 */)
-{
- IntSize surfaceSize = aSurface->GetSize();
- IntRect rect =
- aRect.Intersect(IntRect(0, 0, surfaceSize.width, surfaceSize.height));
-
- RefPtr<DataSourceSurface> dataSurface = aSurface->GetDataSurface();
- ASSERT_TRUE_OR_RETURN(dataSurface != nullptr, false);
-
- ASSERT_EQ_OR_RETURN(dataSurface->Stride(), surfaceSize.width * 4, false);
-
- DataSourceSurface::ScopedMap mapping(dataSurface,
- DataSourceSurface::MapType::READ);
- ASSERT_TRUE_OR_RETURN(mapping.IsMapped(), false);
-
- uint8_t* data = dataSurface->GetData();
- ASSERT_TRUE_OR_RETURN(data != nullptr, false);
-
- int32_t rowLength = dataSurface->Stride();
- for (int32_t row = rect.y; row < rect.YMost(); ++row) {
- for (int32_t col = rect.x; col < rect.XMost(); ++col) {
- int32_t i = row * rowLength + col * 4;
- if (aFuzz != 0) {
- ASSERT_LE_OR_RETURN(abs(aColor.mBlue - data[i + 0]), aFuzz, false);
- ASSERT_LE_OR_RETURN(abs(aColor.mGreen - data[i + 1]), aFuzz, false);
- ASSERT_LE_OR_RETURN(abs(aColor.mRed - data[i + 2]), aFuzz, false);
- ASSERT_LE_OR_RETURN(abs(aColor.mAlpha - data[i + 3]), aFuzz, false);
- } else {
- ASSERT_EQ_OR_RETURN(aColor.mBlue, data[i + 0], false);
- ASSERT_EQ_OR_RETURN(aColor.mGreen, data[i + 1], false);
- ASSERT_EQ_OR_RETURN(aColor.mRed, data[i + 2], false);
- ASSERT_EQ_OR_RETURN(aColor.mAlpha, data[i + 3], false);
- }
- }
- }
-
- return true;
-}
-
-bool
-PalettedRectIsSolidColor(Decoder* aDecoder, const IntRect& aRect, uint8_t aColor)
-{
- RawAccessFrameRef currentFrame = aDecoder->GetCurrentFrameRef();
- uint8_t* imageData;
- uint32_t imageLength;
- currentFrame->GetImageData(&imageData, &imageLength);
- ASSERT_TRUE_OR_RETURN(imageData, false);
-
- // Clamp to the frame rect. If any pixels outside the frame rect are included,
- // we immediately fail, because such pixels don't have any "color" in the
- // sense this function measures - they're transparent, and that doesn't
- // necessarily correspond to any color palette index at all.
- IntRect frameRect = currentFrame->GetRect();
- ASSERT_EQ_OR_RETURN(imageLength, uint32_t(frameRect.Area()), false);
- IntRect rect = aRect.Intersect(frameRect);
- ASSERT_EQ_OR_RETURN(rect.Area(), aRect.Area(), false);
-
- // Translate |rect| by |frameRect.TopLeft()| to reflect the fact that the
- // frame rect's offset doesn't actually mean anything in terms of the
- // in-memory representation of the surface. The image data starts at the upper
- // left corner of the frame rect, in other words.
- rect -= frameRect.TopLeft();
-
- // Walk through the image data and make sure that the entire rect has the
- // palette index |aColor|.
- int32_t rowLength = frameRect.width;
- for (int32_t row = rect.y; row < rect.YMost(); ++row) {
- for (int32_t col = rect.x; col < rect.XMost(); ++col) {
- int32_t i = row * rowLength + col;
- ASSERT_EQ_OR_RETURN(aColor, imageData[i], false);
- }
- }
-
- return true;
-}
-
-bool
-RowHasPixels(SourceSurface* aSurface,
- int32_t aRow,
- const vector<BGRAColor>& aPixels)
-{
- ASSERT_GE_OR_RETURN(aRow, 0, false);
-
- IntSize surfaceSize = aSurface->GetSize();
- ASSERT_EQ_OR_RETURN(aPixels.size(), size_t(surfaceSize.width), false);
- ASSERT_LT_OR_RETURN(aRow, surfaceSize.height, false);
-
- RefPtr<DataSourceSurface> dataSurface = aSurface->GetDataSurface();
- ASSERT_TRUE_OR_RETURN(dataSurface, false);
-
- ASSERT_EQ_OR_RETURN(dataSurface->Stride(), surfaceSize.width * 4, false);
-
- DataSourceSurface::ScopedMap mapping(dataSurface,
- DataSourceSurface::MapType::READ);
- ASSERT_TRUE_OR_RETURN(mapping.IsMapped(), false);
-
- uint8_t* data = dataSurface->GetData();
- ASSERT_TRUE_OR_RETURN(data != nullptr, false);
-
- int32_t rowLength = dataSurface->Stride();
- for (int32_t col = 0; col < surfaceSize.width; ++col) {
- int32_t i = aRow * rowLength + col * 4;
- ASSERT_EQ_OR_RETURN(aPixels[col].mBlue, data[i + 0], false);
- ASSERT_EQ_OR_RETURN(aPixels[col].mGreen, data[i + 1], false);
- ASSERT_EQ_OR_RETURN(aPixels[col].mRed, data[i + 2], false);
- ASSERT_EQ_OR_RETURN(aPixels[col].mAlpha, data[i + 3], false);
- }
-
- return true;
-}
-
-
-///////////////////////////////////////////////////////////////////////////////
-// SurfacePipe Helpers
-///////////////////////////////////////////////////////////////////////////////
-
-already_AddRefed<Decoder>
-CreateTrivialDecoder()
-{
- gfxPrefs::GetSingleton();
- DecoderType decoderType = DecoderFactory::GetDecoderType("image/gif");
- NotNull<RefPtr<SourceBuffer>> sourceBuffer = WrapNotNull(new SourceBuffer());
- RefPtr<Decoder> decoder =
- DecoderFactory::CreateAnonymousDecoder(decoderType, sourceBuffer, Nothing(),
- DefaultSurfaceFlags());
- return decoder.forget();
-}
-
-void
-AssertCorrectPipelineFinalState(SurfaceFilter* aFilter,
- const gfx::IntRect& aInputSpaceRect,
- const gfx::IntRect& aOutputSpaceRect)
-{
- EXPECT_TRUE(aFilter->IsSurfaceFinished());
- Maybe<SurfaceInvalidRect> invalidRect = aFilter->TakeInvalidRect();
- EXPECT_TRUE(invalidRect.isSome());
- EXPECT_EQ(aInputSpaceRect, invalidRect->mInputSpaceRect);
- EXPECT_EQ(aOutputSpaceRect, invalidRect->mOutputSpaceRect);
-}
-
-void
-CheckGeneratedImage(Decoder* aDecoder,
- const IntRect& aRect,
- uint8_t aFuzz /* = 0 */)
-{
- RawAccessFrameRef currentFrame = aDecoder->GetCurrentFrameRef();
- RefPtr<SourceSurface> surface = currentFrame->GetSourceSurface();
- const IntSize surfaceSize = surface->GetSize();
-
- // This diagram shows how the surface is divided into regions that the code
- // below tests for the correct content. The output rect is the bounds of the
- // region labeled 'C'.
- //
- // +---------------------------+
- // | A |
- // +---------+--------+--------+
- // | B | C | D |
- // +---------+--------+--------+
- // | E |
- // +---------------------------+
-
- // Check that the output rect itself is green. (Region 'C'.)
- EXPECT_TRUE(RectIsSolidColor(surface, aRect, BGRAColor::Green(), aFuzz));
-
- // Check that the area above the output rect is transparent. (Region 'A'.)
- EXPECT_TRUE(RectIsSolidColor(surface,
- IntRect(0, 0, surfaceSize.width, aRect.y),
- BGRAColor::Transparent(), aFuzz));
-
- // Check that the area to the left of the output rect is transparent. (Region 'B'.)
- EXPECT_TRUE(RectIsSolidColor(surface,
- IntRect(0, aRect.y, aRect.x, aRect.YMost()),
- BGRAColor::Transparent(), aFuzz));
-
- // Check that the area to the right of the output rect is transparent. (Region 'D'.)
- const int32_t widthOnRight = surfaceSize.width - aRect.XMost();
- EXPECT_TRUE(RectIsSolidColor(surface,
- IntRect(aRect.XMost(), aRect.y, widthOnRight, aRect.YMost()),
- BGRAColor::Transparent(), aFuzz));
-
- // Check that the area below the output rect is transparent. (Region 'E'.)
- const int32_t heightBelow = surfaceSize.height - aRect.YMost();
- EXPECT_TRUE(RectIsSolidColor(surface,
- IntRect(0, aRect.YMost(), surfaceSize.width, heightBelow),
- BGRAColor::Transparent(), aFuzz));
-}
-
-void
-CheckGeneratedPalettedImage(Decoder* aDecoder, const IntRect& aRect)
-{
- RawAccessFrameRef currentFrame = aDecoder->GetCurrentFrameRef();
- IntSize imageSize = currentFrame->GetImageSize();
-
- // This diagram shows how the surface is divided into regions that the code
- // below tests for the correct content. The output rect is the bounds of the
- // region labeled 'C'.
- //
- // +---------------------------+
- // | A |
- // +---------+--------+--------+
- // | B | C | D |
- // +---------+--------+--------+
- // | E |
- // +---------------------------+
-
- // Check that the output rect itself is all 255's. (Region 'C'.)
- EXPECT_TRUE(PalettedRectIsSolidColor(aDecoder, aRect, 255));
-
- // Check that the area above the output rect is all 0's. (Region 'A'.)
- EXPECT_TRUE(PalettedRectIsSolidColor(aDecoder,
- IntRect(0, 0, imageSize.width, aRect.y),
- 0));
-
- // Check that the area to the left of the output rect is all 0's. (Region 'B'.)
- EXPECT_TRUE(PalettedRectIsSolidColor(aDecoder,
- IntRect(0, aRect.y, aRect.x, aRect.YMost()),
- 0));
-
- // Check that the area to the right of the output rect is all 0's. (Region 'D'.)
- const int32_t widthOnRight = imageSize.width - aRect.XMost();
- EXPECT_TRUE(PalettedRectIsSolidColor(aDecoder,
- IntRect(aRect.XMost(), aRect.y, widthOnRight, aRect.YMost()),
- 0));
-
- // Check that the area below the output rect is transparent. (Region 'E'.)
- const int32_t heightBelow = imageSize.height - aRect.YMost();
- EXPECT_TRUE(PalettedRectIsSolidColor(aDecoder,
- IntRect(0, aRect.YMost(), imageSize.width, heightBelow),
- 0));
-}
-
-void
-CheckWritePixels(Decoder* aDecoder,
- SurfaceFilter* aFilter,
- Maybe<IntRect> aOutputRect /* = Nothing() */,
- Maybe<IntRect> aInputRect /* = Nothing() */,
- Maybe<IntRect> aInputWriteRect /* = Nothing() */,
- Maybe<IntRect> aOutputWriteRect /* = Nothing() */,
- uint8_t aFuzz /* = 0 */)
-{
- IntRect outputRect = aOutputRect.valueOr(IntRect(0, 0, 100, 100));
- IntRect inputRect = aInputRect.valueOr(IntRect(0, 0, 100, 100));
- IntRect inputWriteRect = aInputWriteRect.valueOr(inputRect);
- IntRect outputWriteRect = aOutputWriteRect.valueOr(outputRect);
-
- // Fill the image.
- int32_t count = 0;
- auto result = aFilter->WritePixels<uint32_t>([&] {
- ++count;
- return AsVariant(BGRAColor::Green().AsPixel());
- });
- EXPECT_EQ(WriteState::FINISHED, result);
- EXPECT_EQ(inputWriteRect.width * inputWriteRect.height, count);
-
- AssertCorrectPipelineFinalState(aFilter, inputRect, outputRect);
-
- // Attempt to write more data and make sure nothing changes.
- const int32_t oldCount = count;
- result = aFilter->WritePixels<uint32_t>([&] {
- ++count;
- return AsVariant(BGRAColor::Green().AsPixel());
- });
- EXPECT_EQ(oldCount, count);
- EXPECT_EQ(WriteState::FINISHED, result);
- EXPECT_TRUE(aFilter->IsSurfaceFinished());
- Maybe<SurfaceInvalidRect> invalidRect = aFilter->TakeInvalidRect();
- EXPECT_TRUE(invalidRect.isNothing());
-
- // Attempt to advance to the next row and make sure nothing changes.
- aFilter->AdvanceRow();
- EXPECT_TRUE(aFilter->IsSurfaceFinished());
- invalidRect = aFilter->TakeInvalidRect();
- EXPECT_TRUE(invalidRect.isNothing());
-
- // Check that the generated image is correct.
- CheckGeneratedImage(aDecoder, outputWriteRect, aFuzz);
-}
-
-void
-CheckPalettedWritePixels(Decoder* aDecoder,
- SurfaceFilter* aFilter,
- Maybe<IntRect> aOutputRect /* = Nothing() */,
- Maybe<IntRect> aInputRect /* = Nothing() */,
- Maybe<IntRect> aInputWriteRect /* = Nothing() */,
- Maybe<IntRect> aOutputWriteRect /* = Nothing() */,
- uint8_t aFuzz /* = 0 */)
-{
- IntRect outputRect = aOutputRect.valueOr(IntRect(0, 0, 100, 100));
- IntRect inputRect = aInputRect.valueOr(IntRect(0, 0, 100, 100));
- IntRect inputWriteRect = aInputWriteRect.valueOr(inputRect);
- IntRect outputWriteRect = aOutputWriteRect.valueOr(outputRect);
-
- // Fill the image.
- int32_t count = 0;
- auto result = aFilter->WritePixels<uint8_t>([&] {
- ++count;
- return AsVariant(uint8_t(255));
- });
- EXPECT_EQ(WriteState::FINISHED, result);
- EXPECT_EQ(inputWriteRect.width * inputWriteRect.height, count);
-
- AssertCorrectPipelineFinalState(aFilter, inputRect, outputRect);
-
- // Attempt to write more data and make sure nothing changes.
- const int32_t oldCount = count;
- result = aFilter->WritePixels<uint8_t>([&] {
- ++count;
- return AsVariant(uint8_t(255));
- });
- EXPECT_EQ(oldCount, count);
- EXPECT_EQ(WriteState::FINISHED, result);
- EXPECT_TRUE(aFilter->IsSurfaceFinished());
- Maybe<SurfaceInvalidRect> invalidRect = aFilter->TakeInvalidRect();
- EXPECT_TRUE(invalidRect.isNothing());
-
- // Attempt to advance to the next row and make sure nothing changes.
- aFilter->AdvanceRow();
- EXPECT_TRUE(aFilter->IsSurfaceFinished());
- invalidRect = aFilter->TakeInvalidRect();
- EXPECT_TRUE(invalidRect.isNothing());
-
- // Check that the generated image is correct.
- RawAccessFrameRef currentFrame = aDecoder->GetCurrentFrameRef();
- uint8_t* imageData;
- uint32_t imageLength;
- currentFrame->GetImageData(&imageData, &imageLength);
- ASSERT_TRUE(imageData != nullptr);
- ASSERT_EQ(outputWriteRect.width * outputWriteRect.height, int32_t(imageLength));
- for (uint32_t i = 0; i < imageLength; ++i) {
- ASSERT_EQ(uint8_t(255), imageData[i]);
- }
-}
-
-
-///////////////////////////////////////////////////////////////////////////////
-// Test Data
-///////////////////////////////////////////////////////////////////////////////
-
-ImageTestCase GreenPNGTestCase()
-{
- return ImageTestCase("green.png", "image/png", IntSize(100, 100));
-}
-
-ImageTestCase GreenGIFTestCase()
-{
- return ImageTestCase("green.gif", "image/gif", IntSize(100, 100));
-}
-
-ImageTestCase GreenJPGTestCase()
-{
- return ImageTestCase("green.jpg", "image/jpeg", IntSize(100, 100),
- TEST_CASE_IS_FUZZY);
-}
-
-ImageTestCase GreenBMPTestCase()
-{
- return ImageTestCase("green.bmp", "image/bmp", IntSize(100, 100));
-}
-
-ImageTestCase GreenICOTestCase()
-{
- // This ICO contains a 32-bit BMP, and we use a BMP's alpha data by default
- // when the BMP is embedded in an ICO, so it's transparent.
- return ImageTestCase("green.ico", "image/x-icon", IntSize(100, 100),
- TEST_CASE_IS_TRANSPARENT);
-}
-
-ImageTestCase GreenIconTestCase()
-{
- return ImageTestCase("green.icon", "image/icon", IntSize(100, 100),
- TEST_CASE_IS_TRANSPARENT);
-}
-
-ImageTestCase GreenFirstFrameAnimatedGIFTestCase()
-{
- return ImageTestCase("first-frame-green.gif", "image/gif", IntSize(100, 100),
- TEST_CASE_IS_ANIMATED);
-}
-
-ImageTestCase GreenFirstFrameAnimatedPNGTestCase()
-{
- return ImageTestCase("first-frame-green.png", "image/png", IntSize(100, 100),
- TEST_CASE_IS_TRANSPARENT | TEST_CASE_IS_ANIMATED);
-}
-
-ImageTestCase CorruptTestCase()
-{
- return ImageTestCase("corrupt.jpg", "image/jpeg", IntSize(100, 100),
- TEST_CASE_HAS_ERROR);
-}
-
-ImageTestCase CorruptBMPWithTruncatedHeader()
-{
- // This BMP has a header which is truncated right between the BIH and the
- // bitfields, which is a particularly error-prone place w.r.t. the BMP decoder
- // state machine.
- return ImageTestCase("invalid-truncated-metadata.bmp", "image/bmp",
- IntSize(100, 100), TEST_CASE_HAS_ERROR);
-}
-
-ImageTestCase CorruptICOWithBadBMPWidthTestCase()
-{
- // This ICO contains a BMP icon which has a width that doesn't match the size
- // listed in the corresponding ICO directory entry.
- return ImageTestCase("corrupt-with-bad-bmp-width.ico", "image/x-icon",
- IntSize(100, 100), TEST_CASE_HAS_ERROR);
-}
-
-ImageTestCase CorruptICOWithBadBMPHeightTestCase()
-{
- // This ICO contains a BMP icon which has a height that doesn't match the size
- // listed in the corresponding ICO directory entry.
- return ImageTestCase("corrupt-with-bad-bmp-height.ico", "image/x-icon",
- IntSize(100, 100), TEST_CASE_HAS_ERROR);
-}
-
-ImageTestCase TransparentPNGTestCase()
-{
- return ImageTestCase("transparent.png", "image/png", IntSize(32, 32),
- TEST_CASE_IS_TRANSPARENT);
-}
-
-ImageTestCase TransparentGIFTestCase()
-{
- return ImageTestCase("transparent.gif", "image/gif", IntSize(16, 16),
- TEST_CASE_IS_TRANSPARENT);
-}
-
-ImageTestCase FirstFramePaddingGIFTestCase()
-{
- return ImageTestCase("transparent.gif", "image/gif", IntSize(16, 16),
- TEST_CASE_IS_TRANSPARENT);
-}
-
-ImageTestCase TransparentIfWithinICOBMPTestCase(TestCaseFlags aFlags)
-{
- // This is a BMP that is only transparent when decoded as if it is within an
- // ICO file. (Note: aFlags needs to be set to TEST_CASE_DEFAULT_FLAGS or
- // TEST_CASE_IS_TRANSPARENT accordingly.)
- return ImageTestCase("transparent-if-within-ico.bmp", "image/bmp",
- IntSize(32, 32), aFlags);
-}
-
-ImageTestCase RLE4BMPTestCase()
-{
- return ImageTestCase("rle4.bmp", "image/bmp", IntSize(320, 240),
- TEST_CASE_IS_TRANSPARENT);
-}
-
-ImageTestCase RLE8BMPTestCase()
-{
- return ImageTestCase("rle8.bmp", "image/bmp", IntSize(32, 32),
- TEST_CASE_IS_TRANSPARENT);
-}
-
-ImageTestCase NoFrameDelayGIFTestCase()
-{
- // This is an invalid (or at least, questionably valid) GIF that's animated
- // even though it specifies a frame delay of zero. It's animated, but it's not
- // marked TEST_CASE_IS_ANIMATED because the metadata decoder can't detect that
- // it's animated.
- return ImageTestCase("no-frame-delay.gif", "image/gif", IntSize(100, 100));
-}
-
-ImageTestCase ExtraImageSubBlocksAnimatedGIFTestCase()
-{
- // This is a corrupt GIF that has extra image sub blocks between the first and
- // second frame.
- return ImageTestCase("animated-with-extra-image-sub-blocks.gif", "image/gif",
- IntSize(100, 100));
-}
-
-ImageTestCase DownscaledPNGTestCase()
-{
- // This testcase (and all the other "downscaled") testcases) consists of 25
- // lines of green, followed by 25 lines of red, followed by 25 lines of green,
- // followed by 25 more lines of red. It's intended that tests downscale it
- // from 100x100 to 20x20, so we specify a 20x20 output size.
- return ImageTestCase("downscaled.png", "image/png", IntSize(100, 100),
- IntSize(20, 20));
-}
-
-ImageTestCase DownscaledGIFTestCase()
-{
- return ImageTestCase("downscaled.gif", "image/gif", IntSize(100, 100),
- IntSize(20, 20));
-}
-
-ImageTestCase DownscaledJPGTestCase()
-{
- return ImageTestCase("downscaled.jpg", "image/jpeg", IntSize(100, 100),
- IntSize(20, 20));
-}
-
-ImageTestCase DownscaledBMPTestCase()
-{
- return ImageTestCase("downscaled.bmp", "image/bmp", IntSize(100, 100),
- IntSize(20, 20));
-}
-
-ImageTestCase DownscaledICOTestCase()
-{
- return ImageTestCase("downscaled.ico", "image/x-icon", IntSize(100, 100),
- IntSize(20, 20), TEST_CASE_IS_TRANSPARENT);
-}
-
-ImageTestCase DownscaledIconTestCase()
-{
- return ImageTestCase("downscaled.icon", "image/icon", IntSize(100, 100),
- IntSize(20, 20), TEST_CASE_IS_TRANSPARENT);
-}
-
-ImageTestCase DownscaledTransparentICOWithANDMaskTestCase()
-{
- // This test case is an ICO with AND mask transparency. We want to ensure that
- // we can downscale it without crashing or triggering ASAN failures, but its
- // content isn't simple to verify, so for now we don't check the output.
- return ImageTestCase("transparent-ico-with-and-mask.ico", "image/x-icon",
- IntSize(32, 32), IntSize(20, 20),
- TEST_CASE_IS_TRANSPARENT | TEST_CASE_IGNORE_OUTPUT);
-}
-
-ImageTestCase TruncatedSmallGIFTestCase()
-{
- return ImageTestCase("green-1x1-truncated.gif", "image/gif", IntSize(1, 1));
-}
-
-} // namespace image
-} // namespace mozilla
diff --git a/image/test/gtest/Common.h b/image/test/gtest/Common.h
deleted file mode 100644
index 0c288cddcb..0000000000
--- a/image/test/gtest/Common.h
+++ /dev/null
@@ -1,419 +0,0 @@
-/* -*- Mode: C++; 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/. */
-
-#ifndef mozilla_image_test_gtest_Common_h
-#define mozilla_image_test_gtest_Common_h
-
-#include <vector>
-
-#include "gtest/gtest.h"
-
-#include "mozilla/Maybe.h"
-#include "mozilla/UniquePtr.h"
-#include "mozilla/gfx/2D.h"
-#include "Decoder.h"
-#include "gfxColor.h"
-#include "imgITools.h"
-#include "nsCOMPtr.h"
-#include "SurfacePipe.h"
-#include "SurfacePipeFactory.h"
-
-class nsIInputStream;
-
-namespace mozilla {
-namespace image {
-
-///////////////////////////////////////////////////////////////////////////////
-// Types
-///////////////////////////////////////////////////////////////////////////////
-
-enum TestCaseFlags
-{
- TEST_CASE_DEFAULT_FLAGS = 0,
- TEST_CASE_IS_FUZZY = 1 << 0,
- TEST_CASE_HAS_ERROR = 1 << 1,
- TEST_CASE_IS_TRANSPARENT = 1 << 2,
- TEST_CASE_IS_ANIMATED = 1 << 3,
- TEST_CASE_IGNORE_OUTPUT = 1 << 4,
-};
-
-struct ImageTestCase
-{
- ImageTestCase(const char* aPath,
- const char* aMimeType,
- gfx::IntSize aSize,
- uint32_t aFlags = TEST_CASE_DEFAULT_FLAGS)
- : mPath(aPath)
- , mMimeType(aMimeType)
- , mSize(aSize)
- , mOutputSize(aSize)
- , mFlags(aFlags)
- { }
-
- ImageTestCase(const char* aPath,
- const char* aMimeType,
- gfx::IntSize aSize,
- gfx::IntSize aOutputSize,
- uint32_t aFlags = TEST_CASE_DEFAULT_FLAGS)
- : mPath(aPath)
- , mMimeType(aMimeType)
- , mSize(aSize)
- , mOutputSize(aOutputSize)
- , mFlags(aFlags)
- { }
-
- const char* mPath;
- const char* mMimeType;
- gfx::IntSize mSize;
- gfx::IntSize mOutputSize;
- uint32_t mFlags;
-};
-
-struct BGRAColor
-{
- BGRAColor() : BGRAColor(0, 0, 0, 0) { }
-
- BGRAColor(uint8_t aBlue, uint8_t aGreen, uint8_t aRed, uint8_t aAlpha)
- : mBlue(aBlue)
- , mGreen(aGreen)
- , mRed(aRed)
- , mAlpha(aAlpha)
- { }
-
- static BGRAColor Green() { return BGRAColor(0x00, 0xFF, 0x00, 0xFF); }
- static BGRAColor Red() { return BGRAColor(0x00, 0x00, 0xFF, 0xFF); }
- static BGRAColor Blue() { return BGRAColor(0xFF, 0x00, 0x00, 0xFF); }
- static BGRAColor Transparent() { return BGRAColor(0x00, 0x00, 0x00, 0x00); }
-
- uint32_t AsPixel() const { return gfxPackedPixel(mAlpha, mRed, mGreen, mBlue); }
-
- uint8_t mBlue;
- uint8_t mGreen;
- uint8_t mRed;
- uint8_t mAlpha;
-};
-
-
-///////////////////////////////////////////////////////////////////////////////
-// General Helpers
-///////////////////////////////////////////////////////////////////////////////
-
-/**
- * A RAII class that ensure that ImageLib services are available. Any tests that
- * require ImageLib to be initialized (for example, any test that uses the
- * SurfaceCache; see image::EnsureModuleInitialized() for the full list) can
- * use this class to ensure that ImageLib services are available. Failure to do
- * so can result in strange, non-deterministic failures.
- */
-struct AutoInitializeImageLib
-{
- AutoInitializeImageLib()
- {
- // Ensure that ImageLib services are initialized.
- nsCOMPtr<imgITools> imgTools = do_CreateInstance("@mozilla.org/image/tools;1");
- EXPECT_TRUE(imgTools != nullptr);
- }
-};
-
-/// Loads a file from the current directory. @return an nsIInputStream for it.
-already_AddRefed<nsIInputStream> LoadFile(const char* aRelativePath);
-
-/**
- * @returns true if every pixel of @aSurface is @aColor.
- *
- * If @aFuzz is nonzero, a tolerance of @aFuzz is allowed in each color
- * component. This may be necessary for tests that involve JPEG images or
- * downscaling.
- */
-bool IsSolidColor(gfx::SourceSurface* aSurface,
- BGRAColor aColor,
- uint8_t aFuzz = 0);
-
-/**
- * @returns true if every pixel of @aDecoder's surface has the palette index
- * specified by @aColor.
- */
-bool IsSolidPalettedColor(Decoder* aDecoder, uint8_t aColor);
-
-/**
- * @returns true if every pixel in the range of rows specified by @aStartRow and
- * @aRowCount of @aSurface is @aColor.
- *
- * If @aFuzz is nonzero, a tolerance of @aFuzz is allowed in each color
- * component. This may be necessary for tests that involve JPEG images or
- * downscaling.
- */
-bool RowsAreSolidColor(gfx::SourceSurface* aSurface,
- int32_t aStartRow,
- int32_t aRowCount,
- BGRAColor aColor,
- uint8_t aFuzz = 0);
-
-/**
- * @returns true if every pixel in the range of rows specified by @aStartRow and
- * @aRowCount of @aDecoder's surface has the palette index specified by @aColor.
- */
-bool PalettedRowsAreSolidColor(Decoder* aDecoder,
- int32_t aStartRow,
- int32_t aRowCount,
- uint8_t aColor);
-
-/**
- * @returns true if every pixel in the rect specified by @aRect is @aColor.
- *
- * If @aFuzz is nonzero, a tolerance of @aFuzz is allowed in each color
- * component. This may be necessary for tests that involve JPEG images or
- * downscaling.
- */
-bool RectIsSolidColor(gfx::SourceSurface* aSurface,
- const gfx::IntRect& aRect,
- BGRAColor aColor,
- uint8_t aFuzz = 0);
-
-/**
- * @returns true if every pixel in the rect specified by @aRect has the palette
- * index specified by @aColor.
- */
-bool PalettedRectIsSolidColor(Decoder* aDecoder,
- const gfx::IntRect& aRect,
- uint8_t aColor);
-
-/**
- * @returns true if the pixels in @aRow of @aSurface match the pixels given in
- * @aPixels.
- */
-bool RowHasPixels(gfx::SourceSurface* aSurface,
- int32_t aRow,
- const std::vector<BGRAColor>& aPixels);
-
-// ExpectNoResume is an IResumable implementation for use by tests that expect
-// Resume() to never get called.
-class ExpectNoResume final : public IResumable
-{
-public:
- NS_INLINE_DECL_THREADSAFE_REFCOUNTING(ExpectNoResume, override)
-
- void Resume() override { FAIL() << "Resume() should not get called"; }
-
-private:
- ~ExpectNoResume() override { }
-};
-
-// CountResumes is an IResumable implementation for use by tests that expect
-// Resume() to get called a certain number of times.
-class CountResumes : public IResumable
-{
-public:
- NS_INLINE_DECL_THREADSAFE_REFCOUNTING(CountResumes, override)
-
- CountResumes() : mCount(0) { }
-
- void Resume() override { mCount++; }
- uint32_t Count() const { return mCount; }
-
-private:
- ~CountResumes() override { }
-
- uint32_t mCount;
-};
-
-
-///////////////////////////////////////////////////////////////////////////////
-// SurfacePipe Helpers
-///////////////////////////////////////////////////////////////////////////////
-
-/**
- * Creates a decoder with no data associated with, suitable for testing code
- * that requires a decoder to initialize or to allocate surfaces but doesn't
- * actually need the decoder to do any decoding.
- *
- * XXX(seth): We only need this because SurfaceSink and PalettedSurfaceSink
- * defer to the decoder for surface allocation. Once all decoders use
- * SurfacePipe we won't need to do that anymore and we can remove this function.
- */
-already_AddRefed<Decoder> CreateTrivialDecoder();
-
-/**
- * Creates a pipeline of SurfaceFilters from a list of Config structs and passes
- * it to the provided lambda @aFunc. Assertions that the pipeline is constructly
- * correctly and cleanup of any allocated surfaces is handled automatically.
- *
- * @param aDecoder The decoder to use for allocating surfaces.
- * @param aFunc The lambda function to pass the filter pipeline to.
- * @param aConfigs The configuration for the pipeline.
- */
-template <typename Func, typename... Configs>
-void WithFilterPipeline(Decoder* aDecoder, Func aFunc, const Configs&... aConfigs)
-{
- auto pipe = MakeUnique<typename detail::FilterPipeline<Configs...>::Type>();
- nsresult rv = pipe->Configure(aConfigs...);
- ASSERT_TRUE(NS_SUCCEEDED(rv));
-
- aFunc(aDecoder, pipe.get());
-
- RawAccessFrameRef currentFrame = aDecoder->GetCurrentFrameRef();
- if (currentFrame) {
- currentFrame->Finish();
- }
-}
-
-/**
- * Creates a pipeline of SurfaceFilters from a list of Config structs and
- * asserts that configuring it fails. Cleanup of any allocated surfaces is
- * handled automatically.
- *
- * @param aDecoder The decoder to use for allocating surfaces.
- * @param aConfigs The configuration for the pipeline.
- */
-template <typename... Configs>
-void AssertConfiguringPipelineFails(Decoder* aDecoder, const Configs&... aConfigs)
-{
- auto pipe = MakeUnique<typename detail::FilterPipeline<Configs...>::Type>();
- nsresult rv = pipe->Configure(aConfigs...);
-
- // Callers expect configuring the pipeline to fail.
- ASSERT_TRUE(NS_FAILED(rv));
-
- RawAccessFrameRef currentFrame = aDecoder->GetCurrentFrameRef();
- if (currentFrame) {
- currentFrame->Finish();
- }
-}
-
-/**
- * Asserts that the provided filter pipeline is in the correct final state,
- * which is to say, the entire surface has been written to (IsSurfaceFinished()
- * returns true) and the invalid rects are as expected.
- *
- * @param aFilter The filter pipeline to check.
- * @param aInputSpaceRect The expect invalid rect, in input space.
- * @param aoutputSpaceRect The expect invalid rect, in output space.
- */
-void AssertCorrectPipelineFinalState(SurfaceFilter* aFilter,
- const gfx::IntRect& aInputSpaceRect,
- const gfx::IntRect& aOutputSpaceRect);
-
-/**
- * Checks a generated image for correctness. Reports any unexpected deviation
- * from the expected image as GTest failures.
- *
- * @param aDecoder The decoder which contains the image. The decoder's current
- * frame will be checked.
- * @param aRect The region in the space of the output surface that the filter
- * pipeline will actually write to. It's expected that pixels in
- * this region are green, while pixels outside this region are
- * transparent.
- * @param aFuzz The amount of fuzz to use in pixel comparisons.
- */
-void CheckGeneratedImage(Decoder* aDecoder,
- const gfx::IntRect& aRect,
- uint8_t aFuzz = 0);
-
-/**
- * Checks a generated paletted image for correctness. Reports any unexpected
- * deviation from the expected image as GTest failures.
- *
- * @param aDecoder The decoder which contains the image. The decoder's current
- * frame will be checked.
- * @param aRect The region in the space of the output surface that the filter
- * pipeline will actually write to. It's expected that pixels in
- * this region have a palette index of 255, while pixels outside
- * this region have a palette index of 0.
- */
-void CheckGeneratedPalettedImage(Decoder* aDecoder, const gfx::IntRect& aRect);
-
-/**
- * Tests the result of calling WritePixels() using the provided SurfaceFilter
- * pipeline. The pipeline must be a normal (i.e., non-paletted) pipeline.
- *
- * The arguments are specified in the an order intended to minimize the number
- * of arguments that most test cases need to pass.
- *
- * @param aDecoder The decoder whose current frame will be written to.
- * @param aFilter The SurfaceFilter pipeline to use.
- * @param aOutputRect The region in the space of the output surface that will be
- * invalidated by the filter pipeline. Defaults to
- * (0, 0, 100, 100).
- * @param aInputRect The region in the space of the input image that will be
- * invalidated by the filter pipeline. Defaults to
- * (0, 0, 100, 100).
- * @param aInputWriteRect The region in the space of the input image that the
- * filter pipeline will allow writes to. Note the
- * difference from @aInputRect: @aInputRect is the actual
- * region invalidated, while @aInputWriteRect is the
- * region that is written to. These can differ in cases
- * where the input is not clipped to the size of the image.
- * Defaults to the entire input rect.
- * @param aOutputWriteRect The region in the space of the output surface that
- * the filter pipeline will actually write to. It's
- * expected that pixels in this region are green, while
- * pixels outside this region are transparent. Defaults
- * to the entire output rect.
- */
-void CheckWritePixels(Decoder* aDecoder,
- SurfaceFilter* aFilter,
- Maybe<gfx::IntRect> aOutputRect = Nothing(),
- Maybe<gfx::IntRect> aInputRect = Nothing(),
- Maybe<gfx::IntRect> aInputWriteRect = Nothing(),
- Maybe<gfx::IntRect> aOutputWriteRect = Nothing(),
- uint8_t aFuzz = 0);
-
-/**
- * Tests the result of calling WritePixels() using the provided SurfaceFilter
- * pipeline. The pipeline must be a paletted pipeline.
- * @see CheckWritePixels() for documentation of the arguments.
- */
-void CheckPalettedWritePixels(Decoder* aDecoder,
- SurfaceFilter* aFilter,
- Maybe<gfx::IntRect> aOutputRect = Nothing(),
- Maybe<gfx::IntRect> aInputRect = Nothing(),
- Maybe<gfx::IntRect> aInputWriteRect = Nothing(),
- Maybe<gfx::IntRect> aOutputWriteRect = Nothing(),
- uint8_t aFuzz = 0);
-
-
-///////////////////////////////////////////////////////////////////////////////
-// Test Data
-///////////////////////////////////////////////////////////////////////////////
-
-ImageTestCase GreenPNGTestCase();
-ImageTestCase GreenGIFTestCase();
-ImageTestCase GreenJPGTestCase();
-ImageTestCase GreenBMPTestCase();
-ImageTestCase GreenICOTestCase();
-ImageTestCase GreenIconTestCase();
-
-ImageTestCase GreenFirstFrameAnimatedGIFTestCase();
-ImageTestCase GreenFirstFrameAnimatedPNGTestCase();
-
-ImageTestCase CorruptTestCase();
-ImageTestCase CorruptBMPWithTruncatedHeader();
-ImageTestCase CorruptICOWithBadBMPWidthTestCase();
-ImageTestCase CorruptICOWithBadBMPHeightTestCase();
-
-ImageTestCase TransparentPNGTestCase();
-ImageTestCase TransparentGIFTestCase();
-ImageTestCase FirstFramePaddingGIFTestCase();
-ImageTestCase NoFrameDelayGIFTestCase();
-ImageTestCase ExtraImageSubBlocksAnimatedGIFTestCase();
-
-ImageTestCase TransparentBMPWhenBMPAlphaEnabledTestCase();
-ImageTestCase RLE4BMPTestCase();
-ImageTestCase RLE8BMPTestCase();
-
-ImageTestCase DownscaledPNGTestCase();
-ImageTestCase DownscaledGIFTestCase();
-ImageTestCase DownscaledJPGTestCase();
-ImageTestCase DownscaledBMPTestCase();
-ImageTestCase DownscaledICOTestCase();
-ImageTestCase DownscaledIconTestCase();
-ImageTestCase DownscaledTransparentICOWithANDMaskTestCase();
-
-ImageTestCase TruncatedSmallGIFTestCase();
-
-} // namespace image
-} // namespace mozilla
-
-#endif // mozilla_image_test_gtest_Common_h
diff --git a/image/test/gtest/TestADAM7InterpolatingFilter.cpp b/image/test/gtest/TestADAM7InterpolatingFilter.cpp
deleted file mode 100644
index d11224251e..0000000000
--- a/image/test/gtest/TestADAM7InterpolatingFilter.cpp
+++ /dev/null
@@ -1,671 +0,0 @@
-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim: set ts=8 sts=2 et sw=2 tw=80: */
-/* 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/. */
-
-#include <algorithm>
-#include <vector>
-
-#include "gtest/gtest.h"
-
-#include "mozilla/gfx/2D.h"
-#include "mozilla/Maybe.h"
-#include "Common.h"
-#include "Decoder.h"
-#include "DecoderFactory.h"
-#include "SourceBuffer.h"
-#include "SurfaceFilters.h"
-#include "SurfacePipe.h"
-
-using namespace mozilla;
-using namespace mozilla::gfx;
-using namespace mozilla::image;
-
-using std::generate;
-using std::vector;
-
-template <typename Func> void
-WithADAM7InterpolatingFilter(const IntSize& aSize, Func aFunc)
-{
- RefPtr<Decoder> decoder = CreateTrivialDecoder();
- ASSERT_TRUE(bool(decoder));
-
- WithFilterPipeline(decoder, Forward<Func>(aFunc),
- ADAM7InterpolatingConfig { },
- SurfaceConfig { decoder, aSize,
- SurfaceFormat::B8G8R8A8, false });
-}
-
-void
-AssertConfiguringADAM7InterpolatingFilterFails(const IntSize& aSize)
-{
- RefPtr<Decoder> decoder = CreateTrivialDecoder();
- ASSERT_TRUE(bool(decoder));
-
- AssertConfiguringPipelineFails(decoder,
- ADAM7InterpolatingConfig { },
- SurfaceConfig { decoder, aSize,
- SurfaceFormat::B8G8R8A8, false });
-}
-
-uint8_t
-InterpolateByte(uint8_t aByteA, uint8_t aByteB, float aWeight)
-{
- return uint8_t(aByteA * aWeight + aByteB * (1.0f - aWeight));
-}
-
-BGRAColor
-InterpolateColors(BGRAColor aColor1, BGRAColor aColor2, float aWeight)
-{
- return BGRAColor(InterpolateByte(aColor1.mBlue, aColor2.mBlue, aWeight),
- InterpolateByte(aColor1.mGreen, aColor2.mGreen, aWeight),
- InterpolateByte(aColor1.mRed, aColor2.mRed, aWeight),
- InterpolateByte(aColor1.mAlpha, aColor2.mAlpha, aWeight));
-}
-
-enum class ShouldInterpolate
-{
- eYes,
- eNo
-};
-
-BGRAColor
-HorizontallyInterpolatedPixel(uint32_t aCol,
- uint32_t aWidth,
- const vector<float>& aWeights,
- ShouldInterpolate aShouldInterpolate,
- const vector<BGRAColor>& aColors)
-{
- // We cycle through the vector of weights forever.
- float weight = aWeights[aCol % aWeights.size()];
-
- // Find the columns of the two final pixels for this set of weights.
- uint32_t finalPixel1 = aCol - aCol % aWeights.size();
- uint32_t finalPixel2 = finalPixel1 + aWeights.size();
-
- // If |finalPixel2| is past the end of the row, that means that there is no
- // final pixel after the pixel at |finalPixel1|. In that case, we just want to
- // duplicate |finalPixel1|'s color until the end of the row. We can do that by
- // setting |finalPixel2| equal to |finalPixel1| so that the interpolation has
- // no effect.
- if (finalPixel2 >= aWidth) {
- finalPixel2 = finalPixel1;
- }
-
- // We cycle through the vector of colors forever (subject to the above
- // constraint about the end of the row).
- BGRAColor color1 = aColors[finalPixel1 % aColors.size()];
- BGRAColor color2 = aColors[finalPixel2 % aColors.size()];
-
- // If we're not interpolating, we treat all pixels which aren't final as
- // transparent. Since the number of weights we have is equal to the stride
- // between final pixels, we can check if |aCol| is a final pixel by checking
- // whether |aCol| is a multiple of |aWeights.size()|.
- if (aShouldInterpolate == ShouldInterpolate::eNo) {
- return aCol % aWeights.size() == 0 ? color1
- : BGRAColor::Transparent();
- }
-
- // Interpolate.
- return InterpolateColors(color1, color2, weight);
-}
-
-vector<float>&
-InterpolationWeights(int32_t aStride)
-{
- // Precalculated interpolation weights. These are used to interpolate
- // between final pixels or between important rows. Although no interpolation
- // is actually applied to the previous final pixel or important row value,
- // the arrays still start with 1.0f, which is always skipped, primarily
- // because otherwise |stride1Weights| would have zero elements.
- static vector<float> stride8Weights =
- { 1.0f, 7 / 8.0f, 6 / 8.0f, 5 / 8.0f, 4 / 8.0f, 3 / 8.0f, 2 / 8.0f, 1 / 8.0f };
- static vector<float> stride4Weights = { 1.0f, 3 / 4.0f, 2 / 4.0f, 1 / 4.0f };
- static vector<float> stride2Weights = { 1.0f, 1 / 2.0f };
- static vector<float> stride1Weights = { 1.0f };
-
- switch (aStride) {
- case 8: return stride8Weights;
- case 4: return stride4Weights;
- case 2: return stride2Weights;
- case 1: return stride1Weights;
- default:
- MOZ_CRASH();
- }
-}
-
-int32_t
-ImportantRowStride(uint8_t aPass)
-{
- // The stride between important rows for each pass, with a dummy value for
- // the nonexistent pass 0 and for pass 8, since the tests run an extra pass to
- // make sure nothing breaks.
- static int32_t strides[] = { 1, 8, 8, 4, 4, 2, 2, 1, 1 };
-
- return strides[aPass];
-}
-
-size_t
-FinalPixelStride(uint8_t aPass)
-{
- // The stride between the final pixels in important rows for each pass, with
- // a dummy value for the nonexistent pass 0 and for pass 8, since the tests
- // run an extra pass to make sure nothing breaks.
- static size_t strides[] = { 1, 8, 4, 4, 2, 2, 1, 1, 1 };
-
- return strides[aPass];
-}
-
-bool
-IsImportantRow(int32_t aRow, uint8_t aPass)
-{
- return aRow % ImportantRowStride(aPass) == 0;
-}
-
-/**
- * ADAM7 breaks up the image into 8x8 blocks. On each of the 7 passes, a new
- * set of pixels in each block receives their final values, according to the
- * following pattern:
- *
- * 1 6 4 6 2 6 4 6
- * 7 7 7 7 7 7 7 7
- * 5 6 5 6 5 6 5 6
- * 7 7 7 7 7 7 7 7
- * 3 6 4 6 3 6 4 6
- * 7 7 7 7 7 7 7 7
- * 5 6 5 6 5 6 5 6
- * 7 7 7 7 7 7 7 7
- *
- * This function produces a row of pixels @aWidth wide, suitable for testing
- * horizontal interpolation on pass @aPass. The pattern of pixels used is
- * determined by @aPass and @aRow, which determine which pixels are final
- * according to the table above, and @aColors, from which the pixel values
- * are selected.
- *
- * There are two different behaviors: if |eNo| is passed for
- * @aShouldInterpolate, non-final pixels are treated as transparent. If |eNo|
- * is passed, non-final pixels get interpolated in from the surrounding final
- * pixels. The intention is that |eNo| is passed to generate input which will
- * be run through ADAM7InterpolatingFilter, and |eYes| is passed to generate
- * reference data to check that the filter is performing horizontal
- * interpolation correctly.
- *
- * This function does not perform vertical interpolation. Rows which aren't on
- * the current pass are filled with transparent pixels.
- *
- * @return a vector<BGRAColor> representing a row of pixels.
- */
-vector<BGRAColor>
-ADAM7HorizontallyInterpolatedRow(uint8_t aPass,
- uint32_t aRow,
- uint32_t aWidth,
- ShouldInterpolate aShouldInterpolate,
- const vector<BGRAColor>& aColors)
-{
- EXPECT_GT(aPass, 0);
- EXPECT_LE(aPass, 8);
- EXPECT_GT(aColors.size(), 0u);
-
- vector<BGRAColor> result(aWidth);
-
- if (IsImportantRow(aRow, aPass)) {
- vector<float>& weights = InterpolationWeights(FinalPixelStride(aPass));
-
- // Compute the horizontally interpolated row.
- uint32_t col = 0;
- generate(result.begin(), result.end(), [&]{
- return HorizontallyInterpolatedPixel(col++, aWidth, weights,
- aShouldInterpolate, aColors);
- });
- } else {
- // This is an unimportant row; just make the entire thing transparent.
- generate(result.begin(), result.end(), []{
- return BGRAColor::Transparent();
- });
- }
-
- EXPECT_EQ(result.size(), size_t(aWidth));
-
- return result;
-}
-
-WriteState
-WriteUninterpolatedPixels(SurfaceFilter* aFilter,
- const IntSize& aSize,
- uint8_t aPass,
- const vector<BGRAColor>& aColors)
-{
- WriteState result = WriteState::NEED_MORE_DATA;
-
- for (int32_t row = 0; row < aSize.height; ++row) {
- // Compute uninterpolated pixels for this row.
- vector<BGRAColor> pixels =
- Move(ADAM7HorizontallyInterpolatedRow(aPass, row, aSize.width,
- ShouldInterpolate::eNo, aColors));
-
- // Write them to the surface.
- auto pixelIterator = pixels.cbegin();
- result = aFilter->WritePixelsToRow<uint32_t>([&]{
- return AsVariant((*pixelIterator++).AsPixel());
- });
-
- if (result != WriteState::NEED_MORE_DATA) {
- break;
- }
- }
-
- return result;
-}
-
-bool
-CheckHorizontallyInterpolatedImage(Decoder* aDecoder,
- const IntSize& aSize,
- uint8_t aPass,
- const vector<BGRAColor>& aColors)
-{
- RawAccessFrameRef currentFrame = aDecoder->GetCurrentFrameRef();
- RefPtr<SourceSurface> surface = currentFrame->GetSourceSurface();
-
- for (int32_t row = 0; row < aSize.height; ++row) {
- if (!IsImportantRow(row, aPass)) {
- continue; // Don't check rows which aren't important on this pass.
- }
-
- // Compute the expected pixels, *with* interpolation to match what the
- // filter should have done.
- vector<BGRAColor> expectedPixels =
- Move(ADAM7HorizontallyInterpolatedRow(aPass, row, aSize.width,
- ShouldInterpolate::eYes, aColors));
-
- if (!RowHasPixels(surface, row, expectedPixels)) {
- return false;
- }
- }
-
- return true;
-}
-
-void
-CheckHorizontalInterpolation(const IntSize& aSize,
- const vector<BGRAColor>& aColors)
-{
- const IntRect surfaceRect(IntPoint(0, 0), aSize);
-
- WithADAM7InterpolatingFilter(aSize,
- [&](Decoder* aDecoder, SurfaceFilter* aFilter) {
- // We check horizontal interpolation behavior for each pass individually. In
- // addition to the normal 7 passes that ADAM7 includes, we also check an
- // eighth pass to verify that nothing breaks if extra data is written.
- for (uint8_t pass = 1; pass <= 8; ++pass) {
- // Write our color pattern to the surface. We don't perform any
- // interpolation when writing to the filter so that we can check that the
- // filter itself *does*.
- WriteState result =
- WriteUninterpolatedPixels(aFilter, aSize, pass, aColors);
-
- EXPECT_EQ(WriteState::FINISHED, result);
- AssertCorrectPipelineFinalState(aFilter, surfaceRect, surfaceRect);
-
- // Check that the generated image matches the expected pattern, with
- // interpolation applied.
- EXPECT_TRUE(CheckHorizontallyInterpolatedImage(aDecoder, aSize,
- pass, aColors));
-
- // Prepare for the next pass.
- aFilter->ResetToFirstRow();
- }
- });
-}
-
-BGRAColor
-ADAM7RowColor(int32_t aRow,
- uint8_t aPass,
- const vector<BGRAColor>& aColors)
-{
- EXPECT_LT(0, aPass);
- EXPECT_GE(8, aPass);
- EXPECT_LT(0u, aColors.size());
-
- // If this is an important row, select the color from the provided vector of
- // colors, which we cycle through infinitely. If not, just fill the row with
- // transparent pixels.
- return IsImportantRow(aRow, aPass) ? aColors[aRow % aColors.size()]
- : BGRAColor::Transparent();
-}
-
-WriteState
-WriteRowColorPixels(SurfaceFilter* aFilter,
- const IntSize& aSize,
- uint8_t aPass,
- const vector<BGRAColor>& aColors)
-{
- WriteState result = WriteState::NEED_MORE_DATA;
-
- for (int32_t row = 0; row < aSize.height; ++row) {
- const uint32_t color = ADAM7RowColor(row, aPass, aColors).AsPixel();
-
- // Fill the surface with |color| pixels.
- result = aFilter->WritePixelsToRow<uint32_t>([&]{ return AsVariant(color); });
-
- if (result != WriteState::NEED_MORE_DATA) {
- break;
- }
- }
-
- return result;
-}
-
-bool
-CheckVerticallyInterpolatedImage(Decoder* aDecoder,
- const IntSize& aSize,
- uint8_t aPass,
- const vector<BGRAColor>& aColors)
-{
- vector<float>& weights = InterpolationWeights(ImportantRowStride(aPass));
-
- for (int32_t row = 0; row < aSize.height; ++row) {
- // Vertically interpolation takes place between two important rows. The
- // separation between the important rows is determined by the stride of this
- // pass. When there is no "next" important row because we'd run off the
- // bottom of the image, we use the same row for both. This matches
- // ADAM7InterpolatingFilter's behavior of duplicating the last important row
- // since there isn't another important row to vertically interpolate it
- // with.
- const int32_t stride = ImportantRowStride(aPass);
- const int32_t prevImportantRow = row - row % stride;
- const int32_t maybeNextImportantRow = prevImportantRow + stride;
- const int32_t nextImportantRow = maybeNextImportantRow < aSize.height
- ? maybeNextImportantRow
- : prevImportantRow;
-
- // Retrieve the colors for the important rows we're going to interpolate.
- const BGRAColor prevImportantRowColor =
- ADAM7RowColor(prevImportantRow, aPass, aColors);
- const BGRAColor nextImportantRowColor =
- ADAM7RowColor(nextImportantRow, aPass, aColors);
-
- // The weight we'll use for interpolation is also determined by the stride.
- // A row halfway between two important rows should have pixels that have a
- // 50% contribution from each of the important rows, for example.
- const float weight = weights[row % stride];
- const BGRAColor interpolatedColor =
- InterpolateColors(prevImportantRowColor, nextImportantRowColor, weight);
-
- // Generate a row of expected pixels. Every pixel in the row is always the
- // same color since we're only testing vertical interpolation between
- // solid-colored rows.
- vector<BGRAColor> expectedPixels(aSize.width);
- generate(expectedPixels.begin(), expectedPixels.end(), [&]{
- return interpolatedColor;
- });
-
- // Check that the pixels match.
- RawAccessFrameRef currentFrame = aDecoder->GetCurrentFrameRef();
- RefPtr<SourceSurface> surface = currentFrame->GetSourceSurface();
- if (!RowHasPixels(surface, row, expectedPixels)) {
- return false;
- }
- }
-
- return true;
-}
-
-void
-CheckVerticalInterpolation(const IntSize& aSize,
- const vector<BGRAColor>& aColors)
-{
- const IntRect surfaceRect(IntPoint(0, 0), aSize);
-
- WithADAM7InterpolatingFilter(aSize,
- [&](Decoder* aDecoder, SurfaceFilter* aFilter) {
- for (uint8_t pass = 1; pass <= 8; ++pass) {
- // Write a pattern of rows to the surface. Important rows will receive a
- // color selected from |aColors|; unimportant rows will be transparent.
- WriteState result = WriteRowColorPixels(aFilter, aSize, pass, aColors);
-
- EXPECT_EQ(WriteState::FINISHED, result);
- AssertCorrectPipelineFinalState(aFilter, surfaceRect, surfaceRect);
-
- // Check that the generated image matches the expected pattern, with
- // interpolation applied.
- EXPECT_TRUE(CheckVerticallyInterpolatedImage(aDecoder, aSize,
- pass, aColors));
-
- // Prepare for the next pass.
- aFilter->ResetToFirstRow();
- }
- });
-}
-
-void
-CheckInterpolation(const IntSize& aSize, const vector<BGRAColor>& aColors)
-{
- CheckHorizontalInterpolation(aSize, aColors);
- CheckVerticalInterpolation(aSize, aColors);
-}
-
-void
-CheckADAM7InterpolatingWritePixels(const IntSize& aSize)
-{
- // This test writes 8 passes of green pixels (the seven ADAM7 passes, plus one
- // extra to make sure nothing goes wrong if we write too much input) and verifies
- // that the output is a solid green surface each time. Because all the pixels
- // are the same color, interpolation doesn't matter; we test the correctness
- // of the interpolation algorithm itself separately.
- WithADAM7InterpolatingFilter(aSize,
- [&](Decoder* aDecoder, SurfaceFilter* aFilter) {
- IntRect rect(IntPoint(0, 0), aSize);
-
- for (int32_t pass = 1; pass <= 8; ++pass) {
- // We only actually write up to the last important row for each pass,
- // because that row unambiguously determines the remaining rows.
- const int32_t lastRow = aSize.height - 1;
- const int32_t lastImportantRow =
- lastRow - (lastRow % ImportantRowStride(pass));
- const IntRect inputWriteRect(0, 0, aSize.width, lastImportantRow + 1);
-
- CheckWritePixels(aDecoder, aFilter,
- /* aOutputRect = */ Some(rect),
- /* aInputRect = */ Some(rect),
- /* aInputWriteRect = */ Some(inputWriteRect));
-
- aFilter->ResetToFirstRow();
- EXPECT_FALSE(aFilter->IsSurfaceFinished());
- Maybe<SurfaceInvalidRect> invalidRect = aFilter->TakeInvalidRect();
- EXPECT_TRUE(invalidRect.isNothing());
- }
- });
-}
-
-TEST(ImageADAM7InterpolatingFilter, WritePixels100_100)
-{
- CheckADAM7InterpolatingWritePixels(IntSize(100, 100));
-}
-
-TEST(ImageADAM7InterpolatingFilter, WritePixels99_99)
-{
- CheckADAM7InterpolatingWritePixels(IntSize(99, 99));
-}
-
-TEST(ImageADAM7InterpolatingFilter, WritePixels66_33)
-{
- CheckADAM7InterpolatingWritePixels(IntSize(66, 33));
-}
-
-TEST(ImageADAM7InterpolatingFilter, WritePixels33_66)
-{
- CheckADAM7InterpolatingWritePixels(IntSize(33, 66));
-}
-
-TEST(ImageADAM7InterpolatingFilter, WritePixels15_15)
-{
- CheckADAM7InterpolatingWritePixels(IntSize(15, 15));
-}
-
-TEST(ImageADAM7InterpolatingFilter, WritePixels9_9)
-{
- CheckADAM7InterpolatingWritePixels(IntSize(9, 9));
-}
-
-TEST(ImageADAM7InterpolatingFilter, WritePixels8_8)
-{
- CheckADAM7InterpolatingWritePixels(IntSize(8, 8));
-}
-
-TEST(ImageADAM7InterpolatingFilter, WritePixels7_7)
-{
- CheckADAM7InterpolatingWritePixels(IntSize(7, 7));
-}
-
-TEST(ImageADAM7InterpolatingFilter, WritePixels3_3)
-{
- CheckADAM7InterpolatingWritePixels(IntSize(3, 3));
-}
-
-TEST(ImageADAM7InterpolatingFilter, WritePixels1_1)
-{
- CheckADAM7InterpolatingWritePixels(IntSize(1, 1));
-}
-
-TEST(ImageADAM7InterpolatingFilter, TrivialInterpolation48_48)
-{
- CheckInterpolation(IntSize(48, 48), { BGRAColor::Green() });
-}
-
-TEST(ImageADAM7InterpolatingFilter, InterpolationOutput33_17)
-{
- // We check interpolation using irregular patterns to make sure that the
- // interpolation will look different for different passes.
- CheckInterpolation(IntSize(33, 17), {
- BGRAColor::Green(), BGRAColor::Red(), BGRAColor::Green(), BGRAColor::Blue(),
- BGRAColor::Blue(), BGRAColor::Blue(), BGRAColor::Red(), BGRAColor::Green(),
- BGRAColor::Red(), BGRAColor::Red(), BGRAColor::Blue(), BGRAColor::Blue(),
- BGRAColor::Green(), BGRAColor::Blue(), BGRAColor::Red(), BGRAColor::Blue(),
- BGRAColor::Red(), BGRAColor::Green(), BGRAColor::Blue(), BGRAColor::Red(),
- BGRAColor::Green(), BGRAColor::Red(), BGRAColor::Red(), BGRAColor::Blue(),
- BGRAColor::Blue(), BGRAColor::Blue(), BGRAColor::Red(), BGRAColor::Green(),
- BGRAColor::Green(), BGRAColor::Blue(), BGRAColor::Red(), BGRAColor::Blue()
- });
-}
-
-TEST(ImageADAM7InterpolatingFilter, InterpolationOutput32_16)
-{
- CheckInterpolation(IntSize(32, 16), {
- BGRAColor::Green(), BGRAColor::Red(), BGRAColor::Green(), BGRAColor::Blue(),
- BGRAColor::Blue(), BGRAColor::Blue(), BGRAColor::Red(), BGRAColor::Green(),
- BGRAColor::Red(), BGRAColor::Red(), BGRAColor::Blue(), BGRAColor::Blue(),
- BGRAColor::Green(), BGRAColor::Blue(), BGRAColor::Red(), BGRAColor::Blue(),
- BGRAColor::Red(), BGRAColor::Green(), BGRAColor::Blue(), BGRAColor::Red(),
- BGRAColor::Green(), BGRAColor::Red(), BGRAColor::Red(), BGRAColor::Blue(),
- BGRAColor::Blue(), BGRAColor::Blue(), BGRAColor::Red(), BGRAColor::Green(),
- BGRAColor::Green(), BGRAColor::Blue(), BGRAColor::Red(), BGRAColor::Blue()
- });
-}
-
-TEST(ImageADAM7InterpolatingFilter, InterpolationOutput31_15)
-{
- CheckInterpolation(IntSize(31, 15), {
- BGRAColor::Green(), BGRAColor::Red(), BGRAColor::Green(), BGRAColor::Blue(),
- BGRAColor::Blue(), BGRAColor::Blue(), BGRAColor::Red(), BGRAColor::Green(),
- BGRAColor::Red(), BGRAColor::Red(), BGRAColor::Blue(), BGRAColor::Blue(),
- BGRAColor::Green(), BGRAColor::Blue(), BGRAColor::Red(), BGRAColor::Blue(),
- BGRAColor::Red(), BGRAColor::Green(), BGRAColor::Blue(), BGRAColor::Red(),
- BGRAColor::Green(), BGRAColor::Red(), BGRAColor::Red(), BGRAColor::Blue(),
- BGRAColor::Blue(), BGRAColor::Blue(), BGRAColor::Red(), BGRAColor::Green(),
- BGRAColor::Green(), BGRAColor::Blue(), BGRAColor::Red(), BGRAColor::Blue()
- });
-}
-
-TEST(ImageADAM7InterpolatingFilter, InterpolationOutput17_33)
-{
- CheckInterpolation(IntSize(17, 33), {
- BGRAColor::Green(), BGRAColor::Red(), BGRAColor::Green(), BGRAColor::Blue(),
- BGRAColor::Red(), BGRAColor::Green(), BGRAColor::Blue(), BGRAColor::Red(),
- BGRAColor::Blue(), BGRAColor::Blue(), BGRAColor::Red(), BGRAColor::Green(),
- BGRAColor::Green(), BGRAColor::Red(), BGRAColor::Red(), BGRAColor::Blue()
- });
-}
-
-TEST(ImageADAM7InterpolatingFilter, InterpolationOutput16_32)
-{
- CheckInterpolation(IntSize(16, 32), {
- BGRAColor::Green(), BGRAColor::Red(), BGRAColor::Green(), BGRAColor::Blue(),
- BGRAColor::Red(), BGRAColor::Green(), BGRAColor::Blue(), BGRAColor::Red(),
- BGRAColor::Blue(), BGRAColor::Blue(), BGRAColor::Red(), BGRAColor::Green(),
- BGRAColor::Green(), BGRAColor::Red(), BGRAColor::Red(), BGRAColor::Blue()
- });
-}
-
-TEST(ImageADAM7InterpolatingFilter, InterpolationOutput15_31)
-{
- CheckInterpolation(IntSize(15, 31), {
- BGRAColor::Green(), BGRAColor::Red(), BGRAColor::Green(), BGRAColor::Blue(),
- BGRAColor::Red(), BGRAColor::Green(), BGRAColor::Blue(), BGRAColor::Red(),
- BGRAColor::Blue(), BGRAColor::Blue(), BGRAColor::Red(), BGRAColor::Green(),
- BGRAColor::Green(), BGRAColor::Red(), BGRAColor::Red(), BGRAColor::Blue()
- });
-}
-
-TEST(ImageADAM7InterpolatingFilter, InterpolationOutput9_9)
-{
- CheckInterpolation(IntSize(9, 9), {
- BGRAColor::Blue(), BGRAColor::Blue(), BGRAColor::Red(), BGRAColor::Green(),
- BGRAColor::Green(), BGRAColor::Red(), BGRAColor::Red(), BGRAColor::Blue()
- });
-}
-
-TEST(ImageADAM7InterpolatingFilter, InterpolationOutput8_8)
-{
- CheckInterpolation(IntSize(8, 8), {
- BGRAColor::Blue(), BGRAColor::Blue(), BGRAColor::Red(), BGRAColor::Green(),
- BGRAColor::Green(), BGRAColor::Red(), BGRAColor::Red(), BGRAColor::Blue()
- });
-}
-
-TEST(ImageADAM7InterpolatingFilter, InterpolationOutput7_7)
-{
- CheckInterpolation(IntSize(7, 7), {
- BGRAColor::Blue(), BGRAColor::Blue(), BGRAColor::Red(), BGRAColor::Green(),
- BGRAColor::Green(), BGRAColor::Red(), BGRAColor::Red(), BGRAColor::Blue()
- });
-}
-
-TEST(ImageADAM7InterpolatingFilter, InterpolationOutput3_3)
-{
- CheckInterpolation(IntSize(3, 3), {
- BGRAColor::Green(), BGRAColor::Red(), BGRAColor::Blue(), BGRAColor::Red()
- });
-}
-
-TEST(ImageADAM7InterpolatingFilter, InterpolationOutput1_1)
-{
- CheckInterpolation(IntSize(1, 1), { BGRAColor::Blue() });
-}
-
-TEST(ImageADAM7InterpolatingFilter, ADAM7InterpolationFailsFor0_0)
-{
- // A 0x0 input size is invalid, so configuration should fail.
- AssertConfiguringADAM7InterpolatingFilterFails(IntSize(0, 0));
-}
-
-TEST(ImageADAM7InterpolatingFilter, ADAM7InterpolationFailsForMinus1_Minus1)
-{
- // A negative input size is invalid, so configuration should fail.
- AssertConfiguringADAM7InterpolatingFilterFails(IntSize(-1, -1));
-}
-
-TEST(ImageADAM7InterpolatingFilter, ConfiguringPalettedADAM7InterpolatingFilterFails)
-{
- RefPtr<Decoder> decoder = CreateTrivialDecoder();
- ASSERT_TRUE(decoder != nullptr);
-
- // ADAM7InterpolatingFilter does not support paletted images, so configuration
- // should fail.
- AssertConfiguringPipelineFails(decoder,
- ADAM7InterpolatingConfig { },
- PalettedSurfaceConfig { decoder, IntSize(100, 100),
- IntRect(0, 0, 50, 50),
- SurfaceFormat::B8G8R8A8, 8,
- false });
-}
diff --git a/image/test/gtest/TestCopyOnWrite.cpp b/image/test/gtest/TestCopyOnWrite.cpp
deleted file mode 100644
index 0d420b6722..0000000000
--- a/image/test/gtest/TestCopyOnWrite.cpp
+++ /dev/null
@@ -1,235 +0,0 @@
-/* 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/. */
-
-#include "gtest/gtest.h"
-
-#include "CopyOnWrite.h"
-
-using namespace mozilla;
-using namespace mozilla::image;
-
-struct ValueStats
-{
- int32_t mCopies = 0;
- int32_t mFrees = 0;
- int32_t mCalls = 0;
- int32_t mConstCalls = 0;
- int32_t mSerial = 0;
-};
-
-struct Value
-{
- NS_INLINE_DECL_REFCOUNTING(Value)
-
- explicit Value(ValueStats& aStats)
- : mStats(aStats)
- , mSerial(mStats.mSerial++)
- { }
-
- Value(const Value& aOther)
- : mStats(aOther.mStats)
- , mSerial(mStats.mSerial++)
- {
- mStats.mCopies++;
- }
-
- void Go() { mStats.mCalls++; }
- void Go() const { mStats.mConstCalls++; }
-
- int32_t Serial() const { return mSerial; }
-
-protected:
- ~Value() { mStats.mFrees++; }
-
-private:
- ValueStats& mStats;
- int32_t mSerial;
-};
-
-TEST(ImageCopyOnWrite, Read)
-{
- ValueStats stats;
-
- {
- CopyOnWrite<Value> cow(new Value(stats));
-
- EXPECT_EQ(0, stats.mCopies);
- EXPECT_EQ(0, stats.mFrees);
- EXPECT_TRUE(cow.CanRead());
-
- cow.Read([&](const Value* aValue) {
- EXPECT_EQ(0, stats.mCopies);
- EXPECT_EQ(0, stats.mFrees);
- EXPECT_EQ(0, aValue->Serial());
- EXPECT_TRUE(cow.CanRead());
- EXPECT_TRUE(cow.CanWrite());
-
- aValue->Go();
-
- EXPECT_EQ(0, stats.mCalls);
- EXPECT_EQ(1, stats.mConstCalls);
- });
-
- EXPECT_EQ(0, stats.mCopies);
- EXPECT_EQ(0, stats.mFrees);
- EXPECT_EQ(0, stats.mCalls);
- EXPECT_EQ(1, stats.mConstCalls);
- }
-
- EXPECT_EQ(0, stats.mCopies);
- EXPECT_EQ(1, stats.mFrees);
-}
-
-TEST(ImageCopyOnWrite, RecursiveRead)
-{
- ValueStats stats;
-
- {
- CopyOnWrite<Value> cow(new Value(stats));
-
- EXPECT_EQ(0, stats.mCopies);
- EXPECT_EQ(0, stats.mFrees);
- EXPECT_TRUE(cow.CanRead());
-
- cow.Read([&](const Value* aValue) {
- EXPECT_EQ(0, stats.mCopies);
- EXPECT_EQ(0, stats.mFrees);
- EXPECT_EQ(0, aValue->Serial());
- EXPECT_TRUE(cow.CanRead());
- EXPECT_TRUE(cow.CanWrite());
-
- // Make sure that Read() inside a Read() succeeds.
- cow.Read([&](const Value* aValue) {
- EXPECT_EQ(0, stats.mCopies);
- EXPECT_EQ(0, stats.mFrees);
- EXPECT_EQ(0, aValue->Serial());
- EXPECT_TRUE(cow.CanRead());
- EXPECT_TRUE(cow.CanWrite());
-
- aValue->Go();
-
- EXPECT_EQ(0, stats.mCalls);
- EXPECT_EQ(1, stats.mConstCalls);
- }, []() {
- // This gets called if we can't read. We shouldn't get here.
- EXPECT_TRUE(false);
- });
- });
-
- EXPECT_EQ(0, stats.mCopies);
- EXPECT_EQ(0, stats.mFrees);
- EXPECT_EQ(0, stats.mCalls);
- EXPECT_EQ(1, stats.mConstCalls);
- }
-
- EXPECT_EQ(0, stats.mCopies);
- EXPECT_EQ(1, stats.mFrees);
-}
-
-TEST(ImageCopyOnWrite, Write)
-{
- ValueStats stats;
-
- {
- CopyOnWrite<Value> cow(new Value(stats));
-
- EXPECT_EQ(0, stats.mCopies);
- EXPECT_EQ(0, stats.mFrees);
- EXPECT_TRUE(cow.CanRead());
- EXPECT_TRUE(cow.CanWrite());
-
- cow.Write([&](Value* aValue) {
- EXPECT_EQ(0, stats.mCopies);
- EXPECT_EQ(0, stats.mFrees);
- EXPECT_EQ(0, aValue->Serial());
- EXPECT_TRUE(!cow.CanRead());
- EXPECT_TRUE(!cow.CanWrite());
-
- aValue->Go();
-
- EXPECT_EQ(1, stats.mCalls);
- EXPECT_EQ(0, stats.mConstCalls);
- });
-
- EXPECT_EQ(0, stats.mCopies);
- EXPECT_EQ(0, stats.mFrees);
- EXPECT_EQ(1, stats.mCalls);
- EXPECT_EQ(0, stats.mConstCalls);
- }
-
- EXPECT_EQ(0, stats.mCopies);
- EXPECT_EQ(1, stats.mFrees);
-}
-
-TEST(ImageCopyOnWrite, WriteRecursive)
-{
- ValueStats stats;
-
- {
- CopyOnWrite<Value> cow(new Value(stats));
-
- EXPECT_EQ(0, stats.mCopies);
- EXPECT_EQ(0, stats.mFrees);
- EXPECT_TRUE(cow.CanRead());
- EXPECT_TRUE(cow.CanWrite());
-
- cow.Read([&](const Value* aValue) {
- EXPECT_EQ(0, stats.mCopies);
- EXPECT_EQ(0, stats.mFrees);
- EXPECT_EQ(0, aValue->Serial());
- EXPECT_TRUE(cow.CanRead());
- EXPECT_TRUE(cow.CanWrite());
-
- // Make sure Write() inside a Read() succeeds.
- cow.Write([&](Value* aValue) {
- EXPECT_EQ(1, stats.mCopies);
- EXPECT_EQ(0, stats.mFrees);
- EXPECT_EQ(1, aValue->Serial());
- EXPECT_TRUE(!cow.CanRead());
- EXPECT_TRUE(!cow.CanWrite());
-
- aValue->Go();
-
- EXPECT_EQ(1, stats.mCalls);
- EXPECT_EQ(0, stats.mConstCalls);
-
- // Make sure Read() inside a Write() fails.
- cow.Read([](const Value* aValue) {
- // This gets called if we can read. We shouldn't get here.
- EXPECT_TRUE(false);
- }, []() {
- // This gets called if we can't read. We *should* get here.
- EXPECT_TRUE(true);
- });
-
- // Make sure Write() inside a Write() fails.
- cow.Write([](Value* aValue) {
- // This gets called if we can write. We shouldn't get here.
- EXPECT_TRUE(false);
- }, []() {
- // This gets called if we can't write. We *should* get here.
- EXPECT_TRUE(true);
- });
- }, []() {
- // This gets called if we can't write. We shouldn't get here.
- EXPECT_TRUE(false);
- });
-
- aValue->Go();
-
- EXPECT_EQ(1, stats.mCopies);
- EXPECT_EQ(0, stats.mFrees);
- EXPECT_EQ(1, stats.mCalls);
- EXPECT_EQ(1, stats.mConstCalls);
- });
-
- EXPECT_EQ(1, stats.mCopies);
- EXPECT_EQ(1, stats.mFrees);
- EXPECT_EQ(1, stats.mCalls);
- EXPECT_EQ(1, stats.mConstCalls);
- }
-
- EXPECT_EQ(1, stats.mCopies);
- EXPECT_EQ(2, stats.mFrees);
-}
diff --git a/image/test/gtest/TestDecodeToSurface.cpp b/image/test/gtest/TestDecodeToSurface.cpp
deleted file mode 100644
index bd52e75901..0000000000
--- a/image/test/gtest/TestDecodeToSurface.cpp
+++ /dev/null
@@ -1,123 +0,0 @@
-/* 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/. */
-
-#include "gtest/gtest.h"
-
-#include "Common.h"
-#include "imgIContainer.h"
-#include "imgITools.h"
-#include "ImageOps.h"
-#include "mozilla/gfx/2D.h"
-#include "nsComponentManagerUtils.h"
-#include "nsCOMPtr.h"
-#include "nsIInputStream.h"
-#include "nsIRunnable.h"
-#include "nsIThread.h"
-#include "mozilla/RefPtr.h"
-#include "nsString.h"
-#include "nsThreadUtils.h"
-
-using namespace mozilla;
-using namespace mozilla::gfx;
-using namespace mozilla::image;
-
-class DecodeToSurfaceRunnable : public Runnable
-{
-public:
- DecodeToSurfaceRunnable(RefPtr<SourceSurface>& aSurface,
- nsIInputStream* aInputStream,
- const ImageTestCase& aTestCase)
- : mSurface(aSurface)
- , mInputStream(aInputStream)
- , mTestCase(aTestCase)
- { }
-
- NS_IMETHOD Run() override
- {
- Go();
- return NS_OK;
- }
-
- void Go()
- {
- mSurface =
- ImageOps::DecodeToSurface(mInputStream,
- nsDependentCString(mTestCase.mMimeType),
- imgIContainer::DECODE_FLAGS_DEFAULT);
- ASSERT_TRUE(mSurface != nullptr);
-
- EXPECT_EQ(SurfaceType::DATA, mSurface->GetType());
- EXPECT_TRUE(mSurface->GetFormat() == SurfaceFormat::B8G8R8X8 ||
- mSurface->GetFormat() == SurfaceFormat::B8G8R8A8);
- EXPECT_EQ(mTestCase.mSize, mSurface->GetSize());
-
- EXPECT_TRUE(IsSolidColor(mSurface, BGRAColor::Green(),
- mTestCase.mFlags & TEST_CASE_IS_FUZZY ? 1 : 0));
- }
-
-private:
- RefPtr<SourceSurface>& mSurface;
- nsCOMPtr<nsIInputStream> mInputStream;
- ImageTestCase mTestCase;
-};
-
-static void
-RunDecodeToSurface(const ImageTestCase& aTestCase)
-{
- nsCOMPtr<nsIInputStream> inputStream = LoadFile(aTestCase.mPath);
- ASSERT_TRUE(inputStream != nullptr);
-
- nsCOMPtr<nsIThread> thread;
- nsresult rv = NS_NewThread(getter_AddRefs(thread), nullptr);
- ASSERT_TRUE(NS_SUCCEEDED(rv));
-
- // We run the DecodeToSurface tests off-main-thread to ensure that
- // DecodeToSurface doesn't require any main-thread-only code.
- RefPtr<SourceSurface> surface;
- nsCOMPtr<nsIRunnable> runnable =
- new DecodeToSurfaceRunnable(surface, inputStream, aTestCase);
- thread->Dispatch(runnable, nsIThread::DISPATCH_SYNC);
-
- thread->Shutdown();
-
- // Explicitly release the SourceSurface on the main thread.
- surface = nullptr;
-}
-
-class ImageDecodeToSurface : public ::testing::Test
-{
-protected:
- AutoInitializeImageLib mInit;
-};
-
-TEST_F(ImageDecodeToSurface, PNG) { RunDecodeToSurface(GreenPNGTestCase()); }
-TEST_F(ImageDecodeToSurface, GIF) { RunDecodeToSurface(GreenGIFTestCase()); }
-TEST_F(ImageDecodeToSurface, JPG) { RunDecodeToSurface(GreenJPGTestCase()); }
-TEST_F(ImageDecodeToSurface, BMP) { RunDecodeToSurface(GreenBMPTestCase()); }
-TEST_F(ImageDecodeToSurface, ICO) { RunDecodeToSurface(GreenICOTestCase()); }
-TEST_F(ImageDecodeToSurface, Icon) { RunDecodeToSurface(GreenIconTestCase()); }
-
-TEST_F(ImageDecodeToSurface, AnimatedGIF)
-{
- RunDecodeToSurface(GreenFirstFrameAnimatedGIFTestCase());
-}
-
-TEST_F(ImageDecodeToSurface, AnimatedPNG)
-{
- RunDecodeToSurface(GreenFirstFrameAnimatedPNGTestCase());
-}
-
-TEST_F(ImageDecodeToSurface, Corrupt)
-{
- ImageTestCase testCase = CorruptTestCase();
-
- nsCOMPtr<nsIInputStream> inputStream = LoadFile(testCase.mPath);
- ASSERT_TRUE(inputStream != nullptr);
-
- RefPtr<SourceSurface> surface =
- ImageOps::DecodeToSurface(inputStream,
- nsDependentCString(testCase.mMimeType),
- imgIContainer::DECODE_FLAGS_DEFAULT);
- EXPECT_TRUE(surface == nullptr);
-}
diff --git a/image/test/gtest/TestDecoders.cpp b/image/test/gtest/TestDecoders.cpp
deleted file mode 100644
index 58caa77a2e..0000000000
--- a/image/test/gtest/TestDecoders.cpp
+++ /dev/null
@@ -1,669 +0,0 @@
-/* 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/. */
-
-#include "gtest/gtest.h"
-
-#include "Common.h"
-#include "Decoder.h"
-#include "DecoderFactory.h"
-#include "decoders/nsBMPDecoder.h"
-#include "IDecodingTask.h"
-#include "imgIContainer.h"
-#include "imgITools.h"
-#include "ImageFactory.h"
-#include "mozilla/gfx/2D.h"
-#include "nsComponentManagerUtils.h"
-#include "nsCOMPtr.h"
-#include "nsIInputStream.h"
-#include "nsIRunnable.h"
-#include "nsIThread.h"
-#include "mozilla/RefPtr.h"
-#include "nsStreamUtils.h"
-#include "nsString.h"
-#include "nsThreadUtils.h"
-#include "ProgressTracker.h"
-#include "SourceBuffer.h"
-
-using namespace mozilla;
-using namespace mozilla::gfx;
-using namespace mozilla::image;
-
-static already_AddRefed<SourceSurface>
-CheckDecoderState(const ImageTestCase& aTestCase, Decoder* aDecoder)
-{
- EXPECT_TRUE(aDecoder->GetDecodeDone());
- EXPECT_EQ(bool(aTestCase.mFlags & TEST_CASE_HAS_ERROR),
- aDecoder->HasError());
-
- // Verify that the decoder made the expected progress.
- Progress progress = aDecoder->TakeProgress();
- EXPECT_EQ(bool(aTestCase.mFlags & TEST_CASE_HAS_ERROR),
- bool(progress & FLAG_HAS_ERROR));
-
- if (aTestCase.mFlags & TEST_CASE_HAS_ERROR) {
- return nullptr; // That's all we can check for bad images.
- }
-
- EXPECT_TRUE(bool(progress & FLAG_SIZE_AVAILABLE));
- EXPECT_TRUE(bool(progress & FLAG_DECODE_COMPLETE));
- EXPECT_TRUE(bool(progress & FLAG_FRAME_COMPLETE));
- EXPECT_EQ(bool(aTestCase.mFlags & TEST_CASE_IS_TRANSPARENT),
- bool(progress & FLAG_HAS_TRANSPARENCY));
- EXPECT_EQ(bool(aTestCase.mFlags & TEST_CASE_IS_ANIMATED),
- bool(progress & FLAG_IS_ANIMATED));
-
- // The decoder should get the correct size.
- IntSize size = aDecoder->Size();
- EXPECT_EQ(aTestCase.mSize.width, size.width);
- EXPECT_EQ(aTestCase.mSize.height, size.height);
-
- // Get the current frame, which is always the first frame of the image
- // because CreateAnonymousDecoder() forces a first-frame-only decode.
- RawAccessFrameRef currentFrame = aDecoder->GetCurrentFrameRef();
- RefPtr<SourceSurface> surface = currentFrame->GetSourceSurface();
-
- // Verify that the resulting surfaces matches our expectations.
- EXPECT_EQ(SurfaceType::DATA, surface->GetType());
- EXPECT_TRUE(surface->GetFormat() == SurfaceFormat::B8G8R8X8 ||
- surface->GetFormat() == SurfaceFormat::B8G8R8A8);
- EXPECT_EQ(aTestCase.mOutputSize, surface->GetSize());
-
- return surface.forget();
-}
-
-static void
-CheckDecoderResults(const ImageTestCase& aTestCase, Decoder* aDecoder)
-{
- RefPtr<SourceSurface> surface = CheckDecoderState(aTestCase, aDecoder);
- if (!surface) {
- return;
- }
-
- if (aTestCase.mFlags & TEST_CASE_IGNORE_OUTPUT) {
- return;
- }
-
- // Check the output.
- EXPECT_TRUE(IsSolidColor(surface, BGRAColor::Green(),
- aTestCase.mFlags & TEST_CASE_IS_FUZZY ? 1 : 0));
-}
-
-template <typename Func>
-void WithSingleChunkDecode(const ImageTestCase& aTestCase,
- const Maybe<IntSize>& aOutputSize,
- Func aResultChecker)
-{
- nsCOMPtr<nsIInputStream> inputStream = LoadFile(aTestCase.mPath);
- ASSERT_TRUE(inputStream != nullptr);
-
- // Figure out how much data we have.
- uint64_t length;
- nsresult rv = inputStream->Available(&length);
- ASSERT_TRUE(NS_SUCCEEDED(rv));
-
- // Write the data into a SourceBuffer.
- NotNull<RefPtr<SourceBuffer>> sourceBuffer = WrapNotNull(new SourceBuffer());
- sourceBuffer->ExpectLength(length);
- rv = sourceBuffer->AppendFromInputStream(inputStream, length);
- ASSERT_TRUE(NS_SUCCEEDED(rv));
- sourceBuffer->Complete(NS_OK);
-
- // Create a decoder.
- DecoderType decoderType =
- DecoderFactory::GetDecoderType(aTestCase.mMimeType);
- RefPtr<Decoder> decoder =
- DecoderFactory::CreateAnonymousDecoder(decoderType, sourceBuffer, aOutputSize,
- DefaultSurfaceFlags());
- ASSERT_TRUE(decoder != nullptr);
- RefPtr<IDecodingTask> task = new AnonymousDecodingTask(WrapNotNull(decoder));
-
- // Run the full decoder synchronously.
- task->Run();
-
- // Call the lambda to verify the expected results.
- aResultChecker(decoder);
-}
-
-static void
-CheckDecoderSingleChunk(const ImageTestCase& aTestCase)
-{
- WithSingleChunkDecode(aTestCase, Nothing(), [&](Decoder* aDecoder) {
- CheckDecoderResults(aTestCase, aDecoder);
- });
-}
-
-static void
-CheckDecoderMultiChunk(const ImageTestCase& aTestCase)
-{
- nsCOMPtr<nsIInputStream> inputStream = LoadFile(aTestCase.mPath);
- ASSERT_TRUE(inputStream != nullptr);
-
- // Figure out how much data we have.
- uint64_t length;
- nsresult rv = inputStream->Available(&length);
- ASSERT_TRUE(NS_SUCCEEDED(rv));
-
- // Create a SourceBuffer and a decoder.
- NotNull<RefPtr<SourceBuffer>> sourceBuffer = WrapNotNull(new SourceBuffer());
- sourceBuffer->ExpectLength(length);
- DecoderType decoderType =
- DecoderFactory::GetDecoderType(aTestCase.mMimeType);
- RefPtr<Decoder> decoder =
- DecoderFactory::CreateAnonymousDecoder(decoderType, sourceBuffer, Nothing(),
- DefaultSurfaceFlags());
- ASSERT_TRUE(decoder != nullptr);
- RefPtr<IDecodingTask> task = new AnonymousDecodingTask(WrapNotNull(decoder));
-
- for (uint64_t read = 0; read < length ; ++read) {
- uint64_t available = 0;
- rv = inputStream->Available(&available);
- ASSERT_TRUE(available > 0);
- ASSERT_TRUE(NS_SUCCEEDED(rv));
-
- rv = sourceBuffer->AppendFromInputStream(inputStream, 1);
- ASSERT_TRUE(NS_SUCCEEDED(rv));
-
- task->Run();
- }
-
- sourceBuffer->Complete(NS_OK);
- task->Run();
-
- CheckDecoderResults(aTestCase, decoder);
-}
-
-static void
-CheckDownscaleDuringDecode(const ImageTestCase& aTestCase)
-{
- // This function expects that |aTestCase| consists of 25 lines of green,
- // followed by 25 lines of red, followed by 25 lines of green, followed by 25
- // more lines of red. We'll downscale it from 100x100 to 20x20.
- IntSize outputSize(20, 20);
-
- WithSingleChunkDecode(aTestCase, Some(outputSize), [&](Decoder* aDecoder) {
- RefPtr<SourceSurface> surface = CheckDecoderState(aTestCase, aDecoder);
-
- // There are no downscale-during-decode tests that have TEST_CASE_HAS_ERROR
- // set, so we expect to always get a surface here.
- EXPECT_TRUE(surface != nullptr);
-
- if (aTestCase.mFlags & TEST_CASE_IGNORE_OUTPUT) {
- return;
- }
-
- // Check that the downscaled image is correct. Note that we skip rows near
- // the transitions between colors, since the downscaler does not produce a
- // sharp boundary at these points. Even some of the rows we test need a
- // small amount of fuzz; this is just the nature of Lanczos downscaling.
- EXPECT_TRUE(RowsAreSolidColor(surface, 0, 4, BGRAColor::Green(), /* aFuzz = */ 47));
- EXPECT_TRUE(RowsAreSolidColor(surface, 6, 3, BGRAColor::Red(), /* aFuzz = */ 27));
- EXPECT_TRUE(RowsAreSolidColor(surface, 11, 3, BGRAColor::Green(), /* aFuzz = */ 47));
- EXPECT_TRUE(RowsAreSolidColor(surface, 16, 4, BGRAColor::Red(), /* aFuzz = */ 27));
- });
-}
-
-class ImageDecoders : public ::testing::Test
-{
-protected:
- AutoInitializeImageLib mInit;
-};
-
-TEST_F(ImageDecoders, PNGSingleChunk)
-{
- CheckDecoderSingleChunk(GreenPNGTestCase());
-}
-
-TEST_F(ImageDecoders, PNGMultiChunk)
-{
- CheckDecoderMultiChunk(GreenPNGTestCase());
-}
-
-TEST_F(ImageDecoders, PNGDownscaleDuringDecode)
-{
- CheckDownscaleDuringDecode(DownscaledPNGTestCase());
-}
-
-TEST_F(ImageDecoders, GIFSingleChunk)
-{
- CheckDecoderSingleChunk(GreenGIFTestCase());
-}
-
-TEST_F(ImageDecoders, GIFMultiChunk)
-{
- CheckDecoderMultiChunk(GreenGIFTestCase());
-}
-
-TEST_F(ImageDecoders, GIFDownscaleDuringDecode)
-{
- CheckDownscaleDuringDecode(DownscaledGIFTestCase());
-}
-
-TEST_F(ImageDecoders, JPGSingleChunk)
-{
- CheckDecoderSingleChunk(GreenJPGTestCase());
-}
-
-TEST_F(ImageDecoders, JPGMultiChunk)
-{
- CheckDecoderMultiChunk(GreenJPGTestCase());
-}
-
-TEST_F(ImageDecoders, JPGDownscaleDuringDecode)
-{
- CheckDownscaleDuringDecode(DownscaledJPGTestCase());
-}
-
-TEST_F(ImageDecoders, BMPSingleChunk)
-{
- CheckDecoderSingleChunk(GreenBMPTestCase());
-}
-
-TEST_F(ImageDecoders, BMPMultiChunk)
-{
- CheckDecoderMultiChunk(GreenBMPTestCase());
-}
-
-TEST_F(ImageDecoders, BMPDownscaleDuringDecode)
-{
- CheckDownscaleDuringDecode(DownscaledBMPTestCase());
-}
-
-TEST_F(ImageDecoders, ICOSingleChunk)
-{
- CheckDecoderSingleChunk(GreenICOTestCase());
-}
-
-TEST_F(ImageDecoders, ICOMultiChunk)
-{
- CheckDecoderMultiChunk(GreenICOTestCase());
-}
-
-TEST_F(ImageDecoders, ICODownscaleDuringDecode)
-{
- CheckDownscaleDuringDecode(DownscaledICOTestCase());
-}
-
-TEST_F(ImageDecoders, ICOWithANDMaskDownscaleDuringDecode)
-{
- CheckDownscaleDuringDecode(DownscaledTransparentICOWithANDMaskTestCase());
-}
-
-TEST_F(ImageDecoders, IconSingleChunk)
-{
- CheckDecoderSingleChunk(GreenIconTestCase());
-}
-
-TEST_F(ImageDecoders, IconMultiChunk)
-{
- CheckDecoderMultiChunk(GreenIconTestCase());
-}
-
-TEST_F(ImageDecoders, IconDownscaleDuringDecode)
-{
- CheckDownscaleDuringDecode(DownscaledIconTestCase());
-}
-
-TEST_F(ImageDecoders, AnimatedGIFSingleChunk)
-{
- CheckDecoderSingleChunk(GreenFirstFrameAnimatedGIFTestCase());
-}
-
-TEST_F(ImageDecoders, AnimatedGIFMultiChunk)
-{
- CheckDecoderMultiChunk(GreenFirstFrameAnimatedGIFTestCase());
-}
-
-TEST_F(ImageDecoders, AnimatedPNGSingleChunk)
-{
- CheckDecoderSingleChunk(GreenFirstFrameAnimatedPNGTestCase());
-}
-
-TEST_F(ImageDecoders, AnimatedPNGMultiChunk)
-{
- CheckDecoderMultiChunk(GreenFirstFrameAnimatedPNGTestCase());
-}
-
-TEST_F(ImageDecoders, CorruptSingleChunk)
-{
- CheckDecoderSingleChunk(CorruptTestCase());
-}
-
-TEST_F(ImageDecoders, CorruptMultiChunk)
-{
- CheckDecoderMultiChunk(CorruptTestCase());
-}
-
-TEST_F(ImageDecoders, CorruptBMPWithTruncatedHeaderSingleChunk)
-{
- CheckDecoderSingleChunk(CorruptBMPWithTruncatedHeader());
-}
-
-TEST_F(ImageDecoders, CorruptBMPWithTruncatedHeaderMultiChunk)
-{
- CheckDecoderMultiChunk(CorruptBMPWithTruncatedHeader());
-}
-
-TEST_F(ImageDecoders, CorruptICOWithBadBMPWidthSingleChunk)
-{
- CheckDecoderSingleChunk(CorruptICOWithBadBMPWidthTestCase());
-}
-
-TEST_F(ImageDecoders, CorruptICOWithBadBMPWidthMultiChunk)
-{
- CheckDecoderMultiChunk(CorruptICOWithBadBMPWidthTestCase());
-}
-
-TEST_F(ImageDecoders, CorruptICOWithBadBMPHeightSingleChunk)
-{
- CheckDecoderSingleChunk(CorruptICOWithBadBMPHeightTestCase());
-}
-
-TEST_F(ImageDecoders, CorruptICOWithBadBMPHeightMultiChunk)
-{
- CheckDecoderMultiChunk(CorruptICOWithBadBMPHeightTestCase());
-}
-
-TEST_F(ImageDecoders, AnimatedGIFWithFRAME_FIRST)
-{
- ImageTestCase testCase = GreenFirstFrameAnimatedGIFTestCase();
-
- // Verify that we can decode this test case and retrieve the first frame using
- // imgIContainer::FRAME_FIRST. This ensures that we correctly trigger a
- // single-frame decode rather than an animated decode when
- // imgIContainer::FRAME_FIRST is requested.
-
- // Create an image.
- RefPtr<Image> image =
- ImageFactory::CreateAnonymousImage(nsDependentCString(testCase.mMimeType));
- ASSERT_TRUE(!image->HasError());
-
- nsCOMPtr<nsIInputStream> inputStream = LoadFile(testCase.mPath);
- ASSERT_TRUE(inputStream);
-
- // Figure out how much data we have.
- uint64_t length;
- nsresult rv = inputStream->Available(&length);
- ASSERT_TRUE(NS_SUCCEEDED(rv));
-
- // Write the data into the image.
- rv = image->OnImageDataAvailable(nullptr, nullptr, inputStream, 0,
- static_cast<uint32_t>(length));
- ASSERT_TRUE(NS_SUCCEEDED(rv));
-
- // Let the image know we've sent all the data.
- rv = image->OnImageDataComplete(nullptr, nullptr, NS_OK, true);
- ASSERT_TRUE(NS_SUCCEEDED(rv));
-
- RefPtr<ProgressTracker> tracker = image->GetProgressTracker();
- tracker->SyncNotifyProgress(FLAG_LOAD_COMPLETE);
-
- // Lock the image so its surfaces don't disappear during the test.
- image->LockImage();
-
- // Use GetFrame() to force a sync decode of the image, specifying FRAME_FIRST
- // to ensure that we don't get an animated decode.
- RefPtr<SourceSurface> surface =
- image->GetFrame(imgIContainer::FRAME_FIRST,
- imgIContainer::FLAG_SYNC_DECODE);
-
- // Ensure that the image's metadata meets our expectations.
- IntSize imageSize(0, 0);
- rv = image->GetWidth(&imageSize.width);
- EXPECT_TRUE(NS_SUCCEEDED(rv));
- rv = image->GetHeight(&imageSize.height);
- EXPECT_TRUE(NS_SUCCEEDED(rv));
-
- EXPECT_EQ(testCase.mSize.width, imageSize.width);
- EXPECT_EQ(testCase.mSize.height, imageSize.height);
-
- Progress imageProgress = tracker->GetProgress();
-
- EXPECT_TRUE(bool(imageProgress & FLAG_HAS_TRANSPARENCY) == false);
- EXPECT_TRUE(bool(imageProgress & FLAG_IS_ANIMATED) == true);
-
- // Ensure that we decoded the static version of the image.
- {
- LookupResult result =
- SurfaceCache::Lookup(ImageKey(image.get()),
- RasterSurfaceKey(imageSize,
- DefaultSurfaceFlags(),
- PlaybackType::eStatic));
- ASSERT_EQ(MatchType::EXACT, result.Type());
- EXPECT_TRUE(bool(result.Surface()));
- }
-
- // Ensure that we didn't decode the animated version of the image.
- {
- LookupResult result =
- SurfaceCache::Lookup(ImageKey(image.get()),
- RasterSurfaceKey(imageSize,
- DefaultSurfaceFlags(),
- PlaybackType::eAnimated));
- ASSERT_EQ(MatchType::NOT_FOUND, result.Type());
- }
-
- // Use GetFrame() to force a sync decode of the image, this time specifying
- // FRAME_CURRENT to ensure that we get an animated decode.
- RefPtr<SourceSurface> animatedSurface =
- image->GetFrame(imgIContainer::FRAME_CURRENT,
- imgIContainer::FLAG_SYNC_DECODE);
-
- // Ensure that we decoded both frames of the animated version of the image.
- {
- LookupResult result =
- SurfaceCache::Lookup(ImageKey(image.get()),
- RasterSurfaceKey(imageSize,
- DefaultSurfaceFlags(),
- PlaybackType::eAnimated));
- ASSERT_EQ(MatchType::EXACT, result.Type());
-
- EXPECT_TRUE(NS_SUCCEEDED(result.Surface().Seek(0)));
- EXPECT_TRUE(bool(result.Surface()));
-
- EXPECT_TRUE(NS_SUCCEEDED(result.Surface().Seek(1)));
- EXPECT_TRUE(bool(result.Surface()));
- }
-
- // Ensure that the static version is still around.
- {
- LookupResult result =
- SurfaceCache::Lookup(ImageKey(image.get()),
- RasterSurfaceKey(imageSize,
- DefaultSurfaceFlags(),
- PlaybackType::eStatic));
- ASSERT_EQ(MatchType::EXACT, result.Type());
- EXPECT_TRUE(bool(result.Surface()));
- }
-}
-
-TEST_F(ImageDecoders, AnimatedGIFWithFRAME_CURRENT)
-{
- ImageTestCase testCase = GreenFirstFrameAnimatedGIFTestCase();
-
- // Verify that we can decode this test case and retrieve the entire sequence
- // of frames using imgIContainer::FRAME_CURRENT. This ensures that we
- // correctly trigger an animated decode rather than a single-frame decode when
- // imgIContainer::FRAME_CURRENT is requested.
-
- // Create an image.
- RefPtr<Image> image =
- ImageFactory::CreateAnonymousImage(nsDependentCString(testCase.mMimeType));
- ASSERT_TRUE(!image->HasError());
-
- nsCOMPtr<nsIInputStream> inputStream = LoadFile(testCase.mPath);
- ASSERT_TRUE(inputStream);
-
- // Figure out how much data we have.
- uint64_t length;
- nsresult rv = inputStream->Available(&length);
- ASSERT_TRUE(NS_SUCCEEDED(rv));
-
- // Write the data into the image.
- rv = image->OnImageDataAvailable(nullptr, nullptr, inputStream, 0,
- static_cast<uint32_t>(length));
- ASSERT_TRUE(NS_SUCCEEDED(rv));
-
- // Let the image know we've sent all the data.
- rv = image->OnImageDataComplete(nullptr, nullptr, NS_OK, true);
- ASSERT_TRUE(NS_SUCCEEDED(rv));
-
- RefPtr<ProgressTracker> tracker = image->GetProgressTracker();
- tracker->SyncNotifyProgress(FLAG_LOAD_COMPLETE);
-
- // Lock the image so its surfaces don't disappear during the test.
- image->LockImage();
-
- // Use GetFrame() to force a sync decode of the image, specifying
- // FRAME_CURRENT to ensure we get an animated decode.
- RefPtr<SourceSurface> surface =
- image->GetFrame(imgIContainer::FRAME_CURRENT,
- imgIContainer::FLAG_SYNC_DECODE);
-
- // Ensure that the image's metadata meets our expectations.
- IntSize imageSize(0, 0);
- rv = image->GetWidth(&imageSize.width);
- EXPECT_TRUE(NS_SUCCEEDED(rv));
- rv = image->GetHeight(&imageSize.height);
- EXPECT_TRUE(NS_SUCCEEDED(rv));
-
- EXPECT_EQ(testCase.mSize.width, imageSize.width);
- EXPECT_EQ(testCase.mSize.height, imageSize.height);
-
- Progress imageProgress = tracker->GetProgress();
-
- EXPECT_TRUE(bool(imageProgress & FLAG_HAS_TRANSPARENCY) == false);
- EXPECT_TRUE(bool(imageProgress & FLAG_IS_ANIMATED) == true);
-
- // Ensure that we decoded both frames of the animated version of the image.
- {
- LookupResult result =
- SurfaceCache::Lookup(ImageKey(image.get()),
- RasterSurfaceKey(imageSize,
- DefaultSurfaceFlags(),
- PlaybackType::eAnimated));
- ASSERT_EQ(MatchType::EXACT, result.Type());
-
- EXPECT_TRUE(NS_SUCCEEDED(result.Surface().Seek(0)));
- EXPECT_TRUE(bool(result.Surface()));
-
- EXPECT_TRUE(NS_SUCCEEDED(result.Surface().Seek(1)));
- EXPECT_TRUE(bool(result.Surface()));
- }
-
- // Ensure that we didn't decode the static version of the image.
- {
- LookupResult result =
- SurfaceCache::Lookup(ImageKey(image.get()),
- RasterSurfaceKey(imageSize,
- DefaultSurfaceFlags(),
- PlaybackType::eStatic));
- ASSERT_EQ(MatchType::NOT_FOUND, result.Type());
- }
-
- // Use GetFrame() to force a sync decode of the image, this time specifying
- // FRAME_FIRST to ensure that we get a single-frame decode.
- RefPtr<SourceSurface> animatedSurface =
- image->GetFrame(imgIContainer::FRAME_FIRST,
- imgIContainer::FLAG_SYNC_DECODE);
-
- // Ensure that we decoded the static version of the image.
- {
- LookupResult result =
- SurfaceCache::Lookup(ImageKey(image.get()),
- RasterSurfaceKey(imageSize,
- DefaultSurfaceFlags(),
- PlaybackType::eStatic));
- ASSERT_EQ(MatchType::EXACT, result.Type());
- EXPECT_TRUE(bool(result.Surface()));
- }
-
- // Ensure that both frames of the animated version are still around.
- {
- LookupResult result =
- SurfaceCache::Lookup(ImageKey(image.get()),
- RasterSurfaceKey(imageSize,
- DefaultSurfaceFlags(),
- PlaybackType::eAnimated));
- ASSERT_EQ(MatchType::EXACT, result.Type());
-
- EXPECT_TRUE(NS_SUCCEEDED(result.Surface().Seek(0)));
- EXPECT_TRUE(bool(result.Surface()));
-
- EXPECT_TRUE(NS_SUCCEEDED(result.Surface().Seek(1)));
- EXPECT_TRUE(bool(result.Surface()));
- }
-}
-
-TEST_F(ImageDecoders, AnimatedGIFWithExtraImageSubBlocks)
-{
- ImageTestCase testCase = ExtraImageSubBlocksAnimatedGIFTestCase();
-
- // Verify that we can decode this test case and get two frames, even though
- // there are extra image sub blocks between the first and second frame. The
- // extra data shouldn't confuse the decoder or cause the decode to fail.
-
- // Create an image.
- RefPtr<Image> image =
- ImageFactory::CreateAnonymousImage(nsDependentCString(testCase.mMimeType));
- ASSERT_TRUE(!image->HasError());
-
- nsCOMPtr<nsIInputStream> inputStream = LoadFile(testCase.mPath);
- ASSERT_TRUE(inputStream);
-
- // Figure out how much data we have.
- uint64_t length;
- nsresult rv = inputStream->Available(&length);
- ASSERT_TRUE(NS_SUCCEEDED(rv));
-
- // Write the data into the image.
- rv = image->OnImageDataAvailable(nullptr, nullptr, inputStream, 0,
- static_cast<uint32_t>(length));
- ASSERT_TRUE(NS_SUCCEEDED(rv));
-
- // Let the image know we've sent all the data.
- rv = image->OnImageDataComplete(nullptr, nullptr, NS_OK, true);
- ASSERT_TRUE(NS_SUCCEEDED(rv));
-
- RefPtr<ProgressTracker> tracker = image->GetProgressTracker();
- tracker->SyncNotifyProgress(FLAG_LOAD_COMPLETE);
-
- // Use GetFrame() to force a sync decode of the image.
- RefPtr<SourceSurface> surface =
- image->GetFrame(imgIContainer::FRAME_CURRENT,
- imgIContainer::FLAG_SYNC_DECODE);
-
- // Ensure that the image's metadata meets our expectations.
- IntSize imageSize(0, 0);
- rv = image->GetWidth(&imageSize.width);
- EXPECT_TRUE(NS_SUCCEEDED(rv));
- rv = image->GetHeight(&imageSize.height);
- EXPECT_TRUE(NS_SUCCEEDED(rv));
-
- EXPECT_EQ(testCase.mSize.width, imageSize.width);
- EXPECT_EQ(testCase.mSize.height, imageSize.height);
-
- Progress imageProgress = tracker->GetProgress();
-
- EXPECT_TRUE(bool(imageProgress & FLAG_HAS_TRANSPARENCY) == false);
- EXPECT_TRUE(bool(imageProgress & FLAG_IS_ANIMATED) == true);
-
- // Ensure that we decoded both frames of the image.
- LookupResult result =
- SurfaceCache::Lookup(ImageKey(image.get()),
- RasterSurfaceKey(imageSize,
- DefaultSurfaceFlags(),
- PlaybackType::eAnimated));
- ASSERT_EQ(MatchType::EXACT, result.Type());
-
- EXPECT_TRUE(NS_SUCCEEDED(result.Surface().Seek(0)));
- EXPECT_TRUE(bool(result.Surface()));
-
- EXPECT_TRUE(NS_SUCCEEDED(result.Surface().Seek(1)));
- EXPECT_TRUE(bool(result.Surface()));
-}
-
-TEST_F(ImageDecoders, TruncatedSmallGIFSingleChunk)
-{
- CheckDecoderSingleChunk(TruncatedSmallGIFTestCase());
-}
diff --git a/image/test/gtest/TestDeinterlacingFilter.cpp b/image/test/gtest/TestDeinterlacingFilter.cpp
deleted file mode 100644
index 82637bbf71..0000000000
--- a/image/test/gtest/TestDeinterlacingFilter.cpp
+++ /dev/null
@@ -1,672 +0,0 @@
-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim: set ts=8 sts=2 et sw=2 tw=80: */
-/* 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/. */
-
-#include "gtest/gtest.h"
-
-#include "mozilla/gfx/2D.h"
-#include "Common.h"
-#include "Decoder.h"
-#include "DecoderFactory.h"
-#include "SourceBuffer.h"
-#include "SurfaceFilters.h"
-#include "SurfacePipe.h"
-
-using namespace mozilla;
-using namespace mozilla::gfx;
-using namespace mozilla::image;
-
-template <typename Func> void
-WithDeinterlacingFilter(const IntSize& aSize,
- bool aProgressiveDisplay,
- Func aFunc)
-{
- RefPtr<Decoder> decoder = CreateTrivialDecoder();
- ASSERT_TRUE(bool(decoder));
-
- WithFilterPipeline(decoder, Forward<Func>(aFunc),
- DeinterlacingConfig<uint32_t> { aProgressiveDisplay },
- SurfaceConfig { decoder, aSize,
- SurfaceFormat::B8G8R8A8, false });
-}
-
-template <typename Func> void
-WithPalettedDeinterlacingFilter(const IntSize& aSize,
- Func aFunc)
-{
- RefPtr<Decoder> decoder = CreateTrivialDecoder();
- ASSERT_TRUE(decoder != nullptr);
-
- WithFilterPipeline(decoder, Forward<Func>(aFunc),
- DeinterlacingConfig<uint8_t> { /* mProgressiveDisplay = */ true },
- PalettedSurfaceConfig { decoder, aSize,
- IntRect(0, 0, 100, 100),
- SurfaceFormat::B8G8R8A8, 8,
- false });
-}
-
-void
-AssertConfiguringDeinterlacingFilterFails(const IntSize& aSize)
-{
- RefPtr<Decoder> decoder = CreateTrivialDecoder();
- ASSERT_TRUE(decoder != nullptr);
-
- AssertConfiguringPipelineFails(decoder,
- DeinterlacingConfig<uint32_t> { /* mProgressiveDisplay = */ true},
- SurfaceConfig { decoder, aSize,
- SurfaceFormat::B8G8R8A8, false });
-}
-
-class ImageDeinterlacingFilter : public ::testing::Test
-{
-protected:
- AutoInitializeImageLib mInit;
-};
-
-TEST_F(ImageDeinterlacingFilter, WritePixels100_100)
-{
- WithDeinterlacingFilter(IntSize(100, 100), /* aProgressiveDisplay = */ true,
- [](Decoder* aDecoder, SurfaceFilter* aFilter) {
- CheckWritePixels(aDecoder, aFilter,
- /* aOutputRect = */ Some(IntRect(0, 0, 100, 100)),
- /* aInputRect = */ Some(IntRect(0, 0, 100, 100)));
- });
-}
-
-TEST_F(ImageDeinterlacingFilter, WritePixels99_99)
-{
- WithDeinterlacingFilter(IntSize(99, 99), /* aProgressiveDisplay = */ true,
- [](Decoder* aDecoder, SurfaceFilter* aFilter) {
- CheckWritePixels(aDecoder, aFilter,
- /* aOutputRect = */ Some(IntRect(0, 0, 99, 99)),
- /* aInputRect = */ Some(IntRect(0, 0, 99, 99)));
- });
-}
-
-TEST_F(ImageDeinterlacingFilter, WritePixels8_8)
-{
- WithDeinterlacingFilter(IntSize(8, 8), /* aProgressiveDisplay = */ true,
- [](Decoder* aDecoder, SurfaceFilter* aFilter) {
- CheckWritePixels(aDecoder, aFilter,
- /* aOutputRect = */ Some(IntRect(0, 0, 8, 8)),
- /* aInputRect = */ Some(IntRect(0, 0, 8, 8)));
- });
-}
-
-TEST_F(ImageDeinterlacingFilter, WritePixels7_7)
-{
- WithDeinterlacingFilter(IntSize(7, 7), /* aProgressiveDisplay = */ true,
- [](Decoder* aDecoder, SurfaceFilter* aFilter) {
- CheckWritePixels(aDecoder, aFilter,
- /* aOutputRect = */ Some(IntRect(0, 0, 7, 7)),
- /* aInputRect = */ Some(IntRect(0, 0, 7, 7)));
- });
-}
-
-TEST_F(ImageDeinterlacingFilter, WritePixels3_3)
-{
- WithDeinterlacingFilter(IntSize(3, 3), /* aProgressiveDisplay = */ true,
- [](Decoder* aDecoder, SurfaceFilter* aFilter) {
- CheckWritePixels(aDecoder, aFilter,
- /* aOutputRect = */ Some(IntRect(0, 0, 3, 3)),
- /* aInputRect = */ Some(IntRect(0, 0, 3, 3)));
- });
-}
-
-TEST_F(ImageDeinterlacingFilter, WritePixels1_1)
-{
- WithDeinterlacingFilter(IntSize(1, 1), /* aProgressiveDisplay = */ true,
- [](Decoder* aDecoder, SurfaceFilter* aFilter) {
- CheckWritePixels(aDecoder, aFilter,
- /* aOutputRect = */ Some(IntRect(0, 0, 1, 1)),
- /* aInputRect = */ Some(IntRect(0, 0, 1, 1)));
- });
-}
-
-TEST_F(ImageDeinterlacingFilter, PalettedWritePixels)
-{
- WithPalettedDeinterlacingFilter(IntSize(100, 100),
- [](Decoder* aDecoder, SurfaceFilter* aFilter) {
- CheckPalettedWritePixels(aDecoder, aFilter);
- });
-}
-
-TEST_F(ImageDeinterlacingFilter, WritePixelsNonProgressiveOutput51_52)
-{
- WithDeinterlacingFilter(IntSize(51, 52), /* aProgressiveDisplay = */ false,
- [](Decoder* aDecoder, SurfaceFilter* aFilter) {
- // Fill the image. The output should be green for even rows and red for odd
- // rows but we need to write the rows in the order that the deinterlacer
- // expects them.
- uint32_t count = 0;
- auto result = aFilter->WritePixels<uint32_t>([&]() {
- uint32_t row = count / 51; // Integer division.
- ++count;
-
- // Note that we use a switch statement here, even though it's quite
- // verbose, because it's useful to have the mappings between input and
- // output rows available when debugging these tests.
-
- switch (row) {
- // First pass. Output rows are positioned at 8n + 0.
- case 0: // Output row 0.
- case 1: // Output row 8.
- case 2: // Output row 16.
- case 3: // Output row 24.
- case 4: // Output row 32.
- case 5: // Output row 40.
- case 6: // Output row 48.
- return AsVariant(BGRAColor::Green().AsPixel());
-
- // Second pass. Rows are positioned at 8n + 4.
- case 7: // Output row 4.
- case 8: // Output row 12.
- case 9: // Output row 20.
- case 10: // Output row 28.
- case 11: // Output row 36.
- case 12: // Output row 44.
- return AsVariant(BGRAColor::Green().AsPixel());
-
- // Third pass. Rows are positioned at 4n + 2.
- case 13: // Output row 2.
- case 14: // Output row 6.
- case 15: // Output row 10.
- case 16: // Output row 14.
- case 17: // Output row 18.
- case 18: // Output row 22.
- case 19: // Output row 26.
- case 20: // Output row 30.
- case 21: // Output row 34.
- case 22: // Output row 38.
- case 23: // Output row 42.
- case 24: // Output row 46.
- case 25: // Output row 50.
- return AsVariant(BGRAColor::Green().AsPixel());
-
- // Fourth pass. Rows are positioned at 2n + 1.
- case 26: // Output row 1.
- case 27: // Output row 3.
- case 28: // Output row 5.
- case 29: // Output row 7.
- case 30: // Output row 9.
- case 31: // Output row 11.
- case 32: // Output row 13.
- case 33: // Output row 15.
- case 34: // Output row 17.
- case 35: // Output row 19.
- case 36: // Output row 21.
- case 37: // Output row 23.
- case 38: // Output row 25.
- case 39: // Output row 27.
- case 40: // Output row 29.
- case 41: // Output row 31.
- case 42: // Output row 33.
- case 43: // Output row 35.
- case 44: // Output row 37.
- case 45: // Output row 39.
- case 46: // Output row 41.
- case 47: // Output row 43.
- case 48: // Output row 45.
- case 49: // Output row 47.
- case 50: // Output row 49.
- case 51: // Output row 51.
- return AsVariant(BGRAColor::Red().AsPixel());
-
- default:
- MOZ_ASSERT_UNREACHABLE("Unexpected row");
- return AsVariant(BGRAColor::Transparent().AsPixel());
- }
- });
- EXPECT_EQ(WriteState::FINISHED, result);
- EXPECT_EQ(51u * 52u, count);
-
- AssertCorrectPipelineFinalState(aFilter,
- IntRect(0, 0, 51, 52),
- IntRect(0, 0, 51, 52));
-
- // Check that the generated image is correct. As mentioned above, we expect
- // even rows to be green and odd rows to be red.
- RawAccessFrameRef currentFrame = aDecoder->GetCurrentFrameRef();
- RefPtr<SourceSurface> surface = currentFrame->GetSourceSurface();
-
- for (uint32_t row = 0; row < 52; ++row) {
- EXPECT_TRUE(RowsAreSolidColor(surface, row, 1,
- row % 2 == 0 ? BGRAColor::Green()
- : BGRAColor::Red()));
- }
- });
-}
-
-TEST_F(ImageDeinterlacingFilter, WritePixelsOutput20_20)
-{
- WithDeinterlacingFilter(IntSize(20, 20), /* aProgressiveDisplay = */ true,
- [](Decoder* aDecoder, SurfaceFilter* aFilter) {
- // Fill the image. The output should be green for even rows and red for odd
- // rows but we need to write the rows in the order that the deinterlacer
- // expects them.
- uint32_t count = 0;
- auto result = aFilter->WritePixels<uint32_t>([&]() {
- uint32_t row = count / 20; // Integer division.
- ++count;
-
- // Note that we use a switch statement here, even though it's quite
- // verbose, because it's useful to have the mappings between input and
- // output rows available when debugging these tests.
-
- switch (row) {
- // First pass. Output rows are positioned at 8n + 0.
- case 0: // Output row 0.
- case 1: // Output row 8.
- case 2: // Output row 16.
- return AsVariant(BGRAColor::Green().AsPixel());
-
- // Second pass. Rows are positioned at 8n + 4.
- case 3: // Output row 4.
- case 4: // Output row 12.
- return AsVariant(BGRAColor::Green().AsPixel());
-
- // Third pass. Rows are positioned at 4n + 2.
- case 5: // Output row 2.
- case 6: // Output row 6.
- case 7: // Output row 10.
- case 8: // Output row 14.
- case 9: // Output row 18.
- return AsVariant(BGRAColor::Green().AsPixel());
-
- // Fourth pass. Rows are positioned at 2n + 1.
- case 10: // Output row 1.
- case 11: // Output row 3.
- case 12: // Output row 5.
- case 13: // Output row 7.
- case 14: // Output row 9.
- case 15: // Output row 11.
- case 16: // Output row 13.
- case 17: // Output row 15.
- case 18: // Output row 17.
- case 19: // Output row 19.
- return AsVariant(BGRAColor::Red().AsPixel());
-
- default:
- MOZ_ASSERT_UNREACHABLE("Unexpected row");
- return AsVariant(BGRAColor::Transparent().AsPixel());
- }
- });
- EXPECT_EQ(WriteState::FINISHED, result);
- EXPECT_EQ(20u * 20u, count);
-
- AssertCorrectPipelineFinalState(aFilter,
- IntRect(0, 0, 20, 20),
- IntRect(0, 0, 20, 20));
-
- // Check that the generated image is correct. As mentioned above, we expect
- // even rows to be green and odd rows to be red.
- RawAccessFrameRef currentFrame = aDecoder->GetCurrentFrameRef();
- RefPtr<SourceSurface> surface = currentFrame->GetSourceSurface();
-
- for (uint32_t row = 0; row < 20; ++row) {
- EXPECT_TRUE(RowsAreSolidColor(surface, row, 1,
- row % 2 == 0 ? BGRAColor::Green()
- : BGRAColor::Red()));
- }
- });
-}
-
-TEST_F(ImageDeinterlacingFilter, WritePixelsOutput7_7)
-{
- WithDeinterlacingFilter(IntSize(7, 7), /* aProgressiveDisplay = */ true,
- [](Decoder* aDecoder, SurfaceFilter* aFilter) {
- // Fill the image. The output should be a repeating pattern of two green
- // rows followed by two red rows but we need to write the rows in the order
- // that the deinterlacer expects them.
- uint32_t count = 0;
- auto result = aFilter->WritePixels<uint32_t>([&]() {
- uint32_t row = count / 7; // Integer division.
- ++count;
-
- switch (row) {
- // First pass. Output rows are positioned at 8n + 0.
- case 0: // Output row 0.
- return AsVariant(BGRAColor::Green().AsPixel());
-
- // Second pass. Rows are positioned at 8n + 4.
- case 1: // Output row 4.
- return AsVariant(BGRAColor::Green().AsPixel());
-
- // Third pass. Rows are positioned at 4n + 2.
- case 2: // Output row 2.
- case 3: // Output row 6.
- return AsVariant(BGRAColor::Red().AsPixel());
-
- // Fourth pass. Rows are positioned at 2n + 1.
- case 4: // Output row 1.
- return AsVariant(BGRAColor::Green().AsPixel());
-
- case 5: // Output row 3.
- return AsVariant(BGRAColor::Red().AsPixel());
-
- case 6: // Output row 5.
- return AsVariant(BGRAColor::Green().AsPixel());
-
- default:
- MOZ_ASSERT_UNREACHABLE("Unexpected row");
- return AsVariant(BGRAColor::Transparent().AsPixel());
- }
- });
- EXPECT_EQ(WriteState::FINISHED, result);
- EXPECT_EQ(7u * 7u, count);
-
- AssertCorrectPipelineFinalState(aFilter,
- IntRect(0, 0, 7, 7),
- IntRect(0, 0, 7, 7));
-
- // Check that the generated image is correct. As mentioned above, we expect
- // two green rows, followed by two red rows, then two green rows, etc.
- RawAccessFrameRef currentFrame = aDecoder->GetCurrentFrameRef();
- RefPtr<SourceSurface> surface = currentFrame->GetSourceSurface();
-
- for (uint32_t row = 0; row < 7; ++row) {
- BGRAColor color = row == 0 || row == 1 || row == 4 || row == 5
- ? BGRAColor::Green()
- : BGRAColor::Red();
- EXPECT_TRUE(RowsAreSolidColor(surface, row, 1, color));
- }
- });
-}
-
-TEST_F(ImageDeinterlacingFilter, WritePixelsOutput3_3)
-{
- WithDeinterlacingFilter(IntSize(3, 3), /* aProgressiveDisplay = */ true,
- [](Decoder* aDecoder, SurfaceFilter* aFilter) {
- // Fill the image. The output should be green, red, green in that order, but
- // we need to write the rows in the order that the deinterlacer expects
- // them.
- uint32_t count = 0;
- auto result = aFilter->WritePixels<uint32_t>([&]() {
- uint32_t row = count / 3; // Integer division.
- ++count;
-
- switch (row) {
- // First pass. Output rows are positioned at 8n + 0.
- case 0: // Output row 0.
- return AsVariant(BGRAColor::Green().AsPixel());
-
- // Second pass. Rows are positioned at 8n + 4.
- // No rows for this pass.
-
- // Third pass. Rows are positioned at 4n + 2.
- case 1: // Output row 2.
- return AsVariant(BGRAColor::Green().AsPixel());
-
- // Fourth pass. Rows are positioned at 2n + 1.
- case 2: // Output row 1.
- return AsVariant(BGRAColor::Red().AsPixel());
-
- default:
- MOZ_ASSERT_UNREACHABLE("Unexpected row");
- return AsVariant(BGRAColor::Transparent().AsPixel());
- }
- });
- EXPECT_EQ(WriteState::FINISHED, result);
- EXPECT_EQ(3u * 3u, count);
-
- AssertCorrectPipelineFinalState(aFilter,
- IntRect(0, 0, 3, 3),
- IntRect(0, 0, 3, 3));
-
- // Check that the generated image is correct. As mentioned above, we expect
- // green, red, green in that order.
- RawAccessFrameRef currentFrame = aDecoder->GetCurrentFrameRef();
- RefPtr<SourceSurface> surface = currentFrame->GetSourceSurface();
-
- for (uint32_t row = 0; row < 3; ++row) {
- EXPECT_TRUE(RowsAreSolidColor(surface, row, 1,
- row == 0 || row == 2 ? BGRAColor::Green()
- : BGRAColor::Red()));
- }
- });
-}
-
-TEST_F(ImageDeinterlacingFilter, WritePixelsOutput1_1)
-{
- WithDeinterlacingFilter(IntSize(1, 1), /* aProgressiveDisplay = */ true,
- [](Decoder* aDecoder, SurfaceFilter* aFilter) {
- // Fill the image. The output should be a single red row.
- uint32_t count = 0;
- auto result = aFilter->WritePixels<uint32_t>([&]() {
- ++count;
- return AsVariant(BGRAColor::Red().AsPixel());
- });
- EXPECT_EQ(WriteState::FINISHED, result);
- EXPECT_EQ(1u, count);
-
- AssertCorrectPipelineFinalState(aFilter,
- IntRect(0, 0, 1, 1),
- IntRect(0, 0, 1, 1));
-
- // Check that the generated image is correct. As mentioned above, we expect
- // a single red row.
- RawAccessFrameRef currentFrame = aDecoder->GetCurrentFrameRef();
- RefPtr<SourceSurface> surface = currentFrame->GetSourceSurface();
-
- EXPECT_TRUE(RowsAreSolidColor(surface, 0, 1, BGRAColor::Red()));
- });
-}
-
-void
-WriteRowAndCheckInterlacerOutput(Decoder* aDecoder,
- SurfaceFilter* aFilter,
- BGRAColor aColor,
- WriteState aNextState,
- IntRect aInvalidRect,
- uint32_t aFirstHaeberliRow,
- uint32_t aLastHaeberliRow)
-{
- uint32_t count = 0;
-
- auto result = aFilter->WritePixels<uint32_t>([&]() -> NextPixel<uint32_t> {
- if (count < 7) {
- ++count;
- return AsVariant(aColor.AsPixel());
- }
- return AsVariant(WriteState::NEED_MORE_DATA);
- });
-
- EXPECT_EQ(aNextState, result);
- EXPECT_EQ(7u, count);
-
- // Assert that we got the expected invalidation region.
- Maybe<SurfaceInvalidRect> invalidRect = aFilter->TakeInvalidRect();
- EXPECT_TRUE(invalidRect.isSome());
- EXPECT_EQ(aInvalidRect, invalidRect->mInputSpaceRect);
- EXPECT_EQ(aInvalidRect, invalidRect->mOutputSpaceRect);
-
- // Check that the portion of the image generated so far is correct. The rows
- // from aFirstHaeberliRow to aLastHaeberliRow should be filled with aColor.
- // Note that this is not the same as the set of rows in aInvalidRect, because
- // after writing a row the deinterlacer seeks to the next row to write, which
- // may involve copying previously-written rows in the buffer to the output
- // even though they don't change in this pass.
- RawAccessFrameRef currentFrame = aDecoder->GetCurrentFrameRef();
- RefPtr<SourceSurface> surface = currentFrame->GetSourceSurface();
-
- for (uint32_t row = aFirstHaeberliRow; row <= aLastHaeberliRow; ++row) {
- EXPECT_TRUE(RowsAreSolidColor(surface, row, 1, aColor));
- }
-}
-
-TEST_F(ImageDeinterlacingFilter, WritePixelsIntermediateOutput7_7)
-{
- WithDeinterlacingFilter(IntSize(7, 7), /* aProgressiveDisplay = */ true,
- [](Decoder* aDecoder, SurfaceFilter* aFilter) {
- // Fill the image. The output should be a repeating pattern of two green
- // rows followed by two red rows but we need to write the rows in the order
- // that the deinterlacer expects them.
-
- // First pass. Output rows are positioned at 8n + 0.
-
- // Output row 0. The invalid rect is the entire image because this is the
- // end of the first pass.
- WriteRowAndCheckInterlacerOutput(aDecoder, aFilter, BGRAColor::Green(),
- WriteState::NEED_MORE_DATA,
- IntRect(0, 0, 7, 7), 0, 4);
-
- // Second pass. Rows are positioned at 8n + 4.
-
- // Output row 4. The invalid rect is the entire image because this is the
- // end of the second pass.
- WriteRowAndCheckInterlacerOutput(aDecoder, aFilter, BGRAColor::Green(),
- WriteState::NEED_MORE_DATA,
- IntRect(0, 0, 7, 7), 1, 4);
-
- // Third pass. Rows are positioned at 4n + 2.
-
- // Output row 2. The invalid rect contains the Haeberli rows for this output
- // row (rows 2 and 3) as well as the rows that we copy from previous passes
- // when seeking to the next output row (rows 4 and 5).
- WriteRowAndCheckInterlacerOutput(aDecoder, aFilter, BGRAColor::Red(),
- WriteState::NEED_MORE_DATA,
- IntRect(0, 2, 7, 4), 2, 3);
-
- // Output row 6. The invalid rect is the entire image because this is the
- // end of the third pass.
- WriteRowAndCheckInterlacerOutput(aDecoder, aFilter, BGRAColor::Red(),
- WriteState::NEED_MORE_DATA,
- IntRect(0, 0, 7, 7), 6, 6);
-
- // Fourth pass. Rows are positioned at 2n + 1.
-
- // Output row 1. The invalid rect contains the Haeberli rows for this output
- // row (just row 1) as well as the rows that we copy from previous passes
- // when seeking to the next output row (row 2).
- WriteRowAndCheckInterlacerOutput(aDecoder, aFilter, BGRAColor::Green(),
- WriteState::NEED_MORE_DATA,
- IntRect(0, 1, 7, 2), 1, 1);
-
- // Output row 3. The invalid rect contains the Haeberli rows for this output
- // row (just row 3) as well as the rows that we copy from previous passes
- // when seeking to the next output row (row 4).
- WriteRowAndCheckInterlacerOutput(aDecoder, aFilter, BGRAColor::Red(),
- WriteState::NEED_MORE_DATA,
- IntRect(0, 3, 7, 2), 3, 3);
-
- // Output row 5. The invalid rect contains the Haeberli rows for this output
- // row (just row 5) as well as the rows that we copy from previous passes
- // when seeking to the next output row (row 6).
- WriteRowAndCheckInterlacerOutput(aDecoder, aFilter, BGRAColor::Green(),
- WriteState::FINISHED,
- IntRect(0, 5, 7, 2), 5, 5);
-
- // Assert that we're in the expected final state.
- EXPECT_TRUE(aFilter->IsSurfaceFinished());
- Maybe<SurfaceInvalidRect> invalidRect = aFilter->TakeInvalidRect();
- EXPECT_TRUE(invalidRect.isNothing());
-
- // Check that the generated image is correct. As mentioned above, we expect
- // two green rows, followed by two red rows, then two green rows, etc.
- RawAccessFrameRef currentFrame = aDecoder->GetCurrentFrameRef();
- RefPtr<SourceSurface> surface = currentFrame->GetSourceSurface();
-
- for (uint32_t row = 0; row < 7; ++row) {
- BGRAColor color = row == 0 || row == 1 || row == 4 || row == 5
- ? BGRAColor::Green()
- : BGRAColor::Red();
- EXPECT_TRUE(RowsAreSolidColor(surface, row, 1, color));
- }
- });
-}
-
-TEST_F(ImageDeinterlacingFilter, WritePixelsNonProgressiveIntermediateOutput7_7)
-{
- WithDeinterlacingFilter(IntSize(7, 7), /* aProgressiveDisplay = */ false,
- [](Decoder* aDecoder, SurfaceFilter* aFilter) {
- // Fill the image. The output should be a repeating pattern of two green
- // rows followed by two red rows but we need to write the rows in the order
- // that the deinterlacer expects them.
-
- // First pass. Output rows are positioned at 8n + 0.
-
- // Output row 0. The invalid rect is the entire image because this is the
- // end of the first pass.
- WriteRowAndCheckInterlacerOutput(aDecoder, aFilter, BGRAColor::Green(),
- WriteState::NEED_MORE_DATA,
- IntRect(0, 0, 7, 7), 0, 0);
-
- // Second pass. Rows are positioned at 8n + 4.
-
- // Output row 4. The invalid rect is the entire image because this is the
- // end of the second pass.
- WriteRowAndCheckInterlacerOutput(aDecoder, aFilter, BGRAColor::Green(),
- WriteState::NEED_MORE_DATA,
- IntRect(0, 0, 7, 7), 4, 4);
-
- // Third pass. Rows are positioned at 4n + 2.
-
- // Output row 2. The invalid rect contains the Haeberli rows for this output
- // row (rows 2 and 3) as well as the rows that we copy from previous passes
- // when seeking to the next output row (rows 4 and 5).
- WriteRowAndCheckInterlacerOutput(aDecoder, aFilter, BGRAColor::Red(),
- WriteState::NEED_MORE_DATA,
- IntRect(0, 2, 7, 4), 2, 2);
-
- // Output row 6. The invalid rect is the entire image because this is the
- // end of the third pass.
- WriteRowAndCheckInterlacerOutput(aDecoder, aFilter, BGRAColor::Red(),
- WriteState::NEED_MORE_DATA,
- IntRect(0, 0, 7, 7), 6, 6);
-
- // Fourth pass. Rows are positioned at 2n + 1.
-
- // Output row 1. The invalid rect contains the Haeberli rows for this output
- // row (just row 1) as well as the rows that we copy from previous passes
- // when seeking to the next output row (row 2).
- WriteRowAndCheckInterlacerOutput(aDecoder, aFilter, BGRAColor::Green(),
- WriteState::NEED_MORE_DATA,
- IntRect(0, 1, 7, 2), 1, 1);
-
- // Output row 3. The invalid rect contains the Haeberli rows for this output
- // row (just row 3) as well as the rows that we copy from previous passes
- // when seeking to the next output row (row 4).
- WriteRowAndCheckInterlacerOutput(aDecoder, aFilter, BGRAColor::Red(),
- WriteState::NEED_MORE_DATA,
- IntRect(0, 3, 7, 2), 3, 3);
-
- // Output row 5. The invalid rect contains the Haeberli rows for this output
- // row (just row 5) as well as the rows that we copy from previous passes
- // when seeking to the next output row (row 6).
- WriteRowAndCheckInterlacerOutput(aDecoder, aFilter, BGRAColor::Green(),
- WriteState::FINISHED,
- IntRect(0, 5, 7, 2), 5, 5);
-
- // Assert that we're in the expected final state.
- EXPECT_TRUE(aFilter->IsSurfaceFinished());
- Maybe<SurfaceInvalidRect> invalidRect = aFilter->TakeInvalidRect();
- EXPECT_TRUE(invalidRect.isNothing());
-
- // Check that the generated image is correct. As mentioned above, we expect
- // two green rows, followed by two red rows, then two green rows, etc.
- RawAccessFrameRef currentFrame = aDecoder->GetCurrentFrameRef();
- RefPtr<SourceSurface> surface = currentFrame->GetSourceSurface();
-
- for (uint32_t row = 0; row < 7; ++row) {
- BGRAColor color = row == 0 || row == 1 || row == 4 || row == 5
- ? BGRAColor::Green()
- : BGRAColor::Red();
- EXPECT_TRUE(RowsAreSolidColor(surface, row, 1, color));
- }
- });
-}
-
-
-TEST_F(ImageDeinterlacingFilter, DeinterlacingFailsFor0_0)
-{
- // A 0x0 input size is invalid, so configuration should fail.
- AssertConfiguringDeinterlacingFilterFails(IntSize(0, 0));
-}
-
-TEST_F(ImageDeinterlacingFilter, DeinterlacingFailsForMinus1_Minus1)
-{
- // A negative input size is invalid, so configuration should fail.
- AssertConfiguringDeinterlacingFilterFails(IntSize(-1, -1));
-}
diff --git a/image/test/gtest/TestDownscalingFilter.cpp b/image/test/gtest/TestDownscalingFilter.cpp
deleted file mode 100644
index d7aa0ead2a..0000000000
--- a/image/test/gtest/TestDownscalingFilter.cpp
+++ /dev/null
@@ -1,231 +0,0 @@
-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim: set ts=8 sts=2 et sw=2 tw=80: */
-/* 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/. */
-
-#include "gtest/gtest.h"
-
-#include "mozilla/gfx/2D.h"
-#include "Common.h"
-#include "Decoder.h"
-#include "DecoderFactory.h"
-#include "SourceBuffer.h"
-#include "SurfaceFilters.h"
-#include "SurfacePipe.h"
-
-using namespace mozilla;
-using namespace mozilla::gfx;
-using namespace mozilla::image;
-
-template <typename Func> void
-WithDownscalingFilter(const IntSize& aInputSize,
- const IntSize& aOutputSize,
- Func aFunc)
-{
- RefPtr<Decoder> decoder = CreateTrivialDecoder();
- ASSERT_TRUE(decoder != nullptr);
-
- WithFilterPipeline(decoder, Forward<Func>(aFunc),
- DownscalingConfig { aInputSize,
- SurfaceFormat::B8G8R8A8 },
- SurfaceConfig { decoder, aOutputSize,
- SurfaceFormat::B8G8R8A8, false });
-}
-
-void
-AssertConfiguringDownscalingFilterFails(const IntSize& aInputSize,
- const IntSize& aOutputSize)
-{
- RefPtr<Decoder> decoder = CreateTrivialDecoder();
- ASSERT_TRUE(decoder != nullptr);
-
- AssertConfiguringPipelineFails(decoder,
- DownscalingConfig { aInputSize,
- SurfaceFormat::B8G8R8A8 },
- SurfaceConfig { decoder, aOutputSize,
- SurfaceFormat::B8G8R8A8, false });
-}
-
-TEST(ImageDownscalingFilter, WritePixels100_100to99_99)
-{
- WithDownscalingFilter(IntSize(100, 100), IntSize(99, 99),
- [](Decoder* aDecoder, SurfaceFilter* aFilter) {
- CheckWritePixels(aDecoder, aFilter,
- /* aOutputRect = */ Some(IntRect(0, 0, 99, 99)));
- });
-}
-
-TEST(ImageDownscalingFilter, WritePixels100_100to33_33)
-{
- WithDownscalingFilter(IntSize(100, 100), IntSize(33, 33),
- [](Decoder* aDecoder, SurfaceFilter* aFilter) {
- CheckWritePixels(aDecoder, aFilter,
- /* aOutputRect = */ Some(IntRect(0, 0, 33, 33)));
- });
-}
-
-TEST(ImageDownscalingFilter, WritePixels100_100to1_1)
-{
- WithDownscalingFilter(IntSize(100, 100), IntSize(1, 1),
- [](Decoder* aDecoder, SurfaceFilter* aFilter) {
- CheckWritePixels(aDecoder, aFilter,
- /* aOutputRect = */ Some(IntRect(0, 0, 1, 1)));
- });
-}
-
-TEST(ImageDownscalingFilter, WritePixels100_100to33_99)
-{
- WithDownscalingFilter(IntSize(100, 100), IntSize(33, 99),
- [](Decoder* aDecoder, SurfaceFilter* aFilter) {
- CheckWritePixels(aDecoder, aFilter,
- /* aOutputRect = */ Some(IntRect(0, 0, 33, 99)));
- });
-}
-
-TEST(ImageDownscalingFilter, WritePixels100_100to99_33)
-{
- WithDownscalingFilter(IntSize(100, 100), IntSize(99, 33),
- [](Decoder* aDecoder, SurfaceFilter* aFilter) {
- CheckWritePixels(aDecoder, aFilter,
- /* aOutputRect = */ Some(IntRect(0, 0, 99, 33)));
- });
-}
-
-TEST(ImageDownscalingFilter, WritePixels100_100to99_1)
-{
- WithDownscalingFilter(IntSize(100, 100), IntSize(99, 1),
- [](Decoder* aDecoder, SurfaceFilter* aFilter) {
- CheckWritePixels(aDecoder, aFilter,
- /* aOutputRect = */ Some(IntRect(0, 0, 99, 1)));
- });
-}
-
-TEST(ImageDownscalingFilter, WritePixels100_100to1_99)
-{
- WithDownscalingFilter(IntSize(100, 100), IntSize(1, 99),
- [](Decoder* aDecoder, SurfaceFilter* aFilter) {
- CheckWritePixels(aDecoder, aFilter,
- /* aOutputRect = */ Some(IntRect(0, 0, 1, 99)));
- });
-}
-
-TEST(ImageDownscalingFilter, DownscalingFailsFor100_100to101_101)
-{
- // Upscaling is disallowed.
- AssertConfiguringDownscalingFilterFails(IntSize(100, 100), IntSize(101, 101));
-}
-
-TEST(ImageDownscalingFilter, DownscalingFailsFor100_100to100_100)
-{
- // "Scaling" to the same size is disallowed.
- AssertConfiguringDownscalingFilterFails(IntSize(100, 100), IntSize(100, 100));
-}
-
-TEST(ImageDownscalingFilter, DownscalingFailsFor0_0toMinus1_Minus1)
-{
- // A 0x0 input size is disallowed.
- AssertConfiguringDownscalingFilterFails(IntSize(0, 0), IntSize(-1, -1));
-}
-
-TEST(ImageDownscalingFilter, DownscalingFailsForMinus1_Minus1toMinus2_Minus2)
-{
- // A negative input size is disallowed.
- AssertConfiguringDownscalingFilterFails(IntSize(-1, -1), IntSize(-2, -2));
-}
-
-TEST(ImageDownscalingFilter, DownscalingFailsFor100_100to0_0)
-{
- // A 0x0 output size is disallowed.
- AssertConfiguringDownscalingFilterFails(IntSize(100, 100), IntSize(0, 0));
-}
-
-TEST(ImageDownscalingFilter, DownscalingFailsFor100_100toMinus1_Minus1)
-{
- // A negative output size is disallowed.
- AssertConfiguringDownscalingFilterFails(IntSize(100, 100), IntSize(-1, -1));
-}
-
-TEST(ImageDownscalingFilter, WritePixelsOutput100_100to20_20)
-{
- WithDownscalingFilter(IntSize(100, 100), IntSize(20, 20),
- [](Decoder* aDecoder, SurfaceFilter* aFilter) {
- // Fill the image. It consists of 25 lines of green, followed by 25 lines of
- // red, followed by 25 lines of green, followed by 25 more lines of red.
- uint32_t count = 0;
- auto result = aFilter->WritePixels<uint32_t>([&]() -> NextPixel<uint32_t> {
- uint32_t color = (count <= 25 * 100) || (count > 50 * 100 && count <= 75 * 100)
- ? BGRAColor::Green().AsPixel()
- : BGRAColor::Red().AsPixel();
- ++count;
- return AsVariant(color);
- });
- EXPECT_EQ(WriteState::FINISHED, result);
- EXPECT_EQ(100u * 100u, count);
-
- AssertCorrectPipelineFinalState(aFilter,
- IntRect(0, 0, 100, 100),
- IntRect(0, 0, 20, 20));
-
- // Check that the generated image is correct. Note that we skip rows near
- // the transitions between colors, since the downscaler does not produce a
- // sharp boundary at these points. Even some of the rows we test need a
- // small amount of fuzz; this is just the nature of Lanczos downscaling.
- RawAccessFrameRef currentFrame = aDecoder->GetCurrentFrameRef();
- RefPtr<SourceSurface> surface = currentFrame->GetSourceSurface();
- EXPECT_TRUE(RowsAreSolidColor(surface, 0, 4, BGRAColor::Green(), /* aFuzz = */ 2));
- EXPECT_TRUE(RowsAreSolidColor(surface, 6, 3, BGRAColor::Red(), /* aFuzz = */ 3));
- EXPECT_TRUE(RowsAreSolidColor(surface, 11, 3, BGRAColor::Green(), /* aFuzz = */ 3));
- EXPECT_TRUE(RowsAreSolidColor(surface, 16, 4, BGRAColor::Red(), /* aFuzz = */ 3));
- });
-}
-
-TEST(ImageDownscalingFilter, WritePixelsOutput100_100to10_20)
-{
- WithDownscalingFilter(IntSize(100, 100), IntSize(10, 20),
- [](Decoder* aDecoder, SurfaceFilter* aFilter) {
- // Fill the image. It consists of 25 lines of green, followed by 25 lines of
- // red, followed by 25 lines of green, followed by 25 more lines of red.
- uint32_t count = 0;
- auto result = aFilter->WritePixels<uint32_t>([&]() -> NextPixel<uint32_t> {
- uint32_t color = (count <= 25 * 100) || (count > 50 * 100 && count <= 75 * 100)
- ? BGRAColor::Green().AsPixel()
- : BGRAColor::Red().AsPixel();
- ++count;
- return AsVariant(color);
- });
- EXPECT_EQ(WriteState::FINISHED, result);
- EXPECT_EQ(100u * 100u, count);
-
- AssertCorrectPipelineFinalState(aFilter,
- IntRect(0, 0, 100, 100),
- IntRect(0, 0, 10, 20));
-
- // Check that the generated image is correct. Note that we skip rows near
- // the transitions between colors, since the downscaler does not produce a
- // sharp boundary at these points. Even some of the rows we test need a
- // small amount of fuzz; this is just the nature of Lanczos downscaling.
- RawAccessFrameRef currentFrame = aDecoder->GetCurrentFrameRef();
- RefPtr<SourceSurface> surface = currentFrame->GetSourceSurface();
- EXPECT_TRUE(RowsAreSolidColor(surface, 0, 4, BGRAColor::Green(), /* aFuzz = */ 2));
- EXPECT_TRUE(RowsAreSolidColor(surface, 6, 3, BGRAColor::Red(), /* aFuzz = */ 3));
- EXPECT_TRUE(RowsAreSolidColor(surface, 11, 3, BGRAColor::Green(), /* aFuzz = */ 3));
- EXPECT_TRUE(RowsAreSolidColor(surface, 16, 4, BGRAColor::Red(), /* aFuzz = */ 3));
- });
-}
-
-TEST(ImageDownscalingFilter, ConfiguringPalettedDownscaleFails)
-{
- RefPtr<Decoder> decoder = CreateTrivialDecoder();
- ASSERT_TRUE(decoder != nullptr);
-
- // DownscalingFilter does not support paletted images, so configuration should
- // fail.
- AssertConfiguringPipelineFails(decoder,
- DownscalingConfig { IntSize(100, 100),
- SurfaceFormat::B8G8R8A8 },
- PalettedSurfaceConfig { decoder, IntSize(20, 20),
- IntRect(0, 0, 20, 20),
- SurfaceFormat::B8G8R8A8, 8,
- false });
-}
diff --git a/image/test/gtest/TestDownscalingFilterNoSkia.cpp b/image/test/gtest/TestDownscalingFilterNoSkia.cpp
deleted file mode 100644
index 80928a8809..0000000000
--- a/image/test/gtest/TestDownscalingFilterNoSkia.cpp
+++ /dev/null
@@ -1,57 +0,0 @@
-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim: set ts=8 sts=2 et sw=2 tw=80: */
-/* 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/. */
-
-#include "gtest/gtest.h"
-
-#include "mozilla/gfx/2D.h"
-#include "Decoder.h"
-#include "DecoderFactory.h"
-#include "SourceBuffer.h"
-#include "SurfacePipe.h"
-
-// We want to ensure that we're testing the non-Skia fallback version of
-// DownscalingFilter, but there are two issues:
-// (1) We don't know whether Skia is currently enabled.
-// (2) If we force disable it, the disabled version will get linked into the
-// binary and will cause the tests in TestDownscalingFilter to fail.
-// To avoid these problems, we ensure that MOZ_ENABLE_SKIA is defined when
-// including DownscalingFilter.h, and we use the preprocessor to redefine the
-// DownscalingFilter class to DownscalingFilterNoSkia.
-
-#define DownscalingFilter DownscalingFilterNoSkia
-
-#ifdef MOZ_ENABLE_SKIA
-
-#undef MOZ_ENABLE_SKIA
-#include "Common.h"
-#include "DownscalingFilter.h"
-#define MOZ_ENABLE_SKIA
-
-#else
-
-#include "Common.h"
-#include "DownscalingFilter.h"
-
-#endif
-
-#undef DownscalingFilter
-
-using namespace mozilla;
-using namespace mozilla::gfx;
-using namespace mozilla::image;
-
-TEST(ImageDownscalingFilter, NoSkia)
-{
- RefPtr<Decoder> decoder = CreateTrivialDecoder();
- ASSERT_TRUE(bool(decoder));
-
- // Configuring a DownscalingFilter should fail without Skia.
- AssertConfiguringPipelineFails(decoder,
- DownscalingConfig { IntSize(100, 100),
- SurfaceFormat::B8G8R8A8 },
- SurfaceConfig { decoder, IntSize(50, 50),
- SurfaceFormat::B8G8R8A8, false });
-}
diff --git a/image/test/gtest/TestLoader.cpp b/image/test/gtest/TestLoader.cpp
deleted file mode 100644
index 5551f3f053..0000000000
--- a/image/test/gtest/TestLoader.cpp
+++ /dev/null
@@ -1,84 +0,0 @@
-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim: set ts=8 sts=2 et sw=2 tw=80: */
-/* 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/. */
-
-#include "gtest/gtest.h"
-
-#include "Common.h"
-#include "imgLoader.h"
-#include "nsMimeTypes.h"
-#include "nsString.h"
-
-using namespace mozilla;
-using namespace mozilla::image;
-
-static void
-CheckMimeType(const char* aContents, size_t aLength, const char* aExpected)
-{
- nsAutoCString detected;
- nsresult rv = imgLoader::GetMimeTypeFromContent(aContents, aLength, detected);
- if (aExpected) {
- ASSERT_TRUE(NS_SUCCEEDED(rv));
- EXPECT_TRUE(detected.EqualsASCII(aExpected));
- } else {
- ASSERT_TRUE(NS_FAILED(rv));
- EXPECT_TRUE(detected.IsEmpty());
- }
-}
-
-class ImageLoader : public ::testing::Test
-{
-protected:
- AutoInitializeImageLib mInit;
-};
-
-TEST_F(ImageLoader, DetectGIF)
-{
- const char buffer[] = "GIF87a";
- CheckMimeType(buffer, sizeof(buffer), IMAGE_GIF);
-}
-
-TEST_F(ImageLoader, DetectPNG)
-{
- const char buffer[] = "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A";
- CheckMimeType(buffer, sizeof(buffer), IMAGE_PNG);
-}
-
-TEST_F(ImageLoader, DetectJPEG)
-{
- const char buffer[] = "\xFF\xD8\xFF";
- CheckMimeType(buffer, sizeof(buffer), IMAGE_JPEG);
-}
-
-TEST_F(ImageLoader, DetectART)
-{
- const char buffer[] = "\x4A\x47\xFF\xFF\x00";
- CheckMimeType(buffer, sizeof(buffer), IMAGE_ART);
-}
-
-TEST_F(ImageLoader, DetectBMP)
-{
- const char buffer[] = "BM";
- CheckMimeType(buffer, sizeof(buffer), IMAGE_BMP);
-}
-
-TEST_F(ImageLoader, DetectICO)
-{
- const char buffer[] = "\x00\x00\x01\x00";
- CheckMimeType(buffer, sizeof(buffer), IMAGE_ICO);
-}
-
-TEST_F(ImageLoader, DetectWebP)
-{
- const char buffer[] = "RIFF\xFF\xFF\xFF\xFFWEBPVP8L";
- CheckMimeType(buffer, sizeof(buffer), IMAGE_WEBP);
-}
-
-TEST_F(ImageLoader, DetectNone)
-{
- const char buffer[] = "abcdefghijklmnop";
- CheckMimeType(buffer, sizeof(buffer), nullptr);
-}
-
diff --git a/image/test/gtest/TestMetadata.cpp b/image/test/gtest/TestMetadata.cpp
deleted file mode 100644
index 9f3a648988..0000000000
--- a/image/test/gtest/TestMetadata.cpp
+++ /dev/null
@@ -1,255 +0,0 @@
-/* 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/. */
-
-#include "gtest/gtest.h"
-
-#include "Common.h"
-#include "Decoder.h"
-#include "DecoderFactory.h"
-#include "decoders/nsBMPDecoder.h"
-#include "IDecodingTask.h"
-#include "imgIContainer.h"
-#include "imgITools.h"
-#include "ImageFactory.h"
-#include "mozilla/gfx/2D.h"
-#include "nsComponentManagerUtils.h"
-#include "nsCOMPtr.h"
-#include "nsIInputStream.h"
-#include "nsIRunnable.h"
-#include "nsIThread.h"
-#include "mozilla/RefPtr.h"
-#include "nsStreamUtils.h"
-#include "nsString.h"
-#include "nsThreadUtils.h"
-#include "ProgressTracker.h"
-#include "SourceBuffer.h"
-
-using namespace mozilla;
-using namespace mozilla::gfx;
-using namespace mozilla::image;
-
-enum class BMPWithinICO
-{
- NO,
- YES
-};
-
-static void
-CheckMetadata(const ImageTestCase& aTestCase,
- BMPWithinICO aBMPWithinICO = BMPWithinICO::NO)
-{
- nsCOMPtr<nsIInputStream> inputStream = LoadFile(aTestCase.mPath);
- ASSERT_TRUE(inputStream != nullptr);
-
- // Figure out how much data we have.
- uint64_t length;
- nsresult rv = inputStream->Available(&length);
- ASSERT_TRUE(NS_SUCCEEDED(rv));
-
- // Write the data into a SourceBuffer.
- NotNull<RefPtr<SourceBuffer>> sourceBuffer = WrapNotNull(new SourceBuffer());
- sourceBuffer->ExpectLength(length);
- rv = sourceBuffer->AppendFromInputStream(inputStream, length);
- ASSERT_TRUE(NS_SUCCEEDED(rv));
- sourceBuffer->Complete(NS_OK);
-
- // Create a metadata decoder.
- DecoderType decoderType =
- DecoderFactory::GetDecoderType(aTestCase.mMimeType);
- RefPtr<Decoder> decoder =
- DecoderFactory::CreateAnonymousMetadataDecoder(decoderType, sourceBuffer);
- ASSERT_TRUE(decoder != nullptr);
- RefPtr<IDecodingTask> task = new AnonymousDecodingTask(WrapNotNull(decoder));
-
- if (aBMPWithinICO == BMPWithinICO::YES) {
- static_cast<nsBMPDecoder*>(decoder.get())->SetIsWithinICO();
- }
-
- // Run the metadata decoder synchronously.
- task->Run();
-
- // Ensure that the metadata decoder didn't make progress it shouldn't have
- // (which would indicate that it decoded past the header of the image).
- Progress metadataProgress = decoder->TakeProgress();
- EXPECT_TRUE(0 == (metadataProgress & ~(FLAG_SIZE_AVAILABLE |
- FLAG_HAS_TRANSPARENCY |
- FLAG_IS_ANIMATED)));
-
- // If the test case is corrupt, assert what we can and return early.
- if (aTestCase.mFlags & TEST_CASE_HAS_ERROR) {
- EXPECT_TRUE(decoder->GetDecodeDone());
- EXPECT_TRUE(decoder->HasError());
- return;
- }
-
- EXPECT_TRUE(decoder->GetDecodeDone() && !decoder->HasError());
-
- // Check that we got the expected metadata.
- EXPECT_TRUE(metadataProgress & FLAG_SIZE_AVAILABLE);
-
- IntSize metadataSize = decoder->Size();
- EXPECT_EQ(aTestCase.mSize.width, metadataSize.width);
- EXPECT_EQ(aTestCase.mSize.height, metadataSize.height);
-
- bool expectTransparency = aBMPWithinICO == BMPWithinICO::YES
- ? true
- : bool(aTestCase.mFlags & TEST_CASE_IS_TRANSPARENT);
- EXPECT_EQ(expectTransparency, bool(metadataProgress & FLAG_HAS_TRANSPARENCY));
-
- EXPECT_EQ(bool(aTestCase.mFlags & TEST_CASE_IS_ANIMATED),
- bool(metadataProgress & FLAG_IS_ANIMATED));
-
- // Create a full decoder, so we can compare the result.
- decoder =
- DecoderFactory::CreateAnonymousDecoder(decoderType, sourceBuffer, Nothing(),
- DefaultSurfaceFlags());
- ASSERT_TRUE(decoder != nullptr);
- task = new AnonymousDecodingTask(WrapNotNull(decoder));
-
- if (aBMPWithinICO == BMPWithinICO::YES) {
- static_cast<nsBMPDecoder*>(decoder.get())->SetIsWithinICO();
- }
-
- // Run the full decoder synchronously.
- task->Run();
-
- EXPECT_TRUE(decoder->GetDecodeDone() && !decoder->HasError());
- Progress fullProgress = decoder->TakeProgress();
-
- // If the metadata decoder set a progress bit, the full decoder should also
- // have set the same bit.
- EXPECT_EQ(fullProgress, metadataProgress | fullProgress);
-
- // The full decoder and the metadata decoder should agree on the image's size.
- IntSize fullSize = decoder->Size();
- EXPECT_EQ(metadataSize.width, fullSize.width);
- EXPECT_EQ(metadataSize.height, fullSize.height);
-
- // We should not discover transparency during the full decode that we didn't
- // discover during the metadata decode, unless the image is animated.
- EXPECT_TRUE(!(fullProgress & FLAG_HAS_TRANSPARENCY) ||
- (metadataProgress & FLAG_HAS_TRANSPARENCY) ||
- (fullProgress & FLAG_IS_ANIMATED));
-}
-
-class ImageDecoderMetadata : public ::testing::Test
-{
-protected:
- AutoInitializeImageLib mInit;
-};
-
-TEST_F(ImageDecoderMetadata, PNG) { CheckMetadata(GreenPNGTestCase()); }
-TEST_F(ImageDecoderMetadata, TransparentPNG) { CheckMetadata(TransparentPNGTestCase()); }
-TEST_F(ImageDecoderMetadata, GIF) { CheckMetadata(GreenGIFTestCase()); }
-TEST_F(ImageDecoderMetadata, TransparentGIF) { CheckMetadata(TransparentGIFTestCase()); }
-TEST_F(ImageDecoderMetadata, JPG) { CheckMetadata(GreenJPGTestCase()); }
-TEST_F(ImageDecoderMetadata, BMP) { CheckMetadata(GreenBMPTestCase()); }
-TEST_F(ImageDecoderMetadata, ICO) { CheckMetadata(GreenICOTestCase()); }
-TEST_F(ImageDecoderMetadata, Icon) { CheckMetadata(GreenIconTestCase()); }
-
-TEST_F(ImageDecoderMetadata, AnimatedGIF)
-{
- CheckMetadata(GreenFirstFrameAnimatedGIFTestCase());
-}
-
-TEST_F(ImageDecoderMetadata, AnimatedPNG)
-{
- CheckMetadata(GreenFirstFrameAnimatedPNGTestCase());
-}
-
-TEST_F(ImageDecoderMetadata, FirstFramePaddingGIF)
-{
- CheckMetadata(FirstFramePaddingGIFTestCase());
-}
-
-TEST_F(ImageDecoderMetadata, TransparentIfWithinICOBMPNotWithinICO)
-{
- CheckMetadata(TransparentIfWithinICOBMPTestCase(TEST_CASE_DEFAULT_FLAGS),
- BMPWithinICO::NO);
-}
-
-TEST_F(ImageDecoderMetadata, TransparentIfWithinICOBMPWithinICO)
-{
- CheckMetadata(TransparentIfWithinICOBMPTestCase(TEST_CASE_IS_TRANSPARENT),
- BMPWithinICO::YES);
-}
-
-TEST_F(ImageDecoderMetadata, RLE4BMP) { CheckMetadata(RLE4BMPTestCase()); }
-TEST_F(ImageDecoderMetadata, RLE8BMP) { CheckMetadata(RLE8BMPTestCase()); }
-
-TEST_F(ImageDecoderMetadata, Corrupt) { CheckMetadata(CorruptTestCase()); }
-
-TEST_F(ImageDecoderMetadata, NoFrameDelayGIF)
-{
- CheckMetadata(NoFrameDelayGIFTestCase());
-}
-
-TEST_F(ImageDecoderMetadata, NoFrameDelayGIFFullDecode)
-{
- ImageTestCase testCase = NoFrameDelayGIFTestCase();
-
- // The previous test (NoFrameDelayGIF) verifies that we *don't* detect that
- // this test case is animated, because it has a zero frame delay for the first
- // frame. This test verifies that when we do a full decode, we detect the
- // animation at that point and successfully decode all the frames.
-
- // Create an image.
- RefPtr<Image> image =
- ImageFactory::CreateAnonymousImage(nsDependentCString(testCase.mMimeType));
- ASSERT_TRUE(!image->HasError());
-
- nsCOMPtr<nsIInputStream> inputStream = LoadFile(testCase.mPath);
- ASSERT_TRUE(inputStream != nullptr);
-
- // Figure out how much data we have.
- uint64_t length;
- nsresult rv = inputStream->Available(&length);
- ASSERT_TRUE(NS_SUCCEEDED(rv));
-
- // Write the data into the image.
- rv = image->OnImageDataAvailable(nullptr, nullptr, inputStream, 0,
- static_cast<uint32_t>(length));
- ASSERT_TRUE(NS_SUCCEEDED(rv));
-
- // Let the image know we've sent all the data.
- rv = image->OnImageDataComplete(nullptr, nullptr, NS_OK, true);
- ASSERT_TRUE(NS_SUCCEEDED(rv));
-
- RefPtr<ProgressTracker> tracker = image->GetProgressTracker();
- tracker->SyncNotifyProgress(FLAG_LOAD_COMPLETE);
-
- // Use GetFrame() to force a sync decode of the image.
- RefPtr<SourceSurface> surface =
- image->GetFrame(imgIContainer::FRAME_CURRENT,
- imgIContainer::FLAG_SYNC_DECODE);
-
- // Ensure that the image's metadata meets our expectations.
- IntSize imageSize(0, 0);
- rv = image->GetWidth(&imageSize.width);
- EXPECT_TRUE(NS_SUCCEEDED(rv));
- rv = image->GetHeight(&imageSize.height);
- EXPECT_TRUE(NS_SUCCEEDED(rv));
-
- EXPECT_EQ(testCase.mSize.width, imageSize.width);
- EXPECT_EQ(testCase.mSize.height, imageSize.height);
-
- Progress imageProgress = tracker->GetProgress();
-
- EXPECT_TRUE(bool(imageProgress & FLAG_HAS_TRANSPARENCY) == false);
- EXPECT_TRUE(bool(imageProgress & FLAG_IS_ANIMATED) == true);
-
- // Ensure that we decoded both frames of the image.
- LookupResult result =
- SurfaceCache::Lookup(ImageKey(image.get()),
- RasterSurfaceKey(imageSize,
- DefaultSurfaceFlags(),
- PlaybackType::eAnimated));
- ASSERT_EQ(MatchType::EXACT, result.Type());
-
- EXPECT_TRUE(NS_SUCCEEDED(result.Surface().Seek(0)));
- EXPECT_TRUE(bool(result.Surface()));
-
- EXPECT_TRUE(NS_SUCCEEDED(result.Surface().Seek(1)));
- EXPECT_TRUE(bool(result.Surface()));
-}
diff --git a/image/test/gtest/TestRemoveFrameRectFilter.cpp b/image/test/gtest/TestRemoveFrameRectFilter.cpp
deleted file mode 100644
index ad1f944fc4..0000000000
--- a/image/test/gtest/TestRemoveFrameRectFilter.cpp
+++ /dev/null
@@ -1,327 +0,0 @@
-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim: set ts=8 sts=2 et sw=2 tw=80: */
-/* 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/. */
-
-#include "gtest/gtest.h"
-
-#include "mozilla/gfx/2D.h"
-#include "Common.h"
-#include "Decoder.h"
-#include "DecoderFactory.h"
-#include "SourceBuffer.h"
-#include "SurfaceFilters.h"
-#include "SurfacePipe.h"
-
-using namespace mozilla;
-using namespace mozilla::gfx;
-using namespace mozilla::image;
-
-template <typename Func> void
-WithRemoveFrameRectFilter(const IntSize& aSize,
- const IntRect& aFrameRect,
- Func aFunc)
-{
- RefPtr<Decoder> decoder = CreateTrivialDecoder();
- ASSERT_TRUE(decoder != nullptr);
-
- WithFilterPipeline(decoder, Forward<Func>(aFunc),
- RemoveFrameRectConfig { aFrameRect },
- SurfaceConfig { decoder, aSize,
- SurfaceFormat::B8G8R8A8, false });
-}
-
-void
-AssertConfiguringRemoveFrameRectFilterFails(const IntSize& aSize,
- const IntRect& aFrameRect)
-{
- RefPtr<Decoder> decoder = CreateTrivialDecoder();
- ASSERT_TRUE(decoder != nullptr);
-
- AssertConfiguringPipelineFails(decoder,
- RemoveFrameRectConfig { aFrameRect },
- SurfaceConfig { decoder, aSize,
- SurfaceFormat::B8G8R8A8, false });
-}
-
-TEST(ImageRemoveFrameRectFilter, WritePixels100_100_to_0_0_100_100)
-{
- WithRemoveFrameRectFilter(IntSize(100, 100),
- IntRect(0, 0, 100, 100),
- [](Decoder* aDecoder, SurfaceFilter* aFilter) {
- CheckWritePixels(aDecoder, aFilter,
- /* aOutputRect = */ Some(IntRect(0, 0, 100, 100)),
- /* aInputRect = */ Some(IntRect(0, 0, 100, 100)),
- /* aInputWriteRect = */ Some(IntRect(0, 0, 100, 100)));
- });
-}
-
-TEST(ImageRemoveFrameRectFilter, WritePixels100_100_to_0_0_0_0)
-{
- WithRemoveFrameRectFilter(IntSize(100, 100),
- IntRect(0, 0, 0, 0),
- [](Decoder* aDecoder, SurfaceFilter* aFilter) {
- CheckWritePixels(aDecoder, aFilter,
- /* aOutputRect = */ Some(IntRect(0, 0, 100, 100)),
- /* aInputRect = */ Some(IntRect(0, 0, 100, 100)),
- /* aInputWriteRect = */ Some(IntRect(0, 0, 0, 0)),
- /* aOutputWriteRect = */ Some(IntRect(0, 0, 0, 0)));
- });
-}
-
-TEST(ImageRemoveFrameRectFilter, WritePixels100_100_to_Minus50_50_0_0)
-{
- WithRemoveFrameRectFilter(IntSize(100, 100),
- IntRect(-50, 50, 0, 0),
- [](Decoder* aDecoder, SurfaceFilter* aFilter) {
- CheckWritePixels(aDecoder, aFilter,
- /* aOutputRect = */ Some(IntRect(0, 0, 100, 100)),
- /* aInputRect = */ Some(IntRect(0, 0, 100, 100)),
- /* aInputWriteRect = */ Some(IntRect(0, 0, 0, 0)),
- /* aOutputWriteRect = */ Some(IntRect(0, 0, 0, 0)));
- });
-}
-
-TEST(ImageRemoveFrameRectFilter, WritePixels100_100_to_50_Minus50_0_0)
-{
- WithRemoveFrameRectFilter(IntSize(100, 100),
- IntRect(50, -50, 0, 0),
- [](Decoder* aDecoder, SurfaceFilter* aFilter) {
- CheckWritePixels(aDecoder, aFilter,
- /* aOutputRect = */ Some(IntRect(0, 0, 100, 100)),
- /* aInputRect = */ Some(IntRect(0, 0, 100, 100)),
- /* aInputWriteRect = */ Some(IntRect(0, 0, 0, 0)),
- /* aOutputWriteRect = */ Some(IntRect(0, 0, 0, 0)));
- });
-}
-
-TEST(ImageRemoveFrameRectFilter, WritePixels100_100_to_150_50_0_0)
-{
- WithRemoveFrameRectFilter(IntSize(100, 100),
- IntRect(150, 50, 0, 0),
- [](Decoder* aDecoder, SurfaceFilter* aFilter) {
- CheckWritePixels(aDecoder, aFilter,
- /* aOutputRect = */ Some(IntRect(0, 0, 100, 100)),
- /* aInputRect = */ Some(IntRect(0, 0, 100, 100)),
- /* aInputWriteRect = */ Some(IntRect(0, 0, 0, 0)),
- /* aOutputWriteRect = */ Some(IntRect(0, 0, 0, 0)));
- });
-}
-
-TEST(ImageRemoveFrameRectFilter, WritePixels100_100_to_50_150_0_0)
-{
- WithRemoveFrameRectFilter(IntSize(100, 100),
- IntRect(50, 150, 0, 0),
- [](Decoder* aDecoder, SurfaceFilter* aFilter) {
- CheckWritePixels(aDecoder, aFilter,
- /* aOutputRect = */ Some(IntRect(0, 0, 100, 100)),
- /* aInputRect = */ Some(IntRect(0, 0, 100, 100)),
- /* aInputWriteRect = */ Some(IntRect(0, 0, 0, 0)),
- /* aOutputWriteRect = */ Some(IntRect(0, 0, 0, 0)));
- });
-}
-
-TEST(ImageRemoveFrameRectFilter, WritePixels100_100_to_200_200_100_100)
-{
- WithRemoveFrameRectFilter(IntSize(100, 100),
- IntRect(200, 200, 100, 100),
- [](Decoder* aDecoder, SurfaceFilter* aFilter) {
- // Note that aInputRect is zero-size because RemoveFrameRectFilter ignores
- // trailing rows that don't show up in the output. (Leading rows
- // unfortunately can't be ignored.)
- CheckWritePixels(aDecoder, aFilter,
- /* aOutputRect = */ Some(IntRect(0, 0, 100, 100)),
- /* aInputRect = */ Some(IntRect(0, 0, 100, 100)),
- /* aInputWriteRect = */ Some(IntRect(0, 0, 0, 0)),
- /* aOutputWriteRect = */ Some(IntRect(0, 0, 0, 0)));
- });
-}
-
-TEST(ImageRemoveFrameRectFilter, WritePixels100_100_to_Minus200_25_100_100)
-{
- WithRemoveFrameRectFilter(IntSize(100, 100),
- IntRect(-200, 25, 100, 100),
- [](Decoder* aDecoder, SurfaceFilter* aFilter) {
- // Note that aInputRect is zero-size because RemoveFrameRectFilter ignores
- // trailing rows that don't show up in the output. (Leading rows
- // unfortunately can't be ignored.)
- CheckWritePixels(aDecoder, aFilter,
- /* aOutputRect = */ Some(IntRect(0, 0, 100, 100)),
- /* aInputRect = */ Some(IntRect(0, 0, 100, 100)),
- /* aInputWriteRect = */ Some(IntRect(0, 0, 0, 0)),
- /* aOutputWriteRect = */ Some(IntRect(0, 0, 0, 0)));
- });
-}
-
-TEST(ImageRemoveFrameRectFilter, WritePixels100_100_to_25_Minus200_100_100)
-{
- WithRemoveFrameRectFilter(IntSize(100, 100),
- IntRect(25, -200, 100, 100),
- [](Decoder* aDecoder, SurfaceFilter* aFilter) {
- // Note that aInputRect is zero-size because RemoveFrameRectFilter ignores
- // trailing rows that don't show up in the output. (Leading rows
- // unfortunately can't be ignored.)
- CheckWritePixels(aDecoder, aFilter,
- /* aOutputRect = */ Some(IntRect(0, 0, 100, 100)),
- /* aInputRect = */ Some(IntRect(0, 0, 100, 100)),
- /* aInputWriteRect = */ Some(IntRect(0, 0, 0, 0)),
- /* aOutputWriteRect = */ Some(IntRect(0, 0, 0, 0)));
- });
-}
-
-TEST(ImageRemoveFrameRectFilter, WritePixels100_100_to_200_25_100_100)
-{
- WithRemoveFrameRectFilter(IntSize(100, 100),
- IntRect(200, 25, 100, 100),
- [](Decoder* aDecoder, SurfaceFilter* aFilter) {
- // Note that aInputRect is zero-size because RemoveFrameRectFilter ignores
- // trailing rows that don't show up in the output. (Leading rows
- // unfortunately can't be ignored.)
- CheckWritePixels(aDecoder, aFilter,
- /* aOutputRect = */ Some(IntRect(0, 0, 100, 100)),
- /* aInputRect = */ Some(IntRect(0, 0, 100, 100)),
- /* aInputWriteRect = */ Some(IntRect(0, 0, 0, 0)),
- /* aOutputWriteRect = */ Some(IntRect(0, 0, 0, 0)));
- });
-}
-
-TEST(ImageRemoveFrameRectFilter, WritePixels100_100_to_25_200_100_100)
-{
- WithRemoveFrameRectFilter(IntSize(100, 100),
- IntRect(25, 200, 100, 100),
- [](Decoder* aDecoder, SurfaceFilter* aFilter) {
- // Note that aInputRect is zero-size because RemoveFrameRectFilter ignores
- // trailing rows that don't show up in the output. (Leading rows
- // unfortunately can't be ignored.)
- CheckWritePixels(aDecoder, aFilter,
- /* aOutputRect = */ Some(IntRect(0, 0, 100, 100)),
- /* aInputRect = */ Some(IntRect(0, 0, 100, 100)),
- /* aInputWriteRect = */ Some(IntRect(0, 0, 0, 0)),
- /* aOutputWriteRect = */ Some(IntRect(0, 0, 0, 0)));
- });
-}
-
-TEST(ImageRemoveFrameRectFilter, WritePixels100_100_to_Minus200_Minus200_100_100)
-{
- WithRemoveFrameRectFilter(IntSize(100, 100),
- IntRect(-200, -200, 100, 100),
- [](Decoder* aDecoder, SurfaceFilter* aFilter) {
- CheckWritePixels(aDecoder, aFilter,
- /* aOutputRect = */ Some(IntRect(0, 0, 100, 100)),
- /* aInputRect = */ Some(IntRect(0, 0, 100, 100)),
- /* aInputWriteRect = */ Some(IntRect(0, 0, 0, 0)),
- /* aOutputWriteRect = */ Some(IntRect(0, 0, 0, 0)));
- });
-}
-
-TEST(ImageRemoveFrameRectFilter, WritePixels100_100_to_Minus50_Minus50_100_100)
-{
- WithRemoveFrameRectFilter(IntSize(100, 100),
- IntRect(-50, -50, 100, 100),
- [](Decoder* aDecoder, SurfaceFilter* aFilter) {
- CheckWritePixels(aDecoder, aFilter,
- /* aOutputRect = */ Some(IntRect(0, 0, 100, 100)),
- /* aInputRect = */ Some(IntRect(0, 0, 100, 100)),
- /* aInputWriteRect = */ Some(IntRect(0, 0, 100, 100)),
- /* aOutputWriteRect = */ Some(IntRect(0, 0, 50, 50)));
- });
-}
-
-TEST(ImageRemoveFrameRectFilter, WritePixels100_100_to_Minus50_25_100_50)
-{
- WithRemoveFrameRectFilter(IntSize(100, 100),
- IntRect(-50, 25, 100, 50),
- [](Decoder* aDecoder, SurfaceFilter* aFilter) {
- CheckWritePixels(aDecoder, aFilter,
- /* aOutputRect = */ Some(IntRect(0, 0, 100, 100)),
- /* aInputRect = */ Some(IntRect(0, 0, 100, 100)),
- /* aInputWriteRect = */ Some(IntRect(0, 0, 100, 50)),
- /* aOutputWriteRect = */ Some(IntRect(0, 25, 50, 50)));
- });
-}
-
-TEST(ImageRemoveFrameRectFilter, WritePixels100_100_to_25_Minus50_50_100)
-{
- WithRemoveFrameRectFilter(IntSize(100, 100),
- IntRect(25, -50, 50, 100),
- [](Decoder* aDecoder, SurfaceFilter* aFilter) {
- CheckWritePixels(aDecoder, aFilter,
- /* aOutputRect = */ Some(IntRect(0, 0, 100, 100)),
- /* aInputRect = */ Some(IntRect(0, 0, 100, 100)),
- /* aInputWriteRect = */ Some(IntRect(0, 0, 50, 100)),
- /* aOutputWriteRect = */ Some(IntRect(25, 0, 50, 50)));
- });
-}
-
-TEST(ImageRemoveFrameRectFilter, WritePixels100_100_to_50_25_100_50)
-{
- WithRemoveFrameRectFilter(IntSize(100, 100),
- IntRect(50, 25, 100, 50),
- [](Decoder* aDecoder, SurfaceFilter* aFilter) {
- CheckWritePixels(aDecoder, aFilter,
- /* aOutputRect = */ Some(IntRect(0, 0, 100, 100)),
- /* aInputRect = */ Some(IntRect(0, 0, 100, 100)),
- /* aInputWriteRect = */ Some(IntRect(0, 0, 100, 50)),
- /* aOutputWriteRect = */ Some(IntRect(50, 25, 50, 50)));
- });
-}
-
-TEST(ImageRemoveFrameRectFilter, WritePixels100_100_to_25_50_50_100)
-{
- WithRemoveFrameRectFilter(IntSize(100, 100),
- IntRect(25, 50, 50, 100),
- [](Decoder* aDecoder, SurfaceFilter* aFilter) {
- // Note that aInputRect is 50x50 because RemoveFrameRectFilter ignores
- // trailing rows that don't show up in the output. (Leading rows
- // unfortunately can't be ignored.)
- CheckWritePixels(aDecoder, aFilter,
- /* aOutputRect = */ Some(IntRect(0, 0, 100, 100)),
- /* aInputRect = */ Some(IntRect(0, 0, 100, 100)),
- /* aInputWriteRect = */ Some(IntRect(0, 0, 50, 50)),
- /* aOutputWriteRect = */ Some(IntRect(25, 50, 50, 100)));
- });
-}
-
-TEST(ImageRemoveFrameRectFilter, RemoveFrameRectFailsFor0_0_to_0_0_100_100)
-{
- // A zero-size image is disallowed.
- AssertConfiguringRemoveFrameRectFilterFails(IntSize(0, 0),
- IntRect(0, 0, 100, 100));
-}
-
-TEST(ImageRemoveFrameRectFilter, RemoveFrameRectFailsForMinus1_Minus1_to_0_0_100_100)
-{
- // A negative-size image is disallowed.
- AssertConfiguringRemoveFrameRectFilterFails(IntSize(-1, -1),
- IntRect(0, 0, 100, 100));
-}
-
-TEST(ImageRemoveFrameRectFilter, RemoveFrameRectFailsFor100_100_to_0_0_0_0)
-{
- // A zero size frame rect is disallowed.
- AssertConfiguringRemoveFrameRectFilterFails(IntSize(100, 100),
- IntRect(0, 0, -1, -1));
-}
-
-TEST(ImageRemoveFrameRectFilter, RemoveFrameRectFailsFor100_100_to_0_0_Minus1_Minus1)
-{
- // A negative size frame rect is disallowed.
- AssertConfiguringRemoveFrameRectFilterFails(IntSize(100, 100),
- IntRect(0, 0, -1, -1));
-}
-
-TEST(ImageRemoveFrameRectFilter, ConfiguringPalettedRemoveFrameRectFails)
-{
- RefPtr<Decoder> decoder = CreateTrivialDecoder();
- ASSERT_TRUE(decoder != nullptr);
-
- // RemoveFrameRectFilter does not support paletted images, so configuration
- // should fail.
- AssertConfiguringPipelineFails(decoder,
- RemoveFrameRectConfig { IntRect(0, 0, 50, 50) },
- PalettedSurfaceConfig { decoder, IntSize(100, 100),
- IntRect(0, 0, 50, 50),
- SurfaceFormat::B8G8R8A8, 8,
- false });
-}
diff --git a/image/test/gtest/TestSourceBuffer.cpp b/image/test/gtest/TestSourceBuffer.cpp
deleted file mode 100644
index 05a88093f5..0000000000
--- a/image/test/gtest/TestSourceBuffer.cpp
+++ /dev/null
@@ -1,810 +0,0 @@
-/* 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/. */
-
-#include "gtest/gtest.h"
-
-#include <algorithm>
-#include <cstdint>
-
-#include "mozilla/Move.h"
-#include "SourceBuffer.h"
-#include "SurfaceCache.h"
-
-using namespace mozilla;
-using namespace mozilla::image;
-
-using std::min;
-
-void
-ExpectChunkAndByteCount(const SourceBufferIterator& aIterator,
- uint32_t aChunks,
- size_t aBytes)
-{
- EXPECT_EQ(aChunks, aIterator.ChunkCount());
- EXPECT_EQ(aBytes, aIterator.ByteCount());
-}
-
-void
-ExpectRemainingBytes(const SourceBufferIterator& aIterator, size_t aBytes)
-{
- EXPECT_TRUE(aIterator.RemainingBytesIsNoMoreThan(aBytes));
- EXPECT_TRUE(aIterator.RemainingBytesIsNoMoreThan(aBytes + 1));
-
- if (aBytes > 0) {
- EXPECT_FALSE(aIterator.RemainingBytesIsNoMoreThan(0));
- EXPECT_FALSE(aIterator.RemainingBytesIsNoMoreThan(aBytes - 1));
- }
-}
-
-char
-GenerateByte(size_t aIndex)
-{
- uint8_t byte = aIndex % 256;
- return *reinterpret_cast<char*>(&byte);
-}
-
-void
-GenerateData(char* aOutput, size_t aOffset, size_t aLength)
-{
- for (size_t i = 0; i < aLength; ++i) {
- aOutput[i] = GenerateByte(aOffset + i);
- }
-}
-
-void
-GenerateData(char* aOutput, size_t aLength)
-{
- GenerateData(aOutput, 0, aLength);
-}
-
-void
-CheckData(const char* aData, size_t aOffset, size_t aLength)
-{
- for (size_t i = 0; i < aLength; ++i) {
- ASSERT_EQ(GenerateByte(aOffset + i), aData[i]);
- }
-}
-
-enum class AdvanceMode
-{
- eAdvanceAsMuchAsPossible,
- eAdvanceByLengthExactly
-};
-
-class ImageSourceBuffer : public ::testing::Test
-{
-public:
- ImageSourceBuffer()
- : mSourceBuffer(new SourceBuffer)
- , mExpectNoResume(new ExpectNoResume)
- , mCountResumes(new CountResumes)
- {
- GenerateData(mData, sizeof(mData));
- EXPECT_FALSE(mSourceBuffer->IsComplete());
- }
-
-protected:
- void CheckedAppendToBuffer(const char* aData, size_t aLength)
- {
- EXPECT_TRUE(NS_SUCCEEDED(mSourceBuffer->Append(aData, aLength)));
- }
-
- void CheckedAppendToBufferLastByteForLength(size_t aLength)
- {
- const char lastByte = GenerateByte(aLength);
- CheckedAppendToBuffer(&lastByte, 1);
- }
-
- void CheckedAppendToBufferInChunks(size_t aChunkLength, size_t aTotalLength)
- {
- char* data = new char[aChunkLength];
-
- size_t bytesWritten = 0;
- while (bytesWritten < aTotalLength) {
- GenerateData(data, bytesWritten, aChunkLength);
- size_t toWrite = min(aChunkLength, aTotalLength - bytesWritten);
- CheckedAppendToBuffer(data, toWrite);
- bytesWritten += toWrite;
- }
-
- delete[] data;
- }
-
- void CheckedCompleteBuffer(nsresult aCompletionStatus = NS_OK)
- {
- mSourceBuffer->Complete(aCompletionStatus);
- EXPECT_TRUE(mSourceBuffer->IsComplete());
- }
-
- void CheckedCompleteBuffer(SourceBufferIterator& aIterator,
- size_t aLength,
- nsresult aCompletionStatus = NS_OK)
- {
- CheckedCompleteBuffer(aCompletionStatus);
- ExpectRemainingBytes(aIterator, aLength);
- }
-
- void CheckedAdvanceIteratorStateOnly(SourceBufferIterator& aIterator,
- size_t aLength,
- uint32_t aChunks,
- size_t aTotalLength,
- AdvanceMode aAdvanceMode
- = AdvanceMode::eAdvanceAsMuchAsPossible)
- {
- const size_t advanceBy = aAdvanceMode == AdvanceMode::eAdvanceAsMuchAsPossible
- ? SIZE_MAX
- : aLength;
-
- auto state = aIterator.AdvanceOrScheduleResume(advanceBy, mExpectNoResume);
- ASSERT_EQ(SourceBufferIterator::READY, state);
- EXPECT_TRUE(aIterator.Data());
- EXPECT_EQ(aLength, aIterator.Length());
-
- ExpectChunkAndByteCount(aIterator, aChunks, aTotalLength);
- }
-
- void CheckedAdvanceIteratorStateOnly(SourceBufferIterator& aIterator,
- size_t aLength)
- {
- CheckedAdvanceIteratorStateOnly(aIterator, aLength, 1, aLength);
- }
-
- void CheckedAdvanceIterator(SourceBufferIterator& aIterator,
- size_t aLength,
- uint32_t aChunks,
- size_t aTotalLength,
- AdvanceMode aAdvanceMode
- = AdvanceMode::eAdvanceAsMuchAsPossible)
- {
- // Check that the iterator is in the expected state.
- CheckedAdvanceIteratorStateOnly(aIterator, aLength, aChunks,
- aTotalLength, aAdvanceMode);
-
- // Check that we read the expected data. To do this, we need to compute our
- // offset in the SourceBuffer, but fortunately that's pretty easy: it's the
- // total number of bytes the iterator has advanced through, minus the length
- // of the current chunk.
- const size_t offset = aIterator.ByteCount() - aIterator.Length();
- CheckData(aIterator.Data(), offset, aIterator.Length());
- }
-
- void CheckedAdvanceIterator(SourceBufferIterator& aIterator, size_t aLength)
- {
- CheckedAdvanceIterator(aIterator, aLength, 1, aLength);
- }
-
- void CheckIteratorMustWait(SourceBufferIterator& aIterator,
- IResumable* aOnResume)
- {
- auto state = aIterator.AdvanceOrScheduleResume(1, aOnResume);
- EXPECT_EQ(SourceBufferIterator::WAITING, state);
- }
-
- void CheckIteratorIsComplete(SourceBufferIterator& aIterator,
- uint32_t aChunks,
- size_t aTotalLength,
- nsresult aCompletionStatus = NS_OK)
- {
- ASSERT_TRUE(mSourceBuffer->IsComplete());
- auto state = aIterator.AdvanceOrScheduleResume(1, mExpectNoResume);
- ASSERT_EQ(SourceBufferIterator::COMPLETE, state);
- EXPECT_EQ(aCompletionStatus, aIterator.CompletionStatus());
- ExpectRemainingBytes(aIterator, 0);
- ExpectChunkAndByteCount(aIterator, aChunks, aTotalLength);
- }
-
- void CheckIteratorIsComplete(SourceBufferIterator& aIterator,
- size_t aTotalLength)
- {
- CheckIteratorIsComplete(aIterator, 1, aTotalLength);
- }
-
- AutoInitializeImageLib mInit;
- char mData[9];
- RefPtr<SourceBuffer> mSourceBuffer;
- RefPtr<ExpectNoResume> mExpectNoResume;
- RefPtr<CountResumes> mCountResumes;
-};
-
-TEST_F(ImageSourceBuffer, InitialState)
-{
- SourceBufferIterator iterator = mSourceBuffer->Iterator();
-
- // RemainingBytesIsNoMoreThan() should always return false in the initial
- // state, since we can't know the answer until Complete() has been called.
- EXPECT_FALSE(iterator.RemainingBytesIsNoMoreThan(0));
- EXPECT_FALSE(iterator.RemainingBytesIsNoMoreThan(SIZE_MAX));
-
- // We haven't advanced our iterator at all, so its counters should be zero.
- ExpectChunkAndByteCount(iterator, 0, 0);
-
- // Attempt to advance; we should fail, and end up in the WAITING state. We
- // expect no resumes because we don't actually append anything to the
- // SourceBuffer in this test.
- CheckIteratorMustWait(iterator, mExpectNoResume);
-}
-
-TEST_F(ImageSourceBuffer, ZeroLengthBufferAlwaysFails)
-{
- SourceBufferIterator iterator = mSourceBuffer->Iterator();
-
- // Complete the buffer without writing to it, providing a successful
- // completion status.
- CheckedCompleteBuffer(iterator, 0);
-
- // Completing a buffer without writing to it results in an automatic failure;
- // make sure that the actual completion status we get from the iterator
- // reflects this.
- CheckIteratorIsComplete(iterator, 0, 0, NS_ERROR_FAILURE);
-}
-
-TEST_F(ImageSourceBuffer, CompleteSuccess)
-{
- SourceBufferIterator iterator = mSourceBuffer->Iterator();
-
- // Write a single byte to the buffer and complete the buffer. (We have to
- // write at least one byte because completing a zero length buffer always
- // fails; see the ZeroLengthBufferAlwaysFails test.)
- CheckedAppendToBuffer(mData, 1);
- CheckedCompleteBuffer(iterator, 1);
-
- // We should be able to advance once (to read the single byte) and then should
- // reach the COMPLETE state with a successful status.
- CheckedAdvanceIterator(iterator, 1);
- CheckIteratorIsComplete(iterator, 1);
-}
-
-TEST_F(ImageSourceBuffer, CompleteFailure)
-{
- SourceBufferIterator iterator = mSourceBuffer->Iterator();
-
- // Write a single byte to the buffer and complete the buffer. (We have to
- // write at least one byte because completing a zero length buffer always
- // fails; see the ZeroLengthBufferAlwaysFails test.)
- CheckedAppendToBuffer(mData, 1);
- CheckedCompleteBuffer(iterator, 1, NS_ERROR_FAILURE);
-
- // Advance the iterator. Because a failing status is propagated to the
- // iterator as soon as it advances, we won't be able to read the single byte
- // that we wrote above; we go directly into the COMPLETE state.
- CheckIteratorIsComplete(iterator, 0, 0, NS_ERROR_FAILURE);
-}
-
-TEST_F(ImageSourceBuffer, Append)
-{
- SourceBufferIterator iterator = mSourceBuffer->Iterator();
-
- // Write test data to the buffer.
- EXPECT_TRUE(NS_SUCCEEDED(mSourceBuffer->ExpectLength(sizeof(mData))));
- CheckedAppendToBuffer(mData, sizeof(mData));
- CheckedCompleteBuffer(iterator, sizeof(mData));
-
- // Verify that we can read it back via the iterator, and that the final state
- // is what we expect.
- CheckedAdvanceIterator(iterator, sizeof(mData));
- CheckIteratorIsComplete(iterator, sizeof(mData));
-}
-
-TEST_F(ImageSourceBuffer, HugeAppendFails)
-{
- SourceBufferIterator iterator = mSourceBuffer->Iterator();
-
- // We should fail to append anything bigger than what the SurfaceCache can
- // hold, so use the SurfaceCache's maximum capacity to calculate what a
- // "massive amount of data" (see below) consists of on this platform.
- ASSERT_LT(SurfaceCache::MaximumCapacity(), SIZE_MAX);
- const size_t hugeSize = SurfaceCache::MaximumCapacity() + 1;
-
- // Attempt to write a massive amount of data and verify that it fails. (We'd
- // get a buffer overrun during the test if it succeeds, but if it succeeds
- // that's the least of our problems.)
- EXPECT_TRUE(NS_FAILED(mSourceBuffer->Append(mData, hugeSize)));
- EXPECT_TRUE(mSourceBuffer->IsComplete());
- CheckIteratorIsComplete(iterator, 0, 0, NS_ERROR_OUT_OF_MEMORY);
-}
-
-TEST_F(ImageSourceBuffer, AppendFromInputStream)
-{
- SourceBufferIterator iterator = mSourceBuffer->Iterator();
-
- // Construct an input stream with some arbitrary data. (We use test data from
- // one of the decoder tests.)
- nsCOMPtr<nsIInputStream> inputStream = LoadFile(GreenPNGTestCase().mPath);
- ASSERT_TRUE(inputStream != nullptr);
-
- // Figure out how much data we have.
- uint64_t length;
- ASSERT_TRUE(NS_SUCCEEDED(inputStream->Available(&length)));
-
- // Write test data to the buffer.
- EXPECT_TRUE(NS_SUCCEEDED(mSourceBuffer->AppendFromInputStream(inputStream,
- length)));
- CheckedCompleteBuffer(iterator, length);
-
- // Verify that the iterator sees the appropriate amount of data.
- CheckedAdvanceIteratorStateOnly(iterator, length);
- CheckIteratorIsComplete(iterator, length);
-}
-
-TEST_F(ImageSourceBuffer, AppendAfterComplete)
-{
- SourceBufferIterator iterator = mSourceBuffer->Iterator();
-
- // Write test data to the buffer.
- EXPECT_TRUE(NS_SUCCEEDED(mSourceBuffer->ExpectLength(sizeof(mData))));
- CheckedAppendToBuffer(mData, sizeof(mData));
- CheckedCompleteBuffer(iterator, sizeof(mData));
-
- // Verify that we can read it back via the iterator, and that the final state
- // is what we expect.
- CheckedAdvanceIterator(iterator, sizeof(mData));
- CheckIteratorIsComplete(iterator, sizeof(mData));
-
- // Write more data to the completed buffer.
- EXPECT_TRUE(NS_FAILED(mSourceBuffer->Append(mData, sizeof(mData))));
-
- // Try to read with a new iterator and verify that the new data got ignored.
- SourceBufferIterator iterator2 = mSourceBuffer->Iterator();
- CheckedAdvanceIterator(iterator2, sizeof(mData));
- CheckIteratorIsComplete(iterator2, sizeof(mData));
-}
-
-TEST_F(ImageSourceBuffer, MinChunkCapacity)
-{
- SourceBufferIterator iterator = mSourceBuffer->Iterator();
-
- // Write test data to the buffer using many small appends. Since
- // ExpectLength() isn't being called, we should be able to write up to
- // SourceBuffer::MIN_CHUNK_CAPACITY bytes without a second chunk being
- // allocated.
- CheckedAppendToBufferInChunks(10, SourceBuffer::MIN_CHUNK_CAPACITY);
-
- // Verify that the iterator sees the appropriate amount of data.
- CheckedAdvanceIterator(iterator, SourceBuffer::MIN_CHUNK_CAPACITY);
-
- // Write one more byte; we expect to see that it triggers an allocation.
- CheckedAppendToBufferLastByteForLength(SourceBuffer::MIN_CHUNK_CAPACITY);
- CheckedCompleteBuffer(iterator, 1);
-
- // Verify that the iterator sees the new byte and a new chunk has been
- // allocated.
- CheckedAdvanceIterator(iterator, 1, 2, SourceBuffer::MIN_CHUNK_CAPACITY + 1);
- CheckIteratorIsComplete(iterator, 2, SourceBuffer::MIN_CHUNK_CAPACITY + 1);
-}
-
-TEST_F(ImageSourceBuffer, ExpectLengthDoesNotShrinkBelowMinCapacity)
-{
- SourceBufferIterator iterator = mSourceBuffer->Iterator();
-
- // Write SourceBuffer::MIN_CHUNK_CAPACITY bytes of test data to the buffer,
- // but call ExpectLength() first to make SourceBuffer expect only a single
- // byte. We expect this to still result in only one chunk, because
- // regardless of ExpectLength() we won't allocate a chunk smaller than
- // MIN_CHUNK_CAPACITY bytes.
- EXPECT_TRUE(NS_SUCCEEDED(mSourceBuffer->ExpectLength(1)));
- CheckedAppendToBufferInChunks(10, SourceBuffer::MIN_CHUNK_CAPACITY);
- CheckedCompleteBuffer(iterator, SourceBuffer::MIN_CHUNK_CAPACITY);
-
- // Verify that the iterator sees a single chunk.
- CheckedAdvanceIterator(iterator, SourceBuffer::MIN_CHUNK_CAPACITY);
- CheckIteratorIsComplete(iterator, 1, SourceBuffer::MIN_CHUNK_CAPACITY);
-}
-
-TEST_F(ImageSourceBuffer, ExpectLengthGrowsAboveMinCapacity)
-{
- SourceBufferIterator iterator = mSourceBuffer->Iterator();
-
- // Write two times SourceBuffer::MIN_CHUNK_CAPACITY bytes of test data to the
- // buffer, calling ExpectLength() with the correct length first. We expect
- // this to result in only one chunk, because ExpectLength() allows us to
- // allocate a larger first chunk than MIN_CHUNK_CAPACITY bytes.
- const size_t length = 2 * SourceBuffer::MIN_CHUNK_CAPACITY;
- EXPECT_TRUE(NS_SUCCEEDED(mSourceBuffer->ExpectLength(length)));
- CheckedAppendToBufferInChunks(10, length);
-
- // Verify that the iterator sees a single chunk.
- CheckedAdvanceIterator(iterator, length);
-
- // Write one more byte; we expect to see that it triggers an allocation.
- CheckedAppendToBufferLastByteForLength(length);
- CheckedCompleteBuffer(iterator, 1);
-
- // Verify that the iterator sees the new byte and a new chunk has been
- // allocated.
- CheckedAdvanceIterator(iterator, 1, 2, length + 1);
- CheckIteratorIsComplete(iterator, 2, length + 1);
-}
-
-TEST_F(ImageSourceBuffer, HugeExpectLengthFails)
-{
- SourceBufferIterator iterator = mSourceBuffer->Iterator();
-
- // ExpectLength() should fail if the length is bigger than what the
- // SurfaceCache can hold, so use the SurfaceCache's maximum capacity to
- // calculate what a "massive amount of data" (see below) consists of on this
- // platform.
- ASSERT_LT(SurfaceCache::MaximumCapacity(), SIZE_MAX);
- const size_t hugeSize = SurfaceCache::MaximumCapacity() + 1;
-
- // Attempt to write a massive amount of data and verify that it fails. (We'd
- // get a buffer overrun during the test if it succeeds, but if it succeeds
- // that's the least of our problems.)
- EXPECT_TRUE(NS_FAILED(mSourceBuffer->ExpectLength(hugeSize)));
- EXPECT_TRUE(mSourceBuffer->IsComplete());
- CheckIteratorIsComplete(iterator, 0, 0, NS_ERROR_OUT_OF_MEMORY);
-}
-
-TEST_F(ImageSourceBuffer, LargeAppendsAllocateOnlyOneChunk)
-{
- SourceBufferIterator iterator = mSourceBuffer->Iterator();
-
- // Write two times SourceBuffer::MIN_CHUNK_CAPACITY bytes of test data to the
- // buffer in a single Append() call. We expect this to result in only one
- // chunk even though ExpectLength() wasn't called, because we should always
- // allocate a new chunk large enough to store the data we have at hand.
- constexpr size_t length = 2 * SourceBuffer::MIN_CHUNK_CAPACITY;
- char data[length];
- GenerateData(data, sizeof(data));
- CheckedAppendToBuffer(data, length);
-
- // Verify that the iterator sees a single chunk.
- CheckedAdvanceIterator(iterator, length);
-
- // Write one more byte; we expect to see that it triggers an allocation.
- CheckedAppendToBufferLastByteForLength(length);
- CheckedCompleteBuffer(iterator, 1);
-
- // Verify that the iterator sees the new byte and a new chunk has been
- // allocated.
- CheckedAdvanceIterator(iterator, 1, 2, length + 1);
- CheckIteratorIsComplete(iterator, 2, length + 1);
-}
-
-TEST_F(ImageSourceBuffer, LargeAppendsAllocateAtMostOneChunk)
-{
- SourceBufferIterator iterator = mSourceBuffer->Iterator();
-
- // Allocate some data we'll use below.
- constexpr size_t firstWriteLength = SourceBuffer::MIN_CHUNK_CAPACITY / 2;
- constexpr size_t secondWriteLength = 3 * SourceBuffer::MIN_CHUNK_CAPACITY;
- constexpr size_t totalLength = firstWriteLength + secondWriteLength;
- char data[totalLength];
- GenerateData(data, sizeof(data));
-
- // Write half of SourceBuffer::MIN_CHUNK_CAPACITY bytes of test data to the
- // buffer in a single Append() call. This should fill half of the first chunk.
- CheckedAppendToBuffer(data, firstWriteLength);
-
- // Write three times SourceBuffer::MIN_CHUNK_CAPACITY bytes of test data to the
- // buffer in a single Append() call. We expect this to result in the first of
- // the first chunk being filled and a new chunk being allocated for the
- // remainder.
- CheckedAppendToBuffer(data + firstWriteLength, secondWriteLength);
-
- // Verify that the iterator sees a MIN_CHUNK_CAPACITY-length chunk.
- CheckedAdvanceIterator(iterator, SourceBuffer::MIN_CHUNK_CAPACITY);
-
- // Verify that the iterator sees a second chunk of the length we expect.
- const size_t expectedSecondChunkLength =
- totalLength - SourceBuffer::MIN_CHUNK_CAPACITY;
- CheckedAdvanceIterator(iterator, expectedSecondChunkLength, 2, totalLength);
-
- // Write one more byte; we expect to see that it triggers an allocation.
- CheckedAppendToBufferLastByteForLength(totalLength);
- CheckedCompleteBuffer(iterator, 1);
-
- // Verify that the iterator sees the new byte and a new chunk has been
- // allocated.
- CheckedAdvanceIterator(iterator, 1, 3, totalLength + 1);
- CheckIteratorIsComplete(iterator, 3, totalLength + 1);
-}
-
-TEST_F(ImageSourceBuffer, CompactionHappensWhenBufferIsComplete)
-{
- constexpr size_t chunkLength = SourceBuffer::MIN_CHUNK_CAPACITY;
- constexpr size_t totalLength = 2 * chunkLength;
-
- // Write enough data to create two chunks.
- CheckedAppendToBufferInChunks(chunkLength, totalLength);
-
- {
- SourceBufferIterator iterator = mSourceBuffer->Iterator();
-
- // Verify that the iterator sees two chunks.
- CheckedAdvanceIterator(iterator, chunkLength);
- CheckedAdvanceIterator(iterator, chunkLength, 2, totalLength);
- }
-
- // Complete the buffer, which should trigger compaction implicitly.
- CheckedCompleteBuffer();
-
- {
- SourceBufferIterator iterator = mSourceBuffer->Iterator();
-
- // Verify that compaction happened and there's now only one chunk.
- CheckedAdvanceIterator(iterator, totalLength);
- CheckIteratorIsComplete(iterator, 1, totalLength);
- }
-}
-
-TEST_F(ImageSourceBuffer, CompactionIsDelayedWhileIteratorsExist)
-{
- constexpr size_t chunkLength = SourceBuffer::MIN_CHUNK_CAPACITY;
- constexpr size_t totalLength = 2 * chunkLength;
-
- {
- SourceBufferIterator outerIterator = mSourceBuffer->Iterator();
-
- {
- SourceBufferIterator iterator = mSourceBuffer->Iterator();
-
- // Write enough data to create two chunks.
- CheckedAppendToBufferInChunks(chunkLength, totalLength);
- CheckedCompleteBuffer(iterator, totalLength);
-
- // Verify that the iterator sees two chunks. Since there are live
- // iterators, compaction shouldn't have happened when we completed the
- // buffer.
- CheckedAdvanceIterator(iterator, chunkLength);
- CheckedAdvanceIterator(iterator, chunkLength, 2, totalLength);
- CheckIteratorIsComplete(iterator, 2, totalLength);
- }
-
- // Now |iterator| has been destroyed, but |outerIterator| still exists, so
- // we expect no compaction to have occurred at this point.
- CheckedAdvanceIterator(outerIterator, chunkLength);
- CheckedAdvanceIterator(outerIterator, chunkLength, 2, totalLength);
- CheckIteratorIsComplete(outerIterator, 2, totalLength);
- }
-
- // Now all iterators have been destroyed. Since the buffer was already
- // complete, we expect compaction to happen implicitly here.
-
- {
- SourceBufferIterator iterator = mSourceBuffer->Iterator();
-
- // Verify that compaction happened and there's now only one chunk.
- CheckedAdvanceIterator(iterator, totalLength);
- CheckIteratorIsComplete(iterator, 1, totalLength);
- }
-}
-
-TEST_F(ImageSourceBuffer, SourceBufferIteratorsCanBeMoved)
-{
- constexpr size_t chunkLength = SourceBuffer::MIN_CHUNK_CAPACITY;
- constexpr size_t totalLength = 2 * chunkLength;
-
- // Write enough data to create two chunks. We create an iterator here to make
- // sure that compaction doesn't happen during the test.
- SourceBufferIterator iterator = mSourceBuffer->Iterator();
- CheckedAppendToBufferInChunks(chunkLength, totalLength);
- CheckedCompleteBuffer(iterator, totalLength);
-
- auto GetIterator = [&]{
- SourceBufferIterator lambdaIterator = mSourceBuffer->Iterator();
- CheckedAdvanceIterator(lambdaIterator, chunkLength);
- return lambdaIterator;
- };
-
- // Move-construct |movedIterator| from the iterator returned from
- // GetIterator() and check that its state is as we expect.
- SourceBufferIterator movedIterator = Move(GetIterator());
- EXPECT_TRUE(movedIterator.Data());
- EXPECT_EQ(chunkLength, movedIterator.Length());
- ExpectChunkAndByteCount(movedIterator, 1, chunkLength);
-
- // Make sure that we can advance the iterator.
- CheckedAdvanceIterator(movedIterator, chunkLength, 2, totalLength);
-
- // Make sure that the iterator handles completion properly.
- CheckIteratorIsComplete(movedIterator, 2, totalLength);
-
- // Move-assign |movedIterator| from the iterator returned from
- // GetIterator() and check that its state is as we expect.
- movedIterator = Move(GetIterator());
- EXPECT_TRUE(movedIterator.Data());
- EXPECT_EQ(chunkLength, movedIterator.Length());
- ExpectChunkAndByteCount(movedIterator, 1, chunkLength);
-
- // Make sure that we can advance the iterator.
- CheckedAdvanceIterator(movedIterator, chunkLength, 2, totalLength);
-
- // Make sure that the iterator handles completion properly.
- CheckIteratorIsComplete(movedIterator, 2, totalLength);
-}
-
-TEST_F(ImageSourceBuffer, SubchunkAdvance)
-{
- constexpr size_t chunkLength = SourceBuffer::MIN_CHUNK_CAPACITY;
- constexpr size_t totalLength = 2 * chunkLength;
-
- // Write enough data to create two chunks. We create our iterator here to make
- // sure that compaction doesn't happen during the test.
- SourceBufferIterator iterator = mSourceBuffer->Iterator();
- CheckedAppendToBufferInChunks(chunkLength, totalLength);
- CheckedCompleteBuffer(iterator, totalLength);
-
- // Advance through the first chunk. The chunk count should not increase.
- // We check that by always passing 1 for the |aChunks| parameter of
- // CheckedAdvanceIteratorStateOnly(). We have to call CheckData() manually
- // because the offset calculation in CheckedAdvanceIterator() assumes that
- // we're advancing a chunk at a time.
- size_t offset = 0;
- while (offset < chunkLength) {
- CheckedAdvanceIteratorStateOnly(iterator, 1, 1, chunkLength,
- AdvanceMode::eAdvanceByLengthExactly);
- CheckData(iterator.Data(), offset++, iterator.Length());
- }
-
- // Read the first byte of the second chunk. This is the point at which we
- // can't advance within the same chunk, so the chunk count should increase. We
- // check that by passing 2 for the |aChunks| parameter of
- // CheckedAdvanceIteratorStateOnly().
- CheckedAdvanceIteratorStateOnly(iterator, 1, 2, totalLength,
- AdvanceMode::eAdvanceByLengthExactly);
- CheckData(iterator.Data(), offset++, iterator.Length());
-
- // Read the rest of the second chunk. The chunk count should not increase.
- while (offset < totalLength) {
- CheckedAdvanceIteratorStateOnly(iterator, 1, 2, totalLength,
- AdvanceMode::eAdvanceByLengthExactly);
- CheckData(iterator.Data(), offset++, iterator.Length());
- }
-
- // Make sure we reached the end.
- CheckIteratorIsComplete(iterator, 2, totalLength);
-}
-
-TEST_F(ImageSourceBuffer, SubchunkZeroByteAdvance)
-{
- constexpr size_t chunkLength = SourceBuffer::MIN_CHUNK_CAPACITY;
- constexpr size_t totalLength = 2 * chunkLength;
-
- // Write enough data to create two chunks. We create our iterator here to make
- // sure that compaction doesn't happen during the test.
- SourceBufferIterator iterator = mSourceBuffer->Iterator();
- CheckedAppendToBufferInChunks(chunkLength, totalLength);
- CheckedCompleteBuffer(iterator, totalLength);
-
- // Make an initial zero-length advance. Although a zero-length advance
- // normally won't cause us to read a chunk from the SourceBuffer, we'll do so
- // if the iterator is in the initial state to keep the invariant that
- // SourceBufferIterator in the READY state always returns a non-null pointer
- // from Data().
- CheckedAdvanceIteratorStateOnly(iterator, 0, 1, chunkLength,
- AdvanceMode::eAdvanceByLengthExactly);
-
- // Advance through the first chunk. As in the |SubchunkAdvance| test, the
- // chunk count should not increase. We do a zero-length advance after each
- // normal advance to ensure that zero-length advances do not change the
- // iterator's position or cause a new chunk to be read.
- size_t offset = 0;
- while (offset < chunkLength) {
- CheckedAdvanceIteratorStateOnly(iterator, 1, 1, chunkLength,
- AdvanceMode::eAdvanceByLengthExactly);
- CheckData(iterator.Data(), offset++, iterator.Length());
- CheckedAdvanceIteratorStateOnly(iterator, 0, 1, chunkLength,
- AdvanceMode::eAdvanceByLengthExactly);
- }
-
- // Read the first byte of the second chunk. This is the point at which we
- // can't advance within the same chunk, so the chunk count should increase. As
- // before, we do a zero-length advance afterward.
- CheckedAdvanceIteratorStateOnly(iterator, 1, 2, totalLength,
- AdvanceMode::eAdvanceByLengthExactly);
- CheckData(iterator.Data(), offset++, iterator.Length());
- CheckedAdvanceIteratorStateOnly(iterator, 0, 2, totalLength,
- AdvanceMode::eAdvanceByLengthExactly);
-
- // Read the rest of the second chunk. The chunk count should not increase. As
- // before, we do a zero-length advance after each normal advance.
- while (offset < totalLength) {
- CheckedAdvanceIteratorStateOnly(iterator, 1, 2, totalLength,
- AdvanceMode::eAdvanceByLengthExactly);
- CheckData(iterator.Data(), offset++, iterator.Length());
- CheckedAdvanceIteratorStateOnly(iterator, 0, 2, totalLength,
- AdvanceMode::eAdvanceByLengthExactly);
- }
-
- // Make sure we reached the end.
- CheckIteratorIsComplete(iterator, 2, totalLength);
-}
-
-TEST_F(ImageSourceBuffer, SubchunkZeroByteAdvanceWithNoData)
-{
- SourceBufferIterator iterator = mSourceBuffer->Iterator();
-
- // Check that advancing by zero bytes still makes us enter the WAITING state.
- // This is because if we entered the READY state before reading any data at
- // all, we'd break the invariant that SourceBufferIterator::Data() always
- // returns a non-null pointer in the READY state.
- auto state = iterator.AdvanceOrScheduleResume(0, mCountResumes);
- EXPECT_EQ(SourceBufferIterator::WAITING, state);
-
- // Call Complete(). This should trigger a resume.
- CheckedCompleteBuffer();
- EXPECT_EQ(1u, mCountResumes->Count());
-}
-
-TEST_F(ImageSourceBuffer, NullIResumable)
-{
- SourceBufferIterator iterator = mSourceBuffer->Iterator();
-
- // Check that we can't advance.
- CheckIteratorMustWait(iterator, nullptr);
-
- // Append to the buffer, which would cause a resume if we had passed a
- // non-null IResumable.
- CheckedAppendToBuffer(mData, sizeof(mData));
- CheckedCompleteBuffer(iterator, sizeof(mData));
-}
-
-TEST_F(ImageSourceBuffer, AppendTriggersResume)
-{
- SourceBufferIterator iterator = mSourceBuffer->Iterator();
-
- // Check that we can't advance.
- CheckIteratorMustWait(iterator, mCountResumes);
-
- // Call Append(). This should trigger a resume.
- mSourceBuffer->Append(mData, sizeof(mData));
- EXPECT_EQ(1u, mCountResumes->Count());
-}
-
-TEST_F(ImageSourceBuffer, OnlyOneResumeTriggeredPerAppend)
-{
- SourceBufferIterator iterator = mSourceBuffer->Iterator();
-
- // Check that we can't advance.
- CheckIteratorMustWait(iterator, mCountResumes);
-
- // Allocate some data we'll use below.
- constexpr size_t firstWriteLength = SourceBuffer::MIN_CHUNK_CAPACITY / 2;
- constexpr size_t secondWriteLength = 3 * SourceBuffer::MIN_CHUNK_CAPACITY;
- constexpr size_t totalLength = firstWriteLength + secondWriteLength;
- char data[totalLength];
- GenerateData(data, sizeof(data));
-
- // Write half of SourceBuffer::MIN_CHUNK_CAPACITY bytes of test data to the
- // buffer in a single Append() call. This should fill half of the first chunk.
- // This should trigger a resume.
- CheckedAppendToBuffer(data, firstWriteLength);
- EXPECT_EQ(1u, mCountResumes->Count());
-
- // Advance past the new data and wait again.
- CheckedAdvanceIterator(iterator, firstWriteLength);
- CheckIteratorMustWait(iterator, mCountResumes);
-
- // Write three times SourceBuffer::MIN_CHUNK_CAPACITY bytes of test data to the
- // buffer in a single Append() call. We expect this to result in the first of
- // the first chunk being filled and a new chunk being allocated for the
- // remainder. Even though two chunks are getting written to here, only *one*
- // resume should get triggered, for a total of two in this test.
- CheckedAppendToBuffer(data + firstWriteLength, secondWriteLength);
- EXPECT_EQ(2u, mCountResumes->Count());
-}
-
-TEST_F(ImageSourceBuffer, CompleteTriggersResume)
-{
- SourceBufferIterator iterator = mSourceBuffer->Iterator();
-
- // Check that we can't advance.
- CheckIteratorMustWait(iterator, mCountResumes);
-
- // Call Complete(). This should trigger a resume.
- CheckedCompleteBuffer();
- EXPECT_EQ(1u, mCountResumes->Count());
-}
-
-TEST_F(ImageSourceBuffer, ExpectLengthDoesNotTriggerResume)
-{
- SourceBufferIterator iterator = mSourceBuffer->Iterator();
-
- // Check that we can't advance.
- CheckIteratorMustWait(iterator, mExpectNoResume);
-
- // Call ExpectLength(). If this triggers a resume, |mExpectNoResume| will
- // ensure that the test fails.
- mSourceBuffer->ExpectLength(1000);
-}
diff --git a/image/test/gtest/TestStreamingLexer.cpp b/image/test/gtest/TestStreamingLexer.cpp
deleted file mode 100644
index 590b10e818..0000000000
--- a/image/test/gtest/TestStreamingLexer.cpp
+++ /dev/null
@@ -1,973 +0,0 @@
-/* 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/. */
-
-#include "gtest/gtest.h"
-
-#include "mozilla/Vector.h"
-#include "StreamingLexer.h"
-
-using namespace mozilla;
-using namespace mozilla::image;
-
-enum class TestState
-{
- ONE,
- TWO,
- THREE,
- UNBUFFERED,
- TRUNCATED_SUCCESS,
- TRUNCATED_FAILURE
-};
-
-void
-CheckLexedData(const char* aData,
- size_t aLength,
- size_t aOffset,
- size_t aExpectedLength)
-{
- EXPECT_TRUE(aLength == aExpectedLength);
-
- for (size_t i = 0; i < aLength; ++i) {
- EXPECT_EQ(aData[i], char(aOffset + i + 1));
- }
-}
-
-LexerTransition<TestState>
-DoLex(TestState aState, const char* aData, size_t aLength)
-{
- switch (aState) {
- case TestState::ONE:
- CheckLexedData(aData, aLength, 0, 3);
- return Transition::To(TestState::TWO, 3);
- case TestState::TWO:
- CheckLexedData(aData, aLength, 3, 3);
- return Transition::To(TestState::THREE, 3);
- case TestState::THREE:
- CheckLexedData(aData, aLength, 6, 3);
- return Transition::TerminateSuccess();
- case TestState::TRUNCATED_SUCCESS:
- return Transition::TerminateSuccess();
- case TestState::TRUNCATED_FAILURE:
- return Transition::TerminateFailure();
- default:
- MOZ_CRASH("Unexpected or unhandled TestState");
- }
-}
-
-LexerTransition<TestState>
-DoLexWithUnbuffered(TestState aState, const char* aData, size_t aLength,
- Vector<char>& aUnbufferedVector)
-{
- switch (aState) {
- case TestState::ONE:
- CheckLexedData(aData, aLength, 0, 3);
- return Transition::ToUnbuffered(TestState::TWO, TestState::UNBUFFERED, 3);
- case TestState::TWO:
- CheckLexedData(aUnbufferedVector.begin(), aUnbufferedVector.length(), 3, 3);
- return Transition::To(TestState::THREE, 3);
- case TestState::THREE:
- CheckLexedData(aData, aLength, 6, 3);
- return Transition::TerminateSuccess();
- case TestState::UNBUFFERED:
- EXPECT_TRUE(aLength <= 3);
- EXPECT_TRUE(aUnbufferedVector.append(aData, aLength));
- return Transition::ContinueUnbuffered(TestState::UNBUFFERED);
- default:
- MOZ_CRASH("Unexpected or unhandled TestState");
- }
-}
-
-LexerTransition<TestState>
-DoLexWithUnbufferedTerminate(TestState aState, const char* aData, size_t aLength)
-{
- switch (aState) {
- case TestState::ONE:
- CheckLexedData(aData, aLength, 0, 3);
- return Transition::ToUnbuffered(TestState::TWO, TestState::UNBUFFERED, 3);
- case TestState::UNBUFFERED:
- return Transition::TerminateSuccess();
- default:
- MOZ_CRASH("Unexpected or unhandled TestState");
- }
-}
-
-LexerTransition<TestState>
-DoLexWithYield(TestState aState, const char* aData, size_t aLength)
-{
- switch (aState) {
- case TestState::ONE:
- CheckLexedData(aData, aLength, 0, 3);
- return Transition::ToAfterYield(TestState::TWO);
- case TestState::TWO:
- CheckLexedData(aData, aLength, 0, 3);
- return Transition::To(TestState::THREE, 6);
- case TestState::THREE:
- CheckLexedData(aData, aLength, 3, 6);
- return Transition::TerminateSuccess();
- default:
- MOZ_CRASH("Unexpected or unhandled TestState");
- }
-}
-
-LexerTransition<TestState>
-DoLexWithTerminateAfterYield(TestState aState, const char* aData, size_t aLength)
-{
- switch (aState) {
- case TestState::ONE:
- CheckLexedData(aData, aLength, 0, 3);
- return Transition::ToAfterYield(TestState::TWO);
- case TestState::TWO:
- return Transition::TerminateSuccess();
- default:
- MOZ_CRASH("Unexpected or unhandled TestState");
- }
-}
-
-LexerTransition<TestState>
-DoLexWithZeroLengthStates(TestState aState, const char* aData, size_t aLength)
-{
- switch (aState) {
- case TestState::ONE:
- EXPECT_TRUE(aLength == 0);
- return Transition::To(TestState::TWO, 0);
- case TestState::TWO:
- EXPECT_TRUE(aLength == 0);
- return Transition::To(TestState::THREE, 9);
- case TestState::THREE:
- CheckLexedData(aData, aLength, 0, 9);
- return Transition::TerminateSuccess();
- default:
- MOZ_CRASH("Unexpected or unhandled TestState");
- }
-}
-
-LexerTransition<TestState>
-DoLexWithZeroLengthStatesAtEnd(TestState aState, const char* aData, size_t aLength)
-{
- switch (aState) {
- case TestState::ONE:
- CheckLexedData(aData, aLength, 0, 9);
- return Transition::To(TestState::TWO, 0);
- case TestState::TWO:
- EXPECT_TRUE(aLength == 0);
- return Transition::To(TestState::THREE, 0);
- case TestState::THREE:
- EXPECT_TRUE(aLength == 0);
- return Transition::TerminateSuccess();
- default:
- MOZ_CRASH("Unexpected or unhandled TestState");
- }
-}
-
-LexerTransition<TestState>
-DoLexWithZeroLengthYield(TestState aState, const char* aData, size_t aLength)
-{
- switch (aState) {
- case TestState::ONE:
- EXPECT_EQ(0u, aLength);
- return Transition::ToAfterYield(TestState::TWO);
- case TestState::TWO:
- EXPECT_EQ(0u, aLength);
- return Transition::To(TestState::THREE, 9);
- case TestState::THREE:
- CheckLexedData(aData, aLength, 0, 9);
- return Transition::TerminateSuccess();
- default:
- MOZ_CRASH("Unexpected or unhandled TestState");
- }
-}
-
-LexerTransition<TestState>
-DoLexWithZeroLengthStatesUnbuffered(TestState aState,
- const char* aData,
- size_t aLength)
-{
- switch (aState) {
- case TestState::ONE:
- EXPECT_TRUE(aLength == 0);
- return Transition::ToUnbuffered(TestState::TWO, TestState::UNBUFFERED, 0);
- case TestState::TWO:
- EXPECT_TRUE(aLength == 0);
- return Transition::To(TestState::THREE, 9);
- case TestState::THREE:
- CheckLexedData(aData, aLength, 0, 9);
- return Transition::TerminateSuccess();
- case TestState::UNBUFFERED:
- ADD_FAILURE() << "Should not enter zero-length unbuffered state";
- return Transition::TerminateFailure();
- default:
- MOZ_CRASH("Unexpected or unhandled TestState");
- }
-}
-
-LexerTransition<TestState>
-DoLexWithZeroLengthStatesAfterUnbuffered(TestState aState,
- const char* aData,
- size_t aLength)
-{
- switch (aState) {
- case TestState::ONE:
- EXPECT_TRUE(aLength == 0);
- return Transition::ToUnbuffered(TestState::TWO, TestState::UNBUFFERED, 9);
- case TestState::TWO:
- EXPECT_TRUE(aLength == 0);
- return Transition::To(TestState::THREE, 0);
- case TestState::THREE:
- EXPECT_TRUE(aLength == 0);
- return Transition::TerminateSuccess();
- case TestState::UNBUFFERED:
- CheckLexedData(aData, aLength, 0, 9);
- return Transition::ContinueUnbuffered(TestState::UNBUFFERED);
- default:
- MOZ_CRASH("Unexpected or unhandled TestState");
- }
-}
-
-class ImageStreamingLexer : public ::testing::Test
-{
-public:
- // Note that mLexer is configured to enter TerminalState::FAILURE immediately
- // if the input data is truncated. We don't expect that to happen in most
- // tests, so we want to detect that issue. If a test needs a different
- // behavior, we create a special StreamingLexer just for that test.
- ImageStreamingLexer()
- : mLexer(Transition::To(TestState::ONE, 3), Transition::TerminateFailure())
- , mSourceBuffer(new SourceBuffer)
- , mIterator(mSourceBuffer->Iterator())
- , mExpectNoResume(new ExpectNoResume)
- , mCountResumes(new CountResumes)
- { }
-
-protected:
- void CheckTruncatedState(StreamingLexer<TestState>& aLexer,
- TerminalState aExpectedTerminalState,
- nsresult aCompletionStatus = NS_OK)
- {
- for (unsigned i = 0; i < 9; ++i) {
- if (i < 2) {
- mSourceBuffer->Append(mData + i, 1);
- } else if (i == 2) {
- mSourceBuffer->Complete(aCompletionStatus);
- }
-
- LexerResult result = aLexer.Lex(mIterator, mCountResumes, DoLex);
-
- if (i >= 2) {
- EXPECT_TRUE(result.is<TerminalState>());
- EXPECT_EQ(aExpectedTerminalState, result.as<TerminalState>());
- } else {
- EXPECT_TRUE(result.is<Yield>());
- EXPECT_EQ(Yield::NEED_MORE_DATA, result.as<Yield>());
- }
- }
-
- EXPECT_EQ(2u, mCountResumes->Count());
- }
-
- AutoInitializeImageLib mInit;
- const char mData[9] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
- StreamingLexer<TestState> mLexer;
- RefPtr<SourceBuffer> mSourceBuffer;
- SourceBufferIterator mIterator;
- RefPtr<ExpectNoResume> mExpectNoResume;
- RefPtr<CountResumes> mCountResumes;
-};
-
-TEST_F(ImageStreamingLexer, ZeroLengthData)
-{
- // Test a zero-length input.
- mSourceBuffer->Complete(NS_OK);
-
- LexerResult result = mLexer.Lex(mIterator, mExpectNoResume, DoLex);
-
- EXPECT_TRUE(result.is<TerminalState>());
- EXPECT_EQ(TerminalState::FAILURE, result.as<TerminalState>());
-}
-
-TEST_F(ImageStreamingLexer, ZeroLengthDataUnbuffered)
-{
- // Test a zero-length input.
- mSourceBuffer->Complete(NS_OK);
-
- // Create a special StreamingLexer for this test because we want the first
- // state to be unbuffered.
- StreamingLexer<TestState> lexer(Transition::ToUnbuffered(TestState::ONE,
- TestState::UNBUFFERED,
- sizeof(mData)),
- Transition::TerminateFailure());
-
- LexerResult result = lexer.Lex(mIterator, mExpectNoResume, DoLex);
- EXPECT_TRUE(result.is<TerminalState>());
- EXPECT_EQ(TerminalState::FAILURE, result.as<TerminalState>());
-}
-
-TEST_F(ImageStreamingLexer, StartWithTerminal)
-{
- // Create a special StreamingLexer for this test because we want the first
- // state to be a terminal state. This doesn't really make sense, but we should
- // handle it.
- StreamingLexer<TestState> lexer(Transition::TerminateSuccess(),
- Transition::TerminateFailure());
- LexerResult result = lexer.Lex(mIterator, mExpectNoResume, DoLex);
- EXPECT_TRUE(result.is<TerminalState>());
- EXPECT_EQ(TerminalState::SUCCESS, result.as<TerminalState>());
-
- mSourceBuffer->Complete(NS_OK);
-}
-
-TEST_F(ImageStreamingLexer, SingleChunk)
-{
- // Test delivering all the data at once.
- mSourceBuffer->Append(mData, sizeof(mData));
- mSourceBuffer->Complete(NS_OK);
-
- LexerResult result = mLexer.Lex(mIterator, mExpectNoResume, DoLex);
-
- EXPECT_TRUE(result.is<TerminalState>());
- EXPECT_EQ(TerminalState::SUCCESS, result.as<TerminalState>());
-}
-
-TEST_F(ImageStreamingLexer, SingleChunkWithUnbuffered)
-{
- Vector<char> unbufferedVector;
-
- // Test delivering all the data at once.
- mSourceBuffer->Append(mData, sizeof(mData));
- mSourceBuffer->Complete(NS_OK);
-
- LexerResult result =
- mLexer.Lex(mIterator, mExpectNoResume,
- [&](TestState aState, const char* aData, size_t aLength) {
- return DoLexWithUnbuffered(aState, aData, aLength, unbufferedVector);
- });
-
- EXPECT_TRUE(result.is<TerminalState>());
- EXPECT_EQ(TerminalState::SUCCESS, result.as<TerminalState>());
-}
-
-TEST_F(ImageStreamingLexer, SingleChunkWithYield)
-{
- // Test delivering all the data at once.
- mSourceBuffer->Append(mData, sizeof(mData));
- mSourceBuffer->Complete(NS_OK);
-
- LexerResult result = mLexer.Lex(mIterator, mExpectNoResume, DoLexWithYield);
- ASSERT_TRUE(result.is<Yield>());
- EXPECT_EQ(Yield::OUTPUT_AVAILABLE, result.as<Yield>());
-
- result = mLexer.Lex(mIterator, mExpectNoResume, DoLexWithYield);
- ASSERT_TRUE(result.is<TerminalState>());
- EXPECT_EQ(TerminalState::SUCCESS, result.as<TerminalState>());
-}
-
-TEST_F(ImageStreamingLexer, ChunkPerState)
-{
- // Test delivering in perfectly-sized chunks, one per state.
- for (unsigned i = 0; i < 3; ++i) {
- mSourceBuffer->Append(mData + 3 * i, 3);
- LexerResult result = mLexer.Lex(mIterator, mCountResumes, DoLex);
-
- if (i == 2) {
- EXPECT_TRUE(result.is<TerminalState>());
- EXPECT_EQ(TerminalState::SUCCESS, result.as<TerminalState>());
- } else {
- EXPECT_TRUE(result.is<Yield>());
- EXPECT_EQ(Yield::NEED_MORE_DATA, result.as<Yield>());
- }
- }
-
- EXPECT_EQ(2u, mCountResumes->Count());
- mSourceBuffer->Complete(NS_OK);
-}
-
-TEST_F(ImageStreamingLexer, ChunkPerStateWithUnbuffered)
-{
- Vector<char> unbufferedVector;
-
- // Test delivering in perfectly-sized chunks, one per state.
- for (unsigned i = 0; i < 3; ++i) {
- mSourceBuffer->Append(mData + 3 * i, 3);
- LexerResult result =
- mLexer.Lex(mIterator, mCountResumes,
- [&](TestState aState, const char* aData, size_t aLength) {
- return DoLexWithUnbuffered(aState, aData, aLength, unbufferedVector);
- });
-
- if (i == 2) {
- EXPECT_TRUE(result.is<TerminalState>());
- EXPECT_EQ(TerminalState::SUCCESS, result.as<TerminalState>());
- } else {
- EXPECT_TRUE(result.is<Yield>());
- EXPECT_EQ(Yield::NEED_MORE_DATA, result.as<Yield>());
- }
- }
-
- EXPECT_EQ(2u, mCountResumes->Count());
- mSourceBuffer->Complete(NS_OK);
-}
-
-TEST_F(ImageStreamingLexer, ChunkPerStateWithYield)
-{
- // Test delivering in perfectly-sized chunks, one per state.
- mSourceBuffer->Append(mData, 3);
- LexerResult result = mLexer.Lex(mIterator, mCountResumes, DoLexWithYield);
- EXPECT_TRUE(result.is<Yield>());
- EXPECT_EQ(Yield::OUTPUT_AVAILABLE, result.as<Yield>());
-
- result = mLexer.Lex(mIterator, mCountResumes, DoLexWithYield);
- EXPECT_TRUE(result.is<Yield>());
- EXPECT_EQ(Yield::NEED_MORE_DATA, result.as<Yield>());
-
- mSourceBuffer->Append(mData + 3, 6);
- result = mLexer.Lex(mIterator, mCountResumes, DoLexWithYield);
- EXPECT_TRUE(result.is<TerminalState>());
- EXPECT_EQ(TerminalState::SUCCESS, result.as<TerminalState>());
-
- EXPECT_EQ(1u, mCountResumes->Count());
- mSourceBuffer->Complete(NS_OK);
-}
-
-TEST_F(ImageStreamingLexer, ChunkPerStateWithUnbufferedYield)
-{
- size_t unbufferedCallCount = 0;
- Vector<char> unbufferedVector;
- auto lexerFunc = [&](TestState aState, const char* aData, size_t aLength)
- -> LexerTransition<TestState> {
- switch (aState) {
- case TestState::ONE:
- CheckLexedData(aData, aLength, 0, 3);
- return Transition::ToUnbuffered(TestState::TWO, TestState::UNBUFFERED, 3);
- case TestState::TWO:
- CheckLexedData(unbufferedVector.begin(), unbufferedVector.length(), 3, 3);
- return Transition::To(TestState::THREE, 3);
- case TestState::THREE:
- CheckLexedData(aData, aLength, 6, 3);
- return Transition::TerminateSuccess();
- case TestState::UNBUFFERED:
- switch (unbufferedCallCount) {
- case 0:
- CheckLexedData(aData, aLength, 3, 3);
- EXPECT_TRUE(unbufferedVector.append(aData, 2));
- unbufferedCallCount++;
-
- // Continue after yield, telling StreamingLexer we consumed 2 bytes.
- return Transition::ContinueUnbufferedAfterYield(TestState::UNBUFFERED, 2);
-
- case 1:
- CheckLexedData(aData, aLength, 5, 1);
- EXPECT_TRUE(unbufferedVector.append(aData, 1));
- unbufferedCallCount++;
-
- // Continue after yield, telling StreamingLexer we consumed 1 byte.
- // We should end up in the TWO state.
- return Transition::ContinueUnbuffered(TestState::UNBUFFERED);
- }
- ADD_FAILURE() << "Too many invocations of TestState::UNBUFFERED";
- return Transition::TerminateFailure();
- default:
- MOZ_CRASH("Unexpected or unhandled TestState");
- }
- };
-
- // Test delivering in perfectly-sized chunks, one per state.
- for (unsigned i = 0; i < 3; ++i) {
- mSourceBuffer->Append(mData + 3 * i, 3);
- LexerResult result = mLexer.Lex(mIterator, mCountResumes, lexerFunc);
-
- switch (i) {
- case 0:
- EXPECT_TRUE(result.is<Yield>());
- EXPECT_EQ(Yield::NEED_MORE_DATA, result.as<Yield>());
- EXPECT_EQ(0u, unbufferedCallCount);
- break;
-
- case 1:
- EXPECT_TRUE(result.is<Yield>());
- EXPECT_EQ(Yield::OUTPUT_AVAILABLE, result.as<Yield>());
- EXPECT_EQ(1u, unbufferedCallCount);
-
- result = mLexer.Lex(mIterator, mCountResumes, lexerFunc);
- EXPECT_TRUE(result.is<Yield>());
- EXPECT_EQ(Yield::NEED_MORE_DATA, result.as<Yield>());
- EXPECT_EQ(2u, unbufferedCallCount);
- break;
-
- case 2:
- EXPECT_TRUE(result.is<TerminalState>());
- EXPECT_EQ(TerminalState::SUCCESS, result.as<TerminalState>());
- break;
- }
- }
-
- EXPECT_EQ(2u, mCountResumes->Count());
- mSourceBuffer->Complete(NS_OK);
-
- LexerResult result = mLexer.Lex(mIterator, mCountResumes, lexerFunc);
- EXPECT_TRUE(result.is<TerminalState>());
- EXPECT_EQ(TerminalState::SUCCESS, result.as<TerminalState>());
-}
-
-TEST_F(ImageStreamingLexer, OneByteChunks)
-{
- // Test delivering in one byte chunks.
- for (unsigned i = 0; i < 9; ++i) {
- mSourceBuffer->Append(mData + i, 1);
- LexerResult result = mLexer.Lex(mIterator, mCountResumes, DoLex);
-
- if (i == 8) {
- EXPECT_TRUE(result.is<TerminalState>());
- EXPECT_EQ(TerminalState::SUCCESS, result.as<TerminalState>());
- } else {
- EXPECT_TRUE(result.is<Yield>());
- EXPECT_EQ(Yield::NEED_MORE_DATA, result.as<Yield>());
- }
- }
-
- EXPECT_EQ(8u, mCountResumes->Count());
- mSourceBuffer->Complete(NS_OK);
-}
-
-TEST_F(ImageStreamingLexer, OneByteChunksWithUnbuffered)
-{
- Vector<char> unbufferedVector;
-
- // Test delivering in one byte chunks.
- for (unsigned i = 0; i < 9; ++i) {
- mSourceBuffer->Append(mData + i, 1);
- LexerResult result =
- mLexer.Lex(mIterator, mCountResumes,
- [&](TestState aState, const char* aData, size_t aLength) {
- return DoLexWithUnbuffered(aState, aData, aLength, unbufferedVector);
- });
-
- if (i == 8) {
- EXPECT_TRUE(result.is<TerminalState>());
- EXPECT_EQ(TerminalState::SUCCESS, result.as<TerminalState>());
- } else {
- EXPECT_TRUE(result.is<Yield>());
- EXPECT_EQ(Yield::NEED_MORE_DATA, result.as<Yield>());
- }
- }
-
- EXPECT_EQ(8u, mCountResumes->Count());
- mSourceBuffer->Complete(NS_OK);
-}
-
-TEST_F(ImageStreamingLexer, OneByteChunksWithYield)
-{
- // Test delivering in one byte chunks.
- for (unsigned i = 0; i < 9; ++i) {
- mSourceBuffer->Append(mData + i, 1);
- LexerResult result = mLexer.Lex(mIterator, mCountResumes, DoLexWithYield);
-
- switch (i) {
- case 2:
- EXPECT_TRUE(result.is<Yield>());
- EXPECT_EQ(Yield::OUTPUT_AVAILABLE, result.as<Yield>());
-
- result = mLexer.Lex(mIterator, mCountResumes, DoLexWithYield);
- EXPECT_TRUE(result.is<Yield>());
- EXPECT_EQ(Yield::NEED_MORE_DATA, result.as<Yield>());
- break;
-
- case 8:
- EXPECT_TRUE(result.is<TerminalState>());
- EXPECT_EQ(TerminalState::SUCCESS, result.as<TerminalState>());
- break;
-
- default:
- EXPECT_TRUE(i < 9);
- EXPECT_TRUE(result.is<Yield>());
- EXPECT_EQ(Yield::NEED_MORE_DATA, result.as<Yield>());
- }
- }
-
- EXPECT_EQ(8u, mCountResumes->Count());
- mSourceBuffer->Complete(NS_OK);
-}
-
-TEST_F(ImageStreamingLexer, ZeroLengthState)
-{
- mSourceBuffer->Append(mData, sizeof(mData));
- mSourceBuffer->Complete(NS_OK);
-
- // Create a special StreamingLexer for this test because we want the first
- // state to be zero length.
- StreamingLexer<TestState> lexer(Transition::To(TestState::ONE, 0),
- Transition::TerminateFailure());
-
- LexerResult result =
- lexer.Lex(mIterator, mExpectNoResume, DoLexWithZeroLengthStates);
-
- EXPECT_TRUE(result.is<TerminalState>());
- EXPECT_EQ(TerminalState::SUCCESS, result.as<TerminalState>());
-}
-
-TEST_F(ImageStreamingLexer, ZeroLengthStatesAtEnd)
-{
- mSourceBuffer->Append(mData, sizeof(mData));
- mSourceBuffer->Complete(NS_OK);
-
- // Create a special StreamingLexer for this test because we want the first
- // state to consume the full input.
- StreamingLexer<TestState> lexer(Transition::To(TestState::ONE, 9),
- Transition::TerminateFailure());
-
- LexerResult result =
- lexer.Lex(mIterator, mExpectNoResume, DoLexWithZeroLengthStatesAtEnd);
-
- EXPECT_TRUE(result.is<TerminalState>());
- EXPECT_EQ(TerminalState::SUCCESS, result.as<TerminalState>());
-}
-
-TEST_F(ImageStreamingLexer, ZeroLengthStateWithYield)
-{
- // Create a special StreamingLexer for this test because we want the first
- // state to be zero length.
- StreamingLexer<TestState> lexer(Transition::To(TestState::ONE, 0),
- Transition::TerminateFailure());
-
- mSourceBuffer->Append(mData, 3);
- LexerResult result =
- lexer.Lex(mIterator, mExpectNoResume, DoLexWithZeroLengthYield);
- ASSERT_TRUE(result.is<Yield>());
- EXPECT_EQ(Yield::OUTPUT_AVAILABLE, result.as<Yield>());
-
- result = lexer.Lex(mIterator, mCountResumes, DoLexWithZeroLengthYield);
- ASSERT_TRUE(result.is<Yield>());
- EXPECT_EQ(Yield::NEED_MORE_DATA, result.as<Yield>());
-
- mSourceBuffer->Append(mData + 3, sizeof(mData) - 3);
- mSourceBuffer->Complete(NS_OK);
- result = lexer.Lex(mIterator, mExpectNoResume, DoLexWithZeroLengthYield);
- ASSERT_TRUE(result.is<TerminalState>());
- EXPECT_EQ(TerminalState::SUCCESS, result.as<TerminalState>());
- EXPECT_EQ(1u, mCountResumes->Count());
-}
-
-TEST_F(ImageStreamingLexer, ZeroLengthStateWithUnbuffered)
-{
- mSourceBuffer->Append(mData, sizeof(mData));
- mSourceBuffer->Complete(NS_OK);
-
- // Create a special StreamingLexer for this test because we want the first
- // state to be both zero length and unbuffered.
- StreamingLexer<TestState> lexer(Transition::ToUnbuffered(TestState::ONE,
- TestState::UNBUFFERED,
- 0),
- Transition::TerminateFailure());
-
- LexerResult result =
- lexer.Lex(mIterator, mExpectNoResume, DoLexWithZeroLengthStatesUnbuffered);
-
- EXPECT_TRUE(result.is<TerminalState>());
- EXPECT_EQ(TerminalState::SUCCESS, result.as<TerminalState>());
-}
-
-TEST_F(ImageStreamingLexer, ZeroLengthStateAfterUnbuffered)
-{
- mSourceBuffer->Append(mData, sizeof(mData));
- mSourceBuffer->Complete(NS_OK);
-
- // Create a special StreamingLexer for this test because we want the first
- // state to be zero length.
- StreamingLexer<TestState> lexer(Transition::To(TestState::ONE, 0),
- Transition::TerminateFailure());
-
- LexerResult result =
- lexer.Lex(mIterator, mExpectNoResume, DoLexWithZeroLengthStatesAfterUnbuffered);
-
- EXPECT_TRUE(result.is<TerminalState>());
- EXPECT_EQ(TerminalState::SUCCESS, result.as<TerminalState>());
-}
-
-TEST_F(ImageStreamingLexer, ZeroLengthStateWithUnbufferedYield)
-{
- size_t unbufferedCallCount = 0;
- auto lexerFunc = [&](TestState aState, const char* aData, size_t aLength)
- -> LexerTransition<TestState> {
- switch (aState) {
- case TestState::ONE:
- EXPECT_EQ(0u, aLength);
- return Transition::TerminateSuccess();
-
- case TestState::UNBUFFERED:
- switch (unbufferedCallCount) {
- case 0:
- CheckLexedData(aData, aLength, 0, 3);
- unbufferedCallCount++;
-
- // Continue after yield, telling StreamingLexer we consumed 0 bytes.
- return Transition::ContinueUnbufferedAfterYield(TestState::UNBUFFERED, 0);
-
- case 1:
- CheckLexedData(aData, aLength, 0, 3);
- unbufferedCallCount++;
-
- // Continue after yield, telling StreamingLexer we consumed 2 bytes.
- return Transition::ContinueUnbufferedAfterYield(TestState::UNBUFFERED, 2);
-
- case 2:
- EXPECT_EQ(1u, aLength);
- CheckLexedData(aData, aLength, 2, 1);
- unbufferedCallCount++;
-
- // Continue after yield, telling StreamingLexer we consumed 1 bytes.
- return Transition::ContinueUnbufferedAfterYield(TestState::UNBUFFERED, 1);
-
- case 3:
- CheckLexedData(aData, aLength, 3, 6);
- unbufferedCallCount++;
-
- // Continue after yield, telling StreamingLexer we consumed 6 bytes.
- // We should transition to TestState::ONE when we return from the
- // yield.
- return Transition::ContinueUnbufferedAfterYield(TestState::UNBUFFERED, 6);
- }
-
- ADD_FAILURE() << "Too many invocations of TestState::UNBUFFERED";
- return Transition::TerminateFailure();
-
- default:
- MOZ_CRASH("Unexpected or unhandled TestState");
- }
- };
-
- // Create a special StreamingLexer for this test because we want the first
- // state to be unbuffered.
- StreamingLexer<TestState> lexer(Transition::ToUnbuffered(TestState::ONE,
- TestState::UNBUFFERED,
- sizeof(mData)),
- Transition::TerminateFailure());
-
- mSourceBuffer->Append(mData, 3);
- LexerResult result = lexer.Lex(mIterator, mExpectNoResume, lexerFunc);
- ASSERT_TRUE(result.is<Yield>());
- EXPECT_EQ(Yield::OUTPUT_AVAILABLE, result.as<Yield>());
- EXPECT_EQ(1u, unbufferedCallCount);
-
- result = lexer.Lex(mIterator, mExpectNoResume, lexerFunc);
- ASSERT_TRUE(result.is<Yield>());
- EXPECT_EQ(Yield::OUTPUT_AVAILABLE, result.as<Yield>());
- EXPECT_EQ(2u, unbufferedCallCount);
-
- result = lexer.Lex(mIterator, mExpectNoResume, lexerFunc);
- ASSERT_TRUE(result.is<Yield>());
- EXPECT_EQ(Yield::OUTPUT_AVAILABLE, result.as<Yield>());
- EXPECT_EQ(3u, unbufferedCallCount);
-
- result = lexer.Lex(mIterator, mCountResumes, lexerFunc);
- ASSERT_TRUE(result.is<Yield>());
- EXPECT_EQ(Yield::NEED_MORE_DATA, result.as<Yield>());
- EXPECT_EQ(3u, unbufferedCallCount);
-
- mSourceBuffer->Append(mData + 3, 6);
- mSourceBuffer->Complete(NS_OK);
- EXPECT_EQ(1u, mCountResumes->Count());
- result = lexer.Lex(mIterator, mExpectNoResume, lexerFunc);
- ASSERT_TRUE(result.is<Yield>());
- EXPECT_EQ(Yield::OUTPUT_AVAILABLE, result.as<Yield>());
- EXPECT_EQ(4u, unbufferedCallCount);
-
- result = lexer.Lex(mIterator, mExpectNoResume, lexerFunc);
- ASSERT_TRUE(result.is<TerminalState>());
- EXPECT_EQ(TerminalState::SUCCESS, result.as<TerminalState>());
-}
-
-TEST_F(ImageStreamingLexer, TerminateSuccess)
-{
- mSourceBuffer->Append(mData, sizeof(mData));
- mSourceBuffer->Complete(NS_OK);
-
- // Test that Terminate is "sticky".
- SourceBufferIterator iterator = mSourceBuffer->Iterator();
- LexerResult result =
- mLexer.Lex(iterator, mExpectNoResume,
- [&](TestState aState, const char* aData, size_t aLength) {
- EXPECT_TRUE(aState == TestState::ONE);
- return Transition::TerminateSuccess();
- });
- EXPECT_TRUE(result.is<TerminalState>());
- EXPECT_EQ(TerminalState::SUCCESS, result.as<TerminalState>());
-
- SourceBufferIterator iterator2 = mSourceBuffer->Iterator();
- result =
- mLexer.Lex(iterator2, mExpectNoResume,
- [&](TestState aState, const char* aData, size_t aLength) {
- EXPECT_TRUE(false); // Shouldn't get here.
- return Transition::TerminateFailure();
- });
- EXPECT_TRUE(result.is<TerminalState>());
- EXPECT_EQ(TerminalState::SUCCESS, result.as<TerminalState>());
-}
-
-TEST_F(ImageStreamingLexer, TerminateFailure)
-{
- mSourceBuffer->Append(mData, sizeof(mData));
- mSourceBuffer->Complete(NS_OK);
-
- // Test that Terminate is "sticky".
- SourceBufferIterator iterator = mSourceBuffer->Iterator();
- LexerResult result =
- mLexer.Lex(iterator, mExpectNoResume,
- [&](TestState aState, const char* aData, size_t aLength) {
- EXPECT_TRUE(aState == TestState::ONE);
- return Transition::TerminateFailure();
- });
- EXPECT_TRUE(result.is<TerminalState>());
- EXPECT_EQ(TerminalState::FAILURE, result.as<TerminalState>());
-
- SourceBufferIterator iterator2 = mSourceBuffer->Iterator();
- result =
- mLexer.Lex(iterator2, mExpectNoResume,
- [&](TestState aState, const char* aData, size_t aLength) {
- EXPECT_TRUE(false); // Shouldn't get here.
- return Transition::TerminateFailure();
- });
- EXPECT_TRUE(result.is<TerminalState>());
- EXPECT_EQ(TerminalState::FAILURE, result.as<TerminalState>());
-}
-
-TEST_F(ImageStreamingLexer, TerminateUnbuffered)
-{
- // Test that Terminate works during an unbuffered read.
- for (unsigned i = 0; i < 9; ++i) {
- mSourceBuffer->Append(mData + i, 1);
- LexerResult result =
- mLexer.Lex(mIterator, mCountResumes, DoLexWithUnbufferedTerminate);
-
- if (i > 2) {
- EXPECT_TRUE(result.is<TerminalState>());
- EXPECT_EQ(TerminalState::SUCCESS, result.as<TerminalState>());
- } else {
- EXPECT_TRUE(result.is<Yield>());
- EXPECT_EQ(Yield::NEED_MORE_DATA, result.as<Yield>());
- }
- }
-
- // We expect 3 resumes because TestState::ONE consumes 3 bytes and then
- // transitions to TestState::UNBUFFERED, which calls TerminateSuccess() as
- // soon as it receives a single byte. That's four bytes total, which are
- // delivered one at a time, requiring 3 resumes.
- EXPECT_EQ(3u, mCountResumes->Count());
-
- mSourceBuffer->Complete(NS_OK);
-}
-
-TEST_F(ImageStreamingLexer, TerminateAfterYield)
-{
- // Test that Terminate works after yielding.
- for (unsigned i = 0; i < 9; ++i) {
- mSourceBuffer->Append(mData + i, 1);
- LexerResult result =
- mLexer.Lex(mIterator, mCountResumes, DoLexWithTerminateAfterYield);
-
- if (i > 2) {
- EXPECT_TRUE(result.is<TerminalState>());
- EXPECT_EQ(TerminalState::SUCCESS, result.as<TerminalState>());
- } else if (i == 2) {
- EXPECT_TRUE(result.is<Yield>());
- EXPECT_EQ(Yield::OUTPUT_AVAILABLE, result.as<Yield>());
- } else {
- EXPECT_TRUE(result.is<Yield>());
- EXPECT_EQ(Yield::NEED_MORE_DATA, result.as<Yield>());
- }
- }
-
- // We expect 2 resumes because TestState::ONE consumes 3 bytes and then
- // yields. When the lexer resumes at TestState::TWO, which receives the same 3
- // bytes, TerminateSuccess() gets called immediately. That's three bytes
- // total, which are delivered one at a time, requiring 2 resumes.
- EXPECT_EQ(2u, mCountResumes->Count());
-
- mSourceBuffer->Complete(NS_OK);
-}
-
-TEST_F(ImageStreamingLexer, SourceBufferImmediateComplete)
-{
- // Test calling SourceBuffer::Complete() without appending any data. This
- // causes the SourceBuffer to automatically have a failing completion status,
- // no matter what you pass, so we expect TerminalState::FAILURE below.
- mSourceBuffer->Complete(NS_OK);
-
- LexerResult result = mLexer.Lex(mIterator, mExpectNoResume, DoLex);
-
- EXPECT_TRUE(result.is<TerminalState>());
- EXPECT_EQ(TerminalState::FAILURE, result.as<TerminalState>());
-}
-
-TEST_F(ImageStreamingLexer, SourceBufferTruncatedTerminalStateSuccess)
-{
- // Test that using a terminal state (in this case TerminalState::SUCCESS) as a
- // truncated state works.
- StreamingLexer<TestState> lexer(Transition::To(TestState::ONE, 3),
- Transition::TerminateSuccess());
-
- CheckTruncatedState(lexer, TerminalState::SUCCESS);
-}
-
-TEST_F(ImageStreamingLexer, SourceBufferTruncatedTerminalStateFailure)
-{
- // Test that using a terminal state (in this case TerminalState::FAILURE) as a
- // truncated state works.
- StreamingLexer<TestState> lexer(Transition::To(TestState::ONE, 3),
- Transition::TerminateFailure());
-
- CheckTruncatedState(lexer, TerminalState::FAILURE);
-}
-
-TEST_F(ImageStreamingLexer, SourceBufferTruncatedStateReturningSuccess)
-{
- // Test that a truncated state that returns TerminalState::SUCCESS works. When
- // |lexer| discovers that the data is truncated, it invokes the
- // TRUNCATED_SUCCESS state, which returns TerminalState::SUCCESS.
- // CheckTruncatedState() verifies that this happens.
- StreamingLexer<TestState> lexer(Transition::To(TestState::ONE, 3),
- Transition::To(TestState::TRUNCATED_SUCCESS, 0));
-
- CheckTruncatedState(lexer, TerminalState::SUCCESS);
-}
-
-TEST_F(ImageStreamingLexer, SourceBufferTruncatedStateReturningFailure)
-{
- // Test that a truncated state that returns TerminalState::FAILURE works. When
- // |lexer| discovers that the data is truncated, it invokes the
- // TRUNCATED_FAILURE state, which returns TerminalState::FAILURE.
- // CheckTruncatedState() verifies that this happens.
- StreamingLexer<TestState> lexer(Transition::To(TestState::ONE, 3),
- Transition::To(TestState::TRUNCATED_FAILURE, 0));
-
- CheckTruncatedState(lexer, TerminalState::FAILURE);
-}
-
-TEST_F(ImageStreamingLexer, SourceBufferTruncatedFailingCompleteStatus)
-{
- // Test that calling SourceBuffer::Complete() with a failing status results in
- // an immediate TerminalState::FAILURE result. (Note that |lexer|'s truncated
- // state is TerminalState::SUCCESS, so if we ignore the failing status, the
- // test will fail.)
- StreamingLexer<TestState> lexer(Transition::To(TestState::ONE, 3),
- Transition::TerminateSuccess());
-
- CheckTruncatedState(lexer, TerminalState::FAILURE, NS_ERROR_FAILURE);
-}
-
-TEST_F(ImageStreamingLexer, NoSourceBufferResumable)
-{
- // Test delivering in one byte chunks with no IResumable.
- for (unsigned i = 0; i < 9; ++i) {
- mSourceBuffer->Append(mData + i, 1);
- LexerResult result = mLexer.Lex(mIterator, nullptr, DoLex);
-
- if (i == 8) {
- EXPECT_TRUE(result.is<TerminalState>());
- EXPECT_EQ(TerminalState::SUCCESS, result.as<TerminalState>());
- } else {
- EXPECT_TRUE(result.is<Yield>());
- EXPECT_EQ(Yield::NEED_MORE_DATA, result.as<Yield>());
- }
- }
-
- mSourceBuffer->Complete(NS_OK);
-}
diff --git a/image/test/gtest/TestSurfacePipeIntegration.cpp b/image/test/gtest/TestSurfacePipeIntegration.cpp
deleted file mode 100644
index 27138a3ee6..0000000000
--- a/image/test/gtest/TestSurfacePipeIntegration.cpp
+++ /dev/null
@@ -1,508 +0,0 @@
-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim: set ts=8 sts=2 et sw=2 tw=80: */
-/* 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/. */
-
-#include "gtest/gtest.h"
-
-#include "mozilla/gfx/2D.h"
-#include "Common.h"
-#include "Decoder.h"
-#include "DecoderFactory.h"
-#include "SourceBuffer.h"
-#include "SurfacePipe.h"
-
-using namespace mozilla;
-using namespace mozilla::gfx;
-using namespace mozilla::image;
-
-namespace mozilla {
-namespace image {
-
-class TestSurfacePipeFactory
-{
-public:
- static SurfacePipe SimpleSurfacePipe()
- {
- SurfacePipe pipe;
- return Move(pipe);
- }
-
- template <typename T>
- static SurfacePipe SurfacePipeFromPipeline(T&& aPipeline)
- {
- return SurfacePipe { Move(aPipeline) };
- }
-
-private:
- TestSurfacePipeFactory() { }
-};
-
-} // namespace image
-} // namespace mozilla
-
-void
-CheckSurfacePipeMethodResults(SurfacePipe* aPipe,
- Decoder* aDecoder,
- const IntRect& aRect = IntRect(0, 0, 100, 100))
-{
- // Check that the pipeline ended up in the state we expect. Note that we're
- // explicitly testing the SurfacePipe versions of these methods, so we don't
- // want to use AssertCorrectPipelineFinalState() here.
- EXPECT_TRUE(aPipe->IsSurfaceFinished());
- Maybe<SurfaceInvalidRect> invalidRect = aPipe->TakeInvalidRect();
- EXPECT_TRUE(invalidRect.isSome());
- EXPECT_EQ(IntRect(0, 0, 100, 100), invalidRect->mInputSpaceRect);
- EXPECT_EQ(IntRect(0, 0, 100, 100), invalidRect->mOutputSpaceRect);
-
- // Check the generated image.
- CheckGeneratedImage(aDecoder, aRect);
-
- // Reset and clear the image before the next test.
- aPipe->ResetToFirstRow();
- EXPECT_FALSE(aPipe->IsSurfaceFinished());
- invalidRect = aPipe->TakeInvalidRect();
- EXPECT_TRUE(invalidRect.isNothing());
-
- uint32_t count = 0;
- auto result = aPipe->WritePixels<uint32_t>([&]() {
- ++count;
- return AsVariant(BGRAColor::Transparent().AsPixel());
- });
- EXPECT_EQ(WriteState::FINISHED, result);
- EXPECT_EQ(100u * 100u, count);
-
- EXPECT_TRUE(aPipe->IsSurfaceFinished());
- invalidRect = aPipe->TakeInvalidRect();
- EXPECT_TRUE(invalidRect.isSome());
- EXPECT_EQ(IntRect(0, 0, 100, 100), invalidRect->mInputSpaceRect);
- EXPECT_EQ(IntRect(0, 0, 100, 100), invalidRect->mOutputSpaceRect);
-
- aPipe->ResetToFirstRow();
- EXPECT_FALSE(aPipe->IsSurfaceFinished());
- invalidRect = aPipe->TakeInvalidRect();
- EXPECT_TRUE(invalidRect.isNothing());
-}
-
-void
-CheckPalettedSurfacePipeMethodResults(SurfacePipe* aPipe,
- Decoder* aDecoder,
- const IntRect& aRect
- = IntRect(0, 0, 100, 100))
-{
- // Check that the pipeline ended up in the state we expect. Note that we're
- // explicitly testing the SurfacePipe versions of these methods, so we don't
- // want to use AssertCorrectPipelineFinalState() here.
- EXPECT_TRUE(aPipe->IsSurfaceFinished());
- Maybe<SurfaceInvalidRect> invalidRect = aPipe->TakeInvalidRect();
- EXPECT_TRUE(invalidRect.isSome());
- EXPECT_EQ(IntRect(0, 0, 100, 100), invalidRect->mInputSpaceRect);
- EXPECT_EQ(IntRect(0, 0, 100, 100), invalidRect->mOutputSpaceRect);
-
- // Check the generated image.
- CheckGeneratedPalettedImage(aDecoder, aRect);
-
- // Reset and clear the image before the next test.
- aPipe->ResetToFirstRow();
- EXPECT_FALSE(aPipe->IsSurfaceFinished());
- invalidRect = aPipe->TakeInvalidRect();
- EXPECT_TRUE(invalidRect.isNothing());
-
- uint32_t count = 0;
- auto result = aPipe->WritePixels<uint8_t>([&]() {
- ++count;
- return AsVariant(uint8_t(0));
- });
- EXPECT_EQ(WriteState::FINISHED, result);
- EXPECT_EQ(100u * 100u, count);
-
- EXPECT_TRUE(aPipe->IsSurfaceFinished());
- invalidRect = aPipe->TakeInvalidRect();
- EXPECT_TRUE(invalidRect.isSome());
- EXPECT_EQ(IntRect(0, 0, 100, 100), invalidRect->mInputSpaceRect);
- EXPECT_EQ(IntRect(0, 0, 100, 100), invalidRect->mOutputSpaceRect);
-
- aPipe->ResetToFirstRow();
- EXPECT_FALSE(aPipe->IsSurfaceFinished());
- invalidRect = aPipe->TakeInvalidRect();
- EXPECT_TRUE(invalidRect.isNothing());
-}
-
-class ImageSurfacePipeIntegration : public ::testing::Test
-{
-protected:
- AutoInitializeImageLib mInit;
-};
-
-TEST_F(ImageSurfacePipeIntegration, SurfacePipe)
-{
- // Test that SurfacePipe objects can be initialized and move constructed.
- SurfacePipe pipe = TestSurfacePipeFactory::SimpleSurfacePipe();
-
- // Test that SurfacePipe objects can be move assigned.
- pipe = TestSurfacePipeFactory::SimpleSurfacePipe();
-
- // Test that SurfacePipe objects can be initialized with a pipeline.
- RefPtr<Decoder> decoder = CreateTrivialDecoder();
- ASSERT_TRUE(decoder != nullptr);
-
- auto sink = MakeUnique<SurfaceSink>();
- nsresult rv =
- sink->Configure(SurfaceConfig { decoder, IntSize(100, 100),
- SurfaceFormat::B8G8R8A8, false });
- ASSERT_TRUE(NS_SUCCEEDED(rv));
-
- pipe = TestSurfacePipeFactory::SurfacePipeFromPipeline(sink);
-
- // Test that WritePixels() gets passed through to the underlying pipeline.
- {
- uint32_t count = 0;
- auto result = pipe.WritePixels<uint32_t>([&]() {
- ++count;
- return AsVariant(BGRAColor::Green().AsPixel());
- });
- EXPECT_EQ(WriteState::FINISHED, result);
- EXPECT_EQ(100u * 100u, count);
- CheckSurfacePipeMethodResults(&pipe, decoder);
- }
-
- // Create a buffer the same size as one row of the surface, containing all
- // green pixels. We'll use this for the WriteBuffer() tests.
- uint32_t buffer[100];
- for (int i = 0; i < 100; ++i) {
- buffer[i] = BGRAColor::Green().AsPixel();
- }
-
- // Test that WriteBuffer() gets passed through to the underlying pipeline.
- {
- uint32_t count = 0;
- WriteState result = WriteState::NEED_MORE_DATA;
- while (result == WriteState::NEED_MORE_DATA) {
- result = pipe.WriteBuffer(buffer);
- ++count;
- }
- EXPECT_EQ(WriteState::FINISHED, result);
- EXPECT_EQ(100u, count);
- CheckSurfacePipeMethodResults(&pipe, decoder);
- }
-
- // Test that the 3 argument version of WriteBuffer() gets passed through to
- // the underlying pipeline.
- {
- uint32_t count = 0;
- WriteState result = WriteState::NEED_MORE_DATA;
- while (result == WriteState::NEED_MORE_DATA) {
- result = pipe.WriteBuffer(buffer, 0, 100);
- ++count;
- }
- EXPECT_EQ(WriteState::FINISHED, result);
- EXPECT_EQ(100u, count);
- CheckSurfacePipeMethodResults(&pipe, decoder);
- }
-
- // Test that WriteEmptyRow() gets passed through to the underlying pipeline.
- {
- uint32_t count = 0;
- WriteState result = WriteState::NEED_MORE_DATA;
- while (result == WriteState::NEED_MORE_DATA) {
- result = pipe.WriteEmptyRow();
- ++count;
- }
- EXPECT_EQ(WriteState::FINISHED, result);
- EXPECT_EQ(100u, count);
- CheckSurfacePipeMethodResults(&pipe, decoder, IntRect(0, 0, 0, 0));
- }
-
- // Mark the frame as finished so we don't get an assertion.
- RawAccessFrameRef currentFrame = decoder->GetCurrentFrameRef();
- currentFrame->Finish();
-}
-
-TEST_F(ImageSurfacePipeIntegration, PalettedSurfacePipe)
-{
- // Create a SurfacePipe containing a PalettedSurfaceSink.
- RefPtr<Decoder> decoder = CreateTrivialDecoder();
- ASSERT_TRUE(decoder != nullptr);
-
- auto sink = MakeUnique<PalettedSurfaceSink>();
- nsresult rv =
- sink->Configure(PalettedSurfaceConfig { decoder, IntSize(100, 100),
- IntRect(0, 0, 100, 100),
- SurfaceFormat::B8G8R8A8,
- 8, false });
- ASSERT_TRUE(NS_SUCCEEDED(rv));
-
- SurfacePipe pipe = TestSurfacePipeFactory::SurfacePipeFromPipeline(sink);
-
- // Test that WritePixels() gets passed through to the underlying pipeline.
- {
- uint32_t count = 0;
- auto result = pipe.WritePixels<uint8_t>([&]() {
- ++count;
- return AsVariant(uint8_t(255));
- });
- EXPECT_EQ(WriteState::FINISHED, result);
- EXPECT_EQ(100u * 100u, count);
- CheckPalettedSurfacePipeMethodResults(&pipe, decoder);
- }
-
- // Create a buffer the same size as one row of the surface, containing all
- // 255 pixels. We'll use this for the WriteBuffer() tests.
- uint8_t buffer[100];
- for (int i = 0; i < 100; ++i) {
- buffer[i] = 255;
- }
-
- // Test that WriteBuffer() gets passed through to the underlying pipeline.
- {
- uint32_t count = 0;
- WriteState result = WriteState::NEED_MORE_DATA;
- while (result == WriteState::NEED_MORE_DATA) {
- result = pipe.WriteBuffer(buffer);
- ++count;
- }
- EXPECT_EQ(WriteState::FINISHED, result);
- EXPECT_EQ(100u, count);
- CheckPalettedSurfacePipeMethodResults(&pipe, decoder);
- }
-
- // Test that the 3 argument version of WriteBuffer() gets passed through to
- // the underlying pipeline.
- {
- uint32_t count = 0;
- WriteState result = WriteState::NEED_MORE_DATA;
- while (result == WriteState::NEED_MORE_DATA) {
- result = pipe.WriteBuffer(buffer, 0, 100);
- ++count;
- }
- EXPECT_EQ(WriteState::FINISHED, result);
- EXPECT_EQ(100u, count);
- CheckPalettedSurfacePipeMethodResults(&pipe, decoder);
- }
-
- // Test that WriteEmptyRow() gets passed through to the underlying pipeline.
- {
- uint32_t count = 0;
- WriteState result = WriteState::NEED_MORE_DATA;
- while (result == WriteState::NEED_MORE_DATA) {
- result = pipe.WriteEmptyRow();
- ++count;
- }
- EXPECT_EQ(WriteState::FINISHED, result);
- EXPECT_EQ(100u, count);
- CheckPalettedSurfacePipeMethodResults(&pipe, decoder, IntRect(0, 0, 0, 0));
- }
-
- // Mark the frame as finished so we don't get an assertion.
- RawAccessFrameRef currentFrame = decoder->GetCurrentFrameRef();
- currentFrame->Finish();
-}
-
-TEST_F(ImageSurfacePipeIntegration, DeinterlaceDownscaleWritePixels)
-{
- RefPtr<Decoder> decoder = CreateTrivialDecoder();
- ASSERT_TRUE(decoder != nullptr);
-
- auto test = [](Decoder* aDecoder, SurfaceFilter* aFilter) {
- CheckWritePixels(aDecoder, aFilter,
- /* aOutputRect = */ Some(IntRect(0, 0, 25, 25)));
- };
-
- WithFilterPipeline(decoder, test,
- DeinterlacingConfig<uint32_t> { /* mProgressiveDisplay = */ true },
- DownscalingConfig { IntSize(100, 100),
- SurfaceFormat::B8G8R8A8 },
- SurfaceConfig { decoder, IntSize(25, 25),
- SurfaceFormat::B8G8R8A8, false });
-}
-
-TEST_F(ImageSurfacePipeIntegration, RemoveFrameRectBottomRightDownscaleWritePixels)
-{
- // This test case uses a frame rect that extends beyond the borders of the
- // image to the bottom and to the right. It looks roughly like this (with the
- // box made of '#'s representing the frame rect):
- //
- // +------------+
- // + +
- // + +------------+
- // + +############+
- // +------+############+
- // +############+
- // +------------+
-
- RefPtr<Decoder> decoder = CreateTrivialDecoder();
- ASSERT_TRUE(decoder != nullptr);
-
- // Note that aInputWriteRect is 100x50 because RemoveFrameRectFilter ignores
- // trailing rows that don't show up in the output. (Leading rows unfortunately
- // can't be ignored.) So the action of the pipeline is as follows:
- //
- // (1) RemoveFrameRectFilter reads a 100x50 region of the input.
- // (aInputWriteRect captures this fact.) The remaining 50 rows are ignored
- // because they extend off the bottom of the image due to the frame rect's
- // (50, 50) offset. The 50 columns on the right also don't end up in the
- // output, so ultimately only a 50x50 region in the output contains data
- // from the input. The filter's output is not 50x50, though, but 100x100,
- // because what RemoveFrameRectFilter does is introduce blank rows or
- // columns as necessary to transform an image that needs a frame rect into
- // an image that doesn't.
- //
- // (2) DownscalingFilter reads the output of RemoveFrameRectFilter (100x100)
- // and downscales it to 20x20.
- //
- // (3) The surface owned by SurfaceSink logically has only a 10x10 region
- // region in it that's non-blank; this is the downscaled version of the
- // 50x50 region discussed in (1). (aOutputWriteRect captures this fact.)
- // Some fuzz, as usual, is necessary when dealing with Lanczos downscaling.
-
- auto test = [](Decoder* aDecoder, SurfaceFilter* aFilter) {
- CheckWritePixels(aDecoder, aFilter,
- /* aOutputRect = */ Some(IntRect(0, 0, 20, 20)),
- /* aInputRect = */ Some(IntRect(0, 0, 100, 100)),
- /* aInputWriteRect = */ Some(IntRect(50, 50, 100, 50)),
- /* aOutputWriteRect = */ Some(IntRect(10, 10, 10, 10)),
- /* aFuzz = */ 0x33);
- };
-
- WithFilterPipeline(decoder, test,
- RemoveFrameRectConfig { IntRect(50, 50, 100, 100) },
- DownscalingConfig { IntSize(100, 100),
- SurfaceFormat::B8G8R8A8 },
- SurfaceConfig { decoder, IntSize(20, 20),
- SurfaceFormat::B8G8R8A8, false });
-}
-
-TEST_F(ImageSurfacePipeIntegration, RemoveFrameRectTopLeftDownscaleWritePixels)
-{
- // This test case uses a frame rect that extends beyond the borders of the
- // image to the top and to the left. It looks roughly like this (with the
- // box made of '#'s representing the frame rect):
- //
- // +------------+
- // +############+
- // +############+------+
- // +############+ +
- // +------------+ +
- // + +
- // +------------+
-
- RefPtr<Decoder> decoder = CreateTrivialDecoder();
- ASSERT_TRUE(decoder != nullptr);
-
- auto test = [](Decoder* aDecoder, SurfaceFilter* aFilter) {
- CheckWritePixels(aDecoder, aFilter,
- /* aOutputRect = */ Some(IntRect(0, 0, 20, 20)),
- /* aInputRect = */ Some(IntRect(0, 0, 100, 100)),
- /* aInputWriteRect = */ Some(IntRect(0, 0, 100, 100)),
- /* aOutputWriteRect = */ Some(IntRect(0, 0, 10, 10)),
- /* aFuzz = */ 0x21);
- };
-
- WithFilterPipeline(decoder, test,
- RemoveFrameRectConfig { IntRect(-50, -50, 100, 100) },
- DownscalingConfig { IntSize(100, 100),
- SurfaceFormat::B8G8R8A8 },
- SurfaceConfig { decoder, IntSize(20, 20),
- SurfaceFormat::B8G8R8A8, false });
-}
-
-TEST_F(ImageSurfacePipeIntegration, DeinterlaceRemoveFrameRectWritePixels)
-{
- RefPtr<Decoder> decoder = CreateTrivialDecoder();
- ASSERT_TRUE(decoder != nullptr);
-
- // Note that aInputRect is the full 100x100 size even though
- // RemoveFrameRectFilter is part of this pipeline, because deinterlacing
- // requires reading every row.
-
- auto test = [](Decoder* aDecoder, SurfaceFilter* aFilter) {
- CheckWritePixels(aDecoder, aFilter,
- /* aOutputRect = */ Some(IntRect(0, 0, 100, 100)),
- /* aInputRect = */ Some(IntRect(0, 0, 100, 100)),
- /* aInputWriteRect = */ Some(IntRect(50, 50, 100, 100)),
- /* aOutputWriteRect = */ Some(IntRect(50, 50, 50, 50)));
- };
-
- WithFilterPipeline(decoder, test,
- DeinterlacingConfig<uint32_t> { /* mProgressiveDisplay = */ true },
- RemoveFrameRectConfig { IntRect(50, 50, 100, 100) },
- SurfaceConfig { decoder, IntSize(100, 100),
- SurfaceFormat::B8G8R8A8, false });
-}
-
-TEST_F(ImageSurfacePipeIntegration, DeinterlaceRemoveFrameRectDownscaleWritePixels)
-{
- RefPtr<Decoder> decoder = CreateTrivialDecoder();
- ASSERT_TRUE(decoder != nullptr);
-
- auto test = [](Decoder* aDecoder, SurfaceFilter* aFilter) {
- CheckWritePixels(aDecoder, aFilter,
- /* aOutputRect = */ Some(IntRect(0, 0, 20, 20)),
- /* aInputRect = */ Some(IntRect(0, 0, 100, 100)),
- /* aInputWriteRect = */ Some(IntRect(50, 50, 100, 100)),
- /* aOutputWriteRect = */ Some(IntRect(10, 10, 10, 10)),
- /* aFuzz = */ 33);
- };
-
- WithFilterPipeline(decoder, test,
- DeinterlacingConfig<uint32_t> { /* mProgressiveDisplay = */ true },
- RemoveFrameRectConfig { IntRect(50, 50, 100, 100) },
- DownscalingConfig { IntSize(100, 100),
- SurfaceFormat::B8G8R8A8 },
- SurfaceConfig { decoder, IntSize(20, 20),
- SurfaceFormat::B8G8R8A8, false });
-}
-
-TEST_F(ImageSurfacePipeIntegration, ConfiguringPalettedRemoveFrameRectDownscaleFails)
-{
- RefPtr<Decoder> decoder = CreateTrivialDecoder();
- ASSERT_TRUE(decoder != nullptr);
-
- // This is an invalid pipeline for paletted images, so configuration should
- // fail.
- AssertConfiguringPipelineFails(decoder,
- RemoveFrameRectConfig { IntRect(0, 0, 50, 50) },
- DownscalingConfig { IntSize(100, 100),
- SurfaceFormat::B8G8R8A8 },
- PalettedSurfaceConfig { decoder, IntSize(100, 100),
- IntRect(0, 0, 50, 50),
- SurfaceFormat::B8G8R8A8, 8,
- false });
-}
-
-TEST_F(ImageSurfacePipeIntegration, ConfiguringPalettedDeinterlaceDownscaleFails)
-{
- RefPtr<Decoder> decoder = CreateTrivialDecoder();
- ASSERT_TRUE(decoder != nullptr);
-
- // This is an invalid pipeline for paletted images, so configuration should
- // fail.
- AssertConfiguringPipelineFails(decoder,
- DeinterlacingConfig<uint8_t> { /* mProgressiveDisplay = */ true},
- DownscalingConfig { IntSize(100, 100),
- SurfaceFormat::B8G8R8A8 },
- PalettedSurfaceConfig { decoder, IntSize(100, 100),
- IntRect(0, 0, 20, 20),
- SurfaceFormat::B8G8R8A8, 8,
- false });
-}
-
-TEST_F(ImageSurfacePipeIntegration, ConfiguringHugeDeinterlacingBufferFails)
-{
- RefPtr<Decoder> decoder = CreateTrivialDecoder();
- ASSERT_TRUE(decoder != nullptr);
-
- // When DownscalingFilter is used, we may succeed in allocating an output
- // surface for huge images, because we only need to store the scaled-down
- // version of the image. However, regardless of downscaling,
- // DeinterlacingFilter needs to allocate a buffer as large as the size of the
- // input. This can cause OOMs on operating systems that allow overcommit. This
- // test makes sure that we reject such allocations.
- AssertConfiguringPipelineFails(decoder,
- DeinterlacingConfig<uint32_t> { /* mProgressiveDisplay = */ true},
- DownscalingConfig { IntSize(60000, 60000),
- SurfaceFormat::B8G8R8A8 },
- SurfaceConfig { decoder, IntSize(600, 600),
- SurfaceFormat::B8G8R8A8, false });
-}
diff --git a/image/test/gtest/TestSurfaceSink.cpp b/image/test/gtest/TestSurfaceSink.cpp
deleted file mode 100644
index 3a1c74d12e..0000000000
--- a/image/test/gtest/TestSurfaceSink.cpp
+++ /dev/null
@@ -1,1491 +0,0 @@
-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim: set ts=8 sts=2 et sw=2 tw=80: */
-/* 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/. */
-
-#include "gtest/gtest.h"
-
-#include "mozilla/gfx/2D.h"
-#include "Common.h"
-#include "Decoder.h"
-#include "DecoderFactory.h"
-#include "SourceBuffer.h"
-#include "SurfacePipe.h"
-
-using namespace mozilla;
-using namespace mozilla::gfx;
-using namespace mozilla::image;
-
-enum class Orient
-{
- NORMAL,
- FLIP_VERTICALLY
-};
-
-template <Orient Orientation, typename Func> void
-WithSurfaceSink(Func aFunc)
-{
- RefPtr<Decoder> decoder = CreateTrivialDecoder();
- ASSERT_TRUE(decoder != nullptr);
-
- const bool flipVertically = Orientation == Orient::FLIP_VERTICALLY;
-
- WithFilterPipeline(decoder, Forward<Func>(aFunc),
- SurfaceConfig { decoder, IntSize(100, 100),
- SurfaceFormat::B8G8R8A8, flipVertically });
-}
-
-template <typename Func> void
-WithPalettedSurfaceSink(const IntRect& aFrameRect, Func aFunc)
-{
- RefPtr<Decoder> decoder = CreateTrivialDecoder();
- ASSERT_TRUE(decoder != nullptr);
-
- WithFilterPipeline(decoder, Forward<Func>(aFunc),
- PalettedSurfaceConfig { decoder, IntSize(100, 100),
- aFrameRect, SurfaceFormat::B8G8R8A8,
- 8, false });
-}
-
-void
-ResetForNextPass(SurfaceFilter* aSink)
-{
- aSink->ResetToFirstRow();
- EXPECT_FALSE(aSink->IsSurfaceFinished());
- Maybe<SurfaceInvalidRect> invalidRect = aSink->TakeInvalidRect();
- EXPECT_TRUE(invalidRect.isNothing());
-}
-
-template <typename WriteFunc, typename CheckFunc> void
-DoCheckIterativeWrite(SurfaceFilter* aSink,
- WriteFunc aWriteFunc,
- CheckFunc aCheckFunc)
-{
- // Write the buffer to successive rows until every row of the surface
- // has been written.
- uint32_t row = 0;
- WriteState result = WriteState::NEED_MORE_DATA;
- while (result == WriteState::NEED_MORE_DATA) {
- result = aWriteFunc(row);
- ++row;
- }
- EXPECT_EQ(WriteState::FINISHED, result);
- EXPECT_EQ(100u, row);
-
- AssertCorrectPipelineFinalState(aSink,
- IntRect(0, 0, 100, 100),
- IntRect(0, 0, 100, 100));
-
- // Check that the generated image is correct.
- aCheckFunc();
-}
-
-template <typename WriteFunc> void
-CheckIterativeWrite(Decoder* aDecoder,
- SurfaceSink* aSink,
- const IntRect& aOutputRect,
- WriteFunc aWriteFunc)
-{
- // Ignore the row passed to WriteFunc, since no callers use it.
- auto writeFunc = [&](uint32_t) {
- return aWriteFunc();
- };
-
- DoCheckIterativeWrite(aSink, writeFunc, [&]{
- CheckGeneratedImage(aDecoder, aOutputRect);
- });
-}
-
-template <typename WriteFunc> void
-CheckPalettedIterativeWrite(Decoder* aDecoder,
- PalettedSurfaceSink* aSink,
- const IntRect& aOutputRect,
- WriteFunc aWriteFunc)
-{
- // Ignore the row passed to WriteFunc, since no callers use it.
- auto writeFunc = [&](uint32_t) {
- return aWriteFunc();
- };
-
- DoCheckIterativeWrite(aSink, writeFunc, [&]{
- CheckGeneratedPalettedImage(aDecoder, aOutputRect);
- });
-}
-
-TEST(ImageSurfaceSink, NullSurfaceSink)
-{
- // Create the NullSurfaceSink.
- NullSurfaceSink sink;
- nsresult rv = sink.Configure(NullSurfaceConfig { });
- ASSERT_TRUE(NS_SUCCEEDED(rv));
- EXPECT_TRUE(!sink.IsValidPalettedPipe());
-
- // Ensure that we can't write anything.
- bool gotCalled = false;
- auto result = sink.WritePixels<uint32_t>([&]() {
- gotCalled = true;
- return AsVariant(BGRAColor::Green().AsPixel());
- });
- EXPECT_FALSE(gotCalled);
- EXPECT_EQ(WriteState::FINISHED, result);
- EXPECT_TRUE(sink.IsSurfaceFinished());
- Maybe<SurfaceInvalidRect> invalidRect = sink.TakeInvalidRect();
- EXPECT_TRUE(invalidRect.isNothing());
-
- uint32_t source = BGRAColor::Red().AsPixel();
- result = sink.WriteBuffer(&source);
- EXPECT_EQ(WriteState::FINISHED, result);
- EXPECT_TRUE(sink.IsSurfaceFinished());
- invalidRect = sink.TakeInvalidRect();
- EXPECT_TRUE(invalidRect.isNothing());
-
- result = sink.WriteBuffer(&source, 0, 1);
- EXPECT_EQ(WriteState::FINISHED, result);
- EXPECT_TRUE(sink.IsSurfaceFinished());
- invalidRect = sink.TakeInvalidRect();
- EXPECT_TRUE(invalidRect.isNothing());
-
- result = sink.WriteEmptyRow();
- EXPECT_EQ(WriteState::FINISHED, result);
- EXPECT_TRUE(sink.IsSurfaceFinished());
- invalidRect = sink.TakeInvalidRect();
- EXPECT_TRUE(invalidRect.isNothing());
-
- result = sink.WriteUnsafeComputedRow<uint32_t>([&](uint32_t* aRow,
- uint32_t aLength) {
- gotCalled = true;
- for (uint32_t col = 0; col < aLength; ++col, ++aRow) {
- *aRow = BGRAColor::Red().AsPixel();
- }
- });
- EXPECT_FALSE(gotCalled);
- EXPECT_EQ(WriteState::FINISHED, result);
- EXPECT_TRUE(sink.IsSurfaceFinished());
- invalidRect = sink.TakeInvalidRect();
- EXPECT_TRUE(invalidRect.isNothing());
-
- // Attempt to advance to the next row and make sure nothing changes.
- sink.AdvanceRow();
- EXPECT_TRUE(sink.IsSurfaceFinished());
- invalidRect = sink.TakeInvalidRect();
- EXPECT_TRUE(invalidRect.isNothing());
-
- // Attempt to advance to the next pass and make sure nothing changes.
- sink.ResetToFirstRow();
- EXPECT_TRUE(sink.IsSurfaceFinished());
- invalidRect = sink.TakeInvalidRect();
- EXPECT_TRUE(invalidRect.isNothing());
-}
-
-TEST(ImageSurfaceSink, SurfaceSinkInitialization)
-{
- WithSurfaceSink<Orient::NORMAL>([](Decoder* aDecoder, SurfaceSink* aSink) {
- // Check initial state.
- EXPECT_FALSE(aSink->IsSurfaceFinished());
- Maybe<SurfaceInvalidRect> invalidRect = aSink->TakeInvalidRect();
- EXPECT_TRUE(invalidRect.isNothing());
-
- // Check that the surface is zero-initialized. We verify this by calling
- // CheckGeneratedImage() and telling it that we didn't write to the surface
- // anyway (i.e., we wrote to the empty rect); it will then expect the entire
- // surface to be transparent, which is what it should be if it was
- // zero-initialied.
- CheckGeneratedImage(aDecoder, IntRect(0, 0, 0, 0));
- });
-}
-
-TEST(ImageSurfaceSink, SurfaceSinkWritePixels)
-{
- WithSurfaceSink<Orient::NORMAL>([](Decoder* aDecoder, SurfaceSink* aSink) {
- CheckWritePixels(aDecoder, aSink);
- });
-}
-
-TEST(ImageSurfaceSink, SurfaceSinkWritePixelsFinish)
-{
- WithSurfaceSink<Orient::NORMAL>([](Decoder* aDecoder, SurfaceSink* aSink) {
- // Write nothing into the surface; just finish immediately.
- uint32_t count = 0;
- auto result = aSink->WritePixels<uint32_t>([&]() {
- count++;
- return AsVariant(WriteState::FINISHED);
- });
- EXPECT_EQ(WriteState::FINISHED, result);
- EXPECT_EQ(1u, count);
-
- AssertCorrectPipelineFinalState(aSink,
- IntRect(0, 0, 100, 100),
- IntRect(0, 0, 100, 100));
-
- // Attempt to write more and make sure that nothing gets written.
- count = 0;
- result = aSink->WritePixels<uint32_t>([&]() {
- count++;
- return AsVariant(BGRAColor::Red().AsPixel());
- });
- EXPECT_EQ(WriteState::FINISHED, result);
- EXPECT_EQ(0u, count);
- EXPECT_TRUE(aSink->IsSurfaceFinished());
-
- // Check that the generated image is correct.
- RawAccessFrameRef currentFrame = aDecoder->GetCurrentFrameRef();
- RefPtr<SourceSurface> surface = currentFrame->GetSourceSurface();
- EXPECT_TRUE(IsSolidColor(surface, BGRAColor::Transparent()));
- });
-}
-
-TEST(ImageSurfaceSink, SurfaceSinkWritePixelsEarlyExit)
-{
- auto checkEarlyExit =
- [](Decoder* aDecoder, SurfaceSink* aSink, WriteState aState) {
- // Write half a row of green pixels and then exit early with |aState|. If
- // the lambda keeps getting called, we'll write red pixels, which will cause
- // the test to fail.
- uint32_t count = 0;
- auto result = aSink->WritePixels<uint32_t>([&]() -> NextPixel<uint32_t> {
- if (count == 50) {
- return AsVariant(aState);
- }
- return count++ < 50 ? AsVariant(BGRAColor::Green().AsPixel())
- : AsVariant(BGRAColor::Red().AsPixel());
- });
-
- EXPECT_EQ(aState, result);
- EXPECT_EQ(50u, count);
- CheckGeneratedImage(aDecoder, IntRect(0, 0, 50, 1));
-
- if (aState != WriteState::FINISHED) {
- // We should still be able to write more at this point.
- EXPECT_FALSE(aSink->IsSurfaceFinished());
-
- // Verify that we can resume writing. We'll finish up the same row.
- count = 0;
- result = aSink->WritePixels<uint32_t>([&]() -> NextPixel<uint32_t> {
- if (count == 50) {
- return AsVariant(WriteState::NEED_MORE_DATA);
- }
- ++count;
- return AsVariant(BGRAColor::Green().AsPixel());
- });
-
- EXPECT_EQ(WriteState::NEED_MORE_DATA, result);
- EXPECT_EQ(50u, count);
- EXPECT_FALSE(aSink->IsSurfaceFinished());
- CheckGeneratedImage(aDecoder, IntRect(0, 0, 100, 1));
-
- return;
- }
-
- // We should've finished the surface at this point.
- AssertCorrectPipelineFinalState(aSink,
- IntRect(0, 0, 100, 100),
- IntRect(0, 0, 100, 100));
-
- // Attempt to write more and make sure that nothing gets written.
- count = 0;
- result = aSink->WritePixels<uint32_t>([&]{
- count++;
- return AsVariant(BGRAColor::Red().AsPixel());
- });
-
- EXPECT_EQ(WriteState::FINISHED, result);
- EXPECT_EQ(0u, count);
- EXPECT_TRUE(aSink->IsSurfaceFinished());
-
- // Check that the generated image is still correct.
- CheckGeneratedImage(aDecoder, IntRect(0, 0, 50, 1));
- };
-
- WithSurfaceSink<Orient::NORMAL>([&](Decoder* aDecoder, SurfaceSink* aSink) {
- checkEarlyExit(aDecoder, aSink, WriteState::NEED_MORE_DATA);
- });
-
- WithSurfaceSink<Orient::NORMAL>([&](Decoder* aDecoder, SurfaceSink* aSink) {
- checkEarlyExit(aDecoder, aSink, WriteState::FAILURE);
- });
-
- WithSurfaceSink<Orient::NORMAL>([&](Decoder* aDecoder, SurfaceSink* aSink) {
- checkEarlyExit(aDecoder, aSink, WriteState::FINISHED);
- });
-}
-
-TEST(ImageSurfaceSink, SurfaceSinkWritePixelsToRow)
-{
- WithSurfaceSink<Orient::NORMAL>([](Decoder* aDecoder, SurfaceSink* aSink) {
- // Write the first 99 rows of our 100x100 surface and verify that even
- // though our lambda will yield pixels forever, only one row is written per
- // call to WritePixelsToRow().
- for (int row = 0; row < 99; ++row) {
- uint32_t count = 0;
- WriteState result = aSink->WritePixelsToRow<uint32_t>([&]{
- ++count;
- return AsVariant(BGRAColor::Green().AsPixel());
- });
-
- EXPECT_EQ(WriteState::NEED_MORE_DATA, result);
- EXPECT_EQ(100u, count);
- EXPECT_FALSE(aSink->IsSurfaceFinished());
-
- Maybe<SurfaceInvalidRect> invalidRect = aSink->TakeInvalidRect();
- EXPECT_TRUE(invalidRect.isSome());
- EXPECT_EQ(IntRect(0, row, 100, 1), invalidRect->mInputSpaceRect);
- EXPECT_EQ(IntRect(0, row, 100, 1), invalidRect->mOutputSpaceRect);
-
- CheckGeneratedImage(aDecoder, IntRect(0, 0, 100, row + 1));
- }
-
- // Write the final line, which should finish the surface.
- uint32_t count = 0;
- WriteState result = aSink->WritePixelsToRow<uint32_t>([&]{
- ++count;
- return AsVariant(BGRAColor::Green().AsPixel());
- });
-
- EXPECT_EQ(WriteState::FINISHED, result);
- EXPECT_EQ(100u, count);
-
- // Note that the final invalid rect we expect here is only the last row;
- // that's because we called TakeInvalidRect() repeatedly in the loop above.
- AssertCorrectPipelineFinalState(aSink,
- IntRect(0, 99, 100, 1),
- IntRect(0, 99, 100, 1));
-
- // Check that the generated image is correct.
- CheckGeneratedImage(aDecoder, IntRect(0, 0, 100, 100));
-
- // Attempt to write more and make sure that nothing gets written.
- count = 0;
- result = aSink->WritePixelsToRow<uint32_t>([&]{
- count++;
- return AsVariant(BGRAColor::Red().AsPixel());
- });
-
- EXPECT_EQ(WriteState::FINISHED, result);
- EXPECT_EQ(0u, count);
- EXPECT_TRUE(aSink->IsSurfaceFinished());
-
- // Check that the generated image is still correct.
- CheckGeneratedImage(aDecoder, IntRect(0, 0, 100, 100));
- });
-}
-
-TEST(ImageSurfaceSink, SurfaceSinkWritePixelsToRowEarlyExit)
-{
- auto checkEarlyExit =
- [](Decoder* aDecoder, SurfaceSink* aSink, WriteState aState) {
- // Write half a row of green pixels and then exit early with |aState|. If
- // the lambda keeps getting called, we'll write red pixels, which will cause
- // the test to fail.
- uint32_t count = 0;
- auto result = aSink->WritePixelsToRow<uint32_t>([&]() -> NextPixel<uint32_t> {
- if (count == 50) {
- return AsVariant(aState);
- }
- return count++ < 50 ? AsVariant(BGRAColor::Green().AsPixel())
- : AsVariant(BGRAColor::Red().AsPixel());
- });
-
- EXPECT_EQ(aState, result);
- EXPECT_EQ(50u, count);
- CheckGeneratedImage(aDecoder, IntRect(0, 0, 50, 1));
-
- if (aState != WriteState::FINISHED) {
- // We should still be able to write more at this point.
- EXPECT_FALSE(aSink->IsSurfaceFinished());
-
- // Verify that we can resume the same row and still stop at the end.
- count = 0;
- WriteState result = aSink->WritePixelsToRow<uint32_t>([&]{
- ++count;
- return AsVariant(BGRAColor::Green().AsPixel());
- });
-
- EXPECT_EQ(WriteState::NEED_MORE_DATA, result);
- EXPECT_EQ(50u, count);
- EXPECT_FALSE(aSink->IsSurfaceFinished());
- CheckGeneratedImage(aDecoder, IntRect(0, 0, 100, 1));
-
- return;
- }
-
- // We should've finished the surface at this point.
- AssertCorrectPipelineFinalState(aSink,
- IntRect(0, 0, 100, 100),
- IntRect(0, 0, 100, 100));
-
- // Attempt to write more and make sure that nothing gets written.
- count = 0;
- result = aSink->WritePixelsToRow<uint32_t>([&]{
- count++;
- return AsVariant(BGRAColor::Red().AsPixel());
- });
-
- EXPECT_EQ(WriteState::FINISHED, result);
- EXPECT_EQ(0u, count);
- EXPECT_TRUE(aSink->IsSurfaceFinished());
-
- // Check that the generated image is still correct.
- CheckGeneratedImage(aDecoder, IntRect(0, 0, 50, 1));
- };
-
- WithSurfaceSink<Orient::NORMAL>([&](Decoder* aDecoder, SurfaceSink* aSink) {
- checkEarlyExit(aDecoder, aSink, WriteState::NEED_MORE_DATA);
- });
-
- WithSurfaceSink<Orient::NORMAL>([&](Decoder* aDecoder, SurfaceSink* aSink) {
- checkEarlyExit(aDecoder, aSink, WriteState::FAILURE);
- });
-
- WithSurfaceSink<Orient::NORMAL>([&](Decoder* aDecoder, SurfaceSink* aSink) {
- checkEarlyExit(aDecoder, aSink, WriteState::FINISHED);
- });
-}
-
-TEST(ImageSurfaceSink, SurfaceSinkWriteBuffer)
-{
- WithSurfaceSink<Orient::NORMAL>([](Decoder* aDecoder, SurfaceSink* aSink) {
- // Create a green buffer the same size as one row of the surface (which is 100x100),
- // containing 60 pixels of green in the middle and 20 transparent pixels on
- // either side.
- uint32_t buffer[100];
- for (int i = 0; i < 100; ++i) {
- buffer[i] = 20 <= i && i < 80 ? BGRAColor::Green().AsPixel()
- : BGRAColor::Transparent().AsPixel();
- }
-
- // Write the buffer to every row of the surface and check that the generated
- // image is correct.
- CheckIterativeWrite(aDecoder, aSink, IntRect(20, 0, 60, 100), [&]{
- return aSink->WriteBuffer(buffer);
- });
- });
-}
-
-TEST(ImageSurfaceSink, SurfaceSinkWriteBufferPartialRow)
-{
- WithSurfaceSink<Orient::NORMAL>([](Decoder* aDecoder, SurfaceSink* aSink) {
- // Create a buffer the same size as one row of the surface, containing all
- // green pixels.
- uint32_t buffer[100];
- for (int i = 0; i < 100; ++i) {
- buffer[i] = BGRAColor::Green().AsPixel();
- }
-
- // Write the buffer to the middle 60 pixels of every row of the surface and
- // check that the generated image is correct.
- CheckIterativeWrite(aDecoder, aSink, IntRect(20, 0, 60, 100), [&]{
- return aSink->WriteBuffer(buffer, 20, 60);
- });
- });
-}
-
-TEST(ImageSurfaceSink, SurfaceSinkWriteBufferPartialRowStartColOverflow)
-{
- WithSurfaceSink<Orient::NORMAL>([](Decoder* aDecoder, SurfaceSink* aSink) {
- // Create a buffer the same size as one row of the surface, containing all
- // green pixels.
- uint32_t buffer[100];
- for (int i = 0; i < 100; ++i) {
- buffer[i] = BGRAColor::Green().AsPixel();
- }
-
- {
- // Write the buffer to successive rows until every row of the surface
- // has been written. We place the start column beyond the end of the row,
- // which will prevent us from writing anything, so we check that the
- // generated image is entirely transparent.
- CheckIterativeWrite(aDecoder, aSink, IntRect(0, 0, 0, 0), [&]{
- return aSink->WriteBuffer(buffer, 100, 100);
- });
- }
-
- ResetForNextPass(aSink);
-
- {
- // Write the buffer to successive rows until every row of the surface
- // has been written. We use column 50 as the start column, but we still
- // write the buffer, which means we overflow the right edge of the surface
- // by 50 pixels. We check that the left half of the generated image is
- // transparent and the right half is green.
- CheckIterativeWrite(aDecoder, aSink, IntRect(50, 0, 50, 100), [&]{
- return aSink->WriteBuffer(buffer, 50, 100);
- });
- }
- });
-}
-
-TEST(ImageSurfaceSink, SurfaceSinkWriteBufferPartialRowBufferOverflow)
-{
- WithSurfaceSink<Orient::NORMAL>([](Decoder* aDecoder, SurfaceSink* aSink) {
- // Create a buffer twice as large as a row of the surface. The first half
- // (which is as large as a row of the image) will contain green pixels,
- // while the second half will contain red pixels.
- uint32_t buffer[200];
- for (int i = 0; i < 200; ++i) {
- buffer[i] = i < 100 ? BGRAColor::Green().AsPixel()
- : BGRAColor::Red().AsPixel();
- }
-
- {
- // Write the buffer to successive rows until every row of the surface has
- // been written. The buffer extends 100 pixels to the right of a row of
- // the surface, but bounds checking will prevent us from overflowing the
- // buffer. We check that the generated image is entirely green since the
- // pixels on the right side of the buffer shouldn't have been written to
- // the surface.
- CheckIterativeWrite(aDecoder, aSink, IntRect(0, 0, 100, 100), [&]{
- return aSink->WriteBuffer(buffer, 0, 200);
- });
- }
-
- ResetForNextPass(aSink);
-
- {
- // Write from the buffer to the middle of each row of the surface. That
- // means that the left side of each row should be transparent, since we
- // didn't write anything there. A buffer overflow would cause us to write
- // buffer contents into the left side of each row. We check that the
- // generated image is transparent on the left side and green on the right.
- CheckIterativeWrite(aDecoder, aSink, IntRect(50, 0, 50, 100), [&]{
- return aSink->WriteBuffer(buffer, 50, 200);
- });
- }
- });
-}
-
-TEST(ImageSurfaceSink, SurfaceSinkWriteBufferFromNullSource)
-{
- WithSurfaceSink<Orient::NORMAL>([](Decoder* aDecoder, SurfaceSink* aSink) {
- // Calling WriteBuffer() with a null pointer should fail without making any
- // changes to the surface.
- uint32_t* nullBuffer = nullptr;
- WriteState result = aSink->WriteBuffer(nullBuffer);
-
- EXPECT_EQ(WriteState::FAILURE, result);
- EXPECT_FALSE(aSink->IsSurfaceFinished());
- Maybe<SurfaceInvalidRect> invalidRect = aSink->TakeInvalidRect();
- EXPECT_TRUE(invalidRect.isNothing());
-
- // Check that nothing got written to the surface.
- CheckGeneratedImage(aDecoder, IntRect(0, 0, 0, 0));
- });
-}
-
-TEST(ImageSurfaceSink, SurfaceSinkWriteEmptyRow)
-{
- WithSurfaceSink<Orient::NORMAL>([](Decoder* aDecoder, SurfaceSink* aSink) {
- {
- // Write an empty row to each row of the surface. We check that the
- // generated image is entirely transparent.
- CheckIterativeWrite(aDecoder, aSink, IntRect(0, 0, 0, 0), [&]{
- return aSink->WriteEmptyRow();
- });
- }
-
- ResetForNextPass(aSink);
-
- {
- // Write a partial row before we begin calling WriteEmptyRow(). We check
- // that the generated image is entirely transparent, which is to be
- // expected since WriteEmptyRow() overwrites the current row even if some
- // data has already been written to it.
- uint32_t count = 0;
- auto result = aSink->WritePixels<uint32_t>([&]() -> NextPixel<uint32_t> {
- if (count == 50) {
- return AsVariant(WriteState::NEED_MORE_DATA);
- }
- ++count;
- return AsVariant(BGRAColor::Green().AsPixel());
- });
-
- EXPECT_EQ(WriteState::NEED_MORE_DATA, result);
- EXPECT_EQ(50u, count);
- EXPECT_FALSE(aSink->IsSurfaceFinished());
-
- CheckIterativeWrite(aDecoder, aSink, IntRect(0, 0, 0, 0), [&]{
- return aSink->WriteEmptyRow();
- });
- }
-
- ResetForNextPass(aSink);
-
- {
- // Create a buffer the same size as one row of the surface, containing all
- // green pixels.
- uint32_t buffer[100];
- for (int i = 0; i < 100; ++i) {
- buffer[i] = BGRAColor::Green().AsPixel();
- }
-
- // Write an empty row to the middle 60 rows of the surface. The first 20
- // and last 20 rows will be green. (We need to use DoCheckIterativeWrite()
- // here because we need a custom function to check the output, since it
- // can't be described by a simple rect.)
- auto writeFunc = [&](uint32_t aRow) {
- if (aRow < 20 || aRow >= 80) {
- return aSink->WriteBuffer(buffer);
- } else {
- return aSink->WriteEmptyRow();
- }
- };
-
- auto checkFunc = [&]{
- RawAccessFrameRef currentFrame = aDecoder->GetCurrentFrameRef();
- RefPtr<SourceSurface> surface = currentFrame->GetSourceSurface();
-
- EXPECT_TRUE(RowsAreSolidColor(surface, 0, 20, BGRAColor::Green()));
- EXPECT_TRUE(RowsAreSolidColor(surface, 20, 60, BGRAColor::Transparent()));
- EXPECT_TRUE(RowsAreSolidColor(surface, 80, 20, BGRAColor::Green()));
- };
-
- DoCheckIterativeWrite(aSink, writeFunc, checkFunc);
- }
- });
-}
-
-TEST(ImageSurfaceSink, SurfaceSinkWriteUnsafeComputedRow)
-{
- WithSurfaceSink<Orient::NORMAL>([](Decoder* aDecoder, SurfaceSink* aSink) {
- // Create a green buffer the same size as one row of the surface.
- uint32_t buffer[100];
- for (int i = 0; i < 100; ++i) {
- buffer[i] = BGRAColor::Green().AsPixel();
- }
-
- // Write the buffer to successive rows until every row of the surface
- // has been written. We only write to the right half of each row, so we
- // check that the left side of the generated image is transparent and the
- // right side is green.
- CheckIterativeWrite(aDecoder, aSink, IntRect(50, 0, 50, 100), [&]{
- return aSink->WriteUnsafeComputedRow<uint32_t>([&](uint32_t* aRow,
- uint32_t aLength) {
- EXPECT_EQ(100u, aLength );
- memcpy(aRow + 50, buffer, 50 * sizeof(uint32_t));
- });
- });
- });
-}
-
-TEST(ImageSurfaceSink, SurfaceSinkProgressivePasses)
-{
- WithSurfaceSink<Orient::NORMAL>([](Decoder* aDecoder, SurfaceSink* aSink) {
- {
- // Fill the image with a first pass of red.
- uint32_t count = 0;
- auto result = aSink->WritePixels<uint32_t>([&]() {
- ++count;
- return AsVariant(BGRAColor::Red().AsPixel());
- });
- EXPECT_EQ(WriteState::FINISHED, result);
- EXPECT_EQ(100u * 100u, count);
-
- AssertCorrectPipelineFinalState(aSink,
- IntRect(0, 0, 100, 100),
- IntRect(0, 0, 100, 100));
-
- // Check that the generated image is correct.
- RawAccessFrameRef currentFrame = aDecoder->GetCurrentFrameRef();
- RefPtr<SourceSurface> surface = currentFrame->GetSourceSurface();
- EXPECT_TRUE(IsSolidColor(surface, BGRAColor::Red()));
- }
-
- {
- ResetForNextPass(aSink);
-
- // Check that the generated image is still the first pass image.
- RawAccessFrameRef currentFrame = aDecoder->GetCurrentFrameRef();
- RefPtr<SourceSurface> surface = currentFrame->GetSourceSurface();
- EXPECT_TRUE(IsSolidColor(surface, BGRAColor::Red()));
- }
-
- {
- // Fill the image with a second pass of green.
- uint32_t count = 0;
- auto result = aSink->WritePixels<uint32_t>([&]() {
- ++count;
- return AsVariant(BGRAColor::Green().AsPixel());
- });
- EXPECT_EQ(WriteState::FINISHED, result);
- EXPECT_EQ(100u * 100u, count);
-
- AssertCorrectPipelineFinalState(aSink,
- IntRect(0, 0, 100, 100),
- IntRect(0, 0, 100, 100));
-
- // Check that the generated image is correct.
- RawAccessFrameRef currentFrame = aDecoder->GetCurrentFrameRef();
- RefPtr<SourceSurface> surface = currentFrame->GetSourceSurface();
- EXPECT_TRUE(IsSolidColor(surface, BGRAColor::Green()));
- }
- });
-}
-
-TEST(ImageSurfaceSink, SurfaceSinkInvalidRect)
-{
- WithSurfaceSink<Orient::NORMAL>([](Decoder* aDecoder, SurfaceSink* aSink) {
- {
- // Write one row.
- uint32_t count = 0;
- auto result = aSink->WritePixels<uint32_t>([&]() -> NextPixel<uint32_t> {
- if (count == 100) {
- return AsVariant(WriteState::NEED_MORE_DATA);
- }
- count++;
- return AsVariant(BGRAColor::Green().AsPixel());
- });
- EXPECT_EQ(WriteState::NEED_MORE_DATA, result);
- EXPECT_EQ(100u, count);
- EXPECT_FALSE(aSink->IsSurfaceFinished());
-
- // Assert that we have the right invalid rect.
- Maybe<SurfaceInvalidRect> invalidRect = aSink->TakeInvalidRect();
- EXPECT_TRUE(invalidRect.isSome());
- EXPECT_EQ(IntRect(0, 0, 100, 1), invalidRect->mInputSpaceRect);
- EXPECT_EQ(IntRect(0, 0, 100, 1), invalidRect->mOutputSpaceRect);
- }
-
- {
- // Write eight rows.
- uint32_t count = 0;
- auto result = aSink->WritePixels<uint32_t>([&]() -> NextPixel<uint32_t> {
- if (count == 100 * 8) {
- return AsVariant(WriteState::NEED_MORE_DATA);
- }
- count++;
- return AsVariant(BGRAColor::Green().AsPixel());
- });
- EXPECT_EQ(WriteState::NEED_MORE_DATA, result);
- EXPECT_EQ(100u * 8u, count);
- EXPECT_FALSE(aSink->IsSurfaceFinished());
-
- // Assert that we have the right invalid rect.
- Maybe<SurfaceInvalidRect> invalidRect = aSink->TakeInvalidRect();
- EXPECT_TRUE(invalidRect.isSome());
- EXPECT_EQ(IntRect(0, 1, 100, 8), invalidRect->mInputSpaceRect);
- EXPECT_EQ(IntRect(0, 1, 100, 8), invalidRect->mOutputSpaceRect);
- }
-
- {
- // Write the left half of one row.
- uint32_t count = 0;
- auto result = aSink->WritePixels<uint32_t>([&]() -> NextPixel<uint32_t> {
- if (count == 50) {
- return AsVariant(WriteState::NEED_MORE_DATA);
- }
- count++;
- return AsVariant(BGRAColor::Green().AsPixel());
- });
- EXPECT_EQ(WriteState::NEED_MORE_DATA, result);
- EXPECT_EQ(50u, count);
- EXPECT_FALSE(aSink->IsSurfaceFinished());
-
- // Assert that we don't have an invalid rect, since the invalid rect only
- // gets updated when a row gets completed.
- Maybe<SurfaceInvalidRect> invalidRect = aSink->TakeInvalidRect();
- EXPECT_TRUE(invalidRect.isNothing());
- }
-
- {
- // Write the right half of the same row.
- uint32_t count = 0;
- auto result = aSink->WritePixels<uint32_t>([&]() -> NextPixel<uint32_t> {
- if (count == 50) {
- return AsVariant(WriteState::NEED_MORE_DATA);
- }
- count++;
- return AsVariant(BGRAColor::Green().AsPixel());
- });
- EXPECT_EQ(WriteState::NEED_MORE_DATA, result);
- EXPECT_EQ(50u, count);
- EXPECT_FALSE(aSink->IsSurfaceFinished());
-
- // Assert that we have the right invalid rect, which will include both the
- // left and right halves of this row now that we've completed it.
- Maybe<SurfaceInvalidRect> invalidRect = aSink->TakeInvalidRect();
- EXPECT_TRUE(invalidRect.isSome());
- EXPECT_EQ(IntRect(0, 9, 100, 1), invalidRect->mInputSpaceRect);
- EXPECT_EQ(IntRect(0, 9, 100, 1), invalidRect->mOutputSpaceRect);
- }
-
- {
- // Write no rows.
- auto result = aSink->WritePixels<uint32_t>([&]() {
- return AsVariant(WriteState::NEED_MORE_DATA);
- });
- EXPECT_EQ(WriteState::NEED_MORE_DATA, result);
- EXPECT_FALSE(aSink->IsSurfaceFinished());
-
- // Assert that we don't have an invalid rect.
- Maybe<SurfaceInvalidRect> invalidRect = aSink->TakeInvalidRect();
- EXPECT_TRUE(invalidRect.isNothing());
- }
-
- {
- // Fill the rest of the image.
- uint32_t count = 0;
- auto result = aSink->WritePixels<uint32_t>([&]() {
- count++;
- return AsVariant(BGRAColor::Green().AsPixel());
- });
- EXPECT_EQ(WriteState::FINISHED, result);
- EXPECT_EQ(100u * 90u, count);
- EXPECT_TRUE(aSink->IsSurfaceFinished());
-
- // Assert that we have the right invalid rect.
- Maybe<SurfaceInvalidRect> invalidRect = aSink->TakeInvalidRect();
- EXPECT_TRUE(invalidRect.isSome());
- EXPECT_EQ(IntRect(0, 10, 100, 90), invalidRect->mInputSpaceRect);
- EXPECT_EQ(IntRect(0, 10, 100, 90), invalidRect->mOutputSpaceRect);
-
- // Check that the generated image is correct.
- RawAccessFrameRef currentFrame = aDecoder->GetCurrentFrameRef();
- RefPtr<SourceSurface> surface = currentFrame->GetSourceSurface();
- EXPECT_TRUE(IsSolidColor(surface, BGRAColor::Green()));
- }
- });
-}
-
-TEST(ImageSurfaceSink, SurfaceSinkFlipVertically)
-{
- WithSurfaceSink<Orient::FLIP_VERTICALLY>([](Decoder* aDecoder,
- SurfaceSink* aSink) {
- {
- // Fill the image with a first pass of red.
- uint32_t count = 0;
- auto result = aSink->WritePixels<uint32_t>([&]() {
- ++count;
- return AsVariant(BGRAColor::Red().AsPixel());
- });
- EXPECT_EQ(WriteState::FINISHED, result);
- EXPECT_EQ(100u * 100u, count);
-
- AssertCorrectPipelineFinalState(aSink,
- IntRect(0, 0, 100, 100),
- IntRect(0, 0, 100, 100));
-
- // Check that the generated image is correct.
- RawAccessFrameRef currentFrame = aDecoder->GetCurrentFrameRef();
- RefPtr<SourceSurface> surface = currentFrame->GetSourceSurface();
- EXPECT_TRUE(IsSolidColor(surface, BGRAColor::Red()));
- }
-
- {
- ResetForNextPass(aSink);
-
- // Check that the generated image is still the first pass image.
- RawAccessFrameRef currentFrame = aDecoder->GetCurrentFrameRef();
- RefPtr<SourceSurface> surface = currentFrame->GetSourceSurface();
- EXPECT_TRUE(IsSolidColor(surface, BGRAColor::Red()));
- }
-
- {
- // Fill 25 rows of the image with green and make sure everything is OK.
- uint32_t count = 0;
- auto result = aSink->WritePixels<uint32_t>([&]() -> NextPixel<uint32_t> {
- if (count == 25 * 100) {
- return AsVariant(WriteState::NEED_MORE_DATA);
- }
- count++;
- return AsVariant(BGRAColor::Green().AsPixel());
- });
- EXPECT_EQ(WriteState::NEED_MORE_DATA, result);
- EXPECT_EQ(25u * 100u, count);
- EXPECT_FALSE(aSink->IsSurfaceFinished());
-
- // Assert that we have the right invalid rect, which should include the
- // *bottom* (since we're flipping vertically) 25 rows of the image.
- Maybe<SurfaceInvalidRect> invalidRect = aSink->TakeInvalidRect();
- EXPECT_TRUE(invalidRect.isSome());
- EXPECT_EQ(IntRect(0, 75, 100, 25), invalidRect->mInputSpaceRect);
- EXPECT_EQ(IntRect(0, 75, 100, 25), invalidRect->mOutputSpaceRect);
-
- // Check that the generated image is correct.
- RawAccessFrameRef currentFrame = aDecoder->GetCurrentFrameRef();
- RefPtr<SourceSurface> surface = currentFrame->GetSourceSurface();
- EXPECT_TRUE(RowsAreSolidColor(surface, 0, 75, BGRAColor::Red()));
- EXPECT_TRUE(RowsAreSolidColor(surface, 75, 25, BGRAColor::Green()));
- }
-
- {
- // Fill the rest of the image with a second pass of green.
- uint32_t count = 0;
- auto result = aSink->WritePixels<uint32_t>([&]() {
- ++count;
- return AsVariant(BGRAColor::Green().AsPixel());
- });
- EXPECT_EQ(WriteState::FINISHED, result);
- EXPECT_EQ(75u * 100u, count);
-
- AssertCorrectPipelineFinalState(aSink,
- IntRect(0, 0, 100, 75),
- IntRect(0, 0, 100, 75));
-
- // Check that the generated image is correct.
- RawAccessFrameRef currentFrame = aDecoder->GetCurrentFrameRef();
- RefPtr<SourceSurface> surface = currentFrame->GetSourceSurface();
- EXPECT_TRUE(IsSolidColor(surface, BGRAColor::Green()));
- }
- });
-}
-
-TEST(ImageSurfaceSink, PalettedSurfaceSinkInitialization)
-{
- WithPalettedSurfaceSink(IntRect(0, 0, 100, 100),
- [](Decoder* aDecoder, PalettedSurfaceSink* aSink) {
- // Check initial state.
- EXPECT_FALSE(aSink->IsSurfaceFinished());
- Maybe<SurfaceInvalidRect> invalidRect = aSink->TakeInvalidRect();
- EXPECT_TRUE(invalidRect.isNothing());
-
- // Check that the paletted image data is zero-initialized.
- RawAccessFrameRef currentFrame = aDecoder->GetCurrentFrameRef();
- uint8_t* imageData = nullptr;
- uint32_t imageLength = 0;
- currentFrame->GetImageData(&imageData, &imageLength);
- ASSERT_TRUE(imageData != nullptr);
- ASSERT_EQ(100u * 100u, imageLength);
- for (uint32_t i = 0; i < imageLength; ++i) {
- ASSERT_EQ(uint8_t(0), imageData[i]);
- }
- });
-}
-
-TEST(ImageSurfaceSink, PalettedSurfaceSinkWritePixelsFor0_0_100_100)
-{
- WithPalettedSurfaceSink(IntRect(0, 0, 100, 100),
- [](Decoder* aDecoder, PalettedSurfaceSink* aSink) {
- CheckPalettedWritePixels(aDecoder, aSink);
- });
-}
-
-TEST(ImageSurfaceSink, PalettedSurfaceSinkWritePixelsFor25_25_50_50)
-{
- WithPalettedSurfaceSink(IntRect(25, 25, 50, 50),
- [](Decoder* aDecoder, PalettedSurfaceSink* aSink) {
- CheckPalettedWritePixels(aDecoder, aSink,
- /* aOutputRect = */ Some(IntRect(0, 0, 50, 50)),
- /* aInputRect = */ Some(IntRect(0, 0, 50, 50)),
- /* aInputWriteRect = */ Some(IntRect(25, 25, 50, 50)),
- /* aOutputWriteRect = */ Some(IntRect(25, 25, 50, 50)));
- });
-}
-
-TEST(ImageSurfaceSink, PalettedSurfaceSinkWritePixelsForMinus25_Minus25_50_50)
-{
- WithPalettedSurfaceSink(IntRect(-25, -25, 50, 50),
- [](Decoder* aDecoder, PalettedSurfaceSink* aSink) {
- CheckPalettedWritePixels(aDecoder, aSink,
- /* aOutputRect = */ Some(IntRect(0, 0, 50, 50)),
- /* aInputRect = */ Some(IntRect(0, 0, 50, 50)),
- /* aInputWriteRect = */ Some(IntRect(-25, -25, 50, 50)),
- /* aOutputWriteRect = */ Some(IntRect(-25, -25, 50, 50)));
- });
-}
-
-TEST(ImageSurfaceSink, PalettedSurfaceSinkWritePixelsFor75_Minus25_50_50)
-{
- WithPalettedSurfaceSink(IntRect(75, -25, 50, 50),
- [](Decoder* aDecoder, PalettedSurfaceSink* aSink) {
- CheckPalettedWritePixels(aDecoder, aSink,
- /* aOutputRect = */ Some(IntRect(0, 0, 50, 50)),
- /* aInputRect = */ Some(IntRect(0, 0, 50, 50)),
- /* aInputWriteRect = */ Some(IntRect(75, -25, 50, 50)),
- /* aOutputWriteRect = */ Some(IntRect(75, -25, 50, 50)));
- });
-}
-
-TEST(ImageSurfaceSink, PalettedSurfaceSinkWritePixelsForMinus25_75_50_50)
-{
- WithPalettedSurfaceSink(IntRect(-25, 75, 50, 50),
- [](Decoder* aDecoder, PalettedSurfaceSink* aSink) {
- CheckPalettedWritePixels(aDecoder, aSink,
- /* aOutputRect = */ Some(IntRect(0, 0, 50, 50)),
- /* aInputRect = */ Some(IntRect(0, 0, 50, 50)),
- /* aInputWriteRect = */ Some(IntRect(-25, 75, 50, 50)),
- /* aOutputWriteRect = */ Some(IntRect(-25, 75, 50, 50)));
- });
-}
-
-TEST(ImageSurfaceSink, PalettedSurfaceSinkWritePixelsFor75_75_50_50)
-{
- WithPalettedSurfaceSink(IntRect(75, 75, 50, 50),
- [](Decoder* aDecoder, PalettedSurfaceSink* aSink) {
- CheckPalettedWritePixels(aDecoder, aSink,
- /* aOutputRect = */ Some(IntRect(0, 0, 50, 50)),
- /* aInputRect = */ Some(IntRect(0, 0, 50, 50)),
- /* aInputWriteRect = */ Some(IntRect(75, 75, 50, 50)),
- /* aOutputWriteRect = */ Some(IntRect(75, 75, 50, 50)));
- });
-}
-
-TEST(ImageSurfaceSink, PalettedSurfaceSinkWritePixelsFinish)
-{
- WithPalettedSurfaceSink(IntRect(0, 0, 100, 100),
- [](Decoder* aDecoder, PalettedSurfaceSink* aSink) {
- // Write nothing into the surface; just finish immediately.
- uint32_t count = 0;
- auto result = aSink->WritePixels<uint8_t>([&]{
- count++;
- return AsVariant(WriteState::FINISHED);
- });
- EXPECT_EQ(WriteState::FINISHED, result);
- EXPECT_EQ(1u, count);
-
- AssertCorrectPipelineFinalState(aSink,
- IntRect(0, 0, 100, 100),
- IntRect(0, 0, 100, 100));
-
- // Attempt to write more and make sure that nothing gets written.
- count = 0;
- result = aSink->WritePixels<uint8_t>([&]() {
- count++;
- return AsVariant(uint8_t(128));
- });
- EXPECT_EQ(WriteState::FINISHED, result);
- EXPECT_EQ(0u, count);
- EXPECT_TRUE(aSink->IsSurfaceFinished());
-
- // Check that the generated image is correct.
- EXPECT_TRUE(IsSolidPalettedColor(aDecoder, 0));
- });
-}
-
-TEST(ImageSurfaceSink, PalettedSurfaceSinkWritePixelsEarlyExit)
-{
- auto checkEarlyExit =
- [](Decoder* aDecoder, PalettedSurfaceSink* aSink, WriteState aState) {
- // Write half a row of green pixels and then exit early with |aState|. If
- // the lambda keeps getting called, we'll write red pixels, which will cause
- // the test to fail.
- uint32_t count = 0;
- auto result = aSink->WritePixels<uint8_t>([&]() -> NextPixel<uint8_t> {
- if (count == 50) {
- return AsVariant(aState);
- }
- return count++ < 50 ? AsVariant(uint8_t(255)) : AsVariant(uint8_t(128));
- });
-
- EXPECT_EQ(aState, result);
- EXPECT_EQ(50u, count);
- CheckGeneratedPalettedImage(aDecoder, IntRect(0, 0, 50, 1));
-
- if (aState != WriteState::FINISHED) {
- // We should still be able to write more at this point.
- EXPECT_FALSE(aSink->IsSurfaceFinished());
-
- // Verify that we can resume writing. We'll finish up the same row.
- count = 0;
- result = aSink->WritePixels<uint8_t>([&]() -> NextPixel<uint8_t> {
- if (count == 50) {
- return AsVariant(WriteState::NEED_MORE_DATA);
- }
- ++count;
- return AsVariant(uint8_t(255));
- });
-
- EXPECT_EQ(WriteState::NEED_MORE_DATA, result);
- EXPECT_EQ(50u, count);
- EXPECT_FALSE(aSink->IsSurfaceFinished());
- CheckGeneratedPalettedImage(aDecoder, IntRect(0, 0, 100, 1));
-
- return;
- }
-
- // We should've finished the surface at this point.
- AssertCorrectPipelineFinalState(aSink,
- IntRect(0, 0, 100, 100),
- IntRect(0, 0, 100, 100));
-
- // Attempt to write more and make sure that nothing gets written.
- count = 0;
- result = aSink->WritePixels<uint8_t>([&]{
- count++;
- return AsVariant(uint8_t(128));
- });
-
- EXPECT_EQ(WriteState::FINISHED, result);
- EXPECT_EQ(0u, count);
- EXPECT_TRUE(aSink->IsSurfaceFinished());
-
- // Check that the generated image is still correct.
- CheckGeneratedPalettedImage(aDecoder, IntRect(0, 0, 50, 1));
- };
-
- WithPalettedSurfaceSink(IntRect(0, 0, 100, 100),
- [&](Decoder* aDecoder, PalettedSurfaceSink* aSink) {
- checkEarlyExit(aDecoder, aSink, WriteState::NEED_MORE_DATA);
- });
-
- WithPalettedSurfaceSink(IntRect(0, 0, 100, 100),
- [&](Decoder* aDecoder, PalettedSurfaceSink* aSink) {
- checkEarlyExit(aDecoder, aSink, WriteState::FAILURE);
- });
-
- WithPalettedSurfaceSink(IntRect(0, 0, 100, 100),
- [&](Decoder* aDecoder, PalettedSurfaceSink* aSink) {
- checkEarlyExit(aDecoder, aSink, WriteState::FINISHED);
- });
-}
-
-TEST(ImageSurfaceSink, PalettedSurfaceSinkWritePixelsToRow)
-{
- WithPalettedSurfaceSink(IntRect(0, 0, 100, 100),
- [](Decoder* aDecoder, PalettedSurfaceSink* aSink) {
- // Write the first 99 rows of our 100x100 surface and verify that even
- // though our lambda will yield pixels forever, only one row is written per
- // call to WritePixelsToRow().
- for (int row = 0; row < 99; ++row) {
- uint32_t count = 0;
- WriteState result = aSink->WritePixelsToRow<uint8_t>([&]{
- ++count;
- return AsVariant(uint8_t(255));
- });
-
- EXPECT_EQ(WriteState::NEED_MORE_DATA, result);
- EXPECT_EQ(100u, count);
- EXPECT_FALSE(aSink->IsSurfaceFinished());
-
- Maybe<SurfaceInvalidRect> invalidRect = aSink->TakeInvalidRect();
- EXPECT_TRUE(invalidRect.isSome());
- EXPECT_EQ(IntRect(0, row, 100, 1), invalidRect->mInputSpaceRect);
- EXPECT_EQ(IntRect(0, row, 100, 1), invalidRect->mOutputSpaceRect);
-
- CheckGeneratedPalettedImage(aDecoder, IntRect(0, 0, 100, row + 1));
- }
-
- // Write the final line, which should finish the surface.
- uint32_t count = 0;
- WriteState result = aSink->WritePixelsToRow<uint8_t>([&]{
- ++count;
- return AsVariant(uint8_t(255));
- });
-
- EXPECT_EQ(WriteState::FINISHED, result);
- EXPECT_EQ(100u, count);
-
- // Note that the final invalid rect we expect here is only the last row;
- // that's because we called TakeInvalidRect() repeatedly in the loop above.
- AssertCorrectPipelineFinalState(aSink,
- IntRect(0, 99, 100, 1),
- IntRect(0, 99, 100, 1));
-
- // Check that the generated image is correct.
- CheckGeneratedPalettedImage(aDecoder, IntRect(0, 0, 100, 100));
-
- // Attempt to write more and make sure that nothing gets written.
- count = 0;
- result = aSink->WritePixelsToRow<uint8_t>([&]{
- count++;
- return AsVariant(uint8_t(128));
- });
-
- EXPECT_EQ(WriteState::FINISHED, result);
- EXPECT_EQ(0u, count);
- EXPECT_TRUE(aSink->IsSurfaceFinished());
-
- // Check that the generated image is still correct.
- CheckGeneratedPalettedImage(aDecoder, IntRect(0, 0, 100, 100));
- });
-}
-
-TEST(ImageSurfaceSink, PalettedSurfaceSinkWritePixelsToRowEarlyExit)
-{
- auto checkEarlyExit =
- [](Decoder* aDecoder, PalettedSurfaceSink* aSink, WriteState aState) {
- // Write half a row of 255s and then exit early with |aState|. If the lambda
- // keeps getting called, we'll write 128s, which will cause the test to
- // fail.
- uint32_t count = 0;
- auto result = aSink->WritePixelsToRow<uint8_t>([&]() -> NextPixel<uint8_t> {
- if (count == 50) {
- return AsVariant(aState);
- }
- return count++ < 50 ? AsVariant(uint8_t(255))
- : AsVariant(uint8_t(128));
- });
-
- EXPECT_EQ(aState, result);
- EXPECT_EQ(50u, count);
- CheckGeneratedPalettedImage(aDecoder, IntRect(0, 0, 50, 1));
-
- if (aState != WriteState::FINISHED) {
- // We should still be able to write more at this point.
- EXPECT_FALSE(aSink->IsSurfaceFinished());
-
- // Verify that we can resume the same row and still stop at the end.
- count = 0;
- WriteState result = aSink->WritePixelsToRow<uint8_t>([&]{
- ++count;
- return AsVariant(uint8_t(255));
- });
-
- EXPECT_EQ(WriteState::NEED_MORE_DATA, result);
- EXPECT_EQ(50u, count);
- EXPECT_FALSE(aSink->IsSurfaceFinished());
- CheckGeneratedPalettedImage(aDecoder, IntRect(0, 0, 100, 1));
-
- return;
- }
-
- // We should've finished the surface at this point.
- AssertCorrectPipelineFinalState(aSink,
- IntRect(0, 0, 100, 100),
- IntRect(0, 0, 100, 100));
-
- // Attempt to write more and make sure that nothing gets written.
- count = 0;
- result = aSink->WritePixelsToRow<uint8_t>([&]{
- count++;
- return AsVariant(uint8_t(128));
- });
-
- EXPECT_EQ(WriteState::FINISHED, result);
- EXPECT_EQ(0u, count);
- EXPECT_TRUE(aSink->IsSurfaceFinished());
-
- // Check that the generated image is still correct.
- CheckGeneratedPalettedImage(aDecoder, IntRect(0, 0, 50, 1));
- };
-
- WithPalettedSurfaceSink(IntRect(0, 0, 100, 100),
- [&](Decoder* aDecoder, PalettedSurfaceSink* aSink) {
- checkEarlyExit(aDecoder, aSink, WriteState::NEED_MORE_DATA);
- });
-
- WithPalettedSurfaceSink(IntRect(0, 0, 100, 100),
- [&](Decoder* aDecoder, PalettedSurfaceSink* aSink) {
- checkEarlyExit(aDecoder, aSink, WriteState::FAILURE);
- });
-
- WithPalettedSurfaceSink(IntRect(0, 0, 100, 100),
- [&](Decoder* aDecoder, PalettedSurfaceSink* aSink) {
- checkEarlyExit(aDecoder, aSink, WriteState::FINISHED);
- });
-}
-
-TEST(ImageSurfaceSink, PalettedSurfaceSinkWriteBuffer)
-{
- WithPalettedSurfaceSink(IntRect(0, 0, 100, 100),
- [](Decoder* aDecoder, PalettedSurfaceSink* aSink) {
- // Create a buffer the same size as one row of the surface (which is 100x100),
- // containing 60 pixels of 255 in the middle and 20 transparent pixels of 0 on
- // either side.
- uint8_t buffer[100];
- for (int i = 0; i < 100; ++i) {
- buffer[i] = 20 <= i && i < 80 ? 255 : 0;
- }
-
- // Write the buffer to every row of the surface and check that the generated
- // image is correct.
- CheckPalettedIterativeWrite(aDecoder, aSink, IntRect(20, 0, 60, 100), [&]{
- return aSink->WriteBuffer(buffer);
- });
- });
-}
-
-TEST(ImageSurfaceSink, PalettedSurfaceSinkWriteBufferPartialRow)
-{
- WithPalettedSurfaceSink(IntRect(0, 0, 100, 100),
- [](Decoder* aDecoder, PalettedSurfaceSink* aSink) {
- // Create a buffer the same size as one row of the surface, containing all
- // 255 pixels.
- uint8_t buffer[100];
- for (int i = 0; i < 100; ++i) {
- buffer[i] = 255;
- }
-
- // Write the buffer to the middle 60 pixels of every row of the surface and
- // check that the generated image is correct.
- CheckPalettedIterativeWrite(aDecoder, aSink, IntRect(20, 0, 60, 100), [&]{
- return aSink->WriteBuffer(buffer, 20, 60);
- });
- });
-}
-
-TEST(ImageSurfaceSink, PalettedSurfaceSinkWriteBufferPartialRowStartColOverflow)
-{
- WithPalettedSurfaceSink(IntRect(0, 0, 100, 100),
- [](Decoder* aDecoder, PalettedSurfaceSink* aSink) {
- // Create a buffer the same size as one row of the surface, containing all
- // 255 pixels.
- uint8_t buffer[100];
- for (int i = 0; i < 100; ++i) {
- buffer[i] = 255;
- }
-
- {
- // Write the buffer to successive rows until every row of the surface
- // has been written. We place the start column beyond the end of the row,
- // which will prevent us from writing anything, so we check that the
- // generated image is entirely 0.
- CheckPalettedIterativeWrite(aDecoder, aSink, IntRect(0, 0, 0, 0), [&]{
- return aSink->WriteBuffer(buffer, 100, 100);
- });
- }
-
- ResetForNextPass(aSink);
-
- {
- // Write the buffer to successive rows until every row of the surface
- // has been written. We use column 50 as the start column, but we still
- // write the buffer, which means we overflow the right edge of the surface
- // by 50 pixels. We check that the left half of the generated image is
- // 0 and the right half is 255.
- CheckPalettedIterativeWrite(aDecoder, aSink, IntRect(50, 0, 50, 100), [&]{
- return aSink->WriteBuffer(buffer, 50, 100);
- });
- }
- });
-}
-
-TEST(ImageSurfaceSink, PalettedSurfaceSinkWriteBufferPartialRowBufferOverflow)
-{
- WithPalettedSurfaceSink(IntRect(0, 0, 100, 100),
- [](Decoder* aDecoder, PalettedSurfaceSink* aSink) {
- // Create a buffer twice as large as a row of the surface. The first half
- // (which is as large as a row of the image) will contain 255 pixels,
- // while the second half will contain 128 pixels.
- uint8_t buffer[200];
- for (int i = 0; i < 200; ++i) {
- buffer[i] = i < 100 ? 255 : 128;
- }
-
- {
- // Write the buffer to successive rows until every row of the surface has
- // been written. The buffer extends 100 pixels to the right of a row of
- // the surface, but bounds checking will prevent us from overflowing the
- // buffer. We check that the generated image is entirely 255 since the
- // pixels on the right side of the buffer shouldn't have been written to
- // the surface.
- CheckPalettedIterativeWrite(aDecoder, aSink, IntRect(0, 0, 100, 100), [&]{
- return aSink->WriteBuffer(buffer, 0, 200);
- });
- }
-
- ResetForNextPass(aSink);
-
- {
- // Write from the buffer to the middle of each row of the surface. That
- // means that the left side of each row should be 0, since we didn't write
- // anything there. A buffer overflow would cause us to write buffer
- // contents into the left side of each row. We check that the generated
- // image is 0 on the left side and 255 on the right.
- CheckPalettedIterativeWrite(aDecoder, aSink, IntRect(50, 0, 50, 100), [&]{
- return aSink->WriteBuffer(buffer, 50, 200);
- });
- }
- });
-}
-
-TEST(ImageSurfaceSink, PalettedSurfaceSinkWriteBufferFromNullSource)
-{
- WithPalettedSurfaceSink(IntRect(0, 0, 100, 100),
- [](Decoder* aDecoder, PalettedSurfaceSink* aSink) {
- // Calling WriteBuffer() with a null pointer should fail without making any
- // changes to the surface.
- uint8_t* nullBuffer = nullptr;
- WriteState result = aSink->WriteBuffer(nullBuffer);
-
- EXPECT_EQ(WriteState::FAILURE, result);
- EXPECT_FALSE(aSink->IsSurfaceFinished());
- Maybe<SurfaceInvalidRect> invalidRect = aSink->TakeInvalidRect();
- EXPECT_TRUE(invalidRect.isNothing());
-
- // Check that nothing got written to the surface.
- CheckGeneratedPalettedImage(aDecoder, IntRect(0, 0, 0, 0));
- });
-}
-
-TEST(ImageSurfaceSink, PalettedSurfaceSinkWriteEmptyRow)
-{
- WithPalettedSurfaceSink(IntRect(0, 0, 100, 100),
- [](Decoder* aDecoder, PalettedSurfaceSink* aSink) {
- {
- // Write an empty row to each row of the surface. We check that the
- // generated image is entirely 0.
- CheckPalettedIterativeWrite(aDecoder, aSink, IntRect(0, 0, 0, 0), [&]{
- return aSink->WriteEmptyRow();
- });
- }
-
- ResetForNextPass(aSink);
-
- {
- // Write a partial row before we begin calling WriteEmptyRow(). We check
- // that the generated image is entirely 0, which is to be expected since
- // WriteEmptyRow() overwrites the current row even if some data has
- // already been written to it.
- uint32_t count = 0;
- auto result = aSink->WritePixels<uint8_t>([&]() -> NextPixel<uint8_t> {
- if (count == 50) {
- return AsVariant(WriteState::NEED_MORE_DATA);
- }
- ++count;
- return AsVariant(uint8_t(255));
- });
-
- EXPECT_EQ(WriteState::NEED_MORE_DATA, result);
- EXPECT_EQ(50u, count);
- EXPECT_FALSE(aSink->IsSurfaceFinished());
-
- CheckPalettedIterativeWrite(aDecoder, aSink, IntRect(0, 0, 0, 0), [&]{
- return aSink->WriteEmptyRow();
- });
- }
-
- ResetForNextPass(aSink);
-
- {
- // Create a buffer the same size as one row of the surface, containing all
- // 255 pixels.
- uint8_t buffer[100];
- for (int i = 0; i < 100; ++i) {
- buffer[i] = 255;
- }
-
- // Write an empty row to the middle 60 rows of the surface. The first 20
- // and last 20 rows will be 255. (We need to use DoCheckIterativeWrite()
- // here because we need a custom function to check the output, since it
- // can't be described by a simple rect.)
- auto writeFunc = [&](uint32_t aRow) {
- if (aRow < 20 || aRow >= 80) {
- return aSink->WriteBuffer(buffer);
- } else {
- return aSink->WriteEmptyRow();
- }
- };
-
- auto checkFunc = [&]{
- EXPECT_TRUE(PalettedRowsAreSolidColor(aDecoder, 0, 20, 255));
- EXPECT_TRUE(PalettedRowsAreSolidColor(aDecoder, 20, 60, 0));
- EXPECT_TRUE(PalettedRowsAreSolidColor(aDecoder, 80, 20, 255));
- };
-
- DoCheckIterativeWrite(aSink, writeFunc, checkFunc);
- }
- });
-}
-
-TEST(ImageSurfaceSink, PalettedSurfaceSinkWriteUnsafeComputedRow)
-{
- WithPalettedSurfaceSink(IntRect(0, 0, 100, 100),
- [](Decoder* aDecoder, PalettedSurfaceSink* aSink) {
- // Create an all-255 buffer the same size as one row of the surface.
- uint8_t buffer[100];
- for (int i = 0; i < 100; ++i) {
- buffer[i] = 255;
- }
-
- // Write the buffer to successive rows until every row of the surface has
- // been written. We only write to the right half of each row, so we check
- // that the left side of the generated image is 0 and the right side is 255.
- CheckPalettedIterativeWrite(aDecoder, aSink, IntRect(50, 0, 50, 100), [&]{
- return aSink->WriteUnsafeComputedRow<uint8_t>([&](uint8_t* aRow,
- uint32_t aLength) {
- EXPECT_EQ(100u, aLength );
- memcpy(aRow + 50, buffer, 50 * sizeof(uint8_t));
- });
- });
- });
-}
diff --git a/image/test/gtest/animated-with-extra-image-sub-blocks.gif b/image/test/gtest/animated-with-extra-image-sub-blocks.gif
deleted file mode 100644
index a145c814a6..0000000000
--- a/image/test/gtest/animated-with-extra-image-sub-blocks.gif
+++ /dev/null
Binary files differ
diff --git a/image/test/gtest/corrupt-with-bad-bmp-height.ico b/image/test/gtest/corrupt-with-bad-bmp-height.ico
deleted file mode 100644
index ee4a90fcd7..0000000000
--- a/image/test/gtest/corrupt-with-bad-bmp-height.ico
+++ /dev/null
Binary files differ
diff --git a/image/test/gtest/corrupt-with-bad-bmp-width.ico b/image/test/gtest/corrupt-with-bad-bmp-width.ico
deleted file mode 100644
index aa4051cd07..0000000000
--- a/image/test/gtest/corrupt-with-bad-bmp-width.ico
+++ /dev/null
Binary files differ
diff --git a/image/test/gtest/corrupt.jpg b/image/test/gtest/corrupt.jpg
deleted file mode 100644
index 555a416d7d..0000000000
--- a/image/test/gtest/corrupt.jpg
+++ /dev/null
Binary files differ
diff --git a/image/test/gtest/downscaled.bmp b/image/test/gtest/downscaled.bmp
deleted file mode 100644
index 9e6a29e62b..0000000000
--- a/image/test/gtest/downscaled.bmp
+++ /dev/null
Binary files differ
diff --git a/image/test/gtest/downscaled.gif b/image/test/gtest/downscaled.gif
deleted file mode 100644
index ff9a20bcdb..0000000000
--- a/image/test/gtest/downscaled.gif
+++ /dev/null
Binary files differ
diff --git a/image/test/gtest/downscaled.ico b/image/test/gtest/downscaled.ico
deleted file mode 100644
index ee112af0a9..0000000000
--- a/image/test/gtest/downscaled.ico
+++ /dev/null
Binary files differ
diff --git a/image/test/gtest/downscaled.icon b/image/test/gtest/downscaled.icon
deleted file mode 100644
index 19785f5dcb..0000000000
--- a/image/test/gtest/downscaled.icon
+++ /dev/null
Binary files differ
diff --git a/image/test/gtest/downscaled.jpg b/image/test/gtest/downscaled.jpg
deleted file mode 100644
index 5a4b3cd036..0000000000
--- a/image/test/gtest/downscaled.jpg
+++ /dev/null
Binary files differ
diff --git a/image/test/gtest/downscaled.png b/image/test/gtest/downscaled.png
deleted file mode 100644
index b71b4652d5..0000000000
--- a/image/test/gtest/downscaled.png
+++ /dev/null
Binary files differ
diff --git a/image/test/gtest/first-frame-green.gif b/image/test/gtest/first-frame-green.gif
deleted file mode 100644
index cd3c7d3db8..0000000000
--- a/image/test/gtest/first-frame-green.gif
+++ /dev/null
Binary files differ
diff --git a/image/test/gtest/first-frame-green.png b/image/test/gtest/first-frame-green.png
deleted file mode 100644
index 115f035d89..0000000000
--- a/image/test/gtest/first-frame-green.png
+++ /dev/null
Binary files differ
diff --git a/image/test/gtest/first-frame-padding.gif b/image/test/gtest/first-frame-padding.gif
deleted file mode 100644
index e6d7c49322..0000000000
--- a/image/test/gtest/first-frame-padding.gif
+++ /dev/null
Binary files differ
diff --git a/image/test/gtest/green-1x1-truncated.gif b/image/test/gtest/green-1x1-truncated.gif
deleted file mode 100644
index 0829f9694d..0000000000
--- a/image/test/gtest/green-1x1-truncated.gif
+++ /dev/null
Binary files differ
diff --git a/image/test/gtest/green.bmp b/image/test/gtest/green.bmp
deleted file mode 100644
index f79dd672ad..0000000000
--- a/image/test/gtest/green.bmp
+++ /dev/null
Binary files differ
diff --git a/image/test/gtest/green.gif b/image/test/gtest/green.gif
deleted file mode 100644
index ef215dfc94..0000000000
--- a/image/test/gtest/green.gif
+++ /dev/null
Binary files differ
diff --git a/image/test/gtest/green.ico b/image/test/gtest/green.ico
deleted file mode 100644
index c5dfa8b538..0000000000
--- a/image/test/gtest/green.ico
+++ /dev/null
Binary files differ
diff --git a/image/test/gtest/green.icon b/image/test/gtest/green.icon
deleted file mode 100644
index c74e62fee5..0000000000
--- a/image/test/gtest/green.icon
+++ /dev/null
Binary files differ
diff --git a/image/test/gtest/green.jpg b/image/test/gtest/green.jpg
deleted file mode 100644
index 48c454d27c..0000000000
--- a/image/test/gtest/green.jpg
+++ /dev/null
Binary files differ
diff --git a/image/test/gtest/green.png b/image/test/gtest/green.png
deleted file mode 100644
index 7df25f33bd..0000000000
--- a/image/test/gtest/green.png
+++ /dev/null
Binary files differ
diff --git a/image/test/gtest/invalid-truncated-metadata.bmp b/image/test/gtest/invalid-truncated-metadata.bmp
deleted file mode 100644
index 228c5c9992..0000000000
--- a/image/test/gtest/invalid-truncated-metadata.bmp
+++ /dev/null
Binary files differ
diff --git a/image/test/gtest/moz.build b/image/test/gtest/moz.build
deleted file mode 100644
index 3548eaecc0..0000000000
--- a/image/test/gtest/moz.build
+++ /dev/null
@@ -1,79 +0,0 @@
-# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
-# vim: set filetype=python:
-# 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/.
-
-Library('imagetest')
-
-UNIFIED_SOURCES = [
- 'Common.cpp',
- 'TestADAM7InterpolatingFilter.cpp',
- 'TestCopyOnWrite.cpp',
- 'TestDecoders.cpp',
- 'TestDecodeToSurface.cpp',
- 'TestDeinterlacingFilter.cpp',
- 'TestLoader.cpp',
- 'TestMetadata.cpp',
- 'TestRemoveFrameRectFilter.cpp',
- 'TestSourceBuffer.cpp',
- 'TestStreamingLexer.cpp',
- 'TestSurfaceSink.cpp',
-]
-
-if CONFIG['MOZ_ENABLE_SKIA']:
- UNIFIED_SOURCES += [
- 'TestDownscalingFilter.cpp',
- 'TestSurfacePipeIntegration.cpp',
- ]
-
-SOURCES += [
- # Can't be unified because it manipulates the preprocessor environment.
- 'TestDownscalingFilterNoSkia.cpp',
-]
-
-TEST_HARNESS_FILES.gtest += [
- 'animated-with-extra-image-sub-blocks.gif',
- 'corrupt-with-bad-bmp-height.ico',
- 'corrupt-with-bad-bmp-width.ico',
- 'corrupt.jpg',
- 'downscaled.bmp',
- 'downscaled.gif',
- 'downscaled.ico',
- 'downscaled.icon',
- 'downscaled.jpg',
- 'downscaled.png',
- 'first-frame-green.gif',
- 'first-frame-green.png',
- 'first-frame-padding.gif',
- 'green-1x1-truncated.gif',
- 'green.bmp',
- 'green.gif',
- 'green.ico',
- 'green.icon',
- 'green.jpg',
- 'green.png',
- 'invalid-truncated-metadata.bmp',
- 'no-frame-delay.gif',
- 'rle4.bmp',
- 'rle8.bmp',
- 'transparent-ico-with-and-mask.ico',
- 'transparent-if-within-ico.bmp',
- 'transparent.gif',
- 'transparent.png',
-]
-
-include('/ipc/chromium/chromium-config.mozbuild')
-
-LOCAL_INCLUDES += [
- '/dom/base',
- '/gfx/2d',
- '/image',
-]
-
-LOCAL_INCLUDES += CONFIG['SKIA_INCLUDES']
-
-FINAL_LIBRARY = 'xul-gtest'
-
-if CONFIG['GNU_CXX']:
- CXXFLAGS += ['-Wno-error=shadow']
diff --git a/image/test/gtest/no-frame-delay.gif b/image/test/gtest/no-frame-delay.gif
deleted file mode 100644
index 1c50b67431..0000000000
--- a/image/test/gtest/no-frame-delay.gif
+++ /dev/null
Binary files differ
diff --git a/image/test/gtest/rle4.bmp b/image/test/gtest/rle4.bmp
deleted file mode 100644
index 78a0927870..0000000000
--- a/image/test/gtest/rle4.bmp
+++ /dev/null
Binary files differ
diff --git a/image/test/gtest/rle8.bmp b/image/test/gtest/rle8.bmp
deleted file mode 100644
index bd793b6b66..0000000000
--- a/image/test/gtest/rle8.bmp
+++ /dev/null
Binary files differ
diff --git a/image/test/gtest/transparent-ico-with-and-mask.ico b/image/test/gtest/transparent-ico-with-and-mask.ico
deleted file mode 100644
index ab0dc4bce1..0000000000
--- a/image/test/gtest/transparent-ico-with-and-mask.ico
+++ /dev/null
Binary files differ
diff --git a/image/test/gtest/transparent-if-within-ico.bmp b/image/test/gtest/transparent-if-within-ico.bmp
deleted file mode 100644
index 4dc04c181b..0000000000
--- a/image/test/gtest/transparent-if-within-ico.bmp
+++ /dev/null
Binary files differ
diff --git a/image/test/gtest/transparent.gif b/image/test/gtest/transparent.gif
deleted file mode 100644
index 48f5c7caf1..0000000000
--- a/image/test/gtest/transparent.gif
+++ /dev/null
Binary files differ
diff --git a/image/test/gtest/transparent.png b/image/test/gtest/transparent.png
deleted file mode 100644
index fc8002053a..0000000000
--- a/image/test/gtest/transparent.png
+++ /dev/null
Binary files differ
diff --git a/security/manager/ssl/tests/unit/moz.build b/security/manager/ssl/tests/unit/moz.build
index 8a97120c28..3cca4c4fa6 100644
--- a/security/manager/ssl/tests/unit/moz.build
+++ b/security/manager/ssl/tests/unit/moz.build
@@ -31,7 +31,6 @@ TEST_DIRS += [
'test_ocsp_fetch_method',
'test_ocsp_url',
'test_onecrl',
- 'test_pinning_dynamic',
'test_startcom_wosign',
'test_validity',
]
diff --git a/toolkit/mozapps/update/updater/moz.build b/toolkit/mozapps/update/updater/moz.build
index 1cca83b5b9..52eaba21d1 100644
--- a/toolkit/mozapps/update/updater/moz.build
+++ b/toolkit/mozapps/update/updater/moz.build
@@ -11,8 +11,6 @@ else:
updater_rel_path = ''
include('updater-common.build')
-if CONFIG['ENABLE_TESTS']:
- DIRS += ['updater-xpcshell']
CXXFLAGS += CONFIG['MOZ_BZ2_CFLAGS']
diff --git a/toolkit/mozapps/update/updater/updater-xpcshell/Makefile.in b/toolkit/mozapps/update/updater/updater-xpcshell/Makefile.in
deleted file mode 100644
index 01822b1861..0000000000
--- a/toolkit/mozapps/update/updater/updater-xpcshell/Makefile.in
+++ /dev/null
@@ -1,41 +0,0 @@
-# vim:set ts=8 sw=8 sts=8 noet:
-# 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/.
-
-# For changes here, also consider ../Makefile.in
-
-XPCSHELLTESTROOT = $(topobjdir)/_tests/xpcshell/toolkit/mozapps/update/tests
-MOCHITESTROOT = $(topobjdir)/_tests/testing/mochitest/chrome/toolkit/mozapps/update/tests
-
-include $(topsrcdir)/config/rules.mk
-
-ifndef MOZ_WINCONSOLE
-ifdef MOZ_DEBUG
-MOZ_WINCONSOLE = 1
-else
-MOZ_WINCONSOLE = 0
-endif
-endif
-
-ifdef COMPILE_ENVIRONMENT
-tools::
-ifeq (cocoa,$(MOZ_WIDGET_TOOLKIT))
- # Copy for xpcshell tests
- $(NSINSTALL) -D $(XPCSHELLTESTROOT)/data/updater-xpcshell.app
- rsync -a -C --exclude '*.in' $(srcdir)/../macbuild/Contents $(XPCSHELLTESTROOT)/data/updater-xpcshell.app
- sed -e 's/%APP_NAME%/$(MOZ_APP_DISPLAYNAME)/' $(srcdir)/../macbuild/Contents/Resources/English.lproj/InfoPlist.strings.in | \
- iconv -f UTF-8 -t UTF-16 > $(XPCSHELLTESTROOT)/data/updater-xpcshell.app/Contents/Resources/English.lproj/InfoPlist.strings
- $(NSINSTALL) -D $(XPCSHELLTESTROOT)/data/updater-xpcshell.app/Contents/MacOS/updater-xpcshell
- $(NSINSTALL) updater-xpcshell $(XPCSHELLTESTROOT)/data/updater-xpcshell.app/Contents/MacOS
- rm -Rf $(XPCSHELLTESTROOT)/data/updater.app
- mv $(XPCSHELLTESTROOT)/data/updater-xpcshell.app $(XPCSHELLTESTROOT)/data/updater.app
- mv $(XPCSHELLTESTROOT)/data/updater.app/Contents/MacOS/updater-xpcshell $(XPCSHELLTESTROOT)/data/updater.app/Contents/MacOS/org.mozilla.updater
-
- # Copy for mochitest chrome tests
- rsync -a -C $(XPCSHELLTESTROOT)/data/updater.app $(MOCHITESTROOT)/data/
-else
- cp $(PROGRAM) $(XPCSHELLTESTROOT)/data/updater$(BIN_SUFFIX)
- cp $(PROGRAM) $(MOCHITESTROOT)/data/updater$(BIN_SUFFIX)
-endif
-endif # COMPILE_ENVIRONMENT
diff --git a/toolkit/mozapps/update/updater/updater-xpcshell/moz.build b/toolkit/mozapps/update/updater/updater-xpcshell/moz.build
deleted file mode 100644
index 710b7e1dec..0000000000
--- a/toolkit/mozapps/update/updater/updater-xpcshell/moz.build
+++ /dev/null
@@ -1,14 +0,0 @@
-# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
-# vim: set filetype=python:
-# 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/.
-
-Program('updater-xpcshell')
-
-updater_rel_path = '../'
-DIST_INSTALL = False
-DEFINES['TEST_UPDATER'] = True
-include('../updater-common.build')
-
-CXXFLAGS += CONFIG['MOZ_BZ2_CFLAGS']