MozReview-Commit-ID: 7LPTKLiLUcj
This commit is contained in:
Wes Kocher 2017-07-03 17:37:38 -07:00
Родитель 590cfe546d a016e6e84a
Коммит 5226f27e3e
27 изменённых файлов: 21145 добавлений и 20939 удалений

Просмотреть файл

@ -72,7 +72,7 @@
closemenu="none"
tabindex="0"
tooltip="&backCmd.label;"
onclick="document.getBindingParent(this).panelMultiView.goBack()"/>
onclick="document.getBindingParent(this).panelMultiView.goBack(); this.blur()"/>
<xul:label xbl:inherits="value=title"/>
</xul:box>
<children/>

Просмотреть файл

@ -107,51 +107,3 @@
#urlbar-zoom-button > .toolbarbutton-icon {
display: none;
}
/* Page action button */
#urlbar-page-action-button {
-moz-appearance: none;
border-style: none;
list-style-image: url("chrome://browser/skin/page-action.svg");
margin: 0;
padding: 0 6px;
color: inherit;
-moz-context-properties: fill;
fill: currentColor;
}
#urlbar-page-action-button > .toolbarbutton-icon {
width: 16px;
}
#page-action-bookmark-button {
list-style-image: url("chrome://browser/skin/bookmark-hollow.svg");
}
#page-action-bookmark-button[starred] {
list-style-image: url("chrome://browser/skin/bookmark.svg");
}
#page-action-copy-url-button {
list-style-image: url("chrome://browser/skin/link.svg");
}
#page-action-email-link-button {
list-style-image: url("chrome://browser/skin/email-link.svg");
}
#page-action-send-to-device-button {
list-style-image: url("chrome://browser/skin/device-mobile.svg");
}
.page-action-sendToDevice-device[clientType=mobile] {
list-style-image: url("chrome://browser/skin/device-mobile.svg");
}
.page-action-sendToDevice-device[clientType=desktop] {
list-style-image: url("chrome://browser/skin/device-desktop.svg");
}
#page-action-sendToDevice-fxa-button {
list-style-image: url("chrome://browser/skin/sync.svg");
}

Просмотреть файл

@ -2,5 +2,5 @@
- 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/. -->
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
<path fill="context-fill" d="M8 3.6l1 2 .5.9 1 .2 2.3.4-1.7 1.8-.7.7.1 1 .4 2.4-2-1-.9-.5-.9.5-2 1 .4-2.4.1-1-.7-.7-1.7-1.8 2.4-.4 1-.2.4-.9 1-2M8 0c-.3 0-.6.2-.8.7l-2 4.1-4.3.7c-1 .2-1.2.9-.5 1.6l3.1 3.3-.7 4.6c-.1.6.2 1 .7 1a1.421 1.421 0 0 0 .6-.2L8 13.7l3.9 2.1a2.073 2.073 0 0 0 .6.2c.5 0 .8-.4.7-1.1l-.7-4.6L15.6 7c.7-.7.4-1.4-.5-1.6l-4.3-.7-2-4.1A.938.938 0 0 0 8 0z"/>
<path fill-opacity="context-fill-opacity" fill="context-fill" d="M8 3.6l1 2 .5.9 1 .2 2.3.4-1.7 1.8-.7.7.1 1 .4 2.4-2-1-.9-.5-.9.5-2 1 .4-2.4.1-1-.7-.7-1.7-1.8 2.4-.4 1-.2.4-.9 1-2M8 0c-.3 0-.6.2-.8.7l-2 4.1-4.3.7c-1 .2-1.2.9-.5 1.6l3.1 3.3-.7 4.6c-.1.6.2 1 .7 1a1.421 1.421 0 0 0 .6-.2L8 13.7l3.9 2.1a2.073 2.073 0 0 0 .6.2c.5 0 .8-.4.7-1.1l-.7-4.6L15.6 7c.7-.7.4-1.4-.5-1.6l-4.3-.7-2-4.1A.938.938 0 0 0 8 0z"/>
</svg>

До

Ширина:  |  Высота:  |  Размер: 682 B

После

Ширина:  |  Высота:  |  Размер: 718 B

Просмотреть файл

