mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-10 11:55:49 +00:00
Merge m-c to autoland a=merge
MozReview-Commit-ID: 7m1sarjIoLM
This commit is contained in:
commit
dda9a2cfb8
@ -13,6 +13,7 @@
|
||||
#include "mozilla/a11y/PDocAccessible.h"
|
||||
#include "OuterDocAccessible.h"
|
||||
#include "ProxyAccessible.h"
|
||||
#include "DocAccessibleParent.h"
|
||||
#include "RootAccessible.h"
|
||||
#include "TableAccessible.h"
|
||||
#include "TableCellAccessible.h"
|
||||
|
@ -30,6 +30,12 @@ OuterDocAccessible::
|
||||
{
|
||||
mType = eOuterDocType;
|
||||
|
||||
#ifdef XP_WIN
|
||||
if (DocAccessibleParent* remoteDoc = RemoteChildDoc()) {
|
||||
remoteDoc->SendParentCOMProxy();
|
||||
}
|
||||
#endif
|
||||
|
||||
// Request document accessible for the content document to make sure it's
|
||||
// created. It will appended to outerdoc accessible children asynchronously.
|
||||
nsIDocument* outerDoc = mContent->GetUncomposedDoc();
|
||||
@ -207,7 +213,7 @@ OuterDocAccessible::GetChildAt(uint32_t aIndex) const
|
||||
|
||||
#endif // defined(XP_WIN)
|
||||
|
||||
ProxyAccessible*
|
||||
DocAccessibleParent*
|
||||
OuterDocAccessible::RemoteChildDoc() const
|
||||
{
|
||||
dom::TabParent* tab = dom::TabParent::GetFrom(GetContent());
|
||||
|
@ -10,7 +10,7 @@
|
||||
|
||||
namespace mozilla {
|
||||
namespace a11y {
|
||||
class ProxyAccessible;
|
||||
class DocAccessibleParent;
|
||||
|
||||
/**
|
||||
* Used for <browser>, <frame>, <iframe>, <page> or editor> elements.
|
||||
@ -28,7 +28,7 @@ public:
|
||||
|
||||
NS_DECL_ISUPPORTS_INHERITED
|
||||
|
||||
ProxyAccessible* RemoteChildDoc() const;
|
||||
DocAccessibleParent* RemoteChildDoc() const;
|
||||
|
||||
// Accessible
|
||||
virtual void Shutdown() override;
|
||||
|
@ -29,7 +29,7 @@ DocAccessibleParent::RecvShowEvent(const ShowEventData& aData,
|
||||
if (mShutdown)
|
||||
return IPC_OK();
|
||||
|
||||
MOZ_DIAGNOSTIC_ASSERT(CheckDocTree());
|
||||
MOZ_ASSERT(CheckDocTree());
|
||||
|
||||
if (aData.NewTree().IsEmpty()) {
|
||||
NS_ERROR("no children being added");
|
||||
@ -75,7 +75,7 @@ DocAccessibleParent::RecvShowEvent(const ShowEventData& aData,
|
||||
}
|
||||
#endif
|
||||
|
||||
MOZ_DIAGNOSTIC_ASSERT(CheckDocTree());
|
||||
MOZ_ASSERT(CheckDocTree());
|
||||
|
||||
ProxyAccessible* target = parent->ChildAt(newChildIdx);
|
||||
ProxyShowHideEvent(target, parent, true, aFromUser);
|
||||
@ -194,7 +194,7 @@ DocAccessibleParent::RecvHideEvent(const uint64_t& aRootID,
|
||||
parent->RemoveChild(root);
|
||||
root->Shutdown();
|
||||
|
||||
MOZ_DIAGNOSTIC_ASSERT(CheckDocTree());
|
||||
MOZ_ASSERT(CheckDocTree());
|
||||
|
||||
if (event) {
|
||||
nsCoreUtils::DispatchAccEvent(Move(event));
|
||||
@ -391,13 +391,13 @@ DocAccessibleParent::RecvBindChildDoc(PDocAccessibleParent* aChildDoc, const uin
|
||||
if (!aID)
|
||||
return IPC_FAIL(this, "ID is 0!");
|
||||
|
||||
MOZ_DIAGNOSTIC_ASSERT(CheckDocTree());
|
||||
MOZ_ASSERT(CheckDocTree());
|
||||
|
||||
auto childDoc = static_cast<DocAccessibleParent*>(aChildDoc);
|
||||
childDoc->Unbind();
|
||||
ipc::IPCResult result = AddChildDoc(childDoc, aID, false);
|
||||
MOZ_ASSERT(result);
|
||||
MOZ_DIAGNOSTIC_ASSERT(CheckDocTree());
|
||||
MOZ_ASSERT(CheckDocTree());
|
||||
if (!result) {
|
||||
return result;
|
||||
}
|
||||
@ -529,14 +529,63 @@ DocAccessibleParent::GetXPCAccessible(ProxyAccessible* aProxy)
|
||||
}
|
||||
|
||||
#if defined(XP_WIN)
|
||||
void
|
||||
DocAccessibleParent::MaybeInitWindowEmulation()
|
||||
{
|
||||
if (!nsWinUtils::IsWindowEmulationStarted()) {
|
||||
return;
|
||||
}
|
||||
|
||||
// XXX get the bounds from the tabParent instead of poking at accessibles
|
||||
// which might not exist yet.
|
||||
Accessible* outerDoc = OuterDocOfRemoteBrowser();
|
||||
if (!outerDoc) {
|
||||
return;
|
||||
}
|
||||
|
||||
RootAccessible* rootDocument = outerDoc->RootAccessible();
|
||||
MOZ_ASSERT(rootDocument);
|
||||
|
||||
bool isActive = true;
|
||||
nsIntRect rect(CW_USEDEFAULT, CW_USEDEFAULT, 0, 0);
|
||||
if (Compatibility::IsDolphin()) {
|
||||
rect = Bounds();
|
||||
nsIntRect rootRect = rootDocument->Bounds();
|
||||
rect.x = rootRect.x - rect.x;
|
||||
rect.y -= rootRect.y;
|
||||
|
||||
auto tab = static_cast<dom::TabParent*>(Manager());
|
||||
tab->GetDocShellIsActive(&isActive);
|
||||
}
|
||||
|
||||
IAccessibleHolder hWndAccHolder;
|
||||
HWND parentWnd = reinterpret_cast<HWND>(rootDocument->GetNativeWindow());
|
||||
HWND hWnd = nsWinUtils::CreateNativeWindow(kClassNameTabContent,
|
||||
parentWnd, rect.x, rect.y,
|
||||
rect.width, rect.height,
|
||||
isActive);
|
||||
if (hWnd) {
|
||||
// Attach accessible document to the emulated native window
|
||||
::SetPropW(hWnd, kPropNameDocAccParent, (HANDLE)this);
|
||||
SetEmulatedWindowHandle(hWnd);
|
||||
IAccessible* rawHWNDAcc = nullptr;
|
||||
if (SUCCEEDED(::AccessibleObjectFromWindow(hWnd, OBJID_WINDOW,
|
||||
IID_IAccessible,
|
||||
(void**)&rawHWNDAcc))) {
|
||||
hWndAccHolder.Set(IAccessibleHolder::COMPtrType(rawHWNDAcc));
|
||||
}
|
||||
}
|
||||
|
||||
Unused << SendEmulatedWindow(reinterpret_cast<uintptr_t>(mEmulatedWindowHandle),
|
||||
hWndAccHolder);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param aCOMProxy COM Proxy to the document in the content process.
|
||||
*/
|
||||
void
|
||||
DocAccessibleParent::SetCOMProxy(const RefPtr<IAccessible>& aCOMProxy)
|
||||
DocAccessibleParent::SendParentCOMProxy()
|
||||
{
|
||||
SetCOMInterface(aCOMProxy);
|
||||
|
||||
// Make sure that we're not racing with a tab shutdown
|
||||
auto tab = static_cast<dom::TabParent*>(Manager());
|
||||
MOZ_ASSERT(tab);
|
||||
@ -545,52 +594,17 @@ DocAccessibleParent::SetCOMProxy(const RefPtr<IAccessible>& aCOMProxy)
|
||||
}
|
||||
|
||||
Accessible* outerDoc = OuterDocOfRemoteBrowser();
|
||||
if (!outerDoc) {
|
||||
return;
|
||||
}
|
||||
|
||||
IAccessible* rawNative = nullptr;
|
||||
if (outerDoc) {
|
||||
outerDoc->GetNativeInterface((void**) &rawNative);
|
||||
MOZ_ASSERT(rawNative);
|
||||
}
|
||||
outerDoc->GetNativeInterface((void**) &rawNative);
|
||||
MOZ_ASSERT(rawNative);
|
||||
|
||||
IAccessibleHolder::COMPtrType ptr(rawNative);
|
||||
IAccessibleHolder holder(Move(ptr));
|
||||
|
||||
IAccessibleHolder hWndAccHolder;
|
||||
if (nsWinUtils::IsWindowEmulationStarted()) {
|
||||
RootAccessible* rootDocument = outerDoc->RootAccessible();
|
||||
MOZ_ASSERT(rootDocument);
|
||||
|
||||
bool isActive = true;
|
||||
nsIntRect rect(CW_USEDEFAULT, CW_USEDEFAULT, 0, 0);
|
||||
if (Compatibility::IsDolphin()) {
|
||||
rect = Bounds();
|
||||
nsIntRect rootRect = rootDocument->Bounds();
|
||||
rect.x = rootRect.x - rect.x;
|
||||
rect.y -= rootRect.y;
|
||||
tab->GetDocShellIsActive(&isActive);
|
||||
}
|
||||
|
||||
HWND parentWnd = reinterpret_cast<HWND>(rootDocument->GetNativeWindow());
|
||||
HWND hWnd = nsWinUtils::CreateNativeWindow(kClassNameTabContent,
|
||||
parentWnd, rect.x, rect.y,
|
||||
rect.width, rect.height,
|
||||
isActive);
|
||||
if (hWnd) {
|
||||
// Attach accessible document to the emulated native window
|
||||
::SetPropW(hWnd, kPropNameDocAccParent, (HANDLE)this);
|
||||
SetEmulatedWindowHandle(hWnd);
|
||||
IAccessible* rawHWNDAcc = nullptr;
|
||||
if (SUCCEEDED(::AccessibleObjectFromWindow(hWnd, OBJID_WINDOW,
|
||||
IID_IAccessible,
|
||||
(void**)&rawHWNDAcc))) {
|
||||
hWndAccHolder.Set(IAccessibleHolder::COMPtrType(rawHWNDAcc));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Unused << SendEmulatedWindow(reinterpret_cast<uintptr_t>(mEmulatedWindowHandle),
|
||||
hWndAccHolder);
|
||||
Unused << SendParentCOMProxy(holder);
|
||||
Unused << PDocAccessibleParent::SendParentCOMProxy(holder);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -108,7 +108,7 @@ public:
|
||||
void Destroy();
|
||||
virtual void ActorDestroy(ActorDestroyReason aWhy) override
|
||||
{
|
||||
MOZ_DIAGNOSTIC_ASSERT(CheckDocTree());
|
||||
MOZ_ASSERT(CheckDocTree());
|
||||
if (!mShutdown)
|
||||
Destroy();
|
||||
}
|
||||
@ -172,7 +172,8 @@ public:
|
||||
{ return LiveDocs().Get(mChildDocs[aIdx]); }
|
||||
|
||||
#if defined(XP_WIN)
|
||||
void SetCOMProxy(const RefPtr<IAccessible>& aCOMProxy);
|
||||
void MaybeInitWindowEmulation();
|
||||
void SendParentCOMProxy();
|
||||
|
||||
virtual mozilla::ipc::IPCResult RecvGetWindowedPluginIAccessible(
|
||||
const WindowsHandle& aHwnd, IAccessibleHolder* aPluginCOMProxy) override;
|
||||
|
@ -39,15 +39,14 @@ public:
|
||||
#include "mozilla/a11y/ProxyAccessibleShared.h"
|
||||
|
||||
bool GetCOMInterface(void** aOutAccessible) const;
|
||||
void SetCOMInterface(const RefPtr<IAccessible>& aIAccessible)
|
||||
{ mCOMProxy = aIAccessible; }
|
||||
|
||||
protected:
|
||||
explicit ProxyAccessible(DocAccessibleParent* aThisAsDoc)
|
||||
: ProxyAccessibleBase(aThisAsDoc)
|
||||
{ MOZ_COUNT_CTOR(ProxyAccessible); }
|
||||
|
||||
void SetCOMInterface(const RefPtr<IAccessible>& aIAccessible)
|
||||
{ mCOMProxy = aIAccessible; }
|
||||
|
||||
private:
|
||||
RefPtr<IAccessible> mCOMProxy;
|
||||
};
|
||||
|
@ -13,6 +13,7 @@
|
||||
#include "nsIAccessibleRelation.h"
|
||||
#include "nsIAccessibleEditableText.h"
|
||||
#include "nsIPersistentProperties2.h"
|
||||
#include "DocAccessibleParent.h"
|
||||
#include "Relation.h"
|
||||
#include "Role.h"
|
||||
#include "RootAccessible.h"
|
||||
|
@ -7,7 +7,6 @@
|
||||
#include "ServiceProvider.h"
|
||||
|
||||
#include "ApplicationAccessibleWrap.h"
|
||||
#include "Compatibility.h"
|
||||
#include "DocAccessible.h"
|
||||
#include "nsAccUtils.h"
|
||||
#include "nsCoreUtils.h"
|
||||
@ -72,8 +71,10 @@ ServiceProvider::QueryService(REFGUID aGuidService, REFIID aIID,
|
||||
}
|
||||
|
||||
// Can get to IAccessibleApplication from any node via QS
|
||||
// Note: in case of JAWS we want to check if aIID is
|
||||
// IID_IAccessibleApplication.
|
||||
if (aGuidService == IID_IAccessibleApplication ||
|
||||
(Compatibility::IsJAWS() && aIID == IID_IAccessibleApplication)) {
|
||||
aIID == IID_IAccessibleApplication) {
|
||||
ApplicationAccessibleWrap* applicationAcc =
|
||||
static_cast<ApplicationAccessibleWrap*>(ApplicationAcc());
|
||||
if (!applicationAcc)
|
||||
|
@ -2269,6 +2269,16 @@
|
||||
</targetApplication>
|
||||
</versionRange>
|
||||
</pluginItem>
|
||||
<pluginItem blockID="3f136e56-4c93-4619-8c0d-d86258c1065d">
|
||||
<match exp="(nppdf32\.dll)|(AdobePDFViewerNPAPI\.plugin)" name="filename"/>
|
||||
<infoURL>https://get.adobe.com/reader/</infoURL>
|
||||
<versionRange maxVersion="15.006.30244" minVersion="15.006" severity="1" vulnerabilitystatus="1"/>
|
||||
</pluginItem>
|
||||
<pluginItem blockID="43b45ad8-a373-42c1-89c6-64e2746885e5">
|
||||
<match exp="(nppdf32\.dll)|(AdobePDFViewerNPAPI\.plugin)" name="filename"/>
|
||||
<infoURL>https://get.adobe.com/reader/</infoURL>
|
||||
<versionRange maxVersion="15.020.20042" minVersion="15.020" severity="1" vulnerabilitystatus="1"/>
|
||||
</pluginItem>
|
||||
<pluginItem blockID="p366">
|
||||
<match exp="Scorch\.plugin" name="filename"/>
|
||||
<versionRange maxVersion="6.2.0" minVersion="6.2.0" severity="1"/>
|
||||
@ -2349,6 +2359,11 @@
|
||||
</targetApplication>
|
||||
</versionRange>
|
||||
</pluginItem>
|
||||
<pluginItem blockID="59c31ade-88d6-4b22-8601-5316f82e3977">
|
||||
<match exp="(nppdf32\.dll)|(AdobePDFViewerNPAPI\.plugin)" name="filename"/>
|
||||
<infoURL>https://get.adobe.com/reader/</infoURL>
|
||||
<versionRange maxVersion="11.0.18" minVersion="11.0" severity="1" vulnerabilitystatus="1"/>
|
||||
</pluginItem>
|
||||
<pluginItem blockID="p1004">
|
||||
<match exp="Unity Web Player\.plugin" name="filename"/>
|
||||
<match exp="^($|Unity Web Player version 5.0(\.([0-2]|3f1))?[^0-9.])" name="description"/>
|
||||
@ -2809,7 +2824,7 @@
|
||||
<pluginItem blockID="p28">
|
||||
<match exp="NPFFAddOn.dll" name="filename"/>
|
||||
</pluginItem>
|
||||
<pluginItem blockID="p1421">
|
||||
<pluginItem blockID="p1421" os="Linux">
|
||||
<match exp="libflashplayer\.so" name="filename"/>
|
||||
<infoURL>https://get.adobe.com/flashplayer/</infoURL>
|
||||
<versionRange maxVersion="23.0.0.207" minVersion="11.2.202.643" severity="0" vulnerabilitystatus="1"/>
|
||||
|
@ -1704,9 +1704,8 @@
|
||||
|
||||
// Abort if we're not going to change anything
|
||||
let currentRemoteType = aBrowser.getAttribute("remoteType");
|
||||
if (isRemote == aShouldBeRemote && !aOptions.newFrameloader && !aOptions.freshProcess &&
|
||||
(!isRemote || currentRemoteType == aOptions.remoteType) &&
|
||||
!aBrowser.frameLoader.isFreshProcess) {
|
||||
if (isRemote == aShouldBeRemote && !aOptions.newFrameloader &&
|
||||
(!isRemote || currentRemoteType == aOptions.remoteType)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -1765,18 +1764,8 @@
|
||||
aBrowser.presetOpenerWindow(aOptions.opener);
|
||||
}
|
||||
|
||||
// Set the freshProcess attribute so that the frameloader knows to
|
||||
// create a new process
|
||||
if (aOptions.freshProcess) {
|
||||
aBrowser.setAttribute("freshProcess", "true");
|
||||
}
|
||||
|
||||
parent.appendChild(aBrowser);
|
||||
|
||||
// Remove the freshProcess attribute if we set it, as we don't
|
||||
// want it to apply for the next time the frameloader is created
|
||||
aBrowser.removeAttribute("freshProcess");
|
||||
|
||||
aBrowser.userTypedValue = oldUserTypedValue;
|
||||
if (hadStartedLoad) {
|
||||
aBrowser.urlbarChangeTracker.startedLoad();
|
||||
@ -1850,15 +1839,23 @@
|
||||
if (!gMultiProcessBrowser)
|
||||
return this.updateBrowserRemoteness(aBrowser, false);
|
||||
|
||||
// If we're in a LargeAllocation process, we prefer switching back
|
||||
// into a normal content process, as that way we can clean up the
|
||||
// L-A process.
|
||||
let preferredRemoteType = aBrowser.remoteType;
|
||||
if (aBrowser.remoteType == E10SUtils.LARGE_ALLOCATION_REMOTE_TYPE) {
|
||||
preferredRemoteType = E10SUtils.DEFAULT_REMOTE_TYPE;
|
||||
}
|
||||
aOptions.remoteType =
|
||||
E10SUtils.getRemoteTypeForURI(aURL,
|
||||
gMultiProcessBrowser,
|
||||
preferredRemoteType,
|
||||
aOptions.freshProcess);
|
||||
|
||||
// If this URL can't load in the current browser then flip it to the
|
||||
// correct type.
|
||||
let currentRemoteType = aBrowser.remoteType;
|
||||
aOptions.remoteType =
|
||||
E10SUtils.getRemoteTypeForURI(aURL, gMultiProcessBrowser,
|
||||
currentRemoteType);
|
||||
if (currentRemoteType != aOptions.remoteType ||
|
||||
aOptions.freshProcess || aOptions.newFrameloader ||
|
||||
aBrowser.frameLoader.isFreshProcess) {
|
||||
if (aBrowser.remoteType != aOptions.remoteType ||
|
||||
aOptions.newFrameloader) {
|
||||
let remote = aOptions.remoteType != E10SUtils.NOT_REMOTE;
|
||||
return this.updateBrowserRemoteness(aBrowser, remote, aOptions);
|
||||
}
|
||||
|
@ -39,6 +39,9 @@ const NOT_REMOTE = null;
|
||||
const WEB_REMOTE_TYPE = "web";
|
||||
const FILE_REMOTE_TYPE = "file";
|
||||
const EXTENSION_REMOTE_TYPE = "extension";
|
||||
|
||||
// This must start with the WEB_REMOTE_TYPE above.
|
||||
const LARGE_ALLOCATION_REMOTE_TYPE = "webLargeAllocation";
|
||||
const DEFAULT_REMOTE_TYPE = WEB_REMOTE_TYPE;
|
||||
|
||||
function validatedWebRemoteType(aPreferredRemoteType) {
|
||||
@ -52,6 +55,7 @@ this.E10SUtils = {
|
||||
WEB_REMOTE_TYPE,
|
||||
FILE_REMOTE_TYPE,
|
||||
EXTENSION_REMOTE_TYPE,
|
||||
LARGE_ALLOCATION_REMOTE_TYPE,
|
||||
|
||||
canLoadURIInProcess(aURL, aProcess) {
|
||||
let remoteType = aProcess == Ci.nsIXULRuntime.PROCESS_TYPE_CONTENT
|
||||
@ -60,11 +64,16 @@ this.E10SUtils = {
|
||||
},
|
||||
|
||||
getRemoteTypeForURI(aURL, aMultiProcess,
|
||||
aPreferredRemoteType = DEFAULT_REMOTE_TYPE) {
|
||||
aPreferredRemoteType = DEFAULT_REMOTE_TYPE,
|
||||
aLargeAllocation = false) {
|
||||
if (!aMultiProcess) {
|
||||
return NOT_REMOTE;
|
||||
}
|
||||
|
||||
if (aLargeAllocation) {
|
||||
return LARGE_ALLOCATION_REMOTE_TYPE;
|
||||
}
|
||||
|
||||
// loadURI in browser.xml treats null as about:blank
|
||||
if (!aURL) {
|
||||
aURL = "about:blank";
|
||||
@ -179,7 +188,7 @@ this.E10SUtils = {
|
||||
// If we are in a Large-Allocation process, and it wouldn't be content visible
|
||||
// to change processes, we want to load into a new process so that we can throw
|
||||
// this one out.
|
||||
if (aDocShell.inLargeAllocProcess &&
|
||||
if (Services.appinfo.remoteType == LARGE_ALLOCATION_REMOTE_TYPE &&
|
||||
!aDocShell.awaitingLargeAlloc &&
|
||||
aDocShell.isOnlyToplevelInTabGroup) {
|
||||
return false;
|
||||
|
@ -14911,11 +14911,3 @@ nsDocShell::GetAwaitingLargeAlloc(bool* aResult)
|
||||
*aResult = static_cast<TabChild*>(tabChild.get())->IsAwaitingLargeAlloc();
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsDocShell::GetInLargeAllocProcess(bool* aResult)
|
||||
{
|
||||
MOZ_ASSERT(aResult);
|
||||
*aResult = TabChild::InLargeAllocProcess();
|
||||
return NS_OK;
|
||||
}
|
||||
|
@ -1126,12 +1126,6 @@ interface nsIDocShell : nsIDocShellTreeItem
|
||||
*/
|
||||
[infallible] readonly attribute boolean isOnlyToplevelInTabGroup;
|
||||
|
||||
/**
|
||||
* Returns `true` if this docshell is loaded within a Large-Allocation
|
||||
* process.
|
||||
*/
|
||||
[infallible] readonly attribute boolean inLargeAllocProcess;
|
||||
|
||||
/**
|
||||
* Returns `true` if this docshell was created due to a Large-Allocation
|
||||
* header, and has not seen the initiating load yet.
|
||||
|
@ -9788,8 +9788,9 @@ nsContentUtils::AttemptLargeAllocationLoad(nsIHttpChannel* aChannel)
|
||||
TabChild* tabChild = TabChild::GetFrom(outer->AsOuter());
|
||||
NS_ENSURE_TRUE(tabChild, false);
|
||||
|
||||
if (tabChild->TakeAwaitingLargeAlloc()) {
|
||||
if (tabChild->IsAwaitingLargeAlloc()) {
|
||||
NS_WARNING("In a Large-Allocation TabChild, ignoring Large-Allocation header!");
|
||||
tabChild->StopAwaitingLargeAlloc();
|
||||
outer->SetLargeAllocStatus(LargeAllocStatus::SUCCESS);
|
||||
return false;
|
||||
}
|
||||
|
@ -12557,8 +12557,8 @@ nsDocument::ReportUseCounters(UseCounterReportKind aKind)
|
||||
c < eUseCounter_Count; ++c) {
|
||||
UseCounter uc = static_cast<UseCounter>(c);
|
||||
|
||||
Telemetry::ID id =
|
||||
static_cast<Telemetry::ID>(Telemetry::HistogramFirstUseCounter + uc * 2);
|
||||
Telemetry::HistogramID id =
|
||||
static_cast<Telemetry::HistogramID>(Telemetry::HistogramFirstUseCounter + uc * 2);
|
||||
bool value = GetUseCounter(uc);
|
||||
|
||||
if (value) {
|
||||
@ -12576,8 +12576,8 @@ nsDocument::ReportUseCounters(UseCounterReportKind aKind)
|
||||
}
|
||||
|
||||
if (IsTopLevelContentDocument()) {
|
||||
id = static_cast<Telemetry::ID>(Telemetry::HistogramFirstUseCounter +
|
||||
uc * 2 + 1);
|
||||
id = static_cast<Telemetry::HistogramID>(Telemetry::HistogramFirstUseCounter +
|
||||
uc * 2 + 1);
|
||||
value = GetUseCounter(uc) || GetChildDocumentUseCounter(uc);
|
||||
|
||||
if (value) {
|
||||
|
@ -174,17 +174,10 @@ nsFrameLoader::nsFrameLoader(Element* aOwner, nsPIDOMWindowOuter* aOpener, bool
|
||||
, mClampScrollPosition(true)
|
||||
, mObservingOwnerContent(false)
|
||||
, mVisible(true)
|
||||
, mFreshProcess(false)
|
||||
{
|
||||
mRemoteFrame = ShouldUseRemoteProcess();
|
||||
MOZ_ASSERT(!mRemoteFrame || !aOpener,
|
||||
"Cannot pass aOpener for a remote frame!");
|
||||
|
||||
// Check if we are supposed to load into a fresh process
|
||||
mFreshProcess = mOwnerContent->AttrValueIs(kNameSpaceID_None,
|
||||
nsGkAtoms::freshProcess,
|
||||
nsGkAtoms::_true,
|
||||
eCaseMatters);
|
||||
}
|
||||
|
||||
nsFrameLoader::~nsFrameLoader()
|
||||
@ -1348,15 +1341,6 @@ nsFrameLoader::SwapWithOtherRemoteLoader(nsFrameLoader* aOther,
|
||||
return NS_ERROR_NOT_IMPLEMENTED;
|
||||
}
|
||||
|
||||
// Remote types must match to swap loaders.
|
||||
const nsAString& currentRemoteType =
|
||||
mRemoteBrowser->Manager()->AsContentParent()->GetRemoteType();
|
||||
const nsAString& newRemoteType =
|
||||
aOther->mRemoteBrowser->Manager()->AsContentParent()->GetRemoteType();
|
||||
if (!currentRemoteType.Equals(newRemoteType)) {
|
||||
return NS_ERROR_NOT_IMPLEMENTED;
|
||||
}
|
||||
|
||||
if (mRemoteBrowser->IsIsolatedMozBrowserElement() !=
|
||||
aOther->mRemoteBrowser->IsIsolatedMozBrowserElement()) {
|
||||
return NS_ERROR_NOT_IMPLEMENTED;
|
||||
@ -1506,6 +1490,20 @@ nsFrameLoader::SwapWithOtherRemoteLoader(nsFrameLoader* aOther,
|
||||
return rv;
|
||||
}
|
||||
|
||||
// Swap the remoteType property as the frameloaders are being swapped
|
||||
nsAutoString ourRemoteType;
|
||||
if (!ourContent->GetAttr(kNameSpaceID_None, nsGkAtoms::RemoteType,
|
||||
ourRemoteType)) {
|
||||
ourRemoteType.AssignLiteral(DEFAULT_REMOTE_TYPE);
|
||||
}
|
||||
nsAutoString otherRemoteType;
|
||||
if (!otherContent->GetAttr(kNameSpaceID_None, nsGkAtoms::RemoteType,
|
||||
otherRemoteType)) {
|
||||
otherRemoteType.AssignLiteral(DEFAULT_REMOTE_TYPE);
|
||||
}
|
||||
ourContent->SetAttr(kNameSpaceID_None, nsGkAtoms::RemoteType, otherRemoteType, false);
|
||||
otherContent->SetAttr(kNameSpaceID_None, nsGkAtoms::RemoteType, ourRemoteType, false);
|
||||
|
||||
Unused << mRemoteBrowser->SendSwappedWithOtherRemoteLoader(
|
||||
ourContext.AsIPCTabContext());
|
||||
Unused << aOther->mRemoteBrowser->SendSwappedWithOtherRemoteLoader(
|
||||
@ -2938,8 +2936,7 @@ nsFrameLoader::TryRemoteBrowser()
|
||||
NS_ENSURE_SUCCESS(rv, false);
|
||||
|
||||
nsCOMPtr<Element> ownerElement = mOwnerContent;
|
||||
mRemoteBrowser = ContentParent::CreateBrowser(context, ownerElement, openerContentParent,
|
||||
mFreshProcess);
|
||||
mRemoteBrowser = ContentParent::CreateBrowser(context, ownerElement, openerContentParent);
|
||||
if (!mRemoteBrowser) {
|
||||
return false;
|
||||
}
|
||||
@ -3676,13 +3673,6 @@ nsFrameLoader::GetIsDead(bool* aIsDead)
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsFrameLoader::GetIsFreshProcess(bool* aIsFreshProcess)
|
||||
{
|
||||
*aIsFreshProcess = mFreshProcess;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsIMessageSender*
|
||||
nsFrameLoader::GetProcessMessageManager() const
|
||||
{
|
||||
|
@ -268,12 +268,6 @@ interface nsIFrameLoader : nsISupports
|
||||
* Is `true` if the frameloader is dead (destroy has been called on it)
|
||||
*/
|
||||
[infallible] readonly attribute boolean isDead;
|
||||
|
||||
/**
|
||||
* Is `true` if the <xul:browser> which created this frameloader had the
|
||||
* freshProcess attribute set when it was created.
|
||||
*/
|
||||
[infallible] readonly attribute boolean isFreshProcess;
|
||||
};
|
||||
|
||||
%{C++
|
||||
|
@ -28,6 +28,7 @@
|
||||
#include "mozilla/dom/IndexedDatabaseManager.h"
|
||||
#include "mozilla/ipc/InputStreamUtils.h"
|
||||
#include "mozilla/ipc/IPCStreamUtils.h"
|
||||
#include "mozilla/ipc/BackgroundChild.h"
|
||||
#include "mozilla/ipc/PBackgroundChild.h"
|
||||
#include "mozilla/ipc/PBackgroundParent.h"
|
||||
#include "mozilla/ipc/PFileDescriptorSetParent.h"
|
||||
@ -51,10 +52,6 @@
|
||||
#include "WorkerPrivate.h"
|
||||
#include "WorkerRunnable.h"
|
||||
|
||||
#ifdef DEBUG
|
||||
#include "BackgroundChild.h" // BackgroundChild::GetForCurrentThread().
|
||||
#endif
|
||||
|
||||
#ifdef OS_POSIX
|
||||
#include "chrome/common/file_descriptor_set_posix.h"
|
||||
#endif
|
||||
@ -2605,6 +2602,18 @@ CreateStreamHelper::GetStream(nsIInputStream** aInputStream)
|
||||
|
||||
if (EventTargetIsOnCurrentThread(baseRemoteBlobImpl->GetActorEventTarget())) {
|
||||
RunInternal(baseRemoteBlobImpl, false);
|
||||
} else if (PBackgroundChild* manager = mozilla::ipc::BackgroundChild::GetForCurrentThread()) {
|
||||
BlobChild* blobChild = BlobChild::GetOrCreate(manager, baseRemoteBlobImpl);
|
||||
MOZ_ASSERT(blobChild);
|
||||
|
||||
RefPtr<BlobImpl> blobImpl = blobChild->GetBlobImpl();
|
||||
MOZ_ASSERT(blobImpl);
|
||||
|
||||
ErrorResult rv;
|
||||
blobImpl->GetInternalStream(aInputStream, rv);
|
||||
mRemoteBlobImpl = nullptr;
|
||||
mDone = true;
|
||||
return rv.StealNSResult();
|
||||
} else {
|
||||
nsresult rv = baseRemoteBlobImpl->DispatchToTarget(this);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
|
@ -672,40 +672,33 @@ ContentParent::RandomSelect(const nsTArray<ContentParent*>& aContentParents,
|
||||
/*static*/ already_AddRefed<ContentParent>
|
||||
ContentParent::GetNewOrUsedBrowserProcess(const nsAString& aRemoteType,
|
||||
ProcessPriority aPriority,
|
||||
ContentParent* aOpener,
|
||||
bool aLargeAllocationProcess,
|
||||
bool* aNew)
|
||||
ContentParent* aOpener)
|
||||
{
|
||||
if (aNew) {
|
||||
*aNew = false;
|
||||
}
|
||||
// Decide which pool of content parents we are going to be pulling from based
|
||||
// on the aRemoteType and aLargeAllocationProcess flag.
|
||||
nsAutoString contentProcessType(aLargeAllocationProcess
|
||||
? NS_LITERAL_STRING(LARGE_ALLOCATION_REMOTE_TYPE)
|
||||
: aRemoteType);
|
||||
nsTArray<ContentParent*>& contentParents = GetOrCreatePool(aRemoteType);
|
||||
|
||||
nsTArray<ContentParent*>& contentParents = GetOrCreatePool(contentProcessType);
|
||||
|
||||
uint32_t maxContentParents = GetMaxProcessCount(contentProcessType);
|
||||
uint32_t maxContentParents = GetMaxProcessCount(aRemoteType);
|
||||
|
||||
RefPtr<ContentParent> p;
|
||||
if (contentParents.Length() >= uint32_t(maxContentParents) &&
|
||||
(p = RandomSelect(contentParents, aOpener, maxContentParents))) {
|
||||
return p.forget();
|
||||
if (contentParents.Length() >= maxContentParents) {
|
||||
// We never want to re-use Large-Allocation processes.
|
||||
if (aRemoteType.EqualsLiteral(LARGE_ALLOCATION_REMOTE_TYPE)) {
|
||||
return GetNewOrUsedBrowserProcess(NS_LITERAL_STRING(DEFAULT_REMOTE_TYPE),
|
||||
aPriority,
|
||||
aOpener);
|
||||
}
|
||||
|
||||
if ((p = RandomSelect(contentParents, aOpener, maxContentParents))) {
|
||||
return p.forget();
|
||||
}
|
||||
}
|
||||
|
||||
// Try to take the preallocated process only for the default process type.
|
||||
if (contentProcessType.Equals(NS_LITERAL_STRING(DEFAULT_REMOTE_TYPE)) &&
|
||||
if (aRemoteType.Equals(NS_LITERAL_STRING(DEFAULT_REMOTE_TYPE)) &&
|
||||
(p = PreallocatedProcessManager::Take())) {
|
||||
// For pre-allocated process we have not set the opener yet.
|
||||
p->mOpener = aOpener;
|
||||
} else {
|
||||
p = new ContentParent(aOpener, contentProcessType);
|
||||
|
||||
if (aNew) {
|
||||
*aNew = true;
|
||||
}
|
||||
p = new ContentParent(aOpener, aRemoteType);
|
||||
|
||||
if (!p->LaunchSubprocess(aPriority)) {
|
||||
return nullptr;
|
||||
@ -981,8 +974,7 @@ ContentParent::RecvFindPlugins(const uint32_t& aPluginEpoch,
|
||||
/*static*/ TabParent*
|
||||
ContentParent::CreateBrowser(const TabContext& aContext,
|
||||
Element* aFrameElement,
|
||||
ContentParent* aOpenerContentParent,
|
||||
bool aFreshProcess)
|
||||
ContentParent* aOpenerContentParent)
|
||||
{
|
||||
PROFILER_LABEL_FUNC(js::ProfileEntry::Category::OTHER);
|
||||
|
||||
@ -1005,7 +997,12 @@ ContentParent::CreateBrowser(const TabContext& aContext,
|
||||
openerTabId = TabParent::GetTabIdFrom(docShell);
|
||||
}
|
||||
|
||||
bool newProcess = false;
|
||||
nsAutoString remoteType;
|
||||
if (!aFrameElement->GetAttr(kNameSpaceID_None, nsGkAtoms::RemoteType,
|
||||
remoteType)) {
|
||||
remoteType.AssignLiteral(DEFAULT_REMOTE_TYPE);
|
||||
}
|
||||
|
||||
RefPtr<nsIContentParent> constructorSender;
|
||||
if (isInContentProcess) {
|
||||
MOZ_ASSERT(aContext.IsMozBrowserElement());
|
||||
@ -1015,15 +1012,8 @@ ContentParent::CreateBrowser(const TabContext& aContext,
|
||||
if (aOpenerContentParent) {
|
||||
constructorSender = aOpenerContentParent;
|
||||
} else {
|
||||
nsAutoString remoteType;
|
||||
if (!aFrameElement->GetAttr(kNameSpaceID_None, nsGkAtoms::RemoteType,
|
||||
remoteType)) {
|
||||
remoteType.AssignLiteral(DEFAULT_REMOTE_TYPE);
|
||||
}
|
||||
|
||||
constructorSender =
|
||||
GetNewOrUsedBrowserProcess(remoteType, initialPriority, nullptr,
|
||||
aFreshProcess, &newProcess);
|
||||
GetNewOrUsedBrowserProcess(remoteType, initialPriority, nullptr);
|
||||
if (!constructorSender) {
|
||||
return nullptr;
|
||||
}
|
||||
@ -1070,11 +1060,10 @@ ContentParent::CreateBrowser(const TabContext& aContext,
|
||||
constructorSender->ChildID(),
|
||||
constructorSender->IsForBrowser());
|
||||
|
||||
if (aFreshProcess) {
|
||||
if (remoteType.EqualsLiteral(LARGE_ALLOCATION_REMOTE_TYPE)) {
|
||||
// Tell the TabChild object that it was created due to a Large-Allocation
|
||||
// request, and whether or not that Large-Allocation request succeeded at
|
||||
// creating a new content process.
|
||||
Unused << browser->SendSetIsLargeAllocation(true, newProcess);
|
||||
// request.
|
||||
Unused << browser->SendAwaitLargeAlloc();
|
||||
}
|
||||
|
||||
if (browser) {
|
||||
|
@ -173,9 +173,7 @@ public:
|
||||
GetNewOrUsedBrowserProcess(const nsAString& aRemoteType = NS_LITERAL_STRING(NO_REMOTE_TYPE),
|
||||
hal::ProcessPriority aPriority =
|
||||
hal::ProcessPriority::PROCESS_PRIORITY_FOREGROUND,
|
||||
ContentParent* aOpener = nullptr,
|
||||
bool aLargeAllocationProcess = false,
|
||||
bool* anew = nullptr);
|
||||
ContentParent* aOpener = nullptr);
|
||||
|
||||
/**
|
||||
* Get or create a content process for the given TabContext. aFrameElement
|
||||
@ -185,8 +183,7 @@ public:
|
||||
static TabParent*
|
||||
CreateBrowser(const TabContext& aContext,
|
||||
Element* aFrameElement,
|
||||
ContentParent* aOpenerContentParent,
|
||||
bool aFreshProcess = false);
|
||||
ContentParent* aOpenerContentParent);
|
||||
|
||||
static void GetAll(nsTArray<ContentParent*>& aArray);
|
||||
|
||||
|
@ -896,10 +896,10 @@ child:
|
||||
async NotifyPartialSHistoryDeactive();
|
||||
|
||||
/**
|
||||
* Tell the child that it is a fresh process created for a Large-Allocation
|
||||
* load.
|
||||
* Tell the TabChild that it should expect a Large-Allocation load to occur.
|
||||
* Loads which occur until this flag is cleared will not leave the process.
|
||||
*/
|
||||
async SetIsLargeAllocation(bool aIsLA, bool aNewProcess);
|
||||
async AwaitLargeAlloc();
|
||||
|
||||
/*
|
||||
* FIXME: write protocol!
|
||||
|
@ -158,7 +158,6 @@ static const char BEFORE_FIRST_PAINT[] = "before-first-paint";
|
||||
|
||||
typedef nsDataHashtable<nsUint64HashKey, TabChild*> TabChildMap;
|
||||
static TabChildMap* sTabChildren;
|
||||
bool TabChild::sInLargeAllocProcess = false;
|
||||
|
||||
TabChildBase::TabChildBase()
|
||||
: mTabChildGlobal(nullptr)
|
||||
@ -3121,10 +3120,9 @@ TabChild::RecvThemeChanged(nsTArray<LookAndFeelInt>&& aLookAndFeelIntCache)
|
||||
}
|
||||
|
||||
mozilla::ipc::IPCResult
|
||||
TabChild::RecvSetIsLargeAllocation(const bool& aIsLA, const bool& aNewProcess)
|
||||
TabChild::RecvAwaitLargeAlloc()
|
||||
{
|
||||
mAwaitingLA = aIsLA;
|
||||
sInLargeAllocProcess = aIsLA && aNewProcess;
|
||||
mAwaitingLA = true;
|
||||
return IPC_OK();
|
||||
}
|
||||
|
||||
@ -3135,7 +3133,7 @@ TabChild::IsAwaitingLargeAlloc()
|
||||
}
|
||||
|
||||
bool
|
||||
TabChild::TakeAwaitingLargeAlloc()
|
||||
TabChild::StopAwaitingLargeAlloc()
|
||||
{
|
||||
bool awaiting = mAwaitingLA;
|
||||
mAwaitingLA = false;
|
||||
|
@ -664,17 +664,9 @@ public:
|
||||
|
||||
// These methods return `true` if this TabChild is currently awaiting a
|
||||
// Large-Allocation header.
|
||||
bool TakeAwaitingLargeAlloc();
|
||||
bool StopAwaitingLargeAlloc();
|
||||
bool IsAwaitingLargeAlloc();
|
||||
|
||||
// Returns `true` if this this process was created to load a docshell in a
|
||||
// "Fresh Process". This value is initialized to `false`, and is set to `true`
|
||||
// in RecvSetFreshProcess.
|
||||
static bool InLargeAllocProcess()
|
||||
{
|
||||
return sInLargeAllocProcess;
|
||||
}
|
||||
|
||||
already_AddRefed<nsISHistory> GetRelatedSHistory();
|
||||
|
||||
mozilla::dom::TabGroup* TabGroup();
|
||||
@ -716,8 +708,7 @@ protected:
|
||||
|
||||
virtual mozilla::ipc::IPCResult RecvNotifyPartialSHistoryDeactive() override;
|
||||
|
||||
virtual mozilla::ipc::IPCResult RecvSetIsLargeAllocation(const bool& aIsLA,
|
||||
const bool& aNewProcess) override;
|
||||
virtual mozilla::ipc::IPCResult RecvAwaitLargeAlloc() override;
|
||||
|
||||
private:
|
||||
void HandleDoubleTap(const CSSPoint& aPoint, const Modifiers& aModifiers,
|
||||
@ -829,8 +820,6 @@ private:
|
||||
uintptr_t mNativeWindowHandle;
|
||||
#endif // defined(XP_WIN)
|
||||
|
||||
static bool sInLargeAllocProcess;
|
||||
|
||||
DISALLOW_EVIL_CONSTRUCTORS(TabChild);
|
||||
};
|
||||
|
||||
|
@ -965,7 +965,9 @@ TabParent::RecvPDocAccessibleConstructor(PDocAccessibleParent* aDoc,
|
||||
a11y::WrapperFor(doc)->SetID(aMsaaID);
|
||||
MOZ_ASSERT(!aDocCOMProxy.IsNull());
|
||||
RefPtr<IAccessible> proxy(aDocCOMProxy.Get());
|
||||
doc->SetCOMProxy(proxy);
|
||||
doc->SetCOMInterface(proxy);
|
||||
doc->MaybeInitWindowEmulation();
|
||||
doc->SendParentCOMProxy();
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
@ -73,7 +73,7 @@ VP9Benchmark::IsVP9DecodeFast()
|
||||
Preferences::SetUint(sBenchmarkFpsPref, aDecodeFps);
|
||||
Preferences::SetUint(sBenchmarkFpsVersionCheck, sBenchmarkVersionID);
|
||||
}
|
||||
Telemetry::Accumulate(Telemetry::ID::VIDEO_VP9_BENCHMARK_FPS, aDecodeFps);
|
||||
Telemetry::Accumulate(Telemetry::HistogramID::VIDEO_VP9_BENCHMARK_FPS, aDecodeFps);
|
||||
},
|
||||
[]() { });
|
||||
}
|
||||
|
@ -876,7 +876,7 @@ MediaDecoder::EnsureTelemetryReported()
|
||||
}
|
||||
for (const nsCString& codec : codecs) {
|
||||
DECODER_LOG("Telemetry MEDIA_CODEC_USED= '%s'", codec.get());
|
||||
Telemetry::Accumulate(Telemetry::ID::MEDIA_CODEC_USED, codec);
|
||||
Telemetry::Accumulate(Telemetry::HistogramID::MEDIA_CODEC_USED, codec);
|
||||
}
|
||||
|
||||
mTelemetryReported = true;
|
||||
|
@ -22,8 +22,8 @@ DetailedPromise::DetailedPromise(nsIGlobalObject* aGlobal,
|
||||
|
||||
DetailedPromise::DetailedPromise(nsIGlobalObject* aGlobal,
|
||||
const nsACString& aName,
|
||||
Telemetry::ID aSuccessLatencyProbe,
|
||||
Telemetry::ID aFailureLatencyProbe)
|
||||
Telemetry::HistogramID aSuccessLatencyProbe,
|
||||
Telemetry::HistogramID aFailureLatencyProbe)
|
||||
: DetailedPromise(aGlobal, aName)
|
||||
{
|
||||
mSuccessLatencyProbe.Construct(aSuccessLatencyProbe);
|
||||
@ -75,8 +75,8 @@ DetailedPromise::Create(nsIGlobalObject* aGlobal,
|
||||
DetailedPromise::Create(nsIGlobalObject* aGlobal,
|
||||
ErrorResult& aRv,
|
||||
const nsACString& aName,
|
||||
Telemetry::ID aSuccessLatencyProbe,
|
||||
Telemetry::ID aFailureLatencyProbe)
|
||||
Telemetry::HistogramID aSuccessLatencyProbe,
|
||||
Telemetry::HistogramID aFailureLatencyProbe)
|
||||
{
|
||||
RefPtr<DetailedPromise> promise = new DetailedPromise(aGlobal, aName, aSuccessLatencyProbe, aFailureLatencyProbe);
|
||||
promise->CreateWrapper(nullptr, aRv);
|
||||
@ -96,8 +96,8 @@ DetailedPromise::MaybeReportTelemetry(Status aStatus)
|
||||
uint32_t latency = (TimeStamp::Now() - mStartTime).ToMilliseconds();
|
||||
EME_LOG("%s %s latency %ums reported via telemetry", mName.get(),
|
||||
((aStatus == Succeeded) ? "succcess" : "failure"), latency);
|
||||
Telemetry::ID tid = (aStatus == Succeeded) ? mSuccessLatencyProbe.Value()
|
||||
: mFailureLatencyProbe.Value();
|
||||
Telemetry::HistogramID tid = (aStatus == Succeeded) ? mSuccessLatencyProbe.Value()
|
||||
: mFailureLatencyProbe.Value();
|
||||
Telemetry::Accumulate(tid, latency);
|
||||
}
|
||||
|
||||
|
@ -30,8 +30,8 @@ public:
|
||||
static already_AddRefed<DetailedPromise>
|
||||
Create(nsIGlobalObject* aGlobal, ErrorResult& aRv,
|
||||
const nsACString& aName,
|
||||
Telemetry::ID aSuccessLatencyProbe,
|
||||
Telemetry::ID aFailureLatencyProbe);
|
||||
Telemetry::HistogramID aSuccessLatencyProbe,
|
||||
Telemetry::HistogramID aFailureLatencyProbe);
|
||||
|
||||
template <typename T>
|
||||
void MaybeResolve(const T& aArg)
|
||||
@ -53,8 +53,8 @@ private:
|
||||
|
||||
explicit DetailedPromise(nsIGlobalObject* aGlobal,
|
||||
const nsACString& aName,
|
||||
Telemetry::ID aSuccessLatencyProbe,
|
||||
Telemetry::ID aFailureLatencyProbe);
|
||||
Telemetry::HistogramID aSuccessLatencyProbe,
|
||||
Telemetry::HistogramID aFailureLatencyProbe);
|
||||
virtual ~DetailedPromise();
|
||||
|
||||
enum Status { Succeeded, Failed };
|
||||
@ -63,8 +63,8 @@ private:
|
||||
nsCString mName;
|
||||
bool mResponded;
|
||||
TimeStamp mStartTime;
|
||||
Optional<Telemetry::ID> mSuccessLatencyProbe;
|
||||
Optional<Telemetry::ID> mFailureLatencyProbe;
|
||||
Optional<Telemetry::HistogramID> mSuccessLatencyProbe;
|
||||
Optional<Telemetry::HistogramID> mFailureLatencyProbe;
|
||||
};
|
||||
|
||||
} // namespace dom
|
||||
|
@ -130,7 +130,7 @@ OggDemuxer::~OggDemuxer()
|
||||
bool isChained = mIsChained;
|
||||
nsCOMPtr<nsIRunnable> task = NS_NewRunnableFunction([=]() -> void {
|
||||
OGG_DEBUG("Reporting telemetry MEDIA_OGG_LOADED_IS_CHAINED=%d", isChained);
|
||||
Telemetry::Accumulate(Telemetry::ID::MEDIA_OGG_LOADED_IS_CHAINED, isChained);
|
||||
Telemetry::Accumulate(Telemetry::HistogramID::MEDIA_OGG_LOADED_IS_CHAINED, isChained);
|
||||
});
|
||||
// Non-DocGroup version of AbstractThread::MainThread is fine for Telemetry.
|
||||
AbstractThread::MainThread()->Dispatch(task.forget());
|
||||
|
@ -251,7 +251,7 @@ WMFAudioMFTManager::Output(int64_t aStreamOffset,
|
||||
LOG("Audio MFTDecoder returned success but null output.");
|
||||
nsCOMPtr<nsIRunnable> task = NS_NewRunnableFunction([]() -> void {
|
||||
LOG("Reporting telemetry AUDIO_MFT_OUTPUT_NULL_SAMPLES");
|
||||
Telemetry::Accumulate(Telemetry::ID::AUDIO_MFT_OUTPUT_NULL_SAMPLES, 1);
|
||||
Telemetry::Accumulate(Telemetry::HistogramID::AUDIO_MFT_OUTPUT_NULL_SAMPLES, 1);
|
||||
});
|
||||
// Non-DocGroup version of AbstractThread::MainThread is fine for Telemetry.
|
||||
AbstractThread::MainThread()->Dispatch(task.forget());
|
||||
|
@ -131,7 +131,7 @@ WMFVideoMFTManager::~WMFVideoMFTManager()
|
||||
LOG(nsPrintfCString("Reporting telemetry VIDEO_MFT_OUTPUT_NULL_SAMPLES=%d",
|
||||
telemetry)
|
||||
.get());
|
||||
Telemetry::Accumulate(Telemetry::ID::VIDEO_MFT_OUTPUT_NULL_SAMPLES,
|
||||
Telemetry::Accumulate(Telemetry::HistogramID::VIDEO_MFT_OUTPUT_NULL_SAMPLES,
|
||||
telemetry);
|
||||
});
|
||||
// Non-DocGroup version of AbstractThread::MainThread is fine for Telemetry.
|
||||
|
@ -289,7 +289,7 @@ MediaDecodeTask::OnMetadataRead(MetadataHolder* aMetadata)
|
||||
MOZ_LOG(gMediaDecoderLog,
|
||||
LogLevel::Debug,
|
||||
("Telemetry (WebAudio) MEDIA_CODEC_USED= '%s'", codec.get()));
|
||||
Telemetry::Accumulate(Telemetry::ID::MEDIA_CODEC_USED, codec);
|
||||
Telemetry::Accumulate(Telemetry::HistogramID::MEDIA_CODEC_USED, codec);
|
||||
});
|
||||
// Non-DocGroup version of AbstractThread::MainThread is fine for Telemetry.
|
||||
AbstractThread::MainThread()->Dispatch(task.forget());
|
||||
@ -640,4 +640,3 @@ WebAudioDecodeJob::SizeOfIncludingThis(MallocSizeOf aMallocSizeOf) const
|
||||
}
|
||||
|
||||
} // namespace mozilla
|
||||
|
||||
|
@ -319,7 +319,7 @@ namespace {
|
||||
class TelemetryAutoTimer
|
||||
{
|
||||
public:
|
||||
explicit TelemetryAutoTimer(Telemetry::ID aId)
|
||||
explicit TelemetryAutoTimer(Telemetry::HistogramID aId)
|
||||
: id(aId), start(TimeStamp::Now())
|
||||
{}
|
||||
|
||||
@ -329,14 +329,14 @@ public:
|
||||
}
|
||||
|
||||
private:
|
||||
Telemetry::ID id;
|
||||
Telemetry::HistogramID id;
|
||||
const TimeStamp start;
|
||||
};
|
||||
|
||||
} // namespace
|
||||
|
||||
void
|
||||
StorageCache::WaitForPreload(Telemetry::ID aTelemetryID)
|
||||
StorageCache::WaitForPreload(Telemetry::HistogramID aTelemetryID)
|
||||
{
|
||||
if (!mPersistent) {
|
||||
return;
|
||||
|
@ -172,7 +172,7 @@ private:
|
||||
|
||||
private:
|
||||
// Synchronously blocks until the cache is fully loaded from the database
|
||||
void WaitForPreload(mozilla::Telemetry::ID aTelemetryID);
|
||||
void WaitForPreload(mozilla::Telemetry::HistogramID aTelemetryID);
|
||||
|
||||
// Helper to get one of the 3 data sets (regular, private, session)
|
||||
Data& DataSet(const Storage* aStorage);
|
||||
|
@ -48,12 +48,7 @@ function getPID(aBrowser) {
|
||||
|
||||
function getInLAProc(aBrowser) {
|
||||
return ContentTask.spawn(aBrowser, null, () => {
|
||||
try {
|
||||
return docShell.inLargeAllocProcess;
|
||||
} catch (e) {
|
||||
// This must be a non-remote browser, which means it is not fresh
|
||||
return false;
|
||||
}
|
||||
return Services.appinfo.remoteType == "webLargeAllocation";
|
||||
});
|
||||
}
|
||||
|
||||
@ -350,8 +345,46 @@ function* largeAllocSuccessTests() {
|
||||
});
|
||||
});
|
||||
|
||||
// Try dragging the tab into a new window when not at the maximum number of
|
||||
// Large-Allocation processes.
|
||||
yield BrowserTestUtils.withNewTab("about:blank", function*(aBrowser) {
|
||||
info("Starting test 7");
|
||||
|
||||
let pid1 = yield getPID(aBrowser);
|
||||
is(false, yield getInLAProc(aBrowser));
|
||||
|
||||
let ready = Promise.all([expectProcessCreated(),
|
||||
BrowserTestUtils.browserLoaded(aBrowser)]);
|
||||
yield ContentTask.spawn(aBrowser, TEST_URI, TEST_URI => {
|
||||
content.document.location = TEST_URI;
|
||||
});
|
||||
|
||||
yield ready;
|
||||
|
||||
let pid2 = yield getPID(aBrowser);
|
||||
|
||||
isnot(pid1, pid2, "PIDs 1 and 2 should not match");
|
||||
is(true, yield getInLAProc(aBrowser));
|
||||
|
||||
let newWindow = yield BrowserTestUtils.openNewBrowserWindow();
|
||||
|
||||
newWindow.gBrowser.adoptTab(gBrowser.getTabForBrowser(aBrowser), 0);
|
||||
let newTab = newWindow.gBrowser.tabs[0];
|
||||
|
||||
is(newTab.linkedBrowser.currentURI.spec, TEST_URI);
|
||||
is(newTab.linkedBrowser.remoteType, "webLargeAllocation");
|
||||
let pid3 = yield getPID(newTab.linkedBrowser);
|
||||
|
||||
is(pid2, pid3, "PIDs 2 and 3 should match");
|
||||
is(true, yield getInLAProc(newTab.linkedBrowser));
|
||||
|
||||
yield BrowserTestUtils.closeWindow(newWindow);
|
||||
});
|
||||
|
||||
// Try opening a new Large-Allocation document when at the max number of large
|
||||
// allocation processes.
|
||||
yield BrowserTestUtils.withNewTab("about:blank", function*(aBrowser) {
|
||||
info("Starting test 8");
|
||||
yield SpecialPowers.pushPrefEnv({
|
||||
set: [
|
||||
["dom.ipc.processCount.webLargeAllocation", 1]
|
||||
@ -399,7 +432,7 @@ function* largeAllocSuccessTests() {
|
||||
|
||||
// view-source tabs should not be considered to be in a large-allocation process.
|
||||
yield BrowserTestUtils.withNewTab("about:blank", function*(aBrowser) {
|
||||
info("Starting test 8");
|
||||
info("Starting test 9");
|
||||
let pid1 = yield getPID(aBrowser);
|
||||
is(false, yield getInLAProc(aBrowser));
|
||||
|
||||
@ -419,6 +452,50 @@ function* largeAllocSuccessTests() {
|
||||
|
||||
stopExpectNoProcess();
|
||||
});
|
||||
|
||||
// Try dragging tab into new window when at the max number of large allocation
|
||||
// processes.
|
||||
yield BrowserTestUtils.withNewTab("about:blank", function*(aBrowser) {
|
||||
info("Starting test 10");
|
||||
yield SpecialPowers.pushPrefEnv({
|
||||
set: [
|
||||
["dom.ipc.processCount.webLargeAllocation", 1]
|
||||
],
|
||||
});
|
||||
|
||||
let pid1 = yield getPID(aBrowser);
|
||||
is(false, yield getInLAProc(aBrowser));
|
||||
|
||||
let ready = Promise.all([expectProcessCreated(),
|
||||
BrowserTestUtils.browserLoaded(aBrowser)]);
|
||||
yield ContentTask.spawn(aBrowser, TEST_URI, TEST_URI => {
|
||||
content.document.location = TEST_URI;
|
||||
});
|
||||
|
||||
yield ready;
|
||||
|
||||
let pid2 = yield getPID(aBrowser);
|
||||
|
||||
isnot(pid1, pid2, "PIDs 1 and 2 should not match");
|
||||
is(true, yield getInLAProc(aBrowser));
|
||||
|
||||
let newWindow = yield BrowserTestUtils.openNewBrowserWindow();
|
||||
|
||||
newWindow.gBrowser.adoptTab(gBrowser.getTabForBrowser(aBrowser), 0);
|
||||
let newTab = newWindow.gBrowser.tabs[0];
|
||||
|
||||
is(newTab.linkedBrowser.currentURI.spec, TEST_URI);
|
||||
is(newTab.linkedBrowser.remoteType, "webLargeAllocation");
|
||||
let pid3 = yield getPID(newTab.linkedBrowser);
|
||||
|
||||
is(pid2, pid3, "PIDs 2 and 3 should match");
|
||||
is(true, yield getInLAProc(newTab.linkedBrowser));
|
||||
|
||||
yield BrowserTestUtils.closeWindow(newWindow);
|
||||
});
|
||||
|
||||
// XXX: Make sure to reset dom.ipc.processCount.webLargeAllocation if adding a
|
||||
// test after the above test.
|
||||
}
|
||||
|
||||
function* largeAllocFailTests() {
|
||||
|
@ -74,6 +74,7 @@ skip-if = (toolkit == 'android') # Disabled on Android, see bug 1230231
|
||||
[test_bug1170911.html]
|
||||
subsuite = clipboard
|
||||
[test_bug1208217.html]
|
||||
[test_bug1313753.html]
|
||||
[test_clientRects.html]
|
||||
[test_clipboard_disallowed.html]
|
||||
[test_clipboard_events.html]
|
||||
|
61
dom/tests/mochitest/general/test_bug1313753.html
Normal file
61
dom/tests/mochitest/general/test_bug1313753.html
Normal file
@ -0,0 +1,61 @@
|
||||
<!DOCTYPE html>
|
||||
<meta charset=utf-8>
|
||||
<title>Test for bug 1313753</title>
|
||||
<script type="application/javascript"
|
||||
src="/tests/SimpleTest/SimpleTest.js"></script>
|
||||
<div id="log"></div>
|
||||
<script>
|
||||
function runTest() {
|
||||
// Change visible region of |closure| element.
|
||||
document.getElementById("target").classList.add("rotate");
|
||||
window.setTimeout(function() {
|
||||
var target = document.getElementById("target");
|
||||
var bounds = target.getBoundingClientRect();
|
||||
var x = bounds.x + bounds.width / 2;
|
||||
var y = bounds.y + bounds.height / 2;
|
||||
is(document.elementFromPoint(x, y).id, target.id,
|
||||
"it should be |target| element if visible regions of closure is correct");
|
||||
SimpleTest.finish();
|
||||
}, 0);
|
||||
}
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
SimpleTest.waitForFocus(runTest);
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.panel {
|
||||
transform: rotateX(-150deg);
|
||||
backface-visibility: hidden;
|
||||
transform-origin: 0px 0px;
|
||||
position: absolute;
|
||||
display: block;
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
background-color: green;
|
||||
}
|
||||
#closure .rotate {
|
||||
transform: rotateX(0deg);
|
||||
}
|
||||
#closure {
|
||||
perspective: 100px;
|
||||
width: 200px;
|
||||
z-index: 1;
|
||||
}
|
||||
#outer {
|
||||
height: 400px;
|
||||
width: 200px;
|
||||
}
|
||||
</style>
|
||||
<div id="outer">
|
||||
<div id="closure">
|
||||
<div style="transform-style: preserve-3d;">
|
||||
<div style="transform-style: preserve-3d; background-color: blue;">
|
||||
<ul>
|
||||
<li><div id="target" class="panel"></div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
@ -137,9 +137,14 @@ CompositableHost::Create(const TextureInfo& aTextureInfo)
|
||||
}
|
||||
break;
|
||||
case CompositableType::CONTENT_SINGLE:
|
||||
result = new ContentHostSingleBuffered(aTextureInfo);
|
||||
if (gfxVars::UseWebRender()) {
|
||||
result = new WebRenderImageHost(aTextureInfo);
|
||||
} else {
|
||||
result = new ContentHostSingleBuffered(aTextureInfo);
|
||||
}
|
||||
break;
|
||||
case CompositableType::CONTENT_DOUBLE:
|
||||
MOZ_ASSERT(!gfxVars::UseWebRender());
|
||||
result = new ContentHostDoubleBuffered(aTextureInfo);
|
||||
break;
|
||||
default:
|
||||
|
@ -328,6 +328,10 @@ WebRenderBridgeParent::ProcessWebrenderCommands(InfallibleTArray<WebRenderComman
|
||||
builder.PushImage(op.bounds(), op.clip(), op.mask().ptrOr(nullptr), op.filter(), key);
|
||||
keysToDelete.push_back(key);
|
||||
dSurf->Unmap();
|
||||
// XXX workaround for releasing Readlock. See Bug 1339625
|
||||
if(host->GetType() == CompositableType::CONTENT_SINGLE) {
|
||||
host->CleanupResources();
|
||||
}
|
||||
break;
|
||||
}
|
||||
case WebRenderCommand::TOpDPPushIframe: {
|
||||
|
@ -65,9 +65,19 @@ WebRenderImageHost::UseTextureHost(const nsTArray<TimedTexture>& aTextures)
|
||||
newImages.Clear();
|
||||
}
|
||||
|
||||
void
|
||||
WebRenderImageHost::UseComponentAlphaTextures(TextureHost* aTextureOnBlack,
|
||||
TextureHost* aTextureOnWhite)
|
||||
{
|
||||
MOZ_ASSERT_UNREACHABLE("unexpected to be called");
|
||||
}
|
||||
|
||||
void
|
||||
WebRenderImageHost::CleanupResources()
|
||||
{
|
||||
nsTArray<TimedImage> newImages;
|
||||
mImages.SwapElements(newImages);
|
||||
newImages.Clear();
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -34,7 +34,8 @@ public:
|
||||
const Maybe<gfx::Polygon>& aGeometry = Nothing()) override;
|
||||
|
||||
virtual void UseTextureHost(const nsTArray<TimedTexture>& aTextures) override;
|
||||
|
||||
virtual void UseComponentAlphaTextures(TextureHost* aTextureOnBlack,
|
||||
TextureHost* aTextureOnWhite) override;
|
||||
virtual void RemoveTextureHost(TextureHost* aTexture) override;
|
||||
|
||||
virtual TextureHost* GetAsTextureHost(gfx::IntRect* aPictureRect = nullptr) override;
|
||||
|
@ -18,11 +18,13 @@ namespace layers {
|
||||
using namespace mozilla::gfx;
|
||||
|
||||
void
|
||||
WebRenderPaintedLayer::PaintThebes()
|
||||
WebRenderPaintedLayer::PaintThebes(nsTArray<ReadbackProcessor::Update>* aReadbackUpdates)
|
||||
{
|
||||
PROFILER_LABEL("WebRenderPaintedLayer", "PaintThebes",
|
||||
js::ProfileEntry::Category::GRAPHICS);
|
||||
|
||||
mContentClient->BeginPaint();
|
||||
|
||||
uint32_t flags = RotatedContentBuffer::PAINT_CAN_DRAW_ROTATED;
|
||||
|
||||
PaintState state =
|
||||
@ -66,6 +68,9 @@ WebRenderPaintedLayer::PaintThebes()
|
||||
mContentClient->ReturnDrawTargetToBuffer(target);
|
||||
didUpdate = true;
|
||||
}
|
||||
|
||||
mContentClient->EndPaint(aReadbackUpdates);
|
||||
|
||||
if (didUpdate) {
|
||||
Mutated();
|
||||
|
||||
@ -100,10 +105,7 @@ WebRenderPaintedLayer::RenderLayerWithReadback(ReadbackProcessor *aReadback)
|
||||
aReadback->GetPaintedLayerUpdates(this, &readbackUpdates);
|
||||
}
|
||||
|
||||
IntPoint origin(mVisibleRegion.GetBounds().x, mVisibleRegion.GetBounds().y);
|
||||
mContentClient->BeginPaint();
|
||||
PaintThebes();
|
||||
mContentClient->EndPaint(&readbackUpdates);
|
||||
PaintThebes(&readbackUpdates);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -52,7 +52,7 @@ public:
|
||||
|
||||
Layer* GetLayer() override { return this; }
|
||||
void RenderLayer() override;
|
||||
void PaintThebes();
|
||||
void PaintThebes(nsTArray<ReadbackProcessor::Update>* aReadbackUpdates);
|
||||
void RenderLayerWithReadback(ReadbackProcessor *aReadback);
|
||||
RefPtr<ContentClient> mContentClient;
|
||||
};
|
||||
|
@ -23,7 +23,7 @@
|
||||
namespace mozilla {
|
||||
|
||||
namespace Telemetry {
|
||||
enum ID : uint32_t;
|
||||
enum HistogramID : uint32_t;
|
||||
} // namespace Telemetry
|
||||
|
||||
namespace image {
|
||||
@ -56,7 +56,7 @@ struct DecoderFinalStatus final
|
||||
|
||||
struct DecoderTelemetry final
|
||||
{
|
||||
DecoderTelemetry(const Maybe<Telemetry::ID>& aSpeedHistogram,
|
||||
DecoderTelemetry(const Maybe<Telemetry::HistogramID>& aSpeedHistogram,
|
||||
size_t aBytesDecoded,
|
||||
uint32_t aChunkCount,
|
||||
TimeDuration aDecodeTime)
|
||||
@ -77,7 +77,7 @@ struct DecoderTelemetry final
|
||||
|
||||
/// The per-image-format telemetry ID for recording our decoder's speed, or
|
||||
/// Nothing() if we don't record speed telemetry for this kind of decoder.
|
||||
const Maybe<Telemetry::ID> mSpeedHistogram;
|
||||
const Maybe<Telemetry::HistogramID> mSpeedHistogram;
|
||||
|
||||
/// The number of bytes of input our decoder processed.
|
||||
const size_t mBytesDecoded;
|
||||
@ -403,7 +403,7 @@ protected:
|
||||
* speed, or Nothing() if we don't record speed telemetry for this kind of
|
||||
* decoder.
|
||||
*/
|
||||
virtual Maybe<Telemetry::ID> SpeedHistogram() const { return Nothing(); }
|
||||
virtual Maybe<Telemetry::HistogramID> SpeedHistogram() const { return Nothing(); }
|
||||
|
||||
|
||||
/*
|
||||
|
@ -1083,7 +1083,7 @@ nsGIFDecoder2::SkipSubBlocks(const char* aData)
|
||||
nextSubBlockLength);
|
||||
}
|
||||
|
||||
Maybe<Telemetry::ID>
|
||||
Maybe<Telemetry::HistogramID>
|
||||
nsGIFDecoder2::SpeedHistogram() const
|
||||
{
|
||||
return Some(Telemetry::IMAGE_DECODE_SPEED_GIF);
|
||||
|
@ -29,7 +29,7 @@ protected:
|
||||
IResumable* aOnResume) override;
|
||||
nsresult FinishInternal() override;
|
||||
|
||||
Maybe<Telemetry::ID> SpeedHistogram() const override;
|
||||
Maybe<Telemetry::HistogramID> SpeedHistogram() const override;
|
||||
|
||||
private:
|
||||
friend class DecoderFactory;
|
||||
|
@ -122,7 +122,7 @@ nsJPEGDecoder::~nsJPEGDecoder()
|
||||
this));
|
||||
}
|
||||
|
||||
Maybe<Telemetry::ID>
|
||||
Maybe<Telemetry::HistogramID>
|
||||
nsJPEGDecoder::SpeedHistogram() const
|
||||
{
|
||||
return Some(Telemetry::IMAGE_DECODE_SPEED_JPEG);
|
||||
|
@ -60,7 +60,7 @@ protected:
|
||||
IResumable* aOnResume) override;
|
||||
nsresult FinishInternal() override;
|
||||
|
||||
Maybe<Telemetry::ID> SpeedHistogram() const override;
|
||||
Maybe<Telemetry::HistogramID> SpeedHistogram() const override;
|
||||
|
||||
protected:
|
||||
Orientation ReadOrientationFromEXIF();
|
||||
|
@ -1054,7 +1054,7 @@ nsPNGDecoder::warning_callback(png_structp png_ptr, png_const_charp warning_msg)
|
||||
MOZ_LOG(sPNGLog, LogLevel::Warning, ("libpng warning: %s\n", warning_msg));
|
||||
}
|
||||
|
||||
Maybe<Telemetry::ID>
|
||||
Maybe<Telemetry::HistogramID>
|
||||
nsPNGDecoder::SpeedHistogram() const
|
||||
{
|
||||
return Some(Telemetry::IMAGE_DECODE_SPEED_PNG);
|
||||
|
@ -30,7 +30,7 @@ protected:
|
||||
LexerResult DoDecode(SourceBufferIterator& aIterator,
|
||||
IResumable* aOnResume) override;
|
||||
|
||||
Maybe<Telemetry::ID> SpeedHistogram() const override;
|
||||
Maybe<Telemetry::HistogramID> SpeedHistogram() const override;
|
||||
|
||||
private:
|
||||
friend class DecoderFactory;
|
||||
|
@ -1306,6 +1306,22 @@ EnsureFlatString(JSContext* cx, unsigned argc, Value* vp)
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool
|
||||
RepresentativeStringArray(JSContext* cx, unsigned argc, Value* vp)
|
||||
{
|
||||
CallArgs args = CallArgsFromVp(argc, vp);
|
||||
|
||||
RootedObject array(cx, JS_NewArrayObject(cx, 0));
|
||||
if (!array)
|
||||
return false;
|
||||
|
||||
if (!JSString::fillWithRepresentatives(cx, array.as<ArrayObject>()))
|
||||
return false;
|
||||
|
||||
args.rval().setObject(*array);
|
||||
return true;
|
||||
}
|
||||
|
||||
#if defined(DEBUG) || defined(JS_OOM_BREAKPOINT)
|
||||
static bool
|
||||
OOMThreadTypes(JSContext* cx, unsigned argc, Value* vp)
|
||||
@ -4337,6 +4353,11 @@ static const JSFunctionSpecWithHelp TestingFunctions[] = {
|
||||
"ensureFlatString(str)",
|
||||
" Ensures str is a flat (null-terminated) string and returns it."),
|
||||
|
||||
JS_FN_HELP("representativeStringArray", RepresentativeStringArray, 0, 0,
|
||||
"representativeStringArray()",
|
||||
" Returns an array of strings that represent the various internal string\n"
|
||||
" types and character encodings."),
|
||||
|
||||
#if defined(DEBUG) || defined(JS_OOM_BREAKPOINT)
|
||||
JS_FN_HELP("oomThreadTypes", OOMThreadTypes, 0, 0,
|
||||
"oomThreadTypes()",
|
||||
|
@ -15,6 +15,12 @@ ext = newExternalString("abc\0defg\0");
|
||||
assertEq(ensureFlatString(ext), "abc\0defg\0");
|
||||
assertEq(ensureFlatString(ext), "abc\0defg\0");
|
||||
|
||||
for (var s of representativeStringArray())
|
||||
assertEq(ensureFlatString(s), s);
|
||||
|
||||
for (var s of representativeStringArray())
|
||||
assertEq(newExternalString(s), s);
|
||||
|
||||
function testQuote() {
|
||||
for (var data of [["abc", "abc"],
|
||||
["abc\t", "abc\\t"],
|
||||
|
@ -1440,3 +1440,174 @@ JSFlatString::dumpRepresentation(FILE* fp, int indent) const
|
||||
dumpRepresentationChars(fp, indent);
|
||||
}
|
||||
#endif
|
||||
|
||||
static void
|
||||
FinalizeRepresentativeExternalString(Zone* zone, const JSStringFinalizer* fin, char16_t* chars);
|
||||
|
||||
static const JSStringFinalizer RepresentativeExternalStringFinalizer =
|
||||
{ FinalizeRepresentativeExternalString };
|
||||
|
||||
static void
|
||||
FinalizeRepresentativeExternalString(Zone* zone, const JSStringFinalizer* fin, char16_t* chars)
|
||||
{
|
||||
// Constant chars, nothing to free.
|
||||
MOZ_ASSERT(fin == &RepresentativeExternalStringFinalizer);
|
||||
}
|
||||
|
||||
template <typename CheckString, typename CharT>
|
||||
static bool
|
||||
FillWithRepresentatives(JSContext* cx, HandleArrayObject array, uint32_t* index,
|
||||
const CharT* chars, size_t len,
|
||||
size_t fatInlineMaxLength,
|
||||
const CheckString& check)
|
||||
{
|
||||
auto AppendString =
|
||||
[&check](JSContext* cx, HandleArrayObject array, uint32_t* index, HandleString s)
|
||||
{
|
||||
MOZ_ASSERT(check(s));
|
||||
RootedValue val(cx, StringValue(s));
|
||||
return JS_DefineElement(cx, array, (*index)++, val, 0);
|
||||
};
|
||||
|
||||
MOZ_ASSERT(len > fatInlineMaxLength);
|
||||
|
||||
// Normal atom.
|
||||
RootedString atom1(cx, AtomizeChars(cx, chars, len));
|
||||
if (!atom1 || !AppendString(cx, array, index, atom1))
|
||||
return false;
|
||||
MOZ_ASSERT(atom1->isAtom());
|
||||
|
||||
// Inline atom.
|
||||
RootedString atom2(cx, AtomizeChars(cx, chars, 2));
|
||||
if (!atom2 || !AppendString(cx, array, index, atom2))
|
||||
return false;
|
||||
MOZ_ASSERT(atom2->isAtom());
|
||||
MOZ_ASSERT(atom2->isInline());
|
||||
|
||||
// Fat inline atom.
|
||||
RootedString atom3(cx, AtomizeChars(cx, chars, fatInlineMaxLength));
|
||||
if (!atom3 || !AppendString(cx, array, index, atom3))
|
||||
return false;
|
||||
MOZ_ASSERT(atom3->isAtom());
|
||||
MOZ_ASSERT(atom3->isFatInline());
|
||||
|
||||
// Normal flat string.
|
||||
RootedString flat1(cx, NewStringCopyN<CanGC>(cx, chars, len));
|
||||
if (!flat1 || !AppendString(cx, array, index, flat1))
|
||||
return false;
|
||||
MOZ_ASSERT(flat1->isFlat());
|
||||
|
||||
// Inline string.
|
||||
RootedString flat2(cx, NewStringCopyN<CanGC>(cx, chars, 3));
|
||||
if (!flat2 || !AppendString(cx, array, index, flat2))
|
||||
return false;
|
||||
MOZ_ASSERT(flat2->isFlat());
|
||||
MOZ_ASSERT(flat2->isInline());
|
||||
|
||||
// Fat inline string.
|
||||
RootedString flat3(cx, NewStringCopyN<CanGC>(cx, chars, fatInlineMaxLength));
|
||||
if (!flat3 || !AppendString(cx, array, index, flat3))
|
||||
return false;
|
||||
MOZ_ASSERT(flat3->isFlat());
|
||||
MOZ_ASSERT(flat3->isFatInline());
|
||||
|
||||
// Rope.
|
||||
RootedString rope(cx, ConcatStrings<CanGC>(cx, atom1, atom3));
|
||||
if (!rope || !AppendString(cx, array, index, rope))
|
||||
return false;
|
||||
MOZ_ASSERT(rope->isRope());
|
||||
|
||||
// Dependent.
|
||||
RootedString dep(cx, NewDependentString(cx, atom1, 0, len - 2));
|
||||
if (!dep || !AppendString(cx, array, index, dep))
|
||||
return false;
|
||||
MOZ_ASSERT(dep->isDependent());
|
||||
|
||||
// Undepended.
|
||||
RootedString undep(cx, NewDependentString(cx, atom1, 0, len - 3));
|
||||
if (!undep || !undep->ensureFlat(cx) || !AppendString(cx, array, index, undep))
|
||||
return false;
|
||||
MOZ_ASSERT(undep->isUndepended());
|
||||
|
||||
// Extensible.
|
||||
RootedString temp1(cx, NewStringCopyN<CanGC>(cx, chars, len));
|
||||
if (!temp1)
|
||||
return false;
|
||||
RootedString extensible(cx, ConcatStrings<CanGC>(cx, temp1, atom3));
|
||||
if (!extensible || !extensible->ensureLinear(cx))
|
||||
return false;
|
||||
if (!AppendString(cx, array, index, extensible))
|
||||
return false;
|
||||
MOZ_ASSERT(extensible->isExtensible());
|
||||
|
||||
// External. Note that we currently only support TwoByte external strings.
|
||||
RootedString external1(cx), external2(cx);
|
||||
if (IsSame<CharT, char16_t>::value) {
|
||||
external1 = JS_NewExternalString(cx, (const char16_t*)chars, len,
|
||||
&RepresentativeExternalStringFinalizer);
|
||||
if (!external1 || !AppendString(cx, array, index, external1))
|
||||
return false;
|
||||
MOZ_ASSERT(external1->isExternal());
|
||||
|
||||
external2 = JS_NewExternalString(cx, (const char16_t*)chars, 2,
|
||||
&RepresentativeExternalStringFinalizer);
|
||||
if (!external2 || !AppendString(cx, array, index, external2))
|
||||
return false;
|
||||
MOZ_ASSERT(external2->isExternal());
|
||||
}
|
||||
|
||||
// Assert the strings still have the types we expect after creating the
|
||||
// other strings.
|
||||
|
||||
MOZ_ASSERT(atom1->isAtom());
|
||||
MOZ_ASSERT(atom2->isAtom());
|
||||
MOZ_ASSERT(atom3->isAtom());
|
||||
MOZ_ASSERT(atom2->isInline());
|
||||
MOZ_ASSERT(atom3->isFatInline());
|
||||
|
||||
MOZ_ASSERT(flat1->isFlat());
|
||||
MOZ_ASSERT(flat2->isFlat());
|
||||
MOZ_ASSERT(flat3->isFlat());
|
||||
MOZ_ASSERT(flat2->isInline());
|
||||
MOZ_ASSERT(flat3->isFatInline());
|
||||
|
||||
MOZ_ASSERT(rope->isRope());
|
||||
MOZ_ASSERT(dep->isDependent());
|
||||
MOZ_ASSERT(undep->isUndepended());
|
||||
MOZ_ASSERT(extensible->isExtensible());
|
||||
MOZ_ASSERT_IF(external1, external1->isExternal());
|
||||
MOZ_ASSERT_IF(external2, external2->isExternal());
|
||||
return true;
|
||||
}
|
||||
|
||||
/* static */ bool
|
||||
JSString::fillWithRepresentatives(JSContext* cx, HandleArrayObject array)
|
||||
{
|
||||
uint32_t index = 0;
|
||||
|
||||
auto CheckTwoByte = [](JSString* str) { return str->hasTwoByteChars(); };
|
||||
auto CheckLatin1 = [](JSString* str) { return str->hasLatin1Chars(); };
|
||||
|
||||
// Append TwoByte strings.
|
||||
static const char16_t twoByteChars[] = u"\u1234abc\0def\u5678ghijklmasdfa\0xyz0123456789";
|
||||
if (!FillWithRepresentatives(cx, array, &index,
|
||||
twoByteChars, mozilla::ArrayLength(twoByteChars) - 1,
|
||||
JSFatInlineString::MAX_LENGTH_TWO_BYTE,
|
||||
CheckTwoByte))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// Append Latin1 strings.
|
||||
static const Latin1Char latin1Chars[] = "abc\0defghijklmasdfa\0xyz0123456789";
|
||||
if (!FillWithRepresentatives(cx, array, &index,
|
||||
latin1Chars, mozilla::ArrayLength(latin1Chars) - 1,
|
||||
JSFatInlineString::MAX_LENGTH_LATIN1,
|
||||
CheckLatin1))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
MOZ_ASSERT(index == 22);
|
||||
return true;
|
||||
}
|
||||
|
@ -467,6 +467,10 @@ class JSString : public js::gc::TenuredCell
|
||||
return *(JSAtom*)this;
|
||||
}
|
||||
|
||||
// Fills |array| with various strings that represent the different string
|
||||
// kinds and character encodings.
|
||||
static bool fillWithRepresentatives(JSContext* cx, js::HandleArrayObject array);
|
||||
|
||||
/* Only called by the GC for dependent or undepended strings. */
|
||||
|
||||
inline bool hasBase() const {
|
||||
|
@ -1660,7 +1660,7 @@ nsPresContext::RecordInteractionTime(InteractionType aType,
|
||||
|
||||
// Array of histogram IDs for the different interaction types,
|
||||
// keyed by InteractionType.
|
||||
Telemetry::ID histogramIds[] = {
|
||||
Telemetry::HistogramID histogramIds[] = {
|
||||
Telemetry::TIME_TO_FIRST_CLICK_MS,
|
||||
Telemetry::TIME_TO_FIRST_KEY_INPUT_MS,
|
||||
Telemetry::TIME_TO_FIRST_MOUSE_MOVE_MS,
|
||||
|
@ -5,4 +5,4 @@ Makefile.in build files for the Mozilla build system.
|
||||
|
||||
The cubeb git repository is: git://github.com/kinetiknz/cubeb.git
|
||||
|
||||
The git commit ID used was 21e96ac7fd456dc957cd9947a61da1366a1f862d.
|
||||
The git commit ID used was 8977c13bf0dab9a7716501ae92ca5945fe4e1dae.
|
||||
|
@ -717,7 +717,8 @@ TEST(cubeb, resampler_passthrough_duplex_callback_reordering)
|
||||
|
||||
output_seq_idx += BUF_BASE_SIZE;
|
||||
|
||||
ASSERT_EQ(prebuffer_frames, static_cast<long>(ARRAY_LENGTH(input_buffer_prebuffer) / input_params.channels));
|
||||
// prebuffer_frames will hold the frames used by the resampler.
|
||||
ASSERT_EQ(prebuffer_frames, BUF_BASE_SIZE);
|
||||
ASSERT_EQ(got, BUF_BASE_SIZE);
|
||||
|
||||
for (uint32_t i = 0; i < 300; i++) {
|
||||
|
@ -49,6 +49,16 @@ typedef UInt32 AudioFormatFlags;
|
||||
|
||||
const char * DISPATCH_QUEUE_LABEL = "org.mozilla.cubeb";
|
||||
|
||||
#ifdef ALOGV
|
||||
#undef ALOGV
|
||||
#endif
|
||||
#define ALOGV(msg, ...) dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{LOGV(msg, ##__VA_ARGS__);})
|
||||
|
||||
#ifdef ALOG
|
||||
#undef ALOG
|
||||
#endif
|
||||
#define ALOG(msg, ...) dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{LOG(msg, ##__VA_ARGS__);})
|
||||
|
||||
/* Testing empirically, some headsets report a minimal latency that is very
|
||||
* low, but this does not work in practice. Lie and say the minimum is 256
|
||||
* frames. */
|
||||
@ -221,13 +231,17 @@ struct cubeb_stream {
|
||||
/* Hold the input samples in every
|
||||
* input callback iteration */
|
||||
std::unique_ptr<auto_array_wrapper> input_linear_buffer;
|
||||
// After the resampling some input data remains stored inside
|
||||
// the resampler. This number is used in order to calculate
|
||||
// the number of extra silence frames in input.
|
||||
std::atomic<uint32_t> available_input_frames{ 0 };
|
||||
/* Frames on input buffer */
|
||||
std::atomic<uint32_t> input_buffer_frames{ 0 };
|
||||
/* Frame counters */
|
||||
std::atomic<uint64_t> frames_played{ 0 };
|
||||
uint64_t frames_queued = 0;
|
||||
std::atomic<int64_t> frames_read{ 0 };
|
||||
std::atomic<bool> shutdown{ false };
|
||||
std::atomic<bool> shutdown{ true };
|
||||
std::atomic<bool> draining{ false };
|
||||
/* Latency requested by the user. */
|
||||
uint32_t latency_frames = 0;
|
||||
@ -235,11 +249,6 @@ struct cubeb_stream {
|
||||
uint64_t hw_latency_frames = UINT64_MAX;
|
||||
std::atomic<float> panning{ 0 };
|
||||
std::unique_ptr<cubeb_resampler, decltype(&cubeb_resampler_destroy)> resampler;
|
||||
/* This is the number of output callback we got in a row. This is usually one,
|
||||
* but can be two when the input and output rate are different, and more when
|
||||
* a device has been plugged or unplugged, as there can be some time before
|
||||
* the device is ready. */
|
||||
std::atomic<int> output_callback_in_a_row{ 0 };
|
||||
/* This is true if a device change callback is currently running. */
|
||||
std::atomic<bool> switching_device{ false };
|
||||
std::atomic<bool> buffer_size_change_state{ false };
|
||||
@ -377,16 +386,18 @@ audiounit_render_input(cubeb_stream * stm,
|
||||
stm->input_linear_buffer->push(input_buffer_list.mBuffers[0].mData,
|
||||
input_frames * stm->input_desc.mChannelsPerFrame);
|
||||
|
||||
LOGV("(%p) input: buffers %u, size %u, channels %u, frames %d.",
|
||||
/* Advance input frame counter. */
|
||||
assert(input_frames > 0);
|
||||
stm->frames_read += input_frames;
|
||||
stm->available_input_frames += input_frames;
|
||||
|
||||
ALOGV("(%p) input: buffers %u, size %u, channels %u, rendered frames %d, total frames %d.",
|
||||
stm,
|
||||
(unsigned int) input_buffer_list.mNumberBuffers,
|
||||
(unsigned int) input_buffer_list.mBuffers[0].mDataByteSize,
|
||||
(unsigned int) input_buffer_list.mBuffers[0].mNumberChannels,
|
||||
(unsigned int) input_frames);
|
||||
|
||||
/* Advance input frame counter. */
|
||||
assert(input_frames > 0);
|
||||
stm->frames_read += input_frames;
|
||||
(unsigned int) input_frames,
|
||||
stm->available_input_frames.load());
|
||||
|
||||
return noErr;
|
||||
}
|
||||
@ -405,19 +416,10 @@ audiounit_input_callback(void * user_ptr,
|
||||
assert(AU_IN_BUS == bus);
|
||||
|
||||
if (stm->shutdown) {
|
||||
LOG("(%p) input shutdown", stm);
|
||||
ALOG("(%p) input shutdown", stm);
|
||||
return noErr;
|
||||
}
|
||||
|
||||
// This happens when we're finally getting a new input callback after having
|
||||
// switched device, we can clear the input buffer now, only keeping the data
|
||||
// we just got.
|
||||
if (stm->output_callback_in_a_row > stm->expected_output_callbacks_in_a_row) {
|
||||
stm->input_linear_buffer->pop(
|
||||
stm->input_linear_buffer->length() -
|
||||
input_frames * stm->input_stream_params.channels);
|
||||
}
|
||||
|
||||
OSStatus r = audiounit_render_input(stm, flags, tstamp, bus, input_frames);
|
||||
if (r != noErr) {
|
||||
return r;
|
||||
@ -425,7 +427,6 @@ audiounit_input_callback(void * user_ptr,
|
||||
|
||||
// Full Duplex. We'll call data_callback in the AudioUnit output callback.
|
||||
if (stm->output_unit != NULL) {
|
||||
stm->output_callback_in_a_row = 0;
|
||||
return noErr;
|
||||
}
|
||||
|
||||
@ -449,6 +450,12 @@ audiounit_input_callback(void * user_ptr,
|
||||
return noErr;
|
||||
}
|
||||
|
||||
static uint32_t
|
||||
minimum_resampling_input_frames(cubeb_stream *stm)
|
||||
{
|
||||
return ceilf(stm->input_hw_rate / stm->output_hw_rate * stm->input_buffer_frames);
|
||||
}
|
||||
|
||||
static bool
|
||||
is_extra_input_needed(cubeb_stream * stm)
|
||||
{
|
||||
@ -457,17 +464,8 @@ is_extra_input_needed(cubeb_stream * stm)
|
||||
* Otherwise, if we had more than expected callbacks in a row, or we're currently
|
||||
* switching, we add some silence as well to compensate for the fact that
|
||||
* we're lacking some input data. */
|
||||
|
||||
/* If resampling is taking place after every output callback
|
||||
* the input buffer expected to be empty. Any frame left over
|
||||
* from resampling is stored inside the resampler available to
|
||||
* be used in next iteration as needed.
|
||||
* BUT when noop_resampler is operating we have left over
|
||||
* frames since it does not store anything internally. */
|
||||
return stm->frames_read == 0 ||
|
||||
(stm->input_linear_buffer->length() == 0 &&
|
||||
(stm->output_callback_in_a_row > stm->expected_output_callbacks_in_a_row ||
|
||||
stm->switching_device));
|
||||
stm->available_input_frames.load() < minimum_resampling_input_frames(stm);
|
||||
}
|
||||
|
||||
static OSStatus
|
||||
@ -483,20 +481,19 @@ audiounit_output_callback(void * user_ptr,
|
||||
|
||||
cubeb_stream * stm = static_cast<cubeb_stream *>(user_ptr);
|
||||
|
||||
stm->output_callback_in_a_row++;
|
||||
ALOGV("(%p) output: buffers %u, size %u, channels %u, frames %u, total input frames %d.",
|
||||
stm,
|
||||
(unsigned int) outBufferList->mNumberBuffers,
|
||||
(unsigned int) outBufferList->mBuffers[0].mDataByteSize,
|
||||
(unsigned int) outBufferList->mBuffers[0].mNumberChannels,
|
||||
(unsigned int) output_frames,
|
||||
stm->available_input_frames.load());
|
||||
|
||||
LOGV("(%p) output: buffers %u, size %u, channels %u, frames %u.",
|
||||
stm,
|
||||
(unsigned int) outBufferList->mNumberBuffers,
|
||||
(unsigned int) outBufferList->mBuffers[0].mDataByteSize,
|
||||
(unsigned int) outBufferList->mBuffers[0].mNumberChannels,
|
||||
(unsigned int) output_frames);
|
||||
|
||||
long input_frames = 0;
|
||||
long input_frames = 0, input_frames_before_fill = 0;
|
||||
void * output_buffer = NULL, * input_buffer = NULL;
|
||||
|
||||
if (stm->shutdown) {
|
||||
LOG("(%p) output shutdown.", stm);
|
||||
ALOG("(%p) output shutdown.", stm);
|
||||
audiounit_make_silent(&outBufferList->mBuffers[0]);
|
||||
return noErr;
|
||||
}
|
||||
@ -518,16 +515,19 @@ audiounit_output_callback(void * user_ptr,
|
||||
/* If Full duplex get also input buffer */
|
||||
if (stm->input_unit != NULL) {
|
||||
if (is_extra_input_needed(stm)) {
|
||||
uint32_t min_input_frames_required = ceilf(stm->input_hw_rate / stm->output_hw_rate *
|
||||
stm->input_buffer_frames);
|
||||
stm->input_linear_buffer->push_silence(min_input_frames_required * stm->input_desc.mChannelsPerFrame);
|
||||
LOG("(%p) %s pushed %u frames of input silence.", stm, stm->frames_read == 0 ? "Input hasn't started," :
|
||||
stm->switching_device ? "Device switching," : "Drop out,", min_input_frames_required);
|
||||
uint32_t min_input_frames = minimum_resampling_input_frames(stm);
|
||||
stm->input_linear_buffer->push_silence(min_input_frames * stm->input_desc.mChannelsPerFrame);
|
||||
stm->available_input_frames += min_input_frames;
|
||||
|
||||
ALOG("(%p) %s pushed %u frames of input silence.", stm, stm->frames_read == 0 ? "Input hasn't started," :
|
||||
stm->switching_device ? "Device switching," : "Drop out,", min_input_frames);
|
||||
}
|
||||
// The input buffer
|
||||
input_buffer = stm->input_linear_buffer->data();
|
||||
// Number of input frames in the buffer
|
||||
// Number of input frames in the buffer. It will change to actually used frames
|
||||
// inside fill
|
||||
input_frames = stm->input_linear_buffer->length() / stm->input_desc.mChannelsPerFrame;
|
||||
// Number of input frames pushed inside resampler.
|
||||
input_frames_before_fill = input_frames;
|
||||
}
|
||||
|
||||
/* Call user callback through resampler. */
|
||||
@ -538,7 +538,11 @@ audiounit_output_callback(void * user_ptr,
|
||||
output_frames);
|
||||
|
||||
if (input_buffer) {
|
||||
stm->input_linear_buffer->pop(input_frames * stm->input_desc.mChannelsPerFrame);
|
||||
// Decrease counter by the number of frames used by resampler
|
||||
stm->available_input_frames -= input_frames;
|
||||
assert(stm->available_input_frames.load() >= 0);
|
||||
// Pop from the buffer the frames pushed to the resampler.
|
||||
stm->input_linear_buffer->pop(input_frames_before_fill * stm->input_desc.mChannelsPerFrame);
|
||||
}
|
||||
|
||||
if (outframes < 0) {
|
||||
@ -714,6 +718,9 @@ audiounit_property_listener_callback(AudioObjectID /* id */, UInt32 address_coun
|
||||
case kAudioDevicePropertyDataSource:
|
||||
LOG("Event[%u] - mSelector == kAudioHardwarePropertyDataSource", (unsigned int) i);
|
||||
break;
|
||||
default:
|
||||
LOG("Event[%u] - mSelector == Unexpected Event id %d, return", (unsigned int) i, addresses[i].mSelector);
|
||||
return noErr;
|
||||
}
|
||||
}
|
||||
|
||||
@ -890,6 +897,16 @@ audiounit_uninstall_device_changed_callback(cubeb_stream * stm)
|
||||
if (r != noErr) {
|
||||
return CUBEB_ERROR;
|
||||
}
|
||||
|
||||
/* Event to notify when the input is going away. */
|
||||
AudioDeviceID dev = stm->input_device ? stm->input_device :
|
||||
audiounit_get_default_device_id(CUBEB_DEVICE_TYPE_INPUT);
|
||||
r = audiounit_remove_listener(stm, dev, kAudioDevicePropertyDeviceIsAlive,
|
||||
kAudioObjectPropertyScopeGlobal, &audiounit_property_listener_callback);
|
||||
if (r != noErr) {
|
||||
PRINT_ERROR_CODE("AudioObjectRemovePropertyListener/input/kAudioDevicePropertyDeviceIsAlive", r);
|
||||
return CUBEB_ERROR;
|
||||
}
|
||||
}
|
||||
return CUBEB_OK;
|
||||
}
|
||||
@ -1301,18 +1318,8 @@ audiounit_init_input_linear_buffer(cubeb_stream * stream, uint32_t capacity)
|
||||
} else {
|
||||
stream->input_linear_buffer.reset(new auto_array_wrapper_impl<float>(size));
|
||||
}
|
||||
|
||||
assert(stream->input_linear_buffer->length() == 0);
|
||||
|
||||
// Pre-buffer silence if needed
|
||||
if (capacity != 1) {
|
||||
size_t silence_size = stream->input_buffer_frames *
|
||||
stream->input_desc.mChannelsPerFrame;
|
||||
stream->input_linear_buffer->push_silence(silence_size);
|
||||
|
||||
assert(stream->input_linear_buffer->length() == silence_size);
|
||||
}
|
||||
|
||||
return CUBEB_OK;
|
||||
}
|
||||
|
||||
|
@ -72,6 +72,7 @@ long passthrough_resampler<T>::fill(void * input_buffer, long * input_frames_cou
|
||||
|
||||
if (input_buffer) {
|
||||
internal_input_buffer.pop(nullptr, frames_to_samples(output_frames));
|
||||
*input_frames_count = output_frames;
|
||||
}
|
||||
|
||||
return rv;
|
||||
@ -179,7 +180,7 @@ cubeb_resampler_speex<T, InputProcessor, OutputProcessor>
|
||||
/* process the input, and present exactly `output_frames_needed` in the
|
||||
* callback. */
|
||||
input_processor->input(input_buffer, *input_frames_count);
|
||||
resampled_input = input_processor->output(resampled_frame_count);
|
||||
resampled_input = input_processor->output(resampled_frame_count, (size_t*)input_frames_count);
|
||||
|
||||
long got = data_callback(stream, user_ptr,
|
||||
resampled_input, nullptr, resampled_frame_count);
|
||||
@ -226,7 +227,7 @@ cubeb_resampler_speex<T, InputProcessor, OutputProcessor>
|
||||
* callback. */
|
||||
input_processor->input(in_buffer, *input_frames_count);
|
||||
resampled_input =
|
||||
input_processor->output(output_frames_before_processing);
|
||||
input_processor->output(output_frames_before_processing, (size_t*)input_frames_count);
|
||||
} else {
|
||||
resampled_input = nullptr;
|
||||
}
|
||||
|
@ -222,7 +222,7 @@ public:
|
||||
|
||||
/** Returns a buffer containing exactly `output_frame_count` resampled frames.
|
||||
* The consumer should not hold onto the pointer. */
|
||||
T * output(size_t output_frame_count)
|
||||
T * output(size_t output_frame_count, size_t * input_frames_used)
|
||||
{
|
||||
if (resampling_out_buffer.capacity() < frames_to_samples(output_frame_count)) {
|
||||
resampling_out_buffer.reserve(frames_to_samples(output_frame_count));
|
||||
@ -239,6 +239,7 @@ public:
|
||||
/* This shifts back any unresampled samples to the beginning of the input
|
||||
buffer. */
|
||||
resampling_in_buffer.pop(nullptr, frames_to_samples(in_len));
|
||||
*input_frames_used = in_len;
|
||||
|
||||
return resampling_out_buffer.data();
|
||||
}
|
||||
@ -376,7 +377,7 @@ public:
|
||||
* @parameter frames_needed the number of frames to be returned.
|
||||
* @return a buffer containing the delayed frames. The consumer should not
|
||||
* hold onto the pointer. */
|
||||
T * output(uint32_t frames_needed)
|
||||
T * output(uint32_t frames_needed, size_t * input_frames_used)
|
||||
{
|
||||
if (delay_output_buffer.capacity() < frames_to_samples(frames_needed)) {
|
||||
delay_output_buffer.reserve(frames_to_samples(frames_needed));
|
||||
@ -386,6 +387,7 @@ public:
|
||||
delay_output_buffer.push(delay_input_buffer.data(),
|
||||
frames_to_samples(frames_needed));
|
||||
delay_input_buffer.pop(nullptr, frames_to_samples(frames_needed));
|
||||
*input_frames_used = frames_needed;
|
||||
|
||||
return delay_output_buffer.data();
|
||||
}
|
||||
|
@ -254,7 +254,7 @@ EverySecondTelemetryCallback_s(nsAutoPtr<RTCStatsQueries> aQueryList) {
|
||||
bool isAudio = (s.mId.Value().Find("audio") != -1);
|
||||
if (s.mPacketsLost.WasPassed() && s.mPacketsReceived.WasPassed() &&
|
||||
(s.mPacketsLost.Value() + s.mPacketsReceived.Value()) != 0) {
|
||||
ID id;
|
||||
HistogramID id;
|
||||
if (s.mIsRemote) {
|
||||
id = isAudio ? WEBRTC_AUDIO_QUALITY_OUTBOUND_PACKETLOSS_RATE :
|
||||
WEBRTC_VIDEO_QUALITY_OUTBOUND_PACKETLOSS_RATE;
|
||||
@ -268,7 +268,7 @@ EverySecondTelemetryCallback_s(nsAutoPtr<RTCStatsQueries> aQueryList) {
|
||||
(s.mPacketsLost.Value() + s.mPacketsReceived.Value()));
|
||||
}
|
||||
if (s.mJitter.WasPassed()) {
|
||||
ID id;
|
||||
HistogramID id;
|
||||
if (s.mIsRemote) {
|
||||
id = isAudio ? WEBRTC_AUDIO_QUALITY_OUTBOUND_JITTER :
|
||||
WEBRTC_VIDEO_QUALITY_OUTBOUND_JITTER;
|
||||
@ -280,8 +280,8 @@ EverySecondTelemetryCallback_s(nsAutoPtr<RTCStatsQueries> aQueryList) {
|
||||
}
|
||||
if (s.mMozRtt.WasPassed()) {
|
||||
MOZ_ASSERT(s.mIsRemote);
|
||||
ID id = isAudio ? WEBRTC_AUDIO_QUALITY_OUTBOUND_RTT :
|
||||
WEBRTC_VIDEO_QUALITY_OUTBOUND_RTT;
|
||||
HistogramID id = isAudio ? WEBRTC_AUDIO_QUALITY_OUTBOUND_RTT :
|
||||
WEBRTC_VIDEO_QUALITY_OUTBOUND_RTT;
|
||||
Accumulate(id, s.mMozRtt.Value());
|
||||
}
|
||||
if (lastInboundStats && s.mBytesReceived.WasPassed()) {
|
||||
@ -295,7 +295,7 @@ EverySecondTelemetryCallback_s(nsAutoPtr<RTCStatsQueries> aQueryList) {
|
||||
// In theory we're called every second, so delta *should* be in that range.
|
||||
// Small deltas could cause errors due to division
|
||||
if (delta_ms > 500 && delta_ms < 60000) {
|
||||
ID id;
|
||||
HistogramID id;
|
||||
if (s.mIsRemote) {
|
||||
id = isAudio ? WEBRTC_AUDIO_QUALITY_OUTBOUND_BANDWIDTH_KBITS :
|
||||
WEBRTC_VIDEO_QUALITY_OUTBOUND_BANDWIDTH_KBITS;
|
||||
|
@ -9,6 +9,7 @@
|
||||
#include "mozilla/ArrayUtils.h"
|
||||
#include "mozilla/Assertions.h"
|
||||
#include "mozilla/IntegerPrintfMacros.h"
|
||||
#include "mozilla/ScopeExit.h"
|
||||
#include "mozilla/StackWalk.h"
|
||||
|
||||
#include <string.h>
|
||||
@ -337,6 +338,20 @@ WalkStackMain64(struct WalkStackData* aData)
|
||||
frame64.AddrReturn.Mode = AddrModeFlat;
|
||||
#endif
|
||||
|
||||
#ifdef _WIN64
|
||||
// Workaround possible deadlock where the thread we're profiling happens to
|
||||
// be in RtlLookupFunctionEntry (see below) or in RtlAddFunctionTable or
|
||||
// RtlDeleteFunctionTable when starting or shutting down the JS engine.
|
||||
// On Win64 each of these Rtl* functions will take a lock, so we need to make
|
||||
// sure we don't deadlock when a suspended thread is holding it.
|
||||
if (!TryAcquireStackWalkWorkaroundLock()) {
|
||||
return;
|
||||
}
|
||||
auto releaseLock = mozilla::MakeScopeExit([] {
|
||||
ReleaseStackWalkWorkaroundLock();
|
||||
});
|
||||
#endif
|
||||
|
||||
// Skip our own stack walking frames.
|
||||
int skip = (aData->walkCallingThread ? 3 : 0) + aData->skipFrames;
|
||||
|
||||
|
@ -3232,11 +3232,11 @@ nsSocketTransport::CloseSocket(PRFileDesc *aFd, bool aTelemetryEnabled)
|
||||
|
||||
void
|
||||
nsSocketTransport::SendPRBlockingTelemetry(PRIntervalTime aStart,
|
||||
Telemetry::ID aIDNormal,
|
||||
Telemetry::ID aIDShutdown,
|
||||
Telemetry::ID aIDConnectivityChange,
|
||||
Telemetry::ID aIDLinkChange,
|
||||
Telemetry::ID aIDOffline)
|
||||
Telemetry::HistogramID aIDNormal,
|
||||
Telemetry::HistogramID aIDShutdown,
|
||||
Telemetry::HistogramID aIDConnectivityChange,
|
||||
Telemetry::HistogramID aIDLinkChange,
|
||||
Telemetry::HistogramID aIDOffline)
|
||||
{
|
||||
PRIntervalTime now = PR_IntervalNow();
|
||||
if (gIOService->IsNetTearingDown()) {
|
||||
|
@ -171,11 +171,11 @@ public:
|
||||
uint64_t ByteCountSent() override { return mOutput.ByteCount(); }
|
||||
static void CloseSocket(PRFileDesc *aFd, bool aTelemetryEnabled);
|
||||
static void SendPRBlockingTelemetry(PRIntervalTime aStart,
|
||||
Telemetry::ID aIDNormal,
|
||||
Telemetry::ID aIDShutdown,
|
||||
Telemetry::ID aIDConnectivityChange,
|
||||
Telemetry::ID aIDLinkChange,
|
||||
Telemetry::ID aIDOffline);
|
||||
Telemetry::HistogramID aIDNormal,
|
||||
Telemetry::HistogramID aIDShutdown,
|
||||
Telemetry::HistogramID aIDConnectivityChange,
|
||||
Telemetry::HistogramID aIDLinkChange,
|
||||
Telemetry::HistogramID aIDOffline);
|
||||
protected:
|
||||
|
||||
virtual ~nsSocketTransport();
|
||||
|
6
netwerk/cache/nsCacheService.cpp
vendored
6
netwerk/cache/nsCacheService.cpp
vendored
@ -2646,10 +2646,10 @@ nsCacheService::Lock()
|
||||
}
|
||||
|
||||
void
|
||||
nsCacheService::Lock(mozilla::Telemetry::ID mainThreadLockerID)
|
||||
nsCacheService::Lock(mozilla::Telemetry::HistogramID mainThreadLockerID)
|
||||
{
|
||||
mozilla::Telemetry::ID lockerID;
|
||||
mozilla::Telemetry::ID generalID;
|
||||
mozilla::Telemetry::HistogramID lockerID;
|
||||
mozilla::Telemetry::HistogramID generalID;
|
||||
|
||||
if (NS_IsMainThread()) {
|
||||
lockerID = mainThreadLockerID;
|
||||
|
4
netwerk/cache/nsCacheService.h
vendored
4
netwerk/cache/nsCacheService.h
vendored
@ -255,7 +255,7 @@ private:
|
||||
*/
|
||||
|
||||
static void Lock();
|
||||
static void Lock(::mozilla::Telemetry::ID mainThreadLockerID);
|
||||
static void Lock(::mozilla::Telemetry::HistogramID mainThreadLockerID);
|
||||
static void Unlock();
|
||||
void LockAcquired();
|
||||
void LockReleased();
|
||||
@ -381,7 +381,7 @@ public:
|
||||
nsCacheServiceAutoLock() {
|
||||
nsCacheService::Lock();
|
||||
}
|
||||
explicit nsCacheServiceAutoLock(mozilla::Telemetry::ID mainThreadLockerID) {
|
||||
explicit nsCacheServiceAutoLock(mozilla::Telemetry::HistogramID mainThreadLockerID) {
|
||||
nsCacheService::Lock(mainThreadLockerID);
|
||||
}
|
||||
~nsCacheServiceAutoLock() {
|
||||
|
@ -49,7 +49,7 @@ void CacheIOTelemetry::Report(uint32_t aLevel, CacheIOTelemetry::size_type aLeng
|
||||
return;
|
||||
}
|
||||
|
||||
static Telemetry::ID telemetryID[] = {
|
||||
static Telemetry::HistogramID telemetryID[] = {
|
||||
Telemetry::HTTP_CACHE_IO_QUEUE_2_OPEN_PRIORITY,
|
||||
Telemetry::HTTP_CACHE_IO_QUEUE_2_READ_PRIORITY,
|
||||
Telemetry::HTTP_CACHE_IO_QUEUE_2_MANAGEMENT,
|
||||
|
@ -1483,7 +1483,7 @@ nsHostResolver::ThreadFunc(void *arg)
|
||||
uint32_t millis = static_cast<uint32_t>(elapsed.ToMilliseconds());
|
||||
|
||||
if (NS_SUCCEEDED(status)) {
|
||||
Telemetry::ID histogramID;
|
||||
Telemetry::HistogramID histogramID;
|
||||
if (!rec->addr_info_gencnt) {
|
||||
// Time for initial lookup.
|
||||
histogramID = Telemetry::DNS_LOOKUP_TIME;
|
||||
|
@ -19,6 +19,7 @@
|
||||
#include "nsHttpChannel.h"
|
||||
#include "LoadInfo.h"
|
||||
#include "mozilla/Unused.h"
|
||||
#include "nsQueryObject.h"
|
||||
|
||||
namespace mozilla {
|
||||
namespace net {
|
||||
@ -129,7 +130,9 @@ HSTSPrimingListener::CheckHSTSPrimingRequestStatus(nsIRequest* aRequest)
|
||||
}
|
||||
|
||||
bool synthesized = false;
|
||||
nsHttpChannel* rawHttpChannel = static_cast<nsHttpChannel*>(httpChannel.get());
|
||||
RefPtr<nsHttpChannel> rawHttpChannel = do_QueryObject(httpChannel);
|
||||
NS_ENSURE_STATE(rawHttpChannel);
|
||||
|
||||
rv = rawHttpChannel->GetResponseSynthesized(&synthesized);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
if (synthesized) {
|
||||
|
@ -86,9 +86,9 @@ protected:
|
||||
uint32_t mPeakSize;
|
||||
uint32_t mPeakCount;
|
||||
MOZ_INIT_OUTSIDE_CTOR
|
||||
Telemetry::ID mPeakSizeID;
|
||||
Telemetry::HistogramID mPeakSizeID;
|
||||
MOZ_INIT_OUTSIDE_CTOR
|
||||
Telemetry::ID mPeakCountID;
|
||||
Telemetry::HistogramID mPeakCountID;
|
||||
|
||||
private:
|
||||
RefPtr<HpackDynamicTableReporter> mDynamicReporter;
|
||||
|
@ -2723,12 +2723,6 @@ HttpBaseChannel::GetIntegrityMetadata(nsAString& aIntegrityMetadata)
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
mozilla::net::nsHttpChannel*
|
||||
HttpBaseChannel::QueryHttpChannelImpl(void)
|
||||
{
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// HttpBaseChannel::nsISupportsPriority
|
||||
//-----------------------------------------------------------------------------
|
||||
|
@ -252,7 +252,6 @@ public:
|
||||
NS_IMETHOD GetConnectionInfoHashKey(nsACString& aConnectionInfoHashKey) override;
|
||||
NS_IMETHOD GetIntegrityMetadata(nsAString& aIntegrityMetadata) override;
|
||||
NS_IMETHOD SetIntegrityMetadata(const nsAString& aIntegrityMetadata) override;
|
||||
virtual mozilla::net::nsHttpChannel * QueryHttpChannelImpl(void) override;
|
||||
|
||||
inline void CleanRedirectCacheChainIfNecessary()
|
||||
{
|
||||
|
@ -40,6 +40,7 @@
|
||||
#include "nsIWindowWatcher.h"
|
||||
#include "nsIDocument.h"
|
||||
#include "nsStringStream.h"
|
||||
#include "nsQueryObject.h"
|
||||
|
||||
using mozilla::BasePrincipal;
|
||||
using namespace mozilla::dom;
|
||||
@ -366,13 +367,14 @@ HttpChannelParent::DoAsyncOpen( const URIParams& aURI,
|
||||
nsCOMPtr<nsIChannel> channel;
|
||||
rv = NS_NewChannelInternal(getter_AddRefs(channel), uri, loadInfo,
|
||||
nullptr, nullptr, aLoadFlags, ios);
|
||||
|
||||
if (NS_FAILED(rv))
|
||||
if (NS_FAILED(rv)) {
|
||||
return SendFailedAsyncOpen(rv);
|
||||
}
|
||||
|
||||
// This cast is safe since this is AsyncOpen specific to http. channel
|
||||
// is ensured to be nsHttpChannel.
|
||||
mChannel = static_cast<nsHttpChannel *>(channel.get());
|
||||
mChannel = do_QueryObject(channel, &rv);
|
||||
if (NS_FAILED(rv)) {
|
||||
return SendFailedAsyncOpen(rv);
|
||||
}
|
||||
|
||||
// Set the channelId allocated in child to the parent instance
|
||||
mChannel->SetChannelId(aChannelId);
|
||||
@ -601,11 +603,13 @@ HttpChannelParent::ConnectChannel(const uint32_t& registrarId, const bool& shoul
|
||||
return true;
|
||||
}
|
||||
|
||||
// It's safe to cast here since the found parent-side real channel is ensured
|
||||
// to be http (nsHttpChannel). ConnectChannel called from HttpChannelParent::Init
|
||||
// can only be called for http channels. It's bound by ipdl.
|
||||
mChannel = static_cast<nsHttpChannel*>(channel.get());
|
||||
LOG((" found channel %p, rv=%08" PRIx32, mChannel.get(), static_cast<uint32_t>(rv)));
|
||||
LOG((" found channel %p, rv=%08" PRIx32, channel.get(), static_cast<uint32_t>(rv)));
|
||||
mChannel = do_QueryObject(channel);
|
||||
if (!mChannel) {
|
||||
LOG((" but it's not nsHttpChannel"));
|
||||
Delete();
|
||||
return true;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsINetworkInterceptController> controller;
|
||||
NS_QueryNotificationCallbacks(channel, controller);
|
||||
@ -1102,14 +1106,7 @@ HttpChannelParent::OnStartRequest(nsIRequest *aRequest, nsISupports *aContext)
|
||||
MOZ_RELEASE_ASSERT(!mDivertingFromChild,
|
||||
"Cannot call OnStartRequest if diverting is set!");
|
||||
|
||||
// We can't cast here since the new channel can be a redirect to a different
|
||||
// schema. We must query the channel implementation through a special method.
|
||||
nsHttpChannel *chan = nullptr;
|
||||
nsCOMPtr<nsIHttpChannelInternal> httpChannelInternal(do_QueryInterface(aRequest));
|
||||
if (httpChannelInternal) {
|
||||
chan = httpChannelInternal->QueryHttpChannelImpl();
|
||||
}
|
||||
|
||||
RefPtr<nsHttpChannel> chan = do_QueryObject(aRequest);
|
||||
if (!chan) {
|
||||
LOG((" aRequest is not nsHttpChannel"));
|
||||
NS_ERROR("Expecting only nsHttpChannel as aRequest in HttpChannelParent::OnStartRequest");
|
||||
|
@ -6274,12 +6274,6 @@ nsHttpChannel::ForceIntercepted(uint64_t aInterceptionID)
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
mozilla::net::nsHttpChannel*
|
||||
nsHttpChannel::QueryHttpChannelImpl(void)
|
||||
{
|
||||
return this;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// nsHttpChannel::nsISupportsPriority
|
||||
//-----------------------------------------------------------------------------
|
||||
|
@ -152,7 +152,6 @@ public:
|
||||
// nsIHttpChannelInternal
|
||||
NS_IMETHOD SetupFallbackChannel(const char *aFallbackKey) override;
|
||||
NS_IMETHOD ForceIntercepted(uint64_t aInterceptionID) override;
|
||||
virtual mozilla::net::nsHttpChannel * QueryHttpChannelImpl(void) override;
|
||||
// nsISupportsPriority
|
||||
NS_IMETHOD SetPriority(int32_t value) override;
|
||||
// nsIClassOfService
|
||||
|
@ -1597,7 +1597,8 @@ nsHttpConnection::Version()
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
void
|
||||
nsHttpConnection::CloseTransaction(nsAHttpTransaction *trans, nsresult reason)
|
||||
nsHttpConnection::CloseTransaction(nsAHttpTransaction *trans, nsresult reason,
|
||||
bool aIsShutdown)
|
||||
{
|
||||
LOG(("nsHttpConnection::CloseTransaction[this=%p trans=%p reason=%" PRIx32 "]\n",
|
||||
this, trans, static_cast<uint32_t>(reason)));
|
||||
@ -1633,7 +1634,7 @@ nsHttpConnection::CloseTransaction(nsAHttpTransaction *trans, nsresult reason)
|
||||
}
|
||||
|
||||
if (NS_FAILED(reason) && (reason != NS_BINDING_RETARGETED)) {
|
||||
Close(reason);
|
||||
Close(reason, aIsShutdown);
|
||||
}
|
||||
|
||||
// flag the connection as reused here for convenience sake. certainly
|
||||
|
@ -128,7 +128,7 @@ public:
|
||||
|
||||
// nsAHttpConnection compatible methods (non-virtual):
|
||||
nsresult OnHeadersAvailable(nsAHttpTransaction *, nsHttpRequestHead *, nsHttpResponseHead *, bool *reset);
|
||||
void CloseTransaction(nsAHttpTransaction *, nsresult reason);
|
||||
void CloseTransaction(nsAHttpTransaction *, nsresult reason, bool aIsShutdown = false);
|
||||
void GetConnectionInfo(nsHttpConnectionInfo **ci) { NS_IF_ADDREF(*ci = mConnInfo); }
|
||||
nsresult TakeTransport(nsISocketTransport **,
|
||||
nsIAsyncInputStream **,
|
||||
|
@ -2149,7 +2149,10 @@ nsHttpConnectionMgr::OnMsgShutdown(int32_t, ARefBase *param)
|
||||
RefPtr<nsHttpConnection> conn(ent->mActiveConns[0]);
|
||||
ent->mActiveConns.RemoveElementAt(0);
|
||||
DecrementActiveConnCount(conn);
|
||||
conn->Close(NS_ERROR_ABORT, true);
|
||||
// Since nsHttpConnection::Close doesn't break the bond with
|
||||
// the connection's transaction, we must explicitely tell it
|
||||
// to close its transaction and not just self.
|
||||
conn->CloseTransaction(conn->Transaction(), NS_ERROR_ABORT, true);
|
||||
}
|
||||
|
||||
// Close all idle connections.
|
||||
|
@ -9,12 +9,10 @@
|
||||
#include "nsTArrayForwardDeclare.h"
|
||||
template<class T> class nsCOMArray;
|
||||
class nsCString;
|
||||
namespace mozilla { namespace net { class nsHttpChannel; } }
|
||||
%}
|
||||
[ptr] native StringArray(nsTArray<nsCString>);
|
||||
[ref] native StringArrayRef(const nsTArray<nsCString>);
|
||||
[ref] native securityMessagesArray(nsCOMArray<nsISecurityConsoleMessage>);
|
||||
[ptr] native nsHttpChannelPtr(mozilla::net::nsHttpChannel);
|
||||
|
||||
interface nsIAsyncInputStream;
|
||||
interface nsIAsyncOutputStream;
|
||||
@ -305,10 +303,4 @@ interface nsIHttpChannelInternal : nsISupports
|
||||
* The connection info's hash key. We use it to test connection separation.
|
||||
*/
|
||||
readonly attribute ACString connectionInfoHashKey;
|
||||
|
||||
/**
|
||||
* Returns nsHttpChannel (self) when this actually is implementing nsHttpChannel.
|
||||
*/
|
||||
[noscript, notxpcom, nostdcall]
|
||||
nsHttpChannelPtr queryHttpChannelImpl();
|
||||
};
|
||||
|
@ -1015,15 +1015,9 @@ nsViewSourceChannel::SetIsMainDocumentChannel(bool aValue)
|
||||
mHttpChannel->SetIsMainDocumentChannel(aValue);
|
||||
}
|
||||
|
||||
// Have to manually forward since these are [notxpcom]
|
||||
// Have to manually forward SetCorsPreflightParameters since it's [notxpcom]
|
||||
void
|
||||
nsViewSourceChannel::SetCorsPreflightParameters(const nsTArray<nsCString>& aUnsafeHeaders)
|
||||
{
|
||||
mHttpChannelInternal->SetCorsPreflightParameters(aUnsafeHeaders);
|
||||
}
|
||||
|
||||
mozilla::net::nsHttpChannel *
|
||||
nsViewSourceChannel::QueryHttpChannelImpl()
|
||||
{
|
||||
return mHttpChannelInternal->QueryHttpChannelImpl();
|
||||
}
|
||||
|
@ -22,6 +22,7 @@ const FLAG_WRONG_PASSWORD = 1 << 1;
|
||||
const FLAG_BOGUS_USER = 1 << 2;
|
||||
const FLAG_PREVIOUS_FAILED = 1 << 3;
|
||||
const CROSS_ORIGIN = 1 << 4;
|
||||
const FLAG_NO_REALM = 1 << 5;
|
||||
|
||||
const nsIAuthPrompt2 = Components.interfaces.nsIAuthPrompt2;
|
||||
const nsIAuthInformation = Components.interfaces.nsIAuthInformation;
|
||||
@ -51,8 +52,10 @@ AuthPrompt1.prototype = {
|
||||
promptUsernameAndPassword:
|
||||
function ap1_promptUP(title, text, realm, savePW, user, pw)
|
||||
{
|
||||
// Note that the realm here isn't actually the realm. it's a pw mgr key.
|
||||
do_check_eq(URL + " (" + this.expectedRealm + ")", realm);
|
||||
if (this.flags & FLAG_NO_REALM) {
|
||||
// Note that the realm here isn't actually the realm. it's a pw mgr key.
|
||||
do_check_eq(URL + " (" + this.expectedRealm + ")", realm);
|
||||
}
|
||||
if (!(this.flags & CROSS_ORIGIN)) {
|
||||
if (text.indexOf(this.expectedRealm) == -1) {
|
||||
do_throw("Text must indicate the realm");
|
||||
@ -115,8 +118,9 @@ AuthPrompt2.prototype = {
|
||||
var isNTLM = channel.URI.path.indexOf("ntlm") != -1;
|
||||
var isDigest = channel.URI.path.indexOf("digest") != -1;
|
||||
|
||||
if (isNTLM)
|
||||
if (isNTLM || (this.flags & FLAG_NO_REALM)) {
|
||||
this.expectedRealm = ""; // NTLM knows no realms
|
||||
}
|
||||
|
||||
do_check_eq(this.expectedRealm, authInfo.realm);
|
||||
|
||||
@ -302,7 +306,8 @@ var tests = [test_noauth, test_returnfalse1, test_wrongpw1, test_prompt1,
|
||||
test_prompt1CrossOrigin, test_prompt2CrossOrigin,
|
||||
test_returnfalse2, test_wrongpw2, test_prompt2, test_ntlm,
|
||||
test_basicrealm, test_digest_noauth, test_digest,
|
||||
test_digest_bogus_user, test_large_realm, test_large_domain];
|
||||
test_digest_bogus_user, test_short_digest, test_large_realm,
|
||||
test_large_domain];
|
||||
|
||||
var current_test = 0;
|
||||
|
||||
@ -315,6 +320,7 @@ function run_test() {
|
||||
httpserv.registerPathHandler("/auth/ntlm/simple", authNtlmSimple);
|
||||
httpserv.registerPathHandler("/auth/realm", authRealm);
|
||||
httpserv.registerPathHandler("/auth/digest", authDigest);
|
||||
httpserv.registerPathHandler("/auth/short_digest", authShortDigest);
|
||||
httpserv.registerPathHandler("/largeRealm", largeRealm);
|
||||
httpserv.registerPathHandler("/largeDomain", largeDomain);
|
||||
|
||||
@ -461,6 +467,16 @@ function test_digest_bogus_user() {
|
||||
do_test_pending();
|
||||
}
|
||||
|
||||
// Test header "WWW-Authenticate: Digest" - bug 1338876.
|
||||
function test_short_digest() {
|
||||
var chan = makeChan(URL + "/auth/short_digest", URL);
|
||||
chan.notificationCallbacks = new Requestor(FLAG_NO_REALM, 2);
|
||||
listener.expectedCode = 401; // OK
|
||||
chan.asyncOpen2(listener);
|
||||
|
||||
do_test_pending();
|
||||
}
|
||||
|
||||
// PATH HANDLERS
|
||||
|
||||
// /auth
|
||||
@ -589,6 +605,13 @@ function authDigest(metadata, response) {
|
||||
response.bodyOutputStream.write(body, body.length);
|
||||
}
|
||||
|
||||
function authShortDigest(metadata, response) {
|
||||
// no header, send one
|
||||
response.setStatusLine(metadata.httpVersion, 401, "Unauthorized");
|
||||
response.setHeader("WWW-Authenticate", 'Digest', false);
|
||||
body = "failed, no header";
|
||||
}
|
||||
|
||||
function largeRealm(metadata, response) {
|
||||
// test > 32KB realm tokens
|
||||
var body;
|
||||
|
@ -118,6 +118,8 @@ Please commit or stash these changes before vendoring, or re-run with `--ignore-
|
||||
self._run_command_in_srcdir(args=[cargo, 'vendor', '--sync', mozpath.join(path, 'Cargo.lock'), vendor_dir])
|
||||
self.repository.add_remove_files(vendor_dir)
|
||||
|
||||
# 100k is a reasonable upper bound on source file size.
|
||||
FILESIZE_LIMIT = 100 * 1024
|
||||
large_files = set()
|
||||
cumulative_added_size = 0
|
||||
for f in self.repository.get_added_files():
|
||||
|
@ -68,7 +68,7 @@ public:
|
||||
|
||||
// Should we accumulate pinning telemetry for the result?
|
||||
bool accumulateResult;
|
||||
Telemetry::ID certPinningResultHistogram;
|
||||
Telemetry::HistogramID certPinningResultHistogram;
|
||||
int32_t certPinningResultBucket;
|
||||
// Should we accumulate telemetry for the root?
|
||||
bool accumulateForRoot;
|
||||
|
@ -273,7 +273,7 @@ CheckPinsForHostname(const UniqueCERTCertList& certList, const char* hostname,
|
||||
return rv;
|
||||
}
|
||||
chainHasValidPins = enforceTestModeResult;
|
||||
Telemetry::ID histogram = staticFingerprints->mIsMoz
|
||||
Telemetry::HistogramID histogram = staticFingerprints->mIsMoz
|
||||
? Telemetry::CERT_PINNING_MOZ_RESULTS
|
||||
: Telemetry::CERT_PINNING_RESULTS;
|
||||
if (staticFingerprints->mTestMode) {
|
||||
|
@ -77,7 +77,7 @@ RootCABinNumber(const SECItem* cert)
|
||||
// Attempt to increment the appropriate bin in the provided Telemetry probe ID. If
|
||||
// there was a hash failure, we do nothing.
|
||||
void
|
||||
AccumulateTelemetryForRootCA(mozilla::Telemetry::ID probe,
|
||||
AccumulateTelemetryForRootCA(mozilla::Telemetry::HistogramID probe,
|
||||
const CERTCertificate* cert)
|
||||
{
|
||||
int32_t binId = RootCABinNumber(&cert->derCert);
|
||||
|
@ -22,7 +22,7 @@ int32_t
|
||||
RootCABinNumber(const SECItem* cert);
|
||||
|
||||
void
|
||||
AccumulateTelemetryForRootCA(mozilla::Telemetry::ID probe, const CERTCertificate* cert);
|
||||
AccumulateTelemetryForRootCA(mozilla::Telemetry::HistogramID probe, const CERTCertificate* cert);
|
||||
|
||||
} // namespace psm
|
||||
} // namespace mozilla
|
||||
|
@ -244,7 +244,7 @@ public:
|
||||
|
||||
SSLServerCertVerificationResult(nsNSSSocketInfo* infoObject,
|
||||
PRErrorCode errorCode,
|
||||
Telemetry::ID telemetryID = Telemetry::HistogramCount,
|
||||
Telemetry::HistogramID telemetryID = Telemetry::HistogramCount,
|
||||
uint32_t telemetryValue = -1,
|
||||
SSLErrorMessageType errorMessageType =
|
||||
PlainErrorMessage);
|
||||
@ -255,7 +255,7 @@ private:
|
||||
public:
|
||||
const PRErrorCode mErrorCode;
|
||||
const SSLErrorMessageType mErrorMessageType;
|
||||
const Telemetry::ID mTelemetryID;
|
||||
const Telemetry::HistogramID mTelemetryID;
|
||||
const uint32_t mTelemetryValue;
|
||||
};
|
||||
|
||||
@ -1503,9 +1503,9 @@ SSLServerCertVerificationJob::Run()
|
||||
if (mInfoObject->isAlreadyShutDown()) {
|
||||
error = SEC_ERROR_USER_CANCELLED;
|
||||
} else {
|
||||
Telemetry::ID successTelemetry
|
||||
Telemetry::HistogramID successTelemetry
|
||||
= Telemetry::SSL_SUCCESFUL_CERT_VALIDATION_TIME_MOZILLAPKIX;
|
||||
Telemetry::ID failureTelemetry
|
||||
Telemetry::HistogramID failureTelemetry
|
||||
= Telemetry::SSL_INITIAL_FAILED_CERT_VALIDATION_TIME_MOZILLAPKIX;
|
||||
|
||||
// Reset the error code here so we can detect if AuthCertificate fails to
|
||||
@ -1757,7 +1757,7 @@ AuthCertificateHook(void* arg, PRFileDesc* fd, PRBool checkSig, PRBool isServer)
|
||||
|
||||
SSLServerCertVerificationResult::SSLServerCertVerificationResult(
|
||||
nsNSSSocketInfo* infoObject, PRErrorCode errorCode,
|
||||
Telemetry::ID telemetryID, uint32_t telemetryValue,
|
||||
Telemetry::HistogramID telemetryID, uint32_t telemetryValue,
|
||||
SSLErrorMessageType errorMessageType)
|
||||
: mInfoObject(infoObject)
|
||||
, mErrorCode(errorCode)
|
||||
|
@ -1157,4 +1157,4 @@ static const TransportSecurityPreload kPublicKeyPinningPreloadList[] = {
|
||||
|
||||
static const int32_t kUnknownId = -1;
|
||||
|
||||
static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1495728091984000);
|
||||
static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1495811026488000);
|
||||
|
@ -39,7 +39,7 @@ using namespace mozilla::psm;
|
||||
|
||||
extern LazyLogModule gPIPNSSLog;
|
||||
|
||||
static void AccumulateCipherSuite(Telemetry::ID probe,
|
||||
static void AccumulateCipherSuite(Telemetry::HistogramID probe,
|
||||
const SSLChannelInfo& channelInfo);
|
||||
|
||||
namespace {
|
||||
@ -982,7 +982,7 @@ CanFalseStartCallback(PRFileDesc* fd, void* client_data, PRBool *canFalseStart)
|
||||
}
|
||||
|
||||
static void
|
||||
AccumulateNonECCKeySize(Telemetry::ID probe, uint32_t bits)
|
||||
AccumulateNonECCKeySize(Telemetry::HistogramID probe, uint32_t bits)
|
||||
{
|
||||
unsigned int value = bits < 512 ? 1 : bits == 512 ? 2
|
||||
: bits < 768 ? 3 : bits == 768 ? 4
|
||||
@ -1005,7 +1005,7 @@ AccumulateNonECCKeySize(Telemetry::ID probe, uint32_t bits)
|
||||
// named curves for a given size (e.g. secp256k1 vs. secp256r1). We punt on
|
||||
// that for now. See also NSS bug 323674.
|
||||
static void
|
||||
AccumulateECCCurve(Telemetry::ID probe, uint32_t bits)
|
||||
AccumulateECCCurve(Telemetry::HistogramID probe, uint32_t bits)
|
||||
{
|
||||
unsigned int value = bits == 256 ? 23 // P-256
|
||||
: bits == 384 ? 24 // P-384
|
||||
@ -1015,7 +1015,7 @@ AccumulateECCCurve(Telemetry::ID probe, uint32_t bits)
|
||||
}
|
||||
|
||||
static void
|
||||
AccumulateCipherSuite(Telemetry::ID probe, const SSLChannelInfo& channelInfo)
|
||||
AccumulateCipherSuite(Telemetry::HistogramID probe, const SSLChannelInfo& channelInfo)
|
||||
{
|
||||
uint32_t value;
|
||||
switch (channelInfo.cipherSuite) {
|
||||
|
@ -1108,8 +1108,8 @@ retryDueToTLSIntolerance(PRErrorCode err, nsNSSSocketInfo* socketInfo)
|
||||
return false;
|
||||
}
|
||||
|
||||
Telemetry::ID pre;
|
||||
Telemetry::ID post;
|
||||
Telemetry::HistogramID pre;
|
||||
Telemetry::HistogramID post;
|
||||
switch (range.max) {
|
||||
case SSL_LIBRARY_VERSION_TLS_1_3:
|
||||
pre = Telemetry::SSL_TLS13_INTOLERANCE_REASON_PRE;
|
||||
|
@ -50,7 +50,7 @@
|
||||
4679.space: could not connect to host
|
||||
47ronin.com: did not receive HSTS header
|
||||
4cclothing.com: could not connect to host
|
||||
4elements.com: did not receive HSTS header
|
||||
4elements.com: could not connect to host
|
||||
4mm.org: did not receive HSTS header
|
||||
4sqsu.eu: could not connect to host
|
||||
50millionablaze.org: did not receive HSTS header
|
||||
@ -135,6 +135,7 @@ afp548.tk: could not connect to host
|
||||
agalaxyfarfaraway.co.uk: could not connect to host
|
||||
agbremen.de: did not receive HSTS header
|
||||
agentseeker.ca: could not connect to host
|
||||
agonswim.com: could not connect to host
|
||||
agrimap.com: did not receive HSTS header
|
||||
agrios.de: did not receive HSTS header
|
||||
agro-id.gov.ua: could not connect to host
|
||||
@ -345,6 +346,7 @@ authentication.io: could not connect to host
|
||||
authoritynutrition.com: did not receive HSTS header
|
||||
auto-serwis.zgorzelec.pl: did not receive HSTS header
|
||||
auto4trade.nl: could not connect to host
|
||||
autoepc.ro: did not receive HSTS header
|
||||
autojuhos.sk: could not connect to host
|
||||
autokovrik-diskont.ru: did not receive HSTS header
|
||||
autotsum.com: could not connect to host
|
||||
@ -390,7 +392,6 @@ barely.sexy: did not receive HSTS header
|
||||
bashcode.ninja: could not connect to host
|
||||
basicsolutionsus.com: did not receive HSTS header
|
||||
basilisk.io: could not connect to host
|
||||
basnieuwenhuizen.nl: could not connect to host
|
||||
bassh.net: could not connect to host
|
||||
baud.ninja: could not connect to host
|
||||
baumstark.ca: could not connect to host
|
||||
@ -512,7 +513,9 @@ blueliv.com: did not receive HSTS header
|
||||
bluescloud.xyz: could not connect to host
|
||||
bluetenmeer.com: did not receive HSTS header
|
||||
blupig.net: did not receive HSTS header
|
||||
bluserv.net: could not connect to host
|
||||
bm-trading.nl: did not receive HSTS header
|
||||
bmone.net: could not connect to host
|
||||
bngsecure.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no]
|
||||
bnhlibrary.com: could not connect to host
|
||||
bobiji.com: did not receive HSTS header
|
||||
@ -530,13 +533,12 @@ bonigo.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_
|
||||
bonitabrazilian.co.nz: did not receive HSTS header
|
||||
bookcelerator.com: did not receive HSTS header
|
||||
booked.holiday: could not connect to host
|
||||
bookingapp.nl: did not receive HSTS header
|
||||
bookourdjs.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no]
|
||||
boomerang.com: could not connect to host
|
||||
boosterlearnpro.com: did not receive HSTS header
|
||||
bootjp.me: did not receive HSTS header
|
||||
boringsecurity.net: could not connect to host
|
||||
boris.one: did not receive HSTS header
|
||||
boris.one: could not connect to host
|
||||
borisbesemer.com: could not connect to host
|
||||
botox.bz: did not receive HSTS header
|
||||
bouwbedrijfpurmerend.nl: did not receive HSTS header
|
||||
@ -576,7 +578,6 @@ budgetthostels.nl: did not receive HSTS header
|
||||
budskap.eu: could not connect to host
|
||||
bugs.chromium.org: did not receive HSTS header (error ignored - included regardless)
|
||||
bugtrack.io: did not receive HSTS header
|
||||
bugwie.com: did not receive HSTS header
|
||||
buhler.pro: did not receive HSTS header
|
||||
buildci.asia: could not connect to host
|
||||
buildsaver.co.za: did not receive HSTS header
|
||||
@ -600,7 +601,6 @@ buttercoin.com: could not connect to host
|
||||
butterfieldstraining.com: did not receive HSTS header
|
||||
buybaby.eu: did not receive HSTS header
|
||||
buyfox.de: did not receive HSTS header
|
||||
bw.codes: could not connect to host
|
||||
bws16.de: did not receive HSTS header
|
||||
by4cqb.cn: could not connect to host
|
||||
bypassed.press: could not connect to host
|
||||
@ -632,6 +632,7 @@ calvin.me: max-age too low: 2592000
|
||||
calvinallen.net: did not receive HSTS header
|
||||
calyxinstitute.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no]
|
||||
camolist.com: could not connect to host
|
||||
campfire.co.il: could not connect to host
|
||||
canadiangamblingchoice.com: did not receive HSTS header
|
||||
cancelmyprofile.com: did not receive HSTS header
|
||||
candicontrols.com: did not receive HSTS header
|
||||
@ -646,6 +647,7 @@ capturethepen.co.uk: could not connect to host
|
||||
car-navi.ph: did not receive HSTS header
|
||||
carano-service.de: did not receive HSTS header
|
||||
caraudio69.cz: could not connect to host
|
||||
cardloan-manual.net: could not connect to host
|
||||
cardoni.net: did not receive HSTS header
|
||||
cardstream.com: did not receive HSTS header
|
||||
cardurl.com: did not receive HSTS header
|
||||
@ -692,7 +694,6 @@ cfcproperties.com: did not receive HSTS header
|
||||
cfetengineering.com: could not connect to host
|
||||
cg.search.yahoo.com: did not receive HSTS header
|
||||
chainmonitor.com: could not connect to host
|
||||
chamathellawala.com: could not connect to host
|
||||
championsofregnum.com: did not receive HSTS header
|
||||
chandlerredding.com: did not receive HSTS header
|
||||
changelab.cc: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no]
|
||||
@ -726,7 +727,6 @@ chinawhale.com: did not receive HSTS header
|
||||
chirgui.eu: could not connect to host
|
||||
chloe.re: could not connect to host
|
||||
chm.vn: did not receive HSTS header
|
||||
chokladfantasi.net: could not connect to host
|
||||
chontalpa.pw: could not connect to host
|
||||
chopperforums.com: did not receive HSTS header
|
||||
chotu.net: could not connect to host
|
||||
@ -740,7 +740,6 @@ christianbro.gq: could not connect to host
|
||||
christophercolumbusfoundation.gov: could not connect to host
|
||||
christophheich.me: could not connect to host
|
||||
chrisupjohn.com: could not connect to host
|
||||
chromaryu.net: could not connect to host
|
||||
chrome-devtools-frontend.appspot.com: did not receive HSTS header (error ignored - included regardless)
|
||||
chrome.google.com: did not receive HSTS header (error ignored - included regardless)
|
||||
chromiumbugs.appspot.com: did not receive HSTS header (error ignored - included regardless)
|
||||
@ -756,6 +755,7 @@ cigi.site: could not connect to host
|
||||
cim2b.de: could not connect to host
|
||||
cimalando.eu: could not connect to host
|
||||
cinefilzonen.se: could not connect to host
|
||||
cintdirect.com: could not connect to host
|
||||
ciplanutrition.com: did not receive HSTS header
|
||||
circara.com: did not receive HSTS header
|
||||
ciscommerce.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no]
|
||||
@ -847,6 +847,7 @@ completeid.com: max-age too low: 86400
|
||||
completionist.audio: could not connect to host
|
||||
compraneta.com: could not connect to host
|
||||
compucorner.com.mx: could not connect to host
|
||||
computersystems.guru: did not receive HSTS header
|
||||
concord-group.co.jp: did not receive HSTS header
|
||||
condesaelectronics.com: max-age too low: 0
|
||||
confirm365.com: could not connect to host
|
||||
@ -916,7 +917,6 @@ cryptopartyatx.org: could not connect to host
|
||||
cryptopush.com: did not receive HSTS header
|
||||
crysadm.com: max-age too low: 1
|
||||
crystalclassics.co.uk: did not receive HSTS header
|
||||
csabg.org: could not connect to host
|
||||
csapak.com: max-age too low: 0
|
||||
csawctf.poly.edu: could not connect to host
|
||||
csfs.org.uk: could not connect to host
|
||||
@ -925,7 +925,6 @@ csgoelemental.com: could not connect to host
|
||||
csgokings.eu: could not connect to host
|
||||
csohack.tk: could not connect to host
|
||||
cspbuilder.info: could not connect to host
|
||||
csru.net: could not connect to host
|
||||
csvape.com: did not receive HSTS header
|
||||
ct-status.org: could not connect to host
|
||||
ct.search.yahoo.com: did not receive HSTS header
|
||||
@ -948,7 +947,6 @@ cycleluxembourg.lu: did not receive HSTS header
|
||||
cydia-search.io: could not connect to host
|
||||
cyph.com: did not receive HSTS header
|
||||
cyphertite.com: could not connect to host
|
||||
czerno.com: could not connect to host
|
||||
czlx.co: could not connect to host
|
||||
dad256.tk: could not connect to host
|
||||
dadtheimpaler.com: could not connect to host
|
||||
@ -958,6 +956,7 @@ daimadi.com: could not connect to host
|
||||
dakrib.net: could not connect to host
|
||||
daku.gdn: did not receive HSTS header
|
||||
dalingk.co: could not connect to host
|
||||
damedrogy.cz: could not connect to host
|
||||
damianuv-blog.cz: did not receive HSTS header
|
||||
dango.in: did not receive HSTS header
|
||||
daniel-steuer.de: could not connect to host
|
||||
@ -1089,7 +1088,6 @@ djz4music.com: did not receive HSTS header
|
||||
dl.google.com: did not receive HSTS header (error ignored - included regardless)
|
||||
dlc.viasinc.com: could not connect to host
|
||||
dlemper.de: did not receive HSTS header
|
||||
dlouwrink.nl: could not connect to host
|
||||
dn42.eu: could not connect to host
|
||||
dns.google.com: did not receive HSTS header (error ignored - included regardless)
|
||||
dnsknowledge.com: did not receive HSTS header
|
||||
@ -1117,6 +1115,7 @@ donttrustrobots.nl: could not connect to host
|
||||
donzelot.co.uk: max-age too low: 3600
|
||||
doomleika.com: could not connect to host
|
||||
dopost.it: could not connect to host
|
||||
dopply.com: could not connect to host
|
||||
doridian.com: could not connect to host
|
||||
doridian.de: could not connect to host
|
||||
doridian.net: did not receive HSTS header
|
||||
@ -1152,7 +1151,6 @@ dustri.org: did not receive HSTS header
|
||||
dutchrank.com: could not connect to host
|
||||
dwhd.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no]
|
||||
dworzak.ch: could not connect to host
|
||||
dxa.io: could not connect to host
|
||||
dycontrol.de: could not connect to host
|
||||
dylanscott.com.au: did not receive HSTS header
|
||||
dymersion.com: did not receive HSTS header
|
||||
@ -1223,7 +1221,7 @@ elnutricionista.es: did not receive HSTS header
|
||||
eloanpersonal.com: max-age too low: 0
|
||||
elpo.xyz: could not connect to host
|
||||
elsamakhin.com: could not connect to host
|
||||
elsitar.com: could not connect to host
|
||||
elsitar.com: did not receive HSTS header
|
||||
email.lookout.com: could not connect to host
|
||||
emanatepixels.com: could not connect to host
|
||||
emeldi-commerce.com: max-age too low: 0
|
||||
@ -1237,6 +1235,7 @@ empleosentorreon.mx: could not connect to host
|
||||
empleostampico.com: did not receive HSTS header
|
||||
enaah.de: could not connect to host
|
||||
enargia.jp: max-age too low: 0
|
||||
encode.host: did not receive HSTS header
|
||||
encode.space: did not receive HSTS header
|
||||
encoder.pw: could not connect to host
|
||||
encontrebarato.com.br: did not receive HSTS header
|
||||
@ -1274,6 +1273,7 @@ equilibre-yoga-jennifer-will.com: could not connect to host
|
||||
erawanarifnugroho.com: did not receive HSTS header
|
||||
eressea.xyz: could not connect to host
|
||||
eridanus.uk: could not connect to host
|
||||
erikhubers.nl: could not connect to host
|
||||
ernaehrungsberatung-rapperswil.ch: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no]
|
||||
ernaehrungsberatung-zurich.ch: could not connect to host
|
||||
ernesto.at: could not connect to host
|
||||
@ -1469,6 +1469,7 @@ frangor.info: did not receive HSTS header
|
||||
franta.biz: did not receive HSTS header
|
||||
franta.email: did not receive HSTS header
|
||||
franzt.de: could not connect to host
|
||||
franzt.ovh: could not connect to host
|
||||
frasys.io: max-age too low: 7776000
|
||||
fredvoyage.fr: did not receive HSTS header
|
||||
freeflow.tv: could not connect to host
|
||||
@ -1499,6 +1500,7 @@ ftctele.com: did not receive HSTS header
|
||||
fuckbilibili.com: did not receive HSTS header
|
||||
fuckgfw233.org: could not connect to host
|
||||
fukushima-web.com: did not receive HSTS header
|
||||
fumo.se: could not connect to host
|
||||
fundacionhijosdelsol.org: could not connect to host
|
||||
funkyweddingideas.com.au: could not connect to host
|
||||
funrun.com: did not receive HSTS header
|
||||
@ -1513,6 +1515,7 @@ fx-rk.com: did not receive HSTS header
|
||||
fysiohaenraets.nl: did not receive HSTS header
|
||||
fzn.io: could not connect to host
|
||||
fzslm.me: did not receive HSTS header
|
||||
g01.in.ua: could not connect to host
|
||||
g2a.co: did not receive HSTS header
|
||||
g2g.com: did not receive HSTS header
|
||||
g4w.co: did not receive HSTS header (error ignored - included regardless)
|
||||
@ -1520,8 +1523,9 @@ g5led.nl: could not connect to host
|
||||
gabber.scot: could not connect to host
|
||||
gaelleetarnaud.com: did not receive HSTS header
|
||||
gafachi.com: could not connect to host
|
||||
gaichon.com: could not connect to host
|
||||
gaite.me: could not connect to host
|
||||
gakkainavi.jp: did not receive HSTS header
|
||||
gakkainavi.net: did not receive HSTS header
|
||||
gakkainavi4.com: could not connect to host
|
||||
gakkainavi4.net: did not receive HSTS header
|
||||
galardi.org: did not receive HSTS header
|
||||
@ -1646,6 +1650,7 @@ gogold-g.com: could not connect to host
|
||||
gold24.in: did not receive HSTS header
|
||||
goldendata.io: could not connect to host
|
||||
golocal-media.de: did not receive HSTS header
|
||||
gong8.win: did not receive HSTS header
|
||||
gonzalosanchez.mx: could not connect to host
|
||||
goodenough.nz: did not receive HSTS header
|
||||
goodwin43.ru: could not connect to host
|
||||
@ -1666,11 +1671,9 @@ gpsfix.cz: could not connect to host
|
||||
gpstuner.com: did not receive HSTS header
|
||||
gracesofgrief.com: max-age too low: 86400
|
||||
gradienthosting.co.uk: did not receive HSTS header
|
||||
granary-demo.appspot.com: did not receive HSTS header
|
||||
grandmascookieblog.com: did not receive HSTS header
|
||||
grantedby.me: could not connect to host
|
||||
graph.no: did not receive HSTS header
|
||||
graphire.io: could not connect to host
|
||||
graphsearchengine.com: could not connect to host
|
||||
gravito.nl: did not receive HSTS header
|
||||
gravity-net.de: could not connect to host
|
||||
@ -1744,6 +1747,7 @@ halo.red: could not connect to host
|
||||
hancc.net: could not connect to host
|
||||
hanfu.la: could not connect to host
|
||||
hang333.pw: did not receive HSTS header
|
||||
hanimalis.fr: could not connect to host
|
||||
hansen.hn: could not connect to host
|
||||
hao2taiwan.com: max-age too low: 0
|
||||
haoyugao.com: could not connect to host
|
||||
@ -1785,6 +1789,8 @@ heart.ge: did not receive HSTS header
|
||||
heartlandrentals.com: did not receive HSTS header
|
||||
hectorj.net: could not connect to host
|
||||
heftkaufen.de: did not receive HSTS header
|
||||
helgakristoffer.com: could not connect to host
|
||||
helgakristoffer.wedding: could not connect to host
|
||||
helloworldhost.com: did not receive HSTS header
|
||||
helpadmin.net: could not connect to host
|
||||
helpium.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no]
|
||||
@ -1861,11 +1867,13 @@ hu.search.yahoo.com: did not receive HSTS header
|
||||
huarongdao.com: did not receive HSTS header
|
||||
hugocollignon.fr: could not connect to host
|
||||
hugosleep.com.au: did not receive HSTS header
|
||||
huihui.moe: could not connect to host
|
||||
humankode.com: did not receive HSTS header
|
||||
humblefinances.com: could not connect to host
|
||||
humeurs.net: could not connect to host
|
||||
humpteedumptee.in: did not receive HSTS header
|
||||
huntshomeinspections.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no]
|
||||
hup.blue: could not connect to host
|
||||
hurricanelabs.com: did not receive HSTS header
|
||||
huskybutt.dog: could not connect to host
|
||||
hydra.ws: could not connect to host
|
||||
@ -1975,7 +1983,6 @@ insite-feedback.com: did not receive HSTS header
|
||||
inspire-av.com: did not receive HSTS header
|
||||
inspiroinc.com: could not connect to host
|
||||
instacart.com: did not receive HSTS header
|
||||
instagram-atom.appspot.com: did not receive HSTS header
|
||||
instantdev.io: could not connect to host
|
||||
institutoflordelavida.com: could not connect to host
|
||||
institutolancaster.com: could not connect to host
|
||||
@ -1984,12 +1991,14 @@ intel.li: could not connect to host
|
||||
intelldynamics.com: could not connect to host
|
||||
interference.io: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no]
|
||||
interlun.com: could not connect to host
|
||||
internect.co.za: did not receive HSTS header
|
||||
internetcasinos.de: could not connect to host
|
||||
internetcensus.org: could not connect to host
|
||||
interserved.com: did not receive HSTS header
|
||||
intex.es: max-age too low: 0
|
||||
intim-uslugi-kazan.net: could not connect to host
|
||||
intimtoy.com.ua: could not connect to host
|
||||
intrp.net: did not receive HSTS header
|
||||
inverselink-user-content.com: could not connect to host
|
||||
inverselink.com: could not connect to host
|
||||
invite24.pro: could not connect to host
|
||||
@ -2011,7 +2020,6 @@ iranianlawschool.com: could not connect to host
|
||||
iraqidinar.org: did not receive HSTS header
|
||||
irazimina.ru: did not receive HSTS header
|
||||
irccloud.com: did not receive HSTS header
|
||||
ireef.tv: could not connect to host
|
||||
irelandesign.com: did not receive HSTS header
|
||||
irmtrudjurke.de: did not receive HSTS header
|
||||
ischool.co.jp: did not receive HSTS header
|
||||
@ -2024,6 +2032,7 @@ israkurort.com: did not receive HSTS header
|
||||
isslshop.com: could not connect to host
|
||||
istaspirtslietas.lv: did not receive HSTS header
|
||||
it-go.net: did not receive HSTS header
|
||||
itchy.nl: could not connect to host
|
||||
itechgeek.com: max-age too low: 0
|
||||
itos.asia: did not receive HSTS header
|
||||
itos.pl: did not receive HSTS header
|
||||
@ -2169,12 +2178,12 @@ jznet.org: max-age too low: 86400
|
||||
k-dev.de: could not connect to host
|
||||
ka-clan.com: could not connect to host
|
||||
kabuabc.com: did not receive HSTS header
|
||||
kabus.org: could not connect to host
|
||||
kadioglumakina.com.tr: did not receive HSTS header
|
||||
kaela.design: could not connect to host
|
||||
kahopoon.net: could not connect to host
|
||||
kaisers.de: did not receive HSTS header
|
||||
kalami.nl: did not receive HSTS header
|
||||
kaleidomarketing.com: could not connect to host
|
||||
kaliaa.fi: could not connect to host
|
||||
kamikano.com: could not connect to host
|
||||
kaneo-gmbh.de: did not receive HSTS header
|
||||
@ -2279,6 +2288,7 @@ kreavis.com: did not receive HSTS header
|
||||
kredite.sale: could not connect to host
|
||||
kriegt.es: could not connect to host
|
||||
kristjanrang.eu: did not receive HSTS header
|
||||
kristofferkoch.com: could not connect to host
|
||||
krmela.com: could not connect to host
|
||||
kroetenfuchs.de: could not connect to host
|
||||
kropkait.pl: could not connect to host
|
||||
@ -2286,6 +2296,7 @@ krouzkyliduska.cz: [Exception... "Component returned failure code: 0x80004005 (N
|
||||
krunut.com: did not receive HSTS header
|
||||
krypteia.org: could not connect to host
|
||||
kryptomech.com: could not connect to host
|
||||
ks-watch.de: did not receive HSTS header
|
||||
ksfh-mail.de: could not connect to host
|
||||
kstan.me: could not connect to host
|
||||
kswriter.com: could not connect to host
|
||||
@ -2340,6 +2351,7 @@ lawformt.com: could not connect to host
|
||||
laxatus.com: did not receive HSTS header
|
||||
laxiongames.es: could not connect to host
|
||||
lbrt.xyz: could not connect to host
|
||||
lbs-logics.com: max-age too low: 0
|
||||
ldarby.me.uk: could not connect to host
|
||||
leadership9.com: could not connect to host
|
||||
leardev.de: did not receive HSTS header
|
||||
@ -2506,6 +2518,7 @@ maarten.nyc: did not receive HSTS header
|
||||
maartenvandekamp.nl: did not receive HSTS header
|
||||
mac-torrents.me: did not receive HSTS header
|
||||
macchaberrycream.com: could not connect to host
|
||||
macchedil.com: did not receive HSTS header
|
||||
macdj.tk: could not connect to host
|
||||
macgeneral.de: did not receive HSTS header
|
||||
machon.biz: could not connect to host
|
||||
@ -2588,7 +2601,6 @@ maultrom.ml: could not connect to host
|
||||
maur.cz: did not receive HSTS header
|
||||
mavisang.cf: could not connect to host
|
||||
mawe.red: could not connect to host
|
||||
maxfox.me: did not receive HSTS header
|
||||
maya.mg: could not connect to host
|
||||
mca2017.org: did not receive HSTS header
|
||||
mcc.re: could not connect to host
|
||||
@ -2596,6 +2608,7 @@ mccarty.io: could not connect to host
|
||||
mccrackon.com: could not connect to host
|
||||
mcdonalds.ru: did not receive HSTS header
|
||||
mcga.media: did not receive HSTS header
|
||||
mcjackk77.com: could not connect to host
|
||||
mclab.su: could not connect to host
|
||||
mdewendt.de: could not connect to host
|
||||
mdfnet.se: did not receive HSTS header
|
||||
@ -2639,7 +2652,6 @@ mesmoque.com: did not receive HSTS header
|
||||
metagrader.com: could not connect to host
|
||||
metebalci.com: did not receive HSTS header
|
||||
meteorapp.space: could not connect to host
|
||||
meteosherbrooke.com: could not connect to host
|
||||
meteosky.net: could not connect to host
|
||||
metin2blog.de: did not receive HSTS header
|
||||
metis.pw: could not connect to host
|
||||
@ -2815,6 +2827,7 @@ myphonebox.de: could not connect to host
|
||||
myraytech.net: did not receive HSTS header
|
||||
mysecretrewards.com: did not receive HSTS header
|
||||
mystery-science-theater-3000.de: did not receive HSTS header
|
||||
mythslegendscollection.com: did not receive HSTS header
|
||||
myvirtualserver.com: max-age too low: 2592000
|
||||
myzone.com: did not receive HSTS header
|
||||
n0psled.nl: could not connect to host
|
||||
@ -2847,7 +2860,7 @@ natuurbehangnederland.nl: could not connect to host
|
||||
nauck.org: did not receive HSTS header
|
||||
nav.jobs: could not connect to host
|
||||
naval.tf: could not connect to host
|
||||
navenlle.com: could not connect to host
|
||||
navenlle.com: did not receive HSTS header
|
||||
navjobs.com: did not receive HSTS header
|
||||
nbb.io: could not connect to host
|
||||
nbg-ha.de: could not connect to host
|
||||
@ -2855,6 +2868,7 @@ ncc60205.info: could not connect to host
|
||||
ncpc.gov: could not connect to host
|
||||
nct.org.uk: max-age too low: 1
|
||||
nctx.co.uk: did not receive HSTS header
|
||||
ne-on.org: could not connect to host
|
||||
near.st: did not receive HSTS header
|
||||
neels.ch: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no]
|
||||
neftaly.com: did not receive HSTS header
|
||||
@ -2870,7 +2884,6 @@ netbox.cc: could not connect to host
|
||||
netherwind.eu: did not receive HSTS header
|
||||
netloanusa.com: max-age too low: 0
|
||||
netmagik.com: did not receive HSTS header
|
||||
netronix.be: did not receive HSTS header
|
||||
nettefoundation.com: could not connect to host
|
||||
netulo.com: could not connect to host
|
||||
netzbit.de: could not connect to host
|
||||
@ -3079,7 +3092,6 @@ orionfcu.com: did not receive HSTS header
|
||||
orleika.ml: could not connect to host
|
||||
orthodoxy.lt: did not receive HSTS header
|
||||
osaiyuwu.com: could not connect to host
|
||||
oshell.me: could not connect to host
|
||||
oslfoundation.org: could not connect to host
|
||||
oslinux.net: did not receive HSTS header
|
||||
osp.cx: could not connect to host
|
||||
@ -3172,6 +3184,7 @@ pbprint.ru: max-age too low: 0
|
||||
pc-nf.de: did not receive HSTS header
|
||||
pcfun.net: could not connect to host
|
||||
pchax.net: could not connect to host
|
||||
pdamsidoarjo.co.id: could not connect to host
|
||||
pdevio.com: could not connect to host
|
||||
pdf.yt: could not connect to host
|
||||
peakapp.nl: could not connect to host
|
||||
@ -3223,7 +3236,6 @@ piggott.me.uk: did not receive HSTS header
|
||||
pilgermaske.org: did not receive HSTS header
|
||||
piligrimname.com: could not connect to host
|
||||
pillowandpepper.com: did not receive HSTS header
|
||||
pinesandneedles.com: did not receive HSTS header
|
||||
pippen.io: could not connect to host
|
||||
piratedb.com: could not connect to host
|
||||
piratedot.com: could not connect to host
|
||||
@ -3264,7 +3276,6 @@ plombirator.kz: did not receive HSTS header
|
||||
plothost.com: did not receive HSTS header
|
||||
ploup.net: could not connect to host
|
||||
pluff.nl: could not connect to host
|
||||
plusstreamfeed.appspot.com: did not receive HSTS header
|
||||
pmnts.io: could not connect to host
|
||||
po.gl: did not receive HSTS header
|
||||
pocketsix.com: did not receive HSTS header
|
||||
@ -3285,9 +3296,9 @@ pontualcomp.com: max-age too low: 2592000
|
||||
poolsandstuff.com: did not receive HSTS header
|
||||
poon.tech: could not connect to host
|
||||
portalplatform.net: did not receive HSTS header
|
||||
portalzine.de: did not receive HSTS header
|
||||
poshpak.com: max-age too low: 86400
|
||||
postcodewise.co.uk: did not receive HSTS header
|
||||
posterspy.com: did not receive HSTS header
|
||||
postscheduler.org: could not connect to host
|
||||
posylka.de: did not receive HSTS header
|
||||
poussinooz.fr: could not connect to host
|
||||
@ -3298,6 +3309,7 @@ powerxequality.com: could not connect to host
|
||||
ppr-truby.ru: could not connect to host
|
||||
ppy3.com: did not receive HSTS header
|
||||
pr.search.yahoo.com: did not receive HSTS header
|
||||
preezzie.com: could not connect to host
|
||||
prefontaine.name: could not connect to host
|
||||
prego-shop.de: did not receive HSTS header
|
||||
preissler.co.uk: could not connect to host
|
||||
@ -3328,7 +3340,6 @@ prontocleaners.co.uk: could not connect to host
|
||||
prontolight.com: did not receive HSTS header
|
||||
prontomovers.co.uk: could not connect to host
|
||||
propactrading.com: could not connect to host
|
||||
proposalonline.com: did not receive HSTS header
|
||||
prosocialmachines.com: could not connect to host
|
||||
prosoft.sk: did not receive HSTS header
|
||||
prosperident.com: did not receive HSTS header
|
||||
@ -3423,6 +3434,7 @@ rcafox.com: could not connect to host
|
||||
rcpcbd.com: did not receive HSTS header
|
||||
rdns.im: did not receive HSTS header
|
||||
re-customer.net: did not receive HSTS header
|
||||
reachr.com: could not connect to host
|
||||
readr.pw: could not connect to host
|
||||
realmic.net: could not connect to host
|
||||
realmofespionage.com: could not connect to host
|
||||
@ -3499,6 +3511,7 @@ rippleunion.com: could not connect to host
|
||||
riskmgt.com.au: could not connect to host
|
||||
rj.gg: could not connect to host
|
||||
rk6.cz: could not connect to host
|
||||
rkkhok.hu: did not receive HSTS header
|
||||
rkmantpur.org: did not receive HSTS header
|
||||
rme.li: did not receive HSTS header
|
||||
rngmeme.com: could not connect to host
|
||||
@ -3535,6 +3548,7 @@ roundtheme.com: did not receive HSTS header
|
||||
rous.se: could not connect to host
|
||||
rout0r.org: did not receive HSTS header
|
||||
rouvray.org: could not connect to host
|
||||
royalpub.net: did not receive HSTS header
|
||||
rr.in.th: could not connect to host
|
||||
rrke.cc: did not receive HSTS header
|
||||
rsajeey.info: could not connect to host
|
||||
@ -3567,6 +3581,7 @@ ryansmithphotography.com: did not receive HSTS header
|
||||
ryanteck.uk: did not receive HSTS header
|
||||
s.how: did not receive HSTS header
|
||||
s007.co: could not connect to host
|
||||
saba-piserver.info: could not connect to host
|
||||
safematix.com: could not connect to host
|
||||
safewings-nh.nl: did not receive HSTS header
|
||||
safic.net: could not connect to host
|
||||
@ -3627,6 +3642,7 @@ schreiber-netzwerk.eu: did not receive HSTS header
|
||||
schrodinger.io: could not connect to host
|
||||
schulterglatzen-altenwalde.de: could not connect to host
|
||||
schultzflorists.com: could not connect to host
|
||||
schumanandmonnet.eu: did not receive HSTS header
|
||||
schwarzkopfforyou.de: did not receive HSTS header
|
||||
scienceathome.org: did not receive HSTS header
|
||||
scooshonline.co.uk: did not receive HSTS header
|
||||
@ -3761,7 +3777,6 @@ simplefraud.com: [Exception... "Component returned failure code: 0x80004005 (NS_
|
||||
simplelearner.com: could not connect to host
|
||||
simplepractice.com: did not receive HSTS header
|
||||
simply-premium.com: max-age too low: 0
|
||||
simplycloud.de: could not connect to host
|
||||
sin30.net: could not connect to host
|
||||
sincron.org: could not connect to host
|
||||
sinful.pw: could not connect to host
|
||||
@ -3793,7 +3808,6 @@ slope.haus: could not connect to host
|
||||
slovakiana.sk: did not receive HSTS header
|
||||
sluitkampzeist.nl: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no]
|
||||
slycurity.de: did not receive HSTS header
|
||||
sm.ms: did not receive HSTS header
|
||||
smart-mirror.de: did not receive HSTS header
|
||||
smart-ov.nl: could not connect to host
|
||||
smartcoin.com.br: could not connect to host
|
||||
@ -3847,6 +3861,7 @@ someshit.xyz: could not connect to host
|
||||
somethingnew.xyz: did not receive HSTS header
|
||||
sonicrainboom.rocks: could not connect to host
|
||||
soobi.org: did not receive HSTS header
|
||||
soondy.com: did not receive HSTS header
|
||||
sotiran.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no]
|
||||
sotor.de: did not receive HSTS header
|
||||
soulema.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no]
|
||||
@ -3893,6 +3908,7 @@ spotlightsrule.ddns.net: could not connect to host
|
||||
spreadsheets.google.com: did not receive HSTS header (error ignored - included regardless)
|
||||
spreed.me: did not receive HSTS header
|
||||
sproutconnections.com: did not receive HSTS header
|
||||
sprutech.de: could not connect to host
|
||||
sprybear.com: did not receive HSTS header
|
||||
square.gs: could not connect to host
|
||||
squatldf.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no]
|
||||
@ -3941,7 +3957,7 @@ stillblackhat.id: could not connect to host
|
||||
stirlingpoon.xyz: could not connect to host
|
||||
stkbn.com: did not receive HSTS header
|
||||
stmbgr.com: could not connect to host
|
||||
stn.me.uk: could not connect to host
|
||||
stn.me.uk: did not receive HSTS header
|
||||
stocktrade.de: could not connect to host
|
||||
stoffe-monster.de: did not receive HSTS header
|
||||
stole-my.bike: could not connect to host
|
||||
@ -3957,7 +3973,6 @@ strasweb.fr: did not receive HSTS header
|
||||
streamingeverywhere.com: did not receive HSTS header
|
||||
streamingmagazin.de: could not connect to host
|
||||
streampanel.net: did not receive HSTS header
|
||||
streams.dyndns.org: could not connect to host
|
||||
strictlysudo.com: could not connect to host
|
||||
strivephysmed.com: did not receive HSTS header
|
||||
stroeercrm.de: could not connect to host
|
||||
@ -4004,6 +4019,7 @@ supweb.ovh: did not receive HSTS header
|
||||
surfeasy.com: did not receive HSTS header
|
||||
surfone-leucate.com: did not receive HSTS header
|
||||
sushi101tempe.com: did not receive HSTS header
|
||||
sushifrick.de: could not connect to host
|
||||
suzukikenichi.com: did not receive HSTS header
|
||||
sv.search.yahoo.com: did not receive HSTS header
|
||||
svarovani.tk: could not connect to host
|
||||
@ -4086,6 +4102,7 @@ technogroup.cz: did not receive HSTS header
|
||||
technosavvyport.com: did not receive HSTS header
|
||||
techpointed.com: could not connect to host
|
||||
tedb.us: could not connect to host
|
||||
tedovo.com: did not receive HSTS header
|
||||
tegelsensanitaironline.nl: did not receive HSTS header
|
||||
tekshrek.com: did not receive HSTS header
|
||||
telefonnummer.online: could not connect to host
|
||||
@ -4133,6 +4150,7 @@ thecoffeehouse.xyz: could not connect to host
|
||||
thediaryofadam.com: did not receive HSTS header
|
||||
theendofzion.com: did not receive HSTS header
|
||||
theescapistswiki.com: could not connect to host
|
||||
theeyeopener.com: did not receive HSTS header
|
||||
thefarbeyond.com: could not connect to host
|
||||
theflowerbasketonline.com: could not connect to host
|
||||
thefootballanalyst.com: could not connect to host
|
||||
@ -4241,7 +4259,6 @@ tomharris.tech: did not receive HSTS header
|
||||
tomlankhorst.nl: did not receive HSTS header
|
||||
tommsy.com: did not receive HSTS header
|
||||
tommyads.com: could not connect to host
|
||||
tomudding.nl: did not receive HSTS header
|
||||
tonburi.jp: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no]
|
||||
tonyfantjr.com: could not connect to host
|
||||
tonyw.xyz: could not connect to host
|
||||
@ -4272,13 +4289,11 @@ transportal.sk: did not receive HSTS header
|
||||
travelinsurance.co.nz: did not receive HSTS header
|
||||
treeby.net: could not connect to host
|
||||
trendberry.ru: could not connect to host
|
||||
trik.es: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no]
|
||||
trinityaffirmations.com: max-age too low: 0
|
||||
trinitycore.org: max-age too low: 2592000
|
||||
tripdelta.com: did not receive HSTS header
|
||||
trixies-wish.nz: could not connect to host
|
||||
trollme.me: could not connect to host
|
||||
trufflemonkey.co.uk: did not receive HSTS header
|
||||
trunkjunk.co: did not receive HSTS header
|
||||
trusteecar.com: did not receive HSTS header
|
||||
trustmeimfancy.com: could not connect to host
|
||||
@ -4331,7 +4346,6 @@ ubicv.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_
|
||||
ublox.com: did not receive HSTS header
|
||||
ubuntuhot.com: did not receive HSTS header
|
||||
uega.net: did not receive HSTS header
|
||||
ueu.me: could not connect to host
|
||||
ufgaming.com: did not receive HSTS header
|
||||
ufotable.uk: did not receive HSTS header
|
||||
ui8.net: max-age too low: 86400
|
||||
@ -4389,7 +4403,7 @@ uscitizenship.info: did not receive HSTS header
|
||||
uscurrency.gov: did not receive HSTS header
|
||||
used-in.jp: did not receive HSTS header
|
||||
usercare.com: did not receive HSTS header
|
||||
userify.com: max-age too low: 0
|
||||
userify.com: did not receive HSTS header
|
||||
ustr.gov: max-age too low: 86400
|
||||
utleieplassen.no: could not connect to host
|
||||
utopiagalaxy.space: could not connect to host
|
||||
@ -4427,6 +4441,7 @@ vcdove.com: did not receive HSTS header
|
||||
vcr.re: could not connect to host
|
||||
ve3oat.ca: could not connect to host
|
||||
veblen.com: could not connect to host
|
||||
veblr.com: did not receive HSTS header
|
||||
vechkasov.ru: did not receive HSTS header
|
||||
vehent.org: did not receive HSTS header
|
||||
vemokin.net: did not receive HSTS header
|
||||
@ -4452,15 +4467,16 @@ vincentkooijman.at: did not receive HSTS header
|
||||
vincentkooijman.nl: did not receive HSTS header
|
||||
vincentpancol.com: could not connect to host
|
||||
vintageheartcoffee.com: did not receive HSTS header
|
||||
vinyculture.com: could not connect to host
|
||||
vio.no: did not receive HSTS header
|
||||
viperdns.com: could not connect to host
|
||||
vipi.es: could not connect to host
|
||||
vipmusic.ga: could not connect to host
|
||||
vipnettikasinoklubi.com: did not receive HSTS header
|
||||
visiontree-beta.eu: could not connect to host
|
||||
visitbroadstairs.com: could not connect to host
|
||||
vissanum.com: did not receive HSTS header
|
||||
vistarait.com: did not receive HSTS header
|
||||
vitagenda.nl: could not connect to host
|
||||
vitalorange.com: did not receive HSTS header
|
||||
viva-french.com: did not receive HSTS header
|
||||
vlastimilburian.cz: did not receive HSTS header
|
||||
@ -4519,7 +4535,6 @@ wavefrontsystemstech.com: could not connect to host
|
||||
wayne.cloud: did not receive HSTS header
|
||||
wealthfactory.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no]
|
||||
wear2work.nl: did not receive HSTS header
|
||||
wearepapermill.co: did not receive HSTS header
|
||||
weaverhairextensions.nl: could not connect to host
|
||||
web-industry.fr: could not connect to host
|
||||
web-torrent.com: max-age too low: 0
|
||||
@ -4554,7 +4569,6 @@ weddingenvelopes.co.uk: did not receive HSTS header
|
||||
weizenke.im: could not connect to host
|
||||
wellastore.ru: did not receive HSTS header
|
||||
wellsolveit.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no]
|
||||
welpy.com: could not connect to host
|
||||
weltmeisterschaft.net: could not connect to host
|
||||
weltverschwoerung.de: did not receive HSTS header
|
||||
weme.eu: could not connect to host
|
||||
@ -4644,16 +4658,19 @@ woording.com: could not connect to host
|
||||
wootton95.com: could not connect to host
|
||||
woresite.jp: did not receive HSTS header
|
||||
workfone.io: did not receive HSTS header
|
||||
workwithgo.com: could not connect to host
|
||||
worldsbeststory.com: could not connect to host
|
||||
wowapi.org: could not connect to host
|
||||
wphostingspot.com: did not receive HSTS header
|
||||
wpmetadatastandardsproject.org: could not connect to host
|
||||
writeapp.me: did not receive HSTS header
|
||||
wsscompany.com.ve: could not connect to host
|
||||
wubocong.com: could not connect to host
|
||||
wufu.org: did not receive HSTS header
|
||||
wuhengmin.com: did not receive HSTS header
|
||||
wurzelzwerg.net: could not connect to host
|
||||
wusx.club: could not connect to host
|
||||
www.apollo-auto.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no]
|
||||
www.apollo-auto.com: could not connect to host
|
||||
www.braintreepayments.com: did not receive HSTS header
|
||||
www.calyxinstitute.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no]
|
||||
www.cueup.com: could not connect to host
|
||||
@ -4664,6 +4681,7 @@ www.gamesdepartment.co.uk: did not receive HSTS header
|
||||
www.gmail.com: did not receive HSTS header (error ignored - included regardless)
|
||||
www.googlemail.com: did not receive HSTS header (error ignored - included regardless)
|
||||
www.greplin.com: could not connect to host
|
||||
www.heliosnet.com: could not connect to host
|
||||
www.honeybadger.io: did not receive HSTS header
|
||||
www.jitsi.org: did not receive HSTS header
|
||||
www.ledgerscope.net: could not connect to host
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -37,11 +37,11 @@ using namespace mozilla::dom::quota;
|
||||
|
||||
struct Histograms {
|
||||
const char *name;
|
||||
const Telemetry::ID readB;
|
||||
const Telemetry::ID writeB;
|
||||
const Telemetry::ID readMS;
|
||||
const Telemetry::ID writeMS;
|
||||
const Telemetry::ID syncMS;
|
||||
const Telemetry::HistogramID readB;
|
||||
const Telemetry::HistogramID writeB;
|
||||
const Telemetry::HistogramID readMS;
|
||||
const Telemetry::HistogramID writeMS;
|
||||
const Telemetry::HistogramID syncMS;
|
||||
};
|
||||
|
||||
#define SQLITE_TELEMETRY(FILENAME, HGRAM) \
|
||||
@ -78,7 +78,7 @@ public:
|
||||
* IOInterposer. Filename will be reported as NULL, and reference will be
|
||||
* either "sqlite-mainthread" or "sqlite-otherthread".
|
||||
*/
|
||||
explicit IOThreadAutoTimer(Telemetry::ID aId,
|
||||
explicit IOThreadAutoTimer(Telemetry::HistogramID aId,
|
||||
IOInterposeObserver::Operation aOp = IOInterposeObserver::OpNone)
|
||||
: start(TimeStamp::Now()),
|
||||
id(aId)
|
||||
@ -108,7 +108,7 @@ public:
|
||||
TimeStamp end(TimeStamp::Now());
|
||||
uint32_t mainThread = NS_IsMainThread() ? 1 : 0;
|
||||
if (id != Telemetry::HistogramCount) {
|
||||
Telemetry::AccumulateTimeDelta(static_cast<Telemetry::ID>(id + mainThread),
|
||||
Telemetry::AccumulateTimeDelta(static_cast<Telemetry::HistogramID>(id + mainThread),
|
||||
start, end);
|
||||
}
|
||||
// We don't report SQLite I/O on Windows because we have a comprehensive
|
||||
@ -130,7 +130,7 @@ public:
|
||||
|
||||
private:
|
||||
const TimeStamp start;
|
||||
const Telemetry::ID id;
|
||||
const Telemetry::HistogramID id;
|
||||
#if defined(MOZ_GECKO_PROFILER) && !defined(XP_WIN)
|
||||
IOInterposeObserver::Operation op;
|
||||
#endif
|
||||
|
@ -934,8 +934,8 @@ reftest-stylo:
|
||||
chunks: 16
|
||||
run-on-projects:
|
||||
by-test-platform:
|
||||
linux64-stylo/opt: []
|
||||
linux64-stylo/debug: []
|
||||
linux64-stylo/opt: [ 'stylo', 'autoland', 'mozilla-central' ]
|
||||
linux64-stylo/debug: [ 'stylo', 'autoland', 'mozilla-inbound', 'mozilla-central' ]
|
||||
e10s:
|
||||
by-test-platform:
|
||||
linux64-stylo/opt:
|
||||
|
@ -129,6 +129,11 @@ all_locales
|
||||
For the ``l10n`` and ``nightly-l10n`` kinds, this attribute contains the list
|
||||
of relevant locales for the platform.
|
||||
|
||||
all_locales_with_changesets
|
||||
===========================
|
||||
|
||||
Contains a dict of l10n changesets, mapped by locales (same as in ``all_locales``).
|
||||
|
||||
l10n_chunk
|
||||
==========
|
||||
For the ``l10n`` and ``nightly-l10n`` kinds, this attribute contains the chunk
|
||||
|
@ -8,6 +8,7 @@ Do transforms specific to l10n kind
|
||||
from __future__ import absolute_import, print_function, unicode_literals
|
||||
|
||||
import copy
|
||||
import json
|
||||
|
||||
from mozbuild.chunkify import chunkify
|
||||
from taskgraph.transforms.base import (
|
||||
@ -136,15 +137,31 @@ def _parse_locales_file(locales_file, platform=None):
|
||||
If platform is unset matches all platforms.
|
||||
"""
|
||||
locales = []
|
||||
if locales_file.endswith('json'):
|
||||
# Release process uses .json for locale files sometimes.
|
||||
raise NotImplementedError("Don't know how to parse a .json locales file")
|
||||
else:
|
||||
with open(locales_file, mode='r') as lf:
|
||||
locales = lf.read().split()
|
||||
|
||||
with open(locales_file, mode='r') as f:
|
||||
if locales_file.endswith('json'):
|
||||
all_locales = json.load(f)
|
||||
# XXX Only single locales are fetched
|
||||
locales = {
|
||||
locale: data['revision']
|
||||
for locale, data in all_locales.items()
|
||||
if 'android' in data['platforms']
|
||||
}
|
||||
else:
|
||||
all_locales = f.read().split()
|
||||
# 'default' is the hg revision at the top of hg repo, in this context
|
||||
locales = {locale: 'default' for locale in all_locales}
|
||||
return locales
|
||||
|
||||
|
||||
def _remove_ja_jp_mac_locale(locales):
|
||||
# ja-JP-mac is a mac-only locale, but there are no mac builds being repacked,
|
||||
# so just omit it unconditionally
|
||||
return {
|
||||
locale: revision for locale, revision in locales.items() if locale != 'ja-JP-mac'
|
||||
}
|
||||
|
||||
|
||||
@transforms.add
|
||||
def setup_name(config, jobs):
|
||||
for job in jobs:
|
||||
@ -232,14 +249,13 @@ def handle_keyed_by(config, jobs):
|
||||
@transforms.add
|
||||
def all_locales_attribute(config, jobs):
|
||||
for job in jobs:
|
||||
locales = set(_parse_locales_file(job["locales-file"]))
|
||||
# ja-JP-mac is a mac-only locale, but there are no
|
||||
# mac builds being repacked, so just omit it unconditionally
|
||||
locales = locales - set(("ja-JP-mac", ))
|
||||
# Convert to mutable list.
|
||||
locales = list(sorted(locales))
|
||||
locales_with_changesets = _parse_locales_file(job["locales-file"])
|
||||
locales_with_changesets = _remove_ja_jp_mac_locale(locales_with_changesets)
|
||||
|
||||
locales = sorted(locales_with_changesets.keys())
|
||||
attributes = job.setdefault('attributes', {})
|
||||
attributes["all_locales"] = locales
|
||||
attributes["all_locales_with_changesets"] = locales_with_changesets
|
||||
yield job
|
||||
|
||||
|
||||
@ -248,24 +264,27 @@ def chunk_locales(config, jobs):
|
||||
""" Utilizes chunking for l10n stuff """
|
||||
for job in jobs:
|
||||
chunks = job.get('chunks')
|
||||
all_locales = job['attributes']['all_locales']
|
||||
locales_with_changesets = job['attributes']['all_locales_with_changesets']
|
||||
if chunks:
|
||||
if chunks > len(all_locales):
|
||||
if chunks > len(locales_with_changesets):
|
||||
# Reduce chunks down to the number of locales
|
||||
chunks = len(all_locales)
|
||||
chunks = len(locales_with_changesets)
|
||||
for this_chunk in range(1, chunks + 1):
|
||||
chunked = copy.deepcopy(job)
|
||||
chunked['name'] = chunked['name'].replace(
|
||||
'/', '-{}/'.format(this_chunk), 1
|
||||
)
|
||||
chunked['mozharness']['options'] = chunked['mozharness'].get('options', [])
|
||||
my_locales = []
|
||||
my_locales = chunkify(all_locales, this_chunk, chunks)
|
||||
# chunkify doesn't work with dicts
|
||||
locales_with_changesets_as_list = locales_with_changesets.items()
|
||||
chunked_locales = chunkify(locales_with_changesets_as_list, this_chunk, chunks)
|
||||
chunked['mozharness']['options'].extend([
|
||||
"locale={}".format(locale) for locale in my_locales
|
||||
])
|
||||
'locale={}:{}'.format(locale, changeset)
|
||||
for locale, changeset in chunked_locales
|
||||
])
|
||||
chunked['attributes']['l10n_chunk'] = str(this_chunk)
|
||||
chunked['attributes']['chunk_locales'] = my_locales
|
||||
# strip revision
|
||||
chunked['attributes']['chunk_locales'] = [locale for locale, _ in chunked_locales]
|
||||
|
||||
# add the chunk number to the TH symbol
|
||||
group, symbol = split_symbol(
|
||||
@ -276,8 +295,9 @@ def chunk_locales(config, jobs):
|
||||
else:
|
||||
job['mozharness']['options'] = job['mozharness'].get('options', [])
|
||||
job['mozharness']['options'].extend([
|
||||
"locale={}".format(locale) for locale in all_locales
|
||||
])
|
||||
'locale={}:{}'.format(locale, changeset)
|
||||
for locale, changeset in locales_with_changesets.items()
|
||||
])
|
||||
yield job
|
||||
|
||||
|
||||
|
@ -1,5 +0,0 @@
|
||||
[Blob-close.html]
|
||||
type: testharness
|
||||
[Blob.close]
|
||||
expected: FAIL
|
||||
|
@ -0,0 +1,5 @@
|
||||
[filereader_abort.html]
|
||||
type: testharness
|
||||
[Aborting after read]
|
||||
expected: FAIL
|
||||
|
@ -0,0 +1,17 @@
|
||||
[clone-before-keypath-eval.html]
|
||||
type: testharness
|
||||
[Key generator and key path validity check operates on a clone]
|
||||
expected: FAIL
|
||||
|
||||
[Failing key path validity check operates on a clone]
|
||||
expected: FAIL
|
||||
|
||||
[Index key path evaluations operate on a clone]
|
||||
expected: FAIL
|
||||
|
||||
[Store and index key path evaluations operate on the same clone]
|
||||
expected: FAIL
|
||||
|
||||
[Cursor update checks and keypath evaluations operate on a clone]
|
||||
expected: FAIL
|
||||
|
@ -0,0 +1,8 @@
|
||||
[idb-binary-key-detached.htm]
|
||||
type: testharness
|
||||
[Detached ArrayBuffer]
|
||||
expected: FAIL
|
||||
|
||||
[Detached TypedArray]
|
||||
expected: FAIL
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user