зеркало из https://github.com/mozilla/gecko-dev.git
Merge mozilla-central to mozilla-inbound
This commit is contained in:
Коммит
1ea89eaac8
|
@ -0,0 +1,2 @@
|
|||
# Prevent line ending normalization to follow the mercurial behavior
|
||||
* -text
|
|
@ -708,6 +708,9 @@
|
|||
"places.history.enabled": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"privacy.file_unique_origin": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"security.default_personal_cert": {
|
||||
"type": "string"
|
||||
},
|
||||
|
|
|
@ -311,6 +311,8 @@ void TextTrackManager::PopulatePendingList() {
|
|||
|
||||
void TextTrackManager::AddListeners() {
|
||||
if (mMediaElement) {
|
||||
mMediaElement->AddEventListener(NS_LITERAL_STRING("resizecaption"), this,
|
||||
false, false);
|
||||
mMediaElement->AddEventListener(NS_LITERAL_STRING("resizevideocontrols"),
|
||||
this, false, false);
|
||||
mMediaElement->AddEventListener(NS_LITERAL_STRING("seeked"), this, false,
|
||||
|
@ -416,14 +418,20 @@ TextTrackManager::HandleEvent(Event* aEvent) {
|
|||
|
||||
nsAutoString type;
|
||||
aEvent->GetType(type);
|
||||
if (type.EqualsLiteral("resizevideocontrols") ||
|
||||
type.EqualsLiteral("seeked")) {
|
||||
WEBVTT_LOG("Handle event %s", NS_ConvertUTF16toUTF8(type).get());
|
||||
|
||||
const bool setDirty = type.EqualsLiteral("seeked") ||
|
||||
type.EqualsLiteral("resizecaption") ||
|
||||
type.EqualsLiteral("resizevideocontrols");
|
||||
const bool updateDisplay = type.EqualsLiteral("controlbarchange") ||
|
||||
type.EqualsLiteral("resizecaption");
|
||||
|
||||
if (setDirty) {
|
||||
for (uint32_t i = 0; i < mTextTracks->Length(); i++) {
|
||||
((*mTextTracks)[i])->SetCuesDirty();
|
||||
}
|
||||
}
|
||||
|
||||
if (type.EqualsLiteral("controlbarchange")) {
|
||||
if (updateDisplay) {
|
||||
UpdateCueDisplay();
|
||||
}
|
||||
|
||||
|
|
|
@ -115,7 +115,7 @@ skip-if(Android&&AndroidVersion=='22') load video-replay-after-audio-end.html #
|
|||
# This needs to run at the end to avoid leaking busted state into other tests.
|
||||
skip-if(Android) load 691096-1.html # Bug 1365451
|
||||
load 1236639.html
|
||||
test-pref(media.navigator.permission.disabled,true) test-pref(media.getusermedia.insecure.enabled,true) test-pref(media.getusermedia.insecure.enabled,true) load 1388372.html
|
||||
test-pref(media.navigator.permission.disabled,true) test-pref(media.devices.insecure.enabled,true) test-pref(media.getusermedia.insecure.enabled,true) load 1388372.html
|
||||
load 1494073.html
|
||||
skip-if(Android) load 1526044.html # Bug 1528391
|
||||
skip-if(Android&&AndroidVersion<21) load encrypted-track-with-bad-sample-description-index.mp4 # Bug 1533211, unkip after bug 1550912
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
default-preferences pref(media.peerconnection.enabled,true) pref(media.navigator.permission.disabled,true) pref(dom.disable_open_during_load,false) pref(media.getusermedia.insecure.enabled,true) pref(media.getusermedia.insecure.enabled,true)
|
||||
default-preferences pref(media.peerconnection.enabled,true) pref(media.navigator.permission.disabled,true) pref(dom.disable_open_during_load,false) pref(media.devices.insecure.enabled,true) pref(media.getusermedia.insecure.enabled,true)
|
||||
|
||||
load 780790.html
|
||||
load 791270.html
|
||||
|
|
|
@ -86,9 +86,9 @@ runTest(async () => {
|
|||
|
||||
src = `data:text/html;base64,${btoa(source)}`;
|
||||
is(await iframeGum({ src, sandbox: "allow-scripts" }),
|
||||
"NotAllowedError", "gUM fails in sandboxed data iframe");
|
||||
"TypeError", "navigator.mediaDevices undefined in sandboxed data iframe");
|
||||
is(await iframeGum({ src, sandbox: "allow-scripts allow-same-origin"}),
|
||||
"NotAllowedError", "gUM fails in regular data iframe");
|
||||
"TypeError", "navigator.mediaDevices undefined in regular data iframe");
|
||||
});
|
||||
</script>
|
||||
</pre>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
<!DOCTYPE HTML>
|
||||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<head>
|
||||
<script type="application/javascript" src="nonTrickleIce.js"></script>
|
||||
|
@ -7,18 +7,21 @@
|
|||
<body>
|
||||
<pre id="test">
|
||||
<script type="application/javascript">
|
||||
createHTML({
|
||||
bug: "1231975",
|
||||
title: "Basic audio-only peer connection with port dependent NAT"
|
||||
});
|
||||
createHTML({
|
||||
bug: "1231975",
|
||||
title: "Basic audio-only peer connection with port dependent NAT"
|
||||
});
|
||||
|
||||
// This test uses the NAT simulator, which doesn't work in https, so we turn
|
||||
// on getUserMedia in http.
|
||||
// This test uses the NAT simulator, which doesn't work in https, so we turn
|
||||
// on getUserMedia in http, which requires a reload.
|
||||
if (!("mediaDevices" in navigator)) {
|
||||
SpecialPowers.pushPrefEnv({set: [['media.devices.insecure.enabled', true]]},
|
||||
() => location.reload());
|
||||
} else {
|
||||
runNetworkTest(async (options = {}) => {
|
||||
await pushPrefs(
|
||||
['media.peerconnection.nat_simulator.filtering_type', 'PORT_DEPENDENT'],
|
||||
['media.peerconnection.nat_simulator.mapping_type', 'PORT_DEPENDENT'],
|
||||
['media.devices.insecure.enabled', true],
|
||||
['media.getusermedia.insecure.enabled', true]);
|
||||
options.expectedLocalCandidateType = "srflx";
|
||||
options.expectedRemoteCandidateType = "relay";
|
||||
|
@ -35,6 +38,7 @@
|
|||
test.setMediaConstraints([{audio: true}], [{audio: true}]);
|
||||
test.run();
|
||||
}, { useIceServer: true });
|
||||
}
|
||||
</script>
|
||||
</pre>
|
||||
</body>
|
||||
|
|
|
@ -6,19 +6,22 @@
|
|||
<body>
|
||||
<pre id="test">
|
||||
<script type="application/javascript">
|
||||
createHTML({
|
||||
bug: "1231975",
|
||||
title: "Basic audio-only peer connection with port dependent NAT that blocks UDP"
|
||||
});
|
||||
createHTML({
|
||||
bug: "1231975",
|
||||
title: "Basic audio-only peer connection with port dependent NAT that blocks UDP"
|
||||
});
|
||||
|
||||
// This test uses the NAT simulator, which doesn't work in https, so we turn
|
||||
// on getUserMedia in http.
|
||||
// This test uses the NAT simulator, which doesn't work in https, so we turn
|
||||
// on getUserMedia in http, which requires a reload.
|
||||
if (!("mediaDevices" in navigator)) {
|
||||
SpecialPowers.pushPrefEnv({set: [['media.devices.insecure.enabled', true]]},
|
||||
() => location.reload());
|
||||
} else {
|
||||
runNetworkTest(async (options = {}) => {
|
||||
await pushPrefs(
|
||||
['media.peerconnection.nat_simulator.filtering_type', 'PORT_DEPENDENT'],
|
||||
['media.peerconnection.nat_simulator.mapping_type', 'PORT_DEPENDENT'],
|
||||
['media.peerconnection.nat_simulator.block_udp', true],
|
||||
['media.devices.insecure.enabled', true],
|
||||
['media.getusermedia.insecure.enabled', true]);
|
||||
options.expectedLocalCandidateType = "relay-tcp";
|
||||
options.expectedRemoteCandidateType = "relay-tcp";
|
||||
|
@ -28,6 +31,7 @@
|
|||
test.setMediaConstraints([{audio: true}], [{audio: true}]);
|
||||
test.run();
|
||||
}, { useIceServer: true });
|
||||
}
|
||||
</script>
|
||||
</pre>
|
||||
</body>
|
||||
|
|
|
@ -6,20 +6,23 @@
|
|||
<body>
|
||||
<pre id="test">
|
||||
<script type="application/javascript">
|
||||
createHTML({
|
||||
bug: "1231975",
|
||||
title: "Basic audio-only peer connection with port dependent NAT that blocks STUN"
|
||||
});
|
||||
createHTML({
|
||||
bug: "1231975",
|
||||
title: "Basic audio-only peer connection with port dependent NAT that blocks STUN"
|
||||
});
|
||||
|
||||
// This test uses the NAT simulator, which doesn't work in https, so we turn
|
||||
// on getUserMedia in http.
|
||||
// This test uses the NAT simulator, which doesn't work in https, so we turn
|
||||
// on getUserMedia in http, which requires a reload.
|
||||
if (!("mediaDevices" in navigator)) {
|
||||
SpecialPowers.pushPrefEnv({set: [['media.devices.insecure.enabled', true]]},
|
||||
() => location.reload());
|
||||
} else {
|
||||
runNetworkTest(async (options = {}) => {
|
||||
await pushPrefs(
|
||||
['media.peerconnection.nat_simulator.filtering_type', 'PORT_DEPENDENT'],
|
||||
['media.peerconnection.nat_simulator.mapping_type', 'PORT_DEPENDENT'],
|
||||
['media.peerconnection.nat_simulator.block_udp', true],
|
||||
['media.peerconnection.nat_simulator.block_tcp', true],
|
||||
['media.devices.insecure.enabled', true],
|
||||
['media.getusermedia.insecure.enabled', true]);
|
||||
options.expectedLocalCandidateType = "relay-tcp";
|
||||
options.expectedRemoteCandidateType = "relay-tcp";
|
||||
|
@ -29,6 +32,7 @@
|
|||
test.setMediaConstraints([{audio: true}], [{audio: true}]);
|
||||
test.run();
|
||||
}, { useIceServer: true });
|
||||
}
|
||||
</script>
|
||||
</pre>
|
||||
</body>
|
||||
|
|
|
@ -7,18 +7,21 @@
|
|||
<body>
|
||||
<pre id="test">
|
||||
<script type="application/javascript">
|
||||
createHTML({
|
||||
bug: "1231975",
|
||||
title: "Basic audio-only peer connection with endpoint independent NAT"
|
||||
});
|
||||
createHTML({
|
||||
bug: "1231975",
|
||||
title: "Basic audio-only peer connection with endpoint independent NAT"
|
||||
});
|
||||
|
||||
// This test uses the NAT simulator in order to get srflx candidates.
|
||||
// It doesn't work in https, so we turn on getUserMedia in http.
|
||||
// This test uses the NAT simulator, which doesn't work in https, so we turn
|
||||
// on getUserMedia in http, which requires a reload.
|
||||
if (!("mediaDevices" in navigator)) {
|
||||
SpecialPowers.pushPrefEnv({set: [['media.devices.insecure.enabled', true]]},
|
||||
() => location.reload());
|
||||
} else {
|
||||
runNetworkTest(async (options = {}) => {
|
||||
await pushPrefs(
|
||||
['media.peerconnection.nat_simulator.filtering_type', 'ENDPOINT_INDEPENDENT'],
|
||||
['media.peerconnection.nat_simulator.mapping_type', 'ENDPOINT_INDEPENDENT'],
|
||||
['media.devices.insecure.enabled', true],
|
||||
['media.getusermedia.insecure.enabled', true]);
|
||||
options.expectedLocalCandidateType = "srflx";
|
||||
options.expectedRemoteCandidateType = "srflx";
|
||||
|
@ -32,6 +35,7 @@
|
|||
test.setMediaConstraints([{audio: true}], [{audio: true}]);
|
||||
test.run();
|
||||
}, { useIceServer: true });
|
||||
}
|
||||
</script>
|
||||
</pre>
|
||||
</body>
|
||||
|
|
|
@ -7,10 +7,35 @@
|
|||
<body>
|
||||
<pre id="test">
|
||||
<script type="application/javascript">
|
||||
createHTML({
|
||||
bug: "1435789",
|
||||
title: "WebRTC local-candidate relayProtocol stats attribute"
|
||||
});
|
||||
createHTML({
|
||||
bug: "1435789",
|
||||
title: "WebRTC local-candidate relayProtocol stats attribute"
|
||||
});
|
||||
|
||||
// This test uses the NAT simulator in order to get srflx candidates.
|
||||
// It doesn't work in https, so we turn on getUserMedia in http, which requires
|
||||
// a reload.
|
||||
if (!("mediaDevices" in navigator)) {
|
||||
SpecialPowers.pushPrefEnv({set: [['media.devices.insecure.enabled', true]]},
|
||||
() => location.reload());
|
||||
} else {
|
||||
runNetworkTest(async (options = {}) => {
|
||||
await pushPrefs(
|
||||
['media.peerconnection.nat_simulator.filtering_type', 'ENDPOINT_INDEPENDENT'],
|
||||
['media.peerconnection.nat_simulator.mapping_type', 'ENDPOINT_INDEPENDENT'],
|
||||
['media.getusermedia.insecure.enabled', true]);
|
||||
const test = new PeerConnectionTest(options);
|
||||
makeOffererNonTrickle(test.chain);
|
||||
makeAnswererNonTrickle(test.chain);
|
||||
|
||||
test.chain.removeAfter("PC_LOCAL_WAIT_FOR_MEDIA_FLOW");
|
||||
test.chain.append([PC_LOCAL_TEST_LOCAL_STATS_RELAYCANDIDATE]);
|
||||
|
||||
test.setMediaConstraints([{ audio: true }], [{ audio: true }]);
|
||||
test.run();
|
||||
}, { useIceServer: true });
|
||||
}
|
||||
|
||||
var PC_LOCAL_TEST_LOCAL_STATS_RELAYCANDIDATE = test => {
|
||||
return test.pcLocal.getStats().then(stats => {
|
||||
let haveRelayProtocol = {};
|
||||
|
@ -29,25 +54,6 @@ var PC_LOCAL_TEST_LOCAL_STATS_RELAYCANDIDATE = test => {
|
|||
is(Object.keys(haveRelayProtocol).length, 4, "All candidate types are accounted for");
|
||||
});
|
||||
}
|
||||
|
||||
// This test uses the NAT simulator in order to get srflx candidates.
|
||||
// It doesn't work in https, so we turn on getUserMedia in http.
|
||||
runNetworkTest(async (options = {}) => {
|
||||
await pushPrefs(
|
||||
['media.peerconnection.nat_simulator.filtering_type', 'ENDPOINT_INDEPENDENT'],
|
||||
['media.peerconnection.nat_simulator.mapping_type', 'ENDPOINT_INDEPENDENT'],
|
||||
['media.devices.insecure.enabled', true],
|
||||
['media.getusermedia.insecure.enabled', true]);
|
||||
const test = new PeerConnectionTest(options);
|
||||
makeOffererNonTrickle(test.chain);
|
||||
makeAnswererNonTrickle(test.chain);
|
||||
|
||||
test.chain.removeAfter("PC_LOCAL_WAIT_FOR_MEDIA_FLOW");
|
||||
test.chain.append([PC_LOCAL_TEST_LOCAL_STATS_RELAYCANDIDATE]);
|
||||
|
||||
test.setMediaConstraints([{ audio: true }], [{ audio: true }]);
|
||||
test.run();
|
||||
}, { useIceServer: true });
|
||||
</script>
|
||||
</pre>
|
||||
</body>
|
||||
|
|
|
@ -634,9 +634,9 @@ var interfaceNamesInGlobalScope = [
|
|||
// IMPORTANT: Do not change this list without review from a DOM peer!
|
||||
{ name: "MediaCapabilitiesInfo", insecureContext: true },
|
||||
// IMPORTANT: Do not change this list without review from a DOM peer!
|
||||
{ name: "MediaDeviceInfo", insecureContext: true },
|
||||
{ name: "MediaDeviceInfo", insecureContext: false },
|
||||
// IMPORTANT: Do not change this list without review from a DOM peer!
|
||||
{ name: "MediaDevices", insecureContext: true },
|
||||
{ name: "MediaDevices", insecureContext: false },
|
||||
// IMPORTANT: Do not change this list without review from a DOM peer!
|
||||
{ name: "MediaElementAudioSourceNode", insecureContext: true },
|
||||
// IMPORTANT: Do not change this list without review from a DOM peer!
|
||||
|
|
|
@ -0,0 +1,30 @@
|
|||
// |jit-test| --no-ggc
|
||||
// Don't crash when two Debugger.Frames refer to the same generator script, and
|
||||
// then one returns.
|
||||
|
||||
var g = newGlobal({ newCompartment: true });
|
||||
g.eval(`
|
||||
function* gen() {
|
||||
debugger;
|
||||
yield 1;
|
||||
}
|
||||
|
||||
function use_gen() {
|
||||
var gen1 = gen();
|
||||
var gen2 = gen();
|
||||
|
||||
gen1.next();
|
||||
gen2.next();
|
||||
|
||||
gen1.next();
|
||||
gen2.next();
|
||||
}
|
||||
`);
|
||||
|
||||
var dbg = new Debugger(g);
|
||||
var frame;
|
||||
dbg.onDebuggerStatement = f => {
|
||||
frame = f;
|
||||
};
|
||||
|
||||
g.use_gen();
|
|
@ -124,18 +124,10 @@ class CrossCompartmentKey {
|
|||
: Debuggee(debugger, referent) {}
|
||||
};
|
||||
|
||||
// Key under which we find debugger's Debugger.Frame for the generator call
|
||||
// whose AbstractGeneratorObject is referent.
|
||||
struct DebuggeeFrameGeneratorScript : Debuggee<JSScript> {
|
||||
DebuggeeFrameGeneratorScript(NativeObject* debugger, JSScript* referent)
|
||||
: Debuggee(debugger, referent) {}
|
||||
};
|
||||
|
||||
using WrappedType =
|
||||
mozilla::Variant<JSObject*, JSString*, DebuggeeObject, DebuggeeJSScript,
|
||||
DebuggeeWasmScript, DebuggeeLazyScript,
|
||||
DebuggeeEnvironment, DebuggeeSource,
|
||||
DebuggeeFrameGenerator, DebuggeeFrameGeneratorScript>;
|
||||
using WrappedType = mozilla::Variant<JSObject*, JSString*, DebuggeeObject,
|
||||
DebuggeeJSScript, DebuggeeWasmScript,
|
||||
DebuggeeLazyScript, DebuggeeEnvironment,
|
||||
DebuggeeSource, DebuggeeFrameGenerator>;
|
||||
|
||||
explicit CrossCompartmentKey(JSObject* obj) : wrapped(obj) {
|
||||
MOZ_RELEASE_ASSERT(obj);
|
||||
|
@ -160,8 +152,6 @@ class CrossCompartmentKey {
|
|||
: wrapped(std::move(key)) {}
|
||||
explicit CrossCompartmentKey(DebuggeeFrameGenerator&& key)
|
||||
: wrapped(std::move(key)) {}
|
||||
explicit CrossCompartmentKey(DebuggeeFrameGeneratorScript&& key)
|
||||
: wrapped(std::move(key)) {}
|
||||
explicit CrossCompartmentKey(NativeObject* debugger, JSScript* referent)
|
||||
: wrapped(DebuggeeJSScript(debugger, referent)) {}
|
||||
explicit CrossCompartmentKey(NativeObject* debugger, LazyScript* referent)
|
||||
|
@ -602,23 +592,22 @@ class JS::Compartment {
|
|||
const js::CrossCompartmentKey& wrapped,
|
||||
const js::Value& wrapper);
|
||||
|
||||
js::WrapperMap::Ptr lookupWrapper(const js::CrossCompartmentKey& key) const {
|
||||
return crossCompartmentWrappers.lookup(key);
|
||||
}
|
||||
|
||||
js::WrapperMap::Ptr lookupWrapper(const js::Value& wrapped) const {
|
||||
return crossCompartmentWrappers.lookup(js::CrossCompartmentKey(wrapped));
|
||||
return lookupWrapper(js::CrossCompartmentKey(wrapped));
|
||||
}
|
||||
|
||||
js::WrapperMap::Ptr lookupWrapper(JSObject* obj) const {
|
||||
return crossCompartmentWrappers.lookup(js::CrossCompartmentKey(obj));
|
||||
return lookupWrapper(js::CrossCompartmentKey(obj));
|
||||
}
|
||||
|
||||
void removeWrapper(js::WrapperMap::Ptr p) {
|
||||
crossCompartmentWrappers.remove(p);
|
||||
}
|
||||
|
||||
void removeWrapper(const js::CrossCompartmentKey& key) {
|
||||
js::WrapperMap::Ptr p = crossCompartmentWrappers.lookup(key);
|
||||
crossCompartmentWrappers.remove(p);
|
||||
}
|
||||
|
||||
bool hasNurseryAllocatedWrapperEntries(const js::CompartmentFilter& f) {
|
||||
return crossCompartmentWrappers.hasNurseryAllocatedWrapperEntries(f);
|
||||
}
|
||||
|
|
|
@ -9026,6 +9026,15 @@ DebuggerFrame* DebuggerFrame::create(JSContext* cx, HandleObject proto,
|
|||
*
|
||||
* Yes, officer, I definitely knew all this in advance and designed it this way
|
||||
* the first time.
|
||||
*
|
||||
* Note that it is not necessary to have a second cross-compartment wrapper
|
||||
* table entry to cover the pointer to the generator's script. The wrapper table
|
||||
* entries play two roles: they help the GC put a debugger zone in the same zone
|
||||
* group as its debuggee, and they serve as roots when collecting the debuggee
|
||||
* zone, but not the debugger zone. Since an AbstractGeneratorObject holds a
|
||||
* strong reference to its callee's script (via the callee), and the AGO and the
|
||||
* script are always in the same compartment, it suffices to add a
|
||||
* cross-compartment wrapper table entry for the Debugger.Frame -> AGO edge.
|
||||
*/
|
||||
class DebuggerFrame::GeneratorInfo {
|
||||
// An unwrapped cross-compartment reference to the generator object.
|
||||
|
@ -9076,7 +9085,7 @@ bool DebuggerFrame::setGenerator(JSContext* cx,
|
|||
return true;
|
||||
}
|
||||
|
||||
// There are five relations we must establish:
|
||||
// There are four relations we must establish:
|
||||
//
|
||||
// 1) The DebuggerFrame must point to the AbstractGeneratorObject.
|
||||
//
|
||||
|
@ -9086,10 +9095,7 @@ bool DebuggerFrame::setGenerator(JSContext* cx,
|
|||
// 3) The compartment's crossCompartmentWrappers map must map this Debugger
|
||||
// and the AbstractGeneratorObject to the DebuggerFrame.
|
||||
//
|
||||
// 4) The compartment's crossCompartmentWrappers map must map this Debugger
|
||||
// and the generator's JSScript to the DebuggerFrame.
|
||||
//
|
||||
// 5) The generator's script's observer count must be bumped.
|
||||
// 4) The generator's script's observer count must be bumped.
|
||||
RootedScript script(cx, genObj->callee().nonLazyScript());
|
||||
auto* info = cx->new_<GeneratorInfo>(genObj, script);
|
||||
if (!info) {
|
||||
|
@ -9109,17 +9115,14 @@ bool DebuggerFrame::setGenerator(JSContext* cx,
|
|||
Rooted<CrossCompartmentKey> generatorKey(
|
||||
cx, CrossCompartmentKey::DebuggeeFrameGenerator(owner()->toJSObject(),
|
||||
genObj));
|
||||
Rooted<CrossCompartmentKey> scriptKey(
|
||||
cx, CrossCompartmentKey::DebuggeeFrameGeneratorScript(
|
||||
owner()->toJSObject(), script));
|
||||
auto crossCompartmentKeysGuard = MakeScopeExit([&] {
|
||||
compartment()->removeWrapper(generatorKey);
|
||||
compartment()->removeWrapper(scriptKey);
|
||||
});
|
||||
if (!compartment()->putWrapper(cx, generatorKey, ObjectValue(*this)) ||
|
||||
!compartment()->putWrapper(cx, scriptKey, ObjectValue(*this))) {
|
||||
if (!compartment()->putWrapper(cx, generatorKey, ObjectValue(*this))) {
|
||||
return false;
|
||||
}
|
||||
auto crossCompartmentKeysGuard = MakeScopeExit([&] {
|
||||
WrapperMap::Ptr generatorPtr = compartment()->lookupWrapper(generatorKey);
|
||||
MOZ_ASSERT(generatorPtr);
|
||||
compartment()->removeWrapper(generatorPtr);
|
||||
});
|
||||
|
||||
{
|
||||
AutoRealm ar(cx, script);
|
||||
|
@ -9144,7 +9147,7 @@ void DebuggerFrame::clearGenerator(FreeOp* fop) {
|
|||
|
||||
GeneratorInfo* info = generatorInfo();
|
||||
|
||||
// 5) The generator's script's observer count must be dropped.
|
||||
// 4) The generator's script's observer count must be dropped.
|
||||
//
|
||||
// For ordinary calls, Debugger.Frame objects drop the script's stepper count
|
||||
// when the frame is popped, but for generators, they leave the stepper count
|
||||
|
@ -9175,21 +9178,15 @@ void DebuggerFrame::clearGenerator(
|
|||
return;
|
||||
}
|
||||
|
||||
// 4) The compartment's crossCompartmentWrappers map must map this Debugger
|
||||
// and the generator's JSScript to the DebuggerFrame.
|
||||
//
|
||||
// 3) The compartment's crossCompartmentWrappers map must map this Debugger
|
||||
// and the AbstractGeneratorObject to the DebuggerFrame.
|
||||
//
|
||||
GeneratorInfo* info = generatorInfo();
|
||||
HeapPtr<JSScript*>& generatorScript = info->generatorScript();
|
||||
CrossCompartmentKey generatorKey(CrossCompartmentKey::DebuggeeFrameGenerator(
|
||||
owner->object, &info->unwrappedGenerator()));
|
||||
CrossCompartmentKey scriptKey(
|
||||
CrossCompartmentKey::DebuggeeFrameGeneratorScript(owner->object,
|
||||
generatorScript));
|
||||
compartment()->removeWrapper(generatorKey);
|
||||
compartment()->removeWrapper(scriptKey);
|
||||
auto generatorPtr = compartment()->lookupWrapper(generatorKey);
|
||||
MOZ_ASSERT(generatorPtr);
|
||||
compartment()->removeWrapper(generatorPtr);
|
||||
|
||||
// 2) generatorFrames must no longer map the AbstractGeneratorObject to the
|
||||
// DebuggerFrame.
|
||||
|
|
|
@ -1528,7 +1528,7 @@ class DebuggerFrame : public NativeObject {
|
|||
*
|
||||
* If provided, owner must be the Debugger to which this Debugger.Frame
|
||||
* belongs; remove this frame's entry from its generatorFrames map, and clean
|
||||
* up its cross-compartment wrapper table entries. The owner must be passed
|
||||
* up its cross-compartment wrapper table entry. The owner must be passed
|
||||
* unless this method is being called from the Debugger.Frame's finalizer. (In
|
||||
* that case, the owner is not reliably available, and is not actually
|
||||
* necessary.)
|
||||
|
|
|
@ -238,18 +238,19 @@ already_AddRefed<Layer> nsVideoFrame::BuildLayer(
|
|||
return result.forget();
|
||||
}
|
||||
|
||||
class DispatchResizeToControls : public Runnable {
|
||||
class DispatchResizeEvent : public Runnable {
|
||||
public:
|
||||
explicit DispatchResizeToControls(nsIContent* aContent)
|
||||
: mozilla::Runnable("DispatchResizeToControls"), mContent(aContent) {}
|
||||
explicit DispatchResizeEvent(nsIContent* aContent, const nsString& aName)
|
||||
: mozilla::Runnable("DispatchResizeEvent"),
|
||||
mContent(aContent),
|
||||
mName(aName) {}
|
||||
NS_IMETHOD Run() override {
|
||||
nsContentUtils::DispatchTrustedEvent(
|
||||
mContent->OwnerDoc(), mContent,
|
||||
NS_LITERAL_STRING("resizevideocontrols"), CanBubble::eNo,
|
||||
Cancelable::eNo);
|
||||
nsContentUtils::DispatchTrustedEvent(mContent->OwnerDoc(), mContent, mName,
|
||||
CanBubble::eNo, Cancelable::eNo);
|
||||
return NS_OK;
|
||||
}
|
||||
nsCOMPtr<nsIContent> mContent;
|
||||
nsString mName;
|
||||
};
|
||||
|
||||
void nsVideoFrame::Reflow(nsPresContext* aPresContext, ReflowOutput& aMetrics,
|
||||
|
@ -354,10 +355,12 @@ void nsVideoFrame::Reflow(nsPresContext* aPresContext, ReflowOutput& aMetrics,
|
|||
FinishReflowChild(child, aPresContext, kidDesiredSize, &kidReflowInput,
|
||||
borderPadding.left, borderPadding.top, 0);
|
||||
|
||||
if (child->GetContent() == videoControlsDiv &&
|
||||
child->GetSize() != oldChildSize) {
|
||||
if (child->GetSize() != oldChildSize) {
|
||||
const nsString name = child->GetContent() == videoControlsDiv
|
||||
? NS_LITERAL_STRING("resizevideocontrols")
|
||||
: NS_LITERAL_STRING("resizecaption");
|
||||
RefPtr<Runnable> event =
|
||||
new DispatchResizeToControls(child->GetContent());
|
||||
new DispatchResizeEvent(child->GetContent(), name);
|
||||
nsContentUtils::AddScriptRunner(event);
|
||||
}
|
||||
} else {
|
||||
|
|
|
@ -47,7 +47,7 @@ class ResultImplementation<V, E, PackingStrategy::Variant> {
|
|||
mozilla::Variant<V, E> mStorage;
|
||||
|
||||
public:
|
||||
explicit ResultImplementation(V aValue) : mStorage(aValue) {}
|
||||
explicit ResultImplementation(const V& aValue) : mStorage(aValue) {}
|
||||
explicit ResultImplementation(E aErrorValue) : mStorage(aErrorValue) {}
|
||||
|
||||
bool isOk() const { return mStorage.template is<V>(); }
|
||||
|
@ -68,7 +68,7 @@ class ResultImplementation<V, E&, PackingStrategy::Variant> {
|
|||
mozilla::Variant<V, E*> mStorage;
|
||||
|
||||
public:
|
||||
explicit ResultImplementation(V aValue) : mStorage(aValue) {}
|
||||
explicit ResultImplementation(const V& aValue) : mStorage(aValue) {}
|
||||
explicit ResultImplementation(E& aErrorValue) : mStorage(&aErrorValue) {}
|
||||
|
||||
bool isOk() const { return mStorage.template is<V>(); }
|
||||
|
@ -300,7 +300,7 @@ class MOZ_MUST_USE_TYPE Result final {
|
|||
/**
|
||||
* Create a success result.
|
||||
*/
|
||||
MOZ_IMPLICIT Result(V aValue) : mImpl(aValue) { MOZ_ASSERT(isOk()); }
|
||||
MOZ_IMPLICIT Result(const V& aValue) : mImpl(aValue) { MOZ_ASSERT(isOk()); }
|
||||
|
||||
/**
|
||||
* Create an error result.
|
||||
|
|
|
@ -6299,7 +6299,7 @@ VARCACHE_PREF(
|
|||
Live,
|
||||
"media.devices.insecure.enabled",
|
||||
media_devices_insecure_enabled,
|
||||
bool, true
|
||||
bool, false
|
||||
)
|
||||
|
||||
// If the above pref is also enabled, this pref enabled getUserMedia() support
|
||||
|
|
|
@ -1218,47 +1218,6 @@ linux-gcp/opt:
|
|||
- linux64-nasm
|
||||
- linux64-node
|
||||
|
||||
linux-gcp-shippable/opt:
|
||||
description: "Linux32 Shippable - built on GCP"
|
||||
attributes:
|
||||
shippable: true
|
||||
enable-full-crashsymbols: true
|
||||
shipping-phase: build
|
||||
shipping-product: firefox
|
||||
index:
|
||||
product: firefox
|
||||
job-name: linux-gcp-opt
|
||||
type: shippable
|
||||
treeherder:
|
||||
platform: linux32-shippable/opt
|
||||
symbol: Bg
|
||||
tier: 3
|
||||
worker-type: gce/gecko-{level}-b-linux
|
||||
worker:
|
||||
docker-image: {in-tree: debian7-i386-build}
|
||||
max-run-time: 7200
|
||||
env:
|
||||
PERFHERDER_EXTRA_OPTIONS: gcp
|
||||
run:
|
||||
using: mozharness
|
||||
actions: [get-secrets, build, check-test]
|
||||
config:
|
||||
- builds/releng_base_firefox.py
|
||||
- builds/releng_base_linux_32_builds.py
|
||||
- taskcluster_nightly.py
|
||||
script: "mozharness/scripts/fx_desktop_build.py"
|
||||
secrets: true
|
||||
tooltool-downloads: public
|
||||
need-xvfb: true
|
||||
toolchains:
|
||||
- linux64-binutils
|
||||
- linux64-clang
|
||||
- linux64-rust
|
||||
- linux64-rust-size
|
||||
- linux64-cbindgen
|
||||
- linux64-nasm
|
||||
- linux64-node
|
||||
|
||||
linux64-gcp/debug:
|
||||
description: "Linux64 Debug - built on GCP"
|
||||
index:
|
||||
|
@ -1333,43 +1292,3 @@ linux64-gcp/opt:
|
|||
- linux64-sccache
|
||||
- linux64-nasm
|
||||
- linux64-node
|
||||
|
||||
linux64-gcp-shippable/opt:
|
||||
description: "Linux64 Shippable - built on GCP"
|
||||
attributes:
|
||||
shippable: true
|
||||
enable-full-crashsymbols: true
|
||||
shipping-phase: build
|
||||
shipping-product: firefox
|
||||
index:
|
||||
product: firefox
|
||||
job-name: linux64-gcp-opt
|
||||
type: shippable
|
||||
treeherder:
|
||||
platform: linux64-shippable/opt
|
||||
symbol: Bg
|
||||
tier: 3
|
||||
worker-type: gce/gecko-{level}-b-linux
|
||||
worker:
|
||||
max-run-time: 7200
|
||||
env:
|
||||
PERFHERDER_EXTRA_OPTIONS: gcp
|
||||
run:
|
||||
using: mozharness
|
||||
actions: [get-secrets, build, check-test]
|
||||
config:
|
||||
- builds/releng_base_firefox.py
|
||||
- builds/releng_base_linux_64_builds.py
|
||||
- taskcluster_nightly.py
|
||||
script: "mozharness/scripts/fx_desktop_build.py"
|
||||
secrets: true
|
||||
tooltool-downloads: public
|
||||
need-xvfb: true
|
||||
toolchains:
|
||||
- linux64-binutils
|
||||
- linux64-clang
|
||||
- linux64-rust
|
||||
- linux64-rust-size
|
||||
- linux64-cbindgen
|
||||
- linux64-nasm
|
||||
- linux64-node
|
||||
|
|
|
@ -456,47 +456,3 @@ macosx64-gcp/opt:
|
|||
- linux64-sccache
|
||||
- linux64-nasm
|
||||
- linux64-node
|
||||
|
||||
macosx64-gcp-shippable/opt:
|
||||
description: "MacOS X x64 Cross-compile - built on GCP"
|
||||
attributes:
|
||||
shippable: true
|
||||
enable-full-crashsymbols: true
|
||||
shipping-phase: build
|
||||
shipping-product: firefox
|
||||
index:
|
||||
product: firefox
|
||||
job-name: macosx64-gcp-opt
|
||||
type: shippable
|
||||
treeherder:
|
||||
platform: osx-shippable/opt
|
||||
symbol: Bg
|
||||
tier: 3
|
||||
worker-type: gce/gecko-{level}-b-linux
|
||||
worker:
|
||||
max-run-time: 7200
|
||||
env:
|
||||
TOOLTOOL_MANIFEST: "browser/config/tooltool-manifests/macosx64/cross-releng.manifest"
|
||||
PERFHERDER_EXTRA_OPTIONS: gcp
|
||||
run:
|
||||
using: mozharness
|
||||
actions: [get-secrets, build]
|
||||
config:
|
||||
- builds/releng_base_firefox.py
|
||||
- builds/releng_base_mac_64_cross_builds.py
|
||||
- taskcluster_nightly.py
|
||||
script: "mozharness/scripts/fx_desktop_build.py"
|
||||
secrets: true
|
||||
tooltool-downloads: internal
|
||||
toolchains:
|
||||
- linux64-binutils
|
||||
- linux64-cctools-port
|
||||
- linux64-clang
|
||||
- linux64-hfsplus
|
||||
- linux64-libdmg
|
||||
- linux64-llvm-dsymutil
|
||||
- linux64-rust-macos
|
||||
- linux64-rust-size
|
||||
- linux64-cbindgen
|
||||
- linux64-nasm
|
||||
- linux64-node
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
[c44-ln-box-001.xht]
|
||||
disabled:
|
||||
if debug and os == "android": https://bugzilla.mozilla.org/show_bug.cgi?id=1553657
|
|
@ -1 +1 @@
|
|||
prefs: [media.navigator.permission.disabled:true, media.navigator.streams.fake:true, media.devices.insecure.enabled:false, dom.security.featurePolicy.enabled:true, dom.security.featurePolicy.header.enabled:true, dom.security.featurePolicy.webidl.enabled:true]
|
||||
prefs: [media.navigator.permission.disabled:true, media.navigator.streams.fake:true, dom.security.featurePolicy.enabled:true, dom.security.featurePolicy.header.enabled:true, dom.security.featurePolicy.webidl.enabled:true]
|
||||
|
|
|
@ -1 +1 @@
|
|||
prefs: [media.navigator.permission.disabled:true, media.navigator.streams.fake:true, media.devices.insecure.enabled:false, dom.security.featurePolicy.enabled:true, dom.security.featurePolicy.header.enabled:true, dom.security.featurePolicy.webidl.enabled:true]
|
||||
prefs: [media.navigator.permission.disabled:true, media.navigator.streams.fake:true, dom.security.featurePolicy.enabled:true, dom.security.featurePolicy.header.enabled:true, dom.security.featurePolicy.webidl.enabled:true]
|
||||
|
|
|
@ -1,4 +1,2 @@
|
|||
[2_cues_overlapping_partially_move_down.html]
|
||||
expected:
|
||||
if (os == "android") and debug: ERROR
|
||||
FAIL
|
||||
expected: FAIL
|
||||
|
|
Загрузка…
Ссылка в новой задаче