@ -2,5 +2,5 @@
- 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/. -->
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
<path fill="context-fill" d="M8.014 0c-.3 0-.6.2-.8.7l-2 4.1-4.3.7c-1 .2-1.2.9-.5 1.6l3.1 3.3-.7 4.6c-.1.6.2 1 .7 1l.6-.2 3.9-2.1 3.9 2.1.6.2c.5 0 .8-.4.7-1.1l-.7-4.6 3.1-3.3c.7-.7.4-1.4-.5-1.6l-4.3-.7-2-4.1a.9.9 0 0 0-.8-.6z"/>
<path fill-opacity="context-fill-opacity" fill="context-fill" d="M8.014 0c-.3 0-.6.2-.8.7l-2 4.1-4.3.7c-1 .2-1.2.9-.5 1.6l3.1 3.3-.7 4.6c-.1.6.2 1 .7 1l.6-.2 3.9-2.1 3.9 2.1.6.2c.5 0 .8-.4.7-1.1l-.7-4.6 3.1-3.3c.7-.7.4-1.4-.5-1.6l-4.3-.7-2-4.1a.9.9 0 0 0-.8-.6z"/>
</svg>

До

Ширина:  |  Высота:  |  Размер: 534 B

После

Ширина:  |  Высота:  |  Размер: 570 B

Просмотреть файл

@ -2,5 +2,5 @@
- 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/. -->
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16">
<path fill="context-fill" d="M2 6a2 2 0 1 0 2 2 2 2 0 0 0-2-2zm6 0a2 2 0 1 0 2 2 2 2 0 0 0-2-2zm6 0a2 2 0 1 0 2 2 2 2 0 0 0-2-2z"/>
<path fill-opacity="context-fill-opacity" fill="context-fill" d="M2 6a2 2 0 1 0 2 2 2 2 0 0 0-2-2zm6 0a2 2 0 1 0 2 2 2 2 0 0 0-2-2zm6 0a2 2 0 1 0 2 2 2 2 0 0 0-2-2z"/>
</svg>

До

Ширина:  |  Высота:  |  Размер: 417 B

После

Ширина:  |  Высота:  |  Размер: 453 B

Просмотреть файл

@ -49,12 +49,10 @@ toolbar[brighttext] :-moz-any(@primaryToolbarButtons@) {
list-style-image: url("chrome://browser/skin/home.svg");
}
#star-button,
#bookmarks-menu-button[cui-areatype="toolbar"] {
list-style-image: url("chrome://browser/skin/bookmark-hollow.svg");
}
#star-button[starred],
#bookmarks-menu-button[cui-areatype="toolbar"][starred] {
list-style-image: url("chrome://browser/skin/bookmark.svg");
}

Просмотреть файл

@ -64,3 +64,68 @@
-moz-appearance: none;
}
%ifdef MOZ_PHOTON_THEME
/* Page action button */
#urlbar-page-action-button {
-moz-appearance: none;
border-style: none;
list-style-image: url("chrome://browser/skin/page-action.svg");
margin: 0;
padding: 0 6px;
}
#urlbar-page-action-button > .toolbarbutton-icon {
width: 16px;
}
#urlbar-page-action-button,
.urlbar-icon {
-moz-context-properties: fill, fill-opacity;
fill: currentColor;
fill-opacity: 0.6;
color: inherit;
}
#star-button {
list-style-image: url("chrome://browser/skin/bookmark-hollow.svg");
}
#star-button[starred] {
list-style-image: url("chrome://browser/skin/bookmark.svg");
fill-opacity: 1;
fill: var(--toolbarbutton-icon-fill-attention);
}
/* Page action popup */
#page-action-bookmark-button {
list-style-image: url("chrome://browser/skin/bookmark-hollow.svg");
}
#page-action-bookmark-button[starred] {
list-style-image: url("chrome://browser/skin/bookmark.svg");
}
#page-action-copy-url-button {
list-style-image: url("chrome://browser/skin/link.svg");
}
#page-action-email-link-button {
list-style-image: url("chrome://browser/skin/email-link.svg");
}
#page-action-send-to-device-button {
list-style-image: url("chrome://browser/skin/device-mobile.svg");
}
.page-action-sendToDevice-device[clientType=mobile] {
list-style-image: url("chrome://browser/skin/device-mobile.svg");
}
.page-action-sendToDevice-device[clientType=desktop] {
list-style-image: url("chrome://browser/skin/device-desktop.svg");
}
#page-action-sendToDevice-fxa-button {
list-style-image: url("chrome://browser/skin/sync.svg");
}
%endif

