зеркало из https://github.com/mozilla/gecko-dev.git
merge mozilla-central to autoland. r=merge a=merge
This commit is contained in:
Коммит
aa75559a2f
|
@ -109,6 +109,4 @@ jobs:
|
|||
by-project:
|
||||
# No default branch
|
||||
mozilla-central:
|
||||
# Buildbot start time is 10:02am UTC, until we are able to
|
||||
# disable buildbot scheduling, use +12h
|
||||
- {hour: 22, minute: 0}
|
||||
- {hour: 10, minute: 0}
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
* 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/. */
|
||||
|
||||
#include "mozilla/a11y/AccessibleHandler.h"
|
||||
#include "mozilla/a11y/Compatibility.h"
|
||||
#include "mozilla/a11y/PlatformChild.h"
|
||||
#include "mozilla/mscom/EnsureMTA.h"
|
||||
|
@ -12,6 +13,7 @@
|
|||
#include "Accessible2.h"
|
||||
#include "Accessible2_2.h"
|
||||
#include "AccessibleHypertext2.h"
|
||||
#include "AccessibleTable2.h"
|
||||
#include "AccessibleTableCell.h"
|
||||
|
||||
#include "AccessibleHypertext2_i.c"
|
||||
|
@ -28,15 +30,18 @@ namespace a11y {
|
|||
static const mozilla::mscom::ArrayData sPlatformChildArrayData[] = {
|
||||
{IID_IEnumVARIANT, 3, 1, VT_DISPATCH, IID_IDispatch, 2},
|
||||
{IID_IAccessible2, 30, 1, VT_UNKNOWN | VT_BYREF, IID_IAccessibleRelation, 2},
|
||||
{IID_IAccessibleRelation, 7, 1, VT_UNKNOWN | VT_BYREF, IID_IUnknown, 2},
|
||||
{IID_IAccessible2_2, 48, 2, VT_UNKNOWN | VT_BYREF, IID_IUnknown, 3,
|
||||
{IID_IAccessibleRelation, 7, 1, VT_UNKNOWN | VT_BYREF, NEWEST_IA2_IID, 2},
|
||||
{IID_IAccessible2_2, 48, 2, VT_UNKNOWN | VT_BYREF, NEWEST_IA2_IID, 3,
|
||||
mozilla::mscom::ArrayData::Flag::eAllocatedByServer},
|
||||
{IID_IAccessibleTableCell, 4, 0, VT_UNKNOWN | VT_BYREF, IID_IUnknown, 1,
|
||||
{IID_IAccessibleTableCell, 4, 0, VT_UNKNOWN | VT_BYREF, NEWEST_IA2_IID, 1,
|
||||
mozilla::mscom::ArrayData::Flag::eAllocatedByServer},
|
||||
{IID_IAccessibleTableCell, 7, 0, VT_UNKNOWN | VT_BYREF, IID_IUnknown, 1,
|
||||
{IID_IAccessibleTableCell, 7, 0, VT_UNKNOWN | VT_BYREF, NEWEST_IA2_IID, 1,
|
||||
mozilla::mscom::ArrayData::Flag::eAllocatedByServer},
|
||||
{IID_IAccessibleHypertext2, 25, 0, VT_UNKNOWN | VT_BYREF, IID_IUnknown, 1,
|
||||
mozilla::mscom::ArrayData::Flag::eAllocatedByServer}
|
||||
{IID_IAccessibleHypertext2, 25, 0, VT_UNKNOWN | VT_BYREF,
|
||||
IID_IAccessibleHyperlink, 1,
|
||||
mozilla::mscom::ArrayData::Flag::eAllocatedByServer},
|
||||
{IID_IAccessibleTable2, 12, 0, VT_UNKNOWN | VT_BYREF,
|
||||
NEWEST_IA2_IID, 1, mozilla::mscom::ArrayData::Flag::eAllocatedByServer}
|
||||
};
|
||||
|
||||
// Type libraries are thread-neutral, so we can register those from any
|
||||
|
|
|
@ -1625,6 +1625,15 @@
|
|||
const textToSubURI = Components.classes["@mozilla.org/intl/texttosuburi;1"]
|
||||
.getService(Components.interfaces.nsITextToSubURI);
|
||||
title = textToSubURI.unEscapeNonAsciiURI(characterSet, title);
|
||||
// If it's a long data: URI that uses base64 encoding, truncate to
|
||||
// a reasonable length rather than trying to display the entire thing.
|
||||
// We can't shorten arbitrary URIs like this, as bidi etc might mean
|
||||
// we need the trailing characters for display. But a base64-encoded
|
||||
// data-URI is plain ASCII, so this is OK for tab-title display.
|
||||
// (See bug 1408854.)
|
||||
if (title.length > 500 && title.match(/^data:[^,]+;base64,/)) {
|
||||
title = title.substring(0, 500) + "\u2026";
|
||||
}
|
||||
} catch (ex) { /* Do nothing. */ }
|
||||
} else {
|
||||
// Still no title? Fall back to our untitled string.
|
||||
|
|
|
@ -628,6 +628,15 @@ nsNodeUtils::CloneAndAdopt(nsINode *aNode, bool aClone, bool aDeep,
|
|||
}
|
||||
}
|
||||
|
||||
if (aNodesWithProperties && aNode->HasProperties()) {
|
||||
bool ok = aNodesWithProperties->AppendObject(aNode);
|
||||
MOZ_RELEASE_ASSERT(ok, "Out of memory");
|
||||
if (aClone) {
|
||||
ok = aNodesWithProperties->AppendObject(clone);
|
||||
MOZ_RELEASE_ASSERT(ok, "Out of memory");
|
||||
}
|
||||
}
|
||||
|
||||
if (aDeep && (!aClone || !aNode->IsNodeOfType(nsINode::eATTRIBUTE))) {
|
||||
// aNode's children.
|
||||
for (nsIContent* cloneChild = aNode->GetFirstChild();
|
||||
|
@ -687,18 +696,6 @@ nsNodeUtils::CloneAndAdopt(nsINode *aNode, bool aClone, bool aDeep,
|
|||
}
|
||||
#endif
|
||||
|
||||
if (aNodesWithProperties && aNode->HasProperties()) {
|
||||
bool ok = aNodesWithProperties->AppendObject(aNode);
|
||||
if (aClone) {
|
||||
ok = ok && aNodesWithProperties->AppendObject(clone);
|
||||
}
|
||||
|
||||
if (NS_WARN_IF(!ok)) {
|
||||
aError.Throw(NS_ERROR_OUT_OF_MEMORY);
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
return clone.forget();
|
||||
}
|
||||
|
||||
|
|
|
@ -7835,7 +7835,7 @@ fail-if = (os == 'android' && android_version == '10')
|
|||
[generated/test_conformance__glsl__misc__shader-precision-format-obeyed.html]
|
||||
[generated/test_conformance__glsl__misc__shader-struct-scope.html]
|
||||
[generated/test_conformance__glsl__misc__shader-uniform-packing-restrictions.html]
|
||||
skip-if = (os == 'android') || (os == 'win' && os_version == '6.1' && debug)
|
||||
skip-if = (os == 'android') || (os == 'win' && os_version == '6.1' && debug) || (os == 'linux' && debug)
|
||||
[generated/test_conformance__glsl__misc__shader-varying-packing-restrictions.html]
|
||||
[generated/test_conformance__glsl__misc__shader-with-256-character-define.html]
|
||||
[generated/test_conformance__glsl__misc__shader-with-256-character-identifier.frag.html]
|
||||
|
|
|
@ -533,8 +533,8 @@ skip-if = (os == 'android')
|
|||
[generated/test_conformance__context__context-release-with-workers.html]
|
||||
skip-if = (os == 'android')
|
||||
[generated/test_conformance__glsl__misc__shader-uniform-packing-restrictions.html]
|
||||
# Frequent timeout on win7 debug.
|
||||
skip-if = (os == 'android') || (os == 'win' && os_version == '6.1' && debug)
|
||||
# Frequent timeout on win7 and linux debug.
|
||||
skip-if = (os == 'android') || (os == 'win' && os_version == '6.1' && debug) || (os == 'linux' && debug)
|
||||
[generated/test_conformance__glsl__bugs__complex-glsl-does-not-crash.html]
|
||||
skip-if = (os == 'android')
|
||||
|
||||
|
|
|
@ -237,7 +237,7 @@ public:
|
|||
|
||||
bool Activated() const
|
||||
{
|
||||
return mActivated;
|
||||
return mStream;
|
||||
}
|
||||
|
||||
bool Stopped() const
|
||||
|
@ -266,10 +266,6 @@ public:
|
|||
PrincipalHandle GetPrincipalHandle() const;
|
||||
|
||||
private:
|
||||
// true after this listener has been Activate()d in a WindowListener.
|
||||
// MainThread only.
|
||||
bool mActivated;
|
||||
|
||||
// true after this listener has had all devices stopped. MainThread only.
|
||||
bool mStopped;
|
||||
|
||||
|
@ -3545,8 +3541,7 @@ MediaManager::IsActivelyCapturingOrHasAPermission(uint64_t aWindowId)
|
|||
}
|
||||
|
||||
SourceListener::SourceListener()
|
||||
: mActivated(false)
|
||||
, mStopped(false)
|
||||
: mStopped(false)
|
||||
, mFinished(false)
|
||||
, mRemoved(false)
|
||||
, mAudioStopped(false)
|
||||
|
@ -3565,7 +3560,7 @@ SourceListener::Register(GetUserMediaWindowListener* aListener)
|
|||
MOZ_ASSERT(false, "Already registered");
|
||||
return;
|
||||
}
|
||||
if (mActivated) {
|
||||
if (Activated()) {
|
||||
MOZ_ASSERT(false, "Already activated");
|
||||
return;
|
||||
}
|
||||
|
@ -3586,12 +3581,16 @@ SourceListener::Activate(SourceMediaStream* aStream,
|
|||
|
||||
LOG(("SourceListener %p activating audio=%p video=%p", this, aAudioDevice, aVideoDevice));
|
||||
|
||||
if (mActivated) {
|
||||
if (mStopped) {
|
||||
MOZ_ASSERT(false, "Cannot activate stopped source listener");
|
||||
return;
|
||||
}
|
||||
|
||||
if (Activated()) {
|
||||
MOZ_ASSERT(false, "Already activated");
|
||||
return;
|
||||
}
|
||||
|
||||
mActivated = true;
|
||||
mMainThreadCheck = GetCurrentVirtualThread();
|
||||
mStream = aStream;
|
||||
mAudioDevice = aAudioDevice;
|
||||
|
@ -3616,13 +3615,24 @@ SourceListener::Stop()
|
|||
|
||||
mStopped = true;
|
||||
|
||||
if (!Activated()) {
|
||||
MOZ_ASSERT(false, "There are no devices or any source stream to stop");
|
||||
return;
|
||||
}
|
||||
|
||||
if (mAudioDevice && !mAudioStopped) {
|
||||
StopTrack(kAudioTrack);
|
||||
}
|
||||
if (mVideoDevice && !mVideoStopped) {
|
||||
StopTrack(kVideoTrack);
|
||||
}
|
||||
RefPtr<SourceMediaStream> source = GetSourceStream();
|
||||
|
||||
RefPtr<SourceMediaStream> source = mStream;
|
||||
if (!source) {
|
||||
MOZ_ASSERT(false, "Can't end tracks. No source stream.");
|
||||
return;
|
||||
}
|
||||
|
||||
MediaManager::PostTask(NewTaskFrom([source]() {
|
||||
MOZ_ASSERT(MediaManager::IsInMediaThread());
|
||||
source->EndAllTrackAndFinish();
|
||||
|
@ -3653,7 +3663,11 @@ SourceListener::StopTrack(TrackID aTrackID)
|
|||
MOZ_ASSERT(NS_IsMainThread(), "Only call on main thread");
|
||||
|
||||
RefPtr<MediaDevice> device;
|
||||
RefPtr<SourceMediaStream> source;
|
||||
|
||||
if (!Activated()) {
|
||||
MOZ_ASSERT(false, "No device to stop");
|
||||
return;
|
||||
}
|
||||
|
||||
switch (aTrackID) {
|
||||
case kAudioTrack: {
|
||||
|
@ -3667,7 +3681,6 @@ SourceListener::StopTrack(TrackID aTrackID)
|
|||
return;
|
||||
}
|
||||
device = mAudioDevice;
|
||||
source = GetSourceStream();
|
||||
mAudioStopped = true;
|
||||
break;
|
||||
}
|
||||
|
@ -3682,7 +3695,6 @@ SourceListener::StopTrack(TrackID aTrackID)
|
|||
return;
|
||||
}
|
||||
device = mVideoDevice;
|
||||
source = GetSourceStream();
|
||||
mVideoStopped = true;
|
||||
break;
|
||||
}
|
||||
|
@ -3692,6 +3704,7 @@ SourceListener::StopTrack(TrackID aTrackID)
|
|||
}
|
||||
}
|
||||
|
||||
RefPtr<SourceMediaStream> source = mStream;
|
||||
MediaManager::PostTask(NewTaskFrom([device, source, aTrackID]() {
|
||||
device->GetSource()->Stop(source, aTrackID);
|
||||
device->Deallocate();
|
||||
|
@ -3748,10 +3761,7 @@ SourceMediaStream*
|
|||
SourceListener::GetSourceStream()
|
||||
{
|
||||
NS_ASSERTION(mStream,"Getting stream from never-activated SourceListener");
|
||||
if (!mStream) {
|
||||
return nullptr;
|
||||
}
|
||||
return mStream->AsSourceStream();
|
||||
return mStream;
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -3856,7 +3866,7 @@ SourceListener::NotifyRemoved()
|
|||
LOG(("SourceListener removed, mFinished = %d", (int) mFinished));
|
||||
mRemoved = true;
|
||||
|
||||
if (!mFinished) {
|
||||
if (Activated() && !mFinished) {
|
||||
NotifyFinished();
|
||||
}
|
||||
|
||||
|
@ -3867,7 +3877,7 @@ bool
|
|||
SourceListener::CapturingVideo() const
|
||||
{
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
return mActivated && mVideoDevice && !mVideoStopped &&
|
||||
return Activated() && mVideoDevice && !mVideoStopped &&
|
||||
!mVideoDevice->GetSource()->IsAvailable() &&
|
||||
mVideoDevice->GetMediaSource() == dom::MediaSourceEnum::Camera &&
|
||||
(!mVideoDevice->GetSource()->IsFake() ||
|
||||
|
@ -3878,7 +3888,7 @@ bool
|
|||
SourceListener::CapturingAudio() const
|
||||
{
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
return mActivated && mAudioDevice && !mAudioStopped &&
|
||||
return Activated() && mAudioDevice && !mAudioStopped &&
|
||||
!mAudioDevice->GetSource()->IsAvailable() &&
|
||||
(!mAudioDevice->GetSource()->IsFake() ||
|
||||
Preferences::GetBool("media.navigator.permission.fake"));
|
||||
|
@ -3888,7 +3898,7 @@ bool
|
|||
SourceListener::CapturingScreen() const
|
||||
{
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
return mActivated && mVideoDevice && !mVideoStopped &&
|
||||
return Activated() && mVideoDevice && !mVideoStopped &&
|
||||
!mVideoDevice->GetSource()->IsAvailable() &&
|
||||
mVideoDevice->GetMediaSource() == dom::MediaSourceEnum::Screen;
|
||||
}
|
||||
|
@ -3897,7 +3907,7 @@ bool
|
|||
SourceListener::CapturingWindow() const
|
||||
{
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
return mActivated && mVideoDevice && !mVideoStopped &&
|
||||
return Activated() && mVideoDevice && !mVideoStopped &&
|
||||
!mVideoDevice->GetSource()->IsAvailable() &&
|
||||
mVideoDevice->GetMediaSource() == dom::MediaSourceEnum::Window;
|
||||
}
|
||||
|
@ -3906,7 +3916,7 @@ bool
|
|||
SourceListener::CapturingApplication() const
|
||||
{
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
return mActivated && mVideoDevice && !mVideoStopped &&
|
||||
return Activated() && mVideoDevice && !mVideoStopped &&
|
||||
!mVideoDevice->GetSource()->IsAvailable() &&
|
||||
mVideoDevice->GetMediaSource() == dom::MediaSourceEnum::Application;
|
||||
}
|
||||
|
@ -3915,7 +3925,7 @@ bool
|
|||
SourceListener::CapturingBrowser() const
|
||||
{
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
return mActivated && mVideoDevice && !mVideoStopped &&
|
||||
return Activated() && mVideoDevice && !mVideoStopped &&
|
||||
!mVideoDevice->GetSource()->IsAvailable() &&
|
||||
mVideoDevice->GetMediaSource() == dom::MediaSourceEnum::Browser;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,71 @@
|
|||
/* Any copyright is dedicated to the Public Domain.
|
||||
http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
// test nonsecure third party persistence across sessions, for the cases:
|
||||
// 1) network.cookie.thirdparty.nonsecureSessionOnly = false
|
||||
// 2) network.cookie.thirdparty.nonsecureSessionOnly = true
|
||||
|
||||
"use strict";
|
||||
|
||||
var test_generator = do_run_test();
|
||||
|
||||
function run_test() {
|
||||
do_test_pending();
|
||||
test_generator.next();
|
||||
}
|
||||
|
||||
function finish_test() {
|
||||
do_execute_soon(function() {
|
||||
test_generator.return();
|
||||
do_test_finished();
|
||||
});
|
||||
}
|
||||
|
||||
function* do_run_test() {
|
||||
// Set up a profile.
|
||||
let profile = do_get_profile();
|
||||
|
||||
// Create URIs and channels pointing to foo.com and bar.com.
|
||||
// We will use these to put foo.com into first and third party contexts.
|
||||
var spec1 = "http://foo.com/foo.html";
|
||||
var spec2 = "https://bar.com/bar.html";
|
||||
var uri1 = NetUtil.newURI(spec1);
|
||||
var uri2 = NetUtil.newURI(spec2);
|
||||
var channel1 = NetUtil.newChannel({uri: uri1, loadUsingSystemPrincipal: true});
|
||||
var channel2 = NetUtil.newChannel({uri: uri2, loadUsingSystemPrincipal: true});
|
||||
|
||||
// Force the channel URI to be used when determining the originating URI of
|
||||
// the channel.
|
||||
var httpchannel1 = channel1.QueryInterface(Ci.nsIHttpChannelInternal);
|
||||
var httpchannel2 = channel2.QueryInterface(Ci.nsIHttpChannelInternal);
|
||||
httpchannel1.forceAllowThirdPartyCookie = true;
|
||||
httpchannel2.forceAllowThirdPartyCookie = true;
|
||||
|
||||
// test with cookies enabled and nonsecure third party cookies persistent.
|
||||
Services.prefs.setIntPref("network.cookie.cookieBehavior", 0);
|
||||
Services.prefs.setBoolPref("network.cookie.thirdparty.nonsecureSessionOnly", false);
|
||||
do_set_cookies(uri1, channel2, false, [1, 2, 3, 4]); // third-party HTTP
|
||||
do_set_cookies(uri2, channel1, false, [1, 2, 3, 4]); // third-party HTTPS
|
||||
|
||||
// fake a profile change
|
||||
do_close_profile(test_generator);
|
||||
yield;
|
||||
do_load_profile();
|
||||
do_check_eq(Services.cookies.countCookiesFromHost(uri1.host), 4); // HTTP cookies OK
|
||||
do_check_eq(Services.cookies.countCookiesFromHost(uri2.host), 4); // HTTPS cookies OK
|
||||
|
||||
// test with nonsecure third party cookies for session only.
|
||||
Services.prefs.setBoolPref("network.cookie.thirdparty.nonsecureSessionOnly", true);
|
||||
Services.cookies.removeAll();
|
||||
do_set_cookies(uri1, channel2, false, [1, 2, 3, 4]); // third-party HTTP
|
||||
do_set_cookies(uri2, channel1, false, [1, 2, 3, 4]); // third-party HTTPS
|
||||
|
||||
// fake a profile change
|
||||
do_close_profile(test_generator);
|
||||
yield;
|
||||
do_load_profile();
|
||||
do_check_eq(Services.cookies.countCookiesFromHost(uri1.host), 0); // no HTTP cookies!
|
||||
do_check_eq(Services.cookies.countCookiesFromHost(uri2.host), 4); // HTTPS cookies OK
|
||||
|
||||
finish_test();
|
||||
}
|
|
@ -13,6 +13,7 @@ skip-if = true # Bug 863738
|
|||
[test_cookies_read.js]
|
||||
[test_cookies_sync_failure.js]
|
||||
[test_cookies_thirdparty.js]
|
||||
[test_cookies_thirdparty_nonsecure_session.js]
|
||||
[test_cookies_thirdparty_session.js]
|
||||
[test_domain_eviction.js]
|
||||
[test_eviction.js]
|
||||
|
|
|
@ -54,11 +54,6 @@ parent:
|
|||
WebRenderScrollData aScrollData,
|
||||
OpUpdateResource[] aResourceUpdates, Shmem[] aSmallShmems, Shmem[] aLargeShmems,
|
||||
IdNamespace aIdNamespace, TimeStamp txnStartTime, TimeStamp fwdTime);
|
||||
sync SetDisplayListSync(IntSize aSize, WebRenderParentCommand[] commands, OpDestroy[] toDestroy, uint64_t fwdTransactionId, uint64_t transactionId,
|
||||
LayoutSize aContentSize, ByteBuffer aDL, BuiltDisplayListDescriptor aDLDesc,
|
||||
WebRenderScrollData aScrollData,
|
||||
OpUpdateResource[] aResourceUpdates, Shmem[] aSmallShmems, Shmem[] aLargeShmems,
|
||||
IdNamespace aIdNamespace, TimeStamp txnStartTime, TimeStamp fwdTime);
|
||||
async EmptyTransaction(FocusTarget focusTarget,
|
||||
WebRenderParentCommand[] commands, OpDestroy[] toDestroy, uint64_t fwdTransactionId, uint64_t transactionId,
|
||||
IdNamespace aIdNamespace, TimeStamp txnStartTime, TimeStamp fwdTime);
|
||||
|
|
|
@ -272,7 +272,10 @@ AsyncImagePipelineManager::ApplyAsyncImages()
|
|||
// We don't need to update the display list, either because we can't or because
|
||||
// the previous one is still up to date.
|
||||
// We may, however, have updated some resources.
|
||||
mApi->UpdateResources(resourceUpdates);
|
||||
mApi->UpdatePipelineResources(resourceUpdates, pipelineId, epoch);
|
||||
if (pipeline->mCurrentTexture) {
|
||||
HoldExternalImage(pipelineId, epoch, pipeline->mCurrentTexture->AsWebRenderTextureHost());
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
|
|
|
@ -122,7 +122,6 @@ WebRenderBridgeChild::EndTransaction(const wr::LayoutSize& aContentSize,
|
|||
wr::BuiltDisplayList& aDL,
|
||||
wr::IpcResourceUpdateQueue& aResources,
|
||||
const gfx::IntSize& aSize,
|
||||
bool aIsSync,
|
||||
uint64_t aTransactionId,
|
||||
const WebRenderScrollData& aScrollData,
|
||||
const mozilla::TimeStamp& aTxnStartTime)
|
||||
|
@ -142,19 +141,11 @@ WebRenderBridgeChild::EndTransaction(const wr::LayoutSize& aContentSize,
|
|||
nsTArray<ipc::Shmem> largeShmems;
|
||||
aResources.Flush(resourceUpdates, smallShmems, largeShmems);
|
||||
|
||||
if (aIsSync) {
|
||||
this->SendSetDisplayListSync(aSize, mParentCommands, mDestroyedActors,
|
||||
GetFwdTransactionId(), aTransactionId,
|
||||
aContentSize, dlData, aDL.dl_desc, aScrollData,
|
||||
Move(resourceUpdates), Move(smallShmems), Move(largeShmems),
|
||||
mIdNamespace, aTxnStartTime, fwdTime);
|
||||
} else {
|
||||
this->SendSetDisplayList(aSize, mParentCommands, mDestroyedActors,
|
||||
GetFwdTransactionId(), aTransactionId,
|
||||
aContentSize, dlData, aDL.dl_desc, aScrollData,
|
||||
Move(resourceUpdates), Move(smallShmems), Move(largeShmems),
|
||||
mIdNamespace, aTxnStartTime, fwdTime);
|
||||
}
|
||||
this->SendSetDisplayList(aSize, mParentCommands, mDestroyedActors,
|
||||
GetFwdTransactionId(), aTransactionId,
|
||||
aContentSize, dlData, aDL.dl_desc, aScrollData,
|
||||
Move(resourceUpdates), Move(smallShmems), Move(largeShmems),
|
||||
mIdNamespace, aTxnStartTime, fwdTime);
|
||||
|
||||
mParentCommands.Clear();
|
||||
mDestroyedActors.Clear();
|
||||
|
|
|
@ -73,7 +73,7 @@ public:
|
|||
wr::BuiltDisplayList& dl,
|
||||
wr::IpcResourceUpdateQueue& aResources,
|
||||
const gfx::IntSize& aSize,
|
||||
bool aIsSync, uint64_t aTransactionId,
|
||||
uint64_t aTransactionId,
|
||||
const WebRenderScrollData& aScrollData,
|
||||
const mozilla::TimeStamp& aTxnStartTime);
|
||||
void EndEmptyTransaction(const FocusTarget& aFocusTarget,
|
||||
|
|
|
@ -590,30 +590,6 @@ WebRenderBridgeParent::RecvSetDisplayList(const gfx::IntSize& aSize,
|
|||
return IPC_OK();
|
||||
}
|
||||
|
||||
mozilla::ipc::IPCResult
|
||||
WebRenderBridgeParent::RecvSetDisplayListSync(const gfx::IntSize &aSize,
|
||||
InfallibleTArray<WebRenderParentCommand>&& aCommands,
|
||||
InfallibleTArray<OpDestroy>&& aToDestroy,
|
||||
const uint64_t& aFwdTransactionId,
|
||||
const uint64_t& aTransactionId,
|
||||
const wr::LayoutSize& aContentSize,
|
||||
const wr::ByteBuffer& dl,
|
||||
const wr::BuiltDisplayListDescriptor& dlDesc,
|
||||
const WebRenderScrollData& aScrollData,
|
||||
nsTArray<OpUpdateResource>&& aResourceUpdates,
|
||||
nsTArray<ipc::Shmem>&& aSmallShmems,
|
||||
nsTArray<ipc::Shmem>&& aLargeShmems,
|
||||
const wr::IdNamespace& aIdNamespace,
|
||||
const TimeStamp& aTxnStartTime,
|
||||
const TimeStamp& aFwdTime)
|
||||
{
|
||||
return RecvSetDisplayList(aSize, Move(aCommands), Move(aToDestroy),
|
||||
aFwdTransactionId, aTransactionId,
|
||||
aContentSize, dl, dlDesc, aScrollData,
|
||||
Move(aResourceUpdates), Move(aSmallShmems), Move(aLargeShmems),
|
||||
aIdNamespace, aTxnStartTime, aFwdTime);
|
||||
}
|
||||
|
||||
mozilla::ipc::IPCResult
|
||||
WebRenderBridgeParent::RecvEmptyTransaction(const FocusTarget& aFocusTarget,
|
||||
InfallibleTArray<WebRenderParentCommand>&& aCommands,
|
||||
|
|
|
@ -91,21 +91,6 @@ public:
|
|||
const wr::IdNamespace& aIdNamespace,
|
||||
const TimeStamp& aTxnStartTime,
|
||||
const TimeStamp& aFwdTime) override;
|
||||
mozilla::ipc::IPCResult RecvSetDisplayListSync(const gfx::IntSize& aSize,
|
||||
InfallibleTArray<WebRenderParentCommand>&& aCommands,
|
||||
InfallibleTArray<OpDestroy>&& aToDestroy,
|
||||
const uint64_t& aFwdTransactionId,
|
||||
const uint64_t& aTransactionId,
|
||||
const wr::LayoutSize& aContentSize,
|
||||
const wr::ByteBuffer& dl,
|
||||
const wr::BuiltDisplayListDescriptor& dlDesc,
|
||||
const WebRenderScrollData& aScrollData,
|
||||
nsTArray<OpUpdateResource>&& aResourceUpdates,
|
||||
nsTArray<ipc::Shmem>&& aSmallShmems,
|
||||
nsTArray<ipc::Shmem>&& aLargeShmems,
|
||||
const wr::IdNamespace& aIdNamespace,
|
||||
const TimeStamp& aTxnStartTime,
|
||||
const TimeStamp& aFwdTime) override;
|
||||
mozilla::ipc::IPCResult RecvEmptyTransaction(const FocusTarget& aFocusTarget,
|
||||
InfallibleTArray<WebRenderParentCommand>&& aCommands,
|
||||
InfallibleTArray<OpDestroy>&& aToDestroy,
|
||||
|
|
|
@ -188,6 +188,7 @@ WebRenderImageHost::SetCurrentTextureHost(TextureHost* aTexture)
|
|||
}
|
||||
|
||||
if (mWrBridge &&
|
||||
!mAsyncRef &&
|
||||
!!mCurrentTextureHost &&
|
||||
mCurrentTextureHost != aTexture &&
|
||||
mCurrentTextureHost->AsWebRenderTextureHost()) {
|
||||
|
|
|
@ -299,7 +299,6 @@ WebRenderLayerManager::EndTransactionWithoutLayer(nsDisplayList* aDisplayList,
|
|||
mScrollData.SetPaintSequenceNumber(mPaintSequenceNumber);
|
||||
}
|
||||
|
||||
bool sync = mTarget != nullptr;
|
||||
mLatestTransactionId = mTransactionIdAllocator->GetTransactionId(/*aThrottle*/ true);
|
||||
TimeStamp transactionStart = mTransactionIdAllocator->GetTransactionStart();
|
||||
|
||||
|
@ -323,9 +322,8 @@ WebRenderLayerManager::EndTransactionWithoutLayer(nsDisplayList* aDisplayList,
|
|||
mLastDisplayListSize = dl.dl.inner.capacity;
|
||||
|
||||
{
|
||||
AUTO_PROFILER_TRACING("Paint", sync ? "ForwardDPTransactionSync"
|
||||
: "ForwardDPTransaction");
|
||||
WrBridge()->EndTransaction(contentSize, dl, resourceUpdates, size.ToUnknownSize(), sync,
|
||||
AUTO_PROFILER_TRACING("Paint", "ForwardDPTransaction");
|
||||
WrBridge()->EndTransaction(contentSize, dl, resourceUpdates, size.ToUnknownSize(),
|
||||
mLatestTransactionId, mScrollData, transactionStart);
|
||||
}
|
||||
|
||||
|
|
|
@ -2975,7 +2975,7 @@ gfxFont::SplitAndInitTextRun(DrawTarget *aDrawTarget,
|
|||
uint32_t aRunStart, // position in the textrun
|
||||
uint32_t aRunLength,
|
||||
Script aRunScript,
|
||||
bool aVertical)
|
||||
ShapedTextFlags aOrientation)
|
||||
{
|
||||
if (aRunLength == 0) {
|
||||
return true;
|
||||
|
@ -3002,6 +3002,9 @@ gfxFont::SplitAndInitTextRun(DrawTarget *aDrawTarget,
|
|||
uint32_t wordCacheCharLimit =
|
||||
gfxPlatform::GetPlatform()->WordCacheCharLimit();
|
||||
|
||||
bool vertical =
|
||||
aOrientation == ShapedTextFlags::TEXT_ORIENT_VERTICAL_UPRIGHT;
|
||||
|
||||
// If spaces can participate in shaping (e.g. within lookups for automatic
|
||||
// fractions), need to shape without using the word cache which segments
|
||||
// textruns on space boundaries. Word cache can be used if the textrun
|
||||
|
@ -3012,7 +3015,7 @@ gfxFont::SplitAndInitTextRun(DrawTarget *aDrawTarget,
|
|||
TEXT_PERF_INCR(tp, wordCacheSpaceRules);
|
||||
return ShapeTextWithoutWordCache(aDrawTarget, aString,
|
||||
aRunStart, aRunLength,
|
||||
aRunScript, aVertical,
|
||||
aRunScript, vertical,
|
||||
rounding, aTextRun);
|
||||
}
|
||||
}
|
||||
|
@ -3065,7 +3068,7 @@ gfxFont::SplitAndInitTextRun(DrawTarget *aDrawTarget,
|
|||
aRunStart + wordStart,
|
||||
length,
|
||||
aRunScript,
|
||||
aVertical,
|
||||
vertical,
|
||||
rounding,
|
||||
aTextRun);
|
||||
if (!ok) {
|
||||
|
@ -3083,7 +3086,7 @@ gfxFont::SplitAndInitTextRun(DrawTarget *aDrawTarget,
|
|||
}
|
||||
gfxShapedWord* sw = GetShapedWord(aDrawTarget,
|
||||
aString + wordStart, length,
|
||||
hash, aRunScript, aVertical,
|
||||
hash, aRunScript, vertical,
|
||||
appUnitsPerDevUnit,
|
||||
wordFlags, rounding, tp);
|
||||
if (sw) {
|
||||
|
@ -3095,16 +3098,12 @@ gfxFont::SplitAndInitTextRun(DrawTarget *aDrawTarget,
|
|||
|
||||
if (boundary) {
|
||||
// word was terminated by a space: add that to the textrun
|
||||
gfx::ShapedTextFlags orientation =
|
||||
flags & gfx::ShapedTextFlags::TEXT_ORIENT_MASK;
|
||||
if (orientation == gfx::ShapedTextFlags::TEXT_ORIENT_VERTICAL_MIXED) {
|
||||
orientation = aVertical ?
|
||||
gfx::ShapedTextFlags::TEXT_ORIENT_VERTICAL_UPRIGHT :
|
||||
gfx::ShapedTextFlags::TEXT_ORIENT_VERTICAL_SIDEWAYS_RIGHT;
|
||||
}
|
||||
MOZ_ASSERT(aOrientation !=
|
||||
ShapedTextFlags::TEXT_ORIENT_VERTICAL_MIXED,
|
||||
"text-orientation:mixed should be resolved earlier");
|
||||
if (boundary != ' ' ||
|
||||
!aTextRun->SetSpaceGlyphIfSimple(this, aRunStart + i, ch,
|
||||
orientation)) {
|
||||
aOrientation)) {
|
||||
// Currently, the only "boundary" characters we recognize are
|
||||
// space and no-break space, which are both 8-bit, so we force
|
||||
// that flag (below). If we ever change IsBoundarySpace, we
|
||||
|
@ -3115,7 +3114,7 @@ gfxFont::SplitAndInitTextRun(DrawTarget *aDrawTarget,
|
|||
gfxShapedWord *sw =
|
||||
GetShapedWord(aDrawTarget, &boundary, 1,
|
||||
gfxShapedWord::HashMix(0, boundary),
|
||||
aRunScript, aVertical, appUnitsPerDevUnit,
|
||||
aRunScript, vertical, appUnitsPerDevUnit,
|
||||
flags | gfx::ShapedTextFlags::TEXT_IS_8BIT,
|
||||
rounding, tp);
|
||||
if (sw) {
|
||||
|
@ -3149,7 +3148,7 @@ gfxFont::SplitAndInitTextRun(DrawTarget *aDrawTarget,
|
|||
if (GetFontEntry()->IsUserFont() && HasCharacter(ch)) {
|
||||
ShapeFragmentWithoutWordCache(aDrawTarget, aString + i,
|
||||
aRunStart + i, 1,
|
||||
aRunScript, aVertical,
|
||||
aRunScript, vertical,
|
||||
rounding, aTextRun);
|
||||
} else {
|
||||
aTextRun->SetMissingGlyph(aRunStart + i, ch, this);
|
||||
|
@ -3172,7 +3171,7 @@ gfxFont::SplitAndInitTextRun(DrawTarget *aDrawTarget,
|
|||
uint32_t aRunStart,
|
||||
uint32_t aRunLength,
|
||||
Script aRunScript,
|
||||
bool aVertical);
|
||||
ShapedTextFlags aOrientation);
|
||||
template bool
|
||||
gfxFont::SplitAndInitTextRun(DrawTarget *aDrawTarget,
|
||||
gfxTextRun *aTextRun,
|
||||
|
@ -3180,7 +3179,7 @@ gfxFont::SplitAndInitTextRun(DrawTarget *aDrawTarget,
|
|||
uint32_t aRunStart,
|
||||
uint32_t aRunLength,
|
||||
Script aRunScript,
|
||||
bool aVertical);
|
||||
ShapedTextFlags aOrientation);
|
||||
|
||||
template<>
|
||||
bool
|
||||
|
@ -3211,8 +3210,6 @@ gfxFont::InitFakeSmallCapsRun(DrawTarget *aDrawTarget,
|
|||
|
||||
RunCaseAction runAction = kNoChange;
|
||||
uint32_t runStart = 0;
|
||||
bool vertical =
|
||||
aOrientation == gfx::ShapedTextFlags::TEXT_ORIENT_VERTICAL_UPRIGHT;
|
||||
|
||||
for (uint32_t i = 0; i <= aLength; ++i) {
|
||||
uint32_t extraCodeUnits = 0; // Will be set to 1 if we need to consume
|
||||
|
@ -3275,7 +3272,7 @@ gfxFont::InitFakeSmallCapsRun(DrawTarget *aDrawTarget,
|
|||
if (!f->SplitAndInitTextRun(aDrawTarget, aTextRun,
|
||||
aText + runStart,
|
||||
aOffset + runStart, runLength,
|
||||
aScript, vertical)) {
|
||||
aScript, aOrientation)) {
|
||||
ok = false;
|
||||
}
|
||||
break;
|
||||
|
@ -3319,7 +3316,7 @@ gfxFont::InitFakeSmallCapsRun(DrawTarget *aDrawTarget,
|
|||
if (!f->SplitAndInitTextRun(aDrawTarget, tempRun.get(),
|
||||
convertedString.BeginReading(),
|
||||
0, convertedString.Length(),
|
||||
aScript, vertical)) {
|
||||
aScript, aOrientation)) {
|
||||
ok = false;
|
||||
} else {
|
||||
RefPtr<gfxTextRun> mergedRun(
|
||||
|
@ -3340,7 +3337,7 @@ gfxFont::InitFakeSmallCapsRun(DrawTarget *aDrawTarget,
|
|||
if (!f->SplitAndInitTextRun(aDrawTarget, aTextRun,
|
||||
convertedString.BeginReading(),
|
||||
aOffset + runStart, runLength,
|
||||
aScript, vertical)) {
|
||||
aScript, aOrientation)) {
|
||||
ok = false;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1826,7 +1826,7 @@ public:
|
|||
uint32_t aRunStart,
|
||||
uint32_t aRunLength,
|
||||
Script aRunScript,
|
||||
bool aVertical);
|
||||
mozilla::gfx::ShapedTextFlags aOrientation);
|
||||
|
||||
// Get a ShapedWord representing the given text (either 8- or 16-bit)
|
||||
// for use in setting up a gfxTextRun.
|
||||
|
|
|
@ -2569,10 +2569,23 @@ gfxFontGroup::InitScriptRun(DrawTarget* aDrawTarget,
|
|||
|
||||
gfxFont *mainFont = GetFirstValidFont();
|
||||
|
||||
ShapedTextFlags orientation =
|
||||
aTextRun->GetFlags() & ShapedTextFlags::TEXT_ORIENT_MASK;
|
||||
|
||||
if (orientation != ShapedTextFlags::TEXT_ORIENT_HORIZONTAL &&
|
||||
(aRunScript == Script::MONGOLIAN || aRunScript == Script::PHAGS_PA)) {
|
||||
// Mongolian and Phags-pa text should ignore text-orientation and
|
||||
// always render in its "native" vertical mode, implemented by fonts
|
||||
// as sideways-right (i.e as if shaped horizontally, and then the
|
||||
// entire line is rotated to render vertically). Therefore, we ignore
|
||||
// the aOrientation value from the textrun's flags, and make all
|
||||
// vertical Mongolian/Phags-pa use sideways-right.
|
||||
orientation = ShapedTextFlags::TEXT_ORIENT_VERTICAL_SIDEWAYS_RIGHT;
|
||||
}
|
||||
|
||||
uint32_t runStart = 0;
|
||||
AutoTArray<gfxTextRange,3> fontRanges;
|
||||
ComputeRanges(fontRanges, aString, aLength, aRunScript,
|
||||
aTextRun->GetFlags() & ShapedTextFlags::TEXT_ORIENT_MASK);
|
||||
ComputeRanges(fontRanges, aString, aLength, aRunScript, orientation);
|
||||
uint32_t numRanges = fontRanges.Length();
|
||||
bool missingChars = false;
|
||||
|
||||
|
@ -2580,8 +2593,6 @@ gfxFontGroup::InitScriptRun(DrawTarget* aDrawTarget,
|
|||
const gfxTextRange& range = fontRanges[r];
|
||||
uint32_t matchedLength = range.Length();
|
||||
gfxFont *matchedFont = range.font;
|
||||
bool vertical =
|
||||
range.orientation == ShapedTextFlags::TEXT_ORIENT_VERTICAL_UPRIGHT;
|
||||
// create the glyph run for this range
|
||||
if (matchedFont && mStyle.noFallbackVariantFeatures) {
|
||||
// common case - just do glyph layout and record the
|
||||
|
@ -2594,7 +2605,7 @@ gfxFontGroup::InitScriptRun(DrawTarget* aDrawTarget,
|
|||
aOffset + runStart,
|
||||
matchedLength,
|
||||
aRunScript,
|
||||
vertical)) {
|
||||
range.orientation)) {
|
||||
// glyph layout failed! treat as missing glyphs
|
||||
matchedFont = nullptr;
|
||||
}
|
||||
|
@ -2634,7 +2645,7 @@ gfxFontGroup::InitScriptRun(DrawTarget* aDrawTarget,
|
|||
aOffset + runStart,
|
||||
matchedLength,
|
||||
aRunScript,
|
||||
vertical)) {
|
||||
range.orientation)) {
|
||||
// glyph layout failed! treat as missing glyphs
|
||||
matchedFont = nullptr;
|
||||
}
|
||||
|
@ -2679,7 +2690,7 @@ gfxFontGroup::InitScriptRun(DrawTarget* aDrawTarget,
|
|||
aOffset + runStart,
|
||||
matchedLength,
|
||||
aRunScript,
|
||||
vertical)) {
|
||||
range.orientation)) {
|
||||
// glyph layout failed! treat as missing glyphs
|
||||
matchedFont = nullptr;
|
||||
}
|
||||
|
|
|
@ -50,6 +50,7 @@ RenderDXGITextureHostOGL::RenderDXGITextureHostOGL(WindowsHandle aHandle,
|
|||
MOZ_COUNT_CTOR_INHERITED(RenderDXGITextureHostOGL, RenderTextureHostOGL);
|
||||
MOZ_ASSERT(mFormat != gfx::SurfaceFormat::NV12 ||
|
||||
(mSize.width % 2 == 0 && mSize.height % 2 == 0));
|
||||
MOZ_ASSERT(aHandle);
|
||||
}
|
||||
|
||||
RenderDXGITextureHostOGL::~RenderDXGITextureHostOGL()
|
||||
|
@ -82,6 +83,9 @@ RenderDXGITextureHostOGL::EnsureLockable()
|
|||
// The non-nv12 format.
|
||||
// Use eglCreatePbufferFromClientBuffer get the gl handle from the d3d
|
||||
// shared handle.
|
||||
if (!egl->IsExtensionSupported(gl::GLLibraryEGL::ANGLE_d3d_share_handle_client_buffer)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Get gl texture handle from shared handle.
|
||||
EGLint pbufferAttributes[] = {
|
||||
|
@ -116,9 +120,8 @@ RenderDXGITextureHostOGL::EnsureLockable()
|
|||
// use EGLStream to get the converted gl handle from d3d nv12 texture.
|
||||
|
||||
if (!egl->IsExtensionSupported(gl::GLLibraryEGL::NV_stream_consumer_gltexture_yuv) ||
|
||||
!egl->IsExtensionSupported(gl::GLLibraryEGL::ANGLE_stream_producer_d3d_texture_nv12))
|
||||
{
|
||||
return false;
|
||||
!egl->IsExtensionSupported(gl::GLLibraryEGL::ANGLE_stream_producer_d3d_texture_nv12)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Fetch the D3D11 device.
|
||||
|
@ -277,6 +280,7 @@ RenderDXGIYCbCrTextureHostOGL::RenderDXGIYCbCrTextureHostOGL(WindowsHandle (&aHa
|
|||
// The size should be even.
|
||||
MOZ_ASSERT(mSize.width % 2 == 0);
|
||||
MOZ_ASSERT(mSize.height % 2 == 0);
|
||||
MOZ_ASSERT(aHandles[0] && aHandles[1] && aHandles[2]);
|
||||
}
|
||||
|
||||
RenderDXGIYCbCrTextureHostOGL::~RenderDXGIYCbCrTextureHostOGL()
|
||||
|
|
|
@ -430,6 +430,12 @@ WebRenderAPI::UpdateResources(ResourceUpdateQueue& aUpdates)
|
|||
wr_api_update_resources(mDocHandle, aUpdates.Raw());
|
||||
}
|
||||
|
||||
void
|
||||
WebRenderAPI::UpdatePipelineResources(ResourceUpdateQueue& aUpdates, PipelineId aPipeline, Epoch aEpoch)
|
||||
{
|
||||
wr_api_update_pipeline_resources(mDocHandle, aPipeline, aEpoch, aUpdates.Raw());
|
||||
}
|
||||
|
||||
ResourceUpdateQueue::ResourceUpdateQueue()
|
||||
{
|
||||
mUpdates = wr_resource_updates_new();
|
||||
|
|
|
@ -158,6 +158,8 @@ public:
|
|||
|
||||
void UpdateResources(ResourceUpdateQueue& aUpdates);
|
||||
|
||||
void UpdatePipelineResources(ResourceUpdateQueue& aUpdates, PipelineId aPipeline, Epoch aEpoch);
|
||||
|
||||
void SetFrameStartTime(const TimeStamp& aTime);
|
||||
|
||||
void RunOnRenderThread(UniquePtr<RendererEvent> aEvent);
|
||||
|
|
|
@ -814,6 +814,18 @@ pub extern "C" fn wr_api_update_resources(
|
|||
dh.api.update_resources(resource_updates);
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub extern "C" fn wr_api_update_pipeline_resources(
|
||||
dh: &mut DocumentHandle,
|
||||
pipeline_id: WrPipelineId,
|
||||
epoch: WrEpoch,
|
||||
resources: &mut ResourceUpdates
|
||||
) {
|
||||
let resource_updates = mem::replace(resources, ResourceUpdates::new());
|
||||
dh.api.update_pipeline_resources(resource_updates, dh.document_id, pipeline_id, epoch);
|
||||
}
|
||||
|
||||
|
||||
#[no_mangle]
|
||||
pub extern "C" fn wr_api_set_root_pipeline(dh: &mut DocumentHandle,
|
||||
pipeline_id: WrPipelineId) {
|
||||
|
|
|
@ -914,6 +914,13 @@ void wr_api_set_window_parameters(DocumentHandle *aDh,
|
|||
int32_t aHeight)
|
||||
WR_FUNC;
|
||||
|
||||
WR_INLINE
|
||||
void wr_api_update_pipeline_resources(DocumentHandle *aDh,
|
||||
WrPipelineId aPipelineId,
|
||||
WrEpoch aEpoch,
|
||||
ResourceUpdates *aResources)
|
||||
WR_FUNC;
|
||||
|
||||
WR_INLINE
|
||||
void wr_api_update_resources(DocumentHandle *aDh,
|
||||
ResourceUpdates *aResources)
|
||||
|
|
|
@ -1017,8 +1017,6 @@ description =
|
|||
description =
|
||||
[PWebRenderBridge::Create]
|
||||
description =
|
||||
[PWebRenderBridge::SetDisplayListSync]
|
||||
description =
|
||||
[PWebRenderBridge::GetSnapshot]
|
||||
description =
|
||||
[PWebRenderBridge::SetTestSampleTime]
|
||||
|
|
|
@ -2119,6 +2119,10 @@ PromiseAllResolveElementFunction(JSContext* cx, unsigned argc, Value* vp)
|
|||
// See comment for PerformPromiseAll, step 3 for why we unwrap here.
|
||||
valuesObj = UncheckedUnwrap(valuesObj);
|
||||
}
|
||||
if (JS_IsDeadWrapper(valuesObj)) {
|
||||
JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, JSMSG_DEAD_OBJECT);
|
||||
return false;
|
||||
}
|
||||
RootedNativeObject values(cx, &valuesObj->as<NativeObject>());
|
||||
|
||||
// Step 6 (moved under step 10).
|
||||
|
|
|
@ -2771,7 +2771,7 @@ class CloneBufferObject : public NativeObject {
|
|||
nbytes = JS_GetStringLength(str);
|
||||
}
|
||||
|
||||
if (nbytes % sizeof(uint64_t) != 0) {
|
||||
if (nbytes == 0 || (nbytes % sizeof(uint64_t) != 0)) {
|
||||
JS_ReportErrorASCII(cx, "Invalid length for clonebuffer data");
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,16 @@
|
|||
// |jit-test| error:dead object
|
||||
|
||||
var P = newGlobal().eval(`
|
||||
(class extends Promise {
|
||||
static resolve(o) {
|
||||
return o;
|
||||
}
|
||||
});
|
||||
`);
|
||||
|
||||
Promise.all.call(P, [{
|
||||
then(r) {
|
||||
nukeAllCCWs();
|
||||
r();
|
||||
}
|
||||
}]);
|
|
@ -86,7 +86,6 @@ JSObject* JSAPITest::createGlobal(JSPrincipals* principals)
|
|||
#ifdef ENABLE_STREAMS
|
||||
options.creationOptions().setStreamsEnabled(true);
|
||||
#endif
|
||||
printf("enabled\n");
|
||||
options.behaviors().setVersion(JSVERSION_DEFAULT);
|
||||
newGlobal = JS_NewGlobalObject(cx, getGlobalClass(), principals, JS::FireOnNewGlobalHook,
|
||||
options);
|
||||
|
|
|
@ -178,7 +178,7 @@ HTTP(..) == reflow-sanity-1.html reflow-sanity-1-data.html
|
|||
HTTP(..) == reflow-sanity-delay-1a.html reflow-sanity-1-ref.html
|
||||
HTTP(..) == reflow-sanity-delay-1b.html reflow-sanity-1-ref.html
|
||||
HTTP(..) == reflow-sanity-delay-1c.html reflow-sanity-1-ref.html
|
||||
skip-if(winWidget&&!isDebugBuild) HTTP(..) == reflow-sanity-delay-1-metrics.html reflow-sanity-1-ref.html
|
||||
HTTP(..) == reflow-sanity-delay-1-metrics.html reflow-sanity-1-ref.html
|
||||
|
||||
# font-display
|
||||
skip-if(/^Linux\x20i686/.test(http.oscpu)) HTTP(..) == font-display-1.html font-display-1-ref.html # normal font load (~500ms)
|
||||
|
|
Двоичный файл не отображается.
|
@ -0,0 +1,16 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset=utf-8>
|
||||
<style>
|
||||
@font-face {
|
||||
font-family: test;
|
||||
src: url(../fonts/NotoSansMongolian-Regular.ttf);
|
||||
}
|
||||
div {
|
||||
writing-mode: vertical-lr;
|
||||
text-orientation: mixed;
|
||||
font-family: test;
|
||||
font-size: 32px;
|
||||
}
|
||||
</style>
|
||||
<div>
|
||||
ᠮᠣᠨᠭᠭᠣᠯ ᠬᠡᠯᠡ
|
|
@ -0,0 +1,16 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset=utf-8>
|
||||
<style>
|
||||
@font-face {
|
||||
font-family: test;
|
||||
src: url(../fonts/NotoSansMongolian-Regular.ttf);
|
||||
}
|
||||
div {
|
||||
writing-mode: vertical-lr;
|
||||
text-orientation: upright; /* should have no effect on Mongolian */
|
||||
font-family: test;
|
||||
font-size: 32px;
|
||||
}
|
||||
</style>
|
||||
<div>
|
||||
ᠮᠣᠨᠭᠭᠣᠯ ᠬᠡᠯᠡ
|
|
@ -178,6 +178,8 @@ fuzzy-if(gtkWidget,1,25) fuzzy-if(cocoaWidget,1,2) == 1302389-scrolled-rect-2b.h
|
|||
== 1302389-scrolled-rect-2c.html 1302389-scrolled-rect-2-ref.html
|
||||
fuzzy-if(Android,54,852) == 1302389-scrolled-rect-2d.html 1302389-scrolled-rect-2-ref.html
|
||||
|
||||
== 1361631-mongolian-upright-1.html 1361631-mongolian-upright-1-ref.html
|
||||
|
||||
# Suite of tests from Gérard Talbot in bug 1079151
|
||||
# Frequent Windows 7 load failed: timed out waiting for test to complete (waiting for onload scripts to complete), bug 1167155 and friends
|
||||
skip-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) include abspos/reftest.list
|
||||
|
|
|
@ -2288,6 +2288,7 @@ pref("network.cookie.cookieBehavior", 0); // 0-Accept, 1-dontAcceptForeign
|
|||
pref("network.cookie.cookieBehavior", 0); // Keep the old default of accepting all cookies
|
||||
#endif
|
||||
pref("network.cookie.thirdparty.sessionOnly", false);
|
||||
pref("network.cookie.thirdparty.nonsecureSessionOnly", false);
|
||||
pref("network.cookie.leave-secure-alone", true);
|
||||
pref("network.cookie.ipc.sync", false);
|
||||
pref("network.cookie.lifetimePolicy", 0); // 0-accept, 1-dontUse 2-acceptForSession, 3-acceptForNDays
|
||||
|
|
|
@ -34,6 +34,8 @@ namespace net {
|
|||
static const char kPrefCookieBehavior[] = "network.cookie.cookieBehavior";
|
||||
static const char kPrefThirdPartySession[] =
|
||||
"network.cookie.thirdparty.sessionOnly";
|
||||
static const char kPrefThirdPartyNonsecureSession[] =
|
||||
"network.cookie.thirdparty.nonsecureSessionOnly";
|
||||
static const char kPrefCookieIPCSync[] = "network.cookie.ipc.sync";
|
||||
static const char kCookieLeaveSecurityAlone[] = "network.cookie.leave-secure-alone";
|
||||
|
||||
|
@ -58,6 +60,7 @@ NS_IMPL_ISUPPORTS(CookieServiceChild,
|
|||
CookieServiceChild::CookieServiceChild()
|
||||
: mCookieBehavior(nsICookieService::BEHAVIOR_ACCEPT)
|
||||
, mThirdPartySession(false)
|
||||
, mThirdPartyNonsecureSession(false)
|
||||
, mLeaveSecureAlone(true)
|
||||
, mIPCSync(false)
|
||||
, mIPCOpen(false)
|
||||
|
@ -90,6 +93,7 @@ CookieServiceChild::CookieServiceChild()
|
|||
if (prefBranch) {
|
||||
prefBranch->AddObserver(kPrefCookieBehavior, this, true);
|
||||
prefBranch->AddObserver(kPrefThirdPartySession, this, true);
|
||||
prefBranch->AddObserver(kPrefThirdPartyNonsecureSession, this, true);
|
||||
prefBranch->AddObserver(kPrefCookieIPCSync, this, true);
|
||||
prefBranch->AddObserver(kCookieLeaveSecurityAlone, this, true);
|
||||
PrefChanged(prefBranch);
|
||||
|
@ -233,6 +237,10 @@ CookieServiceChild::PrefChanged(nsIPrefBranch *aPrefBranch)
|
|||
if (NS_SUCCEEDED(aPrefBranch->GetBoolPref(kPrefThirdPartySession, &boolval)))
|
||||
mThirdPartySession = !!boolval;
|
||||
|
||||
if (NS_SUCCEEDED(aPrefBranch->GetBoolPref(kPrefThirdPartyNonsecureSession,
|
||||
&boolval)))
|
||||
mThirdPartyNonsecureSession = boolval;
|
||||
|
||||
if (NS_SUCCEEDED(aPrefBranch->GetBoolPref(kPrefCookieIPCSync, &boolval)))
|
||||
mIPCSync = !!boolval;
|
||||
|
||||
|
@ -277,7 +285,8 @@ CookieServiceChild::GetCookieStringFromCookieHashTable(nsIURI *a
|
|||
nsCOMPtr<nsICookiePermission> permissionService = do_GetService(NS_COOKIEPERMISSION_CONTRACTID);
|
||||
CookieStatus cookieStatus =
|
||||
nsCookieService::CheckPrefs(permissionService, mCookieBehavior,
|
||||
mThirdPartySession, aHostURI,
|
||||
mThirdPartySession,
|
||||
mThirdPartyNonsecureSession, aHostURI,
|
||||
aIsForeign, nullptr,
|
||||
CountCookiesFromHashTable(baseDomain, aOriginAttrs),
|
||||
aOriginAttrs);
|
||||
|
@ -379,7 +388,8 @@ CookieServiceChild::RequireThirdPartyCheck()
|
|||
{
|
||||
return mCookieBehavior == nsICookieService::BEHAVIOR_REJECT_FOREIGN ||
|
||||
mCookieBehavior == nsICookieService::BEHAVIOR_LIMIT_FOREIGN ||
|
||||
mThirdPartySession;
|
||||
mThirdPartySession ||
|
||||
mThirdPartyNonsecureSession;
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -525,8 +535,9 @@ CookieServiceChild::SetCookieStringInternal(nsIURI *aHostURI,
|
|||
|
||||
CookieStatus cookieStatus =
|
||||
nsCookieService::CheckPrefs(permissionService, mCookieBehavior,
|
||||
mThirdPartySession, aHostURI,
|
||||
!!isForeign, aCookieString,
|
||||
mThirdPartySession,
|
||||
mThirdPartyNonsecureSession, aHostURI,
|
||||
isForeign, aCookieString,
|
||||
CountCookiesFromHashTable(baseDomain, attrs),
|
||||
attrs);
|
||||
|
||||
|
@ -544,7 +555,8 @@ CookieServiceChild::SetCookieStringInternal(nsIURI *aHostURI,
|
|||
moreCookies = nsCookieService::CanSetCookie(aHostURI, key, cookieAttributes,
|
||||
requireHostMatch, cookieStatus,
|
||||
cookieString, serverTime, aFromHttp,
|
||||
aChannel, mLeaveSecureAlone, canSetCookie);
|
||||
aChannel, mLeaveSecureAlone,
|
||||
canSetCookie, mThirdPartyUtil);
|
||||
|
||||
if (canSetCookie) {
|
||||
SetCookieInternal(cookieAttributes, attrs, aChannel,
|
||||
|
|
|
@ -121,6 +121,7 @@ protected:
|
|||
nsCOMPtr<nsIEffectiveTLDService> mTLDService;
|
||||
uint8_t mCookieBehavior;
|
||||
bool mThirdPartySession;
|
||||
bool mThirdPartyNonsecureSession;
|
||||
bool mLeaveSecureAlone;
|
||||
bool mIPCSync;
|
||||
bool mIPCOpen;
|
||||
|
|
|
@ -123,6 +123,7 @@ static const char kPrefMaxNumberOfCookies[] = "network.cookie.maxNumber";
|
|||
static const char kPrefMaxCookiesPerHost[] = "network.cookie.maxPerHost";
|
||||
static const char kPrefCookiePurgeAge[] = "network.cookie.purgeAge";
|
||||
static const char kPrefThirdPartySession[] = "network.cookie.thirdparty.sessionOnly";
|
||||
static const char kPrefThirdPartyNonsecureSession[] = "network.cookie.thirdparty.nonsecureSessionOnly";
|
||||
static const char kCookieLeaveSecurityAlone[] = "network.cookie.leave-secure-alone";
|
||||
|
||||
// For telemetry COOKIE_LEAVE_SECURE_ALONE
|
||||
|
@ -702,6 +703,7 @@ nsCookieService::nsCookieService()
|
|||
: mDBState(nullptr)
|
||||
, mCookieBehavior(nsICookieService::BEHAVIOR_ACCEPT)
|
||||
, mThirdPartySession(false)
|
||||
, mThirdPartyNonsecureSession(false)
|
||||
, mLeaveSecureAlone(true)
|
||||
, mMaxNumberOfCookies(kMaxNumberOfCookies)
|
||||
, mMaxCookiesPerHost(kMaxCookiesPerHost)
|
||||
|
@ -730,6 +732,7 @@ nsCookieService::Init()
|
|||
prefBranch->AddObserver(kPrefMaxCookiesPerHost, this, true);
|
||||
prefBranch->AddObserver(kPrefCookiePurgeAge, this, true);
|
||||
prefBranch->AddObserver(kPrefThirdPartySession, this, true);
|
||||
prefBranch->AddObserver(kPrefThirdPartyNonsecureSession, this, true);
|
||||
prefBranch->AddObserver(kCookieLeaveSecurityAlone, this, true);
|
||||
PrefChanged(prefBranch);
|
||||
}
|
||||
|
@ -2149,8 +2152,10 @@ nsCookieService::SetCookieStringInternal(nsIURI *aHostURI,
|
|||
aHostURI->GetHost(hostFromURI);
|
||||
CountCookiesFromHost(hostFromURI, &priorCookieCount);
|
||||
CookieStatus cookieStatus = CheckPrefs(mPermissionService, mCookieBehavior,
|
||||
mThirdPartySession, aHostURI, aIsForeign,
|
||||
aCookieHeader.get(), priorCookieCount, aOriginAttrs);
|
||||
mThirdPartySession,
|
||||
mThirdPartyNonsecureSession, aHostURI,
|
||||
aIsForeign, aCookieHeader.get(),
|
||||
priorCookieCount, aOriginAttrs);
|
||||
|
||||
// fire a notification if third party or if cookie was rejected
|
||||
// (but not if there was an error)
|
||||
|
@ -2347,6 +2352,9 @@ nsCookieService::PrefChanged(nsIPrefBranch *aPrefBranch)
|
|||
if (NS_SUCCEEDED(aPrefBranch->GetBoolPref(kPrefThirdPartySession, &boolval)))
|
||||
mThirdPartySession = boolval;
|
||||
|
||||
if (NS_SUCCEEDED(aPrefBranch->GetBoolPref(kPrefThirdPartyNonsecureSession, &boolval)))
|
||||
mThirdPartyNonsecureSession = boolval;
|
||||
|
||||
if (NS_SUCCEEDED(aPrefBranch->GetBoolPref(kCookieLeaveSecurityAlone, &boolval)))
|
||||
mLeaveSecureAlone = boolval;
|
||||
}
|
||||
|
@ -3307,8 +3315,10 @@ nsCookieService::GetCookiesForURI(nsIURI *aHostURI,
|
|||
uint32_t priorCookieCount = 0;
|
||||
CountCookiesFromHost(hostFromURI, &priorCookieCount);
|
||||
CookieStatus cookieStatus = CheckPrefs(mPermissionService, mCookieBehavior,
|
||||
mThirdPartySession, aHostURI, aIsForeign,
|
||||
nullptr, priorCookieCount, aOriginAttrs);
|
||||
mThirdPartySession,
|
||||
mThirdPartyNonsecureSession, aHostURI,
|
||||
aIsForeign, nullptr,
|
||||
priorCookieCount, aOriginAttrs);
|
||||
|
||||
// for GetCookie(), we don't fire rejection notifications.
|
||||
switch (cookieStatus) {
|
||||
|
@ -3471,7 +3481,8 @@ nsCookieService::CanSetCookie(nsIURI* aHostURI,
|
|||
bool aFromHttp,
|
||||
nsIChannel* aChannel,
|
||||
bool aLeaveSecureAlone,
|
||||
bool& aSetCookie)
|
||||
bool& aSetCookie,
|
||||
mozIThirdPartyUtil* aThirdPartyUtil)
|
||||
{
|
||||
NS_ASSERTION(aHostURI, "null host!");
|
||||
|
||||
|
@ -3501,6 +3512,26 @@ nsCookieService::CanSetCookie(nsIURI* aHostURI,
|
|||
Telemetry::Accumulate(Telemetry::COOKIE_SCHEME_SECURITY,
|
||||
((aCookieAttributes.isSecure)? 0x02 : 0x00) |
|
||||
((isHTTPS)? 0x01 : 0x00));
|
||||
|
||||
// Collect telemetry on how often are first- and third-party cookies set
|
||||
// from HTTPS origins:
|
||||
//
|
||||
// 0 (000) = first-party and "http:"
|
||||
// 1 (001) = first-party and "http:" with bogus Secure cookie flag?!
|
||||
// 2 (010) = first-party and "https:"
|
||||
// 3 (011) = first-party and "https:" with Secure cookie flag
|
||||
// 4 (100) = third-party and "http:"
|
||||
// 5 (101) = third-party and "http:" with bogus Secure cookie flag?!
|
||||
// 6 (110) = third-party and "https:"
|
||||
// 7 (111) = third-party and "https:" with Secure cookie flag
|
||||
if (aThirdPartyUtil) {
|
||||
bool isThirdParty = true;
|
||||
aThirdPartyUtil->IsThirdPartyChannel(aChannel, aHostURI, &isThirdParty);
|
||||
Telemetry::Accumulate(Telemetry::COOKIE_SCHEME_HTTPS,
|
||||
(isThirdParty ? 0x04 : 0x00) |
|
||||
(isHTTPS ? 0x02 : 0x00) |
|
||||
(aCookieAttributes.isSecure ? 0x01 : 0x00));
|
||||
}
|
||||
}
|
||||
|
||||
int64_t currentTimeInUsec = PR_Now();
|
||||
|
@ -3608,7 +3639,8 @@ nsCookieService::SetCookieInternal(nsIURI *aHostURI,
|
|||
nsCookieAttributes cookieAttributes;
|
||||
bool newCookie = CanSetCookie(aHostURI, aKey, cookieAttributes, aRequireHostMatch,
|
||||
aStatus, aCookieHeader, aServerTime, aFromHttp,
|
||||
aChannel, mLeaveSecureAlone, canSetCookie);
|
||||
aChannel, mLeaveSecureAlone, canSetCookie,
|
||||
mThirdPartyUtil);
|
||||
|
||||
if (!canSetCookie) {
|
||||
return newCookie;
|
||||
|
@ -4210,6 +4242,7 @@ CookieStatus
|
|||
nsCookieService::CheckPrefs(nsICookiePermission *aPermissionService,
|
||||
uint8_t aCookieBehavior,
|
||||
bool aThirdPartySession,
|
||||
bool aThirdPartyNonsecureSession,
|
||||
nsIURI *aHostURI,
|
||||
bool aIsForeign,
|
||||
const char *aCookieHeader,
|
||||
|
@ -4284,9 +4317,6 @@ nsCookieService::CheckPrefs(nsICookiePermission *aPermissionService,
|
|||
|
||||
// check if cookie is foreign
|
||||
if (aIsForeign) {
|
||||
if (aCookieBehavior == nsICookieService::BEHAVIOR_ACCEPT && aThirdPartySession)
|
||||
return STATUS_ACCEPT_SESSION;
|
||||
|
||||
if (aCookieBehavior == nsICookieService::BEHAVIOR_REJECT_FOREIGN) {
|
||||
COOKIE_LOGFAILURE(aCookieHeader ? SET_COOKIE : GET_COOKIE, aHostURI, aCookieHeader, "context is third party");
|
||||
return STATUS_REJECTED;
|
||||
|
@ -4297,7 +4327,18 @@ nsCookieService::CheckPrefs(nsICookiePermission *aPermissionService,
|
|||
COOKIE_LOGFAILURE(aCookieHeader ? SET_COOKIE : GET_COOKIE, aHostURI, aCookieHeader, "context is third party");
|
||||
return STATUS_REJECTED;
|
||||
}
|
||||
if (aThirdPartySession)
|
||||
}
|
||||
|
||||
MOZ_ASSERT(aCookieBehavior == nsICookieService::BEHAVIOR_ACCEPT ||
|
||||
aCookieBehavior == nsICookieService::BEHAVIOR_LIMIT_FOREIGN);
|
||||
|
||||
if (aThirdPartySession)
|
||||
return STATUS_ACCEPT_SESSION;
|
||||
|
||||
if (aThirdPartyNonsecureSession) {
|
||||
bool isHTTPS = false;
|
||||
aHostURI->SchemeIs("https", &isHTTPS);
|
||||
if (!isHTTPS)
|
||||
return STATUS_ACCEPT_SESSION;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -231,8 +231,8 @@ class nsCookieService final : public nsICookieService
|
|||
static nsresult GetBaseDomainFromHost(nsIEffectiveTLDService *aTLDService, const nsACString &aHost, nsCString &aBaseDomain);
|
||||
static bool DomainMatches(nsCookie* aCookie, const nsACString& aHost);
|
||||
static bool PathMatches(nsCookie* aCookie, const nsACString& aPath);
|
||||
static bool CanSetCookie(nsIURI *aHostURI, const nsCookieKey& aKey, nsCookieAttributes &aCookieAttributes, bool aRequireHostMatch, CookieStatus aStatus, nsDependentCString &aCookieHeader, int64_t aServerTime, bool aFromHttp, nsIChannel* aChannel, bool aLeaveSercureAlone, bool &aSetCookie);
|
||||
static CookieStatus CheckPrefs(nsICookiePermission *aPermissionServices, uint8_t aCookieBehavior, bool aThirdPartyUtil, nsIURI *aHostURI, bool aIsForeign, const char *aCookieHeader, const int aNumOfCookies, const OriginAttributes& aOriginAttrs);
|
||||
static bool CanSetCookie(nsIURI *aHostURI, const nsCookieKey& aKey, nsCookieAttributes &aCookieAttributes, bool aRequireHostMatch, CookieStatus aStatus, nsDependentCString &aCookieHeader, int64_t aServerTime, bool aFromHttp, nsIChannel* aChannel, bool aLeaveSercureAlone, bool &aSetCookie, mozIThirdPartyUtil* aThirdPartyUtil);
|
||||
static CookieStatus CheckPrefs(nsICookiePermission *aPermissionServices, uint8_t aCookieBehavior, bool aThirdPartySession, bool aThirdPartyNonsecureSession, nsIURI *aHostURI, bool aIsForeign, const char *aCookieHeader, const int aNumOfCookies, const OriginAttributes& aOriginAttrs);
|
||||
static int64_t ParseServerTime(const nsCString &aServerTime);
|
||||
void GetCookiesForURI(nsIURI *aHostURI, bool aIsForeign, bool aHttpBound, const OriginAttributes& aOriginAttrs, nsTArray<nsCookie*>& aCookieList);
|
||||
|
||||
|
@ -321,6 +321,7 @@ class nsCookieService final : public nsICookieService
|
|||
// cached prefs
|
||||
uint8_t mCookieBehavior; // BEHAVIOR_{ACCEPT, REJECTFOREIGN, REJECT, LIMITFOREIGN}
|
||||
bool mThirdPartySession;
|
||||
bool mThirdPartyNonsecureSession;
|
||||
bool mLeaveSecureAlone;
|
||||
uint16_t mMaxNumberOfCookies;
|
||||
uint16_t mMaxCookiesPerHost;
|
||||
|
|
|
@ -238,8 +238,7 @@ mochitest-devtools-chrome:
|
|||
chunked: true
|
||||
instance-size:
|
||||
by-test-platform:
|
||||
# Bug 1281241: migrating to m3.large instances
|
||||
linux64-asan/opt: legacy
|
||||
linux64-asan/opt: xlarge # runs out of memory on default/m3.large
|
||||
default: default
|
||||
# Bug 1296086: high number of intermittents observed with software GL and large instances
|
||||
allow-software-gl-layers: false
|
||||
|
|
|
@ -99,6 +99,7 @@ talos-g2:
|
|||
run-on-projects:
|
||||
by-test-platform:
|
||||
linux64-qr/.*: ['mozilla-central', 'try']
|
||||
linux64-ccov/.*: ['try'] # Bug 1407593
|
||||
default: ['mozilla-beta', 'mozilla-central', 'mozilla-inbound', 'autoland', 'try']
|
||||
mozharness:
|
||||
extra-options:
|
||||
|
|
|
@ -104,7 +104,7 @@ reftest-stylo:
|
|||
- reftest-stylo
|
||||
|
||||
qr-talos:
|
||||
# - talos-chrome # regressed, see bug 1408418
|
||||
- talos-chrome
|
||||
- talos-dromaeojs
|
||||
- talos-g1
|
||||
# - talos-g2 # doesn't work with QR yet
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
prefs: [layout.css.getBoxQuads.enabled:true, layout.css.convertFromNode.enabled:true]
|
||||
|
||||
[interfaces.html]
|
||||
type: testharness
|
||||
[Screen interface: existence and properties of interface object]
|
||||
|
|
|
@ -10357,6 +10357,15 @@
|
|||
"releaseChannelCollection": "opt-out",
|
||||
"description": "Strict Secure Cookies: 0=blocked secure cookie from http; 1=blocked shadowing secure cookie from http; 2=shadowing secure cookie from https; 3=evicted newer insecure cookie; 4=evicted oldest insecure cookie; 5=evicted secure cookie; 6=evicting secure cookie blocked; 7=blocked downgrading secure cookie from http; 8=downgraded secure cookie from https"
|
||||
},
|
||||
"COOKIE_SCHEME_HTTPS": {
|
||||
"record_in_processes": ["main", "content"],
|
||||
"alert_emails": ["cpeterson@mozilla.com", "seceng-telemetry@mozilla.com"],
|
||||
"bug_numbers": [1160368],
|
||||
"expires_in_version": "60",
|
||||
"kind": "enumerated",
|
||||
"n_values": 10,
|
||||
"description": "How often are first- and third-party cookies set from HTTPS origins? 0=first/http, 1=first/http+secure?!, 2=first/https, 3=first/https+secure, 4=third/http, 5=third/http+secure?!, 6=third/https, 7=third/https+secure"
|
||||
},
|
||||
"NTLM_MODULE_USED_2": {
|
||||
"record_in_processes": ["main", "content"],
|
||||
"expires_in_version": "never",
|
||||
|
|
|
@ -103,8 +103,6 @@ doneFileScheme=local file
|
|||
|
||||
# LOCALIZATION NOTE (yesterday): Displayed time for files finished yesterday
|
||||
yesterday=Yesterday
|
||||
# LOCALIZATION NOTE (monthDate): #1 month name; #2 date number; e.g., January 22
|
||||
monthDate2=%1$S %2$S
|
||||
|
||||
fileExecutableSecurityWarning=“%S” is an executable file. Executable files may contain viruses or other malicious code that could harm your computer. Use caution when opening this file. Are you sure you want to launch “%S”?
|
||||
fileExecutableSecurityWarningTitle=Open Executable File?
|
||||
|
|
|
@ -79,7 +79,6 @@ var gStr = {
|
|||
timeLeftDouble: "timeLeftDouble3",
|
||||
timeFewSeconds: "timeFewSeconds2",
|
||||
timeUnknown: "timeUnknown2",
|
||||
monthDate: "monthDate2",
|
||||
yesterday: "yesterday",
|
||||
doneScheme: "doneScheme2",
|
||||
doneFileScheme: "doneFileScheme",
|
||||
|
@ -364,9 +363,10 @@ this.DownloadUtils = {
|
|||
dateTimeCompact = aDate.toLocaleDateString(undefined, { weekday: "long" });
|
||||
} else {
|
||||
// Show month/day
|
||||
let month = aDate.toLocaleDateString(undefined, { month: "long" });
|
||||
let date = aDate.getDate();
|
||||
dateTimeCompact = gBundle.formatStringFromName(gStr.monthDate, [month, date], 2);
|
||||
dateTimeCompact = aDate.toLocaleString(undefined, {
|
||||
month: "long",
|
||||
day: "numeric"
|
||||
});
|
||||
}
|
||||
|
||||
const dtOptions = { dateStyle: "long", timeStyle: "short" };
|
||||
|
|
|
@ -8,7 +8,9 @@
|
|||
#include "mozilla/ThreadEventQueue.h"
|
||||
|
||||
#include "LeakRefPtr.h"
|
||||
#include "mozilla/TimeStamp.h"
|
||||
#include "nsComponentManagerUtils.h"
|
||||
#include "nsITimer.h"
|
||||
#include "nsThreadManager.h"
|
||||
#include "nsThreadSyncDispatch.h"
|
||||
#include "nsThreadUtils.h"
|
||||
|
|
|
@ -10,6 +10,7 @@
|
|||
#include "mozilla/TimeStamp.h"
|
||||
#include "LeakRefPtr.h"
|
||||
#include "nsComponentManagerUtils.h"
|
||||
#include "nsITimer.h"
|
||||
|
||||
#include "nsComponentManagerUtils.h"
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче