Skip to content

Commit

Permalink
merge mozilla-inbound to mozilla-central a=merge
Browse files Browse the repository at this point in the history
  • Loading branch information
BavarianTomcat committed Jul 21, 2016
2 parents ac018ea + d2a1bab commit 4a64baa
Show file tree
Hide file tree
Showing 653 changed files with 10,360 additions and 7,444 deletions.
2 changes: 1 addition & 1 deletion CLOBBER
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,4 @@
# changes to stick? As of bug 928195, this shouldn't be necessary! Please
# don't change CLOBBER for WebIDL changes any more.

Bug 911216 - followup from the backout to fix bustage
Bug 911216 - clobber needed
10 changes: 5 additions & 5 deletions accessible/generic/Accessible.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2761,36 +2761,36 @@ KeyBinding::ToPlatformFormat(nsAString& aValue) const
return;

nsAutoString separator;
keyStringBundle->GetStringFromName(MOZ_UTF16("MODIFIER_SEPARATOR"),
keyStringBundle->GetStringFromName(u"MODIFIER_SEPARATOR",
getter_Copies(separator));

nsAutoString modifierName;
if (mModifierMask & kControl) {
keyStringBundle->GetStringFromName(MOZ_UTF16("VK_CONTROL"),
keyStringBundle->GetStringFromName(u"VK_CONTROL",
getter_Copies(modifierName));

aValue.Append(modifierName);
aValue.Append(separator);
}

if (mModifierMask & kAlt) {
keyStringBundle->GetStringFromName(MOZ_UTF16("VK_ALT"),
keyStringBundle->GetStringFromName(u"VK_ALT",
getter_Copies(modifierName));

aValue.Append(modifierName);
aValue.Append(separator);
}

if (mModifierMask & kShift) {
keyStringBundle->GetStringFromName(MOZ_UTF16("VK_SHIFT"),
keyStringBundle->GetStringFromName(u"VK_SHIFT",
getter_Copies(modifierName));

aValue.Append(modifierName);
aValue.Append(separator);
}

if (mModifierMask & kMeta) {
keyStringBundle->GetStringFromName(MOZ_UTF16("VK_META"),
keyStringBundle->GetStringFromName(u"VK_META",
getter_Copies(modifierName));

aValue.Append(modifierName);
Expand Down
2 changes: 1 addition & 1 deletion accessible/generic/ApplicationAccessible.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ ApplicationAccessible::Name(nsString& aName)
return eNameOK;

nsXPIDLString appName;
rv = bundle->GetStringFromName(MOZ_UTF16("brandShortName"),
rv = bundle->GetStringFromName(u"brandShortName",
getter_Copies(appName));
if (NS_FAILED(rv) || appName.IsEmpty()) {
NS_WARNING("brandShortName not found, using default app name");
Expand Down
22 changes: 19 additions & 3 deletions accessible/generic/DocAccessible.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1130,10 +1130,26 @@ DocAccessible::ContentInserted(nsIDocument* aDocument, nsIContent* aContainer,
}

void
DocAccessible::ContentRemoved(nsIDocument* aDocument, nsIContent* aContainer,
nsIContent* aChild, int32_t /* unused */,
nsIContent* aPreviousSibling)
DocAccessible::ContentRemoved(nsIDocument* aDocument,
nsIContent* aContainerNode,
nsIContent* aChildNode, int32_t /* unused */,
nsIContent* aPreviousSiblingNode)
{
#ifdef A11Y_LOG
if (logging::IsEnabled(logging::eTree)) {
logging::MsgBegin("TREE", "DOM content removed; doc: %p", this);
logging::Node("container node", aContainerNode);
logging::Node("content node", aChildNode);
logging::MsgEnd();
}
#endif
// This one and content removal notification from layout may result in
// double processing of same subtrees. If it pops up in profiling, then
// consider reusing a document node cache to reject these notifications early.
Accessible* container = GetAccessibleOrContainer(aContainerNode);
if (container) {
UpdateTreeOnRemoval(container, aChildNode);
}
}

void
Expand Down
1 change: 1 addition & 0 deletions accessible/tests/mochitest/treeupdate/a11y.ini
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ support-files =
[test_bug1100602.html]
[test_bug1175913.html]
[test_bug1189277.html]
[test_bug1276857.html]
[test_canvas.html]
[test_colorpicker.xul]
[test_contextmenu.xul]
Expand Down
143 changes: 143 additions & 0 deletions accessible/tests/mochitest/treeupdate/test_bug1276857.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,143 @@
<!DOCTYPE html>
<html>

<head>
<title>DOM mutations test</title>
<link rel="stylesheet" type="text/css"
href="chrome://mochikit/content/tests/SimpleTest/test.css" />

<script type="application/javascript"
src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>

<script type="application/javascript"
src="../common.js"></script>
<script type="application/javascript"
src="../role.js"></script>
<script type="application/javascript"
src="../events.js"></script>

<script type="application/javascript">
function runTest()
{
// children change will recreate the table
this.eventSeq = [
new invokerChecker(EVENT_REORDER, getNode('c1'))
];

this.invoke = function runTest_invoke() {
var tree = {
SECTION: [ // c1
{ TEXT_LEAF: [] }, // Some text
{ TEXT_CONTAINER: [
{ TEXT_LEAF: [] } // something with ..
] },
{ TEXT_LEAF: [] } // More text
]
};
testAccessibleTree('c1', tree);

getNode('c1_t').querySelector('span').remove();
};

this.finalCheck = function runTest_finalCheck() {
var tree = {
SECTION: [ // c1
{ TEXT_LEAF: [] }, // Some text
{ TEXT_LEAF: [] } // More text
]
};
testAccessibleTree('c1', tree);
};

this.getID = function runTest_getID()
{
return 'child DOM node is removed before the layout notifies the a11y about parent removal/show';
};
}

function runShadowTest()
{
// children change will recreate the table
this.eventSeq = [
new invokerChecker(EVENT_REORDER, 'c2')
];

this.invoke = function runShadowTest_invoke() {
var tree = {
SECTION: [ // c2
{ TEXT_LEAF: [] }, // Some text
{ TEXT_CONTAINER: [
{ TEXT_LEAF: [] } // something with ..
] },
{ TEXT_LEAF: [] } // More text
]
};
testAccessibleTree('c2', tree);

gShadowRoot.firstElementChild.querySelector('span').remove();
};

this.finalCheck = function runShadowTest_finalCheck() {
var tree = {
SECTION: [ // c2
{ TEXT_LEAF: [] }, // Some text
{ TEXT_LEAF: [] } // More text
]
};
testAccessibleTree('c2', tree);
};

this.getID = function runShadowTest_getID() {
return 'child DOM node is removed before the layout notifies the a11y about parent removal/show in shadow DOM';
};
}

//enableLogging("tree");
//gA11yEventDumpToConsole = true;

var gQueue = null;
function doTest()
{
gQueue = new eventQueue();
gQueue.push(new runTest());
gQueue.push(new runShadowTest());
gQueue.invoke(); // will call SimpleTest.finish();
}

SimpleTest.waitForExplicitFinish();
addA11yLoadEvent(doTest);
</script>

</head>

<body>
<p id="display"></p>
<div id="content" style="display: none"></div>
<pre id="test">
</pre>

<div id="c1">
<div id="c1_t" style="display: table" role="presentation">
Some text
<span style="display: table-cell">something with accessibles goes here</span>
More text
</div>
</div>

<template id="tmpl">
<div style="display: table" role="presentation">
Some text
<span style="display: table-cell">something with accessibles goes here</span>
More text
</div>
</template>

<div id="c2"><div id="c2_c" role="presentation"></div></div>

<script>
var gShadowRoot = document.getElementById('c2_c').createShadowRoot();
var tmpl = document.getElementById('tmpl');
gShadowRoot.appendChild(document.importNode(tmpl.content, true));
</script>
</body>
</html>
2 changes: 1 addition & 1 deletion addon-sdk/source/lib/sdk/event/chrome.js
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ function observe(topic) {
// We need to remove any observer added once the add-on is unloaded;
// otherwise we'll get a "dead object" exception.
// See: https://bugzilla.mozilla.org/show_bug.cgi?id=1001833
unload(() => removeObserver(observerChannel, topic));
unload(() => removeObserver(observerChannel, topic), { weak: true });

return observerChannel;
}
Expand Down
32 changes: 27 additions & 5 deletions addon-sdk/source/lib/sdk/system/unload.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,16 +10,33 @@ module.metadata = {
"stability": "experimental"
};

const { Cu } = require('chrome');
const { on, off } = require('./events');
const unloadSubject = require('@loader/unload');

const observers = [];
const unloaders = [];

var when = exports.when = function when(observer) {
if (observers.indexOf(observer) != -1)
return;
observers.unshift(observer);
function WeakObserver(inner) {
this._inner = Cu.getWeakReference(inner);
}

Object.defineProperty(WeakObserver.prototype, 'value', {
get: function() { this._inner.get() }
});

var when = exports.when = function when(observer, opts) {
opts = opts || {};
for (var i = 0; i < observers.length; ++i) {
if (observers[i] === observer || observers[i].value === observer) {
return;
}
}
if (opts.weak) {
observers.unshift(new WeakObserver(observer));
} else {
observers.unshift(observer);
}
};

var ensure = exports.ensure = function ensure(obj, destructorName) {
Expand Down Expand Up @@ -55,7 +72,12 @@ var ensure = exports.ensure = function ensure(obj, destructorName) {
function unload(reason) {
observers.forEach(function(observer) {
try {
observer(reason);
if (observer instanceof WeakObserver) {
observer = observer.value;
}
if (typeof observer === 'function') {
observer(reason);
}
}
catch (error) {
console.exception(error);
Expand Down
1 change: 1 addition & 0 deletions addon-sdk/source/test/leak/jetpack-package.ini
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,4 @@ support-files =

[test-leak-window-events.js]
[test-leak-event-dom-closed-window.js]
[test-leak-event-chrome.js]
1 change: 1 addition & 0 deletions addon-sdk/source/test/leak/leak-utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ function gc() {
Cu.schedulePreciseGC(genGCCallback());
});
}
exports.gc = gc;

// Execute the given test function and verify that we did not leak windows
// in the process. The test function must return a promise or be a generator.
Expand Down
41 changes: 41 additions & 0 deletions addon-sdk/source/test/leak/test-leak-event-chrome.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
/* 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 { gc } = require("./leak-utils");
const { Loader } = require("sdk/test/loader");
const { Cu } = require("chrome");
const { Services } = Cu.import("resource://gre/modules/Services.jsm", {});

exports["test sdk/event/chrome does not leak when not referenced"] = function*(assert) {
let loader = Loader(module);
let { observe } = loader.require("sdk/event/chrome");
let { on } = loader.require("sdk/event/core");

let gotFooEvent = false;
on(observe("test-foo"), "data", function(evt) {
gotFooEvent = true;
});

let bar = observe("test-bar");
let barPromise = new Promise(resolve => {
on(bar, "data", function(evt) {
assert.ok(!gotFooEvent, "should not have gotten test-foo event");
resolve();
});
});

// This should clear the test-foo observer channel because we are not
// holding a reference to it above.
yield gc();

Services.obs.notifyObservers(null, "test-foo", null);
Services.obs.notifyObservers(null, "test-bar", null);

yield barPromise;

loader.unload();
}

require("sdk/test").run(exports);
5 changes: 5 additions & 0 deletions browser/app/moz.build
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,11 @@ if CONFIG['MOZ_SANDBOX'] and CONFIG['OS_ARCH'] == 'WINNT':
'sandbox_s',
]

DELAYLOAD_DLLS += [
'winmm.dll',
'user32.dll',
]

# Control the default heap size.
# This is the heap returned by GetProcessHeap().
# As we use the CRT heap, the default size is too large and wastes VM.
Expand Down
Loading

0 comments on commit 4a64baa

Please sign in to comment.