Просмотреть файл

@ -9015,23 +9015,24 @@ nsDocument::OnPageShow(bool aPersisted,
UpdateVisibilityState();
nsCOMPtr<EventTarget> target = aDispatchStartTarget;
if (!target) {
target = do_QueryInterface(GetWindow());
}
if (!mIsBeingUsedAsImage) {
// Dispatch observer notification to notify observers page is shown.
nsCOMPtr<nsIObserverService> os = mozilla::services::GetObserverService();
if (os) {
nsIPrincipal *principal = GetPrincipal();
os->NotifyObservers(static_cast<nsIDocument*>(this),
nsContentUtils::IsSystemPrincipal(principal) ?
"chrome-page-shown" :
"content-page-shown",
nullptr);
}
// Dispatch observer notification to notify observers page is shown.
nsCOMPtr<nsIObserverService> os = mozilla::services::GetObserverService();
if (os) {
nsIPrincipal *principal = GetPrincipal();
os->NotifyObservers(static_cast<nsIDocument*>(this),
nsContentUtils::IsSystemPrincipal(principal) ?
"chrome-page-shown" :
"content-page-shown",
nullptr);
nsCOMPtr<EventTarget> target = aDispatchStartTarget;
if (!target) {
target = do_QueryInterface(GetWindow());
}
DispatchPageTransition(target, NS_LITERAL_STRING("pageshow"), aPersisted);
}
DispatchPageTransition(target, NS_LITERAL_STRING("pageshow"), aPersisted);
}
static bool
@ -9106,26 +9107,27 @@ nsDocument::OnPageHide(bool aPersisted,
ExitPointerLock();
// Now send out a PageHide event.
nsCOMPtr<EventTarget> target = aDispatchStartTarget;
if (!target) {
target = do_QueryInterface(GetWindow());
}
if (!mIsBeingUsedAsImage) {
// Dispatch observer notification to notify observers page is hidden.
nsCOMPtr<nsIObserverService> os = mozilla::services::GetObserverService();
if (os) {
nsIPrincipal* principal = GetPrincipal();
os->NotifyObservers(static_cast<nsIDocument*>(this),
nsContentUtils::IsSystemPrincipal(principal) ?
"chrome-page-hidden" :
"content-page-hidden",
nullptr);
}
// Dispatch observer notification to notify observers page is hidden.
nsCOMPtr<nsIObserverService> os = mozilla::services::GetObserverService();
if (os) {
nsIPrincipal* principal = GetPrincipal();
os->NotifyObservers(static_cast<nsIDocument*>(this),
nsContentUtils::IsSystemPrincipal(principal) ?
"chrome-page-hidden" :
"content-page-hidden",
nullptr);
}
{
PageUnloadingEventTimeStamp timeStamp(this);
DispatchPageTransition(target, NS_LITERAL_STRING("pagehide"), aPersisted);
// Now send out a PageHide event.
nsCOMPtr<EventTarget> target = aDispatchStartTarget;
if (!target) {
target = do_QueryInterface(GetWindow());
}
{
PageUnloadingEventTimeStamp timeStamp(this);
DispatchPageTransition(target, NS_LITERAL_STRING("pagehide"), aPersisted);
}
}
mVisible = false;

Просмотреть файл

@ -82,7 +82,7 @@ HTTP(..) == disable-sheet-1.html disable-sheet-1-ref.html
HTTP(..) == disable-sheet-4.html disable-sheet-4-ref.html
skip-if(styloVsGecko) HTTP(..) == disable-sheet-5.html disable-sheet-4-ref.html
HTTP(..) == sheet-set-base-1.html sheet-set-base-1-ref.html
random-if(cocoaWidget) skip-if(styloVsGecko) HTTP(..) == sheet-set-switch-1.html sheet-set-switch-1-ref.html # bug 468217
random-if(cocoaWidget) HTTP(..) == sheet-set-switch-1.html sheet-set-switch-1-ref.html # bug 468217
skip-if(styloVsGecko) HTTP(..) == insert-rule-1a.html insert-rule-1-ref.html
skip-if(styloVsGecko) HTTP(..) == insert-rule-1b.html insert-rule-1-ref.html
skip-if(styloVsGecko) HTTP(..) == delete-rule-1.html delete-rule-1-ref.html

Просмотреть файл

@ -0,0 +1,7 @@
<!doctype html>
<style>
div::before {
content: "Woof";
}
</style>
<div></div>

Просмотреть файл

@ -0,0 +1,14 @@
<!doctype html>
<style>
div::before {
content: none;
}
.foo::before {
content: "Woof";
}
</style>
<div></div>
<script>
document.body.offsetTop;
document.querySelector('div').classList.add('foo');
</script>

Просмотреть файл

@ -18,3 +18,4 @@ fuzzy-if(OSX==1010,1,10) == table-ignoring-whitespace-01.html table-ignoring-whi
fuzzy-if(OSX==1010,1,10) == table-parts-01.html table-parts-01-ref.html
== before-style-sharing.html before-style-sharing-ref.html
== transitive-style-invalidation.html transitive-style-invalidation-ref.html
== dynamic-content.html dynamic-content-ref.html

Просмотреть файл

@ -258,6 +258,7 @@ skip-if = android_version == '18' #debug-only failure; timed out #Android 4.3 aw
[test_pseudoelement_parsing.html]
[test_redundant_font_download.html]
support-files = redundant_font_download.sjs
[test_reframe_pseudo_element.html]
[test_rem_unit.html]
[test_restyle_table_wrapper.html]
[test_restyles_in_smil_animation.html]

Просмотреть файл

@ -0,0 +1,33 @@
<!doctype html>
<meta charset="utf-8">
<title>
Test for bug 1376352: We don't reframe all the time a replaced element that
matches generated content rules.
</title>
<link rel="author" href="mailto:emilio@crisal.io" title="Emilio Cobos Álvarez">
<script src="/tests/SimpleTest/SimpleTest.js"></script>
<style>
input::before {
content: "Foo";
}
</style>
<input type="text">
<script>
SimpleTest.waitForExplicitFinish();
const utils = SpecialPowers.getDOMWindowUtils(window);
document.documentElement.offsetTop;
const input = document.querySelector('input');
const previousConstructCount = utils.framesConstructed;
const previousRestyleGeneration = utils.restyleGeneration;
input.style.color = "blue";
document.documentElement.offsetTop;
isnot(previousRestyleGeneration, utils.restyleGeneration,
"We should have restyled");
is(previousConstructCount, utils.framesConstructed,
"We shouldn't have reframed");
SimpleTest.finish();
</script>

Просмотреть файл

@ -901,6 +901,8 @@ MP4MetadataRust::GetTrackInfo(mozilla::TrackInfo::TrackType aType,
case mp4parse_codec_VP9: codec_string = "vp9"; break;
case mp4parse_codec_MP3: codec_string = "mp3"; break;
case mp4parse_codec_MP4V: codec_string = "mp4v"; break;
case mp4parse_codec_AC3: codec_string = "ac-3"; break;
case mp4parse_codec_EC3: codec_string = "ec-3"; break;
}
MOZ_LOG(sLog, LogLevel::Debug, ("track codec %s (%u)\n",
codec_string, info.codec));

Просмотреть файл

@ -39,6 +39,9 @@ typedef enum mp4parse_codec {
mp4parse_codec_VP9,
mp4parse_codec_MP3,
mp4parse_codec_MP4V,
mp4parse_codec_JPEG,
mp4parse_codec_AC3,
mp4parse_codec_EC3,
} mp4parse_codec;
typedef struct mp4parse_track_info {

Просмотреть файл

@ -137,4 +137,9 @@ box_database!(
OriginalFormatBox 0x66726d61, // "frma"
MP3AudioSampleEntry 0x2e6d7033, // ".mp3" - from F4V.
CompositionOffsetBox 0x63747473, // "ctts"
JPEGAtom 0x6a706567, // "jpeg" - QT JPEG
AC3SampleEntry 0x61632d33, // "ac-3"
EC3SampleEntry 0x65632d33, // "ec-3"
AC3SpecificBox 0x64616333, // "dac3"
EC3SpecificBox 0x64656333, // "dec3"
);

Просмотреть файл

@ -267,6 +267,8 @@ pub enum AudioCodecSpecific {
ES_Descriptor(ES_Descriptor),
FLACSpecificBox(FLACSpecificBox),
OpusSpecificBox(OpusSpecificBox),
AC3SpecificBox,
EC3SpecificBox,
MP3,
}
@ -285,6 +287,7 @@ pub enum VideoCodecSpecific {
AVCConfig(Vec<u8>),
VPxConfig(VPxConfigBox),
ESDSConfig(Vec<u8>),
JPEG,
}
#[derive(Debug, Clone)]
@ -413,6 +416,9 @@ pub enum CodecType {
VP8,
EncryptedVideo,
EncryptedAudio,
JPEG, // QT JPEG atom
AC3, // Digital Audio Compression (AC-3, Enhanced AC-3) Standard, ETSI TS 102 366.
EC3, // Digital Audio Compression (AC-3, Enhanced AC-3) Standard, ETSI TS 102 366.
}
impl Default for CodecType {
@ -1668,6 +1674,7 @@ fn read_video_sample_entry<T: Read>(src: &mut BMFFBox<T>) -> Result<(CodecType,
BoxType::VP8SampleEntry => CodecType::VP8,
BoxType::VP9SampleEntry => CodecType::VP9,
BoxType::ProtectedVisualSampleEntry => CodecType::EncryptedVideo,
BoxType::JPEGAtom => CodecType::JPEG,
_ => CodecType::Unknown,
};
@ -1686,7 +1693,11 @@ fn read_video_sample_entry<T: Read>(src: &mut BMFFBox<T>) -> Result<(CodecType,
skip(src, 50)?;
// Skip clap/pasp/etc. for now.
let mut codec_specific = None;
let mut codec_specific = if name == BoxType::JPEGAtom {
Some(VideoCodecSpecific::JPEG)
} else {
None
};
let mut protection_info = Vec::new();
let mut iter = src.box_iter();
while let Some(mut b) = iter.next_box()? {
@ -1723,6 +1734,11 @@ fn read_video_sample_entry<T: Read>(src: &mut BMFFBox<T>) -> Result<(CodecType,
let esds = read_buf(&mut b.content, esds_size as usize)?;
codec_specific = Some(VideoCodecSpecific::ESDSConfig(esds));
}
BoxType::JPEGAtom => {
if name != BoxType::JPEGAtom || codec_specific.is_some() {
return Err(Error::InvalidData("malformed video sample entry"));
}
}
BoxType::ProtectionSchemeInformationBox => {
if name != BoxType::ProtectedVisualSampleEntry {
return Err(Error::InvalidData("malformed video sample entry"));
@ -1853,6 +1869,26 @@ fn read_audio_sample_entry<T: Read>(src: &mut BMFFBox<T>) -> Result<(CodecType,
codec_type = CodecType::EncryptedAudio;
protection_info.push(sinf);
}
BoxType::AC3SpecificBox => {
if name != BoxType::AC3SampleEntry {
return Err(Error::InvalidData("malformed AC3 sample entry"));
}
// TODO: AC3SpecificBox needs to be parsed for detail information.
skip_box_remain(&mut b)?;
log!("(ac3)");
codec_type = CodecType::AC3;
codec_specific = Some(AudioCodecSpecific::AC3SpecificBox);
}
BoxType::EC3SpecificBox => {
if name != BoxType::EC3SpecificBox {
return Err(Error::InvalidData("malformed EC3 sample entry"));
}
// TODO: EC3SpecificBox needs to be parsed for detail information.
skip_box_remain(&mut b)?;
log!("(ec3)");
codec_type = CodecType::EC3;
codec_specific = Some(AudioCodecSpecific::EC3SpecificBox);
}
_ => skip_box_content(&mut b)?,
}
check_parser_state!(b.content);

Просмотреть файл

@ -900,6 +900,31 @@ fn read_esds() {
assert_eq!(es.decoder_specific_data, aac_dc_descriptor);
}
#[test]
fn read_ac3_sample_entry() {
let ac3 =
vec![
0x00, 0x00, 0x00, 0x0b, 0x64, 0x61, 0x63, 0x33, 0x10, 0x11, 0x60
];
let mut stream = make_box(BoxSize::Auto, b"ac-3", |s| {
s.append_repeated(0, 6)
.B16(1) // data_reference_count
.B16(0)
.append_repeated(0, 6)
.B16(2)
.B16(16)
.append_repeated(0, 4)
.B32(48000 << 16)
.append_bytes(ac3.as_slice())
});
let mut iter = super::BoxIter::new(&mut stream);
let mut stream = iter.next_box().unwrap().unwrap();
let (codec_type, _) = super::read_audio_sample_entry(&mut stream)
.expect("fail to read ac3 atom");
assert_eq!(codec_type, super::CodecType::AC3);
}
#[test]
fn read_stsd_mp4v() {
let mp4v =
@ -1011,3 +1036,38 @@ fn max_table_limit() {
_ => panic!("expected a different error result"),
}
}
#[test]
fn jpeg_video_sample_entry() {
let jpeg = make_box(BoxSize::Auto, b"jpeg", |s| {
s.append_repeated(0, 6)
.B16(1)
.append_repeated(0, 16)
.B16(1024)
.B16(1024)
.append_repeated(0, 14)
.append_repeated(0, 32)
.append_repeated(0, 4)
}).into_inner();
let mut stream = make_fullbox(BoxSize::Auto, b"stsd", 0, |s| {
s.B32(1)
.append_bytes(jpeg.as_slice())
});
let mut iter = super::BoxIter::new(&mut stream);
let mut stream = iter.next_box().unwrap().unwrap();
let mut track = super::Track::new(0);
match super::read_stsd(&mut stream, &mut track) {
Ok(sample_description) => {
match sample_description.descriptions[0] {
super::SampleEntry::Video(ref jpeg) => {
assert_eq!(track.codec_type, super::CodecType::JPEG);
assert_eq!(jpeg.height, 1024);
assert_eq!(jpeg.width, 1024);
} ,
_ => {},
}
},
_ => panic!("failed to parse a jpeg atom"),
}
}

Просмотреть файл

@ -60,6 +60,9 @@ fn public_api() {
assert!(!mp4v.is_empty());
"MP4V"
}
mp4::VideoCodecSpecific::JPEG => {
"JPEG"
}
}, "AVC");
}
Some(mp4::SampleEntry::Audio(a)) => {
@ -99,6 +102,12 @@ fn public_api() {
mp4::AudioCodecSpecific::MP3 => {
"MP3"
}
mp4::AudioCodecSpecific::AC3SpecificBox => {
"AC3"
}
mp4::AudioCodecSpecific::EC3SpecificBox => {
"EC3"
}
}, "ES");
assert!(a.samplesize > 0);
assert!(a.samplerate > 0);

Просмотреть файл

@ -95,6 +95,9 @@ pub enum mp4parse_codec {
VP9,
MP3,
MP4V,
JPEG, // for QT JPEG atom in video track
AC3,
EC3,
}
impl Default for mp4parse_codec {
@ -428,6 +431,10 @@ pub unsafe extern fn mp4parse_get_track_info(parser: *mut mp4parse_parser, track
mp4parse_codec::UNKNOWN,
AudioCodecSpecific::MP3 =>
mp4parse_codec::MP3,
AudioCodecSpecific::AC3SpecificBox =>
mp4parse_codec::AC3,
AudioCodecSpecific::EC3SpecificBox =>
mp4parse_codec::EC3,
},
Some(SampleEntry::Video(ref video)) => match video.codec_specific {
VideoCodecSpecific::VPxConfig(_) =>
@ -436,6 +443,8 @@ pub unsafe extern fn mp4parse_get_track_info(parser: *mut mp4parse_parser, track
mp4parse_codec::AVC,
VideoCodecSpecific::ESDSConfig(_) =>
mp4parse_codec::MP4V,
VideoCodecSpecific::JPEG =>
mp4parse_codec::JPEG,
},
_ => mp4parse_codec::UNKNOWN,
};
@ -564,6 +573,8 @@ pub unsafe extern fn mp4parse_get_track_audio_info(parser: *mut mp4parse_parser,
}
}
}
AudioCodecSpecific::AC3SpecificBox => (),
AudioCodecSpecific::EC3SpecificBox => (),
AudioCodecSpecific::MP3 => (),
}
@ -944,19 +955,9 @@ fn create_sample_table(track: &Track, track_offset_time: i64) -> Option<Vec<mp4p
// ctts_offset is the current sample offset time.
let ctts_offset = ctts_offset_iter.next_offset_time();
// ctts_offset could be negative but (decode_time + ctts_offset) should always be positive
// value.
let start_composition = track_time_to_us(decode_time + ctts_offset, timescale).and_then(|t| {
if t < 0 { return None; }
Some(t)
});
let start_composition = track_time_to_us(decode_time + ctts_offset, timescale);
// ctts_offset could be negative but (sum_delta + ctts_offset) should always be positive
// value.
let end_composition = track_time_to_us(sum_delta + ctts_offset, timescale).and_then(|t| {
if t < 0 { return None; }
Some(t)
});
let end_composition = track_time_to_us(sum_delta + ctts_offset, timescale);
let start_decode = track_time_to_us(decode_time, timescale);

Просмотреть файл

@ -2,7 +2,7 @@
# Script to update mp4parse-rust sources to latest upstream
# Default version.
VER=5bff34a85f2c0b1f147798ea701f7b704e651ae8
VER=ae58bb5063cde8018d51c1778a52392777ddb0d4
# Accept version or commit from the command line.
if test -n "$1"; then

Просмотреть файл

@ -1149,4 +1149,4 @@ static const TransportSecurityPreload kPublicKeyPinningPreloadList[] = {
static const int32_t kUnknownId = -1;
static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1507477004924000);
static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1507563805584000);

Разница между файлами не показана из-за своего большого размера Загрузить разницу

Разница между файлами не показана из-за своего большого размера Загрузить разницу

Просмотреть файл

@ -1309,8 +1309,6 @@ impl<'le> TElement for GeckoElement<'le> {
existing_transitions: &HashMap<TransitionProperty,
Arc<AnimationValue>>)
-> bool {
use properties::animated_properties::AnimatedProperty;
// |property| should be an animatable longhand
let animatable_longhand = AnimatableLonghand::from_transition_property(property).unwrap();
@ -1324,10 +1322,12 @@ impl<'le> TElement for GeckoElement<'le> {
return existing_transitions.get(property).unwrap() != &after_value;
}
combined_duration > 0.0f32 &&
AnimatedProperty::from_animatable_longhand(&animatable_longhand,
before_change_style,
after_change_style).does_animate()
let from = AnimationValue::from_computed_values(&animatable_longhand,
before_change_style);
let to = AnimationValue::from_computed_values(&animatable_longhand,
after_change_style);
combined_duration > 0.0f32 && from != to
}
#[inline]

Просмотреть файл

@ -1576,23 +1576,30 @@ pub trait MatchMethods : TElement {
}
if pseudo.map_or(false, |p| p.is_before_or_after()) {
if (old_style_is_display_none ||
old_values.ineffective_content_property()) &&
(new_style_is_display_none ||
new_values.ineffective_content_property()) {
// The pseudo-element will remain undisplayed, so just avoid
// triggering any change.
return StyleDifference::new(RestyleDamage::empty(), StyleChange::Unchanged)
let old_style_generates_no_pseudo =
old_style_is_display_none ||
old_values.ineffective_content_property();
let new_style_generates_no_pseudo =
new_style_is_display_none ||
new_values.ineffective_content_property();
if old_style_generates_no_pseudo != new_style_generates_no_pseudo {
return StyleDifference::new(RestyleDamage::reconstruct(), StyleChange::Changed)
}
// FIXME(bz): This will keep reframing replaced elements. Do we
// need this at all? Seems like if we add/remove ::before or
// ::after styles we would get reframed over in match_pseudos and if
// that part didn't change and we had no frame for the
// ::before/::after then we don't care. Need to double-check that
// we handle the "content" and "display" properties changing
// correctly, though.
// https://bugzilla.mozilla.org/show_bug.cgi?id=1376352
return StyleDifference::new(RestyleDamage::reconstruct(), StyleChange::Changed)
// The pseudo-element will remain undisplayed, so just avoid
// triggering any change.
//
// NOTE(emilio): We will only arrive here for pseudo-elements that
// aren't generated (see the is_existing_before_or_after check in
// accumulate_damage).
//
// However, it may be the case that the style of this element would
// make us think we need a pseudo, but we don't, like for pseudos in
// replaced elements, that's why we need the old != new instead of
// just check whether the new style would generate a pseudo.
return StyleDifference::new(RestyleDamage::empty(), StyleChange::Unchanged)
}
if pseudo.map_or(false, |p| p.is_first_letter()) {