Merge mozilla-central to mozilla-inbound

This commit is contained in:
Daniel Varga 2019-07-06 12:36:56 +03:00
Родитель dcdb97d5bd 2487eaaf06
Коммит 1ea89eaac8
25 изменённых файлов: 182 добавлений и 252 удалений

2
.gitattributes поставляемый Normal file
Просмотреть файл

@ -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