mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-22 17:55:50 +00:00
Merge m-c to autoland, a=merge
MozReview-Commit-ID: B3DzZrZb3AB
This commit is contained in:
commit
296d2b492b
@ -231,9 +231,9 @@ var TabsInTitlebar = {
|
||||
}
|
||||
|
||||
// Then add a negative margin to the titlebar, so that the following elements
|
||||
// will overlap it by the lesser of the titlebar height or the tabstrip+menu.
|
||||
let minTitlebarOrTabsHeight = Math.min(titlebarContentHeight, tabAndMenuHeight);
|
||||
titlebar.style.marginBottom = "-" + minTitlebarOrTabsHeight + "px";
|
||||
// will overlap it by the greater of the titlebar height or the tabstrip+menu.
|
||||
let maxTitlebarOrTabsHeight = Math.max(titlebarContentHeight, tabAndMenuHeight);
|
||||
titlebar.style.marginBottom = "-" + maxTitlebarOrTabsHeight + "px";
|
||||
|
||||
// Finally, size the placeholders:
|
||||
if (AppConstants.platform == "macosx") {
|
||||
|
@ -47,20 +47,42 @@ const startupPhases = {
|
||||
// For the following phases of startup we have only a black list for now
|
||||
|
||||
// We are at this phase after creating the first browser window (ie. after final-ui-startup).
|
||||
"before opening first browser window": {},
|
||||
"before opening first browser window": {blacklist: {
|
||||
components: new Set([
|
||||
"nsAsyncShutdown.js",
|
||||
]),
|
||||
modules: new Set([
|
||||
"resource://gre/modules/PlacesBackups.jsm",
|
||||
"resource://gre/modules/PlacesUtils.jsm",
|
||||
])
|
||||
}},
|
||||
|
||||
// We reach this phase right after showing the first browser window.
|
||||
// This means that anything already loaded at this point has been loaded
|
||||
// before first paint and delayed it.
|
||||
"before first paint": {blacklist: {
|
||||
components: new Set([
|
||||
"nsSearchService.js",
|
||||
"PageIconProtocolHandler.js",
|
||||
"PlacesCategoriesStarter.js",
|
||||
"UnifiedComplete.js",
|
||||
"nsPlacesExpiration.js",
|
||||
"nsSearchService.js",
|
||||
]),
|
||||
modules: new Set([
|
||||
"resource://gre/modules/ContextualIdentityService.jsm"
|
||||
"resource:///modules/AboutNewTab.jsm",
|
||||
"resource:///modules/DirectoryLinksProvider.jsm",
|
||||
"resource://gre/modules/BookmarkHTMLUtils.jsm",
|
||||
"resource://gre/modules/Bookmarks.jsm",
|
||||
"resource://gre/modules/ContextualIdentityService.jsm",
|
||||
"resource://gre/modules/NewTabUtils.jsm",
|
||||
"resource://gre/modules/PageThumbs.jsm",
|
||||
"resource://gre/modules/PlacesSyncUtils.jsm",
|
||||
"resource://gre/modules/Sqlite.jsm",
|
||||
]),
|
||||
services: new Set([
|
||||
"@mozilla.org/browser/annotation-service;1",
|
||||
"@mozilla.org/browser/favicon-service;1",
|
||||
"@mozilla.org/browser/nav-bookmarks-service;1",
|
||||
"@mozilla.org/browser/search-service;1",
|
||||
])
|
||||
}},
|
||||
|
@ -119,7 +119,7 @@
|
||||
|
||||
#PopupAutoCompleteRichResult > deck[anonid="search-suggestions-notification"][animate] hbox[anonid="search-suggestions-hint-typing"] {
|
||||
overflow: hidden;
|
||||
max-width: 8ch;
|
||||
max-width: 12ch;
|
||||
width: 0;
|
||||
animation-name: search-suggestions-hint-typing;
|
||||
animation-duration: 500ms;
|
||||
@ -137,7 +137,7 @@
|
||||
|
||||
@keyframes search-suggestions-hint-typing {
|
||||
from { width: 0; }
|
||||
to { width: 8ch; }
|
||||
to { width: 12ch; }
|
||||
}
|
||||
|
||||
#PopupAutoCompleteRichResult > deck[anonid="search-suggestions-notification"][animate] hbox[anonid="search-suggestions-hint-box"] {
|
||||
|
@ -127,7 +127,7 @@ def using_ccache(ccache, ccache_is_sccache):
|
||||
|
||||
@depends_if(ccache, ccache_is_sccache)
|
||||
def using_sccache(ccache, ccache_is_sccache):
|
||||
return True
|
||||
return ccache and ccache_is_sccache
|
||||
|
||||
set_config('MOZ_USING_CCACHE', using_ccache)
|
||||
set_config('MOZ_USING_SCCACHE', using_sccache)
|
||||
|
@ -677,6 +677,9 @@ FragmentOrElement::nsDOMSlots::Traverse(nsCycleCollectionTraversalCallback &cb,
|
||||
NS_CYCLE_COLLECTION_NOTE_EDGE_NAME(cb, "mSlots->mChildrenList");
|
||||
cb.NoteXPCOMChild(NS_ISUPPORTS_CAST(nsIDOMNodeList*, mChildrenList));
|
||||
|
||||
NS_CYCLE_COLLECTION_NOTE_EDGE_NAME(cb, "mSlots->mLabelsList");
|
||||
cb.NoteXPCOMChild(NS_ISUPPORTS_CAST(nsIDOMNodeList*, mLabelsList));
|
||||
|
||||
NS_CYCLE_COLLECTION_NOTE_EDGE_NAME(cb, "mSlots->mClassList");
|
||||
cb.NoteXPCOMChild(mClassList.get());
|
||||
|
||||
@ -711,6 +714,7 @@ FragmentOrElement::nsDOMSlots::Unlink(bool aIsXUL)
|
||||
mShadowRoot = nullptr;
|
||||
mContainingShadow = nullptr;
|
||||
mChildrenList = nullptr;
|
||||
mLabelsList = nullptr;
|
||||
mCustomElementData = nullptr;
|
||||
mClassList = nullptr;
|
||||
mRegisteredIntersectionObservers.Clear();
|
||||
|
@ -25,6 +25,7 @@
|
||||
|
||||
class ContentUnbinder;
|
||||
class nsContentList;
|
||||
class nsLabelsNodeList;
|
||||
class nsDOMAttributeMap;
|
||||
class nsDOMTokenList;
|
||||
class nsIControllers;
|
||||
@ -313,6 +314,11 @@ public:
|
||||
*/
|
||||
RefPtr<nsDOMTokenList> mClassList;
|
||||
|
||||
/*
|
||||
* An object implementing the .labels property for this element.
|
||||
*/
|
||||
RefPtr<nsLabelsNodeList> mLabelsList;
|
||||
|
||||
/**
|
||||
* ShadowRoot bound to the element.
|
||||
*/
|
||||
|
@ -253,19 +253,6 @@ const nsCacheableFuncStringContentList::ContentListType
|
||||
nsCacheableFuncStringHTMLCollection::sType = nsCacheableFuncStringContentList::eHTMLCollection;
|
||||
#endif
|
||||
|
||||
JSObject*
|
||||
nsCacheableFuncStringNodeList::WrapObject(JSContext *cx, JS::Handle<JSObject*> aGivenProto)
|
||||
{
|
||||
return NodeListBinding::Wrap(cx, this, aGivenProto);
|
||||
}
|
||||
|
||||
|
||||
JSObject*
|
||||
nsCacheableFuncStringHTMLCollection::WrapObject(JSContext *cx, JS::Handle<JSObject*> aGivenProto)
|
||||
{
|
||||
return HTMLCollectionBinding::Wrap(cx, this, aGivenProto);
|
||||
}
|
||||
|
||||
// Hashtable for storing nsCacheableFuncStringContentList
|
||||
static PLDHashTable* gFuncStringContentListHashTable;
|
||||
|
||||
@ -378,6 +365,7 @@ NS_GetFuncStringHTMLCollection(nsINode* aRootNode,
|
||||
aString);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------
|
||||
// nsContentList implementation
|
||||
|
||||
nsContentList::nsContentList(nsINode* aRootNode,
|
||||
@ -659,7 +647,7 @@ nsContentList::AttributeChanged(nsIDocument *aDocument, Element* aElement,
|
||||
const nsAttrValue* aOldValue)
|
||||
{
|
||||
NS_PRECONDITION(aElement, "Must have a content node to work with");
|
||||
|
||||
|
||||
if (!mFunc || !mFuncMayDependOnAttr || mState == LIST_DIRTY ||
|
||||
!MayContainRelevantNodes(aElement->GetParentNode()) ||
|
||||
!nsContentUtils::IsInSameAnonymousTree(mRootNode, aElement)) {
|
||||
@ -805,7 +793,7 @@ nsContentList::ContentInserted(nsIDocument *aDocument,
|
||||
|
||||
ASSERT_IN_SYNC;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
nsContentList::ContentRemoved(nsIDocument *aDocument,
|
||||
nsIContent* aContainer,
|
||||
@ -1074,3 +1062,126 @@ nsContentList::AssertInSync()
|
||||
NS_ASSERTION(cnt == mElements.Length(), "Too few elements");
|
||||
}
|
||||
#endif
|
||||
|
||||
//-----------------------------------------------------
|
||||
// nsCacheableFuncStringNodeList
|
||||
|
||||
JSObject*
|
||||
nsCacheableFuncStringNodeList::WrapObject(JSContext *cx, JS::Handle<JSObject*> aGivenProto)
|
||||
{
|
||||
return NodeListBinding::Wrap(cx, this, aGivenProto);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------
|
||||
// nsCacheableFuncStringHTMLCollection
|
||||
|
||||
JSObject*
|
||||
nsCacheableFuncStringHTMLCollection::WrapObject(JSContext *cx, JS::Handle<JSObject*> aGivenProto)
|
||||
{
|
||||
return HTMLCollectionBinding::Wrap(cx, this, aGivenProto);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------
|
||||
// nsLabelsNodeList
|
||||
|
||||
JSObject*
|
||||
nsLabelsNodeList::WrapObject(JSContext *cx, JS::Handle<JSObject*> aGivenProto)
|
||||
{
|
||||
return NodeListBinding::Wrap(cx, this, aGivenProto);
|
||||
}
|
||||
|
||||
void
|
||||
nsLabelsNodeList::AttributeChanged(nsIDocument* aDocument, Element* aElement,
|
||||
int32_t aNameSpaceID, nsIAtom* aAttribute,
|
||||
int32_t aModType,
|
||||
const nsAttrValue* aOldValue)
|
||||
{
|
||||
MOZ_ASSERT(aElement, "Must have a content node to work with");
|
||||
if (mState == LIST_DIRTY ||
|
||||
!nsContentUtils::IsInSameAnonymousTree(mRootNode, aElement)) {
|
||||
return;
|
||||
}
|
||||
|
||||
// We need to handle input type changes to or from "hidden".
|
||||
if (aElement->IsHTMLElement(nsGkAtoms::input) &&
|
||||
aAttribute == nsGkAtoms::type && aNameSpaceID == kNameSpaceID_None) {
|
||||
SetDirty();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
nsLabelsNodeList::ContentAppended(nsIDocument* aDocument,
|
||||
nsIContent* aContainer,
|
||||
nsIContent* aFirstNewContent,
|
||||
int32_t aNewIndexInContainer)
|
||||
{
|
||||
// If a labelable element is moved to outside or inside of
|
||||
// nested associated labels, we're gonna have to modify
|
||||
// the content list.
|
||||
if (mState != LIST_DIRTY ||
|
||||
nsContentUtils::IsInSameAnonymousTree(mRootNode, aContainer)) {
|
||||
SetDirty();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
nsLabelsNodeList::ContentInserted(nsIDocument* aDocument,
|
||||
nsIContent* aContainer,
|
||||
nsIContent* aChild,
|
||||
int32_t aIndexInContainer)
|
||||
{
|
||||
// If a labelable element is moved to outside or inside of
|
||||
// nested associated labels, we're gonna have to modify
|
||||
// the content list.
|
||||
if (mState != LIST_DIRTY ||
|
||||
nsContentUtils::IsInSameAnonymousTree(mRootNode, aChild)) {
|
||||
SetDirty();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
nsLabelsNodeList::ContentRemoved(nsIDocument* aDocument,
|
||||
nsIContent* aContainer,
|
||||
nsIContent* aChild,
|
||||
int32_t aIndexInContainer,
|
||||
nsIContent* aPreviousSibling)
|
||||
{
|
||||
// If a labelable element is removed, we're gonna have to clean
|
||||
// the content list.
|
||||
if (mState != LIST_DIRTY ||
|
||||
nsContentUtils::IsInSameAnonymousTree(mRootNode, aChild)) {
|
||||
SetDirty();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
nsLabelsNodeList::MaybeResetRoot(nsINode* aRootNode)
|
||||
{
|
||||
MOZ_ASSERT(aRootNode, "Must have root");
|
||||
if (mRootNode == aRootNode) {
|
||||
return;
|
||||
}
|
||||
|
||||
mRootNode->RemoveMutationObserver(this);
|
||||
mRootNode = aRootNode;
|
||||
mRootNode->AddMutationObserver(this);
|
||||
SetDirty();
|
||||
}
|
||||
|
||||
void
|
||||
nsLabelsNodeList::PopulateSelf(uint32_t aNeededLength)
|
||||
{
|
||||
MOZ_ASSERT(mRootNode, "Must have root");
|
||||
|
||||
// Start searching at the root.
|
||||
nsINode* cur = mRootNode;
|
||||
if (mElements.IsEmpty() && cur->IsElement() && Match(cur->AsElement())) {
|
||||
mElements.AppendElement(cur->AsElement());
|
||||
}
|
||||
|
||||
nsContentList::PopulateSelf(aNeededLength);
|
||||
}
|
||||
|
@ -376,9 +376,9 @@ protected:
|
||||
* traversed the whole document (or both).
|
||||
*
|
||||
* @param aNeededLength the length the list should have when we are
|
||||
* done (unless it exhausts the document)
|
||||
* done (unless it exhausts the document)
|
||||
*/
|
||||
void PopulateSelf(uint32_t aNeededLength);
|
||||
virtual void PopulateSelf(uint32_t aNeededLength);
|
||||
|
||||
/**
|
||||
* @param aContainer a content node which must be a descendant of
|
||||
@ -589,4 +589,40 @@ public:
|
||||
#endif
|
||||
};
|
||||
|
||||
class nsLabelsNodeList final : public nsContentList
|
||||
{
|
||||
public:
|
||||
nsLabelsNodeList(nsINode* aRootNode,
|
||||
nsContentListMatchFunc aFunc,
|
||||
nsContentListDestroyFunc aDestroyFunc,
|
||||
void* aData)
|
||||
: nsContentList(aRootNode, aFunc, aDestroyFunc, aData)
|
||||
{
|
||||
}
|
||||
|
||||
NS_DECL_NSIMUTATIONOBSERVER_ATTRIBUTECHANGED
|
||||
NS_DECL_NSIMUTATIONOBSERVER_CONTENTAPPENDED
|
||||
NS_DECL_NSIMUTATIONOBSERVER_CONTENTINSERTED
|
||||
NS_DECL_NSIMUTATIONOBSERVER_CONTENTREMOVED
|
||||
|
||||
virtual JSObject* WrapObject(JSContext *cx, JS::Handle<JSObject*> aGivenProto) override;
|
||||
|
||||
/**
|
||||
* Reset root, mutation observer, and clear content list
|
||||
* if the root has been changed.
|
||||
*
|
||||
* @param aRootNode The node under which to limit our search.
|
||||
*/
|
||||
void MaybeResetRoot(nsINode* aRootNode);
|
||||
|
||||
private:
|
||||
/**
|
||||
* Start searching at the last one if we already have nodes, otherwise
|
||||
* start searching at the root.
|
||||
*
|
||||
* @param aNeededLength The list of length should have when we are
|
||||
* done (unless it exhausts the document).
|
||||
*/
|
||||
void PopulateSelf(uint32_t aNeededLength) override;
|
||||
};
|
||||
#endif // nsContentList_h___
|
||||
|
@ -339,17 +339,6 @@ nsContentSink::ProcessHeaderData(nsIAtom* aHeader, const nsAString& aValue,
|
||||
return rv;
|
||||
}
|
||||
}
|
||||
else if (aHeader == nsGkAtoms::msthemecompatible) {
|
||||
// Disable theming for the presshell if the value is no.
|
||||
// XXXbz don't we want to support this as an HTTP header too?
|
||||
nsAutoString value(aValue);
|
||||
if (value.LowerCaseEqualsLiteral("no")) {
|
||||
nsIPresShell* shell = mDocument->GetShell();
|
||||
if (shell) {
|
||||
shell->DisableThemeSupport();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
@ -598,6 +598,7 @@ GK_ATOM(keytext, "keytext")
|
||||
GK_ATOM(keyup, "keyup")
|
||||
GK_ATOM(kind, "kind")
|
||||
GK_ATOM(label, "label")
|
||||
GK_ATOM(labels, "labels")
|
||||
GK_ATOM(lang, "lang")
|
||||
GK_ATOM(language, "language")
|
||||
GK_ATOM(last, "last")
|
||||
@ -709,7 +710,6 @@ GK_ATOM(mozprivatebrowsing, "mozprivatebrowsing")
|
||||
GK_ATOM(moz_opaque, "moz-opaque")
|
||||
GK_ATOM(moz_action_hint, "mozactionhint")
|
||||
GK_ATOM(x_moz_errormessage, "x-moz-errormessage")
|
||||
GK_ATOM(msthemecompatible, "msthemecompatible")
|
||||
GK_ATOM(multicol, "multicol")
|
||||
GK_ATOM(multiple, "multiple")
|
||||
GK_ATOM(muted, "muted")
|
||||
|
@ -1995,7 +1995,7 @@ InterSliceGCRunnerFired(TimeStamp aDeadline, void* aData)
|
||||
}
|
||||
|
||||
TimeStamp startTimeStamp = TimeStamp::Now();
|
||||
|
||||
TimeDuration duration = sGCUnnotifiedTotalTime;
|
||||
uintptr_t reason = reinterpret_cast<uintptr_t>(aData);
|
||||
nsJSContext::GarbageCollectNow(aData ?
|
||||
static_cast<JS::gcreason::Reason>(reason) :
|
||||
@ -2004,20 +2004,20 @@ InterSliceGCRunnerFired(TimeStamp aDeadline, void* aData)
|
||||
nsJSContext::NonShrinkingGC,
|
||||
budget);
|
||||
|
||||
TimeDuration duration = sGCUnnotifiedTotalTime;
|
||||
sGCUnnotifiedTotalTime = TimeDuration();
|
||||
|
||||
TimeStamp now = TimeStamp::Now();
|
||||
TimeDuration sliceDuration = now - startTimeStamp;
|
||||
duration += sliceDuration;
|
||||
if (duration.ToSeconds()) {
|
||||
TimeDuration idleDuration;
|
||||
if (!aDeadline.IsNull()) {
|
||||
TimeStamp now = TimeStamp::Now();
|
||||
if (aDeadline < now) {
|
||||
// This slice overflowed the idle period.
|
||||
idleDuration = aDeadline - startTimeStamp;
|
||||
} else {
|
||||
// Note, we don't want to use duration here, since it may contain
|
||||
// data also from JS engine triggered GC slices.
|
||||
idleDuration = now - startTimeStamp;
|
||||
idleDuration = sliceDuration;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -8157,6 +8157,16 @@ HTMLInputElement::GetWebkitEntries(nsTArray<RefPtr<FileSystemEntry>>& aSequence)
|
||||
aSequence.AppendElements(mFileData->mEntries);
|
||||
}
|
||||
|
||||
already_AddRefed<nsINodeList>
|
||||
HTMLInputElement::GetLabels()
|
||||
{
|
||||
if (!IsLabelable()) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
return nsGenericHTMLElement::Labels();
|
||||
}
|
||||
|
||||
} // namespace dom
|
||||
} // namespace mozilla
|
||||
|
||||
|
@ -735,6 +735,8 @@ public:
|
||||
|
||||
// XPCOM GetCustomVisibility() is OK
|
||||
|
||||
already_AddRefed<nsINodeList> GetLabels();
|
||||
|
||||
// XPCOM Select() is OK
|
||||
|
||||
Nullable<uint32_t> GetSelectionStart(ErrorResult& aRv);
|
||||
|
@ -14,6 +14,7 @@
|
||||
#include "nsFocusManager.h"
|
||||
#include "nsIDOMMouseEvent.h"
|
||||
#include "nsQueryObject.h"
|
||||
#include "mozilla/dom/ShadowRoot.h"
|
||||
|
||||
// construction, destruction
|
||||
|
||||
@ -268,17 +269,23 @@ HTMLLabelElement::GetLabeledElement() const
|
||||
return GetFirstLabelableDescendant();
|
||||
}
|
||||
|
||||
// We have a @for. The id has to be linked to an element in the same document
|
||||
// We have a @for. The id has to be linked to an element in the same tree
|
||||
// and this element should be a labelable form control.
|
||||
//XXXsmaug It is unclear how this should work in case the element is in
|
||||
// Shadow DOM.
|
||||
// See https://www.w3.org/Bugs/Public/show_bug.cgi?id=26365.
|
||||
nsIDocument* doc = GetUncomposedDoc();
|
||||
if (!doc) {
|
||||
return nullptr;
|
||||
nsINode* root = SubtreeRoot();
|
||||
ShadowRoot* shadow = ShadowRoot::FromNode(root);
|
||||
Element* element = nullptr;
|
||||
|
||||
if (shadow) {
|
||||
element = shadow->GetElementById(elementId);
|
||||
} else {
|
||||
nsIDocument* doc = GetUncomposedDoc();
|
||||
if (doc) {
|
||||
element = doc->GetElementById(elementId);
|
||||
} else {
|
||||
element = nsContentUtils::MatchElementId(root->AsContent(), elementId);
|
||||
}
|
||||
}
|
||||
|
||||
Element* element = doc->GetElementById(elementId);
|
||||
if (element && element->IsLabelable()) {
|
||||
return static_cast<nsGenericHTMLElement*>(element);
|
||||
}
|
||||
|
@ -107,6 +107,7 @@
|
||||
#include "mozilla/StyleSetHandle.h"
|
||||
#include "mozilla/StyleSetHandleInlines.h"
|
||||
#include "ReferrerPolicy.h"
|
||||
#include "mozilla/dom/HTMLLabelElement.h"
|
||||
|
||||
using namespace mozilla;
|
||||
using namespace mozilla::dom;
|
||||
@ -511,6 +512,14 @@ nsGenericHTMLElement::BindToTree(nsIDocument* aDocument, nsIContent* aParent,
|
||||
}
|
||||
}
|
||||
|
||||
// We need to consider a labels element is moved to another subtree
|
||||
// with different root, it needs to update labels list and its root
|
||||
// as well.
|
||||
nsDOMSlots* slots = GetExistingDOMSlots();
|
||||
if (slots && slots->mLabelsList) {
|
||||
slots->mLabelsList->MaybeResetRoot(SubtreeRoot());
|
||||
}
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
@ -531,6 +540,13 @@ nsGenericHTMLElement::UnbindFromTree(bool aDeep, bool aNullParent)
|
||||
}
|
||||
}
|
||||
|
||||
// We need to consider a labels element is removed from tree,
|
||||
// it needs to update labels list and its root as well.
|
||||
nsDOMSlots* slots = GetExistingDOMSlots();
|
||||
if (slots && slots->mLabelsList) {
|
||||
slots->mLabelsList->MaybeResetRoot(SubtreeRoot());
|
||||
}
|
||||
|
||||
nsStyledElement::UnbindFromTree(aDeep, aNullParent);
|
||||
}
|
||||
|
||||
@ -1679,6 +1695,30 @@ nsGenericHTMLElement::IsLabelable() const
|
||||
return IsAnyOfHTMLElements(nsGkAtoms::progress, nsGkAtoms::meter);
|
||||
}
|
||||
|
||||
/* static */ bool
|
||||
nsGenericHTMLElement::MatchLabelsElement(Element* aElement, int32_t aNamespaceID,
|
||||
nsIAtom* aAtom, void* aData)
|
||||
{
|
||||
HTMLLabelElement* element = HTMLLabelElement::FromContent(aElement);
|
||||
return element && element->GetControl() == aData;
|
||||
}
|
||||
|
||||
already_AddRefed<nsINodeList>
|
||||
nsGenericHTMLElement::Labels()
|
||||
{
|
||||
MOZ_ASSERT(IsLabelable(),
|
||||
"Labels() only allow labelable elements to use it.");
|
||||
nsDOMSlots* slots = DOMSlots();
|
||||
|
||||
if (!slots->mLabelsList) {
|
||||
slots->mLabelsList = new nsLabelsNodeList(SubtreeRoot(), MatchLabelsElement,
|
||||
nullptr, this);
|
||||
}
|
||||
|
||||
RefPtr<nsLabelsNodeList> labels = slots->mLabelsList;
|
||||
return labels.forget();
|
||||
}
|
||||
|
||||
bool
|
||||
nsGenericHTMLElement::IsInteractiveHTMLContent(bool aIgnoreTabindex) const
|
||||
{
|
||||
|
@ -851,6 +851,12 @@ public:
|
||||
}
|
||||
|
||||
virtual bool IsLabelable() const override;
|
||||
|
||||
static bool MatchLabelsElement(Element* aElement, int32_t aNamespaceID,
|
||||
nsIAtom* aAtom, void* aData);
|
||||
|
||||
already_AddRefed<nsINodeList> Labels();
|
||||
|
||||
virtual bool IsInteractiveHTMLContent(bool aIgnoreTabindex) const override;
|
||||
|
||||
static bool TouchEventsEnabled(JSContext* /* unused */, JSObject* /* unused */);
|
||||
|
@ -128,9 +128,12 @@ is(typeof(document.createElement("button").setCustomValidity), "function",
|
||||
"button.setCustomValidity should be a function");
|
||||
|
||||
// .labels
|
||||
todo("labels" in document.createElement("button"),
|
||||
"button.labels isn't implemented yet");
|
||||
|
||||
ok("labels" in document.createElement("button"),
|
||||
"button.labels should be an IDL attribute of the button element");
|
||||
is(typeof(document.createElement("button").labels), "object",
|
||||
"button.labels should be an object");
|
||||
ok(document.createElement("button").labels instanceof NodeList,
|
||||
"button.labels sohuld be an instance of NodeList");
|
||||
</script>
|
||||
</pre>
|
||||
</body>
|
||||
|
@ -43,6 +43,5 @@ interface HTMLButtonElement : HTMLElement {
|
||||
boolean reportValidity();
|
||||
void setCustomValidity(DOMString error);
|
||||
|
||||
// Not yet implemented:
|
||||
// readonly attribute NodeList labels;
|
||||
readonly attribute NodeList labels;
|
||||
};
|
||||
|
@ -112,7 +112,7 @@ interface HTMLInputElement : HTMLElement {
|
||||
boolean reportValidity();
|
||||
void setCustomValidity(DOMString error);
|
||||
|
||||
// Bug 850365 readonly attribute NodeList labels;
|
||||
readonly attribute NodeList? labels;
|
||||
|
||||
void select();
|
||||
|
||||
|
@ -26,9 +26,5 @@ interface HTMLMeterElement : HTMLElement {
|
||||
attribute double high;
|
||||
[SetterThrows]
|
||||
attribute double optimum;
|
||||
|
||||
/**
|
||||
* The labels attribute will be done with bug 556743.
|
||||
*/
|
||||
//readonly attribute NodeList labels;
|
||||
readonly attribute NodeList labels;
|
||||
};
|
||||
|
@ -34,6 +34,5 @@ interface HTMLOutputElement : HTMLElement {
|
||||
boolean reportValidity();
|
||||
void setCustomValidity(DOMString error);
|
||||
|
||||
// Not yet implemented (bug 556743).
|
||||
// readonly attribute NodeList labels;
|
||||
readonly attribute NodeList labels;
|
||||
};
|
||||
|
@ -18,9 +18,5 @@ interface HTMLProgressElement : HTMLElement {
|
||||
[SetterThrows]
|
||||
attribute double max;
|
||||
readonly attribute double position;
|
||||
|
||||
/**
|
||||
* The labels attribute will be done with bug 567740.
|
||||
*/
|
||||
//readonly attribute NodeList labels;
|
||||
readonly attribute NodeList labels;
|
||||
};
|
||||
|
@ -54,7 +54,7 @@ interface HTMLSelectElement : HTMLElement {
|
||||
boolean reportValidity();
|
||||
void setCustomValidity(DOMString error);
|
||||
|
||||
// NYI: readonly attribute NodeList labels;
|
||||
readonly attribute NodeList labels;
|
||||
|
||||
// https://www.w3.org/Bugs/Public/show_bug.cgi?id=20720
|
||||
void remove();
|
||||
|
@ -58,7 +58,7 @@ interface HTMLTextAreaElement : HTMLElement {
|
||||
boolean reportValidity();
|
||||
void setCustomValidity(DOMString error);
|
||||
|
||||
// readonly attribute NodeList labels;
|
||||
readonly attribute NodeList labels;
|
||||
|
||||
void select();
|
||||
[Throws]
|
||||
|
@ -201,7 +201,8 @@ XMLHttpRequestMainThread::XMLHttpRequestMainThread()
|
||||
mResultJSON(JS::UndefinedValue()),
|
||||
mResultArrayBuffer(nullptr),
|
||||
mIsMappedArrayBuffer(false),
|
||||
mXPCOMifier(nullptr)
|
||||
mXPCOMifier(nullptr),
|
||||
mEventDispatchingSuspended(false)
|
||||
{
|
||||
mozilla::HoldJSObjects(this);
|
||||
}
|
||||
@ -1368,7 +1369,7 @@ XMLHttpRequestMainThread::FireReadystatechangeEvent()
|
||||
event->InitEvent(kLiteralString_readystatechange, false, false);
|
||||
// We assume anyone who managed to call CreateReadystatechangeEvent is trusted
|
||||
event->SetTrusted(true);
|
||||
DispatchDOMEvent(nullptr, event, nullptr, nullptr);
|
||||
DispatchOrStoreEvent(this, event);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
@ -1411,7 +1412,7 @@ XMLHttpRequestMainThread::DispatchProgressEvent(DOMEventTargetHelper* aTarget,
|
||||
ProgressEvent::Constructor(aTarget, typeString, init);
|
||||
event->SetTrusted(true);
|
||||
|
||||
aTarget->DispatchDOMEvent(nullptr, event, nullptr, nullptr);
|
||||
DispatchOrStoreEvent(aTarget, event);
|
||||
|
||||
if (aType == ProgressEventType::progress) {
|
||||
mInLoadProgressEvent = false;
|
||||
@ -1434,6 +1435,45 @@ XMLHttpRequestMainThread::DispatchProgressEvent(DOMEventTargetHelper* aTarget,
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
XMLHttpRequestMainThread::DispatchOrStoreEvent(DOMEventTargetHelper* aTarget,
|
||||
Event* aEvent)
|
||||
{
|
||||
MOZ_ASSERT(aTarget);
|
||||
MOZ_ASSERT(aEvent);
|
||||
|
||||
if (mEventDispatchingSuspended) {
|
||||
PendingEvent* event = mPendingEvents.AppendElement();
|
||||
event->mTarget = aTarget;
|
||||
event->mEvent = aEvent;
|
||||
return;
|
||||
}
|
||||
|
||||
aTarget->DispatchDOMEvent(nullptr, aEvent, nullptr, nullptr);
|
||||
}
|
||||
|
||||
void
|
||||
XMLHttpRequestMainThread::SuspendEventDispatching()
|
||||
{
|
||||
MOZ_ASSERT(!mEventDispatchingSuspended);
|
||||
mEventDispatchingSuspended = true;
|
||||
}
|
||||
|
||||
void
|
||||
XMLHttpRequestMainThread::ResumeEventDispatching()
|
||||
{
|
||||
MOZ_ASSERT(mEventDispatchingSuspended);
|
||||
mEventDispatchingSuspended = false;
|
||||
|
||||
nsTArray<PendingEvent> pendingEvents;
|
||||
pendingEvents.SwapElements(mPendingEvents);
|
||||
|
||||
for (uint32_t i = 0; i < pendingEvents.Length(); ++i) {
|
||||
pendingEvents[i].mTarget->
|
||||
DispatchDOMEvent(nullptr, pendingEvents[i].mEvent, nullptr, nullptr);
|
||||
}
|
||||
}
|
||||
|
||||
already_AddRefed<nsIHttpChannel>
|
||||
XMLHttpRequestMainThread::GetCurrentHttpChannel()
|
||||
{
|
||||
@ -2409,10 +2449,6 @@ XMLHttpRequestMainThread::ChangeStateToDone()
|
||||
mTimeoutTimer->Cancel();
|
||||
}
|
||||
|
||||
if (mFlagSynchronous) {
|
||||
UnsuppressEventHandlingAndResume();
|
||||
}
|
||||
|
||||
// Per spec, fire the last download progress event, if any,
|
||||
// before readystatechange=4/done. (Note that 0-sized responses
|
||||
// will have not sent a progress event yet, so one must be sent here).
|
||||
@ -3033,6 +3069,7 @@ XMLHttpRequestMainThread::SendInternal(const BodyExtractorBase* aBody)
|
||||
}
|
||||
}
|
||||
|
||||
SuspendEventDispatching();
|
||||
StopProgressEventTimer();
|
||||
|
||||
SyncTimeoutType syncTimeoutType = MaybeStartSyncTimeoutTimer();
|
||||
@ -3056,6 +3093,7 @@ XMLHttpRequestMainThread::SendInternal(const BodyExtractorBase* aBody)
|
||||
}
|
||||
|
||||
UnsuppressEventHandlingAndResume();
|
||||
ResumeEventDispatching();
|
||||
} else {
|
||||
// Now that we've successfully opened the channel, we can change state. Note
|
||||
// that this needs to come after the AsyncOpen() and rv check, because this
|
||||
|
@ -401,7 +401,8 @@ public:
|
||||
ErrorResult& aRv);
|
||||
|
||||
void
|
||||
Abort() {
|
||||
Abort()
|
||||
{
|
||||
ErrorResult rv;
|
||||
Abort(rv);
|
||||
MOZ_ASSERT(!rv.Failed());
|
||||
@ -607,8 +608,21 @@ protected:
|
||||
|
||||
nsresult DispatchToMainThread(already_AddRefed<nsIRunnable> aRunnable);
|
||||
|
||||
void DispatchOrStoreEvent(DOMEventTargetHelper* aTarget, Event* aEvent);
|
||||
|
||||
already_AddRefed<nsXMLHttpRequestXPCOMifier> EnsureXPCOMifier();
|
||||
|
||||
void SuspendEventDispatching();
|
||||
void ResumeEventDispatching();
|
||||
|
||||
struct PendingEvent
|
||||
{
|
||||
RefPtr<DOMEventTargetHelper> mTarget;
|
||||
RefPtr<Event> mEvent;
|
||||
};
|
||||
|
||||
nsTArray<PendingEvent> mPendingEvents;
|
||||
|
||||
nsCOMPtr<nsISupports> mContext;
|
||||
nsCOMPtr<nsIPrincipal> mPrincipal;
|
||||
nsCOMPtr<nsIChannel> mChannel;
|
||||
@ -837,6 +851,10 @@ protected:
|
||||
// Helper object to manage our XPCOM scriptability bits
|
||||
nsXMLHttpRequestXPCOMifier* mXPCOMifier;
|
||||
|
||||
// When this is set to true, the event dispatching is suspended. This is
|
||||
// useful to change the correct state when XHR is working sync.
|
||||
bool mEventDispatchingSuspended;
|
||||
|
||||
static bool sDontWarnAboutSyncXHR;
|
||||
};
|
||||
|
||||
|
@ -195,7 +195,10 @@ WebRenderBridgeParent::RecvAddImage(const wr::ImageKey& aImageKey,
|
||||
return IPC_OK();
|
||||
}
|
||||
MOZ_ASSERT(mApi);
|
||||
MOZ_ASSERT(mActiveImageKeys.find(wr::AsUint64(aImageKey)) == mActiveImageKeys.end());
|
||||
|
||||
wr::ImageDescriptor descriptor(aSize, aStride, aFormat);
|
||||
mActiveImageKeys.insert(wr::AsUint64(aImageKey));
|
||||
mApi->AddImage(aImageKey, descriptor,
|
||||
aBuffer.AsSlice());
|
||||
|
||||
@ -213,7 +216,10 @@ WebRenderBridgeParent::RecvAddBlobImage(const wr::ImageKey& aImageKey,
|
||||
return IPC_OK();
|
||||
}
|
||||
MOZ_ASSERT(mApi);
|
||||
MOZ_ASSERT(mActiveImageKeys.find(wr::AsUint64(aImageKey)) == mActiveImageKeys.end());
|
||||
|
||||
wr::ImageDescriptor descriptor(aSize, aStride, aFormat);
|
||||
mActiveImageKeys.insert(wr::AsUint64(aImageKey));
|
||||
mApi->AddBlobImage(aImageKey, descriptor,
|
||||
aBuffer.AsSlice());
|
||||
|
||||
@ -229,7 +235,10 @@ WebRenderBridgeParent::RecvAddRawFont(const wr::FontKey& aFontKey,
|
||||
return IPC_OK();
|
||||
}
|
||||
MOZ_ASSERT(mApi);
|
||||
MOZ_ASSERT(mFontKeys.find(wr::AsUint64(aFontKey)) == mFontKeys.end());
|
||||
|
||||
auto slice = aBuffer.AsSlice();
|
||||
mFontKeys.insert(wr::AsUint64(aFontKey));
|
||||
mApi->AddRawFont(aFontKey, slice, aFontIndex);
|
||||
|
||||
return IPC_OK();
|
||||
@ -242,7 +251,14 @@ WebRenderBridgeParent::RecvDeleteFont(const wr::FontKey& aFontKey)
|
||||
return IPC_OK();
|
||||
}
|
||||
MOZ_ASSERT(mApi);
|
||||
mApi->DeleteFont(aFontKey);
|
||||
|
||||
if (mFontKeys.find(wr::AsUint64(aFontKey)) != mFontKeys.end()) {
|
||||
mFontKeys.erase(wr::AsUint64(aFontKey));
|
||||
mApi->DeleteFont(aFontKey);
|
||||
} else {
|
||||
MOZ_ASSERT_UNREACHABLE("invalid FontKey");
|
||||
}
|
||||
|
||||
return IPC_OK();
|
||||
}
|
||||
|
||||
@ -269,10 +285,12 @@ WebRenderBridgeParent::RecvDeleteImage(const wr::ImageKey& aImageKey)
|
||||
return IPC_OK();
|
||||
}
|
||||
MOZ_ASSERT(mApi);
|
||||
if (mActiveKeys.Get(wr::AsUint64(aImageKey), nullptr)) {
|
||||
mActiveKeys.Remove(wr::AsUint64(aImageKey));
|
||||
if (mActiveImageKeys.find(wr::AsUint64(aImageKey)) != mActiveImageKeys.end()) {
|
||||
mActiveImageKeys.erase(wr::AsUint64(aImageKey));
|
||||
mKeysToDelete.push_back(aImageKey);
|
||||
} else {
|
||||
MOZ_ASSERT_UNREACHABLE("invalid ImageKey");
|
||||
}
|
||||
mKeysToDelete.push_back(aImageKey);
|
||||
return IPC_OK();
|
||||
}
|
||||
|
||||
@ -465,8 +483,8 @@ WebRenderBridgeParent::ProcessWebRenderParentCommands(InfallibleTArray<WebRender
|
||||
const OpAddExternalImage& op = cmd.get_OpAddExternalImage();
|
||||
Range<const wr::ImageKey> keys(&op.key(), 1);
|
||||
MOZ_ASSERT(mExternalImageIds.Get(wr::AsUint64(op.externalImageId())).get());
|
||||
MOZ_ASSERT(!mActiveKeys.Get(wr::AsUint64(keys[0]), nullptr));
|
||||
mActiveKeys.Put(wr::AsUint64(keys[0]), keys[0]);
|
||||
MOZ_ASSERT(mActiveImageKeys.find(wr::AsUint64(keys[0])) == mActiveImageKeys.end());
|
||||
mActiveImageKeys.insert(wr::AsUint64(keys[0]));
|
||||
|
||||
RefPtr<WebRenderImageHost> host = mExternalImageIds.Get(wr::AsUint64(op.externalImageId()));
|
||||
if (!host) {
|
||||
@ -1029,10 +1047,14 @@ WebRenderBridgeParent::ClearResources()
|
||||
mApi->ClearRootDisplayList(wr::NewEpoch(mWrEpoch), mPipelineId);
|
||||
// Schedule composition to clean up Pipeline
|
||||
mCompositorScheduler->ScheduleComposition();
|
||||
for (auto iter = mActiveKeys.Iter(); !iter.Done(); iter.Next()) {
|
||||
mKeysToDelete.push_back(iter.Data());
|
||||
iter.Remove();
|
||||
for (std::unordered_set<uint64_t>::iterator iter = mFontKeys.begin(); iter != mFontKeys.end(); iter++) {
|
||||
mApi->DeleteFont(wr::AsFontKey(*iter));
|
||||
}
|
||||
mFontKeys.clear();
|
||||
for (std::unordered_set<uint64_t>::iterator iter = mActiveImageKeys.begin(); iter != mActiveImageKeys.end(); iter++) {
|
||||
mKeysToDelete.push_back(wr::AsImageKey(*iter));
|
||||
}
|
||||
mActiveImageKeys.clear();
|
||||
DeleteOldImages();
|
||||
for (auto iter = mExternalImageIds.Iter(); !iter.Done(); iter.Next()) {
|
||||
iter.Data()->ClearWrBridge();
|
||||
|
@ -247,8 +247,10 @@ private:
|
||||
RefPtr<CompositorVsyncScheduler> mCompositorScheduler;
|
||||
RefPtr<CompositorAnimationStorage> mAnimStorage;
|
||||
std::vector<wr::ImageKey> mKeysToDelete;
|
||||
// XXX How to handle active keys of non-ExternalImages?
|
||||
nsDataHashtable<nsUint64HashKey, wr::ImageKey> mActiveKeys;
|
||||
// mActiveImageKeys and mFontKeys are used to avoid leaking animations when
|
||||
// WebRenderBridgeParent is destroyed abnormally and Tab move between different windows.
|
||||
std::unordered_set<uint64_t> mActiveImageKeys;
|
||||
std::unordered_set<uint64_t> mFontKeys;
|
||||
// mActiveAnimations is used to avoid leaking animations when WebRenderBridgeParent is
|
||||
// destroyed abnormally and Tab move between different windows.
|
||||
std::unordered_set<uint64_t> mActiveAnimations;
|
||||
|
@ -115,6 +115,26 @@ inline uint64_t AsUint64(const ImageKey& aId) {
|
||||
+ static_cast<uint64_t>(aId.mHandle);
|
||||
}
|
||||
|
||||
inline ImageKey AsImageKey(const uint64_t& aId) {
|
||||
ImageKey imageKey;
|
||||
imageKey.mNamespace = aId >> 32;
|
||||
imageKey.mHandle = aId;
|
||||
return imageKey;
|
||||
}
|
||||
|
||||
// Whenever possible, use wr::FontKey instead of manipulating uint64_t.
|
||||
inline uint64_t AsUint64(const FontKey& aId) {
|
||||
return (static_cast<uint64_t>(aId.mNamespace) << 32)
|
||||
+ static_cast<uint64_t>(aId.mHandle);
|
||||
}
|
||||
|
||||
inline FontKey AsFontKey(const uint64_t& aId) {
|
||||
FontKey fontKey;
|
||||
fontKey.mNamespace = aId >> 32;
|
||||
fontKey.mHandle = aId;
|
||||
return fontKey;
|
||||
}
|
||||
|
||||
// Whenever possible, use wr::PipelineId instead of manipulating uint64_t.
|
||||
inline uint64_t AsUint64(const PipelineId& aId) {
|
||||
return (static_cast<uint64_t>(aId.mNamespace) << 32)
|
||||
|
@ -553,20 +553,6 @@ class JS_PUBLIC_API(AutoAssertNoAlloc)
|
||||
#endif
|
||||
};
|
||||
|
||||
/**
|
||||
* Assert if a GC barrier is invoked while this class is live. This class does
|
||||
* not disable the static rooting hazard analysis.
|
||||
*/
|
||||
class JS_PUBLIC_API(AutoAssertOnBarrier)
|
||||
{
|
||||
JSContext* context;
|
||||
bool prev;
|
||||
|
||||
public:
|
||||
explicit AutoAssertOnBarrier(JSContext* cx);
|
||||
~AutoAssertOnBarrier();
|
||||
};
|
||||
|
||||
/**
|
||||
* Disable the static rooting hazard analysis in the live region and assert if
|
||||
* any allocation that could potentially trigger a GC occurs while this guard
|
||||
@ -645,9 +631,6 @@ UnmarkGrayGCThingRecursively(GCCellPtr thing);
|
||||
namespace js {
|
||||
namespace gc {
|
||||
|
||||
extern JS_FRIEND_API(bool)
|
||||
BarriersAreAllowedOnCurrentThread();
|
||||
|
||||
static MOZ_ALWAYS_INLINE void
|
||||
ExposeGCThingToActiveJS(JS::GCCellPtr thing)
|
||||
{
|
||||
@ -662,8 +645,6 @@ ExposeGCThingToActiveJS(JS::GCCellPtr thing)
|
||||
if (thing.mayBeOwnedByOtherRuntime())
|
||||
return;
|
||||
|
||||
MOZ_DIAGNOSTIC_ASSERT(BarriersAreAllowedOnCurrentThread());
|
||||
|
||||
if (IsIncrementalBarrierNeededOnTenuredGCThing(thing))
|
||||
JS::IncrementalReadBarrier(thing);
|
||||
else if (js::gc::detail::TenuredCellIsMarkedGray(thing.asCell()))
|
||||
|
@ -69,6 +69,10 @@ class GCHashMap : public js::HashMap<Key, Value, HashPolicy, AllocPolicy>
|
||||
}
|
||||
}
|
||||
|
||||
bool needsSweep() const {
|
||||
return this->initialized() && !this->empty();
|
||||
}
|
||||
|
||||
void sweep() {
|
||||
if (!this->initialized())
|
||||
return;
|
||||
@ -246,6 +250,10 @@ class GCHashSet : public js::HashSet<T, HashPolicy, AllocPolicy>
|
||||
GCPolicy<T>::trace(trc, &e.mutableFront(), "hashset element");
|
||||
}
|
||||
|
||||
bool needsSweep() const {
|
||||
return this->initialized() && !this->empty();
|
||||
}
|
||||
|
||||
void sweep() {
|
||||
if (!this->initialized())
|
||||
return;
|
||||
|
@ -135,6 +135,10 @@ class GCVector
|
||||
GCPolicy<T>::trace(trc, &elem, "vector element");
|
||||
}
|
||||
|
||||
bool needsSweep() const {
|
||||
return !this->empty();
|
||||
}
|
||||
|
||||
void sweep() {
|
||||
uint32_t src, dst = 0;
|
||||
for (src = 0; src < length(); src++) {
|
||||
|
@ -1613,6 +1613,7 @@ class HashTable : private AllocPolicy
|
||||
{
|
||||
METER(stats.rehashes++);
|
||||
removedCount = 0;
|
||||
gen++;
|
||||
for (size_t i = 0; i < capacity(); ++i)
|
||||
table[i].unsetCollision();
|
||||
|
||||
@ -1797,6 +1798,9 @@ class HashTable : private AllocPolicy
|
||||
if (!p.isValid())
|
||||
return false;
|
||||
|
||||
MOZ_ASSERT(p.generation == generation());
|
||||
MOZ_ASSERT(p.mutationCount == mutationCount);
|
||||
|
||||
// Changing an entry from removed to live does not affect whether we
|
||||
// are overloaded and can be handled separately.
|
||||
if (p.entry_->isRemoved()) {
|
||||
@ -1880,6 +1884,7 @@ class HashTable : private AllocPolicy
|
||||
MOZ_ASSERT(table);
|
||||
mozilla::ReentrancyGuard g(*this);
|
||||
MOZ_ASSERT(p.found());
|
||||
MOZ_ASSERT(p.generation == generation());
|
||||
remove(*p.entry_);
|
||||
checkUnderloaded();
|
||||
}
|
||||
@ -1889,6 +1894,7 @@ class HashTable : private AllocPolicy
|
||||
MOZ_ASSERT(table);
|
||||
mozilla::ReentrancyGuard g(*this);
|
||||
MOZ_ASSERT(p.found());
|
||||
MOZ_ASSERT(p.generation == generation());
|
||||
typename HashTableEntry<T>::NonConstT t(mozilla::Move(*p));
|
||||
HashPolicy::setKey(t, const_cast<Key&>(k));
|
||||
remove(*p.entry_);
|
||||
|
@ -168,6 +168,7 @@ struct Zone
|
||||
bool isGCSweeping() const { return gcState_ == Sweep; }
|
||||
bool isGCFinished() const { return gcState_ == Finished; }
|
||||
bool isGCCompacting() const { return gcState_ == Compact; }
|
||||
bool isGCMarking() const { return gcState_ == Mark || gcState_ == MarkGray; }
|
||||
bool isGCSweepingOrCompacting() const { return gcState_ == Sweep || gcState_ == Compact; }
|
||||
|
||||
static MOZ_ALWAYS_INLINE JS::shadow::Zone* asShadowZone(JS::Zone* zone) {
|
||||
|
@ -38,6 +38,7 @@ class WeakCacheBase : public mozilla::LinkedListElement<WeakCacheBase>
|
||||
virtual ~WeakCacheBase() {}
|
||||
|
||||
virtual void sweep() = 0;
|
||||
virtual bool needsSweep() = 0;
|
||||
};
|
||||
} // namespace detail
|
||||
|
||||
@ -69,6 +70,10 @@ class WeakCache : protected detail::WeakCacheBase,
|
||||
void sweep() override {
|
||||
GCPolicy<T>::sweep(&cache);
|
||||
}
|
||||
|
||||
bool needsSweep() override {
|
||||
return cache.needsSweep();
|
||||
}
|
||||
};
|
||||
|
||||
} // namespace JS
|
||||
|
@ -712,13 +712,6 @@ frontend::CompileLazyFunction(JSContext* cx, Handle<LazyScript*> lazy, const cha
|
||||
if (!NameFunctions(cx, pn))
|
||||
return false;
|
||||
|
||||
// XDR the newly delazified function.
|
||||
if (script->scriptSource()->hasEncoder() &&
|
||||
!script->scriptSource()->xdrEncodeFunction(cx, fun, sourceObject))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -685,7 +685,7 @@ class HeapSlot : public WriteBarrieredBase<Value>
|
||||
const Value& target) const;
|
||||
#endif
|
||||
|
||||
void set(NativeObject* owner, Kind kind, uint32_t slot, const Value& v) {
|
||||
MOZ_ALWAYS_INLINE void set(NativeObject* owner, Kind kind, uint32_t slot, const Value& v) {
|
||||
MOZ_ASSERT(preconditionForSet(owner, kind, slot));
|
||||
pre();
|
||||
value = v;
|
||||
|
@ -340,26 +340,26 @@ ShouldTraceCrossCompartment(JSTracer* trc, JSObject* src, const Value& val)
|
||||
}
|
||||
|
||||
static void
|
||||
AssertZoneIsMarking(Cell* thing)
|
||||
AssertShouldMarkInZone(Cell* thing)
|
||||
{
|
||||
MOZ_ASSERT(TenuredCell::fromPointer(thing)->zone()->isGCMarking());
|
||||
MOZ_ASSERT(thing->asTenured().zone()->shouldMarkInZone());
|
||||
}
|
||||
|
||||
static void
|
||||
AssertZoneIsMarking(JSString* str)
|
||||
AssertShouldMarkInZone(JSString* str)
|
||||
{
|
||||
#ifdef DEBUG
|
||||
Zone* zone = TenuredCell::fromPointer(str)->zone();
|
||||
MOZ_ASSERT(zone->isGCMarking() || zone->isAtomsZone());
|
||||
Zone* zone = str->asTenured().zone();
|
||||
MOZ_ASSERT(zone->shouldMarkInZone() || zone->isAtomsZone());
|
||||
#endif
|
||||
}
|
||||
|
||||
static void
|
||||
AssertZoneIsMarking(JS::Symbol* sym)
|
||||
AssertShouldMarkInZone(JS::Symbol* sym)
|
||||
{
|
||||
#ifdef DEBUG
|
||||
Zone* zone = TenuredCell::fromPointer(sym)->zone();
|
||||
MOZ_ASSERT(zone->isGCMarking() || zone->isAtomsZone());
|
||||
Zone* zone = sym->asTenured().zone();
|
||||
MOZ_ASSERT(zone->shouldMarkInZone() || zone->isAtomsZone());
|
||||
#endif
|
||||
}
|
||||
|
||||
@ -771,35 +771,35 @@ GCMarker::markImplicitEdges(T* thing)
|
||||
|
||||
template <typename T>
|
||||
static inline bool
|
||||
MustSkipMarking(GCMarker* gcmarker, T thing)
|
||||
ShouldMark(GCMarker* gcmarker, T thing)
|
||||
{
|
||||
// Don't trace things that are owned by another runtime.
|
||||
if (IsOwnedByOtherRuntime(gcmarker->runtime(), thing))
|
||||
return true;
|
||||
return false;
|
||||
|
||||
// Don't mark things outside a zone if we are in a per-zone GC.
|
||||
return !thing->zone()->isGCMarking();
|
||||
return thing->zone()->shouldMarkInZone();
|
||||
}
|
||||
|
||||
template <>
|
||||
bool
|
||||
MustSkipMarking<JSObject*>(GCMarker* gcmarker, JSObject* obj)
|
||||
ShouldMark<JSObject*>(GCMarker* gcmarker, JSObject* obj)
|
||||
{
|
||||
// Don't trace things that are owned by another runtime.
|
||||
if (IsOwnedByOtherRuntime(gcmarker->runtime(), obj))
|
||||
return true;
|
||||
return false;
|
||||
|
||||
// We may mark a Nursery thing outside the context of the
|
||||
// MinorCollectionTracer because of a pre-barrier. The pre-barrier is not
|
||||
// needed in this case because we perform a minor collection before each
|
||||
// incremental slice.
|
||||
if (IsInsideNursery(obj))
|
||||
return true;
|
||||
return false;
|
||||
|
||||
// Don't mark things outside a zone if we are in a per-zone GC. It is
|
||||
// faster to check our own arena, which we can do since we know that
|
||||
// the object is tenured.
|
||||
return !TenuredCell::fromPointer(obj)->zone()->isGCMarking();
|
||||
return obj->asTenured().zone()->shouldMarkInZone();
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
@ -807,7 +807,7 @@ void
|
||||
DoMarking(GCMarker* gcmarker, T* thing)
|
||||
{
|
||||
// Do per-type marking precondition checks.
|
||||
if (MustSkipMarking(gcmarker, thing))
|
||||
if (!ShouldMark(gcmarker, thing))
|
||||
return;
|
||||
|
||||
CheckTracedThing(gcmarker, thing);
|
||||
@ -834,7 +834,7 @@ void
|
||||
NoteWeakEdge(GCMarker* gcmarker, T** thingp)
|
||||
{
|
||||
// Do per-type marking precondition checks.
|
||||
if (MustSkipMarking(gcmarker, *thingp))
|
||||
if (!ShouldMark(gcmarker, *thingp))
|
||||
return;
|
||||
|
||||
CheckTracedThing(gcmarker, *thingp);
|
||||
@ -990,7 +990,7 @@ template <typename T>
|
||||
bool
|
||||
js::GCMarker::mark(T* thing)
|
||||
{
|
||||
AssertZoneIsMarking(thing);
|
||||
AssertShouldMarkInZone(thing);
|
||||
MOZ_ASSERT(!IsInsideNursery(gc::TenuredCell::fromPointer(thing)));
|
||||
return gc::ParticipatesInCC<T>::value
|
||||
? gc::TenuredCell::fromPointer(thing)->markIfUnmarked(markColor())
|
||||
@ -1125,7 +1125,7 @@ JSString::traceBase(JSTracer* trc)
|
||||
inline void
|
||||
js::GCMarker::eagerlyMarkChildren(JSLinearString* linearStr)
|
||||
{
|
||||
AssertZoneIsMarking(linearStr);
|
||||
AssertShouldMarkInZone(linearStr);
|
||||
MOZ_ASSERT(linearStr->isMarked());
|
||||
MOZ_ASSERT(linearStr->JSString::isLinear());
|
||||
|
||||
@ -1135,7 +1135,7 @@ js::GCMarker::eagerlyMarkChildren(JSLinearString* linearStr)
|
||||
MOZ_ASSERT(linearStr->JSString::isLinear());
|
||||
if (linearStr->isPermanentAtom())
|
||||
break;
|
||||
AssertZoneIsMarking(linearStr);
|
||||
AssertShouldMarkInZone(linearStr);
|
||||
if (!mark(static_cast<JSString*>(linearStr)))
|
||||
break;
|
||||
}
|
||||
@ -1188,7 +1188,7 @@ js::GCMarker::eagerlyMarkChildren(JSRope* rope)
|
||||
|
||||
JS_DIAGNOSTICS_ASSERT(rope->getTraceKind() == JS::TraceKind::String);
|
||||
JS_DIAGNOSTICS_ASSERT(rope->JSString::isRope());
|
||||
AssertZoneIsMarking(rope);
|
||||
AssertShouldMarkInZone(rope);
|
||||
MOZ_ASSERT(rope->isMarked());
|
||||
JSRope* next = nullptr;
|
||||
|
||||
@ -1674,7 +1674,7 @@ GCMarker::processMarkStackTop(SliceBudget& budget)
|
||||
|
||||
case MarkStack::ObjectTag: {
|
||||
obj = stack.popPtr().as<JSObject>();
|
||||
AssertZoneIsMarking(obj);
|
||||
AssertShouldMarkInZone(obj);
|
||||
goto scan_obj;
|
||||
}
|
||||
|
||||
@ -1738,7 +1738,7 @@ GCMarker::processMarkStackTop(SliceBudget& budget)
|
||||
|
||||
scan_obj:
|
||||
{
|
||||
AssertZoneIsMarking(obj);
|
||||
AssertShouldMarkInZone(obj);
|
||||
|
||||
budget.step();
|
||||
if (budget.isOverBudget()) {
|
||||
|
@ -251,8 +251,8 @@ Zone::discardJitCode(FreeOp* fop, bool discardBaselineCode)
|
||||
void
|
||||
JS::Zone::checkUniqueIdTableAfterMovingGC()
|
||||
{
|
||||
for (UniqueIdMap::Enum e(uniqueIds()); !e.empty(); e.popFront())
|
||||
js::gc::CheckGCThingAfterMovingGC(e.front().key());
|
||||
for (auto r = uniqueIds().all(); !r.empty(); r.popFront())
|
||||
js::gc::CheckGCThingAfterMovingGC(r.front().key());
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -242,11 +242,8 @@ struct Zone : public JS::shadow::Zone,
|
||||
return CurrentThreadIsHeapMajorCollecting() && !rt->gc.isHeapCompacting() && gcState_ != NoGC;
|
||||
}
|
||||
|
||||
bool isGCMarking() {
|
||||
if (CurrentThreadIsHeapCollecting())
|
||||
return gcState_ == Mark || gcState_ == MarkGray;
|
||||
else
|
||||
return needsIncrementalBarrier();
|
||||
bool shouldMarkInZone() const {
|
||||
return needsIncrementalBarrier() || isGCMarking();
|
||||
}
|
||||
|
||||
// Get a number that is incremented whenever this zone is collected, and
|
||||
|
10
js/src/jit-test/tests/class/bug1169746.js
Normal file
10
js/src/jit-test/tests/class/bug1169746.js
Normal file
@ -0,0 +1,10 @@
|
||||
class C { }
|
||||
class D extends C { }
|
||||
|
||||
function f()
|
||||
{
|
||||
for (var i = 0; i < 2000; ++i)
|
||||
new D();
|
||||
}
|
||||
|
||||
f();
|
29
js/src/jit-test/tests/xdr/relazify.js
Normal file
29
js/src/jit-test/tests/xdr/relazify.js
Normal file
@ -0,0 +1,29 @@
|
||||
load(libdir + 'bytecode-cache.js');
|
||||
var test = "";
|
||||
gczeal(0);
|
||||
|
||||
// Check that a GC can relazify decoded functions.
|
||||
//
|
||||
// Generations 0 and 3 are executed from the source, thus f is not executed yet.
|
||||
// Generations 1 and 2 are decoded, thus we recorded the delazified f function.
|
||||
test = `
|
||||
function f() { return 1; };
|
||||
assertEq(isLazyFunction(f), generation == 0 || generation == 3);
|
||||
f();
|
||||
expect = isRelazifiableFunction(f);
|
||||
assertEq(isLazyFunction(f), false);
|
||||
`;
|
||||
evalWithCache(test, {
|
||||
checkAfter: function (ctx) {
|
||||
gc(ctx.global.f, "shrinking"); // relazify f, if possible.
|
||||
evaluate("assertEq(isLazyFunction(f), expect);", ctx);
|
||||
}
|
||||
});
|
||||
|
||||
evalWithCache(test, {
|
||||
incremental: true,
|
||||
checkAfter: function (ctx) {
|
||||
gc(ctx.global.f, "shrinking"); // relazify f, if possible.
|
||||
evaluate("assertEq(isLazyFunction(f), expect);", ctx);
|
||||
}
|
||||
});
|
@ -1414,6 +1414,11 @@ static const VMFunction ThrowUninitializedThisInfo =
|
||||
FunctionInfo<ThrowUninitializedThisFn>(BaselineThrowUninitializedThis,
|
||||
"BaselineThrowUninitializedThis");
|
||||
|
||||
typedef bool (*ThrowInitializedThisFn)(JSContext*, BaselineFrame* frame);
|
||||
static const VMFunction ThrowInitializedThisInfo =
|
||||
FunctionInfo<ThrowInitializedThisFn>(BaselineThrowInitializedThis,
|
||||
"BaselineThrowInitializedThis");
|
||||
|
||||
bool
|
||||
BaselineCompiler::emit_JSOP_CHECKTHIS()
|
||||
{
|
||||
@ -1424,18 +1429,35 @@ BaselineCompiler::emit_JSOP_CHECKTHIS()
|
||||
}
|
||||
|
||||
bool
|
||||
BaselineCompiler::emitCheckThis(ValueOperand val)
|
||||
BaselineCompiler::emit_JSOP_CHECKTHISREINIT()
|
||||
{
|
||||
frame.syncStack(0);
|
||||
masm.loadValue(frame.addressOfStackValue(frame.peek(-1)), R0);
|
||||
|
||||
return emitCheckThis(R0, /* reinit = */true);
|
||||
}
|
||||
|
||||
bool
|
||||
BaselineCompiler::emitCheckThis(ValueOperand val, bool reinit)
|
||||
{
|
||||
Label thisOK;
|
||||
masm.branchTestMagic(Assembler::NotEqual, val, &thisOK);
|
||||
if (reinit)
|
||||
masm.branchTestMagic(Assembler::Equal, val, &thisOK);
|
||||
else
|
||||
masm.branchTestMagic(Assembler::NotEqual, val, &thisOK);
|
||||
|
||||
prepareVMCall();
|
||||
|
||||
masm.loadBaselineFramePtr(BaselineFrameReg, val.scratchReg());
|
||||
pushArg(val.scratchReg());
|
||||
|
||||
if (!callVM(ThrowUninitializedThisInfo))
|
||||
return false;
|
||||
if (reinit) {
|
||||
if (!callVM(ThrowInitializedThisInfo))
|
||||
return false;
|
||||
} else {
|
||||
if (!callVM(ThrowUninitializedThisInfo))
|
||||
return false;
|
||||
}
|
||||
|
||||
masm.bind(&thisOK);
|
||||
return true;
|
||||
@ -4224,6 +4246,56 @@ BaselineCompiler::emit_JSOP_SUPERBASE()
|
||||
return true;
|
||||
}
|
||||
|
||||
typedef JSObject* (*SuperFunOperationFn)(JSContext*, HandleObject);
|
||||
static const VMFunction SuperFunOperationInfo =
|
||||
FunctionInfo<SuperFunOperationFn>(SuperFunOperation, "SuperFunOperation");
|
||||
|
||||
bool
|
||||
BaselineCompiler::emit_JSOP_SUPERFUN()
|
||||
{
|
||||
frame.syncStack(0);
|
||||
|
||||
Register callee = R0.scratchReg();
|
||||
Register proto = R1.scratchReg();
|
||||
Register scratch = R2.scratchReg();
|
||||
|
||||
// Lookup callee object of environment containing [[ThisValue]]
|
||||
getThisEnvironmentCallee(callee);
|
||||
|
||||
// Load prototype of callee
|
||||
masm.loadObjProto(callee, proto);
|
||||
|
||||
// Use VMCall for missing or lazy proto
|
||||
Label needVMCall;
|
||||
MOZ_ASSERT(uintptr_t(TaggedProto::LazyProto) == 1);
|
||||
masm.branchPtr(Assembler::BelowOrEqual, proto, ImmWord(1), &needVMCall);
|
||||
|
||||
// Use VMCall for non-JSFunction objects (eg. Proxy)
|
||||
masm.branchTestObjClass(Assembler::NotEqual, proto, scratch, &JSFunction::class_, &needVMCall);
|
||||
|
||||
// Use VMCall if not constructor
|
||||
masm.load16ZeroExtend(Address(proto, JSFunction::offsetOfFlags()), scratch);
|
||||
masm.branchTest32(Assembler::Zero, scratch, Imm32(JSFunction::CONSTRUCTOR), &needVMCall);
|
||||
|
||||
// Valid constructor
|
||||
Label hasSuperFun;
|
||||
masm.jump(&hasSuperFun);
|
||||
|
||||
// Slow path VM Call
|
||||
masm.bind(&needVMCall);
|
||||
prepareVMCall();
|
||||
pushArg(callee);
|
||||
if (!callVM(SuperFunOperationInfo))
|
||||
return false;
|
||||
masm.movePtr(ReturnReg, proto);
|
||||
|
||||
// Box prototype and return
|
||||
masm.bind(&hasSuperFun);
|
||||
masm.tagValue(JSVAL_TYPE_OBJECT, proto, R1);
|
||||
frame.push(R1);
|
||||
return true;
|
||||
}
|
||||
|
||||
typedef bool (*NewArgumentsObjectFn)(JSContext*, BaselineFrame*, MutableHandleValue);
|
||||
static const VMFunction NewArgumentsObjectInfo =
|
||||
FunctionInfo<NewArgumentsObjectFn>(jit::NewArgumentsObject, "NewArgumentsObject");
|
||||
|
@ -217,6 +217,7 @@ namespace jit {
|
||||
_(JSOP_RESUME) \
|
||||
_(JSOP_CALLEE) \
|
||||
_(JSOP_SUPERBASE) \
|
||||
_(JSOP_SUPERFUN) \
|
||||
_(JSOP_GETRVAL) \
|
||||
_(JSOP_SETRVAL) \
|
||||
_(JSOP_RETRVAL) \
|
||||
@ -226,6 +227,7 @@ namespace jit {
|
||||
_(JSOP_CHECKISOBJ) \
|
||||
_(JSOP_CHECKISCALLABLE) \
|
||||
_(JSOP_CHECKTHIS) \
|
||||
_(JSOP_CHECKTHISREINIT) \
|
||||
_(JSOP_CHECKRETURN) \
|
||||
_(JSOP_NEWTARGET) \
|
||||
_(JSOP_SUPERCALL) \
|
||||
@ -295,7 +297,7 @@ class BaselineCompiler : public BaselineCompilerSpecific
|
||||
private:
|
||||
MethodStatus emitBody();
|
||||
|
||||
MOZ_MUST_USE bool emitCheckThis(ValueOperand val);
|
||||
MOZ_MUST_USE bool emitCheckThis(ValueOperand val, bool reinit=false);
|
||||
void emitLoadReturnValue(ValueOperand val);
|
||||
|
||||
void emitInitializeLocals();
|
||||
|
@ -2397,7 +2397,7 @@ DoCallFallback(JSContext* cx, BaselineFrame* frame, ICCall_Fallback* stub_, uint
|
||||
FallbackICSpew(cx, stub, "Call(%s)", CodeName[op]);
|
||||
|
||||
MOZ_ASSERT(argc == GET_ARGC(pc));
|
||||
bool constructing = (op == JSOP_NEW);
|
||||
bool constructing = (op == JSOP_NEW || op == JSOP_SUPERCALL);
|
||||
bool ignoresReturnValue = (op == JSOP_CALL_IGNORES_RV);
|
||||
|
||||
// Ensure vp array is rooted - we may GC in here.
|
||||
@ -2432,7 +2432,7 @@ DoCallFallback(JSContext* cx, BaselineFrame* frame, ICCall_Fallback* stub_, uint
|
||||
}
|
||||
}
|
||||
|
||||
if (op == JSOP_NEW) {
|
||||
if (constructing) {
|
||||
if (!ConstructFromStack(cx, callArgs))
|
||||
return false;
|
||||
res.set(callArgs.rval());
|
||||
@ -2506,7 +2506,7 @@ DoSpreadCallFallback(JSContext* cx, BaselineFrame* frame, ICCall_Fallback* stub_
|
||||
RootedScript script(cx, frame->script());
|
||||
jsbytecode* pc = stub->icEntry()->pc(script);
|
||||
JSOp op = JSOp(*pc);
|
||||
bool constructing = (op == JSOP_SPREADNEW);
|
||||
bool constructing = (op == JSOP_SPREADNEW || op == JSOP_SPREADSUPERCALL);
|
||||
FallbackICSpew(cx, stub, "SpreadCall(%s)", CodeName[op]);
|
||||
|
||||
// Ensure vp array is rooted - we may GC in here.
|
||||
|
@ -4860,6 +4860,9 @@ IonBuilder::createThisScriptedBaseline(MDefinition* callee)
|
||||
if (!target || !target->hasScript())
|
||||
return nullptr;
|
||||
|
||||
if (target->isBoundFunction() || target->isDerivedClassConstructor())
|
||||
return nullptr;
|
||||
|
||||
JSObject* templateObject = inspector->getTemplateObject(pc);
|
||||
if (!templateObject)
|
||||
return nullptr;
|
||||
|
@ -1037,6 +1037,8 @@ class MacroAssembler : public MacroAssemblerSpecific
|
||||
inline void branchPtr(Condition cond, const Address& lhs, ImmGCPtr rhs, Label* label) PER_SHARED_ARCH;
|
||||
inline void branchPtr(Condition cond, const Address& lhs, ImmWord rhs, Label* label) PER_SHARED_ARCH;
|
||||
|
||||
inline void branchPtr(Condition cond, const BaseIndex& lhs, ImmWord rhs, Label* label) PER_SHARED_ARCH;
|
||||
|
||||
inline void branchPtr(Condition cond, const AbsoluteAddress& lhs, Register rhs, Label* label)
|
||||
DEFINED_ON(arm, arm64, mips_shared, x86, x64);
|
||||
inline void branchPtr(Condition cond, const AbsoluteAddress& lhs, ImmWord rhs, Label* label)
|
||||
@ -1654,6 +1656,8 @@ class MacroAssembler : public MacroAssemblerSpecific
|
||||
|
||||
if (type == MIRType::Value)
|
||||
branchTestGCThing(Assembler::NotEqual, address, &done);
|
||||
else if (type == MIRType::Object || type == MIRType::String)
|
||||
branchPtr(Assembler::Equal, address, ImmWord(0), &done);
|
||||
|
||||
Push(PreBarrierReg);
|
||||
computeEffectiveAddress(address, PreBarrierReg);
|
||||
|
@ -2386,6 +2386,7 @@ DoTypeMonitorFallback(JSContext* cx, BaselineFrame* frame, ICTypeMonitor_Fallbac
|
||||
MOZ_ASSERT(frame->isFunctionFrame() || frame->isEvalFrame());
|
||||
MOZ_ASSERT(stub->monitorsThis() ||
|
||||
*GetNextPc(pc) == JSOP_CHECKTHIS ||
|
||||
*GetNextPc(pc) == JSOP_CHECKTHISREINIT ||
|
||||
*GetNextPc(pc) == JSOP_CHECKRETURN);
|
||||
if (stub->monitorsThis())
|
||||
TypeScript::SetThis(cx, script, TypeSet::UnknownType());
|
||||
|
@ -1433,15 +1433,15 @@ MarkValueFromIon(JSRuntime* rt, Value* vp)
|
||||
void
|
||||
MarkStringFromIon(JSRuntime* rt, JSString** stringp)
|
||||
{
|
||||
if (*stringp)
|
||||
TraceManuallyBarrieredEdge(&rt->gc.marker, stringp, "write barrier");
|
||||
MOZ_ASSERT(*stringp);
|
||||
TraceManuallyBarrieredEdge(&rt->gc.marker, stringp, "write barrier");
|
||||
}
|
||||
|
||||
void
|
||||
MarkObjectFromIon(JSRuntime* rt, JSObject** objp)
|
||||
{
|
||||
if (*objp)
|
||||
TraceManuallyBarrieredEdge(&rt->gc.marker, objp, "write barrier");
|
||||
MOZ_ASSERT(*objp);
|
||||
TraceManuallyBarrieredEdge(&rt->gc.marker, objp, "write barrier");
|
||||
}
|
||||
|
||||
void
|
||||
@ -1497,6 +1497,12 @@ BaselineThrowUninitializedThis(JSContext* cx, BaselineFrame* frame)
|
||||
return ThrowUninitializedThis(cx, frame);
|
||||
}
|
||||
|
||||
bool
|
||||
BaselineThrowInitializedThis(JSContext* cx, BaselineFrame* frame)
|
||||
{
|
||||
return ThrowInitializedThis(cx, frame);
|
||||
}
|
||||
|
||||
|
||||
bool
|
||||
ThrowObjectCoercible(JSContext* cx, HandleValue v)
|
||||
|
@ -831,6 +831,9 @@ ThrowReadOnlyError(JSContext* cx, HandleObject obj, int32_t index);
|
||||
MOZ_MUST_USE bool
|
||||
BaselineThrowUninitializedThis(JSContext* cx, BaselineFrame* frame);
|
||||
|
||||
MOZ_MUST_USE bool
|
||||
BaselineThrowInitializedThis(JSContext* cx, BaselineFrame* frame);
|
||||
|
||||
MOZ_MUST_USE bool
|
||||
ThrowBadDerivedReturn(JSContext* cx, HandleValue v);
|
||||
|
||||
|
@ -1457,6 +1457,12 @@ MacroAssembler::branchPtr(Condition cond, wasm::SymbolicAddress lhs, Register rh
|
||||
branchPtr(cond, scratch2, rhs, label);
|
||||
}
|
||||
|
||||
void
|
||||
MacroAssembler::branchPtr(Condition cond, const BaseIndex& lhs, ImmWord rhs, Label* label)
|
||||
{
|
||||
branch32(cond, lhs, Imm32(rhs.value), label);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline CodeOffsetJump
|
||||
MacroAssembler::branchPtrWithPatch(Condition cond, Register lhs, T rhs, RepatchLabel* label)
|
||||
|
@ -1032,6 +1032,17 @@ MacroAssembler::branchPtr(Condition cond, wasm::SymbolicAddress lhs, Register rh
|
||||
branchPtr(cond, scratch, rhs, label);
|
||||
}
|
||||
|
||||
void
|
||||
MacroAssembler::branchPtr(Condition cond, const BaseIndex& lhs, ImmWord rhs, Label* label)
|
||||
{
|
||||
vixl::UseScratchRegisterScope temps(this);
|
||||
const Register scratch = temps.AcquireX().asUnsized();
|
||||
MOZ_ASSERT(scratch != lhs.base);
|
||||
MOZ_ASSERT(scratch != lhs.index);
|
||||
loadPtr(lhs, scratch);
|
||||
branchPtr(cond, scratch, rhs, label);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
CodeOffsetJump
|
||||
MacroAssembler::branchPtrWithPatch(Condition cond, Register lhs, T rhs, RepatchLabel* label)
|
||||
|
@ -571,6 +571,13 @@ MacroAssembler::branchPtr(Condition cond, wasm::SymbolicAddress lhs, Register rh
|
||||
branchPtr(cond, SecondScratchReg, rhs, label);
|
||||
}
|
||||
|
||||
void
|
||||
MacroAssembler::branchPtr(Condition cond, const BaseIndex& lhs, ImmWord rhs, Label* label)
|
||||
{
|
||||
loadPtr(lhs, SecondScratchReg);
|
||||
branchPtr(cond, SecondScratchReg, rhs, label);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
CodeOffsetJump
|
||||
MacroAssembler::branchPtrWithPatch(Condition cond, Register lhs, T rhs, RepatchLabel* label)
|
||||
|
@ -871,6 +871,9 @@ class Assembler : public AssemblerX86Shared
|
||||
case Operand::MEM_REG_DISP:
|
||||
masm.cmpq_im(rhs.value, lhs.disp(), lhs.base());
|
||||
break;
|
||||
case Operand::MEM_SCALE:
|
||||
masm.cmpq_im(rhs.value, lhs.disp(), lhs.base(), lhs.index(), lhs.scale());
|
||||
break;
|
||||
case Operand::MEM_ADDRESS32:
|
||||
masm.cmpq_im(rhs.value, lhs.address());
|
||||
break;
|
||||
|
@ -582,6 +582,12 @@ MacroAssembler::branchPtr(Condition cond, const Address& lhs, ImmWord rhs, Label
|
||||
branchPtrImpl(cond, lhs, rhs, label);
|
||||
}
|
||||
|
||||
void
|
||||
MacroAssembler::branchPtr(Condition cond, const BaseIndex& lhs, ImmWord rhs, Label* label)
|
||||
{
|
||||
branchPtrImpl(cond, lhs, rhs, label);
|
||||
}
|
||||
|
||||
template <typename T, typename S, typename L>
|
||||
void
|
||||
MacroAssembler::branchPtrImpl(Condition cond, const T& lhs, const S& rhs, L label)
|
||||
|
@ -1347,7 +1347,6 @@ JSContext::JSContext(JSRuntime* runtime, const JS::ContextOptions& options)
|
||||
dtoaState(nullptr),
|
||||
heapState(JS::HeapState::Idle),
|
||||
suppressGC(0),
|
||||
allowGCBarriers(true),
|
||||
#ifdef DEBUG
|
||||
ionCompiling(false),
|
||||
ionCompilingSafeForMinorGC(false),
|
||||
|
@ -474,10 +474,6 @@ struct JSContext : public JS::RootingContext,
|
||||
*/
|
||||
js::ThreadLocalData<int32_t> suppressGC;
|
||||
|
||||
// In some cases, invoking GC barriers (incremental or otherwise) will break
|
||||
// things. These barriers assert if this flag is set.
|
||||
js::ThreadLocalData<bool> allowGCBarriers;
|
||||
|
||||
#ifdef DEBUG
|
||||
// Whether this thread is actively Ion compiling.
|
||||
js::ThreadLocalData<bool> ionCompiling;
|
||||
|
@ -1567,6 +1567,14 @@ JSFunction::createScriptForLazilyInterpretedFunction(JSContext* cx, HandleFuncti
|
||||
// Only functions without inner functions are re-lazified.
|
||||
script->setLazyScript(lazy);
|
||||
}
|
||||
|
||||
// XDR the newly delazified function.
|
||||
if (script->scriptSource()->hasEncoder()) {
|
||||
RootedScriptSource sourceObject(cx, lazy->sourceObject());
|
||||
if (!script->scriptSource()->xdrEncodeFunction(cx, fun, sourceObject))
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -5233,6 +5233,9 @@ PrepareWeakCacheTasks(JSRuntime* rt)
|
||||
// Build a vector of sweep tasks to run on a helper thread.
|
||||
WeakCacheTaskVector tasks;
|
||||
bool ok = IterateWeakCaches(rt, [&] (JS::detail::WeakCacheBase* cache) {
|
||||
if (!cache->needsSweep())
|
||||
return true;
|
||||
|
||||
return tasks.emplaceBack(rt, *cache);
|
||||
});
|
||||
|
||||
@ -6009,7 +6012,6 @@ GCRuntime::canChangeActiveContext(JSContext* cx)
|
||||
// scheduling.
|
||||
return cx->heapState == JS::HeapState::Idle
|
||||
&& !cx->suppressGC
|
||||
&& cx->allowGCBarriers
|
||||
&& !cx->inUnsafeRegion
|
||||
&& !cx->generationalDisabled
|
||||
&& !cx->compactingDisabledCount
|
||||
@ -7494,25 +7496,6 @@ JS::AutoAssertNoGC::~AutoAssertNoGC()
|
||||
cx_->inUnsafeRegion--;
|
||||
}
|
||||
|
||||
JS::AutoAssertOnBarrier::AutoAssertOnBarrier(JSContext* cx)
|
||||
: context(cx),
|
||||
prev(cx->allowGCBarriers)
|
||||
{
|
||||
context->allowGCBarriers = false;
|
||||
}
|
||||
|
||||
JS::AutoAssertOnBarrier::~AutoAssertOnBarrier()
|
||||
{
|
||||
MOZ_ASSERT(!context->allowGCBarriers);
|
||||
context->allowGCBarriers = prev;
|
||||
}
|
||||
|
||||
JS_FRIEND_API(bool)
|
||||
js::gc::BarriersAreAllowedOnCurrentThread()
|
||||
{
|
||||
return TlsContext.get()->allowGCBarriers;
|
||||
}
|
||||
|
||||
#ifdef DEBUG
|
||||
JS::AutoAssertNoAlloc::AutoAssertNoAlloc(JSContext* cx)
|
||||
: gc(nullptr)
|
||||
|
@ -3554,6 +3554,12 @@ JSObject::uninlinedIsProxy() const
|
||||
return is<ProxyObject>();
|
||||
}
|
||||
|
||||
bool
|
||||
JSObject::uninlinedNonProxyIsExtensible() const
|
||||
{
|
||||
return nonProxyIsExtensible();
|
||||
}
|
||||
|
||||
void
|
||||
JSObject::dump(FILE* fp) const
|
||||
{
|
||||
|
@ -504,6 +504,7 @@ class JSObject : public js::gc::Cell
|
||||
// places that want it (JITs and the like), and it'd be a pain to mark them
|
||||
// all as friends.
|
||||
inline bool nonProxyIsExtensible() const;
|
||||
bool uninlinedNonProxyIsExtensible() const;
|
||||
|
||||
public:
|
||||
/*
|
||||
|
@ -599,6 +599,10 @@ class InnerViewTable
|
||||
void sweep();
|
||||
void sweepAfterMinorGC();
|
||||
|
||||
bool needsSweep() const {
|
||||
return map.needsSweep();
|
||||
}
|
||||
|
||||
bool needsSweepAfterMinorGC() const {
|
||||
return !nurseryKeys.empty() || !nurseryKeysValid;
|
||||
}
|
||||
|
@ -2757,7 +2757,7 @@ END_CASE(JSOP_CHECKTHIS)
|
||||
CASE(JSOP_CHECKTHISREINIT)
|
||||
{
|
||||
if (!REGS.sp[-1].isMagic(JS_UNINITIALIZED_LEXICAL)) {
|
||||
JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, JSMSG_REINIT_THIS);
|
||||
MOZ_ALWAYS_FALSE(ThrowInitializedThis(cx, REGS.fp()));
|
||||
goto error;
|
||||
}
|
||||
}
|
||||
@ -4226,24 +4226,10 @@ END_CASE(JSOP_NEWTARGET)
|
||||
CASE(JSOP_SUPERFUN)
|
||||
{
|
||||
ReservedRooted<JSObject*> superEnvFunc(&rootObject0, &GetSuperEnvFunction(cx, REGS));
|
||||
MOZ_ASSERT(superEnvFunc->as<JSFunction>().isClassConstructor());
|
||||
MOZ_ASSERT(superEnvFunc->as<JSFunction>().nonLazyScript()->isDerivedClassConstructor());
|
||||
|
||||
ReservedRooted<JSObject*> superFun(&rootObject1);
|
||||
|
||||
if (!GetPrototype(cx, superEnvFunc, &superFun))
|
||||
goto error;
|
||||
|
||||
ReservedRooted<Value> superFunVal(&rootValue0, UndefinedValue());
|
||||
superFun = SuperFunOperation(cx, superEnvFunc);
|
||||
if (!superFun)
|
||||
superFunVal = NullValue();
|
||||
else if (!superFun->isConstructor())
|
||||
superFunVal = ObjectValue(*superFun);
|
||||
|
||||
if (superFunVal.isObjectOrNull()) {
|
||||
ReportIsNotFunction(cx, superFunVal, JSDVG_IGNORE_STACK, CONSTRUCT);
|
||||
goto error;
|
||||
}
|
||||
|
||||
PUSH_OBJECT(*superFun);
|
||||
}
|
||||
@ -5241,3 +5227,35 @@ js::HomeObjectSuperBase(JSContext* cx, HandleObject homeObj)
|
||||
|
||||
return superBase;
|
||||
}
|
||||
|
||||
JSObject*
|
||||
js::SuperFunOperation(JSContext* cx, HandleObject callee)
|
||||
{
|
||||
MOZ_ASSERT(callee->as<JSFunction>().isClassConstructor());
|
||||
MOZ_ASSERT(callee->as<JSFunction>().nonLazyScript()->isDerivedClassConstructor());
|
||||
|
||||
RootedObject superFun(cx);
|
||||
|
||||
if (!GetPrototype(cx, callee, &superFun))
|
||||
return nullptr;
|
||||
|
||||
RootedValue superFunVal(cx, UndefinedValue());
|
||||
if (!superFun)
|
||||
superFunVal = NullValue();
|
||||
else if (!superFun->isConstructor())
|
||||
superFunVal = ObjectValue(*superFun);
|
||||
|
||||
if (superFunVal.isObjectOrNull()) {
|
||||
ReportIsNotFunction(cx, superFunVal, JSDVG_IGNORE_STACK, CONSTRUCT);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
return superFun;
|
||||
}
|
||||
|
||||
bool
|
||||
js::ThrowInitializedThis(JSContext* cx, AbstractFramePtr frame)
|
||||
{
|
||||
JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, JSMSG_REINIT_THIS);
|
||||
return false;
|
||||
}
|
||||
|
@ -571,6 +571,9 @@ ThrowCheckIsCallable(JSContext* cx, CheckIsCallableKind kind);
|
||||
bool
|
||||
ThrowUninitializedThis(JSContext* cx, AbstractFramePtr frame);
|
||||
|
||||
bool
|
||||
ThrowInitializedThis(JSContext* cx, AbstractFramePtr frame);
|
||||
|
||||
bool
|
||||
DefaultClassConstructor(JSContext* cx, unsigned argc, Value* vp);
|
||||
|
||||
@ -592,6 +595,9 @@ MakeDefaultConstructor(JSContext* cx, HandleScript script, jsbytecode* pc, Handl
|
||||
JSObject*
|
||||
HomeObjectSuperBase(JSContext* cx, HandleObject homeObj);
|
||||
|
||||
JSObject*
|
||||
SuperFunOperation(JSContext* cx, HandleObject callee);
|
||||
|
||||
} /* namespace js */
|
||||
|
||||
#endif /* vm_Interpreter_h */
|
||||
|
@ -420,7 +420,7 @@ NativeObject::copy(JSContext* cx, gc::AllocKind kind, gc::InitialHeap heap,
|
||||
return obj;
|
||||
}
|
||||
|
||||
inline void
|
||||
MOZ_ALWAYS_INLINE void
|
||||
NativeObject::setSlotWithType(JSContext* cx, Shape* shape,
|
||||
const Value& value, bool overwriting)
|
||||
{
|
||||
@ -739,8 +739,9 @@ LookupOwnPropertyInline(JSContext* cx,
|
||||
}
|
||||
}
|
||||
|
||||
// Check for a native property.
|
||||
if (Shape* shape = obj->lookup(cx, id)) {
|
||||
// Check for a native property. Call Shape::search directly (instead of
|
||||
// NativeObject::lookup) because it's inlined.
|
||||
if (Shape* shape = obj->lastProperty()->search(cx, id)) {
|
||||
propp.setNativeProperty(shape);
|
||||
*donep = true;
|
||||
return true;
|
||||
|
@ -795,15 +795,16 @@ class NativeObject : public ShapedObject
|
||||
void freeSlot(JSContext* cx, uint32_t slot);
|
||||
|
||||
private:
|
||||
static Shape* getChildProperty(JSContext* cx, HandleNativeObject obj,
|
||||
HandleShape parent, MutableHandle<StackShape> child);
|
||||
static MOZ_ALWAYS_INLINE Shape* getChildProperty(JSContext* cx, HandleNativeObject obj,
|
||||
HandleShape parent,
|
||||
MutableHandle<StackShape> child);
|
||||
|
||||
public:
|
||||
/* Add a property whose id is not yet in this scope. */
|
||||
static Shape* addProperty(JSContext* cx, HandleNativeObject obj, HandleId id,
|
||||
JSGetterOp getter, JSSetterOp setter,
|
||||
uint32_t slot, unsigned attrs, unsigned flags,
|
||||
bool allowDictionary = true);
|
||||
static MOZ_ALWAYS_INLINE Shape* addProperty(JSContext* cx, HandleNativeObject obj, HandleId id,
|
||||
JSGetterOp getter, JSSetterOp setter,
|
||||
uint32_t slot, unsigned attrs, unsigned flags,
|
||||
bool allowDictionary = true);
|
||||
|
||||
/* Add a data property whose id is not yet in this scope. */
|
||||
static Shape* addDataProperty(JSContext* cx, HandleNativeObject obj,
|
||||
@ -901,36 +902,36 @@ class NativeObject : public ShapedObject
|
||||
return getSlotAddressUnchecked(slot);
|
||||
}
|
||||
|
||||
HeapSlot& getSlotRef(uint32_t slot) {
|
||||
MOZ_ALWAYS_INLINE HeapSlot& getSlotRef(uint32_t slot) {
|
||||
MOZ_ASSERT(slotInRange(slot));
|
||||
return *getSlotAddress(slot);
|
||||
}
|
||||
|
||||
const HeapSlot& getSlotRef(uint32_t slot) const {
|
||||
MOZ_ALWAYS_INLINE const HeapSlot& getSlotRef(uint32_t slot) const {
|
||||
MOZ_ASSERT(slotInRange(slot));
|
||||
return *getSlotAddress(slot);
|
||||
}
|
||||
|
||||
// Check requirements on values stored to this object.
|
||||
inline void checkStoredValue(const Value& v) {
|
||||
MOZ_ALWAYS_INLINE void checkStoredValue(const Value& v) {
|
||||
MOZ_ASSERT(IsObjectValueInCompartment(v, compartment()));
|
||||
MOZ_ASSERT(AtomIsMarked(zoneFromAnyThread(), v));
|
||||
}
|
||||
|
||||
void setSlot(uint32_t slot, const Value& value) {
|
||||
MOZ_ALWAYS_INLINE void setSlot(uint32_t slot, const Value& value) {
|
||||
MOZ_ASSERT(slotInRange(slot));
|
||||
checkStoredValue(value);
|
||||
getSlotRef(slot).set(this, HeapSlot::Slot, slot, value);
|
||||
}
|
||||
|
||||
void initSlot(uint32_t slot, const Value& value) {
|
||||
MOZ_ALWAYS_INLINE void initSlot(uint32_t slot, const Value& value) {
|
||||
MOZ_ASSERT(getSlot(slot).isUndefined());
|
||||
MOZ_ASSERT(slotInRange(slot));
|
||||
checkStoredValue(value);
|
||||
initSlotUnchecked(slot, value);
|
||||
}
|
||||
|
||||
void initSlotUnchecked(uint32_t slot, const Value& value) {
|
||||
MOZ_ALWAYS_INLINE void initSlotUnchecked(uint32_t slot, const Value& value) {
|
||||
getSlotAddressUnchecked(slot)->init(this, HeapSlot::Slot, slot, value);
|
||||
}
|
||||
|
||||
@ -964,30 +965,30 @@ class NativeObject : public ShapedObject
|
||||
static bool rollbackProperties(JSContext* cx, HandleNativeObject obj,
|
||||
uint32_t slotSpan);
|
||||
|
||||
inline void setSlotWithType(JSContext* cx, Shape* shape,
|
||||
const Value& value, bool overwriting = true);
|
||||
MOZ_ALWAYS_INLINE void setSlotWithType(JSContext* cx, Shape* shape,
|
||||
const Value& value, bool overwriting = true);
|
||||
|
||||
inline const Value& getReservedSlot(uint32_t index) const {
|
||||
MOZ_ALWAYS_INLINE const Value& getReservedSlot(uint32_t index) const {
|
||||
MOZ_ASSERT(index < JSSLOT_FREE(getClass()));
|
||||
return getSlot(index);
|
||||
}
|
||||
|
||||
const HeapSlot& getReservedSlotRef(uint32_t index) const {
|
||||
MOZ_ALWAYS_INLINE const HeapSlot& getReservedSlotRef(uint32_t index) const {
|
||||
MOZ_ASSERT(index < JSSLOT_FREE(getClass()));
|
||||
return getSlotRef(index);
|
||||
}
|
||||
|
||||
HeapSlot& getReservedSlotRef(uint32_t index) {
|
||||
MOZ_ALWAYS_INLINE HeapSlot& getReservedSlotRef(uint32_t index) {
|
||||
MOZ_ASSERT(index < JSSLOT_FREE(getClass()));
|
||||
return getSlotRef(index);
|
||||
}
|
||||
|
||||
void initReservedSlot(uint32_t index, const Value& v) {
|
||||
MOZ_ALWAYS_INLINE void initReservedSlot(uint32_t index, const Value& v) {
|
||||
MOZ_ASSERT(index < JSSLOT_FREE(getClass()));
|
||||
initSlot(index, v);
|
||||
}
|
||||
|
||||
void setReservedSlot(uint32_t index, const Value& v) {
|
||||
MOZ_ALWAYS_INLINE void setReservedSlot(uint32_t index, const Value& v) {
|
||||
MOZ_ASSERT(index < JSSLOT_FREE(getClass()));
|
||||
setSlot(index, v);
|
||||
}
|
||||
|
@ -1907,8 +1907,8 @@ ObjectGroupCompartment::checkNewTableAfterMovingGC(NewTable* table)
|
||||
if (!table || !table->initialized())
|
||||
return;
|
||||
|
||||
for (NewTable::Enum e(*table); !e.empty(); e.popFront()) {
|
||||
NewEntry entry = e.front();
|
||||
for (auto r = table->all(); !r.empty(); r.popFront()) {
|
||||
NewEntry entry = r.front();
|
||||
CheckGCThingAfterMovingGC(entry.group.unbarrieredGet());
|
||||
TaggedProto proto = entry.group.unbarrieredGet()->proto();
|
||||
if (proto.isObject())
|
||||
@ -1921,7 +1921,7 @@ ObjectGroupCompartment::checkNewTableAfterMovingGC(NewTable* table)
|
||||
|
||||
NewEntry::Lookup lookup(clasp, proto, entry.associated);
|
||||
auto ptr = table->lookup(lookup);
|
||||
MOZ_RELEASE_ASSERT(ptr.found() && &*ptr == &e.front());
|
||||
MOZ_RELEASE_ASSERT(ptr.found() && &*ptr == &r.front());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -390,7 +390,7 @@ class ObjectGroup : public gc::TenuredCell
|
||||
inline HeapTypeSet* getProperty(JSContext* cx, JSObject* obj, jsid id);
|
||||
|
||||
/* Get a property only if it already exists. */
|
||||
inline HeapTypeSet* maybeGetProperty(jsid id);
|
||||
MOZ_ALWAYS_INLINE HeapTypeSet* maybeGetProperty(jsid id);
|
||||
|
||||
/*
|
||||
* Iterate through the group's properties. getPropertyCount overapproximates
|
||||
|
@ -333,6 +333,30 @@ Shape::searchNoHashify(Shape* start, jsid id)
|
||||
return start->searchLinear(id);
|
||||
}
|
||||
|
||||
/* static */ MOZ_ALWAYS_INLINE Shape*
|
||||
NativeObject::addProperty(JSContext* cx, HandleNativeObject obj, HandleId id,
|
||||
GetterOp getter, SetterOp setter, uint32_t slot, unsigned attrs,
|
||||
unsigned flags, bool allowDictionary)
|
||||
{
|
||||
MOZ_ASSERT(!JSID_IS_VOID(id));
|
||||
MOZ_ASSERT(getter != JS_PropertyStub);
|
||||
MOZ_ASSERT(setter != JS_StrictPropertyStub);
|
||||
MOZ_ASSERT(obj->uninlinedNonProxyIsExtensible());
|
||||
MOZ_ASSERT(!obj->containsPure(id));
|
||||
|
||||
AutoKeepShapeTables keep(cx);
|
||||
ShapeTable::Entry* entry = nullptr;
|
||||
if (obj->inDictionaryMode()) {
|
||||
ShapeTable* table = obj->lastProperty()->ensureTableForDictionary(cx, keep);
|
||||
if (!table)
|
||||
return nullptr;
|
||||
entry = &table->search<MaybeAdding::Adding>(id, keep);
|
||||
}
|
||||
|
||||
return addPropertyInternal(cx, obj, id, getter, setter, slot, attrs, flags, entry,
|
||||
allowDictionary, keep);
|
||||
}
|
||||
|
||||
} /* namespace js */
|
||||
|
||||
#endif /* vm_Shape_inl_h */
|
||||
|
@ -290,7 +290,7 @@ Shape::replaceLastProperty(JSContext* cx, StackBaseShape& base,
|
||||
* which must be lastProperty() if inDictionaryMode(), else parent must be
|
||||
* one of lastProperty() or lastProperty()->parent.
|
||||
*/
|
||||
/* static */ Shape*
|
||||
/* static */ MOZ_ALWAYS_INLINE Shape*
|
||||
NativeObject::getChildProperty(JSContext* cx,
|
||||
HandleNativeObject obj, HandleShape parent,
|
||||
MutableHandle<StackShape> child)
|
||||
@ -418,30 +418,6 @@ js::NativeObject::toDictionaryMode(JSContext* cx, HandleNativeObject obj)
|
||||
return true;
|
||||
}
|
||||
|
||||
/* static */ Shape*
|
||||
NativeObject::addProperty(JSContext* cx, HandleNativeObject obj, HandleId id,
|
||||
GetterOp getter, SetterOp setter, uint32_t slot, unsigned attrs,
|
||||
unsigned flags, bool allowDictionary)
|
||||
{
|
||||
MOZ_ASSERT(!JSID_IS_VOID(id));
|
||||
MOZ_ASSERT(getter != JS_PropertyStub);
|
||||
MOZ_ASSERT(setter != JS_StrictPropertyStub);
|
||||
MOZ_ASSERT(obj->nonProxyIsExtensible());
|
||||
MOZ_ASSERT(!obj->containsPure(id));
|
||||
|
||||
AutoKeepShapeTables keep(cx);
|
||||
ShapeTable::Entry* entry = nullptr;
|
||||
if (obj->inDictionaryMode()) {
|
||||
ShapeTable* table = obj->lastProperty()->ensureTableForDictionary(cx, keep);
|
||||
if (!table)
|
||||
return nullptr;
|
||||
entry = &table->search<MaybeAdding::Adding>(id, keep);
|
||||
}
|
||||
|
||||
return addPropertyInternal(cx, obj, id, getter, setter, slot, attrs, flags, entry,
|
||||
allowDictionary, keep);
|
||||
}
|
||||
|
||||
static bool
|
||||
ShouldConvertToDictionary(NativeObject* obj)
|
||||
{
|
||||
@ -1288,12 +1264,12 @@ Zone::checkBaseShapeTableAfterMovingGC()
|
||||
if (!baseShapes().initialized())
|
||||
return;
|
||||
|
||||
for (BaseShapeSet::Enum e(baseShapes()); !e.empty(); e.popFront()) {
|
||||
UnownedBaseShape* base = e.front().unbarrieredGet();
|
||||
for (auto r = baseShapes().all(); !r.empty(); r.popFront()) {
|
||||
UnownedBaseShape* base = r.front().unbarrieredGet();
|
||||
CheckGCThingAfterMovingGC(base);
|
||||
|
||||
BaseShapeSet::Ptr ptr = baseShapes().lookup(base);
|
||||
MOZ_RELEASE_ASSERT(ptr.found() && &*ptr == &e.front());
|
||||
MOZ_RELEASE_ASSERT(ptr.found() && &*ptr == &r.front());
|
||||
}
|
||||
}
|
||||
|
||||
@ -1349,8 +1325,8 @@ Zone::checkInitialShapesTableAfterMovingGC()
|
||||
* initialShapes that points into the nursery, and that the hash table
|
||||
* entries are discoverable.
|
||||
*/
|
||||
for (InitialShapeSet::Enum e(initialShapes()); !e.empty(); e.popFront()) {
|
||||
InitialShapeEntry entry = e.front();
|
||||
for (auto r = initialShapes().all(); !r.empty(); r.popFront()) {
|
||||
InitialShapeEntry entry = r.front();
|
||||
JSProtoKey protoKey = entry.proto.key();
|
||||
TaggedProto proto = entry.proto.proto().unbarrieredGet();
|
||||
Shape* shape = entry.shape.unbarrieredGet();
|
||||
@ -1365,7 +1341,7 @@ Zone::checkInitialShapesTableAfterMovingGC()
|
||||
shape->numFixedSlots(),
|
||||
shape->getObjectFlags());
|
||||
InitialShapeSet::Ptr ptr = initialShapes().lookup(lookup);
|
||||
MOZ_RELEASE_ASSERT(ptr.found() && &*ptr == &e.front());
|
||||
MOZ_RELEASE_ASSERT(ptr.found() && &*ptr == &r.front());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -405,11 +405,10 @@ PropertyHasBeenMarkedNonConstant(JSObject* obj, jsid id)
|
||||
}
|
||||
|
||||
MOZ_ALWAYS_INLINE bool
|
||||
HasTypePropertyId(JSObject* obj, jsid id, TypeSet::Type type)
|
||||
HasTrackedPropertyType(JSObject* obj, jsid id, TypeSet::Type type)
|
||||
{
|
||||
id = IdToTypeId(id);
|
||||
if (!TrackPropertyTypes(obj, id))
|
||||
return true;
|
||||
MOZ_ASSERT(id == IdToTypeId(id));
|
||||
MOZ_ASSERT(TrackPropertyTypes(obj, id));
|
||||
|
||||
if (HeapTypeSet* types = obj->group()->maybeGetProperty(id)) {
|
||||
if (!types->hasType(type))
|
||||
@ -423,6 +422,16 @@ HasTypePropertyId(JSObject* obj, jsid id, TypeSet::Type type)
|
||||
return false;
|
||||
}
|
||||
|
||||
MOZ_ALWAYS_INLINE bool
|
||||
HasTypePropertyId(JSObject* obj, jsid id, TypeSet::Type type)
|
||||
{
|
||||
id = IdToTypeId(id);
|
||||
if (!TrackPropertyTypes(obj, id))
|
||||
return true;
|
||||
|
||||
return HasTrackedPropertyType(obj, id, type);
|
||||
}
|
||||
|
||||
MOZ_ALWAYS_INLINE bool
|
||||
HasTypePropertyId(JSObject* obj, jsid id, const Value& value)
|
||||
{
|
||||
@ -433,20 +442,18 @@ void AddTypePropertyId(JSContext* cx, ObjectGroup* group, JSObject* obj, jsid id
|
||||
void AddTypePropertyId(JSContext* cx, ObjectGroup* group, JSObject* obj, jsid id, const Value& value);
|
||||
|
||||
/* Add a possible type for a property of obj. */
|
||||
inline void
|
||||
MOZ_ALWAYS_INLINE void
|
||||
AddTypePropertyId(JSContext* cx, JSObject* obj, jsid id, TypeSet::Type type)
|
||||
{
|
||||
id = IdToTypeId(id);
|
||||
if (TrackPropertyTypes(obj, id))
|
||||
if (TrackPropertyTypes(obj, id) && !HasTrackedPropertyType(obj, id, type))
|
||||
AddTypePropertyId(cx, obj->group(), obj, id, type);
|
||||
}
|
||||
|
||||
inline void
|
||||
MOZ_ALWAYS_INLINE void
|
||||
AddTypePropertyId(JSContext* cx, JSObject* obj, jsid id, const Value& value)
|
||||
{
|
||||
id = IdToTypeId(id);
|
||||
if (TrackPropertyTypes(obj, id))
|
||||
AddTypePropertyId(cx, obj->group(), obj, id, value);
|
||||
return AddTypePropertyId(cx, obj, id, TypeSet::GetValueType(value));
|
||||
}
|
||||
|
||||
inline void
|
||||
@ -830,7 +837,7 @@ struct TypeHashSet
|
||||
|
||||
// Lookup an entry in a hash set, return nullptr if it does not exist.
|
||||
template <class T, class U, class KEY>
|
||||
static inline U*
|
||||
static MOZ_ALWAYS_INLINE U*
|
||||
Lookup(U** values, unsigned count, T key)
|
||||
{
|
||||
if (count == 0)
|
||||
@ -1126,7 +1133,7 @@ ObjectGroup::getProperty(JSContext* cx, JSObject* obj, jsid id)
|
||||
return &base->types;
|
||||
}
|
||||
|
||||
inline HeapTypeSet*
|
||||
MOZ_ALWAYS_INLINE HeapTypeSet*
|
||||
ObjectGroup::maybeGetProperty(jsid id)
|
||||
{
|
||||
MOZ_ASSERT(JSID_IS_VOID(id) || JSID_IS_EMPTY(id) || JSID_IS_STRING(id) || JSID_IS_SYMBOL(id));
|
||||
|
@ -786,7 +786,6 @@ nsIPresShell::nsIPresShell()
|
||||
, mIsDestroying(false)
|
||||
, mIsReflowing(false)
|
||||
, mPaintingSuppressed(false)
|
||||
, mIsThemeSupportDisabled(false)
|
||||
, mIsActive(false)
|
||||
, mFrozen(false)
|
||||
, mIsFirstPaint(false)
|
||||
@ -853,7 +852,6 @@ PresShell::PresShell()
|
||||
mLastOSWake = mLoadBegin = TimeStamp::Now();
|
||||
|
||||
mSelectionFlags = nsISelectionDisplay::DISPLAY_TEXT | nsISelectionDisplay::DISPLAY_IMAGES;
|
||||
mIsThemeSupportDisabled = false;
|
||||
mIsActive = true;
|
||||
// FIXME/bug 735029: find a better solution to this problem
|
||||
mIsFirstPaint = true;
|
||||
|
@ -954,20 +954,6 @@ public:
|
||||
*/
|
||||
virtual void UnsuppressPainting() = 0;
|
||||
|
||||
/**
|
||||
* Called to disable nsITheme support in a specific presshell.
|
||||
*/
|
||||
void DisableThemeSupport()
|
||||
{
|
||||
// Doesn't have to be dynamic. Just set the bool.
|
||||
mIsThemeSupportDisabled = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Indicates whether theme support is enabled.
|
||||
*/
|
||||
bool IsThemeSupportEnabled() const { return !mIsThemeSupportDisabled; }
|
||||
|
||||
/**
|
||||
* Get the set of agent style sheets for this presentation
|
||||
*/
|
||||
@ -1862,9 +1848,6 @@ protected:
|
||||
// For all documents we initially lock down painting.
|
||||
bool mPaintingSuppressed : 1;
|
||||
|
||||
// Whether or not form controls should use nsITheme in this shell.
|
||||
bool mIsThemeSupportDisabled : 1;
|
||||
|
||||
bool mIsActive : 1;
|
||||
bool mFrozen : 1;
|
||||
bool mIsFirstPaint : 1;
|
||||
|
@ -1108,6 +1108,7 @@ inDOMUtils::SetContentState(nsIDOMElement* aElement,
|
||||
NS_IMETHODIMP
|
||||
inDOMUtils::RemoveContentState(nsIDOMElement* aElement,
|
||||
EventStates::InternalType aState,
|
||||
bool aClearActiveDocument,
|
||||
bool* aRetVal)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(aElement);
|
||||
@ -1117,6 +1118,15 @@ inDOMUtils::RemoveContentState(nsIDOMElement* aElement,
|
||||
NS_ENSURE_TRUE(esm, NS_ERROR_INVALID_ARG);
|
||||
|
||||
*aRetVal = esm->SetContentState(nullptr, EventStates(aState));
|
||||
|
||||
if (aClearActiveDocument && EventStates(aState) == NS_EVENT_STATE_ACTIVE) {
|
||||
EventStateManager* activeESM = static_cast<EventStateManager*>(
|
||||
EventStateManager::GetActiveEventStateManager());
|
||||
if (activeESM == esm) {
|
||||
EventStateManager::ClearGlobalActiveContent(nullptr);
|
||||
}
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
@ -152,7 +152,7 @@ interface inIDOMUtils : nsISupports
|
||||
in boolean aShowingAnonymousContent);
|
||||
nsIDOMNodeList getChildrenForNode(in nsIDOMNode aNode,
|
||||
in boolean aShowingAnonymousContent);
|
||||
|
||||
|
||||
// XBL utilities
|
||||
nsIArray getBindingURLs(in nsIDOMElement aElement);
|
||||
|
||||
@ -164,11 +164,15 @@ interface inIDOMUtils : nsISupports
|
||||
* that for the remove case we simply pass in nullptr for the element.
|
||||
* Use them accordingly.
|
||||
*
|
||||
* When removing the active state, you may optionally also clear the active
|
||||
* document as well by setting aClearActiveDocument
|
||||
*
|
||||
* @return Returns true if the state was set successfully. See more details
|
||||
* in EventStateManager.h SetContentState.
|
||||
*/
|
||||
bool setContentState(in nsIDOMElement aElement, in unsigned long long aState);
|
||||
bool removeContentState(in nsIDOMElement aElement, in unsigned long long aState);
|
||||
bool removeContentState(in nsIDOMElement aElement, in unsigned long long aState,
|
||||
[optional] in bool aClearActiveDocument);
|
||||
|
||||
nsIDOMFontFaceList getUsedFontFaces(in nsIDOMRange aRange);
|
||||
|
||||
|
@ -1,5 +1,4 @@
|
||||
<!DOCTYPE html>
|
||||
<meta http-equiv="msthemecompatible" content="no">
|
||||
<div style="width: 200px; height: 200px; overflow: scroll;">
|
||||
<div style="width: 200px; height: 200px; overflow: scroll; -moz-appearance:none">
|
||||
<div style="width: 100000px; height: 1000000px"></div>
|
||||
</div>
|
||||
|
@ -1,6 +1,5 @@
|
||||
<!DOCTYPE html>
|
||||
<meta http-equiv="msthemecompatible" content="no">
|
||||
<div style="width: 200px; height: 200px; overflow: scroll;">
|
||||
<div style="width: 200px; height: 200px; overflow: scroll;; -moz-appearance:none">
|
||||
<div style="width: 3725px; height: 3725px"></div>
|
||||
</div>
|
||||
<!--
|
||||
|
@ -80,7 +80,7 @@ ListInterfaceAddresses(int aFd, const char* aInterface, AddrMapType& aAddrMap)
|
||||
switch(family=ifreq.ifr_addr.sa_family) {
|
||||
case AF_INET:
|
||||
case AF_INET6:
|
||||
getnameinfo(&ifreq.ifr_addr, sizeof(ifreq.ifr_addr), host, sizeof(host), 0, 0, NI_NUMERICHOST);
|
||||
getnameinfo(&ifreq.ifr_addr, sizeof(ifreq.ifr_addr), host, sizeof(host), nullptr, 0, NI_NUMERICHOST);
|
||||
break;
|
||||
case AF_UNSPEC:
|
||||
return NS_OK;
|
||||
|
@ -186,7 +186,7 @@ class Continuation {
|
||||
}
|
||||
Continuation() {
|
||||
// empty constructor needed for nsTArray
|
||||
value = 0L;
|
||||
value = nullptr;
|
||||
length = 0;
|
||||
needsPercentDecoding = false;
|
||||
wasQuotedString = false;
|
||||
@ -971,7 +971,7 @@ nsMIMEHeaderParamImpl::DecodeParameter(const nsACString& aParamValue,
|
||||
// static
|
||||
char *DecodeQ(const char *in, uint32_t length)
|
||||
{
|
||||
char *out, *dest = 0;
|
||||
char *out, *dest = nullptr;
|
||||
|
||||
out = dest = (char *)PR_Calloc(length + 1, sizeof(char));
|
||||
if (dest == nullptr)
|
||||
@ -1186,7 +1186,7 @@ nsresult DecodeRFC2047Str(const char *aHeader, const char *aDefaultCharset,
|
||||
// safe because we don't use a raw *char any more.
|
||||
aResult.SetCapacity(3 * strlen(aHeader));
|
||||
|
||||
while ((p = PL_strstr(begin, "=?")) != 0) {
|
||||
while ((p = PL_strstr(begin, "=?")) != nullptr) {
|
||||
if (isLastEncodedWord) {
|
||||
// See if it's all whitespace.
|
||||
for (q = begin; q < p; ++q) {
|
||||
@ -1214,7 +1214,7 @@ nsresult DecodeRFC2047Str(const char *aHeader, const char *aDefaultCharset,
|
||||
|
||||
// Get charset info
|
||||
charsetStart = p;
|
||||
charsetEnd = 0;
|
||||
charsetEnd = nullptr;
|
||||
for (q = p; *q != '?'; q++) {
|
||||
if (*q <= ' ' || PL_strchr(especials, *q)) {
|
||||
goto badsyntax;
|
||||
|
@ -1337,7 +1337,7 @@ nsHttpHandler::PrefsChanged(nsIPrefBranch *prefs, const char *pref)
|
||||
getter_Copies(sval));
|
||||
if (NS_SUCCEEDED(rv)) {
|
||||
if (sval.IsEmpty())
|
||||
mDefaultSocketType.Adopt(0);
|
||||
mDefaultSocketType.Adopt(nullptr);
|
||||
else {
|
||||
// verify that this socket type is actually valid
|
||||
nsCOMPtr<nsISocketProviderService> sps(
|
||||
@ -1899,13 +1899,13 @@ PrepareAcceptLanguages(const char *i_AcceptLanguages, nsACString &o_AcceptLangua
|
||||
count_n = 0;
|
||||
p2 = q_Accept;
|
||||
for (token = nsCRT::strtok(o_Accept, ",", &p);
|
||||
token != (char *) 0;
|
||||
token != nullptr;
|
||||
token = nsCRT::strtok(p, ",", &p))
|
||||
{
|
||||
token = net_FindCharNotInSet(token, HTTP_LWS);
|
||||
char* trim;
|
||||
trim = net_FindCharInSet(token, ";" HTTP_LWS);
|
||||
if (trim != (char*)0) // remove "; q=..." if present
|
||||
if (trim != nullptr) // remove "; q=..." if present
|
||||
*trim = '\0';
|
||||
|
||||
if (*token != '\0') {
|
||||
|
@ -196,7 +196,7 @@ public:
|
||||
void* operator()(void* anObject) override {
|
||||
nsCString *string = (nsCString*)anObject;
|
||||
delete string;
|
||||
return 0;
|
||||
return nullptr;
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -215,9 +215,9 @@ void nsNotifyAddrListener::checkLink(void)
|
||||
// Walk through the linked list, maintaining head pointer so we can free
|
||||
// list later
|
||||
|
||||
for (ifa = list; ifa != NULL; ifa = ifa->ifa_next) {
|
||||
for (ifa = list; ifa != nullptr; ifa = ifa->ifa_next) {
|
||||
int family;
|
||||
if (ifa->ifa_addr == NULL)
|
||||
if (ifa->ifa_addr == nullptr)
|
||||
continue;
|
||||
|
||||
family = ifa->ifa_addr->sa_family;
|
||||
|
@ -1161,4 +1161,4 @@ static const TransportSecurityPreload kPublicKeyPinningPreloadList[] = {
|
||||
|
||||
static const int32_t kUnknownId = -1;
|
||||
|
||||
static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1506008041652000);
|
||||
static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1506094491659000);
|
||||
|
@ -72,7 +72,7 @@
|
||||
441jj.com: did not receive HSTS header
|
||||
4455software.com: did not receive HSTS header
|
||||
4679.space: could not connect to host
|
||||
4azino777.ru: did not receive HSTS header
|
||||
4azino777.ru: could not connect to host
|
||||
4cclothing.com: could not connect to host
|
||||
4elements.com: could not connect to host
|
||||
4eyes.ch: did not receive HSTS header
|
||||
@ -112,7 +112,6 @@ abecodes.net: did not receive HSTS header
|
||||
abilitylist.org: did not receive HSTS header
|
||||
abioniere.de: could not connect to host
|
||||
ablogagency.net: could not connect to host
|
||||
abloop.com: could not connect to host
|
||||
abnarnro.com: could not connect to host
|
||||
about.ge: did not receive HSTS header
|
||||
abouthrm.nl: did not receive HSTS header
|
||||
@ -141,6 +140,7 @@ acisonline.net: did not receive HSTS header
|
||||
acorns.com: did not receive HSTS header
|
||||
acr.im: could not connect to host
|
||||
acslimited.co.uk: did not receive HSTS header
|
||||
actgruppe.de: did not receive HSTS header
|
||||
activateplay.com: did not receive HSTS header
|
||||
activeweb.top: could not connect to host
|
||||
activiti.alfresco.com: did not receive HSTS header
|
||||
@ -148,6 +148,7 @@ actu-medias.com: did not receive HSTS header
|
||||
acuve.jp: could not connect to host
|
||||
ada.is: max-age too low: 2592000
|
||||
adajwells.me: could not connect to host
|
||||
adam-kostecki.de: could not connect to host
|
||||
adamgold.net: could not connect to host
|
||||
adams.net: max-age too low: 0
|
||||
adamwk.com: did not receive HSTS header
|
||||
@ -157,6 +158,7 @@ addvocate.com: could not connect to host
|
||||
adelevie.com: could not connect to host
|
||||
adequatetechnology.com: could not connect to host
|
||||
aderal.io: could not connect to host
|
||||
adfa-1.com: did not receive HSTS header
|
||||
adhs-chaoten.net: did not receive HSTS header
|
||||
adindexr.com: could not connect to host
|
||||
admin.google.com: did not receive HSTS header (error ignored - included regardless)
|
||||
@ -180,7 +182,6 @@ aemoria.com: could not connect to host
|
||||
aerialmediapro.net: could not connect to host
|
||||
aes256.ru: could not connect to host
|
||||
aether.pw: could not connect to host
|
||||
aevpn.net: could not connect to host
|
||||
aeyoun.com: did not receive HSTS header
|
||||
af-fotografie.net: did not receive HSTS header
|
||||
affilie.de: did not receive HSTS header
|
||||
@ -217,6 +218,7 @@ akerek.hu: could not connect to host
|
||||
akgundemirbas.com: could not connect to host
|
||||
akkadia.cc: could not connect to host
|
||||
akombakom.net: did not receive HSTS header
|
||||
akostecki.de: could not connect to host
|
||||
akselimedia.fi: did not receive HSTS header
|
||||
aktivist.in: did not receive HSTS header
|
||||
al-shami.net: could not connect to host
|
||||
@ -260,6 +262,7 @@ altamarea.se: could not connect to host
|
||||
alterbaum.net: did not receive HSTS header
|
||||
altfire.ca: could not connect to host
|
||||
altmv.com: max-age too low: 7776000
|
||||
aluminium-scaffolding.co.uk: could not connect to host
|
||||
alza.at: did not receive HSTS header
|
||||
alza.co.uk: did not receive HSTS header
|
||||
alza.cz: did not receive HSTS header
|
||||
@ -375,6 +378,7 @@ arboineuropa.nl: did not receive HSTS header
|
||||
arboleda-hurtado.com: could not connect to host
|
||||
arbu.eu: max-age too low: 2419200
|
||||
arcbit.io: could not connect to host
|
||||
area536.com: could not connect to host
|
||||
argennon.xyz: could not connect to host
|
||||
arguggi.co.uk: could not connect to host
|
||||
ariacreations.net: did not receive HSTS header
|
||||
@ -487,6 +491,7 @@ azprep.us: could not connect to host
|
||||
b-landia.net: could not connect to host
|
||||
b303.me: did not receive HSTS header
|
||||
b3orion.com: max-age too low: 0
|
||||
b422edu.com: could not connect to host
|
||||
baby-click.de: could not connect to host
|
||||
babybee.ie: could not connect to host
|
||||
babybic.hu: did not receive HSTS header
|
||||
@ -502,6 +507,7 @@ badenhard.eu: could not connect to host
|
||||
badkamergigant.com: could not connect to host
|
||||
baff.lu: did not receive HSTS header
|
||||
baiduaccount.com: could not connect to host
|
||||
bailbondsaffordable.com: could not connect to host
|
||||
bakingstone.com: could not connect to host
|
||||
bakkerdesignandbuild.com: did not receive HSTS header
|
||||
balcan-underground.net: could not connect to host
|
||||
@ -521,7 +527,6 @@ bariller.fr: could not connect to host
|
||||
barrelhead.org: could not connect to host
|
||||
barss.io: could not connect to host
|
||||
barunisystems.com: could not connect to host
|
||||
bashc.at: could not connect to host
|
||||
bashcode.ninja: could not connect to host
|
||||
basicsolutionsus.com: did not receive HSTS header
|
||||
basilisk.io: could not connect to host
|
||||
@ -533,7 +538,6 @@ baumstark.ca: could not connect to host
|
||||
baysse.eu: could not connect to host
|
||||
bazarstupava.sk: could not connect to host
|
||||
bbb1991.me: could not connect to host
|
||||
bbdos.ru: could not connect to host
|
||||
bblovess.cn: could not connect to host
|
||||
bbwdom.xyz: could not connect to host
|
||||
bbwfacesitting.xyz: could not connect to host
|
||||
@ -612,7 +616,7 @@ bfelob.gov: max-age too low: 86400
|
||||
bffm.biz: could not connect to host
|
||||
bgcparkstad.nl: did not receive HSTS header
|
||||
bgmn.net: could not connect to host
|
||||
bhatia.at: [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 118" data: no]
|
||||
bhatia.at: could not connect to host
|
||||
bi.search.yahoo.com: did not receive HSTS header
|
||||
biblerhymes.com: did not receive HSTS header
|
||||
bidon.ca: did not receive HSTS header
|
||||
@ -664,6 +668,7 @@ bizcms.com: did not receive HSTS header
|
||||
bizon.sk: did not receive HSTS header
|
||||
bjornhelmersson.se: could not connect to host
|
||||
bkb-skandal.ch: could not connect to host
|
||||
bl4ckb0x.eu: could not connect to host
|
||||
black-armada.com.pl: could not connect to host
|
||||
black-armada.pl: could not connect to host
|
||||
black-octopus.ru: did not receive HSTS header
|
||||
@ -728,7 +733,6 @@ boris.one: did not receive HSTS header
|
||||
borscheid-wenig.com: did not receive HSTS header
|
||||
botox.bz: did not receive HSTS header
|
||||
bouwbedrijfpurmerend.nl: did not receive HSTS header
|
||||
bowling.com: did not receive HSTS header
|
||||
bowlroll.net: max-age too low: 0
|
||||
boxcryptor.com: did not receive HSTS header
|
||||
boxintense.com: did not receive HSTS header
|
||||
@ -780,7 +784,6 @@ buildci.asia: could not connect to host
|
||||
buildify.co.za: could not connect to host
|
||||
buildsaver.co.za: did not receive HSTS header
|
||||
built.by: did not receive HSTS header
|
||||
bul3seas.eu: could not connect to host
|
||||
bulkbuy.tech: could not connect to host
|
||||
bullbits.com: could not connect to host
|
||||
bulletpoint.cz: could not connect to host
|
||||
@ -848,7 +851,7 @@ callaction.co: max-age too low: 2628000
|
||||
calltrackingreports.com: could not connect to host
|
||||
caltonnutrition.com: did not receive HSTS header
|
||||
calvin.me: max-age too low: 2592000
|
||||
calvinallen.net: did not receive HSTS header
|
||||
calvinallen.net: could not connect to host
|
||||
camashop.de: did not receive HSTS header
|
||||
cambridgeanalytica.org: did not receive HSTS header
|
||||
camjackson.net: did not receive HSTS header
|
||||
@ -879,7 +882,6 @@ caringladies.org: could not connect to host
|
||||
carlo.mx: did not receive HSTS header
|
||||
carlolly.co.uk: could not connect to host
|
||||
carlosalves.info: could not connect to host
|
||||
carnildo.com: could not connect to host
|
||||
carpliyz.com: could not connect to host
|
||||
carroarmato0.be: could not connect to host
|
||||
carsforbackpackers.com: could not connect to host
|
||||
@ -1009,6 +1011,7 @@ cityoflaurel.org: did not receive HSTS header
|
||||
ciuciucadou.ro: could not connect to host
|
||||
cium.ru: could not connect to host
|
||||
cjcaron.org: could not connect to host
|
||||
ckleemann.de: could not connect to host
|
||||
clara-baumert.de: could not connect to host
|
||||
claralabs.com: did not receive HSTS header
|
||||
classicsandexotics.com: did not receive HSTS header
|
||||
@ -1082,7 +1085,6 @@ codelayer.ca: could not connect to host
|
||||
codelitmus.com: did not receive HSTS header
|
||||
codemonkeyrawks.net: did not receive HSTS header
|
||||
codepoet.de: could not connect to host
|
||||
codepult.com: could not connect to host
|
||||
codepx.com: did not receive HSTS header
|
||||
codewild.de: could not connect to host
|
||||
codiva.io: max-age too low: 2592000
|
||||
@ -1182,7 +1184,6 @@ crazyhotseeds.com: did not receive HSTS header
|
||||
create-test-publish.co.uk: could not connect to host
|
||||
creativephysics.ml: could not connect to host
|
||||
creativeplayuk.com: did not receive HSTS header
|
||||
creepypastas.com: could not connect to host
|
||||
crendontech.com: could not connect to host
|
||||
crestoncottage.com: could not connect to host
|
||||
crimewatch.net.za: could not connect to host
|
||||
@ -1401,7 +1402,7 @@ devtub.com: did not receive HSTS header
|
||||
devuan.org: did not receive HSTS header
|
||||
dewin.io: could not connect to host
|
||||
df1paw.de: could not connect to host
|
||||
dfviana.com.br: could not connect to host
|
||||
dfviana.com.br: did not receive HSTS header
|
||||
dhpcs.com: did not receive HSTS header
|
||||
dhpiggott.net: did not receive HSTS header
|
||||
diablotine.rocks: could not connect to host
|
||||
@ -1447,7 +1448,6 @@ dizorg.net: could not connect to host
|
||||
dj4et.de: could not connect to host
|
||||
djxmmx.net: max-age too low: 0
|
||||
djz4music.com: did not receive HSTS header
|
||||
dkn.go.id: could not connect to host
|
||||
dkniss.de: could not connect to host
|
||||
dl.google.com: did not receive HSTS header (error ignored - included regardless)
|
||||
dlc.viasinc.com: could not connect to host
|
||||
@ -1457,6 +1457,7 @@ dmcibulldog.com: did not receive HSTS header
|
||||
dmix.ca: could not connect to host
|
||||
dmtry.me: did not receive HSTS header
|
||||
dmz.ninja: 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
|
||||
do-do.tk: could not connect to host
|
||||
@ -1516,7 +1517,7 @@ dragons-of-highlands.cz: could not connect to host
|
||||
dragonsmoke.cloud: could not connect to host
|
||||
dragonteam.ninja: did not receive HSTS header
|
||||
dragontrainingmobilezoo.com.au: max-age too low: 0
|
||||
drakeanddragon.com: could not connect to host
|
||||
drakeanddragon.com: did not receive HSTS header
|
||||
drakefortreasurer.sexy: could not connect to host
|
||||
draw.uy: could not connect to host
|
||||
drdevil.ru: could not connect to host
|
||||
@ -1538,13 +1539,14 @@ drumbandesperanto.nl: could not connect to host
|
||||
ds-christiansen.de: could not connect to host
|
||||
dshiv.io: could not connect to host
|
||||
dtub.co: did not receive HSTS header
|
||||
dubrovskiy.pro: could not connect to host
|
||||
duesee.org: could not connect to host
|
||||
dullsir.com: did not receive HSTS header
|
||||
dungi.org: could not connect to host
|
||||
duskopy.top: could not connect to host
|
||||
dutchessuganda.com: did not receive HSTS header
|
||||
dutchrank.com: did not receive HSTS header
|
||||
duuu.ch: could not connect to host
|
||||
dworzak.ch: could not connect to host
|
||||
dycontrol.de: could not connect to host
|
||||
dyktig.as: did not receive HSTS header
|
||||
dylanscott.com.au: did not receive HSTS header
|
||||
@ -1602,7 +1604,6 @@ edissecurity.sk: did not receive HSTS header
|
||||
edix.ru: could not connect to host
|
||||
edk.com.tr: did not receive HSTS header
|
||||
edmodo.com: did not receive HSTS header
|
||||
eduif.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 118" data: no]
|
||||
eduvance.in: did not receive HSTS header
|
||||
edv-lehrgang.de: could not connect to host
|
||||
eelzak.nl: could not connect to host
|
||||
@ -1618,6 +1619,7 @@ ehito.ovh: could not connect to host
|
||||
ehrenamt-skpfcw.de: could not connect to host
|
||||
eicfood.com: could not connect to host
|
||||
ekbanden.nl: could not connect to host
|
||||
ekostecki.de: could not connect to host
|
||||
eksik.com: could not connect to host
|
||||
elaintehtaat.fi: did not receive HSTS header
|
||||
elan-organics.com: did not receive HSTS header
|
||||
@ -1635,6 +1637,8 @@ elenag.ga: could not connect to host
|
||||
elenoon.ir: did not receive HSTS header
|
||||
elgacien.de: could not connect to host
|
||||
elimdengelen.com: did not receive HSTS header
|
||||
elisabeth-kostecki.de: could not connect to host
|
||||
elisabethkostecki.de: could not connect to host
|
||||
elite-porno.ru: did not receive HSTS header
|
||||
elitefishtank.com: could not connect to host
|
||||
elnutricionista.es: did not receive HSTS header
|
||||
@ -1656,7 +1660,7 @@ emmable.com: could not connect to host
|
||||
emnitech.com: could not connect to host
|
||||
empleosentorreon.mx: could not connect to host
|
||||
empleostampico.com: did not receive HSTS header
|
||||
empty-r.com: did not receive HSTS header
|
||||
empty-r.com: could not connect to host
|
||||
enargia.jp: max-age too low: 0
|
||||
encode.space: could not connect to host
|
||||
encoder.pw: could not connect to host
|
||||
@ -1705,7 +1709,7 @@ erawanarifnugroho.com: did not receive HSTS header
|
||||
eressea.xyz: could not connect to host
|
||||
ericbond.net: could not connect to host
|
||||
erichalv.com: could not connect to host
|
||||
ericyl.com: could not connect to host
|
||||
ericyl.com: did not receive HSTS header
|
||||
eridanus.uk: did not receive HSTS header
|
||||
ernaehrungsberatung-zurich.ch: could not connect to host
|
||||
ernesto.at: could not connect to host
|
||||
@ -1760,6 +1764,7 @@ euren.se: could not connect to host
|
||||
eurocamping.se: could not connect to host
|
||||
euroshop24.net: could not connect to host
|
||||
evafojtova.cz: did not receive HSTS header
|
||||
evalesc.com: could not connect to host
|
||||
evdenevenakliyatankara.pw: did not receive HSTS header
|
||||
events12.com: did not receive HSTS header
|
||||
everybooks.com: max-age too low: 60
|
||||
@ -1772,7 +1777,6 @@ evites.me: could not connect to host
|
||||
evomon.com: could not connect to host
|
||||
evossd.tk: could not connect to host
|
||||
evowl.com: could not connect to host
|
||||
ewex.org: could not connect to host
|
||||
ewycena.pl: could not connect to host
|
||||
excelgum.ca: did not receive HSTS header
|
||||
exceptionalservers.com: could not connect to host
|
||||
@ -1825,6 +1829,7 @@ familie-zimmermann.at: could not connect to host
|
||||
famio.cn: could not connect to host
|
||||
fantasyfootballpundit.com: did not receive HSTS header
|
||||
fanyl.cn: could not connect to host
|
||||
farhadexchange.com: did not receive HSTS header
|
||||
fashioncare.cz: did not receive HSTS header
|
||||
fasset.jp: could not connect to host
|
||||
fastdigitizing.com: max-age too low: 300
|
||||
@ -1865,7 +1870,6 @@ fig.co: did not receive HSTS header
|
||||
fightr.co: could not connect to host
|
||||
fiksel.info: did not receive HSTS header
|
||||
fikt.space: could not connect to host
|
||||
file-cloud.eu: could not connect to host
|
||||
filemeal.com: did not receive HSTS header
|
||||
filey.co.uk: did not receive HSTS header
|
||||
filmipop.com: max-age too low: 0
|
||||
@ -1917,6 +1921,7 @@ florispoort.nl: did not receive HSTS header
|
||||
floseed.fr: could not connect to host
|
||||
flouartistique.ch: could not connect to host
|
||||
flow.pe: could not connect to host
|
||||
flow.su: could not connect to host
|
||||
flowersandclouds.com: could not connect to host
|
||||
floweslawncare.com: could not connect to host
|
||||
flowlo.me: could not connect to host
|
||||
@ -1940,7 +1945,6 @@ footballmapped.com: could not connect to host
|
||||
forafifty.co.za: could not connect to host
|
||||
foraje-profesionale.ro: did not receive HSTS header
|
||||
forbook.net: could not connect to host
|
||||
forcamp.ga: could not connect to host
|
||||
fordbydesign.com: could not connect to host
|
||||
foreignexchangeresource.com: did not receive HSTS header
|
||||
foreveralone.io: could not connect to host
|
||||
@ -1948,6 +1952,7 @@ forex-dan.com: did not receive HSTS header
|
||||
forgix.com: could not connect to host
|
||||
formazioneopen.it: could not connect to host
|
||||
formula.cf: could not connect to host
|
||||
forty8creates.com: did not receive HSTS header
|
||||
fotiu.com: could not connect to host
|
||||
fotm.net: max-age too low: 30000
|
||||
fotocerita.net: could not connect to host
|
||||
@ -2001,7 +2006,7 @@ fruitusers.com: could not connect to host
|
||||
frusky.net: did not receive HSTS header
|
||||
fspphoto.com: could not connect to host
|
||||
fstfy.de: could not connect to host
|
||||
ftctele.com: did not receive HSTS header
|
||||
ftctele.com: could not connect to host
|
||||
fuckgfw233.org: could not connect to host
|
||||
fukushima-web.com: did not receive HSTS header
|
||||
fulilingyu.info: could not connect to host
|
||||
@ -2074,7 +2079,6 @@ gameserver-sponsor.de: could not connect to host
|
||||
gamingmedia.eu: did not receive HSTS header
|
||||
gampenhof.de: did not receive HSTS header
|
||||
gaptek.id: did not receive HSTS header
|
||||
gar-nich.net: could not connect to host
|
||||
garageon.net: did not receive HSTS header
|
||||
garciamartin.me: could not connect to host
|
||||
garden.trade: could not connect to host
|
||||
@ -2091,6 +2095,7 @@ geeq.ch: could not connect to host
|
||||
geli-graphics.com: did not receive HSTS header
|
||||
genuu.com: could not connect to host
|
||||
genuxation.com: could not connect to host
|
||||
genuxtsg.com: could not connect to host
|
||||
genyaa.com: could not connect to host
|
||||
genyhitch.com: did not receive HSTS header
|
||||
geofox.org: did not receive HSTS header
|
||||
@ -2133,7 +2138,6 @@ gfwsb.ml: could not connect to host
|
||||
ggss.ml: could not connect to host
|
||||
gheorghesarcov.ga: could not connect to host
|
||||
gheorghesarcov.tk: could not connect to host
|
||||
ghislainphu.fr: could not connect to host
|
||||
giantmicrobes.de: max-age too low: 86400
|
||||
gibraltar.at: could not connect to host
|
||||
gietvloergarant.nl: did not receive HSTS header
|
||||
@ -2179,6 +2183,7 @@ goat.chat: did not receive HSTS header
|
||||
goat.xyz: did not receive HSTS header
|
||||
goben.ch: could not connect to host
|
||||
goblins.net: did not receive HSTS header
|
||||
goedeke.ml: could not connect to host
|
||||
goerner.me: did not receive HSTS header
|
||||
goge.site: could not connect to host
|
||||
gogenenglish.com: could not connect to host
|
||||
@ -2227,6 +2232,7 @@ grantmorrison.net: did not receive HSTS header
|
||||
graph.no: did not receive HSTS header
|
||||
graphsearchengine.com: could not connect to host
|
||||
gratisonlinesex.com: could not connect to host
|
||||
gravitation.pro: could not connect to host
|
||||
gravito.nl: did not receive HSTS header
|
||||
gravity-net.de: could not connect to host
|
||||
graycell.net: could not connect to host
|
||||
@ -2298,11 +2304,12 @@ gyboche.com: could not connect to host
|
||||
gyboche.science: could not connect to host
|
||||
gycis.me: could not connect to host
|
||||
gylauto.fr: could not connect to host
|
||||
gyoza.beer: did not receive HSTS header
|
||||
gyoza.beer: could not connect to host
|
||||
gypthecat.com: max-age too low: 604800
|
||||
gyz.io: could not connect to host
|
||||
h-og.com: could not connect to host
|
||||
h2check.org: could not connect to host
|
||||
h3artbl33d.nl: could not connect to host
|
||||
haarkliniek.com: did not receive HSTS header
|
||||
habanaavenue.com: max-age too low: 0
|
||||
habbo.life: could not connect to host
|
||||
@ -2338,6 +2345,7 @@ handicapindeles.nl: did not receive HSTS header
|
||||
handiworker.com: could not connect to host
|
||||
hanfu.la: could not connect to host
|
||||
hanimalis.fr: could not connect to host
|
||||
hannover-banditen.de: 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
|
||||
@ -2398,19 +2406,21 @@ hekeki.com: could not connect to host
|
||||
helencrump.co.uk: did not receive HSTS header
|
||||
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 118" data: no]
|
||||
helpium.de: could not connect to host
|
||||
helpmebuild.com: did not receive HSTS header
|
||||
hemdal.se: could not connect to host
|
||||
hencagon.com: could not connect to host
|
||||
henriknoerr.com: could not connect to host
|
||||
hepteract.us: could not connect to host
|
||||
herbert.io: could not connect to host
|
||||
heritagedentistry.ca: did not receive HSTS header
|
||||
herrenfahrt.com: did not receive HSTS header
|
||||
herrsmith.com: could not connect to host
|
||||
herzbotschaft.de: did not receive HSTS header
|
||||
heutger.net: did not receive HSTS header
|
||||
heyguevara.com: could not connect to host
|
||||
heywoodtown.co.uk: could not connect to host
|
||||
hfi.me: could not connect to host
|
||||
hfi.me: did not receive HSTS header
|
||||
hibilog.com: could not connect to host
|
||||
hicn.gq: could not connect to host
|
||||
hiddendepth.ie: max-age too low: 0
|
||||
@ -2545,7 +2555,6 @@ idecode.net: could not connect to host
|
||||
idedr.com: could not connect to host
|
||||
identitylabs.uk: could not connect to host
|
||||
idgsupply.com: could not connect to host
|
||||
idinby.dk: did not receive HSTS header
|
||||
idlekernel.com: could not connect to host
|
||||
idontexist.me: did not receive HSTS header
|
||||
ie.search.yahoo.com: did not receive HSTS header
|
||||
@ -2652,6 +2661,7 @@ interhosts.co.za: could not connect to host
|
||||
interim-cto.de: could not connect to host
|
||||
interleucina.org: did not receive HSTS header
|
||||
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
|
||||
@ -2721,7 +2731,6 @@ ithakama.cz: did not receive HSTS header
|
||||
ithenrik.com: could not connect to host
|
||||
itos.asia: did not receive HSTS header
|
||||
itos.pl: did not receive HSTS header
|
||||
itpros.ru: did not receive HSTS header
|
||||
itriskltd.com: could not connect to host
|
||||
itsadog.co.uk: did not receive HSTS header
|
||||
itsagadget.com: did not receive HSTS header
|
||||
@ -2779,6 +2788,7 @@ jaqen.ch: could not connect to host
|
||||
jaroslavtrsek.cz: did not receive HSTS header
|
||||
jarsater.com: did not receive HSTS header
|
||||
jasmineconseil.com: did not receive HSTS header
|
||||
jasoncosper.com: did not receive HSTS header
|
||||
jasonroe.me: did not receive HSTS header
|
||||
jasonsansone.com: max-age too low: 0
|
||||
jastoria.pl: could not connect to host
|
||||
@ -2795,18 +2805,17 @@ jayshao.com: did not receive HSTS header
|
||||
jbfp.dk: could not connect to host
|
||||
jbn.mx: could not connect to host
|
||||
jcch.de: could not connect to host
|
||||
jccrew.org: could not connect to host
|
||||
jcor.me: did not receive HSTS header
|
||||
jcoscia.com: could not connect to host
|
||||
jctf.io: could not connect to host
|
||||
jdav-leipzig.de: could not connect to host
|
||||
jdcdirectsales.com.ph: did not receive HSTS header
|
||||
jdoiron.me: did not receive HSTS header
|
||||
jebengotai.com: did not receive HSTS header
|
||||
jedentageinegutetarte.de: max-age too low: 86400
|
||||
jeff393.com: could not connect to host
|
||||
jellow.nl: did not receive HSTS header
|
||||
jensenbanden.no: could not connect to host
|
||||
jeproteste.info: could not connect to host
|
||||
jeremye77.com: did not receive HSTS header
|
||||
jesorsenville.com: did not receive HSTS header
|
||||
jessicabenedictus.nl: could not connect to host
|
||||
@ -2819,6 +2828,7 @@ jetsetcharge.com: could not connect to host
|
||||
jetsetpay.com: could not connect to host
|
||||
jettshome.org: could not connect to host
|
||||
jeugdkans.nl: did not receive HSTS header
|
||||
jewellerydesignstore.com: could not connect to host
|
||||
jfmel.com: did not receive HSTS header
|
||||
jfx.space: did not receive HSTS header
|
||||
jh-media.eu: could not connect to host
|
||||
@ -2863,12 +2873,10 @@ jonnichols.info: did not receive HSTS header
|
||||
joostbovee.nl: did not receive HSTS header
|
||||
jordanhamilton.me: could not connect to host
|
||||
josahrens.me: could not connect to host
|
||||
josericaurte.com: could not connect to host
|
||||
joshi.su: could not connect to host
|
||||
joshstroup.me: could not connect to host
|
||||
jotpics.com: could not connect to host
|
||||
jottit.com: could not connect to host
|
||||
jpaglier.com: could not connect to host
|
||||
jpbike.cz: could not connect to host
|
||||
jrc9.ca: did not receive HSTS header
|
||||
jrgold.me: could not connect to host
|
||||
@ -2905,7 +2913,6 @@ k-dev.de: could not connect to host
|
||||
ka-clan.com: could not connect to host
|
||||
kabinapp.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
|
||||
@ -2933,6 +2940,7 @@ katproxy.online: could not connect to host
|
||||
katproxy.site: could not connect to host
|
||||
katproxy.tech: could not connect to host
|
||||
katproxy.top: could not connect to host
|
||||
katzen.me: could not connect to host
|
||||
kaufkraftkiel.de: could not connect to host
|
||||
kausch.at: did not receive HSTS header
|
||||
kavinvin.me: could not connect to host
|
||||
@ -2962,7 +2970,6 @@ ki-on.net: did not receive HSTS header
|
||||
kialo.com: did not receive HSTS header
|
||||
kickass.al: could not connect to host
|
||||
kid-dachau.de: did not receive HSTS header
|
||||
kiefer-networks.de: could not connect to host
|
||||
kiel-media.de: did not receive HSTS header
|
||||
kieranjones.uk: could not connect to host
|
||||
killerit.in: could not connect to host
|
||||
@ -3022,7 +3029,7 @@ kojima-life.co.jp: did not receive HSTS header
|
||||
kokenmetaanbiedingen.nl: did not receive HSTS header
|
||||
kola-entertainments.de: did not receive HSTS header
|
||||
kolaykaydet.com: did not receive HSTS header
|
||||
kolozsvaricsuhe.hu: did not receive HSTS header
|
||||
kolozsvaricsuhe.hu: could not connect to host
|
||||
komikito.com: could not connect to host
|
||||
kompetenzwerft.de: did not receive HSTS header
|
||||
konata.us: could not connect to host
|
||||
@ -3050,6 +3057,7 @@ kreb.io: could not connect to host
|
||||
kredite.sale: could not connect to host
|
||||
krestanskydarek.cz: [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 118" data: no]
|
||||
kriegt.es: did not receive HSTS header
|
||||
kristikala.nl: could not connect to host
|
||||
krizevackapajdasija.hr: could not connect to host
|
||||
krizevci.info: did not receive HSTS header
|
||||
kroetenfuchs.de: could not connect to host
|
||||
@ -3155,12 +3163,12 @@ lenagroben.de: could not connect to host
|
||||
lenovogaming.com: did not receive HSTS header
|
||||
lentri.com: did not receive HSTS header
|
||||
leob.in: did not receive HSTS header
|
||||
leolana.com: could not connect to host
|
||||
leon-jaekel.com: could not connect to host
|
||||
leonhooijer.nl: could not connect to host
|
||||
leopold.email: could not connect to host
|
||||
leopotamgroup.com: could not connect to host
|
||||
lepont.pl: could not connect to host
|
||||
lerasenglish.com: did not receive HSTS header
|
||||
lerner.moscow: did not receive HSTS header
|
||||
les-corsaires.net: could not connect to host
|
||||
les-voitures-electriques.com: did not receive HSTS header
|
||||
@ -3249,7 +3257,6 @@ litespeed.io: could not connect to host
|
||||
little.pw: did not receive HSTS header
|
||||
litz.ca: could not connect to host
|
||||
litzenberger.ca: could not connect to host
|
||||
liujunyang.com: did not receive HSTS header
|
||||
livedemo.io: could not connect to host
|
||||
livej.am: could not connect to host
|
||||
livi.co: did not receive HSTS header
|
||||
@ -3276,7 +3283,6 @@ lognot.net: could not connect to host
|
||||
lojadoprazer.com.br: could not connect to host
|
||||
lolicore.ch: could not connect to host
|
||||
lolidunno.com: could not connect to host
|
||||
lolmegafroi.de: could not connect to host
|
||||
london-transfers.com: did not receive HSTS header
|
||||
londoncalling.co: did not receive HSTS header
|
||||
londonlanguageexchange.com: could not connect to host
|
||||
@ -3412,7 +3418,7 @@ mariannematthew.com: could not connect to host
|
||||
marie-curie.fr: could not connect to host
|
||||
marie-elisabeth.dk: did not receive HSTS header
|
||||
marie-en-provence.com: did not receive HSTS header
|
||||
mario.party: could not connect to host
|
||||
mario.party: did not receive HSTS header
|
||||
markaconnor.com: could not connect to host
|
||||
markayapilandirma.com: could not connect to host
|
||||
markcp.me: could not connect to host
|
||||
@ -3444,6 +3450,7 @@ masty.nl: did not receive HSTS header
|
||||
matatall.com: did not receive HSTS header
|
||||
matchneedle.com: could not connect to host
|
||||
maternalsafety.org: did not receive HSTS header
|
||||
mathieui.net: could not connect to host
|
||||
matomeplus.co: did not receive HSTS header
|
||||
matrict.com: could not connect to host
|
||||
matrip.de: could not connect to host
|
||||
@ -3458,6 +3465,7 @@ matthewprenger.com: could not connect to host
|
||||
matthiassteen.be: max-age too low: 0
|
||||
mattressinsider.com: max-age too low: 3153600
|
||||
mattsvensson.com: max-age too low: 0
|
||||
mattwb65.com: could not connect to host
|
||||
matty.digital: max-age too low: 3600
|
||||
maultrom.ml: could not connect to host
|
||||
maupiknik.com: did not receive HSTS header
|
||||
@ -3476,6 +3484,7 @@ mcga.media: could not connect to host
|
||||
mclab.su: could not connect to host
|
||||
mclist.it: could not connect to host
|
||||
mdfnet.se: did not receive HSTS header
|
||||
mdkr.nl: did not receive HSTS header
|
||||
mdscomp.net: did not receive HSTS header
|
||||
meadowfen.farm: could not connect to host
|
||||
meamod.com: max-age too low: 0
|
||||
@ -3542,7 +3551,6 @@ mhertel.com: did not receive HSTS header
|
||||
mhict.nl: could not connect to host
|
||||
mht-travel.com: could not connect to host
|
||||
mhx.pw: could not connect to host
|
||||
mia.to: could not connect to host
|
||||
michaeldemuth.com: could not connect to host
|
||||
michaelfitzpatrickruth.com: did not receive HSTS header
|
||||
michaelmorpurgo.com: did not receive HSTS header
|
||||
@ -3620,7 +3628,7 @@ mnemotiv.com: could not connect to host
|
||||
mnetworkingsolutions.co.uk: could not connect to host
|
||||
mnmt.no: did not receive HSTS header
|
||||
mnwt.nl: could not connect to host
|
||||
mobaircon.com: could not connect to host
|
||||
mobaircon.com: did not receive HSTS header
|
||||
mobifinans.ru: did not receive HSTS header
|
||||
mobilebay.top: could not connect to host
|
||||
mobilekey.co: could not connect to host
|
||||
@ -3699,6 +3707,7 @@ moy.cat: did not receive HSTS header
|
||||
mozart-game.cz: could not connect to host
|
||||
mozartgame.cz: could not connect to host
|
||||
mp3juices.is: could not connect to host
|
||||
mpe.org: did not receive HSTS header
|
||||
mpintaamalabanna.it: could not connect to host
|
||||
mqas.net: could not connect to host
|
||||
mrawe.com: could not connect to host
|
||||
@ -3853,7 +3862,6 @@ netmagik.com: did not receive HSTS header
|
||||
netmazk.net: could not connect to host
|
||||
netresourcedesign.com: did not receive HSTS header
|
||||
nettefoundation.com: could not connect to host
|
||||
networth.at: could not connect to host
|
||||
networx-online.de: could not connect to host
|
||||
netzbit.de: could not connect to host
|
||||
netzpolitik.org: did not receive HSTS header
|
||||
@ -3906,6 +3914,7 @@ nightwinds.tk: could not connect to host
|
||||
niho.jp: did not receive HSTS header
|
||||
nikcub.com: could not connect to host
|
||||
niklaslindblad.se: did not receive HSTS header
|
||||
nikolasbradshaw.com: did not receive HSTS header
|
||||
nikomo.fi: did not receive HSTS header
|
||||
ninchisho-online.com: did not receive HSTS header
|
||||
ninhs.org: could not connect to host
|
||||
@ -3913,7 +3922,6 @@ nippler.org: did not receive HSTS header
|
||||
nippombashi.net: did not receive HSTS header
|
||||
nipponcareers.com: did not receive HSTS header
|
||||
nitrix.me: could not connect to host
|
||||
niva.synology.me: did not receive HSTS header
|
||||
nixien.fr: could not connect to host
|
||||
nixmag.net: max-age too low: 2592000
|
||||
nll.fi: could not connect to host
|
||||
@ -3950,7 +3958,6 @@ nottheonion.net: did not receive HSTS header
|
||||
nouvelle-vague-saint-cast.fr: did not receive HSTS header
|
||||
novaco.in: max-age too low: 3600
|
||||
novacoast.com: did not receive HSTS header
|
||||
novascan.net: could not connect to host
|
||||
novatrucking.de: could not connect to host
|
||||
nowak.ninja: did not receive HSTS header
|
||||
noworrywp.com: could not connect to host
|
||||
@ -3992,6 +3999,7 @@ nwork.media: could not connect to host
|
||||
nyantec.com: did not receive HSTS header
|
||||
nycroth.com: did not receive HSTS header
|
||||
nyffo.com: could not connect to host
|
||||
nymphetomania.net: could not connect to host
|
||||
nys-hk.com: could not connect to host
|
||||
nysepho.pw: could not connect to host
|
||||
nysifclaimcentral.com: did not receive HSTS header
|
||||
@ -4238,7 +4246,7 @@ pdf.yt: could not connect to host
|
||||
peakapp.nl: could not connect to host
|
||||
peerherrmann.de: could not connect to host
|
||||
peetah.com: could not connect to host
|
||||
peissen.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 118" data: no]
|
||||
peissen.com: could not connect to host
|
||||
pekkapikkarainen.fi: did not receive HSTS header
|
||||
pekkarik.ru: could not connect to host
|
||||
peliculasaudiolatinoonline.com: could not connect to host
|
||||
@ -4288,7 +4296,7 @@ php-bach.org: could not connect to host
|
||||
phus.lu: did not receive HSTS header
|
||||
physicaltherapist.com: did not receive HSTS header
|
||||
picardiascr.com: did not receive HSTS header
|
||||
pickr.co: could not connect to host
|
||||
pickr.co: did not receive HSTS header
|
||||
picotronic.biz: could not connect to host
|
||||
picscare.co.uk: did not receive HSTS header
|
||||
pieterjangeeroms.me: could not connect to host
|
||||
@ -4297,6 +4305,7 @@ pilgermaske.org: did not receive HSTS header
|
||||
piligrimname.com: could not connect to host
|
||||
pillowandpepper.com: did not receive HSTS header
|
||||
pimpmymac.ru: did not receive HSTS header
|
||||
pincha.com.tw: could not connect to host
|
||||
pinoyonlinetv.com: did not receive HSTS header
|
||||
pippen.io: could not connect to host
|
||||
piratebit.tech: could not connect to host
|
||||
@ -4376,14 +4385,12 @@ pontualcomp.com: could not connect to host
|
||||
pony.today: could not connect to host
|
||||
poolsandstuff.com: did not receive HSTS header
|
||||
poon.tech: could not connect to host
|
||||
population-ethics.com: could not connect to host
|
||||
porno-gif.ru: did not receive HSTS header
|
||||
pornstars.me: did not receive HSTS header
|
||||
portalplatform.net: could not connect to host
|
||||
portaluniversalista.org: could not connect to host
|
||||
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
|
||||
potatoheads.net: could not connect to host
|
||||
@ -4393,6 +4400,7 @@ potsky.com: did not receive HSTS header
|
||||
poussinooz.fr: could not connect to host
|
||||
povitria.net: could not connect to host
|
||||
power99press.com: did not receive HSTS header
|
||||
powermeter.at: did not receive HSTS header
|
||||
powerplannerapp.com: did not receive HSTS header
|
||||
powershift.ne.jp: did not receive HSTS header
|
||||
powerxequality.com: could not connect to host
|
||||
@ -4403,6 +4411,7 @@ ppy3.com: did not receive HSTS header
|
||||
pr.search.yahoo.com: did not receive HSTS header
|
||||
pr2studio.com: could not connect to host
|
||||
practicallabs.com: could not connect to host
|
||||
pratinav.xyz: could not connect to host
|
||||
prattpokemon.com: could not connect to host
|
||||
prediksisydney.com: could not connect to host
|
||||
preezzie.com: could not connect to host
|
||||
@ -4492,7 +4501,6 @@ pyol.org: could not connect to host
|
||||
pypi-status.org: could not connect to host
|
||||
pyplo.org: did not receive HSTS header
|
||||
pypt.lt: did not receive HSTS header
|
||||
pzme.me: could not connect to host
|
||||
q2.si: did not receive HSTS header
|
||||
qbik.de: did not receive HSTS header
|
||||
qccqld.org.au: could not connect to host
|
||||
@ -4608,12 +4616,11 @@ regalpalms.com: did not receive HSTS header
|
||||
regenbogenwald.de: did not receive HSTS header
|
||||
regenerescence.com: did not receive HSTS header
|
||||
reggae-cdmx.com: did not receive HSTS header
|
||||
regmyr.se: could not connect to host
|
||||
rehabthailand.nl: could not connect to host
|
||||
reic.me: could not connect to host
|
||||
reikiqueen.uk: could not connect to host
|
||||
reinaldudras.ee: did not receive HSTS header
|
||||
reisyukaku.org: did not receive HSTS header
|
||||
reisyukaku.org: could not connect to host
|
||||
reithguard-it.de: did not receive HSTS header
|
||||
rejo.in: could not connect to host
|
||||
rejuvemedspa.com: did not receive HSTS header
|
||||
@ -4663,9 +4670,7 @@ rhdigital.pro: could not connect to host
|
||||
rhering.de: could not connect to host
|
||||
richiemail.net: did not receive HSTS header
|
||||
richmondsunlight.com: did not receive HSTS header
|
||||
richmtdriver.com: could not connect to host
|
||||
richsiciliano.com: could not connect to host
|
||||
rico-brase.de: could not connect to host
|
||||
rid-wan.com: could not connect to host
|
||||
rideworks.com: did not receive HSTS header
|
||||
ridwan.co: did not receive HSTS header
|
||||
@ -4673,7 +4678,6 @@ riesenmikrobe.de: max-age too low: 86400
|
||||
riesenmikroben.at: max-age too low: 86400
|
||||
riesenmikroben.de: max-age too low: 86400
|
||||
riesenviren.de: max-age too low: 86400
|
||||
riesenweber.id.au: did not receive HSTS header
|
||||
right2.org: could not connect to host
|
||||
righttoknow.ie: did not receive HSTS header
|
||||
rigolitch.fr: did not receive HSTS header
|
||||
@ -4742,6 +4746,7 @@ rrke.cc: did not receive HSTS header
|
||||
rsajeey.info: could not connect to host
|
||||
rsf.io: could not connect to host
|
||||
rsmaps.org: could not connect to host
|
||||
rtho.me: could not connect to host
|
||||
rubbereggs.ca: could not connect to host
|
||||
rubberfurs.org: did not receive HSTS header
|
||||
rubecodeberg.com: could not connect to host
|
||||
@ -4756,6 +4761,7 @@ ruiming.me: did not receive HSTS header
|
||||
runawebinar.nl: could not connect to host
|
||||
runementors.com: could not connect to host
|
||||
runtondev.com: did not receive HSTS header
|
||||
ruobiyi.com: could not connect to host
|
||||
ruqu.nl: could not connect to host
|
||||
rusadmin.biz: did not receive HSTS header
|
||||
ruska-modra.cz: did not receive HSTS header
|
||||
@ -4869,7 +4875,9 @@ search-one.de: did not receive HSTS header
|
||||
sebastian-lutsch.de: could not connect to host
|
||||
sebster.com: did not receive HSTS header
|
||||
secandtech.com: could not connect to host
|
||||
secanje.nl: could not connect to host
|
||||
seccom.ch: did not receive HSTS header
|
||||
secnet.ga: could not connect to host
|
||||
secondary-survivor.com: could not connect to host
|
||||
secondary-survivor.help: could not connect to host
|
||||
secondary-survivor.net: could not connect to host
|
||||
@ -4915,6 +4923,7 @@ sendash.com: could not connect to host
|
||||
sendmeback.de: did not receive HSTS header
|
||||
sendya.me: did not receive HSTS header
|
||||
senedirect.com: did not receive HSTS header
|
||||
senseofnumber.co.uk: could not connect to host
|
||||
sensiblemn.org: could not connect to host
|
||||
sensibus.com: did not receive HSTS header
|
||||
seo.consulting: did not receive HSTS header
|
||||
@ -5068,7 +5077,6 @@ smart-ov.nl: could not connect to host
|
||||
smartbuyelectric.com: could not connect to host
|
||||
smartcoin.com.br: could not connect to host
|
||||
smarthomedna.com: did not receive HSTS header
|
||||
smartmeal.ru: did not receive HSTS header
|
||||
smartofficesandsmarthomes.com: did not receive HSTS header
|
||||
smartrak.co.nz: did not receive HSTS header
|
||||
smatch.com: did not receive HSTS header
|
||||
@ -5079,11 +5087,6 @@ smirkingwhorefromhighgarden.pro: could not connect to host
|
||||
smkn1lengkong.sch.id: did not receive HSTS header
|
||||
smksi2.com: could not connect to host
|
||||
smksultanismail2.com: did not receive HSTS header
|
||||
smoothics.at: could not connect to host
|
||||
smoothics.com: could not connect to host
|
||||
smoothics.eu: could not connect to host
|
||||
smoothics.mobi: could not connect to host
|
||||
smoothics.net: could not connect to host
|
||||
smove.sg: did not receive HSTS header
|
||||
smplix.com: could not connect to host
|
||||
smusg.com: did not receive HSTS header
|
||||
@ -5101,7 +5104,6 @@ snippet.host: could not connect to host
|
||||
snoozedds.com: max-age too low: 600
|
||||
snoqualmiefiber.org: did not receive HSTS header
|
||||
sobabox.ru: could not connect to host
|
||||
sobieray.dyndns.org: could not connect to host
|
||||
sobinski.pl: did not receive HSTS header
|
||||
sobotkama.eu: did not receive HSTS header
|
||||
soccergif.com: could not connect to host
|
||||
@ -5112,12 +5114,12 @@ socialhead.io: could not connect to host
|
||||
socialhub.com: did not receive HSTS header
|
||||
socialprize.com: could not connect to host
|
||||
socialspirit.com.br: did not receive HSTS header
|
||||
socioambiental.org: could not connect to host
|
||||
sockeye.cc: could not connect to host
|
||||
socomponents.co.uk: could not connect to host
|
||||
sodacore.com: could not connect to host
|
||||
software.rocks: could not connect to host
|
||||
sogeek.me: did not receive HSTS header
|
||||
sogutma.com.tr: did not receive HSTS header
|
||||
sokolka.tv: did not receive HSTS header
|
||||
sol-3.de: did not receive HSTS header
|
||||
solidfuelappliancespares.co.uk: did not receive HSTS header
|
||||
@ -5176,6 +5178,8 @@ spilsbury.io: could not connect to host
|
||||
spirit-dev.net: max-age too low: 0
|
||||
spititout.it: could not connect to host
|
||||
spittersberger.recipes: did not receive HSTS header
|
||||
splunk.net: could not connect to host
|
||||
spodelime.com: did not receive HSTS header
|
||||
sponsortobias.com: could not connect to host
|
||||
sportchirp-internal.azurewebsites.net: did not receive HSTS header
|
||||
sporthit.ru: did not receive HSTS header
|
||||
@ -5199,6 +5203,7 @@ ss.wtf: could not connect to host
|
||||
ssl.panoramio.com: did not receive HSTS header
|
||||
ssl.rip: could not connect to host
|
||||
ssmato.me: could not connect to host
|
||||
ssn1.ru: did not receive HSTS header
|
||||
ssnc.org: max-age too low: 300
|
||||
sspanda.com: did not receive HSTS header
|
||||
ssrvpn.tech: could not connect to host
|
||||
@ -5206,6 +5211,7 @@ ssworld.ga: could not connect to host
|
||||
staack.com: could not connect to host
|
||||
stabletoken.com: could not connect to host
|
||||
stackfiles.io: could not connect to host
|
||||
stacktile.io: did not receive HSTS header
|
||||
stadjerspasonline.nl: could not connect to host
|
||||
stadtbauwerk.at: did not receive HSTS header
|
||||
staffjoy.com: did not receive HSTS header
|
||||
@ -5213,6 +5219,7 @@ staffjoystaging.com: did not receive HSTS header
|
||||
stahl.xyz: could not connect to host
|
||||
stalkerhispano.com: max-age too low: 0
|
||||
stalschermer.nl: could not connect to host
|
||||
stamonicatourandtravel.com: did not receive HSTS header
|
||||
standardssuck.org: did not receive HSTS header
|
||||
standingmist.com: did not receive HSTS header
|
||||
starandshield.com: did not receive HSTS header
|
||||
@ -5269,6 +5276,7 @@ str0.at: did not receive HSTS header
|
||||
strasweb.fr: did not receive HSTS header
|
||||
strbt.de: could not connect to host
|
||||
strchr.com: did not receive HSTS header
|
||||
stream.pub: did not receive HSTS header
|
||||
streamingeverywhere.com: could not connect to host
|
||||
streamingmagazin.de: could not connect to host
|
||||
streampanel.net: did not receive HSTS header
|
||||
@ -5306,7 +5314,6 @@ summitbankofkc.com: did not receive HSTS header
|
||||
sumoatm.com: did not receive HSTS header
|
||||
sumoscout.de: did not receive HSTS header
|
||||
suncountrymarine.com: did not receive HSTS header
|
||||
sunflyer.cn: did not receive HSTS header
|
||||
sunfulong.me: could not connect to host
|
||||
sunnyfruit.ru: could not connect to host
|
||||
sunshinepress.org: could not connect to host
|
||||
@ -5428,7 +5435,6 @@ tcdw.net: did not receive HSTS header
|
||||
tcl.ath.cx: did not receive HSTS header
|
||||
tcomms.org: max-age too low: 0
|
||||
tcp.expert: did not receive HSTS header
|
||||
tcpweb.net: could not connect to host
|
||||
tcwebvn.com: could not connect to host
|
||||
tdsb.cf: could not connect to host
|
||||
tdsb.ga: could not connect to host
|
||||
@ -5512,6 +5518,7 @@ thebrotherswarde.com: could not connect to host
|
||||
thecapitalbank.com: did not receive HSTS header
|
||||
thecharlestonwaldorf.com: did not receive HSTS header
|
||||
theclementinebutchers.com: could not connect to host
|
||||
thecloudrevolution.net: could not connect to host
|
||||
theclubjersey.com: did not receive HSTS header
|
||||
thecoffeehouse.xyz: could not connect to host
|
||||
theelitebuzz.com: did not receive HSTS header
|
||||
@ -5567,7 +5574,6 @@ thirty5.net: did not receive HSTS header
|
||||
thisisacompletetest.ga: could not connect to host
|
||||
thisisforager.com: could not connect to host
|
||||
thiswebhost.com: did not receive HSTS header
|
||||
thomascloud.ddns.net: could not connect to host
|
||||
thomaskliszowski.fr: did not receive HSTS header
|
||||
thomasmeester.nl: did not receive HSTS header
|
||||
thomasschweizer.net: could not connect to host
|
||||
@ -5577,7 +5583,6 @@ thumbtack.com: did not receive HSTS header
|
||||
thundercampaign.com: could not connect to host
|
||||
thusoy.com: did not receive HSTS header
|
||||
ti.blog.br: could not connect to host
|
||||
tibbitshall.ca: did not receive HSTS header
|
||||
tickettoaster.de: max-age too low: 0
|
||||
tickopa.co.uk: could not connect to host
|
||||
tickreport.com: did not receive HSTS header
|
||||
@ -5591,7 +5596,10 @@ tightlineproductions.com: did not receive HSTS header
|
||||
tikutiku.pl: could not connect to host
|
||||
tildebot.com: could not connect to host
|
||||
tiliaze.be: could not connect to host
|
||||
tiliaze.biz: could not connect to host
|
||||
tiliaze.eu: did not receive HSTS header
|
||||
tiliaze.info: could not connect to host
|
||||
tiliaze.net: could not connect to host
|
||||
tilkah.com.au: could not connect to host
|
||||
timbeilby.com: could not connect to host
|
||||
timbuktutimber.com: did not receive HSTS header
|
||||
@ -5652,6 +5660,7 @@ tomlankhorst.nl: did not receive HSTS header
|
||||
tomli.me: could not connect to host
|
||||
tommsy.com: did not receive HSTS header
|
||||
tommyads.com: could not connect to host
|
||||
tomphill.co.uk: could not connect to host
|
||||
tonyfantjr.com: could not connect to host
|
||||
toomanypillows.com: could not connect to host
|
||||
top-stage.net: could not connect to host
|
||||
@ -5674,13 +5683,13 @@ totem-eshop.cz: could not connect to host
|
||||
toucedo.de: could not connect to host
|
||||
touchbasemail.com: did not receive HSTS header
|
||||
touchscreen-handy.de: did not receive HSTS header
|
||||
touchtable.nl: did not receive HSTS header
|
||||
tourpeer.com: did not receive HSTS header
|
||||
toxme.se: did not receive HSTS header
|
||||
toyotamotala.se: could not connect to host
|
||||
tpbcdn.com: could not connect to host
|
||||
tpe-edu.com: could not connect to host
|
||||
tpms4u.at: did not receive HSTS header
|
||||
track.plus: could not connect to host
|
||||
tracktivity.com.au: did not receive HSTS header
|
||||
tradinews.com: could not connect to host
|
||||
tradinews.fr: could not connect to host
|
||||
@ -5702,6 +5711,7 @@ treatprostatewithhifu.com: could not connect to host
|
||||
treeby.net: could not connect to host
|
||||
trell.co.in: did not receive HSTS header
|
||||
trendberry.ru: could not connect to host
|
||||
trileg.net: could not connect to host
|
||||
trinityaffirmations.com: max-age too low: 0
|
||||
trinitycore.org: max-age too low: 2592000
|
||||
tripdelta.com: did not receive HSTS header
|
||||
@ -5737,7 +5747,6 @@ tuturulianda.com: did not receive HSTS header
|
||||
tuvalie.com: could not connect to host
|
||||
tuxcall.de: could not connect to host
|
||||
tuxcloud.net: could not connect to host
|
||||
tuxflow.de: could not connect to host
|
||||
tuxz.net: did not receive HSTS header
|
||||
tv.search.yahoo.com: could not connect to host
|
||||
tvtubeflix.com: did not receive HSTS header
|
||||
@ -5778,10 +5787,8 @@ uega.net: did not receive HSTS header
|
||||
ueu.me: could not connect to host
|
||||
ufgaming.com: did not receive HSTS header
|
||||
ufotable.uk: could not connect to host
|
||||
ugcdn.com: could not connect to host
|
||||
ugo.ninja: could not connect to host
|
||||
ui8.net: max-age too low: 86400
|
||||
uicchy.com: could not connect to host
|
||||
ukas.com: did not receive HSTS header
|
||||
ukdropshipment.co.uk: did not receive HSTS header
|
||||
ukdropshipment.com: did not receive HSTS header
|
||||
@ -5929,7 +5936,6 @@ videnskabsklubben.dk: did not receive HSTS header
|
||||
videomuz.com: did not receive HSTS header
|
||||
videotogel.net: did not receive HSTS header
|
||||
videoueberwachung-set.de: did not receive HSTS header
|
||||
vider.ga: could not connect to host
|
||||
vidid.net: did not receive HSTS header
|
||||
vidz.ga: could not connect to host
|
||||
vieaw.com: did not receive HSTS header
|
||||
@ -6011,7 +6017,7 @@ wan.pp.ua: could not connect to host
|
||||
wanban.io: could not connect to host
|
||||
wangjun.me: did not receive HSTS header
|
||||
wangqiliang.xn--fiqs8s: could not connect to host
|
||||
wangzuan168.cc: could not connect to host
|
||||
wangzuan168.cc: did not receive HSTS header
|
||||
wanybug.cn: could not connect to host
|
||||
wapjt.cn: could not connect to host
|
||||
wapt.fr: did not receive HSTS header
|
||||
@ -6033,9 +6039,9 @@ wear2work.nl: did not receive HSTS header
|
||||
weaverhairextensions.nl: could not connect to host
|
||||
web-industry.fr: could not connect to host
|
||||
web-insider.net: did not receive HSTS header
|
||||
web-redacteuren.nl: did not receive HSTS header
|
||||
web-torrent.com: max-age too low: 0
|
||||
web-vision.de: did not receive HSTS header
|
||||
web-wave.jp: could not connect to host
|
||||
web4all.fr: did not receive HSTS header
|
||||
web4pro.fr: could not connect to host
|
||||
webandwords.com.au: could not connect to host
|
||||
@ -6141,7 +6147,6 @@ wittcher.com: could not connect to host
|
||||
wittydonut.com: could not connect to host
|
||||
witzemaschine.com: max-age too low: 0
|
||||
wiz.biz: could not connect to host
|
||||
wizzley.com: could not connect to host
|
||||
wjglerum.nl: could not connect to host
|
||||
wlzhiyin.cn: could not connect to host
|
||||
wmcuk.net: could not connect to host
|
||||
@ -6233,10 +6238,11 @@ xellos.ga: could not connect to host
|
||||
xellos.ml: could not connect to host
|
||||
xendo.net: did not receive HSTS header
|
||||
xenesisziarovky.sk: could not connect to host
|
||||
xenophile.name: could not connect to host
|
||||
xett.com: did not receive HSTS header
|
||||
xf-liam.com: did not receive HSTS header
|
||||
xfive.de: did not receive HSTS header
|
||||
xgusto.com: could not connect to host
|
||||
xia100.xyz: did not receive HSTS header
|
||||
xiaody.me: could not connect to host
|
||||
xiaolvmu.com: could not connect to host
|
||||
xiaolvmu.me: could not connect to host
|
||||
@ -6319,6 +6325,7 @@ yenniferallulli.moda: could not connect to host
|
||||
yenniferallulli.nl: could not connect to host
|
||||
yestees.com: did not receive HSTS header
|
||||
yetcore.io: could not connect to host
|
||||
yetii.net: could not connect to host
|
||||
yhori.xyz: could not connect to host
|
||||
yhrd.org: did not receive HSTS header
|
||||
yikzu.cn: could not connect to host
|
||||
@ -6362,7 +6369,6 @@ z3liff.com: could not connect to host
|
||||
z3liff.net: could not connect to host
|
||||
za.search.yahoo.com: did not receive HSTS header
|
||||
zadieheimlich.com: did not receive HSTS header
|
||||
zafirus.name: could not connect to host
|
||||
zahe.me: could not connect to host
|
||||
zahyantechnologies.com: could not connect to host
|
||||
zakoncontrol.com: could not connect to host
|
||||
@ -6394,6 +6400,7 @@ zerudi.com: did not receive HSTS header
|
||||
zett4.me: could not connect to host
|
||||
zeytin.pro: could not connect to host
|
||||
zh.search.yahoo.com: did not receive HSTS header
|
||||
zh1.li: could not connect to host
|
||||
zhangzifan.com: did not receive HSTS header
|
||||
zhaojin97.cn: did not receive HSTS header
|
||||
zhendingresources.com: max-age too low: 0
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -202,6 +202,12 @@ macosx64/opt:
|
||||
- macosx64-tests-talos
|
||||
- macosx64-tests-debug
|
||||
|
||||
macosx64-devedition/opt:
|
||||
build-platform: macosx64-devedition/opt
|
||||
test-sets:
|
||||
- macosx64-tests-talos
|
||||
- macosx64-tests-debug
|
||||
|
||||
##
|
||||
# Android platforms (matching /android.*/)
|
||||
|
||||
|
@ -28,6 +28,7 @@ BUILDER_NAME_PREFIX = {
|
||||
'linux64-jsdcov': 'Ubuntu Code Coverage VM 12.04 x64',
|
||||
'linux64-stylo': 'Ubuntu VM 12.04 x64',
|
||||
'macosx64': 'Rev7 MacOSX Yosemite 10.10.5',
|
||||
'macosx64-devedition': 'Rev7 MacOSX Yosemite 10.10.5 DevEdition',
|
||||
'android-4.3-arm7-api-15': 'Android 4.3 armv7 API 15+',
|
||||
'android-4.2-x86': 'Android 4.2 x86 Emulator',
|
||||
'android-4.3-arm7-api-15-gradle': 'Android 4.3 armv7 API 15+',
|
||||
@ -46,7 +47,7 @@ def test_packages_url(taskdesc):
|
||||
build_platform = taskdesc['attributes']['build_platform']
|
||||
build_type = taskdesc['attributes']['build_type']
|
||||
|
||||
if build_platform == 'macosx64' and build_type == 'opt':
|
||||
if build_platform.startswith('macosx64') and build_type == 'opt':
|
||||
target = 'firefox-{}.en-US.{}'.format(get_firefox_version(), 'mac')
|
||||
else:
|
||||
target = 'target'
|
||||
|
@ -56658,6 +56658,11 @@
|
||||
{}
|
||||
]
|
||||
],
|
||||
"html/semantics/forms/the-label-element/iframe-label-attributes.html": [
|
||||
[
|
||||
{}
|
||||
]
|
||||
],
|
||||
"html/semantics/forms/the-legend-element/.gitkeep": [
|
||||
[
|
||||
{}
|
||||
@ -189030,12 +189035,16 @@
|
||||
"da39a3ee5e6b4b0d3255bfef95601890afd80709",
|
||||
"support"
|
||||
],
|
||||
"html/semantics/forms/the-label-element/iframe-label-attributes.html": [
|
||||
"5110391fe9ee5f04c2175bdaa1f38eeba0c40803",
|
||||
"support"
|
||||
],
|
||||
"html/semantics/forms/the-label-element/label-attributes.html": [
|
||||
"bb00ee78b9fa2343d85dcaa13376a832d376617a",
|
||||
"4ce7bb05fecd15b76e40959bb9ab1e0b0adcd8da",
|
||||
"testharness"
|
||||
],
|
||||
"html/semantics/forms/the-label-element/labelable-elements.html": [
|
||||
"421328f898fb2487152f6fd8df315fc22ddea61a",
|
||||
"80275984254360d8b713b5b330c18ae34138b670",
|
||||
"testharness"
|
||||
],
|
||||
"html/semantics/forms/the-label-element/proxy-click-to-associated-element.html": [
|
||||
|
@ -1060,9 +1060,6 @@
|
||||
[HTMLInputElement interface: attribute valueHigh]
|
||||
expected: FAIL
|
||||
|
||||
[HTMLInputElement interface: attribute labels]
|
||||
expected: FAIL
|
||||
|
||||
[HTMLInputElement interface: document.createElement("input") must inherit property "dirName" with the proper type (6)]
|
||||
expected: FAIL
|
||||
|
||||
@ -1078,9 +1075,6 @@
|
||||
[HTMLButtonElement interface: attribute menu]
|
||||
expected: FAIL
|
||||
|
||||
[HTMLButtonElement interface: attribute labels]
|
||||
expected: FAIL
|
||||
|
||||
[HTMLButtonElement interface: document.createElement("button") must inherit property "menu" with the proper type (11)]
|
||||
expected: FAIL
|
||||
|
||||
@ -1090,15 +1084,9 @@
|
||||
[HTMLSelectElement interface: attribute autocomplete]
|
||||
expected: FAIL
|
||||
|
||||
[HTMLSelectElement interface: attribute labels]
|
||||
expected: FAIL
|
||||
|
||||
[HTMLSelectElement interface: document.createElement("select") must inherit property "autocomplete" with the proper type (0)]
|
||||
expected: FAIL
|
||||
|
||||
[HTMLSelectElement interface: document.createElement("select") must inherit property "labels" with the proper type (26)]
|
||||
expected: FAIL
|
||||
|
||||
[HTMLTextAreaElement interface: attribute autocomplete]
|
||||
expected: FAIL
|
||||
|
||||
@ -1108,9 +1096,6 @@
|
||||
[HTMLTextAreaElement interface: attribute inputMode]
|
||||
expected: FAIL
|
||||
|
||||
[HTMLTextAreaElement interface: attribute labels]
|
||||
expected: FAIL
|
||||
|
||||
[HTMLTextAreaElement interface: document.createElement("textarea") must inherit property "autocomplete" with the proper type (0)]
|
||||
expected: FAIL
|
||||
|
||||
@ -1120,9 +1105,6 @@
|
||||
[HTMLTextAreaElement interface: document.createElement("textarea") must inherit property "inputMode" with the proper type (6)]
|
||||
expected: FAIL
|
||||
|
||||
[HTMLTextAreaElement interface: document.createElement("textarea") must inherit property "labels" with the proper type (25)]
|
||||
expected: FAIL
|
||||
|
||||
[HTMLKeygenElement interface: existence and properties of interface object]
|
||||
expected: FAIL
|
||||
|
||||
@ -1228,24 +1210,6 @@
|
||||
[HTMLKeygenElement interface: document.createElement("keygen") must inherit property "labels" with the proper type (13)]
|
||||
expected: FAIL
|
||||
|
||||
[HTMLOutputElement interface: attribute labels]
|
||||
expected: FAIL
|
||||
|
||||
[HTMLOutputElement interface: document.createElement("output") must inherit property "labels" with the proper type (12)]
|
||||
expected: FAIL
|
||||
|
||||
[HTMLProgressElement interface: attribute labels]
|
||||
expected: FAIL
|
||||
|
||||
[HTMLProgressElement interface: document.createElement("progress") must inherit property "labels" with the proper type (3)]
|
||||
expected: FAIL
|
||||
|
||||
[HTMLMeterElement interface: attribute labels]
|
||||
expected: FAIL
|
||||
|
||||
[HTMLMeterElement interface: document.createElement("meter") must inherit property "labels" with the proper type (6)]
|
||||
expected: FAIL
|
||||
|
||||
[HTMLMenuItemElement interface: attribute default]
|
||||
expected: FAIL
|
||||
|
||||
@ -2755,75 +2719,6 @@
|
||||
[HTMLMediaElement interface: new Audio() must inherit property "videoTracks" with the proper type (39)]
|
||||
expected: FAIL
|
||||
|
||||
[HTMLInputElement interface: document.createElement("input") must inherit property "labels" with the proper type (46)]
|
||||
expected: FAIL
|
||||
|
||||
[HTMLInputElement interface: createInput("text") must inherit property "labels" with the proper type (46)]
|
||||
expected: FAIL
|
||||
|
||||
[HTMLInputElement interface: createInput("hidden") must inherit property "labels" with the proper type (46)]
|
||||
expected: FAIL
|
||||
|
||||
[HTMLInputElement interface: createInput("search") must inherit property "labels" with the proper type (46)]
|
||||
expected: FAIL
|
||||
|
||||
[HTMLInputElement interface: createInput("tel") must inherit property "labels" with the proper type (46)]
|
||||
expected: FAIL
|
||||
|
||||
[HTMLInputElement interface: createInput("url") must inherit property "labels" with the proper type (46)]
|
||||
expected: FAIL
|
||||
|
||||
[HTMLInputElement interface: createInput("email") must inherit property "labels" with the proper type (46)]
|
||||
expected: FAIL
|
||||
|
||||
[HTMLInputElement interface: createInput("password") must inherit property "labels" with the proper type (46)]
|
||||
expected: FAIL
|
||||
|
||||
[HTMLInputElement interface: createInput("date") must inherit property "labels" with the proper type (46)]
|
||||
expected: FAIL
|
||||
|
||||
[HTMLInputElement interface: createInput("month") must inherit property "labels" with the proper type (46)]
|
||||
expected: FAIL
|
||||
|
||||
[HTMLInputElement interface: createInput("week") must inherit property "labels" with the proper type (46)]
|
||||
expected: FAIL
|
||||
|
||||
[HTMLInputElement interface: createInput("time") must inherit property "labels" with the proper type (46)]
|
||||
expected: FAIL
|
||||
|
||||
[HTMLInputElement interface: createInput("datetime-local") must inherit property "labels" with the proper type (46)]
|
||||
expected: FAIL
|
||||
|
||||
[HTMLInputElement interface: createInput("number") must inherit property "labels" with the proper type (46)]
|
||||
expected: FAIL
|
||||
|
||||
[HTMLInputElement interface: createInput("range") must inherit property "labels" with the proper type (46)]
|
||||
expected: FAIL
|
||||
|
||||
[HTMLInputElement interface: createInput("color") must inherit property "labels" with the proper type (46)]
|
||||
expected: FAIL
|
||||
|
||||
[HTMLInputElement interface: createInput("checkbox") must inherit property "labels" with the proper type (46)]
|
||||
expected: FAIL
|
||||
|
||||
[HTMLInputElement interface: createInput("radio") must inherit property "labels" with the proper type (46)]
|
||||
expected: FAIL
|
||||
|
||||
[HTMLInputElement interface: createInput("file") must inherit property "labels" with the proper type (46)]
|
||||
expected: FAIL
|
||||
|
||||
[HTMLInputElement interface: createInput("submit") must inherit property "labels" with the proper type (46)]
|
||||
expected: FAIL
|
||||
|
||||
[HTMLInputElement interface: createInput("image") must inherit property "labels" with the proper type (46)]
|
||||
expected: FAIL
|
||||
|
||||
[HTMLInputElement interface: createInput("reset") must inherit property "labels" with the proper type (46)]
|
||||
expected: FAIL
|
||||
|
||||
[HTMLInputElement interface: createInput("button") must inherit property "labels" with the proper type (46)]
|
||||
expected: FAIL
|
||||
|
||||
[CanvasRenderingContext2D interface: operation getTransform()]
|
||||
expected: FAIL
|
||||
|
||||
@ -3379,9 +3274,6 @@
|
||||
[Document interface: document.implementation.createDocument(null, "", null) must inherit property "onmousewheel" with the proper type (126)]
|
||||
expected: FAIL
|
||||
|
||||
[HTMLButtonElement interface: document.createElement("button") must inherit property "labels" with the proper type (17)]
|
||||
expected: FAIL
|
||||
|
||||
[HTMLScriptElement interface: attribute noModule]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -1,17 +0,0 @@
|
||||
[label-attributes.html]
|
||||
type: testharness
|
||||
[A non-control follows by a control with same ID.]
|
||||
expected: FAIL
|
||||
|
||||
[A form control has multiple labels.]
|
||||
expected: FAIL
|
||||
|
||||
[A form control has no label 1.]
|
||||
expected: FAIL
|
||||
|
||||
[A form control has no label 2.]
|
||||
expected: FAIL
|
||||
|
||||
[A form control has an implicit label.]
|
||||
expected: FAIL
|
||||
|
@ -1,32 +1,6 @@
|
||||
[labelable-elements.html]
|
||||
type: testharness
|
||||
[Check if the output element can access 'labels']
|
||||
expected: FAIL
|
||||
|
||||
[Check if the progress element can access 'labels']
|
||||
expected: FAIL
|
||||
|
||||
[Check if the select element can access 'labels']
|
||||
expected: FAIL
|
||||
|
||||
[Check if the textarea element can access 'labels']
|
||||
expected: FAIL
|
||||
|
||||
[Check if the button element can access 'labels']
|
||||
expected: FAIL
|
||||
|
||||
[Check if the hidden input element can access 'labels']
|
||||
expected: FAIL
|
||||
|
||||
[Check if the input element in radio state can access 'labels']
|
||||
expected: FAIL
|
||||
|
||||
[Check if the meter element can access 'labels']
|
||||
expected: FAIL
|
||||
|
||||
[Check if the hidden input element has null 'labels']
|
||||
expected: FAIL
|
||||
|
||||
[Check if the keygen element is not a labelable element]
|
||||
expected: FAIL
|
||||
|
||||
[Check if the keygen element can access 'labels']
|
||||
expected: FAIL
|
||||
|
@ -1,5 +0,0 @@
|
||||
[button_labels.html]
|
||||
type: testharness
|
||||
[Forms]
|
||||
expected: FAIL
|
||||
|
@ -1,5 +0,0 @@
|
||||
[input_labels.html]
|
||||
type: testharness
|
||||
[Forms]
|
||||
expected: FAIL
|
||||
|
@ -0,0 +1,8 @@
|
||||
<html>
|
||||
<body>
|
||||
<label>
|
||||
<div id="div1"></div>
|
||||
</label>
|
||||
<label for="test13"></label>
|
||||
</body>
|
||||
</html>
|
@ -32,10 +32,53 @@
|
||||
|
||||
<label id="lbl5" for="test7"></label>
|
||||
<input id="test7">
|
||||
|
||||
<label id="lbl7">
|
||||
<label id="lbl8">
|
||||
<div id="div1">
|
||||
<input id="test8">
|
||||
</div>
|
||||
</label>
|
||||
</label>
|
||||
<div id="div2"></div>
|
||||
|
||||
<label id="lbl9">
|
||||
<label id="lbl10" for="test10">
|
||||
<div id="div3">
|
||||
<input id="test9">
|
||||
</div>
|
||||
</label>
|
||||
</label>
|
||||
<div id="div4"><input id="test10"></div>
|
||||
|
||||
<label id="lbl11">
|
||||
<object id="obj">
|
||||
<input id="test11">
|
||||
<input id="test12">
|
||||
</object>
|
||||
</label>
|
||||
<label id="lbl12" for="test12"><div id="div5"></div></label>
|
||||
|
||||
<label id="lbl13">
|
||||
<p id="p1">
|
||||
<input id="test13">
|
||||
</p>
|
||||
</label>
|
||||
|
||||
<div id="div6">
|
||||
<div id="div7">
|
||||
<label id="lbl14">
|
||||
<label id="lbl15" for="test15">
|
||||
<input id="test14">
|
||||
</label>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<input id="test15">
|
||||
</form>
|
||||
|
||||
<label id="lbl6" for="test7"></label>
|
||||
|
||||
<div id="content" style="display: none">
|
||||
<script>
|
||||
|
||||
//control attribute
|
||||
@ -57,6 +100,7 @@
|
||||
}, "A label element not in a document can not label any element in the document.");
|
||||
|
||||
test(function () {
|
||||
var labels = document.getElementById("test3").labels;
|
||||
assert_equals(document.getElementById("lbl1").control, document.getElementById("test3"),
|
||||
"The first labelable descendant of a label element should be its labeled control.");
|
||||
|
||||
@ -64,6 +108,10 @@
|
||||
document.getElementById("lbl1").insertBefore(input, document.getElementById("test2"));
|
||||
assert_equals(document.getElementById("lbl1").control, input,
|
||||
"The first labelable descendant of a label element in tree order should be its labeled control.");
|
||||
assert_equals(input.labels.length, 1,
|
||||
"The form control has an ancestor with no explicit associated label, and is the first labelable descendant.");
|
||||
assert_equals(labels.length, 0,
|
||||
"The number of labels should be 0 if it's not the first labelable descendant of a label element.");
|
||||
input.remove();
|
||||
}, "The labeled control for a label element that has no 'for' attribute is the first labelable element which is a descendant of that label element.");
|
||||
|
||||
@ -100,6 +148,168 @@
|
||||
newLabel.remove();
|
||||
}, "A form control has multiple labels.");
|
||||
|
||||
test(function () {
|
||||
var labels = document.getElementById("test8").labels;
|
||||
assert_true(labels instanceof NodeList,
|
||||
"A form control's 'labels' property should be an instance of a NodeList.");
|
||||
assert_equals(labels.length, 2,
|
||||
"The form control has two ancestors with no explicit associated label, and is the first labelable descendant.");
|
||||
assert_array_equals(labels, [document.getElementById("lbl7"), document.getElementById("lbl8")],
|
||||
"The labels for a form control should be returned in tree order.");
|
||||
|
||||
document.getElementById('div2').insertBefore(document.getElementById('div1'), document.getElementById('div2').firstChild);
|
||||
assert_equals(labels.length, 0,
|
||||
"The number of labels should be 0 after the labelable element is moved to outside of nested associated labels.");
|
||||
}, "A labelable element is moved to outside of nested associated labels.");
|
||||
|
||||
test(function () {
|
||||
var labels1 = document.getElementById("test9").labels;
|
||||
var labels2 = document.getElementById("test10").labels;
|
||||
assert_true(labels1 instanceof NodeList,
|
||||
"A form control's 'labels' property should be an instance of a NodeList.");
|
||||
assert_true(labels2 instanceof NodeList,
|
||||
"A form control's 'labels' property should be an instance of a NodeList.");
|
||||
assert_equals(labels1.length, 1,
|
||||
"The form control has an ancestor with no explicit associated label, and is the first labelable descendant.");
|
||||
assert_equals(labels2.length, 1,
|
||||
"The number of labels associated with a form control should be the number of label elements for which it is a labeled control.");
|
||||
assert_array_equals(labels1, [document.getElementById("lbl9")],
|
||||
"The labels for a form control should be returned in tree order.");
|
||||
assert_array_equals(labels2, [document.getElementById("lbl10")],
|
||||
"The labels for a form control should be returned in tree order.");
|
||||
document.getElementById('div3').insertBefore(document.getElementById('div4'), document.getElementById('div3').firstChild);
|
||||
assert_equals(labels1.length, 0,
|
||||
"The number of labels should be 0 if it's not the first labelable descendant of a label element.");
|
||||
assert_equals(labels2.length, 2,
|
||||
"The form control has an ancestor with an explicit associated label, and is the first labelable descendant.");
|
||||
}, "A labelable element is moved to inside of nested associated labels.");
|
||||
|
||||
test(function () {
|
||||
var labels1 = document.getElementById("test11").labels;
|
||||
var labels2 = document.getElementById("test12").labels;
|
||||
assert_true(labels1 instanceof NodeList,
|
||||
"A form control's 'labels' property should be an instance of a NodeList.");
|
||||
assert_true(labels2 instanceof NodeList,
|
||||
"A form control's 'labels' property should be an instance of a NodeList.");
|
||||
assert_equals(labels1.length, 1,
|
||||
"The form control has an ancestor with no explicit associated label, and it is the first labelable descendant.");
|
||||
assert_equals(labels2.length, 1,
|
||||
"The number of labels should be 1 since there is a label with a 'for' attribute associated with this labelable element.");
|
||||
assert_array_equals(labels1, [document.getElementById("lbl11")],
|
||||
"The labels for a form control should be returned in tree order.");
|
||||
assert_array_equals(labels2, [document.getElementById("lbl12")],
|
||||
"The labels for a form control should be returned in tree order.");
|
||||
document.getElementById('div5').appendChild(document.getElementById('obj'));
|
||||
assert_equals(labels1.length, 0,
|
||||
"The number of labels should be 0 after the labelable element is moved to outside of associated label.");
|
||||
assert_equals(labels2.length, 1,
|
||||
"The number of labels should be 1 after the labelable element is moved to outside of associated label.");
|
||||
}, "A labelable element which is a descendant of non-labelable element is moved to outside of associated label.");
|
||||
|
||||
async_test(function () {
|
||||
var labels = document.getElementById("test13").labels;
|
||||
assert_true(labels instanceof NodeList,
|
||||
"A form control's 'labels' property should be an instance of a NodeList.");
|
||||
assert_equals(labels.length, 1,
|
||||
"The form control has an ancestor with no explicit associated label, and is the first labelable descendant.");
|
||||
assert_array_equals(labels, [document.getElementById("lbl13")],
|
||||
"The labels for a form control should be returned in tree order.");
|
||||
let iframe = document.createElement('iframe');
|
||||
|
||||
iframe.onload = this.step_func_done(() => {
|
||||
iframe.contentWindow.document.getElementById("div1").appendChild(document.getElementById("p1"));
|
||||
assert_equals(labels.length, 2,
|
||||
"The number of labels should be 2 after the labelable element is moved to iframe.");
|
||||
});
|
||||
|
||||
iframe.setAttribute('src', 'http://web-platform.test:8000/html/semantics/forms/the-label-element/iframe-label-attributes.html');
|
||||
document.body.appendChild(iframe);
|
||||
}, "A labelable element is moved to iframe.");
|
||||
|
||||
test(function () {
|
||||
var labels1 = document.getElementById("test14").labels;
|
||||
var labels2 = document.getElementById("test15").labels;
|
||||
assert_true(labels1 instanceof NodeList,
|
||||
"A form control's 'labels' property should be an instance of a NodeList.");
|
||||
assert_equals(labels1.length, 1,
|
||||
"The form control has an ancestor with no explicit associated label, and is the first labelable descendant.");
|
||||
assert_equals(labels2.length, 1,
|
||||
"The number of labels associated with a form control should be the number of label elements for which it is a labeled control.");
|
||||
assert_array_equals(labels1, [document.getElementById("lbl14")],
|
||||
"The labels for a form control should be returned in tree order.");
|
||||
|
||||
document.getElementById('div6').removeChild(document.getElementById('div7'));
|
||||
assert_equals(labels1.length, 0,
|
||||
"The number of labels should be 0 after the labelable element is removed.");
|
||||
assert_equals(labels2.length, 0,
|
||||
"The number of labels should be 0 since there is no label with a 'for' attribute associated with this labelable element.");
|
||||
}, "A div element which contains labelable element is removed.");
|
||||
|
||||
test(function () {
|
||||
// <label><input id="test16"><label for="test16"></label></label>
|
||||
var label1 = document.createElement('label');
|
||||
label1.innerHTML = "<input id='test16'>";
|
||||
var label2 = document.createElement('label');
|
||||
label2.htmlFor = "test16";
|
||||
label1.appendChild(label2);
|
||||
|
||||
var input = label1.firstChild;
|
||||
var labels = input.labels;
|
||||
|
||||
assert_equals(labels.length, 2,
|
||||
"The number of labels associated with a form control should be the number of label elements for which it is a labeled control.");
|
||||
assert_true(labels instanceof NodeList,
|
||||
"A form control's 'labels' property should be an instance of a NodeList.");
|
||||
assert_equals(label1.control, input, "The first labelable descendant of a label element should be its labeled control.");
|
||||
assert_equals(label2.control, input, "The labeled cotrol should be associated with the control whose ID is equal to the value of the 'for' attribute.");
|
||||
}, "A labelable element not in a document can label element in the same tree.");
|
||||
|
||||
test(function () {
|
||||
var isShadowDOMV0;
|
||||
if ("createShadowRoot" in document.getElementById('content')) {
|
||||
isShadowDOMV0 = true;
|
||||
}
|
||||
var root1;
|
||||
if (isShadowDOMV0) {
|
||||
root1 = document.getElementById('content').createShadowRoot();
|
||||
} else {
|
||||
root1 = document.getElementById('content').attachShadow({mode: 'open'});
|
||||
}
|
||||
assert_true(root1 instanceof DocumentFragment,
|
||||
"ShadowRoot should be an instance of DocumentFragment.");
|
||||
// <label><input id="shadow1"/></label><div id="div1"></div>
|
||||
var label1 = document.createElement('label');
|
||||
var input1 = document.createElement('input');
|
||||
input1.setAttribute("id", "shadow1");
|
||||
label1.appendChild(input1);
|
||||
root1.appendChild(label1);
|
||||
|
||||
var div1 = document.createElement('div');
|
||||
label1.appendChild(div1);
|
||||
// <label for="shadow2"></label><input id="shadow2"/>
|
||||
var root2;
|
||||
if (isShadowDOMV0) {
|
||||
root2 = div1.createShadowRoot();
|
||||
} else {
|
||||
root2 = div1.attachShadow({mode: 'open'});
|
||||
}
|
||||
|
||||
assert_true(root2 instanceof DocumentFragment,
|
||||
"ShadowRoot should be an instance of DocumentFragment.");
|
||||
var label2 = document.createElement('label');
|
||||
label2.setAttribute("for", "shadow2");
|
||||
|
||||
var input2 = document.createElement('input');
|
||||
input2.setAttribute("id", "shadow2");
|
||||
root2.appendChild(label2);
|
||||
root2.appendChild(input2);
|
||||
|
||||
assert_equals(root1.getElementById("shadow1").labels.length, 1,
|
||||
"The form control has an ancestor with no explicit associated label, and it is the first labelable descendant.");
|
||||
assert_equals(root2.getElementById("shadow2").labels.length, 1,
|
||||
"The number of labels should be 1 since there is a label with a 'for' attribute associated with this labelable element.");
|
||||
}, "A labelable element inside the shadow DOM.");
|
||||
|
||||
test(function () {
|
||||
var labels = document.getElementById("test3").labels;
|
||||
assert_true(labels instanceof NodeList, "A form control's 'labels' property should be an instance of a NodeList.");
|
||||
|
@ -104,6 +104,7 @@ test(function() {
|
||||
|
||||
hiddenInput.type = "hidden";
|
||||
assert_equals(labels.length, 0, "Retained .labels NodeList should be empty after input type changed to hidden");
|
||||
assert_equals(hiddenInput.labels, null, ".labels NodeList should be null after input type changed to hidden");
|
||||
|
||||
hiddenInput.type = "checkbox";
|
||||
assert_true(labels === hiddenInput.labels, ".labels property must return the [SameObject] after input type is toggled back from 'hidden'");
|
||||
|
@ -190,6 +190,7 @@ var listener = {
|
||||
onWindowLoaded() {
|
||||
let browser = this.win.document.createElementNS(XUL_NS, "browser");
|
||||
browser.setAttribute("type", "content");
|
||||
browser.setAttribute("disableglobalhistory", "true");
|
||||
|
||||
let remoteBrowser = Services.appinfo.browserTabsRemoteAutostart;
|
||||
browser.setAttribute("remote", remoteBrowser);
|
||||
|
@ -259,7 +259,12 @@ this.SelectContentHelper.prototype = {
|
||||
|
||||
case "Forms:DismissedDropDown":
|
||||
let selectedOption = this.element.item(this.element.selectedIndex);
|
||||
if (this.initialSelection != selectedOption) {
|
||||
if (this.initialSelection === selectedOption) {
|
||||
// Clear active document
|
||||
DOMUtils.removeContentState(this.element,
|
||||
kStateActive,
|
||||
/* aClearActiveDocument */ true);
|
||||
} else {
|
||||
let win = this.element.ownerGlobal;
|
||||
// For ordering of events, we're using non-e10s as our guide here,
|
||||
// since the spec isn't exactly clear. In non-e10s, we fire:
|
||||
@ -270,8 +275,12 @@ this.SelectContentHelper.prototype = {
|
||||
if (!this.closedWithEnter) {
|
||||
this.dispatchMouseEvent(win, selectedOption, "mousedown");
|
||||
this.dispatchMouseEvent(win, selectedOption, "mouseup");
|
||||
DOMUtils.removeContentState(this.element, kStateActive);
|
||||
}
|
||||
// Clear active document no matter user selects
|
||||
// via keyboard or mouse
|
||||
DOMUtils.removeContentState(this.element,
|
||||
kStateActive,
|
||||
/* aClearActiveDocument */ true);
|
||||
|
||||
let inputEvent = new win.UIEvent("input", {
|
||||
bubbles: true,
|
||||
|
@ -3574,12 +3574,6 @@ bool
|
||||
nsNativeThemeCocoa::ThemeSupportsWidget(nsPresContext* aPresContext, nsIFrame* aFrame,
|
||||
uint8_t aWidgetType)
|
||||
{
|
||||
// We don't have CSS set up to render non-native scrollbars on Mac OS X so we
|
||||
// render natively even if native theme support is disabled.
|
||||
if (aWidgetType != NS_THEME_SCROLLBAR &&
|
||||
aPresContext && !aPresContext->PresShell()->IsThemeSupportEnabled())
|
||||
return false;
|
||||
|
||||
// if this is a dropdown button in a combobox the answer is always no
|
||||
if (aWidgetType == NS_THEME_MENULIST_BUTTON) {
|
||||
nsIFrame* parentFrame = aFrame->GetParent();
|
||||
|
@ -2441,9 +2441,6 @@ nsNativeThemeWin::ThemeSupportsWidget(nsPresContext* aPresContext,
|
||||
// XXXdwh We can go even further and call the API to ask if support exists for
|
||||
// specific widgets.
|
||||
|
||||
if (aPresContext && !aPresContext->PresShell()->IsThemeSupportEnabled())
|
||||
return false;
|
||||
|
||||
if (aWidgetType == NS_THEME_FOCUS_OUTLINE) {
|
||||
return true;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user