зеркало из https://github.com/mozilla/gecko-dev.git
Merge latest green b2g-inbound changeset and mozilla-central; r=khuey to work around bug 1002652 comment 13
This commit is contained in:
Коммит
f080a62903
2
CLOBBER
2
CLOBBER
|
@ -22,4 +22,4 @@
|
||||||
# changes to stick? As of bug 928195, this shouldn't be necessary! Please
|
# changes to stick? As of bug 928195, this shouldn't be necessary! Please
|
||||||
# don't change CLOBBER for WebIDL changes any more.
|
# 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() {
|
rowheader: function rowheader() {
|
||||||
return this.objectOutputFunctions.cell.apply(this, arguments);
|
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) {
|
statictext: function statictext(aAccessible, aRoleStr, aState, aFlags) {
|
||||||
// Since we customize the list bullet's output, we add the static
|
// Since we customize the list bullet's output, we add the static
|
||||||
// text from the first node in each listitem, so skip it here.
|
// text from the first node in each listitem, so skip it here.
|
||||||
if (aAccessible.parent.role == Roles.LISTITEM) {
|
if (Utils.isListItemDecorator(aAccessible)) {
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,10 @@
|
||||||
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
* 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/. */
|
* You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||||
|
|
||||||
|
/* global PrefCache, Roles, Prefilters, States, Filters, Utils,
|
||||||
|
TraversalRules */
|
||||||
|
/* exported TraversalRules */
|
||||||
|
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
const Cc = Components.classes;
|
const Cc = Components.classes;
|
||||||
|
@ -9,17 +13,17 @@ const Ci = Components.interfaces;
|
||||||
const Cu = Components.utils;
|
const Cu = Components.utils;
|
||||||
const Cr = Components.results;
|
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/accessibility/Utils.jsm');
|
||||||
Cu.import('resource://gre/modules/XPCOMUtils.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');
|
'resource://gre/modules/accessibility/Constants.jsm');
|
||||||
XPCOMUtils.defineLazyModuleGetter(this, 'Filters',
|
XPCOMUtils.defineLazyModuleGetter(this, 'Filters', // jshint ignore:line
|
||||||
'resource://gre/modules/accessibility/Constants.jsm');
|
'resource://gre/modules/accessibility/Constants.jsm');
|
||||||
XPCOMUtils.defineLazyModuleGetter(this, 'States',
|
XPCOMUtils.defineLazyModuleGetter(this, 'States', // jshint ignore:line
|
||||||
'resource://gre/modules/accessibility/Constants.jsm');
|
'resource://gre/modules/accessibility/Constants.jsm');
|
||||||
XPCOMUtils.defineLazyModuleGetter(this, 'Prefilters',
|
XPCOMUtils.defineLazyModuleGetter(this, 'Prefilters', // jshint ignore:line
|
||||||
'resource://gre/modules/accessibility/Constants.jsm');
|
'resource://gre/modules/accessibility/Constants.jsm');
|
||||||
|
|
||||||
let gSkipEmptyImages = new PrefCache('accessibility.accessfu.skip_empty_images');
|
let gSkipEmptyImages = new PrefCache('accessibility.accessfu.skip_empty_images');
|
||||||
|
@ -30,7 +34,7 @@ function BaseTraversalRule(aRoles, aMatchFunc, aPreFilter) {
|
||||||
if (aRoles.indexOf(Roles.LABEL) < 0) {
|
if (aRoles.indexOf(Roles.LABEL) < 0) {
|
||||||
this._matchRoles.push(Roles.LABEL);
|
this._matchRoles.push(Roles.LABEL);
|
||||||
}
|
}
|
||||||
this._matchFunc = aMatchFunc || function (acc) { return Filters.MATCH; };
|
this._matchFunc = aMatchFunc || function() { return Filters.MATCH; };
|
||||||
this.preFilter = aPreFilter || gSimplePreFilter;
|
this.preFilter = aPreFilter || gSimplePreFilter;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -91,17 +95,28 @@ var gSimpleTraversalRoles =
|
||||||
Roles.SLIDER,
|
Roles.SLIDER,
|
||||||
Roles.SPINBUTTON,
|
Roles.SPINBUTTON,
|
||||||
Roles.OPTION,
|
Roles.OPTION,
|
||||||
|
Roles.LISTITEM,
|
||||||
// Used for traversing in to child OOP frames.
|
// Used for traversing in to child OOP frames.
|
||||||
Roles.INTERNAL_FRAME];
|
Roles.INTERNAL_FRAME];
|
||||||
|
|
||||||
var gSimpleMatchFunc = function gSimpleMatchFunc(aAccessible) {
|
var gSimpleMatchFunc = function gSimpleMatchFunc(aAccessible) {
|
||||||
function hasZeroOrSingleChildDescendants () {
|
// An object is simple, if it either has a single child lineage,
|
||||||
for (let acc = aAccessible; acc.childCount > 0; acc = acc.firstChild) {
|
// or has a flat subtree.
|
||||||
if (acc.childCount > 1) {
|
function isSingleLineage(acc) {
|
||||||
|
for (let child = acc; child; child = child.firstChild) {
|
||||||
|
if (child.childCount > 1) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function isFlatSubtree(acc) {
|
||||||
|
for (let child = acc.firstChild; child; child = child.nextSibling) {
|
||||||
|
if (child.childCount > 0) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -114,30 +129,28 @@ var gSimpleMatchFunc = function gSimpleMatchFunc(aAccessible) {
|
||||||
{
|
{
|
||||||
// Nameless text leaves are boring, skip them.
|
// Nameless text leaves are boring, skip them.
|
||||||
let name = aAccessible.name;
|
let name = aAccessible.name;
|
||||||
if (name && name.trim())
|
return (name && name.trim()) ? Filters.MATCH : Filters.IGNORE;
|
||||||
return Filters.MATCH;
|
|
||||||
else
|
|
||||||
return Filters.IGNORE;
|
|
||||||
}
|
}
|
||||||
case Roles.STATICTEXT:
|
case Roles.STATICTEXT:
|
||||||
{
|
// Ignore prefix static text in list items. They are typically bullets or numbers.
|
||||||
let parent = aAccessible.parent;
|
return Utils.isListItemDecorator(aAccessible) ?
|
||||||
// Ignore prefix static text in list items. They are typically bullets or numbers.
|
Filters.IGNORE : Filters.MATCH;
|
||||||
if (parent.childCount > 1 && aAccessible.indexInParent == 0 &&
|
|
||||||
parent.role == Roles.LISTITEM)
|
|
||||||
return Filters.IGNORE;
|
|
||||||
|
|
||||||
return Filters.MATCH;
|
|
||||||
}
|
|
||||||
case Roles.GRAPHIC:
|
case Roles.GRAPHIC:
|
||||||
return TraversalRules._shouldSkipImage(aAccessible);
|
return TraversalRules._shouldSkipImage(aAccessible);
|
||||||
case Roles.HEADER:
|
case Roles.HEADER:
|
||||||
case Roles.HEADING:
|
case Roles.HEADING:
|
||||||
if ((aAccessible.childCount > 0 || aAccessible.name) &&
|
if ((aAccessible.childCount > 0 || aAccessible.name) &&
|
||||||
hasZeroOrSingleChildDescendants()) {
|
(isSingleLineage(aAccessible) || isFlatSubtree(aAccessible))) {
|
||||||
return Filters.MATCH | Filters.IGNORE_SUBTREE;
|
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:
|
default:
|
||||||
// Ignore the subtree, if there is one. So that we don't land on
|
// 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.ARIA_HIDDEN |
|
||||||
Prefilters.TRANSPARENT;
|
Prefilters.TRANSPARENT;
|
||||||
|
|
||||||
this.TraversalRules = {
|
this.TraversalRules = { // jshint ignore:line
|
||||||
Simple: new BaseTraversalRule(gSimpleTraversalRoles, gSimpleMatchFunc),
|
Simple: new BaseTraversalRule(gSimpleTraversalRoles, gSimpleMatchFunc),
|
||||||
|
|
||||||
SimpleOnScreen: new BaseTraversalRule(
|
SimpleOnScreen: new BaseTraversalRule(
|
||||||
|
|
|
@ -343,6 +343,17 @@ this.Utils = {
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
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"],
|
||||||
["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",
|
accOrElmOrID: "cell",
|
||||||
expectedUtterance: [[
|
expectedUtterance: [[
|
||||||
|
@ -339,8 +350,13 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=753984
|
||||||
["I am pressed!", "pressed toggle button"]],
|
["I am pressed!", "pressed toggle button"]],
|
||||||
expectedBraille: [["(x)", "I am pressed!"],
|
expectedBraille: [["(x)", "I am pressed!"],
|
||||||
["I am pressed!", "(x)"]]
|
["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.
|
// Test all possible utterance order preference values.
|
||||||
tests.forEach(function run(test) {
|
tests.forEach(function run(test) {
|
||||||
|
@ -402,6 +418,9 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=753984
|
||||||
<ol id="list">
|
<ol id="list">
|
||||||
<li id="li_one">list one</li>
|
<li id="li_one">list one</li>
|
||||||
</ol>
|
</ol>
|
||||||
|
<ul id="unorderd_list">
|
||||||
|
<li id="li_two">list two</li>
|
||||||
|
</ul>
|
||||||
<dl id="dlist">
|
<dl id="dlist">
|
||||||
<dd id="dd_one">
|
<dd id="dd_one">
|
||||||
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>
|
<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_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>
|
<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>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -111,8 +111,8 @@
|
||||||
'A esoteric weapon wielded by only the most ' +
|
'A esoteric weapon wielded by only the most ' +
|
||||||
'formidable warriors, for its unrelenting strict' +
|
'formidable warriors, for its unrelenting strict' +
|
||||||
' power is unfathomable.',
|
' power is unfathomable.',
|
||||||
'Lists of Programming Languages', 'Lisp ',
|
'• Lists of Programming Languages', 'Lisp ',
|
||||||
'Scheme', 'Racket', 'Clojure', 'JavaScript', 'heading-5',
|
'1. Scheme', '2. Racket', '3. Clojure', '• JavaScript', 'heading-5',
|
||||||
'image-2', 'image-3', 'Not actually an image',
|
'image-2', 'image-3', 'Not actually an image',
|
||||||
'link-1', 'anchor-1', 'link-2', 'anchor-2', 'link-3',
|
'link-1', 'anchor-1', 'link-2', 'anchor-2', 'link-3',
|
||||||
'3', '1', '4', '1', 'Just an innocuous separator',
|
'3', '1', '4', '1', 'Just an innocuous separator',
|
||||||
|
|
|
@ -233,6 +233,9 @@ SocialUI = {
|
||||||
if (provider.sidebarURL) {
|
if (provider.sidebarURL) {
|
||||||
SocialSidebar.show(provider.origin);
|
SocialSidebar.show(provider.origin);
|
||||||
}
|
}
|
||||||
|
if (provider.postActivationURL) {
|
||||||
|
openUILinkIn(provider.postActivationURL, "tab");
|
||||||
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
|
@ -17,6 +17,7 @@ support-files =
|
||||||
social_flyout.html
|
social_flyout.html
|
||||||
social_mark.html
|
social_mark.html
|
||||||
social_panel.html
|
social_panel.html
|
||||||
|
social_postActivation.html
|
||||||
social_sidebar.html
|
social_sidebar.html
|
||||||
social_sidebar_empty.html
|
social_sidebar_empty.html
|
||||||
social_window.html
|
social_window.html
|
||||||
|
|
|
@ -90,9 +90,12 @@ function waitForProviderLoad(cb) {
|
||||||
waitForCondition(function() {
|
waitForCondition(function() {
|
||||||
let sbrowser = document.getElementById("social-sidebar-browser");
|
let sbrowser = document.getElementById("social-sidebar-browser");
|
||||||
let provider = SocialSidebar.provider;
|
let provider = SocialSidebar.provider;
|
||||||
|
let postActivation = provider && gBrowser.contentDocument.location.href == provider.origin + "/browser/browser/base/content/test/social/social_postActivation.html";
|
||||||
|
|
||||||
return provider &&
|
return provider &&
|
||||||
provider.profile &&
|
provider.profile &&
|
||||||
provider.profile.displayName &&
|
provider.profile.displayName &&
|
||||||
|
postActivation &&
|
||||||
sbrowser.docShellIsActive;
|
sbrowser.docShellIsActive;
|
||||||
}, function() {
|
}, function() {
|
||||||
// executeSoon to let the browser UI observers run first
|
// executeSoon to let the browser UI observers run first
|
||||||
|
@ -290,6 +293,9 @@ var tests = {
|
||||||
let prefname = addBuiltinManifest(gProviders[0]);
|
let prefname = addBuiltinManifest(gProviders[0]);
|
||||||
activateOneProvider(gProviders[0], true, function() {
|
activateOneProvider(gProviders[0], true, function() {
|
||||||
info("first activation completed");
|
info("first activation completed");
|
||||||
|
is(gBrowser.contentDocument.location.href, gProviders[0].origin + "/browser/browser/base/content/test/social/social_postActivation.html");
|
||||||
|
gBrowser.removeTab(gBrowser.selectedTab);
|
||||||
|
is(gBrowser.contentDocument.location.href, gProviders[0].origin + "/browser/browser/base/content/test/social/social_activate.html");
|
||||||
gBrowser.removeTab(gBrowser.selectedTab);
|
gBrowser.removeTab(gBrowser.selectedTab);
|
||||||
tabsToRemove.pop();
|
tabsToRemove.pop();
|
||||||
// uninstall the provider
|
// uninstall the provider
|
||||||
|
@ -297,6 +303,8 @@ var tests = {
|
||||||
checkSocialUI();
|
checkSocialUI();
|
||||||
activateOneProvider(gProviders[0], true, function() {
|
activateOneProvider(gProviders[0], true, function() {
|
||||||
info("second activation completed");
|
info("second activation completed");
|
||||||
|
is(gBrowser.contentDocument.location.href, gProviders[0].origin + "/browser/browser/base/content/test/social/social_postActivation.html");
|
||||||
|
gBrowser.removeTab(gBrowser.selectedTab);
|
||||||
|
|
||||||
// after closing the addons tab, verify provider is still installed
|
// after closing the addons tab, verify provider is still installed
|
||||||
gBrowser.tabContainer.addEventListener("TabClose", function onTabClose() {
|
gBrowser.tabContainer.addEventListener("TabClose", function onTabClose() {
|
||||||
|
|
|
@ -15,6 +15,7 @@ var data = {
|
||||||
"sidebarURL": "/browser/browser/base/content/test/social/social_sidebar.html",
|
"sidebarURL": "/browser/browser/base/content/test/social/social_sidebar.html",
|
||||||
"workerURL": "/browser/browser/base/content/test/social/social_worker.js",
|
"workerURL": "/browser/browser/base/content/test/social/social_worker.js",
|
||||||
"statusURL": "/browser/browser/base/content/test/social/social_panel.html",
|
"statusURL": "/browser/browser/base/content/test/social/social_panel.html",
|
||||||
|
"postActivationURL": "/browser/browser/base/content/test/social/social_postActivation.html",
|
||||||
|
|
||||||
// should be available for display purposes
|
// should be available for display purposes
|
||||||
"description": "A short paragraph about this provider",
|
"description": "A short paragraph about this provider",
|
||||||
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Post-Activation test</title>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
|
||||||
|
Post Activation landing page
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -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) {
|
onWidgetAfterDOMChange: function(aNode, aNextNode, aContainer, aWasRemoval) {
|
||||||
if (aContainer != this.contents) {
|
if (aContainer != this.contents) {
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -114,7 +114,6 @@ function fillSubviewFromMenuItems(aMenuItems, aSubview) {
|
||||||
subviewItem = doc.createElementNS(kNSXUL, "menuseparator");
|
subviewItem = doc.createElementNS(kNSXUL, "menuseparator");
|
||||||
} else if (menuChild.localName == "menuitem") {
|
} else if (menuChild.localName == "menuitem") {
|
||||||
subviewItem = doc.createElementNS(kNSXUL, "toolbarbutton");
|
subviewItem = doc.createElementNS(kNSXUL, "toolbarbutton");
|
||||||
subviewItem.setAttribute("class", "subviewbutton");
|
|
||||||
addShortcut(menuChild, doc, subviewItem);
|
addShortcut(menuChild, doc, subviewItem);
|
||||||
} else {
|
} else {
|
||||||
continue;
|
continue;
|
||||||
|
@ -124,6 +123,10 @@ function fillSubviewFromMenuItems(aMenuItems, aSubview) {
|
||||||
if (attrVal)
|
if (attrVal)
|
||||||
subviewItem.setAttribute(attr, attrVal);
|
subviewItem.setAttribute(attr, attrVal);
|
||||||
}
|
}
|
||||||
|
// We do this after so the .subviewbutton class doesn't get overriden.
|
||||||
|
if (menuChild.localName == "menuitem") {
|
||||||
|
subviewItem.classList.add("subviewbutton");
|
||||||
|
}
|
||||||
fragment.appendChild(subviewItem);
|
fragment.appendChild(subviewItem);
|
||||||
}
|
}
|
||||||
aSubview.appendChild(fragment);
|
aSubview.appendChild(fragment);
|
||||||
|
|
|
@ -99,6 +99,7 @@ skip-if = os == "linux"
|
||||||
|
|
||||||
[browser_985815_propagate_setToolbarVisibility.js]
|
[browser_985815_propagate_setToolbarVisibility.js]
|
||||||
[browser_981305_separator_insertion.js]
|
[browser_981305_separator_insertion.js]
|
||||||
|
[browser_989751_subviewbutton_class.js]
|
||||||
[browser_987177_destroyWidget_xul.js]
|
[browser_987177_destroyWidget_xul.js]
|
||||||
[browser_987177_xul_wrapper_updating.js]
|
[browser_987177_xul_wrapper_updating.js]
|
||||||
[browser_987492_window_api.js]
|
[browser_987492_window_api.js]
|
||||||
|
|
|
@ -0,0 +1,62 @@
|
||||||
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
const kCustomClass = "acustomclassnoonewilluse";
|
||||||
|
let tempElement = null;
|
||||||
|
|
||||||
|
function insertClassNameToMenuChildren(parentMenu) {
|
||||||
|
let el = parentMenu.querySelector("menuitem:first-of-type");
|
||||||
|
el.classList.add(kCustomClass);
|
||||||
|
tempElement = el;
|
||||||
|
}
|
||||||
|
|
||||||
|
function checkSubviewButtonClass(menuId, buttonId, subviewId) {
|
||||||
|
return function() {
|
||||||
|
info("Checking for items without the subviewbutton class in " + buttonId + " widget");
|
||||||
|
let menu = document.getElementById(menuId);
|
||||||
|
insertClassNameToMenuChildren(menu);
|
||||||
|
|
||||||
|
let placement = CustomizableUI.getPlacementOfWidget(buttonId);
|
||||||
|
let changedPlacement = false;
|
||||||
|
if (!placement || placement.area != CustomizableUI.AREA_PANEL) {
|
||||||
|
CustomizableUI.addWidgetToArea(buttonId, CustomizableUI.AREA_PANEL);
|
||||||
|
changedPlacement = true;
|
||||||
|
}
|
||||||
|
yield PanelUI.show();
|
||||||
|
|
||||||
|
let button = document.getElementById(buttonId);
|
||||||
|
button.click();
|
||||||
|
|
||||||
|
yield waitForCondition(() => !PanelUI.multiView.hasAttribute("transitioning"));
|
||||||
|
let subview = document.getElementById(subviewId);
|
||||||
|
ok(subview.firstChild, "Subview should have a kid");
|
||||||
|
let subviewchildren = subview.querySelectorAll("toolbarbutton");
|
||||||
|
for (let i = 0; i < subviewchildren.length; i++) {
|
||||||
|
let item = subviewchildren[i];
|
||||||
|
let itemReadable = "Item '" + item.label + "' (classes: " + item.className + ")";
|
||||||
|
ok(item.classList.contains("subviewbutton"), itemReadable + " should have the subviewbutton class.");
|
||||||
|
if (i == 0) {
|
||||||
|
ok(item.classList.contains(kCustomClass), itemReadable + " should still have its own class, too.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let panelHiddenPromise = promisePanelHidden(window);
|
||||||
|
PanelUI.hide();
|
||||||
|
yield panelHiddenPromise;
|
||||||
|
|
||||||
|
if (changedPlacement) {
|
||||||
|
CustomizableUI.reset();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
add_task(checkSubviewButtonClass("menuWebDeveloperPopup", "developer-button", "PanelUI-developerItems"));
|
||||||
|
add_task(checkSubviewButtonClass("viewSidebarMenu", "sidebar-button", "PanelUI-sidebarItems"));
|
||||||
|
|
||||||
|
registerCleanupFunction(function() {
|
||||||
|
tempElement.classList.remove(kCustomClass)
|
||||||
|
tempElement = null;
|
||||||
|
});
|
|
@ -4316,6 +4316,12 @@ window > chatbox {
|
||||||
border-bottom-width: 0;
|
border-bottom-width: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Compensate for the border set above for this horizontal line. */
|
||||||
|
#main-window[customize-entered] #navigator-toolbox::after {
|
||||||
|
margin-left: 3px;
|
||||||
|
margin-right: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
#main-window[customize-entered] #TabsToolbar {
|
#main-window[customize-entered] #TabsToolbar {
|
||||||
background-clip: padding-box;
|
background-clip: padding-box;
|
||||||
border-right: 3px solid transparent;
|
border-right: 3px solid transparent;
|
||||||
|
|
|
@ -181,11 +181,12 @@ EOF
|
||||||
fi
|
fi
|
||||||
|
|
||||||
changequote([, ])
|
changequote([, ])
|
||||||
|
|
||||||
|
chmod +x $CONFIG_STATUS
|
||||||
])
|
])
|
||||||
|
|
||||||
define([MOZ_RUN_CONFIG_STATUS],
|
define([MOZ_RUN_CONFIG_STATUS],
|
||||||
[
|
[
|
||||||
chmod +x $CONFIG_STATUS
|
|
||||||
rm -fr confdefs* $ac_clean_files
|
rm -fr confdefs* $ac_clean_files
|
||||||
dnl Execute config.status, unless --no-create was passed to configure.
|
dnl Execute config.status, unless --no-create was passed to configure.
|
||||||
if test "$no_create" != yes && ! ${PYTHON} $CONFIG_STATUS; then
|
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_TRANSLITERATION"
|
||||||
ICU_CPPFLAGS="$ICU_CPPFLAGS -DUCONFIG_NO_REGULAR_EXPRESSIONS"
|
ICU_CPPFLAGS="$ICU_CPPFLAGS -DUCONFIG_NO_REGULAR_EXPRESSIONS"
|
||||||
ICU_CPPFLAGS="$ICU_CPPFLAGS -DUCONFIG_NO_BREAK_ITERATION"
|
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
|
# make sure to not accidentally pick up system-icu headers
|
||||||
ICU_CPPFLAGS="$ICU_CPPFLAGS -I$icudir/common -I$icudir/i18n"
|
ICU_CPPFLAGS="$ICU_CPPFLAGS -I$icudir/common -I$icudir/i18n"
|
||||||
|
|
||||||
|
|
|
@ -99,11 +99,10 @@ nsSecurityNameSet::InitializeNameSet(nsIScriptContext* aScriptContext)
|
||||||
securityObj = &v.toObject();
|
securityObj = &v.toObject();
|
||||||
} else {
|
} else {
|
||||||
/* define netscape.security object */
|
/* define netscape.security object */
|
||||||
obj = JS_DefineObject(cx, global, "netscape", objectClass, nullptr, 0);
|
obj = JS_DefineObject(cx, global, "netscape", objectClass);
|
||||||
if (obj == nullptr)
|
if (obj == nullptr)
|
||||||
return NS_ERROR_FAILURE;
|
return NS_ERROR_FAILURE;
|
||||||
securityObj = JS_DefineObject(cx, obj, "security", objectClass,
|
securityObj = JS_DefineObject(cx, obj, "security", objectClass);
|
||||||
nullptr, 0);
|
|
||||||
if (securityObj == nullptr)
|
if (securityObj == nullptr)
|
||||||
return NS_ERROR_FAILURE;
|
return NS_ERROR_FAILURE;
|
||||||
}
|
}
|
||||||
|
@ -118,8 +117,7 @@ nsSecurityNameSet::InitializeNameSet(nsIScriptContext* aScriptContext)
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
|
|
||||||
/* Define PrivilegeManager object with the necessary "static" methods. */
|
/* Define PrivilegeManager object with the necessary "static" methods. */
|
||||||
obj = JS_DefineObject(cx, securityObj, "PrivilegeManager", objectClass,
|
obj = JS_DefineObject(cx, securityObj, "PrivilegeManager", objectClass);
|
||||||
nullptr, 0);
|
|
||||||
if (obj == nullptr)
|
if (obj == nullptr)
|
||||||
return NS_ERROR_FAILURE;
|
return NS_ERROR_FAILURE;
|
||||||
|
|
||||||
|
|
143
configure.in
143
configure.in
|
@ -2548,114 +2548,17 @@ dnl Check for .hidden assembler directive and visibility attribute.
|
||||||
dnl Borrowed from glibc configure.in
|
dnl Borrowed from glibc configure.in
|
||||||
dnl ===============================================================
|
dnl ===============================================================
|
||||||
if test "$GNU_CC"; then
|
if test "$GNU_CC"; then
|
||||||
AC_CACHE_CHECK(for visibility(hidden) attribute,
|
AC_DEFINE(HAVE_VISIBILITY_HIDDEN_ATTRIBUTE)
|
||||||
ac_cv_visibility_hidden,
|
AC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE)
|
||||||
[cat > conftest.c <<EOF
|
case "${OS_TARGET}" in
|
||||||
int foo __attribute__ ((visibility ("hidden"))) = 1;
|
Darwin|Android)
|
||||||
EOF
|
VISIBILITY_FLAGS='-fvisibility=hidden'
|
||||||
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
|
VISIBILITY_FLAGS='-I$(DIST)/system_wrappers -include $(topsrcdir)/config/gcc_hidden.h'
|
||||||
ac_cv_visibility_hidden=yes
|
WRAP_SYSTEM_INCLUDES=1
|
||||||
fi
|
;;
|
||||||
fi
|
esac
|
||||||
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
|
|
||||||
fi # GNU_CC
|
fi # GNU_CC
|
||||||
|
|
||||||
# visibility hidden flag for Sun Studio on Solaris
|
# visibility hidden flag for Sun Studio on Solaris
|
||||||
|
@ -2663,6 +2566,15 @@ if test "$SOLARIS_SUNPRO_CC"; then
|
||||||
VISIBILITY_FLAGS='-xldscope=hidden'
|
VISIBILITY_FLAGS='-xldscope=hidden'
|
||||||
fi # Sun Studio on Solaris
|
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(WRAP_SYSTEM_INCLUDES)
|
||||||
AC_SUBST(VISIBILITY_FLAGS)
|
AC_SUBST(VISIBILITY_FLAGS)
|
||||||
|
|
||||||
|
@ -3975,6 +3887,7 @@ LIBJPEG_TURBO_ASFLAGS=
|
||||||
LIBJPEG_TURBO_X86_ASM=
|
LIBJPEG_TURBO_X86_ASM=
|
||||||
LIBJPEG_TURBO_X64_ASM=
|
LIBJPEG_TURBO_X64_ASM=
|
||||||
LIBJPEG_TURBO_ARM_ASM=
|
LIBJPEG_TURBO_ARM_ASM=
|
||||||
|
MOZ_LOOP=$NIGHTLY_BUILD
|
||||||
MOZ_PERMISSIONS=1
|
MOZ_PERMISSIONS=1
|
||||||
MOZ_PLACES=1
|
MOZ_PLACES=1
|
||||||
MOZ_SOCIAL=1
|
MOZ_SOCIAL=1
|
||||||
|
@ -5954,6 +5867,11 @@ case "$OS_TARGET" in
|
||||||
Darwin|WINNT|Linux)
|
Darwin|WINNT|Linux)
|
||||||
MOZ_GAMEPAD=1
|
MOZ_GAMEPAD=1
|
||||||
;;
|
;;
|
||||||
|
Android)
|
||||||
|
if test "$MOZ_WIDGET_TOOLKIT" != "gonk"; then
|
||||||
|
MOZ_GAMEPAD=1
|
||||||
|
fi
|
||||||
|
;;
|
||||||
*)
|
*)
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
@ -5978,6 +5896,9 @@ if test "$MOZ_GAMEPAD"; then
|
||||||
fi
|
fi
|
||||||
MOZ_GAMEPAD_BACKEND=linux
|
MOZ_GAMEPAD_BACKEND=linux
|
||||||
;;
|
;;
|
||||||
|
Android)
|
||||||
|
MOZ_GAMEPAD_BACKEND=android
|
||||||
|
;;
|
||||||
*)
|
*)
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
@ -8377,6 +8298,12 @@ if test "$BUILD_CTYPES"; then
|
||||||
AC_DEFINE(BUILD_CTYPES)
|
AC_DEFINE(BUILD_CTYPES)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
dnl Build Loop if required
|
||||||
|
AC_SUBST(MOZ_LOOP)
|
||||||
|
if test "$MOZ_LOOP"; then
|
||||||
|
AC_DEFINE(MOZ_LOOP)
|
||||||
|
fi
|
||||||
|
|
||||||
dnl Build Places if required
|
dnl Build Places if required
|
||||||
if test "$MOZ_PLACES"; then
|
if test "$MOZ_PLACES"; then
|
||||||
AC_DEFINE(MOZ_PLACES)
|
AC_DEFINE(MOZ_PLACES)
|
||||||
|
|
|
@ -23,7 +23,7 @@ NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(DOMImplementation)
|
||||||
NS_INTERFACE_MAP_ENTRY(nsISupports)
|
NS_INTERFACE_MAP_ENTRY(nsISupports)
|
||||||
NS_INTERFACE_MAP_END
|
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_ADDREF(DOMImplementation)
|
||||||
NS_IMPL_CYCLE_COLLECTING_RELEASE(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_ENTRY(nsISupportsWeakReference)
|
||||||
NS_INTERFACE_MAP_END
|
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_ADDREF(DOMParser)
|
||||||
NS_IMPL_CYCLE_COLLECTING_RELEASE(DOMParser)
|
NS_IMPL_CYCLE_COLLECTING_RELEASE(DOMParser)
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
using namespace mozilla;
|
using namespace mozilla;
|
||||||
using namespace mozilla::dom;
|
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_ROOT_NATIVE(DOMPoint, AddRef)
|
||||||
NS_IMPL_CYCLE_COLLECTION_UNROOT_NATIVE(DOMPoint, Release)
|
NS_IMPL_CYCLE_COLLECTION_UNROOT_NATIVE(DOMPoint, Release)
|
||||||
|
|
|
@ -14,8 +14,8 @@ using namespace mozilla;
|
||||||
using namespace mozilla::dom;
|
using namespace mozilla::dom;
|
||||||
using namespace mozilla::gfx;
|
using namespace mozilla::gfx;
|
||||||
|
|
||||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_6(DOMQuad, mParent, mBounds, mPoints[0],
|
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(DOMQuad, mParent, mBounds, mPoints[0],
|
||||||
mPoints[1], mPoints[2], mPoints[3])
|
mPoints[1], mPoints[2], mPoints[3])
|
||||||
|
|
||||||
NS_IMPL_CYCLE_COLLECTION_ROOT_NATIVE(DOMQuad, AddRef)
|
NS_IMPL_CYCLE_COLLECTION_ROOT_NATIVE(DOMQuad, AddRef)
|
||||||
NS_IMPL_CYCLE_COLLECTION_UNROOT_NATIVE(DOMQuad, Release)
|
NS_IMPL_CYCLE_COLLECTION_UNROOT_NATIVE(DOMQuad, Release)
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
using namespace mozilla;
|
using namespace mozilla;
|
||||||
using namespace mozilla::dom;
|
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_ADDREF(DOMRectReadOnly)
|
||||||
NS_IMPL_CYCLE_COLLECTING_RELEASE(DOMRectReadOnly)
|
NS_IMPL_CYCLE_COLLECTING_RELEASE(DOMRectReadOnly)
|
||||||
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(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_INTERFACE_TABLE_HEAD(DOMRectList)
|
||||||
NS_WRAPPERCACHE_INTERFACE_MAP_ENTRY
|
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;
|
return aPerm != nsIPermissionManager::ALLOW_ACTION;
|
||||||
}
|
}
|
||||||
|
|
||||||
nsCOMPtr<nsIPermissionManager> permMgr =
|
nsCOMPtr<nsIPermissionManager> permMgr = services::GetPermissionManager();
|
||||||
do_GetService("@mozilla.org/permissionmanager;1");
|
|
||||||
NS_ENSURE_TRUE(permMgr, false);
|
NS_ENSURE_TRUE(permMgr, false);
|
||||||
|
|
||||||
uint32_t perm;
|
uint32_t perm;
|
||||||
|
|
|
@ -62,8 +62,8 @@ nsDOMCaretPosition::WrapObject(JSContext *aCx)
|
||||||
return mozilla::dom::CaretPositionBinding::Wrap(aCx, this);
|
return mozilla::dom::CaretPositionBinding::Wrap(aCx, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_2(nsDOMCaretPosition,
|
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(nsDOMCaretPosition,
|
||||||
mOffsetNode, mAnonymousContentNode)
|
mOffsetNode, mAnonymousContentNode)
|
||||||
|
|
||||||
NS_IMPL_CYCLE_COLLECTING_ADDREF(nsDOMCaretPosition)
|
NS_IMPL_CYCLE_COLLECTING_ADDREF(nsDOMCaretPosition)
|
||||||
NS_IMPL_CYCLE_COLLECTING_RELEASE(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_ADDREF(nsDOMMutationRecord)
|
||||||
NS_IMPL_CYCLE_COLLECTING_RELEASE(nsDOMMutationRecord)
|
NS_IMPL_CYCLE_COLLECTING_RELEASE(nsDOMMutationRecord)
|
||||||
|
|
||||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_7(nsDOMMutationRecord,
|
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(nsDOMMutationRecord,
|
||||||
mTarget,
|
mTarget,
|
||||||
mPreviousSibling, mNextSibling,
|
mPreviousSibling, mNextSibling,
|
||||||
mAddedNodes, mRemovedNodes,
|
mAddedNodes, mRemovedNodes,
|
||||||
mNext, mOwner)
|
mNext, mOwner)
|
||||||
|
|
||||||
// Observer
|
// Observer
|
||||||
|
|
||||||
|
|
|
@ -32,7 +32,7 @@ NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsDOMSerializer)
|
||||||
NS_INTERFACE_MAP_ENTRY(nsIDOMSerializer)
|
NS_INTERFACE_MAP_ENTRY(nsIDOMSerializer)
|
||||||
NS_INTERFACE_MAP_END
|
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_ADDREF(nsDOMSerializer)
|
||||||
NS_IMPL_CYCLE_COLLECTING_RELEASE(nsDOMSerializer)
|
NS_IMPL_CYCLE_COLLECTING_RELEASE(nsDOMSerializer)
|
||||||
|
|
|
@ -29,7 +29,7 @@ nsDOMTokenList::nsDOMTokenList(Element* aElement, nsIAtom* aAttrAtom)
|
||||||
|
|
||||||
nsDOMTokenList::~nsDOMTokenList() { }
|
nsDOMTokenList::~nsDOMTokenList() { }
|
||||||
|
|
||||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_1(nsDOMTokenList, mElement)
|
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(nsDOMTokenList, mElement)
|
||||||
|
|
||||||
NS_INTERFACE_MAP_BEGIN(nsDOMTokenList)
|
NS_INTERFACE_MAP_BEGIN(nsDOMTokenList)
|
||||||
NS_WRAPPERCACHE_INTERFACE_MAP_ENTRY
|
NS_WRAPPERCACHE_INTERFACE_MAP_ENTRY
|
||||||
|
|
|
@ -12155,10 +12155,11 @@ nsIDocument::WrapObject(JSContext *aCx)
|
||||||
|
|
||||||
NS_NAMED_LITERAL_STRING(doc_str, "document");
|
NS_NAMED_LITERAL_STRING(doc_str, "document");
|
||||||
|
|
||||||
if (!JS_DefineUCProperty(aCx, winVal.toObjectOrNull(), doc_str.get(),
|
JS::Rooted<JSObject*> winObj(aCx, &winVal.toObject());
|
||||||
doc_str.Length(), JS::ObjectValue(*obj),
|
if (!JS_DefineUCProperty(aCx, winObj, doc_str.get(),
|
||||||
JS_PropertyStub, JS_StrictPropertyStub,
|
doc_str.Length(), obj,
|
||||||
JSPROP_READONLY | JSPROP_ENUMERATE)) {
|
JSPROP_READONLY | JSPROP_ENUMERATE,
|
||||||
|
JS_PropertyStub, JS_StrictPropertyStub)) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -22,7 +22,7 @@ nsFormData::nsFormData(nsISupports* aOwner)
|
||||||
// -------------------------------------------------------------------------
|
// -------------------------------------------------------------------------
|
||||||
// nsISupports
|
// 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_ADDREF(nsFormData)
|
||||||
NS_IMPL_CYCLE_COLLECTING_RELEASE(nsFormData)
|
NS_IMPL_CYCLE_COLLECTING_RELEASE(nsFormData)
|
||||||
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsFormData)
|
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsFormData)
|
||||||
|
|
|
@ -2616,7 +2616,7 @@ nsFrameLoader::ResetPermissionManagerStatus()
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
nsCOMPtr<nsIPermissionManager> permMgr = do_GetService(NS_PERMISSIONMANAGER_CONTRACTID);
|
nsCOMPtr<nsIPermissionManager> permMgr = services::GetPermissionManager();
|
||||||
if (!permMgr) {
|
if (!permMgr) {
|
||||||
NS_ERROR("No PermissionManager available!");
|
NS_ERROR("No PermissionManager available!");
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -24,6 +24,7 @@
|
||||||
#include "nsPluginHost.h"
|
#include "nsPluginHost.h"
|
||||||
#include "nsPluginInstanceOwner.h"
|
#include "nsPluginInstanceOwner.h"
|
||||||
#include "nsJSNPRuntime.h"
|
#include "nsJSNPRuntime.h"
|
||||||
|
#include "nsINestedURI.h"
|
||||||
#include "nsIPresShell.h"
|
#include "nsIPresShell.h"
|
||||||
#include "nsIScriptGlobalObject.h"
|
#include "nsIScriptGlobalObject.h"
|
||||||
#include "nsScriptSecurityManager.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
|
// If we're a plugin but shouldn't start yet, load fallback with
|
||||||
// reason click-to-play instead. Items resolved as Image/Document
|
// reason click-to-play instead. Items resolved as Image/Document
|
||||||
// will not be checked for previews, as well as invalid plugins
|
// 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);
|
NS_ENSURE_SUCCESS(rv, false);
|
||||||
nsCOMPtr<nsIDocument> topDoc = do_QueryInterface(topDocument);
|
nsCOMPtr<nsIDocument> topDoc = do_QueryInterface(topDocument);
|
||||||
|
|
||||||
nsCOMPtr<nsIPermissionManager> permissionManager = do_GetService(NS_PERMISSIONMANAGER_CONTRACTID, &rv);
|
nsCOMPtr<nsIPermissionManager> permissionManager = services::GetPermissionManager();
|
||||||
NS_ENSURE_SUCCESS(rv, false);
|
NS_ENSURE_TRUE(permissionManager, false);
|
||||||
|
|
||||||
// For now we always say that the system principal uses click-to-play since
|
// 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.
|
// 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<nsIPrincipal> principal = doc->NodePrincipal();
|
||||||
nsCOMPtr<nsIPermissionManager> permMgr =
|
nsCOMPtr<nsIPermissionManager> permMgr =
|
||||||
do_GetService(NS_PERMISSIONMANAGER_CONTRACTID);
|
services::GetPermissionManager();
|
||||||
if (!permMgr)
|
if (!permMgr)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
|
@ -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.html
|
||||||
file_bug902350_frame.html
|
file_bug902350_frame.html
|
||||||
file_bug907892.html
|
file_bug907892.html
|
||||||
|
file_general_document.html
|
||||||
file_html_in_xhr.html
|
file_html_in_xhr.html
|
||||||
file_html_in_xhr.sjs
|
file_html_in_xhr.sjs
|
||||||
file_html_in_xhr2.html
|
file_html_in_xhr2.html
|
||||||
|
@ -604,6 +605,7 @@ skip-if = toolkit == 'android' || e10s #RANDOM
|
||||||
[test_title.html]
|
[test_title.html]
|
||||||
[test_treewalker_nextsibling.xml]
|
[test_treewalker_nextsibling.xml]
|
||||||
[test_viewport_scroll.html]
|
[test_viewport_scroll.html]
|
||||||
|
[test_viewsource_forbidden_in_object.html]
|
||||||
[test_w3element_traversal.html]
|
[test_w3element_traversal.html]
|
||||||
[test_w3element_traversal.xhtml]
|
[test_w3element_traversal.xhtml]
|
||||||
[test_w3element_traversal_svg.html]
|
[test_w3element_traversal_svg.html]
|
||||||
|
|
|
@ -39,8 +39,8 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=682592
|
||||||
*/
|
*/
|
||||||
|
|
||||||
SimpleTest.waitForExplicitFinish();
|
SimpleTest.waitForExplicitFinish();
|
||||||
if (navigator.platform.startsWith("Linux arm")) {
|
if (navigator.platform.startsWith("Linux arm")) { /* bugs 982875, 999429 */
|
||||||
SimpleTest.expectAssertions(0, 2);
|
SimpleTest.expectAssertions(0, 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
var refFrame = document.getElementById("iframe-ref")
|
var refFrame = document.getElementById("iframe-ref")
|
||||||
|
|
|
@ -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_ROOT_NATIVE(CanvasGradient, AddRef)
|
||||||
NS_IMPL_CYCLE_COLLECTION_UNROOT_NATIVE(CanvasGradient, Release)
|
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_ROOT_NATIVE(CanvasPattern, AddRef)
|
||||||
NS_IMPL_CYCLE_COLLECTION_UNROOT_NATIVE(CanvasPattern, Release)
|
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 {
|
class CanvasRenderingContext2DUserData : public LayerUserData {
|
||||||
public:
|
public:
|
||||||
|
|
|
@ -956,7 +956,7 @@ WebGLContext::MozGetUnderlyingParamString(uint32_t pname, nsAString& retval)
|
||||||
void
|
void
|
||||||
WebGLContext::ClearScreen()
|
WebGLContext::ClearScreen()
|
||||||
{
|
{
|
||||||
bool colorAttachmentsMask[WebGLContext::sMaxColorAttachments] = {false};
|
bool colorAttachmentsMask[WebGLContext::kMaxColorAttachments] = {false};
|
||||||
|
|
||||||
MakeContextCurrent();
|
MakeContextCurrent();
|
||||||
ScopedBindFramebuffer autoFB(gl, 0);
|
ScopedBindFramebuffer autoFB(gl, 0);
|
||||||
|
@ -986,7 +986,7 @@ static bool IsShadowCorrect(float shadow, float actual) {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void
|
void
|
||||||
WebGLContext::ForceClearFramebufferWithDefaultValues(GLbitfield mask, const bool colorAttachmentsMask[sMaxColorAttachments])
|
WebGLContext::ForceClearFramebufferWithDefaultValues(GLbitfield mask, const bool colorAttachmentsMask[kMaxColorAttachments])
|
||||||
{
|
{
|
||||||
MakeContextCurrent();
|
MakeContextCurrent();
|
||||||
|
|
||||||
|
@ -995,7 +995,7 @@ WebGLContext::ForceClearFramebufferWithDefaultValues(GLbitfield mask, const bool
|
||||||
bool initializeStencilBuffer = 0 != (mask & LOCAL_GL_STENCIL_BUFFER_BIT);
|
bool initializeStencilBuffer = 0 != (mask & LOCAL_GL_STENCIL_BUFFER_BIT);
|
||||||
bool drawBuffersIsEnabled = IsExtensionEnabled(WebGLExtensionID::WEBGL_draw_buffers);
|
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
|
// 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.
|
// setting up a coordinates transformation, it doesn't affect glClear at all.
|
||||||
|
@ -1068,7 +1068,7 @@ WebGLContext::ForceClearFramebufferWithDefaultValues(GLbitfield mask, const bool
|
||||||
|
|
||||||
if (drawBuffersIsEnabled) {
|
if (drawBuffersIsEnabled) {
|
||||||
|
|
||||||
GLenum drawBuffersCommand[WebGLContext::sMaxColorAttachments] = { LOCAL_GL_NONE };
|
GLenum drawBuffersCommand[WebGLContext::kMaxColorAttachments] = { LOCAL_GL_NONE };
|
||||||
|
|
||||||
for(int32_t i = 0; i < mGLMaxDrawBuffers; i++) {
|
for(int32_t i = 0; i < mGLMaxDrawBuffers; i++) {
|
||||||
GLint temp;
|
GLint temp;
|
||||||
|
@ -1396,7 +1396,7 @@ WebGLContext::GetSurfaceSnapshot(bool* aPremultAlpha)
|
||||||
NS_IMPL_CYCLE_COLLECTING_ADDREF(WebGLContext)
|
NS_IMPL_CYCLE_COLLECTING_ADDREF(WebGLContext)
|
||||||
NS_IMPL_CYCLE_COLLECTING_RELEASE(WebGLContext)
|
NS_IMPL_CYCLE_COLLECTING_RELEASE(WebGLContext)
|
||||||
|
|
||||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_13(WebGLContext,
|
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(WebGLContext,
|
||||||
mCanvasElement,
|
mCanvasElement,
|
||||||
mExtensions,
|
mExtensions,
|
||||||
mBound2DTextures,
|
mBound2DTextures,
|
||||||
|
|
|
@ -230,13 +230,13 @@ public:
|
||||||
// Returns null if the current bound FB is not likely complete.
|
// Returns null if the current bound FB is not likely complete.
|
||||||
const WebGLRectangleObject* CurValidFBRectObject() const;
|
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
|
// This is similar to GLContext::ClearSafely, but tries to minimize the
|
||||||
// amount of work it does.
|
// amount of work it does.
|
||||||
// It only clears the buffers we specify, and can reset its state without
|
// 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.
|
// 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'.
|
// Calls ForceClearFramebufferWithDefaultValues() for the Context's 'screen'.
|
||||||
void ClearScreen();
|
void ClearScreen();
|
||||||
|
|
|
@ -30,7 +30,7 @@ WebGLExtensionDrawBuffers::WebGLExtensionDrawBuffers(WebGLContext* context)
|
||||||
gl->fGetIntegerv(LOCAL_GL_MAX_DRAW_BUFFERS, &maxDrawBuffers);
|
gl->fGetIntegerv(LOCAL_GL_MAX_DRAW_BUFFERS, &maxDrawBuffers);
|
||||||
|
|
||||||
// WEBGL_draw_buffers specifications don't give a maximal value reachable by MAX_COLOR_ATTACHMENTS.
|
// 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())
|
if (context->MinCapabilityMode())
|
||||||
{
|
{
|
||||||
|
|
|
@ -292,7 +292,7 @@ WebGLFramebuffer::Attachment::IsComplete() const
|
||||||
|
|
||||||
if (mAttachmentPoint >= LOCAL_GL_COLOR_ATTACHMENT0 &&
|
if (mAttachmentPoint >= LOCAL_GL_COLOR_ATTACHMENT0 &&
|
||||||
mAttachmentPoint < GLenum(LOCAL_GL_COLOR_ATTACHMENT0 +
|
mAttachmentPoint < GLenum(LOCAL_GL_COLOR_ATTACHMENT0 +
|
||||||
WebGLContext::sMaxColorAttachments))
|
WebGLContext::kMaxColorAttachments))
|
||||||
{
|
{
|
||||||
return IsValidFBOTextureColorFormat(internalFormat);
|
return IsValidFBOTextureColorFormat(internalFormat);
|
||||||
}
|
}
|
||||||
|
@ -314,7 +314,7 @@ WebGLFramebuffer::Attachment::IsComplete() const
|
||||||
|
|
||||||
if (mAttachmentPoint >= LOCAL_GL_COLOR_ATTACHMENT0 &&
|
if (mAttachmentPoint >= LOCAL_GL_COLOR_ATTACHMENT0 &&
|
||||||
mAttachmentPoint < GLenum(LOCAL_GL_COLOR_ATTACHMENT0 +
|
mAttachmentPoint < GLenum(LOCAL_GL_COLOR_ATTACHMENT0 +
|
||||||
WebGLContext::sMaxColorAttachments))
|
WebGLContext::kMaxColorAttachments))
|
||||||
{
|
{
|
||||||
return IsValidFBORenderbufferColorFormat(internalFormat);
|
return IsValidFBORenderbufferColorFormat(internalFormat);
|
||||||
}
|
}
|
||||||
|
@ -785,8 +785,8 @@ WebGLFramebuffer::CheckAndInitializeAttachments()
|
||||||
|
|
||||||
// Get buffer-bit-mask and color-attachment-mask-list
|
// Get buffer-bit-mask and color-attachment-mask-list
|
||||||
uint32_t mask = 0;
|
uint32_t mask = 0;
|
||||||
bool colorAttachmentsMask[WebGLContext::sMaxColorAttachments] = { false };
|
bool colorAttachmentsMask[WebGLContext::kMaxColorAttachments] = { false };
|
||||||
MOZ_ASSERT(colorAttachmentCount <= WebGLContext::sMaxColorAttachments);
|
MOZ_ASSERT(colorAttachmentCount <= WebGLContext::kMaxColorAttachments);
|
||||||
|
|
||||||
for (size_t i = 0; i < colorAttachmentCount; i++) {
|
for (size_t i = 0; i < colorAttachmentCount; i++) {
|
||||||
if (mColorAttachments[i].HasUninitializedImageData()) {
|
if (mColorAttachments[i].HasUninitializedImageData()) {
|
||||||
|
@ -855,7 +855,7 @@ bool WebGLFramebuffer::CheckColorAttachmentNumber(GLenum attachment, const char*
|
||||||
|
|
||||||
void WebGLFramebuffer::EnsureColorAttachments(size_t colorAttachmentId)
|
void WebGLFramebuffer::EnsureColorAttachments(size_t colorAttachmentId)
|
||||||
{
|
{
|
||||||
MOZ_ASSERT(colorAttachmentId < WebGLContext::sMaxColorAttachments);
|
MOZ_ASSERT(colorAttachmentId < WebGLContext::kMaxColorAttachments);
|
||||||
|
|
||||||
size_t currentAttachmentCount = mColorAttachments.Length();
|
size_t currentAttachmentCount = mColorAttachments.Length();
|
||||||
if (colorAttachmentId < currentAttachmentCount)
|
if (colorAttachmentId < currentAttachmentCount)
|
||||||
|
@ -940,7 +940,7 @@ ImplCycleCollectionTraverse(nsCycleCollectionTraversalCallback& aCallback,
|
||||||
aName, aFlags);
|
aName, aFlags);
|
||||||
}
|
}
|
||||||
|
|
||||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_4(WebGLFramebuffer,
|
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(WebGLFramebuffer,
|
||||||
mColorAttachments,
|
mColorAttachments,
|
||||||
mDepthAttachment,
|
mDepthAttachment,
|
||||||
mStencilAttachment,
|
mStencilAttachment,
|
||||||
|
|
|
@ -237,7 +237,7 @@ WebGLProgram::GetUniformInfoForMappedIdentifier(const nsACString& name) {
|
||||||
return info;
|
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_ROOT_NATIVE(WebGLProgram, AddRef)
|
||||||
NS_IMPL_CYCLE_COLLECTION_UNROOT_NATIVE(WebGLProgram, Release)
|
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
|
* 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/. */
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||||
|
|
||||||
#include "WebGLContext.h"
|
|
||||||
#include "WebGLTexture.h"
|
#include "WebGLTexture.h"
|
||||||
|
|
||||||
#include "GLContext.h"
|
#include "GLContext.h"
|
||||||
#include "ScopedGLHelpers.h"
|
|
||||||
#include "WebGLTexelConversions.h"
|
|
||||||
#include "mozilla/dom/WebGLRenderingContextBinding.h"
|
#include "mozilla/dom/WebGLRenderingContextBinding.h"
|
||||||
|
#include "mozilla/Scoped.h"
|
||||||
|
#include "ScopedGLHelpers.h"
|
||||||
|
#include "WebGLContext.h"
|
||||||
|
#include "WebGLTexelConversions.h"
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
|
||||||
using namespace mozilla;
|
using namespace mozilla;
|
||||||
|
@ -433,6 +436,104 @@ WebGLTexture::ResolvedFakeBlackStatus() {
|
||||||
return mFakeBlackStatus;
|
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
|
void
|
||||||
WebGLTexture::DoDeferredImageInitialization(GLenum imageTarget, GLint level)
|
WebGLTexture::DoDeferredImageInitialization(GLenum imageTarget, GLint level)
|
||||||
{
|
{
|
||||||
|
@ -440,9 +541,22 @@ WebGLTexture::DoDeferredImageInitialization(GLenum imageTarget, GLint level)
|
||||||
MOZ_ASSERT(imageInfo.mImageDataStatus == WebGLImageDataStatus::UninitializedImageData);
|
MOZ_ASSERT(imageInfo.mImageDataStatus == WebGLImageDataStatus::UninitializedImageData);
|
||||||
|
|
||||||
mContext->MakeContextCurrent();
|
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);
|
gl::ScopedBindTexture autoBindTex(mContext->gl, GLName(), mTarget);
|
||||||
|
|
||||||
WebGLTexelFormat texelformat = GetWebGLTexelFormat(imageInfo.mInternalFormat, imageInfo.mType);
|
|
||||||
uint32_t texelsize = WebGLTexelConversions::TexelBytesForFormat(texelformat);
|
uint32_t texelsize = WebGLTexelConversions::TexelBytesForFormat(texelformat);
|
||||||
CheckedUint32 checked_byteLength
|
CheckedUint32 checked_byteLength
|
||||||
= WebGLContext::GetImageSize(
|
= WebGLContext::GetImageSize(
|
||||||
|
@ -451,24 +565,29 @@ WebGLTexture::DoDeferredImageInitialization(GLenum imageTarget, GLint level)
|
||||||
texelsize,
|
texelsize,
|
||||||
mContext->mPixelStoreUnpackAlignment);
|
mContext->mPixelStoreUnpackAlignment);
|
||||||
MOZ_ASSERT(checked_byteLength.isValid()); // should have been checked earlier
|
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->GetAndFlushUnderlyingGLErrors();
|
||||||
mContext->gl->fTexImage2D(imageTarget, level, imageInfo.mInternalFormat,
|
mContext->gl->fTexImage2D(imageTarget, level, imageInfo.mInternalFormat,
|
||||||
imageInfo.mWidth, imageInfo.mHeight,
|
imageInfo.mWidth, imageInfo.mHeight,
|
||||||
0, format, imageInfo.mType,
|
0, format, imageInfo.mType,
|
||||||
zeros);
|
zeros);
|
||||||
GLenum error = mContext->GetAndFlushUnderlyingGLErrors();
|
GLenum error = mContext->GetAndFlushUnderlyingGLErrors();
|
||||||
|
|
||||||
free(zeros);
|
|
||||||
SetImageDataStatus(imageTarget, level, WebGLImageDataStatus::InitializedImageData);
|
|
||||||
|
|
||||||
if (error) {
|
if (error) {
|
||||||
// Should only be OUT_OF_MEMORY. Anyway, there's no good way to recover from this here.
|
// 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.
|
printf_stderr("Error: 0x%4x\n", error);
|
||||||
return;
|
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)
|
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_0(WebGLTexture)
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
|
|
||||||
#include "nsWrapperCache.h"
|
#include "nsWrapperCache.h"
|
||||||
|
|
||||||
|
#include "mozilla/CheckedInt.h"
|
||||||
#include "mozilla/LinkedList.h"
|
#include "mozilla/LinkedList.h"
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
|
||||||
|
@ -273,10 +274,8 @@ public:
|
||||||
|
|
||||||
bool IsMipmapCubeComplete() const;
|
bool IsMipmapCubeComplete() const;
|
||||||
|
|
||||||
void SetFakeBlackStatus(WebGLTextureFakeBlackStatus x) {
|
void SetFakeBlackStatus(WebGLTextureFakeBlackStatus x);
|
||||||
mFakeBlackStatus = x;
|
|
||||||
mContext->SetFakeBlackStatus(WebGLContextFakeBlackStatus::Unknown);
|
|
||||||
}
|
|
||||||
// Returns the current fake-black-status, except if it was Unknown,
|
// Returns the current fake-black-status, except if it was Unknown,
|
||||||
// in which case this function resolves it first, so it never returns Unknown.
|
// in which case this function resolves it first, so it never returns Unknown.
|
||||||
WebGLTextureFakeBlackStatus ResolvedFakeBlackStatus();
|
WebGLTextureFakeBlackStatus ResolvedFakeBlackStatus();
|
||||||
|
|
|
@ -56,7 +56,7 @@ bool WebGLVertexArray::EnsureAttrib(GLuint index, const char *info)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_2(WebGLVertexArray,
|
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(WebGLVertexArray,
|
||||||
mAttribs,
|
mAttribs,
|
||||||
mBoundElementArrayBuffer)
|
mBoundElementArrayBuffer)
|
||||||
|
|
||||||
|
|
|
@ -52,8 +52,8 @@ HTMLImageOrCanvasOrVideoElement;
|
||||||
namespace mozilla {
|
namespace mozilla {
|
||||||
namespace dom {
|
namespace dom {
|
||||||
|
|
||||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_3(HTMLCanvasPrintState, mCanvas,
|
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(HTMLCanvasPrintState, mCanvas,
|
||||||
mContext, mCallback)
|
mContext, mCallback)
|
||||||
|
|
||||||
NS_IMPL_CYCLE_COLLECTION_ROOT_NATIVE(HTMLCanvasPrintState, AddRef)
|
NS_IMPL_CYCLE_COLLECTION_ROOT_NATIVE(HTMLCanvasPrintState, AddRef)
|
||||||
NS_IMPL_CYCLE_COLLECTION_UNROOT_NATIVE(HTMLCanvasPrintState, Release)
|
NS_IMPL_CYCLE_COLLECTION_UNROOT_NATIVE(HTMLCanvasPrintState, Release)
|
||||||
|
|
|
@ -2338,7 +2338,7 @@ bool HTMLMediaElement::CheckAudioChannelPermissions(const nsAString& aString)
|
||||||
}
|
}
|
||||||
|
|
||||||
nsCOMPtr<nsIPermissionManager> permissionManager =
|
nsCOMPtr<nsIPermissionManager> permissionManager =
|
||||||
do_GetService(NS_PERMISSIONMANAGER_CONTRACTID);
|
services::GetPermissionManager();
|
||||||
if (!permissionManager) {
|
if (!permissionManager) {
|
||||||
return false;
|
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
|
// nsISupports
|
||||||
|
|
||||||
|
|
|
@ -89,7 +89,7 @@ TableRowsCollection::WrapObject(JSContext* aCx)
|
||||||
return HTMLCollectionBinding::Wrap(aCx, this);
|
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_ADDREF(TableRowsCollection)
|
||||||
NS_IMPL_CYCLE_COLLECTING_RELEASE(TableRowsCollection)
|
NS_IMPL_CYCLE_COLLECTING_RELEASE(TableRowsCollection)
|
||||||
|
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
namespace mozilla {
|
namespace mozilla {
|
||||||
namespace dom {
|
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_ADDREF(MediaError)
|
||||||
NS_IMPL_CYCLE_COLLECTING_RELEASE(MediaError)
|
NS_IMPL_CYCLE_COLLECTING_RELEASE(MediaError)
|
||||||
|
|
||||||
|
|
|
@ -820,7 +820,7 @@ protected:
|
||||||
// UndoManager
|
// 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_ADDREF(UndoManager)
|
||||||
NS_IMPL_CYCLE_COLLECTING_RELEASE(UndoManager)
|
NS_IMPL_CYCLE_COLLECTING_RELEASE(UndoManager)
|
||||||
|
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
namespace mozilla {
|
namespace mozilla {
|
||||||
namespace dom {
|
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_ADDREF(ValidityState)
|
||||||
NS_IMPL_CYCLE_COLLECTING_RELEASE(ValidityState)
|
NS_IMPL_CYCLE_COLLECTING_RELEASE(ValidityState)
|
||||||
|
|
||||||
|
|
|
@ -418,7 +418,7 @@ nsGenericHTMLFrameElement::GetReallyIsBrowserOrApp(bool *aOut)
|
||||||
// Fail if the node principal isn't trusted.
|
// Fail if the node principal isn't trusted.
|
||||||
nsIPrincipal *principal = NodePrincipal();
|
nsIPrincipal *principal = NodePrincipal();
|
||||||
nsCOMPtr<nsIPermissionManager> permMgr =
|
nsCOMPtr<nsIPermissionManager> permMgr =
|
||||||
do_GetService(NS_PERMISSIONMANAGER_CONTRACTID);
|
services::GetPermissionManager();
|
||||||
NS_ENSURE_TRUE(permMgr, NS_OK);
|
NS_ENSURE_TRUE(permMgr, NS_OK);
|
||||||
|
|
||||||
uint32_t permission = nsIPermissionManager::DENY_ACTION;
|
uint32_t permission = nsIPermissionManager::DENY_ACTION;
|
||||||
|
@ -464,7 +464,7 @@ nsGenericHTMLFrameElement::GetAppManifestURL(nsAString& aOut)
|
||||||
// Check permission.
|
// Check permission.
|
||||||
nsIPrincipal *principal = NodePrincipal();
|
nsIPrincipal *principal = NodePrincipal();
|
||||||
nsCOMPtr<nsIPermissionManager> permMgr =
|
nsCOMPtr<nsIPermissionManager> permMgr =
|
||||||
do_GetService(NS_PERMISSIONMANAGER_CONTRACTID);
|
services::GetPermissionManager();
|
||||||
NS_ENSURE_TRUE(permMgr, NS_OK);
|
NS_ENSURE_TRUE(permMgr, NS_OK);
|
||||||
|
|
||||||
uint32_t permission = nsIPermissionManager::DENY_ACTION;
|
uint32_t permission = nsIPermissionManager::DENY_ACTION;
|
||||||
|
|
|
@ -322,7 +322,7 @@ nsHTMLDocumentSH::DocumentAllNewResolve(JSContext *cx, JS::Handle<JSObject*> obj
|
||||||
bool ok = true;
|
bool ok = true;
|
||||||
|
|
||||||
if (v.get() != JSVAL_VOID) {
|
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);
|
objp.set(obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -187,6 +187,7 @@ public:
|
||||||
if (c.IsNull()) {
|
if (c.IsNull()) {
|
||||||
c.mDuration *= aOutRate / aInRate;
|
c.mDuration *= aOutRate / aInRate;
|
||||||
mDuration += c.mDuration;
|
mDuration += c.mDuration;
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
uint32_t channels = c.mChannelData.Length();
|
uint32_t channels = c.mChannelData.Length();
|
||||||
output.SetLength(channels);
|
output.SetLength(channels);
|
||||||
|
@ -265,7 +266,14 @@ public:
|
||||||
int ChannelCount() {
|
int ChannelCount() {
|
||||||
NS_WARN_IF_FALSE(!mChunks.IsEmpty(),
|
NS_WARN_IF_FALSE(!mChunks.IsEmpty(),
|
||||||
"Cannot query channel count on a AudioSegment with no chunks.");
|
"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; }
|
static Type StaticType() { return AUDIO; }
|
||||||
|
|
|
@ -2277,12 +2277,17 @@ SourceMediaStream::ResampleAudioToGraphSampleRate(TrackData* aTrackData, MediaSe
|
||||||
AudioSegment* segment = static_cast<AudioSegment*>(aSegment);
|
AudioSegment* segment = static_cast<AudioSegment*>(aSegment);
|
||||||
if (!aTrackData->mResampler) {
|
if (!aTrackData->mResampler) {
|
||||||
int channels = segment->ChannelCount();
|
int channels = segment->ChannelCount();
|
||||||
SpeexResamplerState* state = speex_resampler_init(channels,
|
|
||||||
aTrackData->mInputRate,
|
// If this segment is just silence, we delay instanciating the resampler.
|
||||||
GraphImpl()->AudioSampleRate(),
|
if (channels) {
|
||||||
SPEEX_RESAMPLER_QUALITY_DEFAULT,
|
SpeexResamplerState* state = speex_resampler_init(channels,
|
||||||
nullptr);
|
aTrackData->mInputRate,
|
||||||
if (state) {
|
GraphImpl()->AudioSampleRate(),
|
||||||
|
SPEEX_RESAMPLER_QUALITY_DEFAULT,
|
||||||
|
nullptr);
|
||||||
|
if (!state) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
aTrackData->mResampler.own(state);
|
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_ADDREF(TextTrackCueList)
|
||||||
NS_IMPL_CYCLE_COLLECTING_RELEASE(TextTrackCueList)
|
NS_IMPL_CYCLE_COLLECTING_RELEASE(TextTrackCueList)
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
namespace mozilla {
|
namespace mozilla {
|
||||||
namespace dom {
|
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_ADDREF(TextTrackRegion)
|
||||||
NS_IMPL_CYCLE_COLLECTING_RELEASE(TextTrackRegion)
|
NS_IMPL_CYCLE_COLLECTING_RELEASE(TextTrackRegion)
|
||||||
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(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_ROOT_NATIVE(VideoPlaybackQuality, AddRef)
|
||||||
NS_IMPL_CYCLE_COLLECTION_UNROOT_NATIVE(VideoPlaybackQuality, Release)
|
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 dom
|
||||||
} // namespace mozilla
|
} // namespace mozilla
|
||||||
|
|
|
@ -184,7 +184,7 @@ OmxAudioTrackEncoder::AppendEncodedFrames(EncodedFrameContainer& aContainer)
|
||||||
audiodata->SetFrameType(isCSD ?
|
audiodata->SetFrameType(isCSD ?
|
||||||
EncodedFrame::AMR_AUDIO_CSD : EncodedFrame::AMR_AUDIO_FRAME);
|
EncodedFrame::AMR_AUDIO_CSD : EncodedFrame::AMR_AUDIO_FRAME);
|
||||||
} else {
|
} else {
|
||||||
MOZ_ASSERT("audio codec not supported");
|
MOZ_ASSERT(false, "audio codec not supported");
|
||||||
}
|
}
|
||||||
audiodata->SetTimeStamp(outTimeUs);
|
audiodata->SetTimeStamp(outTimeUs);
|
||||||
rv = audiodata->SwapInFrameData(frameData);
|
rv = audiodata->SwapInFrameData(frameData);
|
||||||
|
|
|
@ -196,8 +196,9 @@ StealJSArrayDataIntoThreadSharedFloatArrayBufferList(JSContext* aJSContext,
|
||||||
nsRefPtr<ThreadSharedFloatArrayBufferList> result =
|
nsRefPtr<ThreadSharedFloatArrayBufferList> result =
|
||||||
new ThreadSharedFloatArrayBufferList(aJSArrays.Length());
|
new ThreadSharedFloatArrayBufferList(aJSArrays.Length());
|
||||||
for (uint32_t i = 0; i < aJSArrays.Length(); ++i) {
|
for (uint32_t i = 0; i < aJSArrays.Length(); ++i) {
|
||||||
|
JS::Rooted<JSObject*> arrayBufferView(aJSContext, aJSArrays[i]);
|
||||||
JS::Rooted<JSObject*> arrayBuffer(aJSContext,
|
JS::Rooted<JSObject*> arrayBuffer(aJSContext,
|
||||||
JS_GetArrayBufferViewBuffer(aJSContext, aJSArrays[i]));
|
JS_GetArrayBufferViewBuffer(aJSContext, arrayBufferView));
|
||||||
uint8_t* stolenData = arrayBuffer
|
uint8_t* stolenData = arrayBuffer
|
||||||
? (uint8_t*) JS_StealArrayBufferContents(aJSContext, arrayBuffer)
|
? (uint8_t*) JS_StealArrayBufferContents(aJSContext, arrayBuffer)
|
||||||
: nullptr;
|
: nullptr;
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
#include "AudioDestinationNode.h"
|
#include "AudioDestinationNode.h"
|
||||||
#include "mozilla/dom/AudioDestinationNodeBinding.h"
|
#include "mozilla/dom/AudioDestinationNodeBinding.h"
|
||||||
#include "mozilla/Preferences.h"
|
#include "mozilla/Preferences.h"
|
||||||
|
#include "mozilla/Services.h"
|
||||||
#include "AudioChannelAgent.h"
|
#include "AudioChannelAgent.h"
|
||||||
#include "AudioChannelService.h"
|
#include "AudioChannelService.h"
|
||||||
#include "AudioNodeEngine.h"
|
#include "AudioNodeEngine.h"
|
||||||
|
@ -482,7 +483,7 @@ AudioDestinationNode::CheckAudioChannelPermissions(AudioChannel aValue)
|
||||||
}
|
}
|
||||||
|
|
||||||
nsCOMPtr<nsIPermissionManager> permissionManager =
|
nsCOMPtr<nsIPermissionManager> permissionManager =
|
||||||
do_GetService(NS_PERMISSIONMANAGER_CONTRACTID);
|
services::GetPermissionManager();
|
||||||
if (!permissionManager) {
|
if (!permissionManager) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
namespace mozilla {
|
namespace mozilla {
|
||||||
namespace dom {
|
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_ROOT_NATIVE(AudioListener, AddRef)
|
||||||
NS_IMPL_CYCLE_COLLECTION_UNROOT_NATIVE(AudioListener, Release)
|
NS_IMPL_CYCLE_COLLECTION_UNROOT_NATIVE(AudioListener, Release)
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
namespace mozilla {
|
namespace mozilla {
|
||||||
namespace dom {
|
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_ROOT_NATIVE(PeriodicWave, AddRef)
|
||||||
NS_IMPL_CYCLE_COLLECTION_UNROOT_NATIVE(PeriodicWave, Release)
|
NS_IMPL_CYCLE_COLLECTION_UNROOT_NATIVE(PeriodicWave, Release)
|
||||||
|
|
|
@ -154,13 +154,23 @@ public:
|
||||||
}
|
}
|
||||||
private:
|
private:
|
||||||
static int32_t GetDefWidth(bool aHD = false) {
|
static int32_t GetDefWidth(bool aHD = false) {
|
||||||
return aHD ? MediaEngine::DEFAULT_169_VIDEO_WIDTH :
|
// It'd be nice if we could use the ternary operator here, but we can't
|
||||||
MediaEngine::DEFAULT_43_VIDEO_WIDTH;
|
// 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) {
|
static int32_t GetDefHeight(bool aHD = false) {
|
||||||
return aHD ? MediaEngine::DEFAULT_169_VIDEO_HEIGHT :
|
// It'd be nice if we could use the ternary operator here, but we can't
|
||||||
MediaEngine::DEFAULT_43_VIDEO_HEIGHT;
|
// 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"
|
#include "nsISupportsUtils.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef MOZ_WEBRTC
|
||||||
#include "YuvStamper.h"
|
#include "YuvStamper.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#define VIDEO_RATE USECS_PER_S
|
#define VIDEO_RATE USECS_PER_S
|
||||||
#define AUDIO_RATE 16000
|
#define AUDIO_RATE 16000
|
||||||
|
@ -245,11 +247,13 @@ MediaEngineDefaultVideoSource::Notify(nsITimer* aTimer)
|
||||||
layers::PlanarYCbCrData data;
|
layers::PlanarYCbCrData data;
|
||||||
AllocateSolidColorFrame(data, mOpts.mWidth, mOpts.mHeight, 0x80, mCb, mCr);
|
AllocateSolidColorFrame(data, mOpts.mWidth, mOpts.mHeight, 0x80, mCb, mCr);
|
||||||
|
|
||||||
|
#ifdef MOZ_WEBRTC
|
||||||
uint64_t timestamp = PR_Now();
|
uint64_t timestamp = PR_Now();
|
||||||
YuvStamper::Encode(mOpts.mWidth, mOpts.mHeight, mOpts.mWidth,
|
YuvStamper::Encode(mOpts.mWidth, mOpts.mHeight, mOpts.mWidth,
|
||||||
data.mYChannel,
|
data.mYChannel,
|
||||||
reinterpret_cast<unsigned char*>(×tamp), sizeof(timestamp),
|
reinterpret_cast<unsigned char*>(×tamp), sizeof(timestamp),
|
||||||
0, 0);
|
0, 0);
|
||||||
|
#endif
|
||||||
|
|
||||||
ycbcr_image->SetData(data);
|
ycbcr_image->SetData(data);
|
||||||
// SetData copies data, so we can free the frame
|
// SetData copies data, so we can free the frame
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
namespace mozilla {
|
namespace mozilla {
|
||||||
namespace dom {
|
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_ADDREF(SpeechGrammar)
|
||||||
NS_IMPL_CYCLE_COLLECTING_RELEASE(SpeechGrammar)
|
NS_IMPL_CYCLE_COLLECTING_RELEASE(SpeechGrammar)
|
||||||
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(SpeechGrammar)
|
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(SpeechGrammar)
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
namespace mozilla {
|
namespace mozilla {
|
||||||
namespace dom {
|
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_ADDREF(SpeechGrammarList)
|
||||||
NS_IMPL_CYCLE_COLLECTING_RELEASE(SpeechGrammarList)
|
NS_IMPL_CYCLE_COLLECTING_RELEASE(SpeechGrammarList)
|
||||||
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(SpeechGrammarList)
|
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(SpeechGrammarList)
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
namespace mozilla {
|
namespace mozilla {
|
||||||
namespace dom {
|
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_ADDREF(SpeechRecognitionAlternative)
|
||||||
NS_IMPL_CYCLE_COLLECTING_RELEASE(SpeechRecognitionAlternative)
|
NS_IMPL_CYCLE_COLLECTING_RELEASE(SpeechRecognitionAlternative)
|
||||||
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(SpeechRecognitionAlternative)
|
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(SpeechRecognitionAlternative)
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
namespace mozilla {
|
namespace mozilla {
|
||||||
namespace dom {
|
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_ADDREF(SpeechRecognitionResult)
|
||||||
NS_IMPL_CYCLE_COLLECTING_RELEASE(SpeechRecognitionResult)
|
NS_IMPL_CYCLE_COLLECTING_RELEASE(SpeechRecognitionResult)
|
||||||
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(SpeechRecognitionResult)
|
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(SpeechRecognitionResult)
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
namespace mozilla {
|
namespace mozilla {
|
||||||
namespace dom {
|
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_ADDREF(SpeechRecognitionResultList)
|
||||||
NS_IMPL_CYCLE_COLLECTING_RELEASE(SpeechRecognitionResultList)
|
NS_IMPL_CYCLE_COLLECTING_RELEASE(SpeechRecognitionResultList)
|
||||||
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(SpeechRecognitionResultList)
|
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(SpeechRecognitionResultList)
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
namespace mozilla {
|
namespace mozilla {
|
||||||
namespace dom {
|
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_ADDREF(SpeechSynthesisVoice)
|
||||||
NS_IMPL_CYCLE_COLLECTING_RELEASE(SpeechSynthesisVoice)
|
NS_IMPL_CYCLE_COLLECTING_RELEASE(SpeechSynthesisVoice)
|
||||||
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(SpeechSynthesisVoice)
|
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(SpeechSynthesisVoice)
|
||||||
|
|
|
@ -14,7 +14,7 @@ const double radPerDegree = 2.0 * M_PI / 360.0;
|
||||||
namespace mozilla {
|
namespace mozilla {
|
||||||
namespace dom {
|
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_ROOT_NATIVE(SVGMatrix, AddRef)
|
||||||
NS_IMPL_CYCLE_COLLECTION_UNROOT_NATIVE(SVGMatrix, Release)
|
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:
|
// 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_ADDREF(SVGRect)
|
||||||
NS_IMPL_CYCLE_COLLECTING_RELEASE(SVGRect)
|
NS_IMPL_CYCLE_COLLECTING_RELEASE(SVGRect)
|
||||||
|
|
|
@ -36,6 +36,7 @@
|
||||||
#include "nsXULAppAPI.h"
|
#include "nsXULAppAPI.h"
|
||||||
#include "prio.h"
|
#include "prio.h"
|
||||||
#include "private/pprio.h"
|
#include "private/pprio.h"
|
||||||
|
#include "mozilla/Services.h"
|
||||||
|
|
||||||
#define ASMJSCACHE_METADATA_FILE_NAME "metadata"
|
#define ASMJSCACHE_METADATA_FILE_NAME "metadata"
|
||||||
#define ASMJSCACHE_ENTRY_FILE_NAME_BASE "module"
|
#define ASMJSCACHE_ENTRY_FILE_NAME_BASE "module"
|
||||||
|
@ -688,7 +689,7 @@ MainProcessRunnable::InitOnMainThread()
|
||||||
MOZ_ASSERT(isApp);
|
MOZ_ASSERT(isApp);
|
||||||
|
|
||||||
nsCOMPtr<nsIPermissionManager> pm =
|
nsCOMPtr<nsIPermissionManager> pm =
|
||||||
do_GetService(NS_PERMISSIONMANAGER_CONTRACTID);
|
services::GetPermissionManager();
|
||||||
NS_ENSURE_TRUE(pm, NS_ERROR_UNEXPECTED);
|
NS_ENSURE_TRUE(pm, NS_ERROR_UNEXPECTED);
|
||||||
|
|
||||||
uint32_t permission;
|
uint32_t permission;
|
||||||
|
|
|
@ -40,7 +40,7 @@ BarProp::WrapObject(JSContext* aCx)
|
||||||
return BarPropBinding::Wrap(aCx, this);
|
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_ADDREF(BarProp)
|
||||||
NS_IMPL_CYCLE_COLLECTING_RELEASE(BarProp)
|
NS_IMPL_CYCLE_COLLECTING_RELEASE(BarProp)
|
||||||
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(BarProp)
|
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(BarProp)
|
||||||
|
|
|
@ -295,9 +295,10 @@ private:
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
JS::Rooted<JS::Value> arg(aCx);
|
||||||
for (uint32_t i = 0; i < mCallData->mArguments.Length(); ++i) {
|
for (uint32_t i = 0; i < mCallData->mArguments.Length(); ++i) {
|
||||||
if (!JS_DefineElement(aCx, arguments, i, mCallData->mArguments[i],
|
arg = mCallData->mArguments[i];
|
||||||
nullptr, nullptr, JSPROP_ENUMERATE)) {
|
if (!JS_DefineElement(aCx, arguments, i, arg, JSPROP_ENUMERATE)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -405,9 +406,10 @@ private:
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
JS::Rooted<JS::Value> arg(aCx);
|
||||||
for (uint32_t i = 0; i < mArguments.Length(); ++i) {
|
for (uint32_t i = 0; i < mArguments.Length(); ++i) {
|
||||||
if (!JS_DefineElement(aCx, arguments, i, mArguments[i], nullptr, nullptr,
|
arg = mArguments[i];
|
||||||
JSPROP_ENUMERATE)) {
|
if (!JS_DefineElement(aCx, arguments, i, arg, JSPROP_ENUMERATE)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,7 +29,7 @@ NS_INTERFACE_MAP_END
|
||||||
NS_IMPL_CYCLE_COLLECTING_ADDREF(Crypto)
|
NS_IMPL_CYCLE_COLLECTING_ADDREF(Crypto)
|
||||||
NS_IMPL_CYCLE_COLLECTING_RELEASE(Crypto)
|
NS_IMPL_CYCLE_COLLECTING_RELEASE(Crypto)
|
||||||
|
|
||||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_1(Crypto, mWindow)
|
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(Crypto, mWindow)
|
||||||
|
|
||||||
Crypto::Crypto()
|
Crypto::Crypto()
|
||||||
{
|
{
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
namespace mozilla {
|
namespace mozilla {
|
||||||
namespace dom {
|
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_ADDREF(DOMError)
|
||||||
NS_IMPL_CYCLE_COLLECTING_RELEASE(DOMError)
|
NS_IMPL_CYCLE_COLLECTING_RELEASE(DOMError)
|
||||||
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(DOMError)
|
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(DOMError)
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
namespace mozilla {
|
namespace mozilla {
|
||||||
namespace dom {
|
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_ADDREF(MessageChannel)
|
||||||
NS_IMPL_CYCLE_COLLECTING_RELEASE(MessageChannel)
|
NS_IMPL_CYCLE_COLLECTING_RELEASE(MessageChannel)
|
||||||
|
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
namespace mozilla {
|
namespace mozilla {
|
||||||
namespace dom {
|
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_ADDREF(MessagePortList)
|
||||||
NS_IMPL_CYCLE_COLLECTING_RELEASE(MessagePortList)
|
NS_IMPL_CYCLE_COLLECTING_RELEASE(MessagePortList)
|
||||||
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(MessagePortList)
|
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(MessagePortList)
|
||||||
|
|
|
@ -94,6 +94,9 @@
|
||||||
#include "nsIPrivateBrowsingChannel.h"
|
#include "nsIPrivateBrowsingChannel.h"
|
||||||
#include "nsIDocShell.h"
|
#include "nsIDocShell.h"
|
||||||
|
|
||||||
|
#include "WorkerPrivate.h"
|
||||||
|
#include "WorkerRunnable.h"
|
||||||
|
|
||||||
namespace mozilla {
|
namespace mozilla {
|
||||||
namespace dom {
|
namespace dom {
|
||||||
|
|
||||||
|
@ -1410,10 +1413,12 @@ Navigator::GetBattery(ErrorResult& aRv)
|
||||||
return mBatteryManager;
|
return mBatteryManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
already_AddRefed<Promise>
|
/* static */ already_AddRefed<Promise>
|
||||||
Navigator::GetDataStores(const nsAString& aName, ErrorResult& aRv)
|
Navigator::GetDataStores(nsPIDOMWindow* aWindow,
|
||||||
|
const nsAString& aName,
|
||||||
|
ErrorResult& aRv)
|
||||||
{
|
{
|
||||||
if (!mWindow || !mWindow->GetDocShell()) {
|
if (!aWindow || !aWindow->GetDocShell()) {
|
||||||
aRv.Throw(NS_ERROR_UNEXPECTED);
|
aRv.Throw(NS_ERROR_UNEXPECTED);
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
@ -1426,12 +1431,18 @@ Navigator::GetDataStores(const nsAString& aName, ErrorResult& aRv)
|
||||||
}
|
}
|
||||||
|
|
||||||
nsCOMPtr<nsISupports> promise;
|
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());
|
nsRefPtr<Promise> p = static_cast<Promise*>(promise.get());
|
||||||
return p.forget();
|
return p.forget();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
already_AddRefed<Promise>
|
||||||
|
Navigator::GetDataStores(const nsAString& aName, ErrorResult& aRv)
|
||||||
|
{
|
||||||
|
return GetDataStores(mWindow, aName, aRv);
|
||||||
|
}
|
||||||
|
|
||||||
PowerManager*
|
PowerManager*
|
||||||
Navigator::GetMozPower(ErrorResult& aRv)
|
Navigator::GetMozPower(ErrorResult& aRv)
|
||||||
{
|
{
|
||||||
|
@ -1782,7 +1793,7 @@ Navigator::CheckPermission(nsPIDOMWindow* aWindow, const char* aType)
|
||||||
}
|
}
|
||||||
|
|
||||||
nsCOMPtr<nsIPermissionManager> permMgr =
|
nsCOMPtr<nsIPermissionManager> permMgr =
|
||||||
do_GetService(NS_PERMISSIONMANAGER_CONTRACTID);
|
services::GetPermissionManager();
|
||||||
NS_ENSURE_TRUE(permMgr, false);
|
NS_ENSURE_TRUE(permMgr, false);
|
||||||
|
|
||||||
uint32_t permission = nsIPermissionManager::DENY_ACTION;
|
uint32_t permission = nsIPermissionManager::DENY_ACTION;
|
||||||
|
@ -2178,7 +2189,7 @@ Navigator::HasWifiManagerSupport(JSContext* /* unused */,
|
||||||
nsIPrincipal* principal = nsContentUtils::GetObjectPrincipal(aGlobal);
|
nsIPrincipal* principal = nsContentUtils::GetObjectPrincipal(aGlobal);
|
||||||
|
|
||||||
nsCOMPtr<nsIPermissionManager> permMgr =
|
nsCOMPtr<nsIPermissionManager> permMgr =
|
||||||
do_GetService(NS_PERMISSIONMANAGER_CONTRACTID);
|
services::GetPermissionManager();
|
||||||
NS_ENSURE_TRUE(permMgr, false);
|
NS_ENSURE_TRUE(permMgr, false);
|
||||||
|
|
||||||
uint32_t permission = nsIPermissionManager::DENY_ACTION;
|
uint32_t permission = nsIPermissionManager::DENY_ACTION;
|
||||||
|
@ -2291,9 +2302,9 @@ Navigator::HasInputMethodSupport(JSContext* /* unused */,
|
||||||
|
|
||||||
/* static */
|
/* static */
|
||||||
bool
|
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.
|
// First of all, the general pref has to be turned on.
|
||||||
bool enabled = false;
|
bool enabled = false;
|
||||||
|
@ -2307,6 +2318,64 @@ Navigator::HasDataStoreSupport(JSContext* cx, JSObject* aGlobal)
|
||||||
return true;
|
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);
|
nsCOMPtr<nsPIDOMWindow> win = GetWindowFromGlobal(global);
|
||||||
if (!win) {
|
if (!win) {
|
||||||
return false;
|
return false;
|
||||||
|
@ -2317,12 +2386,7 @@ Navigator::HasDataStoreSupport(JSContext* cx, JSObject* aGlobal)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint16_t status;
|
return HasDataStoreSupport(doc->NodePrincipal());
|
||||||
if (NS_FAILED(doc->NodePrincipal()->GetAppStatus(&status))) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return status == nsIPrincipal::APP_STATUS_CERTIFIED;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* static */
|
/* static */
|
||||||
|
|
|
@ -27,6 +27,7 @@ class nsIDOMNavigatorSystemMessages;
|
||||||
class nsDOMCameraManager;
|
class nsDOMCameraManager;
|
||||||
class nsDOMDeviceStorage;
|
class nsDOMDeviceStorage;
|
||||||
class nsIDOMBlob;
|
class nsIDOMBlob;
|
||||||
|
class nsIPrincipal;
|
||||||
|
|
||||||
namespace mozilla {
|
namespace mozilla {
|
||||||
namespace dom {
|
namespace dom {
|
||||||
|
@ -156,6 +157,11 @@ public:
|
||||||
// The XPCOM GetDoNotTrack is ok
|
// The XPCOM GetDoNotTrack is ok
|
||||||
Geolocation* GetGeolocation(ErrorResult& aRv);
|
Geolocation* GetGeolocation(ErrorResult& aRv);
|
||||||
battery::BatteryManager* GetBattery(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,
|
already_AddRefed<Promise> GetDataStores(const nsAString &aName,
|
||||||
ErrorResult& aRv);
|
ErrorResult& aRv);
|
||||||
bool Vibrate(uint32_t aDuration);
|
bool Vibrate(uint32_t aDuration);
|
||||||
|
@ -299,6 +305,8 @@ public:
|
||||||
|
|
||||||
static bool HasInputMethodSupport(JSContext* /* unused */, JSObject* aGlobal);
|
static bool HasInputMethodSupport(JSContext* /* unused */, JSObject* aGlobal);
|
||||||
|
|
||||||
|
static bool HasDataStoreSupport(nsIPrincipal* aPrincipal);
|
||||||
|
|
||||||
static bool HasDataStoreSupport(JSContext* cx, JSObject* aGlobal);
|
static bool HasDataStoreSupport(JSContext* cx, JSObject* aGlobal);
|
||||||
|
|
||||||
static bool HasDownloadsSupport(JSContext* aCx, JSObject* aGlobal);
|
static bool HasDownloadsSupport(JSContext* aCx, JSObject* aGlobal);
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
|
|
||||||
using namespace mozilla::dom;
|
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_ADDREF(PerformanceEntry)
|
||||||
NS_IMPL_CYCLE_COLLECTING_RELEASE(PerformanceEntry)
|
NS_IMPL_CYCLE_COLLECTING_RELEASE(PerformanceEntry)
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
namespace mozilla {
|
namespace mozilla {
|
||||||
namespace dom {
|
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_ADDREF(URLSearchParams)
|
||||||
NS_IMPL_CYCLE_COLLECTING_RELEASE(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
|
// window.classname, just fall through and let the JS engine
|
||||||
// return the Object constructor.
|
// return the Object constructor.
|
||||||
|
|
||||||
if (!::JS_DefinePropertyById(cx, obj, sConstructor_id, val, JS_PropertyStub,
|
JS::Rooted<jsid> id(cx, sConstructor_id);
|
||||||
JS_StrictPropertyStub, JSPROP_ENUMERATE)) {
|
if (!::JS_DefinePropertyById(cx, obj, id, val, JSPROP_ENUMERATE,
|
||||||
|
JS_PropertyStub, JS_StrictPropertyStub)) {
|
||||||
return NS_ERROR_UNEXPECTED;
|
return NS_ERROR_UNEXPECTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1670,8 +1671,8 @@ nsDOMClassInfo::PostCreatePrototype(JSContext * cx, JSObject * aProto)
|
||||||
if (!contentDefinedProperty && desc.object() && !desc.value().isUndefined() &&
|
if (!contentDefinedProperty && desc.object() && !desc.value().isUndefined() &&
|
||||||
!JS_DefineUCProperty(cx, global, mData->mNameUTF16,
|
!JS_DefineUCProperty(cx, global, mData->mNameUTF16,
|
||||||
NS_strlen(mData->mNameUTF16),
|
NS_strlen(mData->mNameUTF16),
|
||||||
desc.value(), desc.getter(), desc.setter(),
|
desc.value(), desc.attributes(),
|
||||||
desc.attributes())) {
|
desc.getter(), desc.setter())) {
|
||||||
return NS_ERROR_UNEXPECTED;
|
return NS_ERROR_UNEXPECTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3263,9 +3264,9 @@ nsWindowSH::NewResolve(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
|
||||||
rv = WrapNative(cx, location, &NS_GET_IID(nsIDOMLocation), true, &v);
|
rv = WrapNative(cx, location, &NS_GET_IID(nsIDOMLocation), true, &v);
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
NS_ENSURE_SUCCESS(rv, rv);
|
||||||
|
|
||||||
bool ok = JS_DefinePropertyById(cx, obj, id, v, JS_PropertyStub,
|
bool ok = JS_DefinePropertyById(cx, obj, id, v,
|
||||||
LocationSetterUnwrapper,
|
JSPROP_PERMANENT | JSPROP_ENUMERATE,
|
||||||
JSPROP_PERMANENT | JSPROP_ENUMERATE);
|
JS_PropertyStub, LocationSetterUnwrapper);
|
||||||
|
|
||||||
if (!ok) {
|
if (!ok) {
|
||||||
return NS_ERROR_FAILURE;
|
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
|
// Hold on to the top window object as a global property so we
|
||||||
// don't need to worry about losing expando properties etc.
|
// 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_READONLY | JSPROP_PERMANENT |
|
||||||
JSPROP_ENUMERATE)) {
|
JSPROP_ENUMERATE,
|
||||||
|
JS_PropertyStub, JS_StrictPropertyStub)) {
|
||||||
return NS_ERROR_FAILURE;
|
return NS_ERROR_FAILURE;
|
||||||
}
|
}
|
||||||
*objp = obj;
|
*objp = obj;
|
||||||
|
@ -3322,8 +3324,8 @@ nsWindowSH::NewResolve(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
|
||||||
// also already defined it, so we don't have to.
|
// also already defined it, so we don't have to.
|
||||||
if (desc.object() && !desc.value().isUndefined() &&
|
if (desc.object() && !desc.value().isUndefined() &&
|
||||||
!JS_DefinePropertyById(cx, global, id, desc.value(),
|
!JS_DefinePropertyById(cx, global, id, desc.value(),
|
||||||
desc.getter(), desc.setter(),
|
desc.attributes(),
|
||||||
desc.attributes())) {
|
desc.getter(), desc.setter())) {
|
||||||
return NS_ERROR_FAILURE;
|
return NS_ERROR_FAILURE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3340,8 +3342,8 @@ nsWindowSH::NewResolve(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
|
||||||
MOZ_ASSERT_IF(isXray, !desc.value().isUndefined());
|
MOZ_ASSERT_IF(isXray, !desc.value().isUndefined());
|
||||||
if (!desc.value().isUndefined() &&
|
if (!desc.value().isUndefined() &&
|
||||||
!JS_DefinePropertyById(cx, obj, id, desc.value(),
|
!JS_DefinePropertyById(cx, obj, id, desc.value(),
|
||||||
desc.getter(), desc.setter(),
|
desc.attributes(),
|
||||||
desc.attributes())) {
|
desc.getter(), desc.setter())) {
|
||||||
return NS_ERROR_FAILURE;
|
return NS_ERROR_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3527,7 +3529,7 @@ nsGenericArraySH::NewResolve(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
|
||||||
|
|
||||||
uint32_t index = uint32_t(n);
|
uint32_t index = uint32_t(n);
|
||||||
if (index < length) {
|
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);
|
JSPROP_ENUMERATE | JSPROP_SHARED);
|
||||||
*objp = obj;
|
*objp = obj;
|
||||||
}
|
}
|
||||||
|
@ -3588,7 +3590,7 @@ nsGenericArraySH::Enumerate(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
|
||||||
int32_t length = len_val.toInt32();
|
int32_t length = len_val.toInt32();
|
||||||
|
|
||||||
for (int32_t i = 0; ok && i < length; ++i) {
|
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);
|
JSPROP_ENUMERATE | JSPROP_SHARED);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3719,8 +3721,8 @@ nsStorage2SH::NewResolve(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
NS_ENSURE_SUCCESS(rv, rv);
|
||||||
|
|
||||||
if (!DOMStringIsNull(data)) {
|
if (!DOMStringIsNull(data)) {
|
||||||
if (!::JS_DefinePropertyById(cx, realObj, id, JSVAL_VOID, nullptr,
|
if (!::JS_DefinePropertyById(cx, realObj, id, JS::UndefinedHandleValue,
|
||||||
nullptr, JSPROP_ENUMERATE)) {
|
JSPROP_ENUMERATE)) {
|
||||||
return NS_ERROR_FAILURE;
|
return NS_ERROR_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -13653,7 +13653,7 @@ nsGlobalWindow::EnableNetworkEvent(uint32_t aType)
|
||||||
MOZ_ASSERT(IsInnerWindow());
|
MOZ_ASSERT(IsInnerWindow());
|
||||||
|
|
||||||
nsCOMPtr<nsIPermissionManager> permMgr =
|
nsCOMPtr<nsIPermissionManager> permMgr =
|
||||||
do_GetService(NS_PERMISSIONMANAGER_CONTRACTID);
|
services::GetPermissionManager();
|
||||||
if (!permMgr) {
|
if (!permMgr) {
|
||||||
NS_ERROR("No PermissionManager available!");
|
NS_ERROR("No PermissionManager available!");
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -25,10 +25,10 @@ NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsMimeTypeArray)
|
||||||
NS_INTERFACE_MAP_ENTRY(nsISupports)
|
NS_INTERFACE_MAP_ENTRY(nsISupports)
|
||||||
NS_INTERFACE_MAP_END
|
NS_INTERFACE_MAP_END
|
||||||
|
|
||||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_3(nsMimeTypeArray,
|
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(nsMimeTypeArray,
|
||||||
mWindow,
|
mWindow,
|
||||||
mMimeTypes,
|
mMimeTypes,
|
||||||
mHiddenMimeTypes)
|
mHiddenMimeTypes)
|
||||||
|
|
||||||
nsMimeTypeArray::nsMimeTypeArray(nsPIDOMWindow* aWindow)
|
nsMimeTypeArray::nsMimeTypeArray(nsPIDOMWindow* aWindow)
|
||||||
: mWindow(aWindow)
|
: mWindow(aWindow)
|
||||||
|
@ -224,7 +224,7 @@ nsMimeTypeArray::EnsurePluginMimeTypes()
|
||||||
NS_IMPL_CYCLE_COLLECTION_ROOT_NATIVE(nsMimeType, AddRef)
|
NS_IMPL_CYCLE_COLLECTION_ROOT_NATIVE(nsMimeType, AddRef)
|
||||||
NS_IMPL_CYCLE_COLLECTION_UNROOT_NATIVE(nsMimeType, Release)
|
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,
|
nsMimeType::nsMimeType(nsPIDOMWindow* aWindow, nsPluginElement* aPluginElement,
|
||||||
uint32_t aPluginTagMimeIndex, const nsAString& aType)
|
uint32_t aPluginTagMimeIndex, const nsAString& aType)
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
|
|
||||||
using namespace mozilla;
|
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_ROOT_NATIVE(nsPerformanceTiming, AddRef)
|
||||||
NS_IMPL_CYCLE_COLLECTION_UNROOT_NATIVE(nsPerformanceTiming, Release)
|
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_ROOT_NATIVE(nsPerformanceNavigation, AddRef)
|
||||||
NS_IMPL_CYCLE_COLLECTION_UNROOT_NATIVE(nsPerformanceNavigation, Release)
|
NS_IMPL_CYCLE_COLLECTION_UNROOT_NATIVE(nsPerformanceNavigation, Release)
|
||||||
|
@ -360,10 +360,10 @@ nsPerformanceNavigation::WrapObject(JSContext *cx)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_5(nsPerformance,
|
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(nsPerformance,
|
||||||
mWindow, mTiming,
|
mWindow, mTiming,
|
||||||
mNavigation, mEntries,
|
mNavigation, mEntries,
|
||||||
mParentPerformance)
|
mParentPerformance)
|
||||||
NS_IMPL_CYCLE_COLLECTING_ADDREF(nsPerformance)
|
NS_IMPL_CYCLE_COLLECTING_ADDREF(nsPerformance)
|
||||||
NS_IMPL_CYCLE_COLLECTING_RELEASE(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_ENTRY(nsISupportsWeakReference)
|
||||||
NS_INTERFACE_MAP_END
|
NS_INTERFACE_MAP_END
|
||||||
|
|
||||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_3(nsPluginArray,
|
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(nsPluginArray,
|
||||||
mWindow,
|
mWindow,
|
||||||
mPlugins,
|
mPlugins,
|
||||||
mHiddenPlugins)
|
mHiddenPlugins)
|
||||||
|
|
||||||
static void
|
static void
|
||||||
GetPluginMimeTypes(const nsTArray<nsRefPtr<nsPluginElement> >& aPlugins,
|
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_ENTRY(nsISupports)
|
||||||
NS_INTERFACE_MAP_END
|
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,
|
nsPluginElement::nsPluginElement(nsPIDOMWindow* aWindow,
|
||||||
nsPluginTag* aPluginTag)
|
nsPluginTag* aPluginTag)
|
||||||
|
|
|
@ -42,11 +42,11 @@ nsWindowRoot::~nsWindowRoot()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_4(nsWindowRoot,
|
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(nsWindowRoot,
|
||||||
mWindow,
|
mWindow,
|
||||||
mListenerManager,
|
mListenerManager,
|
||||||
mPopupNode,
|
mPopupNode,
|
||||||
mParent)
|
mParent)
|
||||||
|
|
||||||
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsWindowRoot)
|
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsWindowRoot)
|
||||||
NS_WRAPPERCACHE_INTERFACE_MAP_ENTRY
|
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_TRAVERSE_END \
|
||||||
NS_IMPL_CYCLE_COLLECTION_TRACE_WRAPPERCACHE(_class)
|
NS_IMPL_CYCLE_COLLECTION_TRACE_WRAPPERCACHE(_class)
|
||||||
|
|
||||||
#define NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_1(_class, _field) \
|
#define NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(_class, ...) \
|
||||||
NS_IMPL_CYCLE_COLLECTION_CLASS(_class) \
|
NS_IMPL_CYCLE_COLLECTION_CLASS(_class) \
|
||||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(_class) \
|
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(_class) \
|
||||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(_field) \
|
NS_IMPL_CYCLE_COLLECTION_UNLINK(__VA_ARGS__) \
|
||||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_PRESERVED_WRAPPER \
|
NS_IMPL_CYCLE_COLLECTION_UNLINK_PRESERVED_WRAPPER \
|
||||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_END \
|
NS_IMPL_CYCLE_COLLECTION_UNLINK_END \
|
||||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(_class) \
|
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(_class) \
|
||||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_field) \
|
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(__VA_ARGS__) \
|
||||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_SCRIPT_OBJECTS \
|
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_SCRIPT_OBJECTS \
|
||||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END \
|
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 \
|
|
||||||
NS_IMPL_CYCLE_COLLECTION_TRACE_WRAPPERCACHE(_class)
|
NS_IMPL_CYCLE_COLLECTION_TRACE_WRAPPERCACHE(_class)
|
||||||
|
|
||||||
#endif /* nsWrapperCache_h___ */
|
#endif /* nsWrapperCache_h___ */
|
||||||
|
|
|
@ -288,9 +288,24 @@ DOMInterfaces = {
|
||||||
'nativeType': 'nsDOMDataChannel',
|
'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,
|
'wrapperCache': False,
|
||||||
},
|
'implicitJSContext': ['store', 'next', 'close']
|
||||||
|
}],
|
||||||
|
|
||||||
'DedicatedWorkerGlobalScope': {
|
'DedicatedWorkerGlobalScope': {
|
||||||
'headerFile': 'mozilla/dom/WorkerScope.h',
|
'headerFile': 'mozilla/dom/WorkerScope.h',
|
||||||
|
@ -1545,6 +1560,7 @@ DOMInterfaces = {
|
||||||
'WorkerNavigator': {
|
'WorkerNavigator': {
|
||||||
'headerFile': 'mozilla/dom/workers/bindings/Navigator.h',
|
'headerFile': 'mozilla/dom/workers/bindings/Navigator.h',
|
||||||
'workers': True,
|
'workers': True,
|
||||||
|
'implicitJSContext': ['getDataStores'],
|
||||||
},
|
},
|
||||||
|
|
||||||
'XMLHttpRequest': [
|
'XMLHttpRequest': [
|
||||||
|
|
|
@ -5044,7 +5044,7 @@ def getWrapTemplateForType(type, descriptorProvider, result, successCode,
|
||||||
$*{innerTemplate}
|
$*{innerTemplate}
|
||||||
} while (0);
|
} while (0);
|
||||||
if (!JS_DefineElement(cx, returnArray, ${index}, tmp,
|
if (!JS_DefineElement(cx, returnArray, ${index}, tmp,
|
||||||
nullptr, nullptr, JSPROP_ENUMERATE)) {
|
JSPROP_ENUMERATE)) {
|
||||||
$*{exceptionCode}
|
$*{exceptionCode}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6787,8 +6787,8 @@ class CGNewResolveHook(CGAbstractBindingMethod):
|
||||||
// define it.
|
// define it.
|
||||||
if (!desc.value().isUndefined() &&
|
if (!desc.value().isUndefined() &&
|
||||||
!JS_DefinePropertyById(cx, obj, id, desc.value(),
|
!JS_DefinePropertyById(cx, obj, id, desc.value(),
|
||||||
desc.getter(), desc.setter(),
|
desc.attributes(),
|
||||||
desc.attributes())) {
|
desc.getter(), desc.setter())) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
objp.set(obj);
|
objp.set(obj);
|
||||||
|
@ -8688,8 +8688,8 @@ class CGResolveOwnPropertyViaNewresolve(CGAbstractBindingMethod):
|
||||||
if (objDesc.object() &&
|
if (objDesc.object() &&
|
||||||
!objDesc.value().isUndefined() &&
|
!objDesc.value().isUndefined() &&
|
||||||
!JS_DefinePropertyById(cx, obj, id, objDesc.value(),
|
!JS_DefinePropertyById(cx, obj, id, objDesc.value(),
|
||||||
objDesc.getter(), objDesc.setter(),
|
objDesc.attributes(),
|
||||||
objDesc.attributes())) {
|
objDesc.getter(), objDesc.setter())) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -10570,7 +10570,7 @@ class CGDictionary(CGThing):
|
||||||
member.location))
|
member.location))
|
||||||
|
|
||||||
propDef = (
|
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))
|
self.makeIdName(member.identifier.name))
|
||||||
|
|
||||||
innerTemplate = wrapForType(
|
innerTemplate = wrapForType(
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
#include "nsThreadUtils.h"
|
#include "nsThreadUtils.h"
|
||||||
#include "mozilla/dom/bluetooth/BluetoothTypes.h"
|
#include "mozilla/dom/bluetooth/BluetoothTypes.h"
|
||||||
#include "mozilla/dom/BluetoothManagerBinding.h"
|
#include "mozilla/dom/BluetoothManagerBinding.h"
|
||||||
|
#include "mozilla/Services.h"
|
||||||
|
|
||||||
using namespace mozilla;
|
using namespace mozilla;
|
||||||
|
|
||||||
|
@ -199,8 +200,7 @@ BluetoothManager::CheckPermission(nsPIDOMWindow* aWindow)
|
||||||
{
|
{
|
||||||
NS_ASSERTION(aWindow, "Null pointer!");
|
NS_ASSERTION(aWindow, "Null pointer!");
|
||||||
|
|
||||||
nsCOMPtr<nsIPermissionManager> permMgr =
|
nsCOMPtr<nsIPermissionManager> permMgr = services::GetPermissionManager();
|
||||||
do_GetService(NS_PERMISSIONMANAGER_CONTRACTID);
|
|
||||||
NS_ENSURE_TRUE(permMgr, false);
|
NS_ENSURE_TRUE(permMgr, false);
|
||||||
|
|
||||||
uint32_t permission;
|
uint32_t permission;
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
using namespace mozilla;
|
using namespace mozilla;
|
||||||
using namespace mozilla::dom;
|
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_ADDREF(DOMCameraPoint)
|
||||||
NS_IMPL_CYCLE_COLLECTING_RELEASE(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_ENTRY(nsISupports)
|
||||||
NS_INTERFACE_MAP_END
|
NS_INTERFACE_MAP_END
|
||||||
|
|
||||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_5(DOMCameraDetectedFace, mParent,
|
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(DOMCameraDetectedFace, mParent,
|
||||||
mBounds, mLeftEye, mRightEye, mMouth)
|
mBounds, mLeftEye, mRightEye, mMouth)
|
||||||
|
|
||||||
NS_IMPL_CYCLE_COLLECTING_ADDREF(DOMCameraDetectedFace)
|
NS_IMPL_CYCLE_COLLECTING_ADDREF(DOMCameraDetectedFace)
|
||||||
NS_IMPL_CYCLE_COLLECTING_RELEASE(DOMCameraDetectedFace)
|
NS_IMPL_CYCLE_COLLECTING_RELEASE(DOMCameraDetectedFace)
|
||||||
|
|
|
@ -23,7 +23,7 @@
|
||||||
using namespace mozilla;
|
using namespace mozilla;
|
||||||
using namespace mozilla::dom;
|
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_BEGIN_CYCLE_COLLECTION(nsDOMCameraManager)
|
||||||
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIObserver)
|
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIObserver)
|
||||||
|
@ -90,7 +90,7 @@ bool
|
||||||
nsDOMCameraManager::CheckPermission(nsPIDOMWindow* aWindow)
|
nsDOMCameraManager::CheckPermission(nsPIDOMWindow* aWindow)
|
||||||
{
|
{
|
||||||
nsCOMPtr<nsIPermissionManager> permMgr =
|
nsCOMPtr<nsIPermissionManager> permMgr =
|
||||||
do_GetService(NS_PERMISSIONMANAGER_CONTRACTID);
|
services::GetPermissionManager();
|
||||||
NS_ENSURE_TRUE(permMgr, false);
|
NS_ENSURE_TRUE(permMgr, false);
|
||||||
|
|
||||||
uint32_t permission = nsIPermissionManager::DENY_ACTION;
|
uint32_t permission = nsIPermissionManager::DENY_ACTION;
|
||||||
|
|
Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше
Загрузка…
Ссылка в новой задаче