mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-08 02:14:43 +00:00
Merge latest green fx-team changeset and mozilla-central
This commit is contained in:
commit
548e0d10a5
2
CLOBBER
2
CLOBBER
@ -22,4 +22,4 @@
|
||||
# changes to stick? As of bug 928195, this shouldn't be necessary! Please
|
||||
# don't change CLOBBER for WebIDL changes any more.
|
||||
|
||||
Bug 958889 moves files into the new mobile/android/base/tabspanel/ package.
|
||||
Bug 1003702 - ICU is unhappy.
|
||||
|
@ -597,6 +597,14 @@ this.UtteranceGenerator = {
|
||||
|
||||
rowheader: function rowheader() {
|
||||
return this.objectOutputFunctions.cell.apply(this, arguments);
|
||||
},
|
||||
|
||||
statictext: function statictext(aAccessible) {
|
||||
if (Utils.isListItemDecorator(aAccessible, true)) {
|
||||
return [];
|
||||
}
|
||||
|
||||
return this.objectOutputFunctions.defaultFunc.apply(this, arguments);
|
||||
}
|
||||
},
|
||||
|
||||
@ -778,7 +786,7 @@ this.BrailleGenerator = {
|
||||
statictext: function statictext(aAccessible, aRoleStr, aState, aFlags) {
|
||||
// Since we customize the list bullet's output, we add the static
|
||||
// text from the first node in each listitem, so skip it here.
|
||||
if (aAccessible.parent.role == Roles.LISTITEM) {
|
||||
if (Utils.isListItemDecorator(aAccessible)) {
|
||||
return [];
|
||||
}
|
||||
|
||||
|
@ -2,6 +2,10 @@
|
||||
* 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/. */
|
||||
|
||||
/* global PrefCache, Roles, Prefilters, States, Filters, Utils,
|
||||
TraversalRules */
|
||||
/* exported TraversalRules */
|
||||
|
||||
'use strict';
|
||||
|
||||
const Cc = Components.classes;
|
||||
@ -9,17 +13,17 @@ const Ci = Components.interfaces;
|
||||
const Cu = Components.utils;
|
||||
const Cr = Components.results;
|
||||
|
||||
this.EXPORTED_SYMBOLS = ['TraversalRules'];
|
||||
this.EXPORTED_SYMBOLS = ['TraversalRules']; // jshint ignore:line
|
||||
|
||||
Cu.import('resource://gre/modules/accessibility/Utils.jsm');
|
||||
Cu.import('resource://gre/modules/XPCOMUtils.jsm');
|
||||
XPCOMUtils.defineLazyModuleGetter(this, 'Roles',
|
||||
XPCOMUtils.defineLazyModuleGetter(this, 'Roles', // jshint ignore:line
|
||||
'resource://gre/modules/accessibility/Constants.jsm');
|
||||
XPCOMUtils.defineLazyModuleGetter(this, 'Filters',
|
||||
XPCOMUtils.defineLazyModuleGetter(this, 'Filters', // jshint ignore:line
|
||||
'resource://gre/modules/accessibility/Constants.jsm');
|
||||
XPCOMUtils.defineLazyModuleGetter(this, 'States',
|
||||
XPCOMUtils.defineLazyModuleGetter(this, 'States', // jshint ignore:line
|
||||
'resource://gre/modules/accessibility/Constants.jsm');
|
||||
XPCOMUtils.defineLazyModuleGetter(this, 'Prefilters',
|
||||
XPCOMUtils.defineLazyModuleGetter(this, 'Prefilters', // jshint ignore:line
|
||||
'resource://gre/modules/accessibility/Constants.jsm');
|
||||
|
||||
let gSkipEmptyImages = new PrefCache('accessibility.accessfu.skip_empty_images');
|
||||
@ -30,7 +34,7 @@ function BaseTraversalRule(aRoles, aMatchFunc, aPreFilter) {
|
||||
if (aRoles.indexOf(Roles.LABEL) < 0) {
|
||||
this._matchRoles.push(Roles.LABEL);
|
||||
}
|
||||
this._matchFunc = aMatchFunc || function (acc) { return Filters.MATCH; };
|
||||
this._matchFunc = aMatchFunc || function() { return Filters.MATCH; };
|
||||
this.preFilter = aPreFilter || gSimplePreFilter;
|
||||
}
|
||||
|
||||
@ -91,17 +95,28 @@ var gSimpleTraversalRoles =
|
||||
Roles.SLIDER,
|
||||
Roles.SPINBUTTON,
|
||||
Roles.OPTION,
|
||||
Roles.LISTITEM,
|
||||
// Used for traversing in to child OOP frames.
|
||||
Roles.INTERNAL_FRAME];
|
||||
|
||||
var gSimpleMatchFunc = function gSimpleMatchFunc(aAccessible) {
|
||||
function hasZeroOrSingleChildDescendants () {
|
||||
for (let acc = aAccessible; acc.childCount > 0; acc = acc.firstChild) {
|
||||
if (acc.childCount > 1) {
|
||||
// An object is simple, if it either has a single child lineage,
|
||||
// or has a flat subtree.
|
||||
function isSingleLineage(acc) {
|
||||
for (let child = acc; child; child = child.firstChild) {
|
||||
if (child.childCount > 1) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
function isFlatSubtree(acc) {
|
||||
for (let child = acc.firstChild; child; child = child.nextSibling) {
|
||||
if (child.childCount > 0) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -114,30 +129,28 @@ var gSimpleMatchFunc = function gSimpleMatchFunc(aAccessible) {
|
||||
{
|
||||
// Nameless text leaves are boring, skip them.
|
||||
let name = aAccessible.name;
|
||||
if (name && name.trim())
|
||||
return Filters.MATCH;
|
||||
else
|
||||
return Filters.IGNORE;
|
||||
return (name && name.trim()) ? Filters.MATCH : Filters.IGNORE;
|
||||
}
|
||||
case Roles.STATICTEXT:
|
||||
{
|
||||
let parent = aAccessible.parent;
|
||||
// Ignore prefix static text in list items. They are typically bullets or numbers.
|
||||
if (parent.childCount > 1 && aAccessible.indexInParent == 0 &&
|
||||
parent.role == Roles.LISTITEM)
|
||||
return Filters.IGNORE;
|
||||
|
||||
return Filters.MATCH;
|
||||
}
|
||||
// Ignore prefix static text in list items. They are typically bullets or numbers.
|
||||
return Utils.isListItemDecorator(aAccessible) ?
|
||||
Filters.IGNORE : Filters.MATCH;
|
||||
case Roles.GRAPHIC:
|
||||
return TraversalRules._shouldSkipImage(aAccessible);
|
||||
case Roles.HEADER:
|
||||
case Roles.HEADING:
|
||||
if ((aAccessible.childCount > 0 || aAccessible.name) &&
|
||||
hasZeroOrSingleChildDescendants()) {
|
||||
(isSingleLineage(aAccessible) || isFlatSubtree(aAccessible))) {
|
||||
return Filters.MATCH | Filters.IGNORE_SUBTREE;
|
||||
} else {
|
||||
return Filters.IGNORE;
|
||||
}
|
||||
return Filters.IGNORE;
|
||||
case Roles.LISTITEM:
|
||||
{
|
||||
let item = aAccessible.childCount === 2 &&
|
||||
aAccessible.firstChild.role === Roles.STATICTEXT ?
|
||||
aAccessible.lastChild : aAccessible;
|
||||
return isSingleLineage(item) || isFlatSubtree(item) ?
|
||||
Filters.MATCH | Filters.IGNORE_SUBTREE : Filters.IGNORE;
|
||||
}
|
||||
default:
|
||||
// Ignore the subtree, if there is one. So that we don't land on
|
||||
@ -152,7 +165,7 @@ var gSimplePreFilter = Prefilters.DEFUNCT |
|
||||
Prefilters.ARIA_HIDDEN |
|
||||
Prefilters.TRANSPARENT;
|
||||
|
||||
this.TraversalRules = {
|
||||
this.TraversalRules = { // jshint ignore:line
|
||||
Simple: new BaseTraversalRule(gSimpleTraversalRoles, gSimpleMatchFunc),
|
||||
|
||||
SimpleOnScreen: new BaseTraversalRule(
|
||||
|
@ -343,6 +343,17 @@ this.Utils = {
|
||||
}
|
||||
|
||||
return null;
|
||||
},
|
||||
|
||||
isListItemDecorator: function isListItemDecorator(aStaticText,
|
||||
aExcludeOrdered) {
|
||||
let parent = aStaticText.parent;
|
||||
if (aExcludeOrdered && parent.parent.DOMNode.nodeName === 'OL') {
|
||||
return false;
|
||||
}
|
||||
|
||||
return parent.role === Roles.LISTITEM && parent.childCount > 1 &&
|
||||
aStaticText.indexInParent === 0;
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -92,6 +92,17 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=753984
|
||||
["1.", "list one"],
|
||||
["1.", "list one"]
|
||||
]
|
||||
},
|
||||
{
|
||||
accOrElmOrID: "li_two",
|
||||
expectedUtterance: [
|
||||
["list 1 item", "First item", "list two"],
|
||||
["list two", "First item", "list 1 item"]
|
||||
],
|
||||
expectedBraille: [
|
||||
["*", "list two"],
|
||||
["*", "list two"]
|
||||
]
|
||||
}, {
|
||||
accOrElmOrID: "cell",
|
||||
expectedUtterance: [[
|
||||
@ -339,8 +350,13 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=753984
|
||||
["I am pressed!", "pressed toggle button"]],
|
||||
expectedBraille: [["(x)", "I am pressed!"],
|
||||
["I am pressed!", "(x)"]]
|
||||
}
|
||||
];
|
||||
}, {
|
||||
accOrElmOrID: "listbox-option",
|
||||
expectedUtterance: [["list box", "option", "Search suggestion"],
|
||||
["Search suggestion", "option", "list box"]],
|
||||
expectedBraille: [["option", "Search suggestion"],
|
||||
["Search suggestion", "option"]]
|
||||
}];
|
||||
|
||||
// Test all possible utterance order preference values.
|
||||
tests.forEach(function run(test) {
|
||||
@ -402,6 +418,9 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=753984
|
||||
<ol id="list">
|
||||
<li id="li_one">list one</li>
|
||||
</ol>
|
||||
<ul id="unorderd_list">
|
||||
<li id="li_two">list two</li>
|
||||
</ul>
|
||||
<dl id="dlist">
|
||||
<dd id="dd_one">
|
||||
dd one
|
||||
@ -454,6 +473,9 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=753984
|
||||
<label>Points: <input id="range" type="range" name="points" min="1" max="10" value="3"></label>
|
||||
<div id="togglebutton_notpressed" aria-pressed="false" role="button" tabindex="-1">I ain't pressed</div>
|
||||
<div id="togglebutton_pressed" aria-pressed="true" role="button" tabindex="-1">I am pressed!</div>
|
||||
<ul role="listbox" style="list-style-type: none;">
|
||||
<li role="option" id="listbox-option">Search suggestion</li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -111,8 +111,8 @@
|
||||
'A esoteric weapon wielded by only the most ' +
|
||||
'formidable warriors, for its unrelenting strict' +
|
||||
' power is unfathomable.',
|
||||
'Lists of Programming Languages', 'Lisp ',
|
||||
'Scheme', 'Racket', 'Clojure', 'JavaScript', 'heading-5',
|
||||
'• Lists of Programming Languages', 'Lisp ',
|
||||
'1. Scheme', '2. Racket', '3. Clojure', '• JavaScript', 'heading-5',
|
||||
'image-2', 'image-3', 'Not actually an image',
|
||||
'link-1', 'anchor-1', 'link-2', 'anchor-2', 'link-3',
|
||||
'3', '1', '4', '1', 'Just an innocuous separator',
|
||||
|
@ -363,17 +363,6 @@ const PanelUI = {
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Open a dialog window that allow the user to customize listed character sets.
|
||||
*/
|
||||
onCharsetCustomizeCommand: function() {
|
||||
this.hide();
|
||||
window.openDialog("chrome://global/content/customizeCharset.xul",
|
||||
"PrefWindow",
|
||||
"chrome,modal=yes,resizable=yes",
|
||||
"browser");
|
||||
},
|
||||
|
||||
onWidgetAfterDOMChange: function(aNode, aNextNode, aContainer, aWasRemoval) {
|
||||
if (aContainer != this.contents) {
|
||||
return;
|
||||
|
@ -181,11 +181,12 @@ EOF
|
||||
fi
|
||||
|
||||
changequote([, ])
|
||||
|
||||
chmod +x $CONFIG_STATUS
|
||||
])
|
||||
|
||||
define([MOZ_RUN_CONFIG_STATUS],
|
||||
[
|
||||
chmod +x $CONFIG_STATUS
|
||||
rm -fr confdefs* $ac_clean_files
|
||||
dnl Execute config.status, unless --no-create was passed to configure.
|
||||
if test "$no_create" != yes && ! ${PYTHON} $CONFIG_STATUS; then
|
||||
|
@ -147,6 +147,9 @@ if test -z "$BUILDING_JS" -o -n "$JS_STANDALONE"; then
|
||||
ICU_CPPFLAGS="$ICU_CPPFLAGS -DUCONFIG_NO_TRANSLITERATION"
|
||||
ICU_CPPFLAGS="$ICU_CPPFLAGS -DUCONFIG_NO_REGULAR_EXPRESSIONS"
|
||||
ICU_CPPFLAGS="$ICU_CPPFLAGS -DUCONFIG_NO_BREAK_ITERATION"
|
||||
ICU_CPPFLAGS="$ICU_CPPFLAGS -DUCONFIG_NO_IDNA"
|
||||
# we don't need to pass data to and from legacy char* APIs
|
||||
ICU_CPPFLAGS="$ICU_CPPFLAGS -DU_CHARSET_IS_UTF8"
|
||||
# make sure to not accidentally pick up system-icu headers
|
||||
ICU_CPPFLAGS="$ICU_CPPFLAGS -I$icudir/common -I$icudir/i18n"
|
||||
|
||||
|
@ -99,11 +99,10 @@ nsSecurityNameSet::InitializeNameSet(nsIScriptContext* aScriptContext)
|
||||
securityObj = &v.toObject();
|
||||
} else {
|
||||
/* define netscape.security object */
|
||||
obj = JS_DefineObject(cx, global, "netscape", objectClass, nullptr, 0);
|
||||
obj = JS_DefineObject(cx, global, "netscape", objectClass);
|
||||
if (obj == nullptr)
|
||||
return NS_ERROR_FAILURE;
|
||||
securityObj = JS_DefineObject(cx, obj, "security", objectClass,
|
||||
nullptr, 0);
|
||||
securityObj = JS_DefineObject(cx, obj, "security", objectClass);
|
||||
if (securityObj == nullptr)
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
@ -118,8 +117,7 @@ nsSecurityNameSet::InitializeNameSet(nsIScriptContext* aScriptContext)
|
||||
return NS_OK;
|
||||
|
||||
/* Define PrivilegeManager object with the necessary "static" methods. */
|
||||
obj = JS_DefineObject(cx, securityObj, "PrivilegeManager", objectClass,
|
||||
nullptr, 0);
|
||||
obj = JS_DefineObject(cx, securityObj, "PrivilegeManager", objectClass);
|
||||
if (obj == nullptr)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
|
136
configure.in
136
configure.in
@ -2548,114 +2548,17 @@ dnl Check for .hidden assembler directive and visibility attribute.
|
||||
dnl Borrowed from glibc configure.in
|
||||
dnl ===============================================================
|
||||
if test "$GNU_CC"; then
|
||||
AC_CACHE_CHECK(for visibility(hidden) attribute,
|
||||
ac_cv_visibility_hidden,
|
||||
[cat > conftest.c <<EOF
|
||||
int foo __attribute__ ((visibility ("hidden"))) = 1;
|
||||
EOF
|
||||
ac_cv_visibility_hidden=no
|
||||
if ${CC-cc} -Werror -S conftest.c -o conftest.s >/dev/null 2>&1; then
|
||||
if egrep '\.(hidden|private_extern).*foo' conftest.s >/dev/null; then
|
||||
ac_cv_visibility_hidden=yes
|
||||
fi
|
||||
fi
|
||||
rm -f conftest.[cs]
|
||||
])
|
||||
if test "$ac_cv_visibility_hidden" = "yes"; then
|
||||
AC_DEFINE(HAVE_VISIBILITY_HIDDEN_ATTRIBUTE)
|
||||
|
||||
AC_CACHE_CHECK(for visibility(default) attribute,
|
||||
ac_cv_visibility_default,
|
||||
[cat > conftest.c <<EOF
|
||||
int foo __attribute__ ((visibility ("default"))) = 1;
|
||||
EOF
|
||||
ac_cv_visibility_default=no
|
||||
if ${CC-cc} -fvisibility=hidden -Werror -S conftest.c -o conftest.s >/dev/null 2>&1; then
|
||||
if ! egrep '\.(hidden|private_extern).*foo' conftest.s >/dev/null; then
|
||||
ac_cv_visibility_default=yes
|
||||
fi
|
||||
fi
|
||||
rm -f conftest.[cs]
|
||||
])
|
||||
if test "$ac_cv_visibility_default" = "yes"; then
|
||||
AC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE)
|
||||
|
||||
AC_CACHE_CHECK(for visibility pragma support,
|
||||
ac_cv_visibility_pragma,
|
||||
[cat > conftest.c <<EOF
|
||||
#pragma GCC visibility push(hidden)
|
||||
int foo_hidden = 1;
|
||||
#pragma GCC visibility push(default)
|
||||
int foo_default = 1;
|
||||
EOF
|
||||
ac_cv_visibility_pragma=no
|
||||
if ${CC-cc} -Werror -S conftest.c -o conftest.s >/dev/null 2>&1; then
|
||||
if egrep '\.(hidden|private_extern).*foo_hidden' conftest.s >/dev/null; then
|
||||
if ! egrep '\.(hidden|private_extern).*foo_default' conftest.s > /dev/null; then
|
||||
ac_cv_visibility_pragma=yes
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
rm -f conftest.[cs]
|
||||
])
|
||||
if test "$ac_cv_visibility_pragma" = "yes"; then
|
||||
AC_CACHE_CHECK(For gcc visibility bug with class-level attributes (GCC bug 26905),
|
||||
ac_cv_have_visibility_class_bug,
|
||||
[cat > conftest.c <<EOF
|
||||
#pragma GCC visibility push(hidden)
|
||||
struct __attribute__ ((visibility ("default"))) TestStruct {
|
||||
static void Init();
|
||||
};
|
||||
__attribute__ ((visibility ("default"))) void TestFunc() {
|
||||
TestStruct::Init();
|
||||
}
|
||||
EOF
|
||||
ac_cv_have_visibility_class_bug=no
|
||||
if ! ${CXX-g++} ${CXXFLAGS} ${DSO_PIC_CFLAGS} ${DSO_LDOPTS} -S -o conftest.S conftest.c > /dev/null 2>&1 ; then
|
||||
ac_cv_have_visibility_class_bug=yes
|
||||
else
|
||||
if test `egrep -c '@PLT|\\$stub' conftest.S` = 0; then
|
||||
ac_cv_have_visibility_class_bug=yes
|
||||
fi
|
||||
fi
|
||||
rm -rf conftest.{c,S}
|
||||
])
|
||||
|
||||
AC_CACHE_CHECK(For x86_64 gcc visibility bug with builtins (GCC bug 20297),
|
||||
ac_cv_have_visibility_builtin_bug,
|
||||
[cat > conftest.c <<EOF
|
||||
#pragma GCC visibility push(hidden)
|
||||
#pragma GCC visibility push(default)
|
||||
#include <string.h>
|
||||
#pragma GCC visibility pop
|
||||
|
||||
__attribute__ ((visibility ("default"))) void Func() {
|
||||
char c[[100]];
|
||||
memset(c, 0, sizeof(c));
|
||||
}
|
||||
EOF
|
||||
ac_cv_have_visibility_builtin_bug=no
|
||||
if ! ${CC-cc} ${CFLAGS} ${DSO_PIC_CFLAGS} ${DSO_LDOPTS} -O2 -S -o conftest.S conftest.c > /dev/null 2>&1 ; then
|
||||
ac_cv_have_visibility_builtin_bug=yes
|
||||
else
|
||||
if test `grep -c "@PLT" conftest.S` = 0; then
|
||||
ac_cv_visibility_builtin_bug=yes
|
||||
fi
|
||||
fi
|
||||
rm -f conftest.{c,S}
|
||||
])
|
||||
if test "$ac_cv_have_visibility_builtin_bug" = "no" -a \
|
||||
"$ac_cv_have_visibility_class_bug" = "no"; then
|
||||
VISIBILITY_FLAGS='-I$(DIST)/system_wrappers -include $(topsrcdir)/config/gcc_hidden.h'
|
||||
WRAP_SYSTEM_INCLUDES=1
|
||||
STL_FLAGS='-I$(DIST)/stl_wrappers'
|
||||
WRAP_STL_INCLUDES=1
|
||||
else
|
||||
VISIBILITY_FLAGS='-fvisibility=hidden'
|
||||
fi # have visibility pragma bug
|
||||
fi # have visibility pragma
|
||||
fi # have visibility(default) attribute
|
||||
fi # have visibility(hidden) attribute
|
||||
AC_DEFINE(HAVE_VISIBILITY_HIDDEN_ATTRIBUTE)
|
||||
AC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE)
|
||||
case "${OS_TARGET}" in
|
||||
Darwin|Android)
|
||||
VISIBILITY_FLAGS='-fvisibility=hidden'
|
||||
;;
|
||||
*)
|
||||
VISIBILITY_FLAGS='-I$(DIST)/system_wrappers -include $(topsrcdir)/config/gcc_hidden.h'
|
||||
WRAP_SYSTEM_INCLUDES=1
|
||||
;;
|
||||
esac
|
||||
fi # GNU_CC
|
||||
|
||||
# visibility hidden flag for Sun Studio on Solaris
|
||||
@ -2663,6 +2566,15 @@ if test "$SOLARIS_SUNPRO_CC"; then
|
||||
VISIBILITY_FLAGS='-xldscope=hidden'
|
||||
fi # Sun Studio on Solaris
|
||||
|
||||
case "${OS_TARGET}" in
|
||||
WINNT|Darwin|Android)
|
||||
;;
|
||||
*)
|
||||
STL_FLAGS='-I$(DIST)/stl_wrappers'
|
||||
WRAP_STL_INCLUDES=1
|
||||
;;
|
||||
esac
|
||||
|
||||
AC_SUBST(WRAP_SYSTEM_INCLUDES)
|
||||
AC_SUBST(VISIBILITY_FLAGS)
|
||||
|
||||
@ -5955,6 +5867,11 @@ case "$OS_TARGET" in
|
||||
Darwin|WINNT|Linux)
|
||||
MOZ_GAMEPAD=1
|
||||
;;
|
||||
Android)
|
||||
if test "$MOZ_WIDGET_TOOLKIT" != "gonk"; then
|
||||
MOZ_GAMEPAD=1
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
;;
|
||||
esac
|
||||
@ -5979,6 +5896,9 @@ if test "$MOZ_GAMEPAD"; then
|
||||
fi
|
||||
MOZ_GAMEPAD_BACKEND=linux
|
||||
;;
|
||||
Android)
|
||||
MOZ_GAMEPAD_BACKEND=android
|
||||
;;
|
||||
*)
|
||||
;;
|
||||
esac
|
||||
|
@ -23,7 +23,7 @@ NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(DOMImplementation)
|
||||
NS_INTERFACE_MAP_ENTRY(nsISupports)
|
||||
NS_INTERFACE_MAP_END
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_1(DOMImplementation, mOwner)
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(DOMImplementation, mOwner)
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTING_ADDREF(DOMImplementation)
|
||||
NS_IMPL_CYCLE_COLLECTING_RELEASE(DOMImplementation)
|
||||
|
@ -38,7 +38,7 @@ NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(DOMParser)
|
||||
NS_INTERFACE_MAP_ENTRY(nsISupportsWeakReference)
|
||||
NS_INTERFACE_MAP_END
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_1(DOMParser, mOwner)
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(DOMParser, mOwner)
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTING_ADDREF(DOMParser)
|
||||
NS_IMPL_CYCLE_COLLECTING_RELEASE(DOMParser)
|
||||
|
@ -12,7 +12,7 @@
|
||||
using namespace mozilla;
|
||||
using namespace mozilla::dom;
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_1(DOMPoint, mParent)
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(DOMPoint, mParent)
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_ROOT_NATIVE(DOMPoint, AddRef)
|
||||
NS_IMPL_CYCLE_COLLECTION_UNROOT_NATIVE(DOMPoint, Release)
|
||||
|
@ -14,8 +14,8 @@ using namespace mozilla;
|
||||
using namespace mozilla::dom;
|
||||
using namespace mozilla::gfx;
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_6(DOMQuad, mParent, mBounds, mPoints[0],
|
||||
mPoints[1], mPoints[2], mPoints[3])
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(DOMQuad, mParent, mBounds, mPoints[0],
|
||||
mPoints[1], mPoints[2], mPoints[3])
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_ROOT_NATIVE(DOMQuad, AddRef)
|
||||
NS_IMPL_CYCLE_COLLECTION_UNROOT_NATIVE(DOMQuad, Release)
|
||||
|
@ -12,7 +12,7 @@
|
||||
using namespace mozilla;
|
||||
using namespace mozilla::dom;
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_1(DOMRectReadOnly, mParent)
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(DOMRectReadOnly, mParent)
|
||||
NS_IMPL_CYCLE_COLLECTING_ADDREF(DOMRectReadOnly)
|
||||
NS_IMPL_CYCLE_COLLECTING_RELEASE(DOMRectReadOnly)
|
||||
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(DOMRectReadOnly)
|
||||
@ -72,7 +72,7 @@ DOMRect::Constructor(const GlobalObject& aGlobal, double aX, double aY,
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_2(DOMRectList, mParent, mArray)
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(DOMRectList, mParent, mArray)
|
||||
|
||||
NS_INTERFACE_TABLE_HEAD(DOMRectList)
|
||||
NS_WRAPPERCACHE_INTERFACE_MAP_ENTRY
|
||||
|
@ -2874,8 +2874,7 @@ TestSitePerm(nsIPrincipal* aPrincipal, const char* aType, uint32_t aPerm, bool a
|
||||
return aPerm != nsIPermissionManager::ALLOW_ACTION;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIPermissionManager> permMgr =
|
||||
do_GetService("@mozilla.org/permissionmanager;1");
|
||||
nsCOMPtr<nsIPermissionManager> permMgr = services::GetPermissionManager();
|
||||
NS_ENSURE_TRUE(permMgr, false);
|
||||
|
||||
uint32_t perm;
|
||||
|
@ -62,8 +62,8 @@ nsDOMCaretPosition::WrapObject(JSContext *aCx)
|
||||
return mozilla::dom::CaretPositionBinding::Wrap(aCx, this);
|
||||
}
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_2(nsDOMCaretPosition,
|
||||
mOffsetNode, mAnonymousContentNode)
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(nsDOMCaretPosition,
|
||||
mOffsetNode, mAnonymousContentNode)
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTING_ADDREF(nsDOMCaretPosition)
|
||||
NS_IMPL_CYCLE_COLLECTING_RELEASE(nsDOMCaretPosition)
|
||||
|
@ -52,11 +52,11 @@ NS_INTERFACE_MAP_END
|
||||
NS_IMPL_CYCLE_COLLECTING_ADDREF(nsDOMMutationRecord)
|
||||
NS_IMPL_CYCLE_COLLECTING_RELEASE(nsDOMMutationRecord)
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_7(nsDOMMutationRecord,
|
||||
mTarget,
|
||||
mPreviousSibling, mNextSibling,
|
||||
mAddedNodes, mRemovedNodes,
|
||||
mNext, mOwner)
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(nsDOMMutationRecord,
|
||||
mTarget,
|
||||
mPreviousSibling, mNextSibling,
|
||||
mAddedNodes, mRemovedNodes,
|
||||
mNext, mOwner)
|
||||
|
||||
// Observer
|
||||
|
||||
|
@ -32,7 +32,7 @@ NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsDOMSerializer)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIDOMSerializer)
|
||||
NS_INTERFACE_MAP_END
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_1(nsDOMSerializer, mOwner)
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(nsDOMSerializer, mOwner)
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTING_ADDREF(nsDOMSerializer)
|
||||
NS_IMPL_CYCLE_COLLECTING_RELEASE(nsDOMSerializer)
|
||||
|
@ -29,7 +29,7 @@ nsDOMTokenList::nsDOMTokenList(Element* aElement, nsIAtom* aAttrAtom)
|
||||
|
||||
nsDOMTokenList::~nsDOMTokenList() { }
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_1(nsDOMTokenList, mElement)
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(nsDOMTokenList, mElement)
|
||||
|
||||
NS_INTERFACE_MAP_BEGIN(nsDOMTokenList)
|
||||
NS_WRAPPERCACHE_INTERFACE_MAP_ENTRY
|
||||
|
@ -12155,10 +12155,11 @@ nsIDocument::WrapObject(JSContext *aCx)
|
||||
|
||||
NS_NAMED_LITERAL_STRING(doc_str, "document");
|
||||
|
||||
if (!JS_DefineUCProperty(aCx, winVal.toObjectOrNull(), doc_str.get(),
|
||||
doc_str.Length(), JS::ObjectValue(*obj),
|
||||
JS_PropertyStub, JS_StrictPropertyStub,
|
||||
JSPROP_READONLY | JSPROP_ENUMERATE)) {
|
||||
JS::Rooted<JSObject*> winObj(aCx, &winVal.toObject());
|
||||
if (!JS_DefineUCProperty(aCx, winObj, doc_str.get(),
|
||||
doc_str.Length(), obj,
|
||||
JSPROP_READONLY | JSPROP_ENUMERATE,
|
||||
JS_PropertyStub, JS_StrictPropertyStub)) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
|
@ -22,7 +22,7 @@ nsFormData::nsFormData(nsISupports* aOwner)
|
||||
// -------------------------------------------------------------------------
|
||||
// nsISupports
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_1(nsFormData, mOwner)
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(nsFormData, mOwner)
|
||||
NS_IMPL_CYCLE_COLLECTING_ADDREF(nsFormData)
|
||||
NS_IMPL_CYCLE_COLLECTING_RELEASE(nsFormData)
|
||||
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsFormData)
|
||||
|
@ -2616,7 +2616,7 @@ nsFrameLoader::ResetPermissionManagerStatus()
|
||||
return;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIPermissionManager> permMgr = do_GetService(NS_PERMISSIONMANAGER_CONTRACTID);
|
||||
nsCOMPtr<nsIPermissionManager> permMgr = services::GetPermissionManager();
|
||||
if (!permMgr) {
|
||||
NS_ERROR("No PermissionManager available!");
|
||||
return;
|
||||
|
@ -24,6 +24,7 @@
|
||||
#include "nsPluginHost.h"
|
||||
#include "nsPluginInstanceOwner.h"
|
||||
#include "nsJSNPRuntime.h"
|
||||
#include "nsINestedURI.h"
|
||||
#include "nsIPresShell.h"
|
||||
#include "nsIScriptGlobalObject.h"
|
||||
#include "nsScriptSecurityManager.h"
|
||||
@ -2025,6 +2026,31 @@ nsObjectLoadingContent::LoadObject(bool aNotify,
|
||||
}
|
||||
}
|
||||
|
||||
// Don't allow view-source scheme.
|
||||
// view-source is the only scheme to which this applies at the moment due to
|
||||
// potential timing attacks to read data from cross-origin documents. If this
|
||||
// widens we should add a protocol flag for whether the scheme is only allowed
|
||||
// in top and use something like nsNetUtil::NS_URIChainHasFlags.
|
||||
if (mType != eType_Null) {
|
||||
nsCOMPtr<nsIURI> tempURI = mURI;
|
||||
nsCOMPtr<nsINestedURI> nestedURI = do_QueryInterface(tempURI);
|
||||
while (nestedURI) {
|
||||
// view-source should always be an nsINestedURI, loop and check the
|
||||
// scheme on this and all inner URIs that are also nested URIs.
|
||||
bool isViewSource = false;
|
||||
rv = tempURI->SchemeIs("view-source", &isViewSource);
|
||||
if (NS_FAILED(rv) || isViewSource) {
|
||||
LOG(("OBJLC [%p]: Blocking as effective URI has view-source scheme",
|
||||
this));
|
||||
mType = eType_Null;
|
||||
break;
|
||||
}
|
||||
|
||||
nestedURI->GetInnerURI(getter_AddRefs(tempURI));
|
||||
nestedURI = do_QueryInterface(tempURI);
|
||||
}
|
||||
}
|
||||
|
||||
// If we're a plugin but shouldn't start yet, load fallback with
|
||||
// reason click-to-play instead. Items resolved as Image/Document
|
||||
// will not be checked for previews, as well as invalid plugins
|
||||
@ -3095,8 +3121,8 @@ nsObjectLoadingContent::ShouldPlay(FallbackType &aReason, bool aIgnoreCurrentTyp
|
||||
NS_ENSURE_SUCCESS(rv, false);
|
||||
nsCOMPtr<nsIDocument> topDoc = do_QueryInterface(topDocument);
|
||||
|
||||
nsCOMPtr<nsIPermissionManager> permissionManager = do_GetService(NS_PERMISSIONMANAGER_CONTRACTID, &rv);
|
||||
NS_ENSURE_SUCCESS(rv, false);
|
||||
nsCOMPtr<nsIPermissionManager> permissionManager = services::GetPermissionManager();
|
||||
NS_ENSURE_TRUE(permissionManager, false);
|
||||
|
||||
// For now we always say that the system principal uses click-to-play since
|
||||
// that maintains current behavior and we have tests that expect this.
|
||||
|
@ -396,7 +396,7 @@ nsXMLHttpRequest::InitParameters(bool aAnon, bool aSystem)
|
||||
|
||||
nsCOMPtr<nsIPrincipal> principal = doc->NodePrincipal();
|
||||
nsCOMPtr<nsIPermissionManager> permMgr =
|
||||
do_GetService(NS_PERMISSIONMANAGER_CONTRACTID);
|
||||
services::GetPermissionManager();
|
||||
if (!permMgr)
|
||||
return;
|
||||
|
||||
|
10
content/base/test/file_general_document.html
Normal file
10
content/base/test/file_general_document.html
Normal file
@ -0,0 +1,10 @@
|
||||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>General document for testing</title>
|
||||
</head>
|
||||
<body>
|
||||
<p>Hello mochitest!</p>
|
||||
</body>
|
||||
</html>
|
@ -135,6 +135,7 @@ support-files =
|
||||
file_bug902350.html
|
||||
file_bug902350_frame.html
|
||||
file_bug907892.html
|
||||
file_general_document.html
|
||||
file_html_in_xhr.html
|
||||
file_html_in_xhr.sjs
|
||||
file_html_in_xhr2.html
|
||||
@ -604,6 +605,7 @@ skip-if = toolkit == 'android' || e10s #RANDOM
|
||||
[test_title.html]
|
||||
[test_treewalker_nextsibling.xml]
|
||||
[test_viewport_scroll.html]
|
||||
[test_viewsource_forbidden_in_object.html]
|
||||
[test_w3element_traversal.html]
|
||||
[test_w3element_traversal.xhtml]
|
||||
[test_w3element_traversal_svg.html]
|
||||
|
@ -39,8 +39,8 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=682592
|
||||
*/
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
if (navigator.platform.startsWith("Linux arm")) {
|
||||
SimpleTest.expectAssertions(0, 2);
|
||||
if (navigator.platform.startsWith("Linux arm")) { /* bugs 982875, 999429 */
|
||||
SimpleTest.expectAssertions(0, 4);
|
||||
}
|
||||
|
||||
var refFrame = document.getElementById("iframe-ref")
|
||||
|
74
content/base/test/test_viewsource_forbidden_in_object.html
Normal file
74
content/base/test/test_viewsource_forbidden_in_object.html
Normal file
@ -0,0 +1,74 @@
|
||||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<!--
|
||||
https://bugzilla.mozilla.org/show_bug.cgi?id=973837
|
||||
-->
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Tests for Bug 973837</title>
|
||||
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
||||
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
|
||||
|
||||
<script>
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
|
||||
const OBJLC = SpecialPowers.Ci.nsIObjectLoadingContent;
|
||||
|
||||
function runObjectURITest(testCase) {
|
||||
var testObject = document.getElementById("testObject");
|
||||
testObject.data = testCase.URI;
|
||||
|
||||
testObject instanceof OBJLC;
|
||||
testObject = SpecialPowers.wrap(testObject);
|
||||
|
||||
is(testObject.displayedType, OBJLC.TYPE_NULL, testCase.desc +
|
||||
" testObject.displayedType should be TYPE_NULL (4)");
|
||||
runNextTest();
|
||||
}
|
||||
|
||||
var testCaseIndex = -1;
|
||||
testCases = [
|
||||
{
|
||||
desc: "Test 1: view-source should not be allowed in an object.",
|
||||
URI: "view-source:file_general_document.html"
|
||||
},
|
||||
{
|
||||
desc: "Test 2: feed:view-source should not be allowed in an object.",
|
||||
URI: "feed:view-source:file_general_document.html"
|
||||
},
|
||||
{
|
||||
desc: "Test 3: jar:view-source should not be allowed in an object",
|
||||
URI: "jar:view-source:file_general_document.html/!/"
|
||||
},
|
||||
{
|
||||
desc: "Test 4: pcast:view-source should not be allowed in an object",
|
||||
URI: "pcast:view-source:file_general_document.html"
|
||||
},
|
||||
{
|
||||
desc: "Test 5: pcast:feed:view-source should not be allowed in an object",
|
||||
URI: "pcast:feed:view-source:file_general_document.html"
|
||||
}
|
||||
];
|
||||
|
||||
function runNextTest() {
|
||||
++testCaseIndex;
|
||||
if (testCaseIndex == testCases.length) {
|
||||
SimpleTest.finish();
|
||||
return;
|
||||
}
|
||||
|
||||
runObjectURITest(testCases[testCaseIndex]);
|
||||
}
|
||||
|
||||
addLoadEvent(runNextTest);
|
||||
</script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=973837">Mozilla Bug 973837</a>
|
||||
<p id="display"></p>
|
||||
|
||||
<object id="testObject"></object>
|
||||
|
||||
</body>
|
||||
</html>
|
@ -415,12 +415,12 @@ CanvasGradient::AddColorStop(float offset, const nsAString& colorstr, ErrorResul
|
||||
NS_IMPL_CYCLE_COLLECTION_ROOT_NATIVE(CanvasGradient, AddRef)
|
||||
NS_IMPL_CYCLE_COLLECTION_UNROOT_NATIVE(CanvasGradient, Release)
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_1(CanvasGradient, mContext)
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(CanvasGradient, mContext)
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_ROOT_NATIVE(CanvasPattern, AddRef)
|
||||
NS_IMPL_CYCLE_COLLECTION_UNROOT_NATIVE(CanvasPattern, Release)
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_1(CanvasPattern, mContext)
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(CanvasPattern, mContext)
|
||||
|
||||
class CanvasRenderingContext2DUserData : public LayerUserData {
|
||||
public:
|
||||
|
@ -956,7 +956,7 @@ WebGLContext::MozGetUnderlyingParamString(uint32_t pname, nsAString& retval)
|
||||
void
|
||||
WebGLContext::ClearScreen()
|
||||
{
|
||||
bool colorAttachmentsMask[WebGLContext::sMaxColorAttachments] = {false};
|
||||
bool colorAttachmentsMask[WebGLContext::kMaxColorAttachments] = {false};
|
||||
|
||||
MakeContextCurrent();
|
||||
ScopedBindFramebuffer autoFB(gl, 0);
|
||||
@ -986,7 +986,7 @@ static bool IsShadowCorrect(float shadow, float actual) {
|
||||
#endif
|
||||
|
||||
void
|
||||
WebGLContext::ForceClearFramebufferWithDefaultValues(GLbitfield mask, const bool colorAttachmentsMask[sMaxColorAttachments])
|
||||
WebGLContext::ForceClearFramebufferWithDefaultValues(GLbitfield mask, const bool colorAttachmentsMask[kMaxColorAttachments])
|
||||
{
|
||||
MakeContextCurrent();
|
||||
|
||||
@ -995,7 +995,7 @@ WebGLContext::ForceClearFramebufferWithDefaultValues(GLbitfield mask, const bool
|
||||
bool initializeStencilBuffer = 0 != (mask & LOCAL_GL_STENCIL_BUFFER_BIT);
|
||||
bool drawBuffersIsEnabled = IsExtensionEnabled(WebGLExtensionID::WEBGL_draw_buffers);
|
||||
|
||||
GLenum currentDrawBuffers[WebGLContext::sMaxColorAttachments];
|
||||
GLenum currentDrawBuffers[WebGLContext::kMaxColorAttachments];
|
||||
|
||||
// Fun GL fact: No need to worry about the viewport here, glViewport is just
|
||||
// setting up a coordinates transformation, it doesn't affect glClear at all.
|
||||
@ -1068,7 +1068,7 @@ WebGLContext::ForceClearFramebufferWithDefaultValues(GLbitfield mask, const bool
|
||||
|
||||
if (drawBuffersIsEnabled) {
|
||||
|
||||
GLenum drawBuffersCommand[WebGLContext::sMaxColorAttachments] = { LOCAL_GL_NONE };
|
||||
GLenum drawBuffersCommand[WebGLContext::kMaxColorAttachments] = { LOCAL_GL_NONE };
|
||||
|
||||
for(int32_t i = 0; i < mGLMaxDrawBuffers; i++) {
|
||||
GLint temp;
|
||||
@ -1396,7 +1396,7 @@ WebGLContext::GetSurfaceSnapshot(bool* aPremultAlpha)
|
||||
NS_IMPL_CYCLE_COLLECTING_ADDREF(WebGLContext)
|
||||
NS_IMPL_CYCLE_COLLECTING_RELEASE(WebGLContext)
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_13(WebGLContext,
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(WebGLContext,
|
||||
mCanvasElement,
|
||||
mExtensions,
|
||||
mBound2DTextures,
|
||||
|
@ -230,13 +230,13 @@ public:
|
||||
// Returns null if the current bound FB is not likely complete.
|
||||
const WebGLRectangleObject* CurValidFBRectObject() const;
|
||||
|
||||
static const size_t sMaxColorAttachments = 16;
|
||||
static const size_t kMaxColorAttachments = 16;
|
||||
|
||||
// This is similar to GLContext::ClearSafely, but tries to minimize the
|
||||
// amount of work it does.
|
||||
// It only clears the buffers we specify, and can reset its state without
|
||||
// first having to query anything, as WebGL knows its state at all times.
|
||||
void ForceClearFramebufferWithDefaultValues(GLbitfield mask, const bool colorAttachmentsMask[sMaxColorAttachments]);
|
||||
void ForceClearFramebufferWithDefaultValues(GLbitfield mask, const bool colorAttachmentsMask[kMaxColorAttachments]);
|
||||
|
||||
// Calls ForceClearFramebufferWithDefaultValues() for the Context's 'screen'.
|
||||
void ClearScreen();
|
||||
|
@ -30,7 +30,7 @@ WebGLExtensionDrawBuffers::WebGLExtensionDrawBuffers(WebGLContext* context)
|
||||
gl->fGetIntegerv(LOCAL_GL_MAX_DRAW_BUFFERS, &maxDrawBuffers);
|
||||
|
||||
// WEBGL_draw_buffers specifications don't give a maximal value reachable by MAX_COLOR_ATTACHMENTS.
|
||||
maxColorAttachments = std::min(maxColorAttachments, GLint(WebGLContext::sMaxColorAttachments));
|
||||
maxColorAttachments = std::min(maxColorAttachments, GLint(WebGLContext::kMaxColorAttachments));
|
||||
|
||||
if (context->MinCapabilityMode())
|
||||
{
|
||||
|
@ -292,7 +292,7 @@ WebGLFramebuffer::Attachment::IsComplete() const
|
||||
|
||||
if (mAttachmentPoint >= LOCAL_GL_COLOR_ATTACHMENT0 &&
|
||||
mAttachmentPoint < GLenum(LOCAL_GL_COLOR_ATTACHMENT0 +
|
||||
WebGLContext::sMaxColorAttachments))
|
||||
WebGLContext::kMaxColorAttachments))
|
||||
{
|
||||
return IsValidFBOTextureColorFormat(internalFormat);
|
||||
}
|
||||
@ -314,7 +314,7 @@ WebGLFramebuffer::Attachment::IsComplete() const
|
||||
|
||||
if (mAttachmentPoint >= LOCAL_GL_COLOR_ATTACHMENT0 &&
|
||||
mAttachmentPoint < GLenum(LOCAL_GL_COLOR_ATTACHMENT0 +
|
||||
WebGLContext::sMaxColorAttachments))
|
||||
WebGLContext::kMaxColorAttachments))
|
||||
{
|
||||
return IsValidFBORenderbufferColorFormat(internalFormat);
|
||||
}
|
||||
@ -785,8 +785,8 @@ WebGLFramebuffer::CheckAndInitializeAttachments()
|
||||
|
||||
// Get buffer-bit-mask and color-attachment-mask-list
|
||||
uint32_t mask = 0;
|
||||
bool colorAttachmentsMask[WebGLContext::sMaxColorAttachments] = { false };
|
||||
MOZ_ASSERT(colorAttachmentCount <= WebGLContext::sMaxColorAttachments);
|
||||
bool colorAttachmentsMask[WebGLContext::kMaxColorAttachments] = { false };
|
||||
MOZ_ASSERT(colorAttachmentCount <= WebGLContext::kMaxColorAttachments);
|
||||
|
||||
for (size_t i = 0; i < colorAttachmentCount; i++) {
|
||||
if (mColorAttachments[i].HasUninitializedImageData()) {
|
||||
@ -855,7 +855,7 @@ bool WebGLFramebuffer::CheckColorAttachmentNumber(GLenum attachment, const char*
|
||||
|
||||
void WebGLFramebuffer::EnsureColorAttachments(size_t colorAttachmentId)
|
||||
{
|
||||
MOZ_ASSERT(colorAttachmentId < WebGLContext::sMaxColorAttachments);
|
||||
MOZ_ASSERT(colorAttachmentId < WebGLContext::kMaxColorAttachments);
|
||||
|
||||
size_t currentAttachmentCount = mColorAttachments.Length();
|
||||
if (colorAttachmentId < currentAttachmentCount)
|
||||
@ -940,7 +940,7 @@ ImplCycleCollectionTraverse(nsCycleCollectionTraversalCallback& aCallback,
|
||||
aName, aFlags);
|
||||
}
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_4(WebGLFramebuffer,
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(WebGLFramebuffer,
|
||||
mColorAttachments,
|
||||
mDepthAttachment,
|
||||
mStencilAttachment,
|
||||
|
@ -237,7 +237,7 @@ WebGLProgram::GetUniformInfoForMappedIdentifier(const nsACString& name) {
|
||||
return info;
|
||||
}
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_1(WebGLProgram, mAttachedShaders)
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(WebGLProgram, mAttachedShaders)
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_ROOT_NATIVE(WebGLProgram, AddRef)
|
||||
NS_IMPL_CYCLE_COLLECTION_UNROOT_NATIVE(WebGLProgram, Release)
|
||||
|
@ -3,12 +3,15 @@
|
||||
* 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 "WebGLContext.h"
|
||||
#include "WebGLTexture.h"
|
||||
|
||||
#include "GLContext.h"
|
||||
#include "ScopedGLHelpers.h"
|
||||
#include "WebGLTexelConversions.h"
|
||||
#include "mozilla/dom/WebGLRenderingContextBinding.h"
|
||||
#include "mozilla/Scoped.h"
|
||||
#include "ScopedGLHelpers.h"
|
||||
#include "WebGLContext.h"
|
||||
#include "WebGLTexelConversions.h"
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
using namespace mozilla;
|
||||
@ -433,6 +436,104 @@ WebGLTexture::ResolvedFakeBlackStatus() {
|
||||
return mFakeBlackStatus;
|
||||
}
|
||||
|
||||
|
||||
static bool
|
||||
ClearByMask(WebGLContext* context, GLbitfield mask)
|
||||
{
|
||||
gl::GLContext* gl = context->GL();
|
||||
MOZ_ASSERT(gl->IsCurrent());
|
||||
|
||||
GLenum status = gl->fCheckFramebufferStatus(LOCAL_GL_FRAMEBUFFER);
|
||||
if (status != LOCAL_GL_FRAMEBUFFER_COMPLETE)
|
||||
return false;
|
||||
|
||||
bool colorAttachmentsMask[WebGLContext::kMaxColorAttachments] = {false};
|
||||
if (mask & LOCAL_GL_COLOR_BUFFER_BIT) {
|
||||
colorAttachmentsMask[0] = true;
|
||||
}
|
||||
|
||||
context->ForceClearFramebufferWithDefaultValues(mask, colorAttachmentsMask);
|
||||
return true;
|
||||
}
|
||||
|
||||
// `mask` from glClear.
|
||||
static bool
|
||||
ClearWithTempFB(WebGLContext* context, GLuint tex,
|
||||
GLenum texImageTarget, GLint level,
|
||||
GLenum baseInternalFormat,
|
||||
GLsizei width, GLsizei height)
|
||||
{
|
||||
if (texImageTarget != LOCAL_GL_TEXTURE_2D)
|
||||
return false;
|
||||
|
||||
gl::GLContext* gl = context->GL();
|
||||
MOZ_ASSERT(gl->IsCurrent());
|
||||
|
||||
gl::ScopedFramebuffer fb(gl);
|
||||
gl::ScopedBindFramebuffer autoFB(gl, fb.FB());
|
||||
GLbitfield mask = 0;
|
||||
|
||||
switch (baseInternalFormat) {
|
||||
case LOCAL_GL_LUMINANCE:
|
||||
case LOCAL_GL_LUMINANCE_ALPHA:
|
||||
case LOCAL_GL_ALPHA:
|
||||
case LOCAL_GL_RGB:
|
||||
case LOCAL_GL_RGBA:
|
||||
case LOCAL_GL_BGR:
|
||||
case LOCAL_GL_BGRA:
|
||||
mask = LOCAL_GL_COLOR_BUFFER_BIT;
|
||||
gl->fFramebufferTexture2D(LOCAL_GL_FRAMEBUFFER, LOCAL_GL_COLOR_ATTACHMENT0,
|
||||
texImageTarget, tex, level);
|
||||
break;
|
||||
|
||||
case LOCAL_GL_DEPTH_COMPONENT:
|
||||
mask = LOCAL_GL_DEPTH_BUFFER_BIT;
|
||||
gl->fFramebufferTexture2D(LOCAL_GL_FRAMEBUFFER, LOCAL_GL_DEPTH_ATTACHMENT,
|
||||
texImageTarget, tex, level);
|
||||
break;
|
||||
|
||||
case LOCAL_GL_DEPTH_STENCIL:
|
||||
mask = LOCAL_GL_DEPTH_BUFFER_BIT |
|
||||
LOCAL_GL_STENCIL_BUFFER_BIT;
|
||||
gl->fFramebufferTexture2D(LOCAL_GL_FRAMEBUFFER, LOCAL_GL_DEPTH_ATTACHMENT,
|
||||
texImageTarget, tex, level);
|
||||
gl->fFramebufferTexture2D(LOCAL_GL_FRAMEBUFFER, LOCAL_GL_STENCIL_ATTACHMENT,
|
||||
texImageTarget, tex, level);
|
||||
break;
|
||||
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
MOZ_ASSERT(mask);
|
||||
|
||||
if (ClearByMask(context, mask))
|
||||
return true;
|
||||
|
||||
// Failed to simply build an FB from the tex, but maybe it needs a
|
||||
// color buffer to be complete.
|
||||
|
||||
if (mask & LOCAL_GL_COLOR_BUFFER_BIT) {
|
||||
// Nope, it already had one.
|
||||
return false;
|
||||
}
|
||||
|
||||
gl::ScopedRenderbuffer rb(gl);
|
||||
{
|
||||
gl::ScopedBindRenderbuffer(gl, rb.RB());
|
||||
gl->fRenderbufferStorage(LOCAL_GL_RENDERBUFFER,
|
||||
LOCAL_GL_RGBA4,
|
||||
width, height);
|
||||
}
|
||||
|
||||
gl->fFramebufferRenderbuffer(LOCAL_GL_FRAMEBUFFER, LOCAL_GL_COLOR_ATTACHMENT0,
|
||||
LOCAL_GL_RENDERBUFFER, rb.RB());
|
||||
mask |= LOCAL_GL_COLOR_BUFFER_BIT;
|
||||
|
||||
// Last chance!
|
||||
return ClearByMask(context, mask);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
WebGLTexture::DoDeferredImageInitialization(GLenum imageTarget, GLint level)
|
||||
{
|
||||
@ -440,9 +541,22 @@ WebGLTexture::DoDeferredImageInitialization(GLenum imageTarget, GLint level)
|
||||
MOZ_ASSERT(imageInfo.mImageDataStatus == WebGLImageDataStatus::UninitializedImageData);
|
||||
|
||||
mContext->MakeContextCurrent();
|
||||
|
||||
// Try to clear with glCLear.
|
||||
WebGLTexelFormat texelformat = GetWebGLTexelFormat(imageInfo.mInternalFormat, imageInfo.mType);
|
||||
GLenum format = WebGLTexelConversions::GLFormatForTexelFormat(texelformat);
|
||||
|
||||
bool cleared = ClearWithTempFB(mContext, GLName(),
|
||||
imageTarget, level,
|
||||
format, imageInfo.mHeight, imageInfo.mWidth);
|
||||
if (cleared) {
|
||||
SetImageDataStatus(imageTarget, level, WebGLImageDataStatus::InitializedImageData);
|
||||
return;
|
||||
}
|
||||
|
||||
// That didn't work. Try uploading zeros then.
|
||||
gl::ScopedBindTexture autoBindTex(mContext->gl, GLName(), mTarget);
|
||||
|
||||
WebGLTexelFormat texelformat = GetWebGLTexelFormat(imageInfo.mInternalFormat, imageInfo.mType);
|
||||
uint32_t texelsize = WebGLTexelConversions::TexelBytesForFormat(texelformat);
|
||||
CheckedUint32 checked_byteLength
|
||||
= WebGLContext::GetImageSize(
|
||||
@ -451,24 +565,29 @@ WebGLTexture::DoDeferredImageInitialization(GLenum imageTarget, GLint level)
|
||||
texelsize,
|
||||
mContext->mPixelStoreUnpackAlignment);
|
||||
MOZ_ASSERT(checked_byteLength.isValid()); // should have been checked earlier
|
||||
void *zeros = calloc(1, checked_byteLength.value());
|
||||
ScopedFreePtr<void> zeros;
|
||||
zeros = calloc(1, checked_byteLength.value());
|
||||
|
||||
GLenum format = WebGLTexelConversions::GLFormatForTexelFormat(texelformat);
|
||||
mContext->GetAndFlushUnderlyingGLErrors();
|
||||
mContext->gl->fTexImage2D(imageTarget, level, imageInfo.mInternalFormat,
|
||||
imageInfo.mWidth, imageInfo.mHeight,
|
||||
0, format, imageInfo.mType,
|
||||
zeros);
|
||||
GLenum error = mContext->GetAndFlushUnderlyingGLErrors();
|
||||
|
||||
free(zeros);
|
||||
SetImageDataStatus(imageTarget, level, WebGLImageDataStatus::InitializedImageData);
|
||||
|
||||
if (error) {
|
||||
// Should only be OUT_OF_MEMORY. Anyway, there's no good way to recover from this here.
|
||||
MOZ_CRASH(); // errors on texture upload have been related to video memory exposure in the past.
|
||||
return;
|
||||
// Should only be OUT_OF_MEMORY. Anyway, there's no good way to recover from this here.
|
||||
printf_stderr("Error: 0x%4x\n", error);
|
||||
MOZ_CRASH(); // errors on texture upload have been related to video memory exposure in the past.
|
||||
}
|
||||
|
||||
SetImageDataStatus(imageTarget, level, WebGLImageDataStatus::InitializedImageData);
|
||||
}
|
||||
|
||||
void
|
||||
WebGLTexture::SetFakeBlackStatus(WebGLTextureFakeBlackStatus x)
|
||||
{
|
||||
mFakeBlackStatus = x;
|
||||
mContext->SetFakeBlackStatus(WebGLContextFakeBlackStatus::Unknown);
|
||||
}
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_0(WebGLTexture)
|
||||
|
@ -11,6 +11,7 @@
|
||||
|
||||
#include "nsWrapperCache.h"
|
||||
|
||||
#include "mozilla/CheckedInt.h"
|
||||
#include "mozilla/LinkedList.h"
|
||||
#include <algorithm>
|
||||
|
||||
@ -273,10 +274,8 @@ public:
|
||||
|
||||
bool IsMipmapCubeComplete() const;
|
||||
|
||||
void SetFakeBlackStatus(WebGLTextureFakeBlackStatus x) {
|
||||
mFakeBlackStatus = x;
|
||||
mContext->SetFakeBlackStatus(WebGLContextFakeBlackStatus::Unknown);
|
||||
}
|
||||
void SetFakeBlackStatus(WebGLTextureFakeBlackStatus x);
|
||||
|
||||
// Returns the current fake-black-status, except if it was Unknown,
|
||||
// in which case this function resolves it first, so it never returns Unknown.
|
||||
WebGLTextureFakeBlackStatus ResolvedFakeBlackStatus();
|
||||
|
@ -56,7 +56,7 @@ bool WebGLVertexArray::EnsureAttrib(GLuint index, const char *info)
|
||||
return true;
|
||||
}
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_2(WebGLVertexArray,
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(WebGLVertexArray,
|
||||
mAttribs,
|
||||
mBoundElementArrayBuffer)
|
||||
|
||||
|
@ -52,8 +52,8 @@ HTMLImageOrCanvasOrVideoElement;
|
||||
namespace mozilla {
|
||||
namespace dom {
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_3(HTMLCanvasPrintState, mCanvas,
|
||||
mContext, mCallback)
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(HTMLCanvasPrintState, mCanvas,
|
||||
mContext, mCallback)
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_ROOT_NATIVE(HTMLCanvasPrintState, AddRef)
|
||||
NS_IMPL_CYCLE_COLLECTION_UNROOT_NATIVE(HTMLCanvasPrintState, Release)
|
||||
|
@ -2338,7 +2338,7 @@ bool HTMLMediaElement::CheckAudioChannelPermissions(const nsAString& aString)
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIPermissionManager> permissionManager =
|
||||
do_GetService(NS_PERMISSIONMANAGER_CONTRACTID);
|
||||
services::GetPermissionManager();
|
||||
if (!permissionManager) {
|
||||
return false;
|
||||
}
|
||||
|
@ -89,7 +89,7 @@ HTMLOptionsCollection::GetOptionIndex(Element* aOption,
|
||||
}
|
||||
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_1(HTMLOptionsCollection, mElements)
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(HTMLOptionsCollection, mElements)
|
||||
|
||||
// nsISupports
|
||||
|
||||
|
@ -89,7 +89,7 @@ TableRowsCollection::WrapObject(JSContext* aCx)
|
||||
return HTMLCollectionBinding::Wrap(aCx, this);
|
||||
}
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_1(TableRowsCollection, mOrphanRows)
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(TableRowsCollection, mOrphanRows)
|
||||
NS_IMPL_CYCLE_COLLECTING_ADDREF(TableRowsCollection)
|
||||
NS_IMPL_CYCLE_COLLECTING_RELEASE(TableRowsCollection)
|
||||
|
||||
|
@ -11,7 +11,7 @@
|
||||
namespace mozilla {
|
||||
namespace dom {
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_1(MediaError, mParent)
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(MediaError, mParent)
|
||||
NS_IMPL_CYCLE_COLLECTING_ADDREF(MediaError)
|
||||
NS_IMPL_CYCLE_COLLECTING_RELEASE(MediaError)
|
||||
|
||||
|
@ -820,7 +820,7 @@ protected:
|
||||
// UndoManager
|
||||
/////////////////////////////////////////////////
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_2(UndoManager, mTxnManager, mHostNode)
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(UndoManager, mTxnManager, mHostNode)
|
||||
NS_IMPL_CYCLE_COLLECTING_ADDREF(UndoManager)
|
||||
NS_IMPL_CYCLE_COLLECTING_RELEASE(UndoManager)
|
||||
|
||||
|
@ -11,7 +11,7 @@
|
||||
namespace mozilla {
|
||||
namespace dom {
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_1(ValidityState, mConstraintValidation)
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(ValidityState, mConstraintValidation)
|
||||
NS_IMPL_CYCLE_COLLECTING_ADDREF(ValidityState)
|
||||
NS_IMPL_CYCLE_COLLECTING_RELEASE(ValidityState)
|
||||
|
||||
|
@ -418,7 +418,7 @@ nsGenericHTMLFrameElement::GetReallyIsBrowserOrApp(bool *aOut)
|
||||
// Fail if the node principal isn't trusted.
|
||||
nsIPrincipal *principal = NodePrincipal();
|
||||
nsCOMPtr<nsIPermissionManager> permMgr =
|
||||
do_GetService(NS_PERMISSIONMANAGER_CONTRACTID);
|
||||
services::GetPermissionManager();
|
||||
NS_ENSURE_TRUE(permMgr, NS_OK);
|
||||
|
||||
uint32_t permission = nsIPermissionManager::DENY_ACTION;
|
||||
@ -464,7 +464,7 @@ nsGenericHTMLFrameElement::GetAppManifestURL(nsAString& aOut)
|
||||
// Check permission.
|
||||
nsIPrincipal *principal = NodePrincipal();
|
||||
nsCOMPtr<nsIPermissionManager> permMgr =
|
||||
do_GetService(NS_PERMISSIONMANAGER_CONTRACTID);
|
||||
services::GetPermissionManager();
|
||||
NS_ENSURE_TRUE(permMgr, NS_OK);
|
||||
|
||||
uint32_t permission = nsIPermissionManager::DENY_ACTION;
|
||||
|
@ -322,7 +322,7 @@ nsHTMLDocumentSH::DocumentAllNewResolve(JSContext *cx, JS::Handle<JSObject*> obj
|
||||
bool ok = true;
|
||||
|
||||
if (v.get() != JSVAL_VOID) {
|
||||
ok = ::JS_DefinePropertyById(cx, obj, id, v, nullptr, nullptr, 0);
|
||||
ok = ::JS_DefinePropertyById(cx, obj, id, v, 0);
|
||||
objp.set(obj);
|
||||
}
|
||||
|
||||
|
@ -187,6 +187,7 @@ public:
|
||||
if (c.IsNull()) {
|
||||
c.mDuration *= aOutRate / aInRate;
|
||||
mDuration += c.mDuration;
|
||||
continue;
|
||||
}
|
||||
uint32_t channels = c.mChannelData.Length();
|
||||
output.SetLength(channels);
|
||||
@ -265,7 +266,14 @@ public:
|
||||
int ChannelCount() {
|
||||
NS_WARN_IF_FALSE(!mChunks.IsEmpty(),
|
||||
"Cannot query channel count on a AudioSegment with no chunks.");
|
||||
return mChunks.IsEmpty() ? 0 : mChunks[0].mChannelData.Length();
|
||||
// Find the first chunk that has non-zero channels. A chunk that hs zero
|
||||
// channels is just silence and we can simply discard it.
|
||||
for (ChunkIterator ci(*this); !ci.IsEnded(); ci.Next()) {
|
||||
if (ci->ChannelCount()) {
|
||||
return ci->ChannelCount();
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static Type StaticType() { return AUDIO; }
|
||||
|
@ -2277,12 +2277,17 @@ SourceMediaStream::ResampleAudioToGraphSampleRate(TrackData* aTrackData, MediaSe
|
||||
AudioSegment* segment = static_cast<AudioSegment*>(aSegment);
|
||||
if (!aTrackData->mResampler) {
|
||||
int channels = segment->ChannelCount();
|
||||
SpeexResamplerState* state = speex_resampler_init(channels,
|
||||
aTrackData->mInputRate,
|
||||
GraphImpl()->AudioSampleRate(),
|
||||
SPEEX_RESAMPLER_QUALITY_DEFAULT,
|
||||
nullptr);
|
||||
if (state) {
|
||||
|
||||
// If this segment is just silence, we delay instanciating the resampler.
|
||||
if (channels) {
|
||||
SpeexResamplerState* state = speex_resampler_init(channels,
|
||||
aTrackData->mInputRate,
|
||||
GraphImpl()->AudioSampleRate(),
|
||||
SPEEX_RESAMPLER_QUALITY_DEFAULT,
|
||||
nullptr);
|
||||
if (!state) {
|
||||
return;
|
||||
}
|
||||
aTrackData->mResampler.own(state);
|
||||
}
|
||||
}
|
||||
|
@ -24,7 +24,7 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_2(TextTrackCueList, mParent, mList)
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(TextTrackCueList, mParent, mList)
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTING_ADDREF(TextTrackCueList)
|
||||
NS_IMPL_CYCLE_COLLECTING_RELEASE(TextTrackCueList)
|
||||
|
@ -10,7 +10,7 @@
|
||||
namespace mozilla {
|
||||
namespace dom {
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_1(TextTrackRegion, mParent)
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(TextTrackRegion, mParent)
|
||||
NS_IMPL_CYCLE_COLLECTING_ADDREF(TextTrackRegion)
|
||||
NS_IMPL_CYCLE_COLLECTING_RELEASE(TextTrackRegion)
|
||||
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(TextTrackRegion)
|
||||
|
@ -43,7 +43,7 @@ VideoPlaybackQuality::WrapObject(JSContext *aCx)
|
||||
NS_IMPL_CYCLE_COLLECTION_ROOT_NATIVE(VideoPlaybackQuality, AddRef)
|
||||
NS_IMPL_CYCLE_COLLECTION_UNROOT_NATIVE(VideoPlaybackQuality, Release)
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_1(VideoPlaybackQuality, mElement)
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(VideoPlaybackQuality, mElement)
|
||||
|
||||
} // namespace dom
|
||||
} // namespace mozilla
|
||||
|
@ -184,7 +184,7 @@ OmxAudioTrackEncoder::AppendEncodedFrames(EncodedFrameContainer& aContainer)
|
||||
audiodata->SetFrameType(isCSD ?
|
||||
EncodedFrame::AMR_AUDIO_CSD : EncodedFrame::AMR_AUDIO_FRAME);
|
||||
} else {
|
||||
MOZ_ASSERT("audio codec not supported");
|
||||
MOZ_ASSERT(false, "audio codec not supported");
|
||||
}
|
||||
audiodata->SetTimeStamp(outTimeUs);
|
||||
rv = audiodata->SwapInFrameData(frameData);
|
||||
|
@ -196,8 +196,9 @@ StealJSArrayDataIntoThreadSharedFloatArrayBufferList(JSContext* aJSContext,
|
||||
nsRefPtr<ThreadSharedFloatArrayBufferList> result =
|
||||
new ThreadSharedFloatArrayBufferList(aJSArrays.Length());
|
||||
for (uint32_t i = 0; i < aJSArrays.Length(); ++i) {
|
||||
JS::Rooted<JSObject*> arrayBufferView(aJSContext, aJSArrays[i]);
|
||||
JS::Rooted<JSObject*> arrayBuffer(aJSContext,
|
||||
JS_GetArrayBufferViewBuffer(aJSContext, aJSArrays[i]));
|
||||
JS_GetArrayBufferViewBuffer(aJSContext, arrayBufferView));
|
||||
uint8_t* stolenData = arrayBuffer
|
||||
? (uint8_t*) JS_StealArrayBufferContents(aJSContext, arrayBuffer)
|
||||
: nullptr;
|
||||
|
@ -7,6 +7,7 @@
|
||||
#include "AudioDestinationNode.h"
|
||||
#include "mozilla/dom/AudioDestinationNodeBinding.h"
|
||||
#include "mozilla/Preferences.h"
|
||||
#include "mozilla/Services.h"
|
||||
#include "AudioChannelAgent.h"
|
||||
#include "AudioChannelService.h"
|
||||
#include "AudioNodeEngine.h"
|
||||
@ -482,7 +483,7 @@ AudioDestinationNode::CheckAudioChannelPermissions(AudioChannel aValue)
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIPermissionManager> permissionManager =
|
||||
do_GetService(NS_PERMISSIONMANAGER_CONTRACTID);
|
||||
services::GetPermissionManager();
|
||||
if (!permissionManager) {
|
||||
return false;
|
||||
}
|
||||
|
@ -11,7 +11,7 @@
|
||||
namespace mozilla {
|
||||
namespace dom {
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_1(AudioListener, mContext)
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(AudioListener, mContext)
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_ROOT_NATIVE(AudioListener, AddRef)
|
||||
NS_IMPL_CYCLE_COLLECTION_UNROOT_NATIVE(AudioListener, Release)
|
||||
|
@ -11,7 +11,7 @@
|
||||
namespace mozilla {
|
||||
namespace dom {
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_1(PeriodicWave, mContext)
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(PeriodicWave, mContext)
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_ROOT_NATIVE(PeriodicWave, AddRef)
|
||||
NS_IMPL_CYCLE_COLLECTION_UNROOT_NATIVE(PeriodicWave, Release)
|
||||
|
@ -154,13 +154,23 @@ public:
|
||||
}
|
||||
private:
|
||||
static int32_t GetDefWidth(bool aHD = false) {
|
||||
return aHD ? MediaEngine::DEFAULT_169_VIDEO_WIDTH :
|
||||
MediaEngine::DEFAULT_43_VIDEO_WIDTH;
|
||||
// It'd be nice if we could use the ternary operator here, but we can't
|
||||
// because of bug 1002729.
|
||||
if (aHD) {
|
||||
return MediaEngine::DEFAULT_169_VIDEO_WIDTH;
|
||||
}
|
||||
|
||||
return MediaEngine::DEFAULT_43_VIDEO_WIDTH;
|
||||
}
|
||||
|
||||
static int32_t GetDefHeight(bool aHD = false) {
|
||||
return aHD ? MediaEngine::DEFAULT_169_VIDEO_HEIGHT :
|
||||
MediaEngine::DEFAULT_43_VIDEO_HEIGHT;
|
||||
// It'd be nice if we could use the ternary operator here, but we can't
|
||||
// because of bug 1002729.
|
||||
if (aHD) {
|
||||
return MediaEngine::DEFAULT_169_VIDEO_HEIGHT;
|
||||
}
|
||||
|
||||
return MediaEngine::DEFAULT_43_VIDEO_HEIGHT;
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -22,7 +22,9 @@
|
||||
#include "nsISupportsUtils.h"
|
||||
#endif
|
||||
|
||||
#ifdef MOZ_WEBRTC
|
||||
#include "YuvStamper.h"
|
||||
#endif
|
||||
|
||||
#define VIDEO_RATE USECS_PER_S
|
||||
#define AUDIO_RATE 16000
|
||||
@ -245,11 +247,13 @@ MediaEngineDefaultVideoSource::Notify(nsITimer* aTimer)
|
||||
layers::PlanarYCbCrData data;
|
||||
AllocateSolidColorFrame(data, mOpts.mWidth, mOpts.mHeight, 0x80, mCb, mCr);
|
||||
|
||||
#ifdef MOZ_WEBRTC
|
||||
uint64_t timestamp = PR_Now();
|
||||
YuvStamper::Encode(mOpts.mWidth, mOpts.mHeight, mOpts.mWidth,
|
||||
data.mYChannel,
|
||||
reinterpret_cast<unsigned char*>(×tamp), sizeof(timestamp),
|
||||
0, 0);
|
||||
#endif
|
||||
|
||||
ycbcr_image->SetData(data);
|
||||
// SetData copies data, so we can free the frame
|
||||
|
@ -12,7 +12,7 @@
|
||||
namespace mozilla {
|
||||
namespace dom {
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_1(SpeechGrammar, mParent)
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(SpeechGrammar, mParent)
|
||||
NS_IMPL_CYCLE_COLLECTING_ADDREF(SpeechGrammar)
|
||||
NS_IMPL_CYCLE_COLLECTING_RELEASE(SpeechGrammar)
|
||||
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(SpeechGrammar)
|
||||
|
@ -12,7 +12,7 @@
|
||||
namespace mozilla {
|
||||
namespace dom {
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_1(SpeechGrammarList, mParent)
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(SpeechGrammarList, mParent)
|
||||
NS_IMPL_CYCLE_COLLECTING_ADDREF(SpeechGrammarList)
|
||||
NS_IMPL_CYCLE_COLLECTING_RELEASE(SpeechGrammarList)
|
||||
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(SpeechGrammarList)
|
||||
|
@ -13,7 +13,7 @@
|
||||
namespace mozilla {
|
||||
namespace dom {
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_1(SpeechRecognitionAlternative, mParent)
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(SpeechRecognitionAlternative, mParent)
|
||||
NS_IMPL_CYCLE_COLLECTING_ADDREF(SpeechRecognitionAlternative)
|
||||
NS_IMPL_CYCLE_COLLECTING_RELEASE(SpeechRecognitionAlternative)
|
||||
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(SpeechRecognitionAlternative)
|
||||
|
@ -12,7 +12,7 @@
|
||||
namespace mozilla {
|
||||
namespace dom {
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_1(SpeechRecognitionResult, mParent)
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(SpeechRecognitionResult, mParent)
|
||||
NS_IMPL_CYCLE_COLLECTING_ADDREF(SpeechRecognitionResult)
|
||||
NS_IMPL_CYCLE_COLLECTING_RELEASE(SpeechRecognitionResult)
|
||||
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(SpeechRecognitionResult)
|
||||
|
@ -13,7 +13,7 @@
|
||||
namespace mozilla {
|
||||
namespace dom {
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_2(SpeechRecognitionResultList, mParent, mItems)
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(SpeechRecognitionResultList, mParent, mItems)
|
||||
NS_IMPL_CYCLE_COLLECTING_ADDREF(SpeechRecognitionResultList)
|
||||
NS_IMPL_CYCLE_COLLECTING_RELEASE(SpeechRecognitionResultList)
|
||||
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(SpeechRecognitionResultList)
|
||||
|
@ -11,7 +11,7 @@
|
||||
namespace mozilla {
|
||||
namespace dom {
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_1(SpeechSynthesisVoice, mParent)
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(SpeechSynthesisVoice, mParent)
|
||||
NS_IMPL_CYCLE_COLLECTING_ADDREF(SpeechSynthesisVoice)
|
||||
NS_IMPL_CYCLE_COLLECTING_RELEASE(SpeechSynthesisVoice)
|
||||
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(SpeechSynthesisVoice)
|
||||
|
@ -14,7 +14,7 @@ const double radPerDegree = 2.0 * M_PI / 360.0;
|
||||
namespace mozilla {
|
||||
namespace dom {
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_1(SVGMatrix, mTransform)
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(SVGMatrix, mTransform)
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_ROOT_NATIVE(SVGMatrix, AddRef)
|
||||
NS_IMPL_CYCLE_COLLECTION_UNROOT_NATIVE(SVGMatrix, Release)
|
||||
|
@ -22,7 +22,7 @@ SVGRect::SVGRect(nsIContent* aParent, float x, float y, float w, float h)
|
||||
//----------------------------------------------------------------------
|
||||
// nsISupports methods:
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_1(SVGRect, mParent)
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(SVGRect, mParent)
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTING_ADDREF(SVGRect)
|
||||
NS_IMPL_CYCLE_COLLECTING_RELEASE(SVGRect)
|
||||
|
@ -36,6 +36,7 @@
|
||||
#include "nsXULAppAPI.h"
|
||||
#include "prio.h"
|
||||
#include "private/pprio.h"
|
||||
#include "mozilla/Services.h"
|
||||
|
||||
#define ASMJSCACHE_METADATA_FILE_NAME "metadata"
|
||||
#define ASMJSCACHE_ENTRY_FILE_NAME_BASE "module"
|
||||
@ -688,7 +689,7 @@ MainProcessRunnable::InitOnMainThread()
|
||||
MOZ_ASSERT(isApp);
|
||||
|
||||
nsCOMPtr<nsIPermissionManager> pm =
|
||||
do_GetService(NS_PERMISSIONMANAGER_CONTRACTID);
|
||||
services::GetPermissionManager();
|
||||
NS_ENSURE_TRUE(pm, NS_ERROR_UNEXPECTED);
|
||||
|
||||
uint32_t permission;
|
||||
|
@ -40,7 +40,7 @@ BarProp::WrapObject(JSContext* aCx)
|
||||
return BarPropBinding::Wrap(aCx, this);
|
||||
}
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_1(BarProp, mDOMWindow)
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(BarProp, mDOMWindow)
|
||||
NS_IMPL_CYCLE_COLLECTING_ADDREF(BarProp)
|
||||
NS_IMPL_CYCLE_COLLECTING_RELEASE(BarProp)
|
||||
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(BarProp)
|
||||
|
@ -295,9 +295,10 @@ private:
|
||||
return false;
|
||||
}
|
||||
|
||||
JS::Rooted<JS::Value> arg(aCx);
|
||||
for (uint32_t i = 0; i < mCallData->mArguments.Length(); ++i) {
|
||||
if (!JS_DefineElement(aCx, arguments, i, mCallData->mArguments[i],
|
||||
nullptr, nullptr, JSPROP_ENUMERATE)) {
|
||||
arg = mCallData->mArguments[i];
|
||||
if (!JS_DefineElement(aCx, arguments, i, arg, JSPROP_ENUMERATE)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@ -405,9 +406,10 @@ private:
|
||||
return false;
|
||||
}
|
||||
|
||||
JS::Rooted<JS::Value> arg(aCx);
|
||||
for (uint32_t i = 0; i < mArguments.Length(); ++i) {
|
||||
if (!JS_DefineElement(aCx, arguments, i, mArguments[i], nullptr, nullptr,
|
||||
JSPROP_ENUMERATE)) {
|
||||
arg = mArguments[i];
|
||||
if (!JS_DefineElement(aCx, arguments, i, arg, JSPROP_ENUMERATE)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
@ -29,7 +29,7 @@ NS_INTERFACE_MAP_END
|
||||
NS_IMPL_CYCLE_COLLECTING_ADDREF(Crypto)
|
||||
NS_IMPL_CYCLE_COLLECTING_RELEASE(Crypto)
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_1(Crypto, mWindow)
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(Crypto, mWindow)
|
||||
|
||||
Crypto::Crypto()
|
||||
{
|
||||
|
@ -12,7 +12,7 @@
|
||||
namespace mozilla {
|
||||
namespace dom {
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_1(DOMError, mWindow)
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(DOMError, mWindow)
|
||||
NS_IMPL_CYCLE_COLLECTING_ADDREF(DOMError)
|
||||
NS_IMPL_CYCLE_COLLECTING_RELEASE(DOMError)
|
||||
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(DOMError)
|
||||
|
@ -13,7 +13,7 @@
|
||||
namespace mozilla {
|
||||
namespace dom {
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_3(MessageChannel, mWindow, mPort1, mPort2)
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(MessageChannel, mWindow, mPort1, mPort2)
|
||||
NS_IMPL_CYCLE_COLLECTING_ADDREF(MessageChannel)
|
||||
NS_IMPL_CYCLE_COLLECTING_RELEASE(MessageChannel)
|
||||
|
||||
|
@ -11,7 +11,7 @@
|
||||
namespace mozilla {
|
||||
namespace dom {
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_2(MessagePortList, mOwner, mPorts)
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(MessagePortList, mOwner, mPorts)
|
||||
NS_IMPL_CYCLE_COLLECTING_ADDREF(MessagePortList)
|
||||
NS_IMPL_CYCLE_COLLECTING_RELEASE(MessagePortList)
|
||||
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(MessagePortList)
|
||||
|
@ -94,6 +94,9 @@
|
||||
#include "nsIPrivateBrowsingChannel.h"
|
||||
#include "nsIDocShell.h"
|
||||
|
||||
#include "WorkerPrivate.h"
|
||||
#include "WorkerRunnable.h"
|
||||
|
||||
namespace mozilla {
|
||||
namespace dom {
|
||||
|
||||
@ -1410,10 +1413,12 @@ Navigator::GetBattery(ErrorResult& aRv)
|
||||
return mBatteryManager;
|
||||
}
|
||||
|
||||
already_AddRefed<Promise>
|
||||
Navigator::GetDataStores(const nsAString& aName, ErrorResult& aRv)
|
||||
/* static */ already_AddRefed<Promise>
|
||||
Navigator::GetDataStores(nsPIDOMWindow* aWindow,
|
||||
const nsAString& aName,
|
||||
ErrorResult& aRv)
|
||||
{
|
||||
if (!mWindow || !mWindow->GetDocShell()) {
|
||||
if (!aWindow || !aWindow->GetDocShell()) {
|
||||
aRv.Throw(NS_ERROR_UNEXPECTED);
|
||||
return nullptr;
|
||||
}
|
||||
@ -1426,12 +1431,18 @@ Navigator::GetDataStores(const nsAString& aName, ErrorResult& aRv)
|
||||
}
|
||||
|
||||
nsCOMPtr<nsISupports> promise;
|
||||
aRv = service->GetDataStores(mWindow, aName, getter_AddRefs(promise));
|
||||
aRv = service->GetDataStores(aWindow, aName, getter_AddRefs(promise));
|
||||
|
||||
nsRefPtr<Promise> p = static_cast<Promise*>(promise.get());
|
||||
return p.forget();
|
||||
}
|
||||
|
||||
already_AddRefed<Promise>
|
||||
Navigator::GetDataStores(const nsAString& aName, ErrorResult& aRv)
|
||||
{
|
||||
return GetDataStores(mWindow, aName, aRv);
|
||||
}
|
||||
|
||||
PowerManager*
|
||||
Navigator::GetMozPower(ErrorResult& aRv)
|
||||
{
|
||||
@ -1782,7 +1793,7 @@ Navigator::CheckPermission(nsPIDOMWindow* aWindow, const char* aType)
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIPermissionManager> permMgr =
|
||||
do_GetService(NS_PERMISSIONMANAGER_CONTRACTID);
|
||||
services::GetPermissionManager();
|
||||
NS_ENSURE_TRUE(permMgr, false);
|
||||
|
||||
uint32_t permission = nsIPermissionManager::DENY_ACTION;
|
||||
@ -2178,7 +2189,7 @@ Navigator::HasWifiManagerSupport(JSContext* /* unused */,
|
||||
nsIPrincipal* principal = nsContentUtils::GetObjectPrincipal(aGlobal);
|
||||
|
||||
nsCOMPtr<nsIPermissionManager> permMgr =
|
||||
do_GetService(NS_PERMISSIONMANAGER_CONTRACTID);
|
||||
services::GetPermissionManager();
|
||||
NS_ENSURE_TRUE(permMgr, false);
|
||||
|
||||
uint32_t permission = nsIPermissionManager::DENY_ACTION;
|
||||
@ -2291,9 +2302,9 @@ Navigator::HasInputMethodSupport(JSContext* /* unused */,
|
||||
|
||||
/* static */
|
||||
bool
|
||||
Navigator::HasDataStoreSupport(JSContext* cx, JSObject* aGlobal)
|
||||
Navigator::HasDataStoreSupport(nsIPrincipal* aPrincipal)
|
||||
{
|
||||
JS::Rooted<JSObject*> global(cx, aGlobal);
|
||||
workers::AssertIsOnMainThread();
|
||||
|
||||
// First of all, the general pref has to be turned on.
|
||||
bool enabled = false;
|
||||
@ -2307,6 +2318,64 @@ Navigator::HasDataStoreSupport(JSContext* cx, JSObject* aGlobal)
|
||||
return true;
|
||||
}
|
||||
|
||||
uint16_t status;
|
||||
if (NS_FAILED(aPrincipal->GetAppStatus(&status))) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Only support DataStore API for certified apps for now.
|
||||
return status == nsIPrincipal::APP_STATUS_CERTIFIED;
|
||||
}
|
||||
|
||||
// A WorkerMainThreadRunnable to synchronously dispatch the call of
|
||||
// HasDataStoreSupport() from the worker thread to the main thread.
|
||||
class HasDataStoreSupportRunnable MOZ_FINAL
|
||||
: public workers::WorkerMainThreadRunnable
|
||||
{
|
||||
public:
|
||||
bool mResult;
|
||||
|
||||
HasDataStoreSupportRunnable(workers::WorkerPrivate* aWorkerPrivate)
|
||||
: workers::WorkerMainThreadRunnable(aWorkerPrivate)
|
||||
, mResult(false)
|
||||
{
|
||||
MOZ_ASSERT(aWorkerPrivate);
|
||||
aWorkerPrivate->AssertIsOnWorkerThread();
|
||||
}
|
||||
|
||||
protected:
|
||||
virtual bool
|
||||
MainThreadRun() MOZ_OVERRIDE
|
||||
{
|
||||
workers::AssertIsOnMainThread();
|
||||
|
||||
mResult = Navigator::HasDataStoreSupport(mWorkerPrivate->GetPrincipal());
|
||||
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
/* static */
|
||||
bool
|
||||
Navigator::HasDataStoreSupport(JSContext* aCx, JSObject* aGlobal)
|
||||
{
|
||||
// If the caller is on the worker thread, dispatch this to the main thread.
|
||||
if (!NS_IsMainThread()) {
|
||||
workers::WorkerPrivate* workerPrivate =
|
||||
workers::GetWorkerPrivateFromContext(aCx);
|
||||
workerPrivate->AssertIsOnWorkerThread();
|
||||
|
||||
nsRefPtr<HasDataStoreSupportRunnable> runnable =
|
||||
new HasDataStoreSupportRunnable(workerPrivate);
|
||||
runnable->Dispatch(aCx);
|
||||
|
||||
return runnable->mResult;
|
||||
}
|
||||
|
||||
workers::AssertIsOnMainThread();
|
||||
|
||||
JS::Rooted<JSObject*> global(aCx, aGlobal);
|
||||
|
||||
nsCOMPtr<nsPIDOMWindow> win = GetWindowFromGlobal(global);
|
||||
if (!win) {
|
||||
return false;
|
||||
@ -2317,12 +2386,7 @@ Navigator::HasDataStoreSupport(JSContext* cx, JSObject* aGlobal)
|
||||
return false;
|
||||
}
|
||||
|
||||
uint16_t status;
|
||||
if (NS_FAILED(doc->NodePrincipal()->GetAppStatus(&status))) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return status == nsIPrincipal::APP_STATUS_CERTIFIED;
|
||||
return HasDataStoreSupport(doc->NodePrincipal());
|
||||
}
|
||||
|
||||
/* static */
|
||||
|
@ -27,6 +27,7 @@ class nsIDOMNavigatorSystemMessages;
|
||||
class nsDOMCameraManager;
|
||||
class nsDOMDeviceStorage;
|
||||
class nsIDOMBlob;
|
||||
class nsIPrincipal;
|
||||
|
||||
namespace mozilla {
|
||||
namespace dom {
|
||||
@ -156,6 +157,11 @@ public:
|
||||
// The XPCOM GetDoNotTrack is ok
|
||||
Geolocation* GetGeolocation(ErrorResult& aRv);
|
||||
battery::BatteryManager* GetBattery(ErrorResult& aRv);
|
||||
|
||||
static already_AddRefed<Promise> GetDataStores(nsPIDOMWindow* aWindow,
|
||||
const nsAString& aName,
|
||||
ErrorResult& aRv);
|
||||
|
||||
already_AddRefed<Promise> GetDataStores(const nsAString &aName,
|
||||
ErrorResult& aRv);
|
||||
bool Vibrate(uint32_t aDuration);
|
||||
@ -299,6 +305,8 @@ public:
|
||||
|
||||
static bool HasInputMethodSupport(JSContext* /* unused */, JSObject* aGlobal);
|
||||
|
||||
static bool HasDataStoreSupport(nsIPrincipal* aPrincipal);
|
||||
|
||||
static bool HasDataStoreSupport(JSContext* cx, JSObject* aGlobal);
|
||||
|
||||
static bool HasDownloadsSupport(JSContext* aCx, JSObject* aGlobal);
|
||||
|
@ -9,7 +9,7 @@
|
||||
|
||||
using namespace mozilla::dom;
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_1(PerformanceEntry, mPerformance)
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(PerformanceEntry, mPerformance)
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTING_ADDREF(PerformanceEntry)
|
||||
NS_IMPL_CYCLE_COLLECTING_RELEASE(PerformanceEntry)
|
||||
|
@ -9,7 +9,7 @@
|
||||
namespace mozilla {
|
||||
namespace dom {
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_1(URLSearchParams, mObservers)
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(URLSearchParams, mObservers)
|
||||
NS_IMPL_CYCLE_COLLECTING_ADDREF(URLSearchParams)
|
||||
NS_IMPL_CYCLE_COLLECTING_RELEASE(URLSearchParams)
|
||||
|
||||
|
@ -1434,8 +1434,9 @@ nsDOMClassInfo::ResolveConstructor(JSContext *cx, JSObject *aObj,
|
||||
// window.classname, just fall through and let the JS engine
|
||||
// return the Object constructor.
|
||||
|
||||
if (!::JS_DefinePropertyById(cx, obj, sConstructor_id, val, JS_PropertyStub,
|
||||
JS_StrictPropertyStub, JSPROP_ENUMERATE)) {
|
||||
JS::Rooted<jsid> id(cx, sConstructor_id);
|
||||
if (!::JS_DefinePropertyById(cx, obj, id, val, JSPROP_ENUMERATE,
|
||||
JS_PropertyStub, JS_StrictPropertyStub)) {
|
||||
return NS_ERROR_UNEXPECTED;
|
||||
}
|
||||
|
||||
@ -1670,8 +1671,8 @@ nsDOMClassInfo::PostCreatePrototype(JSContext * cx, JSObject * aProto)
|
||||
if (!contentDefinedProperty && desc.object() && !desc.value().isUndefined() &&
|
||||
!JS_DefineUCProperty(cx, global, mData->mNameUTF16,
|
||||
NS_strlen(mData->mNameUTF16),
|
||||
desc.value(), desc.getter(), desc.setter(),
|
||||
desc.attributes())) {
|
||||
desc.value(), desc.attributes(),
|
||||
desc.getter(), desc.setter())) {
|
||||
return NS_ERROR_UNEXPECTED;
|
||||
}
|
||||
|
||||
@ -3263,9 +3264,9 @@ nsWindowSH::NewResolve(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
|
||||
rv = WrapNative(cx, location, &NS_GET_IID(nsIDOMLocation), true, &v);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
bool ok = JS_DefinePropertyById(cx, obj, id, v, JS_PropertyStub,
|
||||
LocationSetterUnwrapper,
|
||||
JSPROP_PERMANENT | JSPROP_ENUMERATE);
|
||||
bool ok = JS_DefinePropertyById(cx, obj, id, v,
|
||||
JSPROP_PERMANENT | JSPROP_ENUMERATE,
|
||||
JS_PropertyStub, LocationSetterUnwrapper);
|
||||
|
||||
if (!ok) {
|
||||
return NS_ERROR_FAILURE;
|
||||
@ -3291,9 +3292,10 @@ nsWindowSH::NewResolve(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
|
||||
|
||||
// Hold on to the top window object as a global property so we
|
||||
// don't need to worry about losing expando properties etc.
|
||||
if (!JS_DefinePropertyById(cx, obj, id, v, JS_PropertyStub, JS_StrictPropertyStub,
|
||||
if (!JS_DefinePropertyById(cx, obj, id, v,
|
||||
JSPROP_READONLY | JSPROP_PERMANENT |
|
||||
JSPROP_ENUMERATE)) {
|
||||
JSPROP_ENUMERATE,
|
||||
JS_PropertyStub, JS_StrictPropertyStub)) {
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
*objp = obj;
|
||||
@ -3322,8 +3324,8 @@ nsWindowSH::NewResolve(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
|
||||
// also already defined it, so we don't have to.
|
||||
if (desc.object() && !desc.value().isUndefined() &&
|
||||
!JS_DefinePropertyById(cx, global, id, desc.value(),
|
||||
desc.getter(), desc.setter(),
|
||||
desc.attributes())) {
|
||||
desc.attributes(),
|
||||
desc.getter(), desc.setter())) {
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
}
|
||||
@ -3340,8 +3342,8 @@ nsWindowSH::NewResolve(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
|
||||
MOZ_ASSERT_IF(isXray, !desc.value().isUndefined());
|
||||
if (!desc.value().isUndefined() &&
|
||||
!JS_DefinePropertyById(cx, obj, id, desc.value(),
|
||||
desc.getter(), desc.setter(),
|
||||
desc.attributes())) {
|
||||
desc.attributes(),
|
||||
desc.getter(), desc.setter())) {
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
@ -3527,7 +3529,7 @@ nsGenericArraySH::NewResolve(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
|
||||
|
||||
uint32_t index = uint32_t(n);
|
||||
if (index < length) {
|
||||
*_retval = ::JS_DefineElement(cx, obj, index, JSVAL_VOID, nullptr, nullptr,
|
||||
*_retval = ::JS_DefineElement(cx, obj, index, JS::UndefinedHandleValue,
|
||||
JSPROP_ENUMERATE | JSPROP_SHARED);
|
||||
*objp = obj;
|
||||
}
|
||||
@ -3588,7 +3590,7 @@ nsGenericArraySH::Enumerate(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
|
||||
int32_t length = len_val.toInt32();
|
||||
|
||||
for (int32_t i = 0; ok && i < length; ++i) {
|
||||
ok = ::JS_DefineElement(cx, obj, i, JSVAL_VOID, nullptr, nullptr,
|
||||
ok = ::JS_DefineElement(cx, obj, i, JS::UndefinedHandleValue,
|
||||
JSPROP_ENUMERATE | JSPROP_SHARED);
|
||||
}
|
||||
}
|
||||
@ -3719,8 +3721,8 @@ nsStorage2SH::NewResolve(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
if (!DOMStringIsNull(data)) {
|
||||
if (!::JS_DefinePropertyById(cx, realObj, id, JSVAL_VOID, nullptr,
|
||||
nullptr, JSPROP_ENUMERATE)) {
|
||||
if (!::JS_DefinePropertyById(cx, realObj, id, JS::UndefinedHandleValue,
|
||||
JSPROP_ENUMERATE)) {
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
|
@ -13653,7 +13653,7 @@ nsGlobalWindow::EnableNetworkEvent(uint32_t aType)
|
||||
MOZ_ASSERT(IsInnerWindow());
|
||||
|
||||
nsCOMPtr<nsIPermissionManager> permMgr =
|
||||
do_GetService(NS_PERMISSIONMANAGER_CONTRACTID);
|
||||
services::GetPermissionManager();
|
||||
if (!permMgr) {
|
||||
NS_ERROR("No PermissionManager available!");
|
||||
return;
|
||||
|
@ -25,10 +25,10 @@ NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsMimeTypeArray)
|
||||
NS_INTERFACE_MAP_ENTRY(nsISupports)
|
||||
NS_INTERFACE_MAP_END
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_3(nsMimeTypeArray,
|
||||
mWindow,
|
||||
mMimeTypes,
|
||||
mHiddenMimeTypes)
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(nsMimeTypeArray,
|
||||
mWindow,
|
||||
mMimeTypes,
|
||||
mHiddenMimeTypes)
|
||||
|
||||
nsMimeTypeArray::nsMimeTypeArray(nsPIDOMWindow* aWindow)
|
||||
: mWindow(aWindow)
|
||||
@ -224,7 +224,7 @@ nsMimeTypeArray::EnsurePluginMimeTypes()
|
||||
NS_IMPL_CYCLE_COLLECTION_ROOT_NATIVE(nsMimeType, AddRef)
|
||||
NS_IMPL_CYCLE_COLLECTION_UNROOT_NATIVE(nsMimeType, Release)
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_2(nsMimeType, mWindow, mPluginElement)
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(nsMimeType, mWindow, mPluginElement)
|
||||
|
||||
nsMimeType::nsMimeType(nsPIDOMWindow* aWindow, nsPluginElement* aPluginElement,
|
||||
uint32_t aPluginTagMimeIndex, const nsAString& aType)
|
||||
|
@ -22,7 +22,7 @@
|
||||
|
||||
using namespace mozilla;
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_1(nsPerformanceTiming, mPerformance)
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(nsPerformanceTiming, mPerformance)
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_ROOT_NATIVE(nsPerformanceTiming, AddRef)
|
||||
NS_IMPL_CYCLE_COLLECTION_UNROOT_NATIVE(nsPerformanceTiming, Release)
|
||||
@ -337,7 +337,7 @@ nsPerformanceTiming::WrapObject(JSContext *cx)
|
||||
}
|
||||
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_1(nsPerformanceNavigation, mPerformance)
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(nsPerformanceNavigation, mPerformance)
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_ROOT_NATIVE(nsPerformanceNavigation, AddRef)
|
||||
NS_IMPL_CYCLE_COLLECTION_UNROOT_NATIVE(nsPerformanceNavigation, Release)
|
||||
@ -360,10 +360,10 @@ nsPerformanceNavigation::WrapObject(JSContext *cx)
|
||||
}
|
||||
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_5(nsPerformance,
|
||||
mWindow, mTiming,
|
||||
mNavigation, mEntries,
|
||||
mParentPerformance)
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(nsPerformance,
|
||||
mWindow, mTiming,
|
||||
mNavigation, mEntries,
|
||||
mParentPerformance)
|
||||
NS_IMPL_CYCLE_COLLECTING_ADDREF(nsPerformance)
|
||||
NS_IMPL_CYCLE_COLLECTING_RELEASE(nsPerformance)
|
||||
|
||||
|
@ -66,10 +66,10 @@ NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsPluginArray)
|
||||
NS_INTERFACE_MAP_ENTRY(nsISupportsWeakReference)
|
||||
NS_INTERFACE_MAP_END
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_3(nsPluginArray,
|
||||
mWindow,
|
||||
mPlugins,
|
||||
mHiddenPlugins)
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(nsPluginArray,
|
||||
mWindow,
|
||||
mPlugins,
|
||||
mHiddenPlugins)
|
||||
|
||||
static void
|
||||
GetPluginMimeTypes(const nsTArray<nsRefPtr<nsPluginElement> >& aPlugins,
|
||||
@ -356,7 +356,7 @@ NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsPluginElement)
|
||||
NS_INTERFACE_MAP_ENTRY(nsISupports)
|
||||
NS_INTERFACE_MAP_END
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_2(nsPluginElement, mWindow, mMimeTypes)
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(nsPluginElement, mWindow, mMimeTypes)
|
||||
|
||||
nsPluginElement::nsPluginElement(nsPIDOMWindow* aWindow,
|
||||
nsPluginTag* aPluginTag)
|
||||
|
@ -42,11 +42,11 @@ nsWindowRoot::~nsWindowRoot()
|
||||
}
|
||||
}
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_4(nsWindowRoot,
|
||||
mWindow,
|
||||
mListenerManager,
|
||||
mPopupNode,
|
||||
mParent)
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(nsWindowRoot,
|
||||
mWindow,
|
||||
mListenerManager,
|
||||
mPopupNode,
|
||||
mParent)
|
||||
|
||||
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsWindowRoot)
|
||||
NS_WRAPPERCACHE_INTERFACE_MAP_ENTRY
|
||||
|
@ -341,397 +341,16 @@ NS_DEFINE_STATIC_IID_ACCESSOR(nsWrapperCache, NS_WRAPPERCACHE_IID)
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRACE_WRAPPERCACHE(_class)
|
||||
|
||||
#define NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_1(_class, _field) \
|
||||
NS_IMPL_CYCLE_COLLECTION_CLASS(_class) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(_class) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_PRESERVED_WRAPPER \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_END \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(_class) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_SCRIPT_OBJECTS \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRACE_WRAPPERCACHE(_class)
|
||||
|
||||
#define NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_2(_class, _field1,\
|
||||
_field2) \
|
||||
NS_IMPL_CYCLE_COLLECTION_CLASS(_class) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(_class) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field1) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field2) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_PRESERVED_WRAPPER \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_END \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(_class) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field1) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field2) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_SCRIPT_OBJECTS \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRACE_WRAPPERCACHE(_class)
|
||||
|
||||
#define NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_3(_class, _field1,\
|
||||
_field2, \
|
||||
_field3) \
|
||||
NS_IMPL_CYCLE_COLLECTION_CLASS(_class) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(_class) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field1) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field2) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field3) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_PRESERVED_WRAPPER \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_END \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(_class) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field1) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field2) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field3) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_SCRIPT_OBJECTS \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRACE_WRAPPERCACHE(_class)
|
||||
|
||||
#define NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_4(_class, _field1,\
|
||||
_field2, \
|
||||
_field3, \
|
||||
_field4) \
|
||||
NS_IMPL_CYCLE_COLLECTION_CLASS(_class) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(_class) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field1) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field2) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field3) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field4) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_PRESERVED_WRAPPER \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_END \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(_class) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field1) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field2) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field3) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field4) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_SCRIPT_OBJECTS \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRACE_WRAPPERCACHE(_class)
|
||||
|
||||
#define NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_5(_class, _field1,\
|
||||
_field2, \
|
||||
_field3, \
|
||||
_field4, \
|
||||
_field5) \
|
||||
NS_IMPL_CYCLE_COLLECTION_CLASS(_class) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(_class) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field1) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field2) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field3) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field4) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field5) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_PRESERVED_WRAPPER \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_END \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(_class) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field1) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field2) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field3) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field4) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field5) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_SCRIPT_OBJECTS \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRACE_WRAPPERCACHE(_class)
|
||||
|
||||
#define NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_6(_class, _field1,\
|
||||
_field2, \
|
||||
_field3, \
|
||||
_field4, \
|
||||
_field5, \
|
||||
_field6) \
|
||||
NS_IMPL_CYCLE_COLLECTION_CLASS(_class) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(_class) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field1) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field2) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field3) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field4) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field5) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field6) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_PRESERVED_WRAPPER \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_END \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(_class) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field1) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field2) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field3) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field4) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field5) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field6) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_SCRIPT_OBJECTS \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRACE_WRAPPERCACHE(_class)
|
||||
|
||||
#define NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_7(_class, _field1,\
|
||||
_field2, \
|
||||
_field3, \
|
||||
_field4, \
|
||||
_field5, \
|
||||
_field6, \
|
||||
_field7) \
|
||||
NS_IMPL_CYCLE_COLLECTION_CLASS(_class) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(_class) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field1) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field2) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field3) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field4) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field5) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field6) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field7) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_PRESERVED_WRAPPER \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_END \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(_class) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field1) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field2) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field3) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field4) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field5) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field6) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field7) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_SCRIPT_OBJECTS \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRACE_WRAPPERCACHE(_class)
|
||||
|
||||
#define NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_8(_class, _field1,\
|
||||
_field2, \
|
||||
_field3, \
|
||||
_field4, \
|
||||
_field5, \
|
||||
_field6, \
|
||||
_field7, \
|
||||
_field8) \
|
||||
NS_IMPL_CYCLE_COLLECTION_CLASS(_class) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(_class) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field1) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field2) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field3) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field4) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field5) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field6) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field7) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field8) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_PRESERVED_WRAPPER \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_END \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(_class) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field1) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field2) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field3) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field4) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field5) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field6) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field7) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field8) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_SCRIPT_OBJECTS \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRACE_WRAPPERCACHE(_class)
|
||||
|
||||
#define NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_9(_class, _field1,\
|
||||
_field2, \
|
||||
_field3, \
|
||||
_field4, \
|
||||
_field5, \
|
||||
_field6, \
|
||||
_field7, \
|
||||
_field8, \
|
||||
_field9) \
|
||||
NS_IMPL_CYCLE_COLLECTION_CLASS(_class) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(_class) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field1) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field2) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field3) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field4) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field5) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field6) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field7) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field8) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field9) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_PRESERVED_WRAPPER \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_END \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(_class) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field1) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field2) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field3) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field4) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field5) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field6) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field7) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field8) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field9) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_SCRIPT_OBJECTS \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRACE_WRAPPERCACHE(_class)
|
||||
|
||||
#define NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_10(_class, _field1,\
|
||||
_field2, \
|
||||
_field3, \
|
||||
_field4, \
|
||||
_field5, \
|
||||
_field6, \
|
||||
_field7, \
|
||||
_field8, \
|
||||
_field9, \
|
||||
_field10) \
|
||||
NS_IMPL_CYCLE_COLLECTION_CLASS(_class) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(_class) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field1) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field2) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field3) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field4) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field5) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field6) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field7) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field8) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field9) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field10) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_PRESERVED_WRAPPER \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_END \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(_class) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field1) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field2) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field3) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field4) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field5) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field6) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field7) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field8) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field9) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field10) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_SCRIPT_OBJECTS \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRACE_WRAPPERCACHE(_class)
|
||||
|
||||
#define NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_11(_class, \
|
||||
_field1, \
|
||||
_field2, \
|
||||
_field3, \
|
||||
_field4, \
|
||||
_field5, \
|
||||
_field6, \
|
||||
_field7, \
|
||||
_field8, \
|
||||
_field9, \
|
||||
_field10, \
|
||||
_field11) \
|
||||
NS_IMPL_CYCLE_COLLECTION_CLASS(_class) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(_class) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field1) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field2) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field3) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field4) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field5) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field6) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field7) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field8) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field9) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field10) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field11) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_PRESERVED_WRAPPER \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_END \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(_class) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field1) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field2) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field3) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field4) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field5) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field6) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field7) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field8) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field9) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field10) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field11) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_SCRIPT_OBJECTS \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRACE_WRAPPERCACHE(_class)
|
||||
|
||||
#define NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_12(_class, \
|
||||
_field1, \
|
||||
_field2, \
|
||||
_field3, \
|
||||
_field4, \
|
||||
_field5, \
|
||||
_field6, \
|
||||
_field7, \
|
||||
_field8, \
|
||||
_field9, \
|
||||
_field10, \
|
||||
_field11, \
|
||||
_field12) \
|
||||
NS_IMPL_CYCLE_COLLECTION_CLASS(_class) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(_class) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field1) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field2) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field3) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field4) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field5) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field6) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field7) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field8) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field9) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field10) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field11) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field12) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_PRESERVED_WRAPPER \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_END \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(_class) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field1) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field2) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field3) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field4) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field5) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field6) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field7) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field8) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field9) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field10) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field11) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field12) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_SCRIPT_OBJECTS \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRACE_WRAPPERCACHE(_class)
|
||||
|
||||
#define NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_13(_class, \
|
||||
_field1, \
|
||||
_field2, \
|
||||
_field3, \
|
||||
_field4, \
|
||||
_field5, \
|
||||
_field6, \
|
||||
_field7, \
|
||||
_field8, \
|
||||
_field9, \
|
||||
_field10, \
|
||||
_field11, \
|
||||
_field12, \
|
||||
_field13) \
|
||||
NS_IMPL_CYCLE_COLLECTION_CLASS(_class) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(_class) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field1) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field2) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field3) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field4) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field5) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field6) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field7) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field8) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field9) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field10) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field11) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field12) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field13) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_PRESERVED_WRAPPER \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_END \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(_class) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field1) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field2) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field3) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field4) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field5) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field6) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field7) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field8) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field9) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field10) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field11) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field12) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field13) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_SCRIPT_OBJECTS \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END \
|
||||
#define NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(_class, ...) \
|
||||
NS_IMPL_CYCLE_COLLECTION_CLASS(_class) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(_class) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(__VA_ARGS__) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_PRESERVED_WRAPPER \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_END \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(_class) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(__VA_ARGS__) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_SCRIPT_OBJECTS \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRACE_WRAPPERCACHE(_class)
|
||||
|
||||
#endif /* nsWrapperCache_h___ */
|
||||
|
@ -288,9 +288,24 @@ DOMInterfaces = {
|
||||
'nativeType': 'nsDOMDataChannel',
|
||||
},
|
||||
|
||||
'DataStoreCursor': {
|
||||
'DataStore': [{
|
||||
'workers': False
|
||||
}, {
|
||||
'workers': True,
|
||||
'nativeType': 'mozilla::dom::workers::WorkerDataStore',
|
||||
'implicitJSContext': ['name', 'owner', 'readOnly', 'get', 'remove',
|
||||
'clear', 'revisionId', 'getLength', 'sync']
|
||||
}],
|
||||
|
||||
'DataStoreCursor': [{
|
||||
'workers': False,
|
||||
'wrapperCache': False
|
||||
}, {
|
||||
'workers': True,
|
||||
'nativeType': 'mozilla::dom::workers::WorkerDataStoreCursor',
|
||||
'wrapperCache': False,
|
||||
},
|
||||
'implicitJSContext': ['store', 'next', 'close']
|
||||
}],
|
||||
|
||||
'DedicatedWorkerGlobalScope': {
|
||||
'headerFile': 'mozilla/dom/WorkerScope.h',
|
||||
@ -1545,6 +1560,7 @@ DOMInterfaces = {
|
||||
'WorkerNavigator': {
|
||||
'headerFile': 'mozilla/dom/workers/bindings/Navigator.h',
|
||||
'workers': True,
|
||||
'implicitJSContext': ['getDataStores'],
|
||||
},
|
||||
|
||||
'XMLHttpRequest': [
|
||||
|
@ -5044,7 +5044,7 @@ def getWrapTemplateForType(type, descriptorProvider, result, successCode,
|
||||
$*{innerTemplate}
|
||||
} while (0);
|
||||
if (!JS_DefineElement(cx, returnArray, ${index}, tmp,
|
||||
nullptr, nullptr, JSPROP_ENUMERATE)) {
|
||||
JSPROP_ENUMERATE)) {
|
||||
$*{exceptionCode}
|
||||
}
|
||||
}
|
||||
@ -6787,8 +6787,8 @@ class CGNewResolveHook(CGAbstractBindingMethod):
|
||||
// define it.
|
||||
if (!desc.value().isUndefined() &&
|
||||
!JS_DefinePropertyById(cx, obj, id, desc.value(),
|
||||
desc.getter(), desc.setter(),
|
||||
desc.attributes())) {
|
||||
desc.attributes(),
|
||||
desc.getter(), desc.setter())) {
|
||||
return false;
|
||||
}
|
||||
objp.set(obj);
|
||||
@ -8688,8 +8688,8 @@ class CGResolveOwnPropertyViaNewresolve(CGAbstractBindingMethod):
|
||||
if (objDesc.object() &&
|
||||
!objDesc.value().isUndefined() &&
|
||||
!JS_DefinePropertyById(cx, obj, id, objDesc.value(),
|
||||
objDesc.getter(), objDesc.setter(),
|
||||
objDesc.attributes())) {
|
||||
objDesc.attributes(),
|
||||
objDesc.getter(), objDesc.setter())) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@ -10570,7 +10570,7 @@ class CGDictionary(CGThing):
|
||||
member.location))
|
||||
|
||||
propDef = (
|
||||
'JS_DefinePropertyById(cx, obj, atomsCache->%s, temp, nullptr, nullptr, JSPROP_ENUMERATE)' %
|
||||
'JS_DefinePropertyById(cx, obj, atomsCache->%s, temp, JSPROP_ENUMERATE)' %
|
||||
self.makeIdName(member.identifier.name))
|
||||
|
||||
innerTemplate = wrapForType(
|
||||
|
@ -18,6 +18,7 @@
|
||||
#include "nsThreadUtils.h"
|
||||
#include "mozilla/dom/bluetooth/BluetoothTypes.h"
|
||||
#include "mozilla/dom/BluetoothManagerBinding.h"
|
||||
#include "mozilla/Services.h"
|
||||
|
||||
using namespace mozilla;
|
||||
|
||||
@ -199,8 +200,7 @@ BluetoothManager::CheckPermission(nsPIDOMWindow* aWindow)
|
||||
{
|
||||
NS_ASSERTION(aWindow, "Null pointer!");
|
||||
|
||||
nsCOMPtr<nsIPermissionManager> permMgr =
|
||||
do_GetService(NS_PERMISSIONMANAGER_CONTRACTID);
|
||||
nsCOMPtr<nsIPermissionManager> permMgr = services::GetPermissionManager();
|
||||
NS_ENSURE_TRUE(permMgr, false);
|
||||
|
||||
uint32_t permission;
|
||||
|
@ -8,7 +8,7 @@
|
||||
using namespace mozilla;
|
||||
using namespace mozilla::dom;
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_1(DOMCameraPoint, mParent)
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(DOMCameraPoint, mParent)
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTING_ADDREF(DOMCameraPoint)
|
||||
NS_IMPL_CYCLE_COLLECTING_RELEASE(DOMCameraPoint)
|
||||
@ -17,8 +17,8 @@ NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(DOMCameraPoint)
|
||||
NS_INTERFACE_MAP_ENTRY(nsISupports)
|
||||
NS_INTERFACE_MAP_END
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_5(DOMCameraDetectedFace, mParent,
|
||||
mBounds, mLeftEye, mRightEye, mMouth)
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(DOMCameraDetectedFace, mParent,
|
||||
mBounds, mLeftEye, mRightEye, mMouth)
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTING_ADDREF(DOMCameraDetectedFace)
|
||||
NS_IMPL_CYCLE_COLLECTING_RELEASE(DOMCameraDetectedFace)
|
||||
|
@ -23,7 +23,7 @@
|
||||
using namespace mozilla;
|
||||
using namespace mozilla::dom;
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_1(nsDOMCameraManager, mWindow)
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(nsDOMCameraManager, mWindow)
|
||||
|
||||
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsDOMCameraManager)
|
||||
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIObserver)
|
||||
@ -90,7 +90,7 @@ bool
|
||||
nsDOMCameraManager::CheckPermission(nsPIDOMWindow* aWindow)
|
||||
{
|
||||
nsCOMPtr<nsIPermissionManager> permMgr =
|
||||
do_GetService(NS_PERMISSIONMANAGER_CONTRACTID);
|
||||
services::GetPermissionManager();
|
||||
NS_ENSURE_TRUE(permMgr, false);
|
||||
|
||||
uint32_t permission = nsIPermissionManager::DENY_ACTION;
|
||||
|
@ -82,9 +82,6 @@ public:
|
||||
// target of DataStore, so that it can know where to fire the events.
|
||||
void SetDataStoreImpl(DataStoreImpl& aStore, ErrorResult& aRv);
|
||||
|
||||
protected:
|
||||
virtual ~DataStore() {}
|
||||
|
||||
private:
|
||||
nsRefPtr<DataStoreImpl> mStore;
|
||||
};
|
||||
|
@ -13,8 +13,12 @@
|
||||
namespace mozilla {
|
||||
namespace dom {
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_ROOT_NATIVE(DataStoreCursor, AddRef)
|
||||
NS_IMPL_CYCLE_COLLECTION_UNROOT_NATIVE(DataStoreCursor, Release)
|
||||
NS_IMPL_CYCLE_COLLECTING_ADDREF(DataStoreCursor)
|
||||
NS_IMPL_CYCLE_COLLECTING_RELEASE(DataStoreCursor)
|
||||
|
||||
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(DataStoreCursor)
|
||||
NS_INTERFACE_MAP_ENTRY(nsISupports)
|
||||
NS_INTERFACE_MAP_END
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION(DataStoreCursor, mCursor)
|
||||
|
||||
|
@ -22,11 +22,11 @@ class DataStore;
|
||||
class GlobalObject;
|
||||
class DataStoreCursorImpl;
|
||||
|
||||
class DataStoreCursor MOZ_FINAL
|
||||
class DataStoreCursor MOZ_FINAL : public nsISupports
|
||||
{
|
||||
public:
|
||||
NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(DataStoreCursor)
|
||||
NS_DECL_CYCLE_COLLECTION_NATIVE_CLASS(DataStoreCursor)
|
||||
NS_DECL_CYCLE_COLLECTING_ISUPPORTS
|
||||
NS_DECL_CYCLE_COLLECTION_CLASS(DataStoreCursor)
|
||||
|
||||
// WebIDL (internal functions)
|
||||
|
||||
@ -48,9 +48,6 @@ public:
|
||||
// API's logic in JS.
|
||||
void SetDataStoreCursorImpl(DataStoreCursorImpl& aCursor);
|
||||
|
||||
protected:
|
||||
virtual ~DataStoreCursor() {}
|
||||
|
||||
private:
|
||||
nsRefPtr<DataStoreCursorImpl> mCursor;
|
||||
};
|
||||
|
@ -308,7 +308,7 @@ DataStoreService.prototype = {
|
||||
getDataStoreCreate: function(aWindow, aResolve, aStores) {
|
||||
debug("GetDataStoreCreate");
|
||||
|
||||
let results = [];
|
||||
let results = new aWindow.Array();
|
||||
|
||||
if (!aStores.length) {
|
||||
aResolve(results);
|
||||
@ -342,7 +342,7 @@ DataStoreService.prototype = {
|
||||
debug("GetDataStoreResolve");
|
||||
|
||||
let callbackPending = aStores.length;
|
||||
let results = [];
|
||||
let results = new aWindow.Array();
|
||||
|
||||
if (!callbackPending) {
|
||||
aResolve(results);
|
||||
|
30
dom/datastore/tests/file_basic_worker.html
Normal file
30
dom/datastore/tests/file_basic_worker.html
Normal file
@ -0,0 +1,30 @@
|
||||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Test for DataStore - basic operation on a readonly db</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="container"></div>
|
||||
<script type="application/javascript;version=1.7">
|
||||
|
||||
var messages = [];
|
||||
var worker = new Worker("file_basic_worker.js");
|
||||
|
||||
worker.onmessage = function(event) {
|
||||
messages.push(event.data)
|
||||
|
||||
if (event.data == 'DONE') {
|
||||
// Free the worker when all the tests are done.
|
||||
worker.terminate();
|
||||
|
||||
// Fire message to the test_basic_worker.html.
|
||||
for (var i = 0; i < messages.length; i++) {
|
||||
alert(messages[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
137
dom/datastore/tests/file_basic_worker.js
Normal file
137
dom/datastore/tests/file_basic_worker.js
Normal file
@ -0,0 +1,137 @@
|
||||
var gStore;
|
||||
|
||||
function is(a, b, msg) {
|
||||
postMessage((a === b ? 'OK' : 'KO') + ' ' + msg)
|
||||
}
|
||||
|
||||
function ok(a, msg) {
|
||||
postMessage((a ? 'OK' : 'KO')+ ' ' + msg)
|
||||
}
|
||||
|
||||
function cbError() {
|
||||
postMessage('KO error');
|
||||
}
|
||||
|
||||
function finish() {
|
||||
postMessage('DONE');
|
||||
}
|
||||
|
||||
function testGetDataStores() {
|
||||
navigator.getDataStores('foo').then(function(stores) {
|
||||
is(stores.length, 1, "getDataStores('foo') returns 1 element");
|
||||
is(stores[0].name, 'foo', 'The dataStore.name is foo');
|
||||
is(stores[0].readOnly, false, 'The dataStore foo is not in readonly');
|
||||
|
||||
var store = stores[0];
|
||||
ok("get" in store, "store.get exists");
|
||||
ok("put" in store, "store.put exists");
|
||||
ok("add" in store, "store.add exists");
|
||||
ok("remove" in store, "store.remove exists");
|
||||
ok("clear" in store, "store.clear exists");
|
||||
ok("revisionId" in store, "store.revisionId exists");
|
||||
ok("getLength" in store, "store.getLength exists");
|
||||
ok("sync" in store, "store.sync exists");
|
||||
|
||||
gStore = stores[0];
|
||||
|
||||
runTest();
|
||||
}, cbError);
|
||||
}
|
||||
|
||||
function testStoreGet(id, value) {
|
||||
gStore.get(id).then(function(what) {
|
||||
ok(true, "store.get() retrieves data");
|
||||
is(what, value, "store.get(" + id + ") returns " + value);
|
||||
}, function() {
|
||||
ok(false, "store.get(" + id + ") retrieves data");
|
||||
}).then(runTest, cbError);
|
||||
}
|
||||
|
||||
function testStoreAdd(value) {
|
||||
return gStore.add(value).then(function(what) {
|
||||
ok(true, "store.add() is called");
|
||||
ok(what > 0, "store.add() returns something");
|
||||
return what;
|
||||
}, cbError);
|
||||
}
|
||||
|
||||
function testStorePut(value, id) {
|
||||
return gStore.put(value, id).then(function() {
|
||||
ok(true, "store.put() is called");
|
||||
}, cbError);
|
||||
}
|
||||
|
||||
function testStoreGetLength(number) {
|
||||
return gStore.getLength().then(function(n) {
|
||||
is(number, n, "store.getLength() returns the right number");
|
||||
}, cbError);
|
||||
}
|
||||
|
||||
function testStoreRemove(id) {
|
||||
return gStore.remove(id).then(function() {
|
||||
ok(true, "store.remove() is called");
|
||||
}, cbError);
|
||||
}
|
||||
|
||||
function testStoreClear() {
|
||||
return gStore.clear().then(function() {
|
||||
ok(true, "store.clear() is called");
|
||||
}, cbError);
|
||||
}
|
||||
|
||||
var tests = [
|
||||
// Test for GetDataStore
|
||||
testGetDataStores,
|
||||
|
||||
// Unknown ID
|
||||
function() { testStoreGet(42, undefined); },
|
||||
function() { testStoreGet(42, undefined); }, // twice
|
||||
|
||||
// Add + Get - number
|
||||
function() { testStoreAdd(42).then(function(id) {
|
||||
gId = id; runTest(); }, cbError); },
|
||||
function() { testStoreGet(gId, 42); },
|
||||
|
||||
// Add + Get - boolean
|
||||
function() { testStoreAdd(true).then(function(id) {
|
||||
gId = id; runTest(); }, cbError); },
|
||||
function() { testStoreGet(gId, true); },
|
||||
|
||||
// Add + Get - string
|
||||
function() { testStoreAdd("hello world").then(function(id) {
|
||||
gId = id; runTest(); }, cbError); },
|
||||
function() { testStoreGet(gId, "hello world"); },
|
||||
|
||||
// Put + Get - string
|
||||
function() { testStorePut("hello world 2", gId).then(function() {
|
||||
runTest(); }, cbError); },
|
||||
function() { testStoreGet(gId, "hello world 2"); },
|
||||
|
||||
// getLength
|
||||
function() { testStoreGetLength(3).then(function() { runTest(); }, cbError); },
|
||||
|
||||
// Remove
|
||||
function() { testStoreRemove(gId).then(function(what) {
|
||||
runTest(); }, cbError); },
|
||||
function() { testStoreGet(gId, undefined); },
|
||||
|
||||
// Remove - wrong ID
|
||||
function() { testStoreRemove(gId).then(function(what) {
|
||||
runTest(); }, cbError); },
|
||||
|
||||
// Clear
|
||||
function() { testStoreClear().then(function(what) {
|
||||
runTest(); }, cbError); },
|
||||
];
|
||||
|
||||
function runTest() {
|
||||
if (!tests.length) {
|
||||
finish();
|
||||
return;
|
||||
}
|
||||
|
||||
var test = tests.shift();
|
||||
test();
|
||||
}
|
||||
|
||||
runTest();
|
@ -372,7 +372,7 @@
|
||||
var steps = [ { operation: 'clear', },
|
||||
{ operation: 'add', id: 1, data: 123 },
|
||||
{ operation: 'add', id: 2, data: 42 },
|
||||
{ operation: 'add', id: 'foobar', data: 2 } ]
|
||||
{ operation: 'add', id: 'foobar', data: 2 } ]
|
||||
testCursor(gCursor, steps);
|
||||
},
|
||||
|
||||
@ -387,7 +387,7 @@
|
||||
var steps = [ { operation: 'clear', },
|
||||
{ operation: 'add', id: 1, data: 123 },
|
||||
{ operation: 'add', id: 2, data: 43 },
|
||||
{ operation: 'add', id: 'foobar', data: 2 } ]
|
||||
{ operation: 'add', id: 'foobar', data: 2 } ]
|
||||
testCursor(gCursor, steps);
|
||||
},
|
||||
|
||||
@ -401,7 +401,7 @@
|
||||
function() {
|
||||
var steps = [ { operation: 'clear', },
|
||||
{ operation: 'add', id: 1, data: 123 },
|
||||
{ operation: 'add', id: 'foobar', data: 2 } ]
|
||||
{ operation: 'add', id: 'foobar', data: 2 } ]
|
||||
testCursor(gCursor, steps);
|
||||
},
|
||||
|
||||
@ -417,7 +417,7 @@
|
||||
var steps = [ { operation: 'clear', },
|
||||
{ operation: 'add', id: 1, data: 123 },
|
||||
{ operation: 'add', id: 4, data: 42 },
|
||||
{ operation: 'add', id: 'foobar', data: 2 } ]
|
||||
{ operation: 'add', id: 'foobar', data: 2 } ]
|
||||
testCursor(gCursor, steps);
|
||||
},
|
||||
|
||||
|
30
dom/datastore/tests/file_sync_worker.html
Normal file
30
dom/datastore/tests/file_sync_worker.html
Normal file
@ -0,0 +1,30 @@
|
||||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Test for DataStore - sync</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="container"></div>
|
||||
<script type="application/javascript;version=1.7">
|
||||
|
||||
var messages = [];
|
||||
var worker = new Worker("file_sync_worker.js");
|
||||
|
||||
worker.onmessage = function(event) {
|
||||
messages.push(event.data)
|
||||
|
||||
if (event.data == 'DONE') {
|
||||
// Free the worker when all the tests are done.
|
||||
worker.terminate();
|
||||
|
||||
// Fire message to the test_sync_worker.html.
|
||||
for (var i = 0; i < messages.length; i++) {
|
||||
alert(messages[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
477
dom/datastore/tests/file_sync_worker.js
Normal file
477
dom/datastore/tests/file_sync_worker.js
Normal file
@ -0,0 +1,477 @@
|
||||
var gStore;
|
||||
var gRevisions = [];
|
||||
var gCursor;
|
||||
var gExpectedEvents = true;
|
||||
|
||||
function is(a, b, msg) {
|
||||
postMessage((a === b ? 'OK' : 'KO') + ' ' + msg)
|
||||
}
|
||||
|
||||
function ok(a, msg) {
|
||||
postMessage((a ? 'OK' : 'KO')+ ' ' + msg)
|
||||
}
|
||||
|
||||
function cbError() {
|
||||
postMessage('KO error');
|
||||
}
|
||||
|
||||
function finish() {
|
||||
postMessage('DONE');
|
||||
}
|
||||
|
||||
function testGetDataStores() {
|
||||
navigator.getDataStores('foo').then(function(stores) {
|
||||
is(stores.length, 1, "getDataStores('foo') returns 1 element");
|
||||
|
||||
gStore = stores[0];
|
||||
gRevisions.push(gStore.revisionId);
|
||||
|
||||
gStore.onchange = function(aEvent) {
|
||||
ok(gExpectedEvents, "Events received!");
|
||||
runTest();
|
||||
}
|
||||
|
||||
runTest();
|
||||
}, cbError);
|
||||
}
|
||||
|
||||
function testBasicInterface() {
|
||||
var cursor = gStore.sync();
|
||||
ok(cursor, "Cursor is created");
|
||||
|
||||
// TODO This needs more love for running on workers. Tend to fire a
|
||||
// follow-up for this...
|
||||
// is(cursor.store, gStore, "Cursor.store is the store");
|
||||
|
||||
ok("next" in cursor, "Cursor.next exists");
|
||||
ok("close" in cursor, "Cursor.close exists");
|
||||
|
||||
cursor.close();
|
||||
|
||||
runTest();
|
||||
}
|
||||
|
||||
function testCursor(cursor, steps) {
|
||||
if (!steps.length) {
|
||||
runTest();
|
||||
return;
|
||||
}
|
||||
|
||||
var step = steps.shift();
|
||||
cursor.next().then(function(data) {
|
||||
ok(!!data, "Cursor.next returns data");
|
||||
is(data.operation, step.operation, "Waiting for operation: '" + step.operation + "' received '" + data.operation + "'");
|
||||
|
||||
|
||||
switch (data.operation) {
|
||||
case 'done':
|
||||
is(/[0-9a-zA-Z]{8}-[0-9a-zA-Z]{4}-[0-9a-zA-Z]{4}-[0-9a-zA-Z]{4}-[0-9a-zA-Z]{12}/.test(data.revisionId), true, "done has a valid revisionId");
|
||||
is (data.revisionId, gRevisions[gRevisions.length-1], "Last revision matches");
|
||||
break;
|
||||
|
||||
case 'add':
|
||||
case 'update':
|
||||
if ('id' in step) {
|
||||
is(data.id, step.id, "next() add: id matches: " + data.id + " " + step.id);
|
||||
}
|
||||
|
||||
if ('data' in step) {
|
||||
is(data.data, step.data, "next() add: data matches: " + data.data + " " + step.data);
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 'remove':
|
||||
if ('id' in step) {
|
||||
is(data.id, step.id, "next() add: id matches: " + data.id + " " + step.id);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
testCursor(cursor, steps);
|
||||
});
|
||||
}
|
||||
|
||||
var tests = [
|
||||
// Test for GetDataStore
|
||||
testGetDataStores,
|
||||
|
||||
// interface test
|
||||
testBasicInterface,
|
||||
|
||||
// empty DataStore
|
||||
function() {
|
||||
var cursor = gStore.sync();
|
||||
var steps = [ { operation: 'clear' },
|
||||
{ operation: 'done' },
|
||||
{ operation: 'done' }];
|
||||
testCursor(cursor, steps);
|
||||
},
|
||||
|
||||
function() {
|
||||
gExpectedEvents = false;
|
||||
var cursor = gStore.sync('wrong revision ID');
|
||||
var steps = [ { operation: 'clear' },
|
||||
{ operation: 'done' },
|
||||
{ operation: 'done' }];
|
||||
testCursor(cursor, steps);
|
||||
},
|
||||
|
||||
function() {
|
||||
var cursor = gStore.sync(gRevisions[0]);
|
||||
var steps = [ { operation: 'done' },
|
||||
{ operation: 'done' }];
|
||||
testCursor(cursor, steps);
|
||||
},
|
||||
|
||||
// Test add from scratch
|
||||
function() {
|
||||
gExpectedEvents = true;
|
||||
|
||||
gStore.add(1).then(function(id) {
|
||||
gRevisions.push(gStore.revisionId);
|
||||
ok(true, "Item: " + id + " added");
|
||||
});
|
||||
},
|
||||
|
||||
function() {
|
||||
gStore.add(2,"foobar").then(function(id) {
|
||||
gRevisions.push(gStore.revisionId);
|
||||
ok(true, "Item: " + id + " added");
|
||||
});
|
||||
},
|
||||
|
||||
function() {
|
||||
gStore.add(3,3).then(function(id) {
|
||||
gRevisions.push(gStore.revisionId);
|
||||
ok(true, "Item: " + id + " added");
|
||||
});
|
||||
},
|
||||
|
||||
function() {
|
||||
gExpectedEvents = false;
|
||||
var cursor = gStore.sync();
|
||||
var steps = [ { operation: 'clear', },
|
||||
{ operation: 'add', id: 1, data: 1 },
|
||||
{ operation: 'add', id: 3, data: 3 },
|
||||
{ operation: 'add', id: 'foobar', data: 2 },
|
||||
{ operation: 'done' }];
|
||||
testCursor(cursor, steps);
|
||||
},
|
||||
|
||||
function() {
|
||||
var cursor = gStore.sync('wrong revision ID');
|
||||
var steps = [ { operation: 'clear', },
|
||||
{ operation: 'add', id: 1, data: 1 },
|
||||
{ operation: 'add', id: 3, data: 3 },
|
||||
{ operation: 'add', id: 'foobar', data: 2 },
|
||||
{ operation: 'done' }];
|
||||
testCursor(cursor, steps);
|
||||
},
|
||||
|
||||
function() {
|
||||
var cursor = gStore.sync(gRevisions[0]);
|
||||
var steps = [ { operation: 'add', id: 1, data: 1 },
|
||||
{ operation: 'add', id: 'foobar', data: 2 },
|
||||
{ operation: 'add', id: 3, data: 3 },
|
||||
{ operation: 'done' }];
|
||||
testCursor(cursor, steps);
|
||||
},
|
||||
|
||||
function() {
|
||||
var cursor = gStore.sync(gRevisions[1]);
|
||||
var steps = [ { operation: 'add', id: 'foobar', data: 2 },
|
||||
{ operation: 'add', id: 3, data: 3 },
|
||||
{ operation: 'done' }];
|
||||
testCursor(cursor, steps);
|
||||
},
|
||||
|
||||
function() {
|
||||
var cursor = gStore.sync(gRevisions[2]);
|
||||
var steps = [ { operation: 'add', id: 3, data: 3 },
|
||||
{ operation: 'done' }];
|
||||
testCursor(cursor, steps);
|
||||
},
|
||||
|
||||
function() {
|
||||
var cursor = gStore.sync(gRevisions[3]);
|
||||
var steps = [ { operation: 'done' }];
|
||||
testCursor(cursor, steps);
|
||||
},
|
||||
|
||||
// Test after an update
|
||||
function() {
|
||||
gExpectedEvents = true;
|
||||
gStore.put(123, 1).then(function() {
|
||||
gRevisions.push(gStore.revisionId);
|
||||
});
|
||||
},
|
||||
|
||||
function() {
|
||||
gExpectedEvents = false;
|
||||
var cursor = gStore.sync();
|
||||
var steps = [ { operation: 'clear', },
|
||||
{ operation: 'add', id: 1, data: 123 },
|
||||
{ operation: 'add', id: 3, data: 3 },
|
||||
{ operation: 'add', id: 'foobar', data: 2 },
|
||||
{ operation: 'done' }];
|
||||
testCursor(cursor, steps);
|
||||
},
|
||||
|
||||
function() {
|
||||
var cursor = gStore.sync('wrong revision ID');
|
||||
var steps = [ { operation: 'clear', },
|
||||
{ operation: 'add', id: 1, data: 123 },
|
||||
{ operation: 'add', id: 3, data: 3 },
|
||||
{ operation: 'add', id: 'foobar', data: 2 },
|
||||
{ operation: 'done' }];
|
||||
testCursor(cursor, steps);
|
||||
},
|
||||
|
||||
function() {
|
||||
var cursor = gStore.sync(gRevisions[0]);
|
||||
var steps = [ { operation: 'add', id: 1, data: 123 },
|
||||
{ operation: 'add', id: 'foobar', data: 2 },
|
||||
{ operation: 'add', id: 3, data: 3 },
|
||||
{ operation: 'done' }];
|
||||
testCursor(cursor, steps);
|
||||
},
|
||||
|
||||
function() {
|
||||
var cursor = gStore.sync(gRevisions[1]);
|
||||
var steps = [ { operation: 'add', id: 'foobar', data: 2 },
|
||||
{ operation: 'add', id: 3, data: 3 },
|
||||
{ operation: 'update', id: 1, data: 123 },
|
||||
{ operation: 'done' }];
|
||||
testCursor(cursor, steps);
|
||||
},
|
||||
|
||||
function() {
|
||||
var cursor = gStore.sync(gRevisions[2]);
|
||||
var steps = [ { operation: 'add', id: 3, data: 3 },
|
||||
{ operation: 'update', id: 1, data: 123 },
|
||||
{ operation: 'done' }];
|
||||
testCursor(cursor, steps);
|
||||
},
|
||||
|
||||
function() {
|
||||
var cursor = gStore.sync(gRevisions[3]);
|
||||
var steps = [ { operation: 'update', id: 1, data: 123 },
|
||||
{ operation: 'done' }];
|
||||
testCursor(cursor, steps);
|
||||
},
|
||||
|
||||
function() {
|
||||
var cursor = gStore.sync(gRevisions[4]);
|
||||
var steps = [ { operation: 'done' }];
|
||||
testCursor(cursor, steps);
|
||||
},
|
||||
|
||||
// Test after a remove
|
||||
function() {
|
||||
gExpectedEvents = true;
|
||||
gStore.remove(3).then(function() {
|
||||
gRevisions.push(gStore.revisionId);
|
||||
});
|
||||
},
|
||||
|
||||
function() {
|
||||
gExpectedEvents = false;
|
||||
var cursor = gStore.sync();
|
||||
var steps = [ { operation: 'clear', },
|
||||
{ operation: 'add', id: 1, data: 123 },
|
||||
{ operation: 'add', id: 'foobar', data: 2 },
|
||||
{ operation: 'done' }];
|
||||
testCursor(cursor, steps);
|
||||
},
|
||||
|
||||
function() {
|
||||
var cursor = gStore.sync('wrong revision ID');
|
||||
var steps = [ { operation: 'clear', },
|
||||
{ operation: 'add', id: 1, data: 123 },
|
||||
{ operation: 'add', id: 'foobar', data: 2 },
|
||||
{ operation: 'done' }];
|
||||
testCursor(cursor, steps);
|
||||
},
|
||||
|
||||
function() {
|
||||
var cursor = gStore.sync(gRevisions[0]);
|
||||
var steps = [ { operation: 'add', id: 1, data: 123 },
|
||||
{ operation: 'add', id: 'foobar', data: 2 },
|
||||
{ operation: 'done' }];
|
||||
testCursor(cursor, steps);
|
||||
},
|
||||
|
||||
function() {
|
||||
var cursor = gStore.sync(gRevisions[1]);
|
||||
var steps = [ { operation: 'add', id: 'foobar', data: 2 },
|
||||
{ operation: 'update', id: 1, data: 123 },
|
||||
{ operation: 'done' }];
|
||||
testCursor(cursor, steps);
|
||||
},
|
||||
|
||||
function() {
|
||||
var cursor = gStore.sync(gRevisions[2]);
|
||||
var steps = [ { operation: 'update', id: 1, data: 123 },
|
||||
{ operation: 'done' }];
|
||||
testCursor(cursor, steps);
|
||||
},
|
||||
|
||||
function() {
|
||||
var cursor = gStore.sync(gRevisions[3]);
|
||||
var steps = [ { operation: 'update', id: 1, data: 123 },
|
||||
{ operation: 'remove', id: 3 },
|
||||
{ operation: 'done' }];
|
||||
testCursor(cursor, steps);
|
||||
},
|
||||
|
||||
function() {
|
||||
var cursor = gStore.sync(gRevisions[4]);
|
||||
var steps = [ { operation: 'remove', id: 3 },
|
||||
{ operation: 'done' }];
|
||||
testCursor(cursor, steps);
|
||||
},
|
||||
|
||||
function() {
|
||||
var cursor = gStore.sync(gRevisions[5]);
|
||||
var steps = [ { operation: 'done' }];
|
||||
testCursor(cursor, steps);
|
||||
},
|
||||
|
||||
// New events when the cursor is active
|
||||
function() {
|
||||
gCursor = gStore.sync();
|
||||
var steps = [ { operation: 'clear', },
|
||||
{ operation: 'add', id: 1, data: 123 },
|
||||
{ operation: 'add', id: 'foobar', data: 2 } ];
|
||||
testCursor(gCursor, steps);
|
||||
},
|
||||
|
||||
function() {
|
||||
gStore.add(42, 2).then(function(id) {
|
||||
ok(true, "Item: " + id + " added");
|
||||
gRevisions.push(gStore.revisionId);
|
||||
runTest();
|
||||
});
|
||||
},
|
||||
|
||||
function() {
|
||||
var steps = [ { operation: 'clear', },
|
||||
{ operation: 'add', id: 1, data: 123 },
|
||||
{ operation: 'add', id: 2, data: 42 },
|
||||
{ operation: 'add', id: 'foobar', data: 2 } ]
|
||||
testCursor(gCursor, steps);
|
||||
},
|
||||
|
||||
function() {
|
||||
gStore.put(43, 2).then(function(id) {
|
||||
gRevisions.push(gStore.revisionId);
|
||||
runTest();
|
||||
});
|
||||
},
|
||||
|
||||
function() {
|
||||
var steps = [ { operation: 'clear', },
|
||||
{ operation: 'add', id: 1, data: 123 },
|
||||
{ operation: 'add', id: 2, data: 43 },
|
||||
{ operation: 'add', id: 'foobar', data: 2 } ]
|
||||
testCursor(gCursor, steps);
|
||||
},
|
||||
|
||||
function() {
|
||||
gStore.remove(2).then(function(id) {
|
||||
gRevisions.push(gStore.revisionId);
|
||||
runTest();
|
||||
});
|
||||
},
|
||||
|
||||
function() {
|
||||
var steps = [ { operation: 'clear', },
|
||||
{ operation: 'add', id: 1, data: 123 },
|
||||
{ operation: 'add', id: 'foobar', data: 2 } ]
|
||||
testCursor(gCursor, steps);
|
||||
},
|
||||
|
||||
function() {
|
||||
gStore.add(42).then(function(id) {
|
||||
ok(true, "Item: " + id + " added");
|
||||
gRevisions.push(gStore.revisionId);
|
||||
runTest();
|
||||
});
|
||||
},
|
||||
|
||||
function() {
|
||||
var steps = [ { operation: 'clear', },
|
||||
{ operation: 'add', id: 1, data: 123 },
|
||||
{ operation: 'add', id: 4, data: 42 },
|
||||
{ operation: 'add', id: 'foobar', data: 2 } ]
|
||||
testCursor(gCursor, steps);
|
||||
},
|
||||
|
||||
function() {
|
||||
gStore.clear().then(function() {
|
||||
gRevisions.push(gStore.revisionId);
|
||||
runTest();
|
||||
});
|
||||
},
|
||||
|
||||
function() {
|
||||
var steps = [ { operation: 'clear' } ];
|
||||
testCursor(gCursor, steps);
|
||||
},
|
||||
|
||||
function() {
|
||||
gStore.add(42).then(function(id) {
|
||||
ok(true, "Item: " + id + " added");
|
||||
gRevisions.push(gStore.revisionId);
|
||||
runTest();
|
||||
});
|
||||
},
|
||||
|
||||
function() {
|
||||
var steps = [ { operation: 'clear', },
|
||||
{ operation: 'add', id: 5, data: 42 } ];
|
||||
testCursor(gCursor, steps);
|
||||
},
|
||||
|
||||
function() {
|
||||
gStore.clear().then(function() {
|
||||
gRevisions.push(gStore.revisionId);
|
||||
runTest();
|
||||
});
|
||||
},
|
||||
|
||||
function() {
|
||||
gStore.add(42).then(function(id) {
|
||||
ok(true, "Item: " + id + " added");
|
||||
gRevisions.push(gStore.revisionId);
|
||||
runTest();
|
||||
});
|
||||
},
|
||||
|
||||
function() {
|
||||
var steps = [ { operation: 'clear' },
|
||||
{ operation: 'add', id: 6, data: 42 },
|
||||
{ operation: 'done'} ];
|
||||
testCursor(gCursor, steps);
|
||||
},
|
||||
|
||||
function() {
|
||||
gExpectedEvents = true;
|
||||
gStore.add(42).then(function(id) {
|
||||
});
|
||||
}
|
||||
];
|
||||
|
||||
function runTest() {
|
||||
if (!tests.length) {
|
||||
finish();
|
||||
return;
|
||||
}
|
||||
|
||||
var test = tests.shift();
|
||||
test();
|
||||
}
|
||||
|
||||
runTest();
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user