зеркало из https://github.com/mozilla/gecko-dev.git
merge autoland to mozilla-central. r=merge a=merge
MozReview-Commit-ID: BVrawNPrB4h
This commit is contained in:
Коммит
054f8a9b40
|
@ -8,6 +8,7 @@ support-files =
|
|||
file_workerPerformance.js
|
||||
head.js
|
||||
|
||||
[browser_block_mozAddonManager.js]
|
||||
[browser_navigator.js]
|
||||
[browser_netInfo.js]
|
||||
[browser_performanceAPI.js]
|
||||
|
|
|
@ -0,0 +1,35 @@
|
|||
/**
|
||||
* Bug 1384330 - A test case for making sure the navigator.mozAddonManager will
|
||||
* be blocked when pref 'privacy.resistFingerprinting.block_mozAddonManager' is true.
|
||||
*/
|
||||
|
||||
const TEST_PATH = "https://example.com/browser/browser/" +
|
||||
"components/resistfingerprinting/test/browser/"
|
||||
|
||||
add_task(async function test() {
|
||||
await SpecialPowers.pushPrefEnv({"set":
|
||||
[["extensions.webapi.testing", true]]
|
||||
});
|
||||
|
||||
for (let pref of [false, true]) {
|
||||
await SpecialPowers.pushPrefEnv({"set":
|
||||
[["privacy.resistFingerprinting.block_mozAddonManager", pref]]
|
||||
});
|
||||
|
||||
let tab = await BrowserTestUtils.openNewForegroundTab(
|
||||
gBrowser, TEST_PATH + "file_dummy.html");
|
||||
|
||||
await ContentTask.spawn(tab.linkedBrowser, pref, function(aPref) {
|
||||
if (aPref) {
|
||||
is(content.navigator.mozAddonManager, undefined,
|
||||
"The navigator.mozAddonManager should not exist when the pref is on.");
|
||||
} else {
|
||||
ok(content.navigator.mozAddonManager,
|
||||
"The navigator.mozAddonManager should exist when the pref is off.");
|
||||
}
|
||||
});
|
||||
|
||||
await BrowserTestUtils.removeTab(tab);
|
||||
await SpecialPowers.popPrefEnv();
|
||||
}
|
||||
});
|
|
@ -889,6 +889,7 @@ html|span.ac-emphasize-text-url {
|
|||
-moz-appearance: none;
|
||||
/* overlap the nav-bar's top border */
|
||||
margin-bottom: calc(-1 * var(--tab-toolbar-navbar-overlap));
|
||||
padding-top: var(--space-above-tabbar);
|
||||
}
|
||||
|
||||
:root:not([customizing]):not([tabsintitlebar]):not([inFullscreen]) #TabsToolbar:not(:-moz-lwtheme) {
|
||||
|
@ -900,7 +901,6 @@ html|span.ac-emphasize-text-url {
|
|||
text-shadow: @loweredShadow@;
|
||||
}
|
||||
|
||||
#main-window[tabsintitlebar] > #titlebar:not(:-moz-lwtheme),
|
||||
:root:-moz-any([inFullscreen], [tabsintitlebar]) #TabsToolbar:not(:-moz-lwtheme) {
|
||||
-moz-appearance: -moz-mac-vibrancy-dark;
|
||||
-moz-font-smoothing-background-color: -moz-mac-vibrancy-dark;
|
||||
|
|
|
@ -3165,11 +3165,14 @@ MediaFormatReader::GetMozDebugReaderData(nsACString& aString)
|
|||
mAudio.mLastStreamSourceID);
|
||||
}
|
||||
|
||||
VideoInfo videoInfo = mVideo.mInfo ? *mVideo.mInfo->GetAsVideoInfo()
|
||||
: *mVideo.mOriginalInfo->GetAsVideoInfo();
|
||||
VideoInfo videoInfo = mVideo.mInfo
|
||||
? *mVideo.mInfo->GetAsVideoInfo()
|
||||
: mVideo.mOriginalInfo
|
||||
? *mVideo.mOriginalInfo->GetAsVideoInfo()
|
||||
: VideoInfo();
|
||||
|
||||
result += nsPrintfCString(
|
||||
"Video Decoder(%s, %dx%d @ %0.2ffps): %s\n",
|
||||
"Video Decoder(%s, %dx%d @ %0.2f): %s\n",
|
||||
videoType.get(),
|
||||
videoInfo.mDisplay.width < 0 ? 0 : videoInfo.mDisplay.width,
|
||||
videoInfo.mDisplay.height < 0 ? 0 : videoInfo.mDisplay.height,
|
||||
|
|
|
@ -441,7 +441,7 @@ public:
|
|||
if (aData->Length() < 8) {
|
||||
return NS_ERROR_NOT_AVAILABLE;
|
||||
}
|
||||
AtomParser parser(mType, aData);
|
||||
AtomParser parser(mType, aData, AtomParser::StopAt::eInitSegment);
|
||||
if (!parser.IsValid()) {
|
||||
return MediaResult(
|
||||
NS_ERROR_FAILURE,
|
||||
|
@ -455,7 +455,7 @@ public:
|
|||
if (aData->Length() < 8) {
|
||||
return NS_ERROR_NOT_AVAILABLE;
|
||||
}
|
||||
AtomParser parser(mType, aData);
|
||||
AtomParser parser(mType, aData, AtomParser::StopAt::eMediaSegment);
|
||||
if (!parser.IsValid()) {
|
||||
return MediaResult(
|
||||
NS_ERROR_FAILURE,
|
||||
|
@ -465,14 +465,24 @@ public:
|
|||
}
|
||||
|
||||
private:
|
||||
class AtomParser {
|
||||
class AtomParser
|
||||
{
|
||||
public:
|
||||
AtomParser(const MediaContainerType& aType, const MediaByteBuffer* aData)
|
||||
enum class StopAt
|
||||
{
|
||||
eInitSegment,
|
||||
eMediaSegment,
|
||||
eEnd
|
||||
};
|
||||
|
||||
AtomParser(const MediaContainerType& aType, const MediaByteBuffer* aData,
|
||||
StopAt aStop = StopAt::eEnd)
|
||||
{
|
||||
const MediaContainerType mType(aType); // for logging macro.
|
||||
mp4_demuxer::ByteReader reader(aData);
|
||||
mp4_demuxer::AtomType initAtom("moov");
|
||||
mp4_demuxer::AtomType mediaAtom("moof");
|
||||
mp4_demuxer::AtomType dataAtom("mdat");
|
||||
|
||||
// Valid top-level boxes defined in ISO/IEC 14496-12 (Table 1)
|
||||
static const mp4_demuxer::AtomType validBoxes[] = {
|
||||
|
@ -511,9 +521,9 @@ private:
|
|||
mp4_demuxer::AtomType(type) == mediaAtom) {
|
||||
mMediaOffset = Some(reader.Offset());
|
||||
}
|
||||
if (mInitOffset.isSome() && mMediaOffset.isSome()) {
|
||||
// We have everything we need.
|
||||
break;
|
||||
if (mDataOffset.isNothing() &&
|
||||
mp4_demuxer::AtomType(type) == dataAtom) {
|
||||
mDataOffset = Some(reader.Offset());
|
||||
}
|
||||
if (size == 1) {
|
||||
// 64 bits size.
|
||||
|
@ -531,6 +541,20 @@ private:
|
|||
break;
|
||||
}
|
||||
reader.Read(size - 8);
|
||||
|
||||
if (aStop == StopAt::eInitSegment && (mInitOffset || mMediaOffset)) {
|
||||
// When we're looking for an init segment, if we encountered a media
|
||||
// segment, it we will need to be processed first. So we can stop
|
||||
// right away if we have found a media segment.
|
||||
break;
|
||||
}
|
||||
if (aStop == StopAt::eMediaSegment &&
|
||||
(mInitOffset || (mMediaOffset && mDataOffset))) {
|
||||
// When we're looking for a media segment, if we encountered an init
|
||||
// segment, it we will need to be processed first. So we can stop
|
||||
// right away if we have found an init segment.
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -549,6 +573,7 @@ private:
|
|||
private:
|
||||
Maybe<size_t> mInitOffset;
|
||||
Maybe<size_t> mMediaOffset;
|
||||
Maybe<size_t> mDataOffset;
|
||||
bool mValid = true;
|
||||
char mLastInvalidBox[5];
|
||||
};
|
||||
|
|
|
@ -7,7 +7,6 @@ extern crate bitflags;
|
|||
extern crate bluetooth_traits;
|
||||
extern crate device;
|
||||
extern crate ipc_channel;
|
||||
#[cfg(target_os = "linux")]
|
||||
extern crate servo_config;
|
||||
extern crate servo_rand;
|
||||
#[cfg(target_os = "linux")]
|
||||
|
@ -26,6 +25,7 @@ use device::bluetooth::{BluetoothGATTDescriptor, BluetoothGATTService};
|
|||
use ipc_channel::ipc::{self, IpcReceiver, IpcSender};
|
||||
#[cfg(target_os = "linux")]
|
||||
use servo_config::opts;
|
||||
use servo_config::prefs::PREFS;
|
||||
use servo_rand::Rng;
|
||||
use std::borrow::ToOwned;
|
||||
use std::collections::{HashMap, HashSet};
|
||||
|
@ -75,7 +75,11 @@ pub trait BluetoothThreadFactory {
|
|||
impl BluetoothThreadFactory for IpcSender<BluetoothRequest> {
|
||||
fn new() -> IpcSender<BluetoothRequest> {
|
||||
let (sender, receiver) = ipc::channel().unwrap();
|
||||
let adapter = BluetoothAdapter::init().ok();
|
||||
let adapter = if Some(true) == PREFS.get("dom.bluetooth.enabled").as_boolean() {
|
||||
BluetoothAdapter::init()
|
||||
} else {
|
||||
BluetoothAdapter::init_mock()
|
||||
}.ok();
|
||||
thread::Builder::new().name("BluetoothThread".to_owned()).spawn(move || {
|
||||
BluetoothManager::new(receiver, adapter).start();
|
||||
}).expect("Thread spawning failed");
|
||||
|
|
|
@ -20,6 +20,12 @@ using namespace mozilla::dom;
|
|||
|
||||
static bool
|
||||
IsValidHost(const nsACString& host) {
|
||||
// This hidden pref allows users to disable mozAddonManager entirely if they want
|
||||
// for fingerprinting resistance. Someone like Tor browser will use this pref.
|
||||
if (Preferences::GetBool("privacy.resistFingerprinting.block_mozAddonManager")) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// This is ugly, but Preferences.h doesn't have support
|
||||
// for default prefs or locked prefs
|
||||
nsCOMPtr<nsIPrefService> prefService (do_GetService(NS_PREFSERVICE_CONTRACTID));
|
||||
|
|
Загрузка…
Ссылка в новой задаче