1
0
mirror of https://github.com/roytam1/UXP.git synced 2026-05-26 13:58:49 +00:00

Bug 1418002 - Remove HTMLContentElement

Tag #1375
This commit is contained in:
Matt A. Tobin
2020-04-17 07:08:22 -04:00
committed by Roy Tam
parent cedff6e214
commit a7ba34c672
23 changed files with 140 additions and 1317 deletions
+8 -13
View File
@@ -7,7 +7,6 @@
#include "ChildIterator.h"
#include "nsContentUtils.h"
#include "mozilla/dom/XBLChildrenElement.h"
#include "mozilla/dom/HTMLContentElement.h"
#include "mozilla/dom/ShadowRoot.h"
#include "nsIAnonymousContentCreator.h"
#include "nsIFrame.h"
@@ -18,33 +17,29 @@ namespace dom {
class MatchedNodes {
public:
explicit MatchedNodes(HTMLContentElement* aInsertionPoint)
: mIsContentElement(true), mContentElement(aInsertionPoint) {}
explicit MatchedNodes()
: mIsContentElement(false), mChildrenElement(nullptr) {}
explicit MatchedNodes(XBLChildrenElement* aInsertionPoint)
: mIsContentElement(false), mChildrenElement(aInsertionPoint) {}
uint32_t Length() const
{
return mIsContentElement ? mContentElement->MatchedNodes().Length()
: mChildrenElement->InsertedChildrenLength();
return mChildrenElement ? mChildrenElement->InsertedChildrenLength() : 0;
}
nsIContent* operator[](int32_t aIndex) const
{
return mIsContentElement ? mContentElement->MatchedNodes()[aIndex]
: mChildrenElement->InsertedChild(aIndex);
return mChildrenElement ? mChildrenElement->InsertedChild(aIndex) : nullptr;
}
bool IsEmpty() const
{
return mIsContentElement ? mContentElement->MatchedNodes().IsEmpty()
: !mChildrenElement->HasInsertedChildren();
return mChildrenElement && !mChildrenElement->HasInsertedChildren();
}
protected:
// Leftover from Shadow DOM v0.
bool mIsContentElement;
union {
HTMLContentElement* mContentElement;
XBLChildrenElement* mChildrenElement;
};
};
@@ -57,9 +52,9 @@ GetMatchedNodesForPoint(nsIContent* aContent)
return MatchedNodes(static_cast<XBLChildrenElement*>(aContent));
}
return MatchedNodes();
// Web components case
MOZ_ASSERT(aContent->IsHTMLElement(nsGkAtoms::content));
return MatchedNodes(HTMLContentElement::FromContent(aContent));
// XXX handle <slot> element?
}
nsIContent*
+2 -264
View File
@@ -14,7 +14,6 @@
#include "nsIDOMHTMLElement.h"
#include "nsIStyleSheetLinkingElement.h"
#include "mozilla/dom/Element.h"
#include "mozilla/dom/HTMLContentElement.h"
#include "nsXBLPrototypeBinding.h"
#include "mozilla/StyleSheet.h"
#include "mozilla/StyleSheetInlines.h"
@@ -223,35 +222,6 @@ ShadowRoot::GetElementsByClassName(const nsAString& aClasses)
return nsContentUtils::GetElementsByClassName(this, aClasses);
}
void
ShadowRoot::AddInsertionPoint(HTMLContentElement* aInsertionPoint)
{
TreeOrderComparator comparator;
mInsertionPoints.InsertElementSorted(aInsertionPoint, comparator);
}
void
ShadowRoot::RemoveInsertionPoint(HTMLContentElement* aInsertionPoint)
{
mInsertionPoints.RemoveElement(aInsertionPoint);
}
void
ShadowRoot::RemoveDestInsertionPoint(nsIContent* aInsertionPoint,
nsTArray<nsIContent*>& aDestInsertionPoints)
{
// Remove the insertion point from the destination insertion points.
// Also remove all succeeding insertion points because it is no longer
// possible for the content to be distributed into deeper node trees.
int32_t index = aDestInsertionPoints.IndexOf(aInsertionPoint);
// It's possible that we already removed the insertion point while processing
// other insertion point removals.
if (index >= 0) {
aDestInsertionPoints.SetLength(index);
}
}
void
ShadowRoot::DistributionChanged()
{
@@ -269,133 +239,10 @@ ShadowRoot::DistributionChanged()
shell->DestroyFramesForAndRestyle(host);
}
const HTMLContentElement*
ShadowRoot::DistributeSingleNode(nsIContent* aContent)
{
// Find the insertion point to which the content belongs.
HTMLContentElement* foundInsertionPoint = nullptr;
for (HTMLContentElement* insertionPoint : mInsertionPoints) {
if (insertionPoint->Match(aContent)) {
if (insertionPoint->MatchedNodes().Contains(aContent)) {
// Node is already matched into the insertion point. We are done.
return insertionPoint;
}
// Matching may cause the insertion point to drop fallback content.
if (insertionPoint->MatchedNodes().IsEmpty() &&
insertionPoint->HasChildren()) {
// This match will cause the insertion point to drop all fallback
// content and used matched nodes instead. Give up on the optimization
// and just distribute all nodes.
DistributeAllNodes();
MOZ_ASSERT(insertionPoint->MatchedNodes().Contains(aContent));
return insertionPoint;
}
foundInsertionPoint = insertionPoint;
break;
}
}
if (!foundInsertionPoint) {
return nullptr;
}
// Find the index into the insertion point.
nsCOMArray<nsIContent>& matchedNodes = foundInsertionPoint->MatchedNodes();
// Find the appropriate position in the matched node list for the
// newly distributed content.
bool isIndexFound = false;
ExplicitChildIterator childIterator(GetHost());
for (uint32_t i = 0; i < matchedNodes.Length(); i++) {
// Seek through the host's explicit children until the inserted content
// is found or when the current matched node is reached.
if (childIterator.Seek(aContent, matchedNodes[i])) {
// aContent was found before the current matched node.
foundInsertionPoint->InsertMatchedNode(i, aContent);
isIndexFound = true;
break;
}
}
if (!isIndexFound) {
// We have still not found an index in the insertion point,
// thus it must be at the end.
MOZ_ASSERT(childIterator.Seek(aContent, nullptr),
"Trying to match a node that is not a candidate to be matched");
foundInsertionPoint->AppendMatchedNode(aContent);
}
return foundInsertionPoint;
}
const HTMLContentElement*
ShadowRoot::RemoveDistributedNode(nsIContent* aContent)
{
// Find insertion point containing the content and remove the node.
for (HTMLContentElement* insertionPoint : mInsertionPoints) {
if (!insertionPoint->MatchedNodes().Contains(aContent)) {
continue;
}
// Removing the matched node may cause the insertion point to use
// fallback content.
if (insertionPoint->MatchedNodes().Length() == 1 &&
insertionPoint->HasChildren()) {
// Removing the matched node will cause fallback content to be
// used instead. Give up optimization and distribute all nodes.
DistributeAllNodes();
return insertionPoint;
}
insertionPoint->RemoveMatchedNode(aContent);
return insertionPoint;
}
return nullptr;
}
void
ShadowRoot::DistributeAllNodes()
{
// Create node pool.
nsTArray<nsIContent*> nodePool;
ExplicitChildIterator childIterator(GetHost());
for (nsIContent* content = childIterator.GetNextChild(); content;
content = childIterator.GetNextChild()) {
nodePool.AppendElement(content);
}
nsTArray<ShadowRoot*> shadowsToUpdate;
for (HTMLContentElement* insertionPoint : mInsertionPoints) {
insertionPoint->ClearMatchedNodes();
// Assign matching nodes from node pool.
for (uint32_t j = 0; j < nodePool.Length(); j++) {
if (insertionPoint->Match(nodePool[j])) {
insertionPoint->AppendMatchedNode(nodePool[j]);
nodePool.RemoveElementAt(j--);
}
}
// Keep track of instances where the content insertion point is distributed
// (parent of insertion point has a ShadowRoot).
nsIContent* insertionParent = insertionPoint->GetParent();
MOZ_ASSERT(insertionParent, "The only way for an insertion point to be in the"
"mInsertionPoints array is to be a descendant of a"
"ShadowRoot, in which case, it should have a parent");
// If the parent of the insertion point has a ShadowRoot, the nodes distributed
// to the insertion point must be reprojected to the insertion points of the
// parent's ShadowRoot.
ShadowRoot* parentShadow = insertionParent->GetShadowRoot();
if (parentShadow && !shadowsToUpdate.Contains(parentShadow)) {
shadowsToUpdate.AppendElement(parentShadow);
}
}
for (ShadowRoot* shadow : shadowsToUpdate) {
shadow->DistributeAllNodes();
}
//XXX Handle <slot>.
DistributionChanged();
}
@@ -475,13 +322,6 @@ ShadowRoot::IsPooledNode(nsIContent* aContent) const
return true;
}
if (auto* content = HTMLContentElement::FromContentOrNull(container)) {
// Fallback content will end up in pool if its parent is a child of the host.
return content->IsInsertionPoint() &&
content->MatchedNodes().IsEmpty() &&
container->GetParentNode() == host;
}
return false;
}
@@ -497,13 +337,6 @@ ShadowRoot::AttributeChanged(nsIDocument* aDocument,
return;
}
// Attributes may change insertion point matching, find its new distribution.
//
// FIXME(emilio): What about state changes?
if (!RedistributeElement(aElement)) {
return;
}
if (!aElement->IsInComposedDoc()) {
return;
}
@@ -513,52 +346,10 @@ ShadowRoot::AttributeChanged(nsIDocument* aDocument,
return;
}
//XXX optimize this!
shell->DestroyFramesForAndRestyle(aElement);
}
bool
ShadowRoot::RedistributeElement(Element* aElement)
{
auto* oldInsertionPoint = RemoveDistributedNode(aElement);
auto* newInsertionPoint = DistributeSingleNode(aElement);
if (oldInsertionPoint == newInsertionPoint) {
if (oldInsertionPoint) {
if (auto* shadow = oldInsertionPoint->GetParent()->GetShadowRoot()) {
return shadow->RedistributeElement(aElement);
}
}
return false;
}
while (oldInsertionPoint) {
// Handle the case where the parent of the insertion point has a ShadowRoot.
// The node distributed into the insertion point must be reprojected to the
// insertion points of the parent's ShadowRoot.
auto* shadow = oldInsertionPoint->GetParent()->GetShadowRoot();
if (!shadow) {
break;
}
oldInsertionPoint = shadow->RemoveDistributedNode(aElement);
}
while (newInsertionPoint) {
// Handle the case where the parent of the insertion point has a ShadowRoot.
// The node distributed into the insertion point must be reprojected to the
// insertion points of the parent's ShadowRoot.
auto* shadow = newInsertionPoint->GetParent()->GetShadowRoot();
if (!shadow) {
break;
}
newInsertionPoint = shadow->DistributeSingleNode(aElement);
}
return true;
}
void
ShadowRoot::ContentAppended(nsIDocument* aDocument,
nsIContent* aContainer,
@@ -583,31 +374,6 @@ ShadowRoot::ContentInserted(nsIDocument* aDocument,
mInsertionPointChanged = false;
return;
}
// Add insertion point to destination insertion points of fallback content.
if (nsContentUtils::IsContentInsertionPoint(aContainer)) {
HTMLContentElement* content = HTMLContentElement::FromContent(aContainer);
if (content && content->MatchedNodes().IsEmpty()) {
aChild->DestInsertionPoints().AppendElement(aContainer);
}
}
// Watch for new nodes added to the pool because the node
// may need to be added to an insertion point.
if (IsPooledNode(aChild)) {
auto* insertionPoint = DistributeSingleNode(aChild);
while (insertionPoint) {
// Handle the case where the parent of the insertion point has a ShadowRoot.
// The node distributed into the insertion point must be reprojected to the
// insertion points of the parent's ShadowRoot.
auto* parentShadow = insertionPoint->GetParent()->GetShadowRoot();
if (!parentShadow) {
break;
}
insertionPoint = parentShadow->DistributeSingleNode(aChild);
}
}
}
void
@@ -622,34 +388,6 @@ ShadowRoot::ContentRemoved(nsIDocument* aDocument,
mInsertionPointChanged = false;
return;
}
// Clear destination insertion points for removed
// fallback content.
if (nsContentUtils::IsContentInsertionPoint(aContainer)) {
HTMLContentElement* content = HTMLContentElement::FromContent(aContainer);
if (content->MatchedNodes().IsEmpty()) {
aChild->DestInsertionPoints().Clear();
}
}
// Watch for node that is removed from the pool because
// it may need to be removed from an insertion point.
if (IsPooledNode(aChild)) {
auto* insertionPoint = RemoveDistributedNode(aChild);
while (insertionPoint) {
// Handle the case where the parent of the insertion point has a
// ShadowRoot.
//
// The removed node needs to be removed from the insertion points of the
// parent's ShadowRoot.
auto* parentShadow = insertionPoint->GetParent()->GetShadowRoot();
if (!parentShadow) {
break;
}
insertionPoint = parentShadow->RemoveDistributedNode(aChild);
}
}
}
nsresult
-36
View File
@@ -24,7 +24,6 @@ namespace mozilla {
namespace dom {
class Element;
class HTMLContentElement;
class ShadowRootStyleSheetList;
class ShadowRoot final : public DocumentFragment,
@@ -73,28 +72,6 @@ public:
void DistributeAllNodes();
private:
/**
* Distributes a single explicit child of the pool host to the content
* insertion points in this ShadowRoot.
*
* Returns the insertion point the element is distributed to after this call.
*
* Note that this doesn't handle distributing the node in the insertion point
* parent's shadow root.
*/
const HTMLContentElement* DistributeSingleNode(nsIContent* aContent);
/**
* Removes a single explicit child of the pool host from the content
* insertion points in this ShadowRoot.
*
* Returns the old insertion point, if any.
*
* Note that this doesn't handle removing the node in the returned insertion
* point parent's shadow root.
*/
const HTMLContentElement* RemoveDistributedNode(nsIContent* aContent);
/**
* Redistributes a node of the pool, and returns whether the distribution
* changed.
@@ -109,9 +86,6 @@ private:
bool IsPooledNode(nsIContent* aChild) const;
public:
void AddInsertionPoint(HTMLContentElement* aInsertionPoint);
void RemoveInsertionPoint(HTMLContentElement* aInsertionPoint);
void SetInsertionPointChanged() { mInsertionPointChanged = true; }
void SetAssociatedBinding(nsXBLBinding* aBinding) { mAssociatedBinding = aBinding; }
@@ -120,9 +94,6 @@ public:
static ShadowRoot* FromNode(nsINode* aNode);
static void RemoveDestInsertionPoint(nsIContent* aInsertionPoint,
nsTArray<nsIContent*>& aDestInsertionPoints);
// WebIDL methods.
Element* GetElementById(const nsAString& aElementId);
already_AddRefed<nsContentList>
@@ -147,13 +118,6 @@ protected:
ShadowRootMode mMode;
// An array of content insertion points that are a descendant of the ShadowRoot
// sorted in tree order. Insertion points are responsible for notifying
// the ShadowRoot when they are removed or added as a descendant. The insertion
// points are kept alive by the parent node, thus weak references are held
// by the array.
nsTArray<HTMLContentElement*> mInsertionPoints;
nsTHashtable<nsIdentifierMapEntry> mIdentifierMap;
nsXBLPrototypeBinding* mProtoBinding;
+2 -12
View File
@@ -45,7 +45,6 @@
#include "mozilla/dom/FileSystemSecurity.h"
#include "mozilla/dom/HTMLMediaElement.h"
#include "mozilla/dom/HTMLTemplateElement.h"
#include "mozilla/dom/HTMLContentElement.h"
#include "mozilla/dom/ipc/BlobChild.h"
#include "mozilla/dom/ipc/BlobParent.h"
#include "mozilla/dom/Promise.h"
@@ -7036,9 +7035,8 @@ nsContentUtils::IsContentInsertionPoint(nsIContent* aContent)
}
// Check if the content is a web components content insertion point.
HTMLContentElement* contentElement =
HTMLContentElement::FromContent(aContent);
return contentElement && contentElement->IsInsertionPoint();
// XXX handle <slot>?
return false;
}
// static
@@ -7055,14 +7053,6 @@ nsContentUtils::HasDistributedChildren(nsIContent* aContent)
return true;
}
HTMLContentElement* contentEl = HTMLContentElement::FromContent(aContent);
if (contentEl && contentEl->IsInsertionPoint()) {
// Children of a content insertion point are distributed to the
// content insertion point if the content insertion point does
// not match any nodes (fallback content).
return contentEl->MatchedNodes().IsEmpty();
}
return false;
}
-379
View File
@@ -1,379 +0,0 @@
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#include "mozilla/dom/HTMLContentElement.h"
#include "mozilla/dom/HTMLContentElementBinding.h"
#include "mozilla/dom/HTMLUnknownElement.h"
#include "mozilla/dom/NodeListBinding.h"
#include "mozilla/dom/ShadowRoot.h"
#include "mozilla/css/StyleRule.h"
#include "nsGkAtoms.h"
#include "nsStyleConsts.h"
#include "nsIAtom.h"
#include "nsCSSRuleProcessor.h"
#include "nsRuleData.h"
#include "nsRuleProcessorData.h"
#include "nsRuleWalker.h"
#include "nsCSSParser.h"
#include "nsDocument.h"
// Expand NS_IMPL_NS_NEW_HTML_ELEMENT(Content) to add check for web components
// being enabled.
nsGenericHTMLElement*
NS_NewHTMLContentElement(already_AddRefed<mozilla::dom::NodeInfo>&& aNodeInfo,
mozilla::dom::FromParser aFromParser)
{
// When this check is removed, remove the nsDocument.h and
// HTMLUnknownElement.h includes. Also remove nsINode::IsHTMLContentElement.
//
// We have to jump through some hoops to be able to produce both NodeInfo* and
// already_AddRefed<NodeInfo>& for our callees.
RefPtr<mozilla::dom::NodeInfo> nodeInfo(aNodeInfo);
if (!nsDocument::IsWebComponentsEnabled(nodeInfo)) {
already_AddRefed<mozilla::dom::NodeInfo> nodeInfoArg(nodeInfo.forget());
return new mozilla::dom::HTMLUnknownElement(nodeInfoArg);
}
already_AddRefed<mozilla::dom::NodeInfo> nodeInfoArg(nodeInfo.forget());
return new mozilla::dom::HTMLContentElement(nodeInfoArg);
}
using namespace mozilla::dom;
HTMLContentElement::HTMLContentElement(already_AddRefed<mozilla::dom::NodeInfo>& aNodeInfo)
: nsGenericHTMLElement(aNodeInfo), mValidSelector(true), mIsInsertionPoint(false)
{
}
HTMLContentElement::~HTMLContentElement()
{
}
NS_IMPL_CYCLE_COLLECTION_INHERITED(HTMLContentElement,
nsGenericHTMLElement,
mMatchedNodes)
NS_IMPL_ADDREF_INHERITED(HTMLContentElement, Element)
NS_IMPL_RELEASE_INHERITED(HTMLContentElement, Element)
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(HTMLContentElement)
NS_INTERFACE_MAP_END_INHERITING(nsGenericHTMLElement)
NS_IMPL_ELEMENT_CLONE(HTMLContentElement)
JSObject*
HTMLContentElement::WrapNode(JSContext *aCx, JS::Handle<JSObject*> aGivenProto)
{
return HTMLContentElementBinding::Wrap(aCx, this, aGivenProto);
}
nsresult
HTMLContentElement::BindToTree(nsIDocument* aDocument,
nsIContent* aParent,
nsIContent* aBindingParent,
bool aCompileEventHandlers)
{
RefPtr<ShadowRoot> oldContainingShadow = GetContainingShadow();
nsresult rv = nsGenericHTMLElement::BindToTree(aDocument, aParent,
aBindingParent,
aCompileEventHandlers);
NS_ENSURE_SUCCESS(rv, rv);
ShadowRoot* containingShadow = GetContainingShadow();
if (containingShadow && !oldContainingShadow) {
nsINode* parentNode = nsINode::GetParentNode();
while (parentNode && parentNode != containingShadow) {
if (parentNode->IsHTMLContentElement()) {
// Content element in fallback content is not an insertion point.
return NS_OK;
}
parentNode = parentNode->GetParentNode();
}
// If the content element is being inserted into a ShadowRoot,
// add this element to the list of insertion points.
mIsInsertionPoint = true;
containingShadow->AddInsertionPoint(this);
containingShadow->SetInsertionPointChanged();
}
return NS_OK;
}
void
HTMLContentElement::UnbindFromTree(bool aDeep, bool aNullParent)
{
RefPtr<ShadowRoot> oldContainingShadow = GetContainingShadow();
nsGenericHTMLElement::UnbindFromTree(aDeep, aNullParent);
if (oldContainingShadow && !GetContainingShadow() && mIsInsertionPoint) {
oldContainingShadow->RemoveInsertionPoint(this);
// Remove all the matched nodes now that the
// insertion point is no longer an insertion point.
ClearMatchedNodes();
oldContainingShadow->SetInsertionPointChanged();
mIsInsertionPoint = false;
}
}
void
HTMLContentElement::AppendMatchedNode(nsIContent* aContent)
{
mMatchedNodes.AppendElement(aContent);
nsTArray<nsIContent*>& destInsertionPoint = aContent->DestInsertionPoints();
destInsertionPoint.AppendElement(this);
if (mMatchedNodes.Length() == 1) {
// Fallback content gets dropped so we need to updated fallback
// content distribution.
UpdateFallbackDistribution();
}
}
void
HTMLContentElement::UpdateFallbackDistribution()
{
for (nsIContent* child = nsINode::GetFirstChild();
child;
child = child->GetNextSibling()) {
nsTArray<nsIContent*>& destInsertionPoint = child->DestInsertionPoints();
destInsertionPoint.Clear();
if (mMatchedNodes.IsEmpty()) {
destInsertionPoint.AppendElement(this);
}
}
}
void
HTMLContentElement::RemoveMatchedNode(nsIContent* aContent)
{
mMatchedNodes.RemoveElement(aContent);
ShadowRoot::RemoveDestInsertionPoint(this, aContent->DestInsertionPoints());
if (mMatchedNodes.IsEmpty()) {
// Fallback content is activated so we need to update fallback
// content distribution.
UpdateFallbackDistribution();
}
}
void
HTMLContentElement::InsertMatchedNode(uint32_t aIndex, nsIContent* aContent)
{
mMatchedNodes.InsertElementAt(aIndex, aContent);
nsTArray<nsIContent*>& destInsertionPoint = aContent->DestInsertionPoints();
destInsertionPoint.AppendElement(this);
if (mMatchedNodes.Length() == 1) {
// Fallback content gets dropped so we need to updated fallback
// content distribution.
UpdateFallbackDistribution();
}
}
void
HTMLContentElement::ClearMatchedNodes()
{
for (uint32_t i = 0; i < mMatchedNodes.Length(); i++) {
ShadowRoot::RemoveDestInsertionPoint(this, mMatchedNodes[i]->DestInsertionPoints());
}
mMatchedNodes.Clear();
UpdateFallbackDistribution();
}
static bool
IsValidContentSelectors(nsCSSSelector* aSelector)
{
nsCSSSelector* currentSelector = aSelector;
while (currentSelector) {
// Blacklist invalid selector fragments.
if (currentSelector->IsPseudoElement() ||
currentSelector->mPseudoClassList ||
currentSelector->mNegations ||
currentSelector->mOperator) {
return false;
}
currentSelector = currentSelector->mNext;
}
return true;
}
nsresult
HTMLContentElement::AfterSetAttr(int32_t aNamespaceID, nsIAtom* aName,
const nsAttrValue* aValue,
const nsAttrValue* aOldValue, bool aNotify)
{
if (aNamespaceID == kNameSpaceID_None && aName == nsGkAtoms::select) {
if (aValue) {
// Select attribute was updated, the insertion point may match different
// elements.
nsIDocument* doc = OwnerDoc();
nsCSSParser parser(doc->CSSLoader());
mValidSelector = true;
mSelectorList = nullptr;
nsAutoString valueStr;
aValue->ToString(valueStr);
nsresult rv = parser.ParseSelectorString(valueStr,
doc->GetDocumentURI(),
// Bug 11240
0, // XXX get the line number!
getter_Transfers(mSelectorList));
// We don't want to return an exception if parsing failed because
// the spec does not define it as an exception case.
if (NS_SUCCEEDED(rv)) {
// Ensure that all the selectors are valid
nsCSSSelectorList* selectors = mSelectorList;
while (selectors) {
if (!IsValidContentSelectors(selectors->mSelectors)) {
// If we have an invalid selector, we can not match anything.
mValidSelector = false;
mSelectorList = nullptr;
break;
}
selectors = selectors->mNext;
}
}
if (ShadowRoot* containingShadow = GetContainingShadow()) {
containingShadow->DistributeAllNodes();
}
} else {
// The select attribute was removed. This insertion point becomes
// a universal selector.
mValidSelector = true;
mSelectorList = nullptr;
if (ShadowRoot* containingShadow = GetContainingShadow()) {
containingShadow->DistributeAllNodes();
}
}
}
return nsGenericHTMLElement::AfterSetAttr(aNamespaceID, aName, aValue,
aOldValue, aNotify);
}
bool
HTMLContentElement::Match(nsIContent* aContent)
{
if (!mValidSelector) {
return false;
}
if (mSelectorList) {
nsIDocument* doc = OwnerDoc();
ShadowRoot* containingShadow = GetContainingShadow();
nsIContent* host = containingShadow->GetHost();
TreeMatchContext matchingContext(false, nsRuleWalker::eRelevantLinkUnvisited,
doc, TreeMatchContext::eNeverMatchVisited);
doc->FlushPendingLinkUpdates();
matchingContext.SetHasSpecifiedScope();
matchingContext.AddScopeElement(host->AsElement());
if (!aContent->IsElement()) {
return false;
}
return nsCSSRuleProcessor::SelectorListMatches(aContent->AsElement(),
matchingContext,
mSelectorList);
}
return true;
}
already_AddRefed<DistributedContentList>
HTMLContentElement::GetDistributedNodes()
{
RefPtr<DistributedContentList> list = new DistributedContentList(this);
return list.forget();
}
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(DistributedContentList, mParent,
mDistributedNodes)
NS_INTERFACE_TABLE_HEAD(DistributedContentList)
NS_WRAPPERCACHE_INTERFACE_TABLE_ENTRY
NS_INTERFACE_TABLE(DistributedContentList, nsINodeList, nsIDOMNodeList)
NS_INTERFACE_TABLE_TO_MAP_SEGUE_CYCLE_COLLECTION(DistributedContentList)
NS_INTERFACE_MAP_END
NS_IMPL_CYCLE_COLLECTING_ADDREF(DistributedContentList)
NS_IMPL_CYCLE_COLLECTING_RELEASE(DistributedContentList)
DistributedContentList::DistributedContentList(HTMLContentElement* aHostElement)
: mParent(aHostElement)
{
MOZ_COUNT_CTOR(DistributedContentList);
if (aHostElement->IsInsertionPoint()) {
if (aHostElement->MatchedNodes().IsEmpty()) {
// Fallback content.
nsINode* contentNode = aHostElement;
for (nsIContent* content = contentNode->GetFirstChild();
content;
content = content->GetNextSibling()) {
mDistributedNodes.AppendElement(content);
}
} else {
mDistributedNodes.AppendElements(aHostElement->MatchedNodes());
}
}
}
DistributedContentList::~DistributedContentList()
{
MOZ_COUNT_DTOR(DistributedContentList);
}
nsIContent*
DistributedContentList::Item(uint32_t aIndex)
{
return mDistributedNodes.SafeElementAt(aIndex);
}
NS_IMETHODIMP
DistributedContentList::Item(uint32_t aIndex, nsIDOMNode** aReturn)
{
nsIContent* item = Item(aIndex);
if (!item) {
return NS_ERROR_FAILURE;
}
return CallQueryInterface(item, aReturn);
}
NS_IMETHODIMP
DistributedContentList::GetLength(uint32_t* aLength)
{
*aLength = mDistributedNodes.Length();
return NS_OK;
}
int32_t
DistributedContentList::IndexOf(nsIContent* aContent)
{
return mDistributedNodes.IndexOf(aContent);
}
JSObject*
DistributedContentList::WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto)
{
return NodeListBinding::Wrap(aCx, this, aGivenProto);
}
-126
View File
@@ -1,126 +0,0 @@
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#ifndef mozilla_dom_HTMLContentElement_h__
#define mozilla_dom_HTMLContentElement_h__
#include "nsAutoPtr.h"
#include "nsINodeList.h"
#include "nsGenericHTMLElement.h"
struct nsCSSSelectorList;
namespace mozilla {
namespace dom {
class DistributedContentList;
class HTMLContentElement final : public nsGenericHTMLElement
{
public:
explicit HTMLContentElement(already_AddRefed<mozilla::dom::NodeInfo>& aNodeInfo);
// nsISupports
NS_DECL_ISUPPORTS_INHERITED
NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(HTMLContentElement,
nsGenericHTMLElement)
NS_IMPL_FROMCONTENT_HELPER(HTMLContentElement, IsHTMLContentElement())
virtual bool IsHTMLContentElement() const override { return true; }
virtual nsresult Clone(mozilla::dom::NodeInfo *aNodeInfo, nsINode **aResult) const override;
virtual nsIDOMNode* AsDOMNode() override { return this; }
virtual nsresult BindToTree(nsIDocument* aDocument, nsIContent* aParent,
nsIContent* aBindingParent,
bool aCompileEventHandlers) override;
virtual void UnbindFromTree(bool aDeep = true,
bool aNullParent = true) override;
/**
* Returns whether if the selector of this insertion point
* matches the provided content.
*/
bool Match(nsIContent* aContent);
bool IsInsertionPoint() const { return mIsInsertionPoint; }
nsCOMArray<nsIContent>& MatchedNodes() { return mMatchedNodes; }
void AppendMatchedNode(nsIContent* aContent);
void RemoveMatchedNode(nsIContent* aContent);
void InsertMatchedNode(uint32_t aIndex, nsIContent* aContent);
void ClearMatchedNodes();
// WebIDL methods.
already_AddRefed<DistributedContentList> GetDistributedNodes();
void GetSelect(nsAString& aSelect)
{
Element::GetAttr(kNameSpaceID_None, nsGkAtoms::select, aSelect);
}
void SetSelect(const nsAString& aSelect)
{
Element::SetAttr(kNameSpaceID_None, nsGkAtoms::select, aSelect, true);
}
protected:
virtual ~HTMLContentElement();
virtual JSObject* WrapNode(JSContext *aCx, JS::Handle<JSObject*> aGivenProto) override;
/**
* Updates the destination insertion points of the fallback
* content of this insertion point. If there are nodes matched
* to this insertion point, then destination insertion points
* of fallback are cleared, otherwise, this insertion point
* is a destination insertion point.
*/
void UpdateFallbackDistribution();
virtual nsresult AfterSetAttr(int32_t aNamespaceID, nsIAtom* aName,
const nsAttrValue* aValue,
const nsAttrValue* aOldValue,
bool aNotify) override;
/**
* An array of nodes from the ShadowRoot host that match the
* content insertion selector.
*/
nsCOMArray<nsIContent> mMatchedNodes;
nsAutoPtr<nsCSSSelectorList> mSelectorList;
bool mValidSelector;
bool mIsInsertionPoint;
};
class DistributedContentList : public nsINodeList
{
public:
explicit DistributedContentList(HTMLContentElement* aHostElement);
NS_DECL_CYCLE_COLLECTING_ISUPPORTS
NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(DistributedContentList)
// nsIDOMNodeList
NS_DECL_NSIDOMNODELIST
// nsINodeList
virtual nsIContent* Item(uint32_t aIndex) override;
virtual int32_t IndexOf(nsIContent* aContent) override;
virtual nsINode* GetParentObject() override { return mParent; }
virtual JSObject* WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override;
protected:
virtual ~DistributedContentList();
RefPtr<HTMLContentElement> mParent;
nsCOMArray<nsIContent> mDistributedNodes;
};
} // namespace dom
} // namespace mozilla
#endif // mozilla_dom_HTMLContentElement_h__
-2
View File
@@ -52,7 +52,6 @@ EXPORTS.mozilla.dom += [
'HTMLBRElement.h',
'HTMLButtonElement.h',
'HTMLCanvasElement.h',
'HTMLContentElement.h',
'HTMLDataElement.h',
'HTMLDataListElement.h',
'HTMLDetailsElement.h',
@@ -131,7 +130,6 @@ UNIFIED_SOURCES += [
'HTMLBRElement.cpp',
'HTMLButtonElement.cpp',
'HTMLCanvasElement.cpp',
'HTMLContentElement.cpp',
'HTMLDataElement.cpp',
'HTMLDataListElement.cpp',
'HTMLDetailsElement.cpp',
@@ -25,11 +25,7 @@ skip-if = !debug # TestFunctions only applied in debug builds
[test_custom_element_define.html]
[test_custom_element_define_parser.html]
[test_custom_element_template.html]
[test_nested_content_element.html]
[test_dest_insertion_points.html]
[test_fallback_dest_insertion_points.html]
[test_detached_style.html]
[test_dynamic_content_element_matching.html]
[test_document_adoptnode.html]
[test_document_importnode.html]
[test_document_register.html]
@@ -1,73 +0,0 @@
<!DOCTYPE HTML>
<html>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=999999
-->
<head>
<meta charset="utf-8">
<title>Test for Bug 999999</title>
<script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
</head>
<body>
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=999999">Mozilla Bug 999999</a>
<p id="display"></p>
<div id="content">
<div id="shadowhost">
</div>
</div>
<pre id="test">
</pre>
<script type="application/javascript">
/** Test for Bug 999999 **/
var host = document.getElementById("shadowhost");
// Test destination insertion points of node distributed to content element.
var shadowRoot = host.createShadowRoot();
shadowRoot.innerHTML = '<div id="innerhost"><content id="innercontent" select=".red"></content></div>';
var innerContent = shadowRoot.getElementById("innercontent");
var span = document.createElement("span");
span.setAttribute("class", "red blue");
is(host.getDestinationInsertionPoints().length, 0, "Destination insertion points should be empty when not being distributed.");
host.appendChild(span);
is(span.getDestinationInsertionPoints().length, 1, "Destination insertion points should only contain a single content insertion point.");
is(span.getDestinationInsertionPoints()[0], innerContent, "Content element should contain destination insertion point.");
// Test destination insertion points of redistributed node.
var innerHost = shadowRoot.getElementById("innerhost");
var innerShadowRoot = innerHost.createShadowRoot();
innerShadowRoot.innerHTML = '<content id="innerinnercontent" select=".blue"></content>';
var innerInnerContent = innerShadowRoot.getElementById("innerinnercontent");
is(span.getDestinationInsertionPoints().length, 2, "Redistributed node should have 2 destination insertion points.");
is(span.getDestinationInsertionPoints()[1], innerInnerContent, "Nested content insertion point should be in list of destination insertion points.");
// Test destination insertion points after removing reprojection onto second content element.
span.setAttribute("class", "red");
is(span.getDestinationInsertionPoints().length, 1, "Destination insertion points should only contain 1 insertion point after removing reprojection.");
is(span.getDestinationInsertionPoints()[0], innerContent, "First content element should be only insertion point after removing reprojection.");
// Test destination insertion points after removing the projected content from the host.
host.removeChild(span);
is(span.getDestinationInsertionPoints().length, 0, "Destination insertion points should be empty after being removed from the shadow host.");
// Test destination insertion points of distributed content after removing insertion point.
var div = document.createElement("div");
div.setAttribute("class", "red blue");
host.appendChild(div);
is(div.getDestinationInsertionPoints().length, 2, "Div should be distributed into 2 insertion points.");
innerShadowRoot.removeChild(innerInnerContent);
is(div.getDestinationInsertionPoints().length, 1, "Div should be distributed into insertion point in one ShadowRoot.");
is(div.getDestinationInsertionPoints()[0], innerContent, "Destination insertion points should only contain content insertion point in first ShadowRoot.");
</script>
</body>
</html>
@@ -1,50 +0,0 @@
<!DOCTYPE HTML>
<html>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=806506
-->
<head>
<title>Test for dynamic changes to content matching content elements</title>
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
</head>
<body>
<div class="tall" id="bodydiv"></div>
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=806506">Bug 806506</a>
<script>
// Create ShadowRoot.
var elem = document.createElement("div");
var root = elem.createShadowRoot();
var redInsertionPoint = document.createElement("content");
redInsertionPoint.select = "*[data-color=red]";
var blueInsertionPoint = document.createElement("content");
blueInsertionPoint.select = "*[data-color=blue]";
root.appendChild(redInsertionPoint);
root.appendChild(blueInsertionPoint);
is(blueInsertionPoint.getDistributedNodes().length, 0, "Blue insertion point should have no distributed nodes.");
is(redInsertionPoint.getDistributedNodes().length, 0, "Red insertion point should have no distrubted nodes.");
var matchElement = document.createElement("div");
matchElement.setAttribute("data-color", "red");
elem.appendChild(matchElement);
is(blueInsertionPoint.getDistributedNodes().length, 0, "Blue insertion point should have no distributed nodes.");
is(redInsertionPoint.getDistributedNodes().length, 1, "Red insertion point should match recently inserted div.");
matchElement.setAttribute("data-color", "blue");
is(blueInsertionPoint.getDistributedNodes().length, 1, "Blue insertion point should match element after changing attribute value.");
is(redInsertionPoint.getDistributedNodes().length, 0, "Red insertion point should not match element after changing attribute value.");
matchElement.removeAttribute("data-color");
is(blueInsertionPoint.getDistributedNodes().length, 0, "Blue insertion point should have no distributed nodes after removing the matching attribute.");
is(redInsertionPoint.getDistributedNodes().length, 0, "Red insertion point should have no distrubted nodes after removing the matching attribute.");
</script>
</body>
</html>
@@ -1,71 +0,0 @@
<!DOCTYPE HTML>
<html>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=999999
-->
<head>
<meta charset="utf-8">
<title>Test for Bug 999999</title>
<script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
</head>
<body>
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=999999">Mozilla Bug 999999</a>
<p id="display"></p>
<div id="content">
<div id="shadowhost"></div>
</div>
<pre id="test">
</pre>
<script type="application/javascript">
/** Test for Bug 999999 **/
var host = document.getElementById("shadowhost");
// Test destination insertion points of node distributed to content element.
var shadowRoot = host.createShadowRoot();
shadowRoot.innerHTML = '<div id="innerhost"><content id="innercontent"></content></div>';
var fallback = document.createElement("span");
var innerContent = shadowRoot.getElementById("innercontent");
innerContent.appendChild(fallback);
is(fallback.getDestinationInsertionPoints().length, 1, "Active fallback content should be distributed to insertion point.");
is(fallback.getDestinationInsertionPoints()[0], innerContent, "Insertion point should be in list of destination insertion points.");
// Test destination insertion points of reprojected fallback content.
var innerHost = shadowRoot.getElementById("innerhost");
var innerShadowRoot = innerHost.createShadowRoot();
innerShadowRoot.innerHTML = '<content id="innerinnercontent"></content>';
var innerInnerContent = innerShadowRoot.getElementById("innerinnercontent");
is(fallback.getDestinationInsertionPoints().length, 2, "Fallback content should have been distributed into parent and reprojected into another insertion point.");
is(fallback.getDestinationInsertionPoints()[1], innerInnerContent, "Destination insertion points should contain content element to which the node was reprojected.");
// Test destination insertion points of fallback content that was dropped due to content element matching a node in the host.
var span = document.createElement("span");
host.appendChild(span);
is(fallback.getDestinationInsertionPoints().length, 0, "After dropping insertion points, fallback content should not have any nodes in destination insertion points list.");
// Test destination insertion points of fallback content after reactivating by dropping matched content on host.
host.removeChild(span);
is(fallback.getDestinationInsertionPoints().length, 2, "Fallback content should have 2 destination insertion points after being reactivated.");
is(fallback.getDestinationInsertionPoints()[0], innerContent, "First destination insertion point should be the parent content");
is(fallback.getDestinationInsertionPoints()[1], innerInnerContent, "Second destination insertion point should be the content to which the node is reprojected.");
// Test destination insertion points of fallback content after removed from the tree.
innerContent.removeChild(fallback);
is(fallback.getDestinationInsertionPoints().length, 0, "Fallback content is no longer fallback content, destination insertion points should be empty.");
// Test destination insertion points of child of non-insertion point content element.
var notInsertionPointContent = document.createElement("content");
var notFallback = document.createElement("span");
notInsertionPointContent.appendChild(notFallback);
is(notFallback.getDestinationInsertionPoints().length, 0, "Child of non-insertion point content should not be distributed to any nodes.");
</script>
</body>
</html>
@@ -1,127 +0,0 @@
<!DOCTYPE HTML>
<html>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=806506
-->
<head>
<title>Test for HTMLContent element</title>
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
</head>
<body>
<div id="grabme"></div>
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=806506">Bug 806506</a>
<script>
/**
* Constructs a node with a nested ShadowRoot with the following structure:
* <span> - - - - - - - - - - <ShadowRoot>
* <span> <span> - - - - - - - - - - <ShadowRoot>
* id=one id=four <span>
* data-color=red data-color=orange id=eleven
* <span> <span> <content>
* id=two id=five id=twelve
* data-color=blue data-color=purple select=secondSelect
* <span> <content> <span>
* id=three id=six id=thirteen
* data-color=green select=firstSelect
* <span>
* id=seven
* <content>
* id=eight
* <span>
* id=nine
* <span>
* id=ten
* data-color=grey
*/
function constructTree(firstSelect, secondSelect) {
var rootSpan = document.createElement("span");
rootSpan.innerHTML = '<span id="one" data-color="red"></span><span id="two" data-color="blue"></span><span id="three" data-color="green"></span>';
var firstShadow = rootSpan.createShadowRoot();
firstShadow.innerHTML = '<span id="four" data-color="orange"><span id="five" data-color="purple"></span><content id="six" select="' + firstSelect + '"><span id="seven"></span><content id="eight"></content><span id="nine"></span></content><span id="ten"></span></span>';
var secondShadow = firstShadow.firstChild.createShadowRoot();
secondShadow.innerHTML = '<span id="eleven"></span><content id="twelve" select="' + secondSelect + '"></content><span id="thirteen"></span>';
return rootSpan;
}
// Create a tree with content that matches on everything and check node distribution.
var allSpan = constructTree("*", "*");
var firstContent = allSpan.shadowRoot.getElementById("six");
var firstDistNodes = firstContent.getDistributedNodes();
is(firstDistNodes.length, 3, "Universal selector should match all nodes.");
// Check the order of the distributed nodes.
is(firstDistNodes.item(0).id, "one", "First distributed node should have id of 'one'");
is(firstDistNodes.item(1).id, "two", "Second distributed node should have id of 'two'");
is(firstDistNodes.item(2).id, "three", "Third distributed node should have id of 'three'");
var secondContent = allSpan.shadowRoot.firstChild.shadowRoot.getElementById("twelve");
var secondDistNodes = secondContent.getDistributedNodes();
is(secondDistNodes.length, 5, "Universial selector should match all nodes including those distributed into content.");
// Check the order of the distribute nodes.
is(secondDistNodes.item(0).id, "five", "First distributed node should have id of 'five'");
is(secondDistNodes.item(1).id, "one", "Second distributed (reprojected) node should have id of 'one'");
is(secondDistNodes.item(2).id, "two", "Third distributed (reprojected) node should have id of 'two'");
is(secondDistNodes.item(3).id, "three", "Fourth distributed (reprojected) node should have id of 'three'");
is(secondDistNodes.item(4).id, "ten", "Fifth distributed node should have id of 'ten'");
// Append an element after id=two and make sure that it is inserted into the corrent
// position in the insertion points.
var additionalSpan = document.createElement("span");
additionalSpan.id = "additional";
// Insert the additional span in the third position, before the span with id=three.
allSpan.insertBefore(additionalSpan, allSpan.childNodes.item(2));
firstDistNodes = firstContent.getDistributedNodes();
secondDistNodes = secondContent.getDistributedNodes();
is(firstDistNodes.length, 4, "First insertion point should match one more node.");
is(firstDistNodes.item(2).id, "additional", "Additional span should have been inserted into the third position of the first insertion point.");
is(secondDistNodes.length, 6, "Second insertion point should match one more node.");
is(secondDistNodes.item(3).id, "additional", "Additional span should have been inserted into the fourth position of the second insertion point.");
function nodeListDoesNotContain(nodeList, element) {
for (var i = 0; i < nodeList.length; i++) {
if (nodeList[i] == element) {
return false;
}
}
return true;
}
// Remove the span with id=one and check that it is removed from all insertion points.
allSpan = constructTree("*", "*");
var spanOne = allSpan.firstChild;
allSpan.removeChild(spanOne);
firstContent = allSpan.shadowRoot.getElementById("six");
ok(nodeListDoesNotContain(firstContent.getDistributedNodes(), spanOne), "Child removed from host should not appear in insertion point node list.");
secondContent = allSpan.shadowRoot.firstChild.shadowRoot.getElementById("twelve");
ok(nodeListDoesNotContain(secondContent.getDistributedNodes(), spanOne), "Child removed from host should not appear in nested insertion point node list.");
// Make sure <content> in fallback content is inactive.
// First insertion point will not match anything and will use fallback content.
allSpan = constructTree("#nomatch", "*");
var fallbackInsertionPoint = allSpan.shadowRoot.getElementById("eight");
is(fallbackInsertionPoint.getDistributedNodes().length, 0, "Insertion points in default content should be inactive.");
// Insertion points with non-universal selectors.
allSpan = constructTree("span[data-color=blue]", "*");
firstContent = allSpan.shadowRoot.getElementById("six");
is(firstContent.getDistributedNodes().length, 1, "Insertion point selector should only match one node.");
is(firstContent.getDistributedNodes()[0].dataset.color, "blue", "Projected node should match selector.");
secondContent = allSpan.shadowRoot.firstChild.shadowRoot.getElementById("twelve");
is(secondContent.getDistributedNodes().length, 3, "Second insertion point should match two children and one reprojected node.");
is(secondContent.getDistributedNodes()[1].dataset.color, "blue", "Projected node should match selector.");
allSpan = constructTree("span[data-color=blue]", "span[data-color=blue]");
firstContent = allSpan.shadowRoot.getElementById("six");
is(firstContent.getDistributedNodes().length, 1, "Insertion point selector should only match one node.");
is(firstContent.getDistributedNodes()[0].dataset.color, "blue", "Projected node should match selector.");
secondContent = allSpan.shadowRoot.firstChild.shadowRoot.getElementById("twelve");
is(secondContent.getDistributedNodes().length, 1, "Insertion point should only match reprojected node.");
is(secondContent.getDistributedNodes()[0].dataset.color, "blue", "Projected node should match selector.");
// Make sure that dynamically appended default content will get distributed.
</script>
</body>
</html>
-20
View File
@@ -1,20 +0,0 @@
/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/.
*
* The origin of this IDL file is
* https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html
*
* © Copyright 2004-2011 Apple Computer, Inc., Mozilla Foundation, and
* Opera Software ASA. You are granted a license to use, reproduce
* and create derivative works of this document.
*/
[Func="nsDocument::IsWebComponentsEnabled"]
interface HTMLContentElement : HTMLElement
{
attribute DOMString select;
NodeList getDistributedNodes();
};
-1
View File
@@ -177,7 +177,6 @@ WEBIDL_FILES = [
'HTMLButtonElement.webidl',
'HTMLCanvasElement.webidl',
'HTMLCollection.webidl',
'HTMLContentElement.webidl',
'HTMLDataElement.webidl',
'HTMLDataListElement.webidl',
'HTMLDetailsElement.webidl',
-1
View File
@@ -634,7 +634,6 @@ static const ElementInfo kElements[eHTMLTag_userdefined] = {
GROUP_TABLE_CONTENT | GROUP_COLGROUP_CONTENT,
GROUP_NONE),
ELEM(colgroup, true, false, GROUP_NONE, GROUP_COLGROUP_CONTENT),
ELEM(content, true, false, GROUP_NONE, GROUP_INLINE_ELEMENT),
ELEM(data, true, false, GROUP_PHRASE, GROUP_INLINE_ELEMENT),
ELEM(datalist,
true,
@@ -237,6 +237,8 @@ addLoadEvent(function() {
testFunc(walkerAnon, "previousNode", $("display"), "step back to root (anon)");
testFunc(walkerAnon, "previousNode", null, "step back past root (anon)");
//XXXsmaug update this test for Shadow DOM v1! bug 1421539
/*if (Element.prototype.createShadowRoot) {
var shadowdiv = document.querySelector('#test-shadow');
var shadowRoot = shadowdiv.createShadowRoot();
var h = document.createElement("header");
@@ -266,6 +268,7 @@ addLoadEvent(function() {
SimpleTest.finish();
});
}*/
]]>
</script>
+1 -1
View File
@@ -1,3 +1,3 @@
== legend.html legend-ref.html
fuzzy-if(skiaContent,1,7) pref(dom.webcomponents.enabled,true) == shadow-dom.html shadow-dom-ref.html
#bug 1418002 fuzzy-if(skiaContent,1,7) pref(dom.webcomponents.enabled,true) == shadow-dom.html shadow-dom-ref.html
== 1273433.html 1273433-ref.html
+5 -5
View File
@@ -3,13 +3,13 @@ pref(dom.webcomponents.enabled,true) == basic-shadow-1.html basic-shadow-1-ref.h
pref(dom.webcomponents.enabled,true) == basic-shadow-2.html basic-shadow-2-ref.html
pref(dom.webcomponents.enabled,true) == basic-shadow-3.html basic-shadow-3-ref.html
pref(dom.webcomponents.enabled,true) == basic-shadow-4.html basic-shadow-4-ref.html
pref(dom.webcomponents.enabled,true) == basic-insertion-point-1.html basic-insertion-point-1-ref.html
pref(dom.webcomponents.enabled,true) == basic-insertion-point-2.html basic-insertion-point-2-ref.html
#bug 1421542 pref(dom.webcomponents.enabled,true) == basic-insertion-point-1.html basic-insertion-point-1-ref.html
#bug 1421542 pref(dom.webcomponents.enabled,true) == basic-insertion-point-2.html basic-insertion-point-2-ref.html
pref(dom.webcomponents.enabled,true) == fallback-content-1.html fallback-content-1-ref.html
pref(dom.webcomponents.enabled,true) == remove-insertion-point-1.html remove-insertion-point-1-ref.html
pref(dom.webcomponents.enabled,true) == nested-insertion-point-1.html nested-insertion-point-1-ref.html
pref(dom.webcomponents.enabled,true) == update-dist-node-descendants-1.html update-dist-node-descendants-1-ref.html
#bug 1421542 pref(dom.webcomponents.enabled,true) == nested-insertion-point-1.html nested-insertion-point-1-ref.html
#bug 1421542 pref(dom.webcomponents.enabled,true) == update-dist-node-descendants-1.html update-dist-node-descendants-1-ref.html
pref(dom.webcomponents.enabled,true) == input-transition-1.html input-transition-1-ref.html
pref(dom.webcomponents.enabled,true) == dynamic-insertion-point-distribution-1.html dynamic-insertion-point-distribution-1-ref.html
#bug 1421542 pref(dom.webcomponents.enabled,true) == dynamic-insertion-point-distribution-1.html dynamic-insertion-point-distribution-1-ref.html
pref(dom.webcomponents.enabled,true) == dynamic-insertion-point-distribution-2.html dynamic-insertion-point-distribution-2-ref.html
pref(dom.webcomponents.enabled,true) == remove-append-shadow-host-1.html remove-append-shadow-host-1-ref.html
@@ -1987,10 +1987,6 @@ public final class ElementName
// CPPONLY: NS_NewHTMLUnknownElement,
// CPPONLY: NS_NewSVGUnknownElement,
TreeBuilder.OTHER);
public static final ElementName CONTENT = new ElementName("content", "content",
// CPPONLY: NS_NewHTMLContentElement,
// CPPONLY: NS_NewSVGUnknownElement,
TreeBuilder.OTHER);
public static final ElementName GT = new ElementName("gt", "gt",
// CPPONLY: NS_NewHTMLUnknownElement,
// CPPONLY: NS_NewSVGUnknownElement,
@@ -2277,14 +2273,14 @@ public final class ElementName
FIELDSET,
DATA,
LI,
COMPLEXES,
CANVAS,
QUOTIENT,
PRE,
ARTICLE,
DIALOG,
ARCTAN,
LISTENER,
RATIONALS,
REALS,
MROOT,
MROW,
GEQ,
@@ -2296,9 +2292,9 @@ public final class ElementName
INTERVAL,
MN,
BR,
POWER,
MMULTISCRIPTS,
CONTENT,
NOTANUMBER,
MPRESCRIPTS,
CARTESIANPRODUCT,
INTERSECT,
RT,
SCRIPT,
@@ -2321,11 +2317,11 @@ public final class ElementName
OPTION,
MALIGNGROUP,
FECOMPONENTTRANSFER,
MERROR,
VECTOR,
IMPLIES,
PRIMES,
APPLET,
MUNDEROVER,
SELECTOR,
EXISTS,
NATURALNUMBERS,
DT,
EMPTYSET,
FEPOINTLIGHT,
LOWLIMIT,
@@ -2371,16 +2367,16 @@ public final class ElementName
OPTGROUP,
CENTER,
FEGAUSSIANBLUR,
MOVER,
NOBR,
SOLIDCOLOR,
ADDRESS,
DETAILS,
MS,
NOFRAMES,
PLUS,
TIMES,
BASEFONT,
METER,
MLABELEDTR,
TR,
ARCCOS,
DEFS,
INTEGERS,
MINUS,
PROGRESS,
SEMANTICS,
ARCCOT,
DETERMINANT,
FONT_FACE_FORMAT,
FEOFFSET,
@@ -2472,25 +2468,25 @@ public final class ElementName
FOOTER,
HANDLER,
MARKER,
MUNDEROVER,
MLABELEDTR,
NOTANUMBER,
TR,
SELECTOR,
ARCCOS,
CANVAS,
DEFS,
EXISTS,
INTEGERS,
MPRESCRIPTS,
MINUS,
NATURALNUMBERS,
PROGRESS,
REALS,
SEMANTICS,
DT,
ARCCOT,
CARTESIANPRODUCT,
MOVER,
MERROR,
NOBR,
POWER,
SOLIDCOLOR,
VECTOR,
ADDRESS,
COMPLEXES,
DETAILS,
IMPLIES,
MS,
MMULTISCRIPTS,
NOFRAMES,
PRIMES,
PLUS,
RATIONALS,
TIMES,
APPLET,
BASEFONT,
GT,
DATALIST,
EQUIVALENT,
@@ -2672,7 +2668,6 @@ public final class ElementName
HEADER,
OR,
MUNDER,
METER,
};
private final static int[] ELEMENT_HASHES = {
1909280949,
@@ -2680,14 +2675,14 @@ public final class ElementName
2001349704,
1681770564,
1818230786,
1983002201,
1982935782,
2007257240,
58773795,
1747176599,
1782357526,
1897999926,
1970938456,
1990969577,
1990969429,
2005181733,
2055514836,
54061139,
@@ -2699,9 +2694,9 @@ public final class ElementName
1868641064,
1902641154,
1963982850,
1973040373,
1988486813,
1999917383,
1971981018,
1988486811,
1999745104,
2002882873,
2005925890,
2008340774,
@@ -2724,11 +2719,11 @@ public final class ElementName
1905563974,
1938171179,
1967788867,
1971628838,
1976348214,
1986140359,
1989812374,
1998724870,
1971467002,
1974775352,
1984294038,
1988972590,
1998585858,
2000825752,
2001392796,
2004557976,
@@ -2774,16 +2769,16 @@ public final class ElementName
1939219752,
1966223078,
1968053806,
1971466997,
1971938532,
1974771450,
1982173479,
1983633431,
1986527234,
1988763672,
1990074116,
1991909525,
1999397992,
1971465813,
1971703386,
1973420034,
1982106678,
1983533124,
1986351224,
1988502165,
1990037800,
1991350601,
1998883894,
2000439531,
2001281328,
2001349736,
@@ -2875,25 +2870,25 @@ public final class ElementName
1967795958,
1968840263,
1971461414,
1971467002,
1971703386,
1971981018,
1973420034,
1974775352,
1982106678,
1982935782,
1983533124,
1984294038,
1986351224,
1988486811,
1988502165,
1988972590,
1990037800,
1990969429,
1991350601,
1998585858,
1998883894,
1999745104,
1971466997,
1971628838,
1971938532,
1973040373,
1974771450,
1976348214,
1982173479,
1983002201,
1983633431,
1986140359,
1986527234,
1988486813,
1988763672,
1989812374,
1990074116,
1990969577,
1991909525,
1998724870,
1999397992,
2000158722,
2000525512,
2000965834,
@@ -3075,6 +3070,5 @@ public final class ElementName
1968836118,
1970798594,
1971457766,
1971465813,
};
}
+41 -45
View File
@@ -416,7 +416,6 @@ nsHtml5ElementName* nsHtml5ElementName::ELT_APPLET = nullptr;
nsHtml5ElementName* nsHtml5ElementName::ELT_ARCCOT = nullptr;
nsHtml5ElementName* nsHtml5ElementName::ELT_BASEFONT = nullptr;
nsHtml5ElementName* nsHtml5ElementName::ELT_CARTESIANPRODUCT = nullptr;
nsHtml5ElementName* nsHtml5ElementName::ELT_CONTENT = nullptr;
nsHtml5ElementName* nsHtml5ElementName::ELT_GT = nullptr;
nsHtml5ElementName* nsHtml5ElementName::ELT_DETERMINANT = nullptr;
nsHtml5ElementName* nsHtml5ElementName::ELT_DATALIST = nullptr;
@@ -488,7 +487,7 @@ nsHtml5ElementName* nsHtml5ElementName::ELT_RUBY = nullptr;
nsHtml5ElementName* nsHtml5ElementName::ELT_SUMMARY = nullptr;
nsHtml5ElementName* nsHtml5ElementName::ELT_TBODY = nullptr;
nsHtml5ElementName** nsHtml5ElementName::ELEMENT_NAMES = 0;
static int32_t const ELEMENT_HASHES_DATA[] = { 1909280949, 1753057319, 2001349704, 1681770564, 1818230786, 1983002201, 2007257240, 58773795, 1747176599, 1782357526, 1897999926, 1970938456, 1990969577, 2005181733, 2055514836, 54061139, 62390273, 1730150402, 1749395095, 1756625221, 1798693940, 1868641064, 1902641154, 1963982850, 1973040373, 1988486813, 1999917383, 2002882873, 2005925890, 2008340774, 2082727685, 51965171, 57200451, 60350803, 69730305, 1703292116, 1733890180, 1748355193, 1749813541, 1754634617, 1763839627, 1797540167, 1805647874, 1857622310, 1881498736, 1899272519, 1905563974, 1938171179, 1967788867, 1971628838, 1976348214, 1986140359, 1989812374, 1998724870, 2000825752, 2001392796, 2004557976, 2005543977, 2006560839, 2008125638, 2009706573, 2068523853, 2087049448, 51434643, 52488851, 56151587, 57210387, 59826259, 60354131, 63438849, 926941186, 1686489160, 1715300574, 1732381397, 1737099991, 1748100148, 1748642422, 1749715159, 1751288021, 1753467414, 1755158905, 1757259017, 1771722827, 1786534215, 1797645367, 1803929812, 1807501636, 1853642948, 1865773108, 1873350948, 1887579800, 1898223949, 1900544002, 1904285766, 1907435316, 1925844629, 1939219752, 1966223078, 1968053806, 1971466997, 1971938532, 1974771450, 1982173479, 1983633431, 1986527234, 1988763672, 1990074116, 1991909525, 1999397992, 2000439531, 2001281328, 2001349736, 2001495140, 2003183333, 2004719812, 2005279787, 2005719336, 2006036556, 2006896969, 2007781534, 2008165414, 2008994116, 2041712436, 2060065124, 2070023911, 2085266636, 2092255447, 50910499, 51957043, 52485715, 53012355, 55110883, 56680499, 57206291, 57732851, 59768833, 60345427, 60352083, 61395251, 62973651, 67633153, 893386754, 960495618, 1682547543, 1689922072, 1713515574, 1716349149, 1731545140, 1733076167, 1736576231, 1740181637, 1747814436, 1748228205, 1748607578, 1748879564, 1749656156, 1749801286, 1749917205, 1751493207, 1753343188, 1753588936, 1755076808, 1756474198, 1757146773, 1757293380, 1766632184, 1773808452, 1783388497, 1797361975, 1797585096, 1798677556, 1803876550, 1805233752, 1806806678, 1813512194, 1818755074, 1854228698, 1864368130, 1867237670, 1870268949, 1874102998, 1881669634, 1889085973, 1898223945, 1898971138, 1899694294, 1901940917, 1903761465, 1904515399, 1906135367, 1907959605, 1919418370, 1934172497, 1938173140, 1941221172, 1965334268, 1967128578, 1967795958, 1968840263, 1971461414, 1971467002, 1971703386, 1971981018, 1973420034, 1974775352, 1982106678, 1982935782, 1983533124, 1984294038, 1986351224, 1988486811, 1988502165, 1988972590, 1990037800, 1990969429, 1991350601, 1998585858, 1998883894, 1999745104, 2000158722, 2000525512, 2000965834, 2001309869, 2001349720, 2001392795, 2001392798, 2002780162, 2003062853, 2004557973, 2004635806, 2005160150, 2005231925, 2005324101, 2005543979, 2005766372, 2006028454, 2006329158, 2006592552, 2006974466, 2007601444, 2007803172, 2008133709, 2008325940, 2008851557, 2009276567, 2021937364, 2051837468, 2055515017, 2066000646, 2068523856, 2072193862, 2083120164, 2087012585, 2091479332, 2092557349, 50908899, 50916387, 51438659, 51961587, 51965683, 52486755, 52490899, 54054451, 55104723, 55111395, 56677619, 56682579, 57205395, 57207619, 57731155, 57733651, 59244545, 59821379, 60345171, 60347747, 60351123, 60352339, 60875283, 61925907, 62450211, 62974707, 67108865, 68681729, 876609538, 910163970, 943718402, 1679960596, 1682186266, 1685703382, 1686491348, 1699324759, 1703936002, 1713736758, 1715310660, 1719741029, 1730965751, 1732069431, 1733054663, 1733372532, 1736200310, 1736576583, 1738539010, 1747048757, 1747306711, 1747838298, 1748225318, 1748346119, 1748359220, 1748621670, 1748846791, 1749272732, 1749649513, 1749673195, 1749723735, 1749813486, 1749905526, 1749932347, 1751386406, 1752979652, 1753319686, 1753362711, 1753479494, 1754031332, 1754894485, 1755148615, 1756098852, 1756600614, 1757137429, 1757157700, 1757268168, 1758044696, 1765431364, 1766992520, 1773295687, 1781815495, 1783210839, 1783388498, 1790207270, 1797368887, 1797544247, 1797628983, 1798417460, 1798686984, 1800730821, 1803876557, 1803929861, 1805502724, 1806799156, 1806981428, 1807599880, 1817013469, 1818700314, 1820327938, 1854228692, 1854245076, 1857653029, 1865714391, 1867061545, 1868312196, 1870135298, 1873281026, 1874053333, 1881288348, 1881613047, 1884120164, 1887743720, 1897398274, 1898130486, 1898223946, 1898753862, 1899170008, 1899272521, 1899796819, 1900845386, 1902116866, 1903302038, 1904283860, 1904412884, 1904946933, 1906087319, 1907085604, 1907661127, 1908709605, 1914900309, 1925049415, 1932928296, 1935549734, 1938172967, 1938817026, 1941178676, 1948778498, 1965115924, 1965634084, 1966386470, 1967760215, 1967795910, 1967957189, 1968836118, 1970798594, 1971457766, 1971465813 };
static int32_t const ELEMENT_HASHES_DATA[] = { 1909280949, 1753057319, 2001349704, 1681770564, 1818230786, 1982935782, 2007257240, 58773795, 1747176599, 1782357526, 1897999926, 1970938456, 1990969429, 2005181733, 2055514836, 54061139, 62390273, 1730150402, 1749395095, 1756625221, 1798693940, 1868641064, 1902641154, 1963982850, 1971981018, 1988486811, 1999745104, 2002882873, 2005925890, 2008340774, 2082727685, 51965171, 57200451, 60350803, 69730305, 1703292116, 1733890180, 1748355193, 1749813541, 1754634617, 1763839627, 1797540167, 1805647874, 1857622310, 1881498736, 1899272519, 1905563974, 1938171179, 1967788867, 1971467002, 1974775352, 1984294038, 1988972590, 1998585858, 2000825752, 2001392796, 2004557976, 2005543977, 2006560839, 2008125638, 2009706573, 2068523853, 2087049448, 51434643, 52488851, 56151587, 57210387, 59826259, 60354131, 63438849, 926941186, 1686489160, 1715300574, 1732381397, 1737099991, 1748100148, 1748642422, 1749715159, 1751288021, 1753467414, 1755158905, 1757259017, 1771722827, 1786534215, 1797645367, 1803929812, 1807501636, 1853642948, 1865773108, 1873350948, 1887579800, 1898223949, 1900544002, 1904285766, 1907435316, 1925844629, 1939219752, 1966223078, 1968053806, 1971465813, 1971703386, 1973420034, 1982106678, 1983533124, 1986351224, 1988502165, 1990037800, 1991350601, 1998883894, 2000439531, 2001281328, 2001349736, 2001495140, 2003183333, 2004719812, 2005279787, 2005719336, 2006036556, 2006896969, 2007781534, 2008165414, 2008994116, 2041712436, 2060065124, 2070023911, 2085266636, 2092255447, 50910499, 51957043, 52485715, 53012355, 55110883, 56680499, 57206291, 57732851, 59768833, 60345427, 60352083, 61395251, 62973651, 67633153, 893386754, 960495618, 1682547543, 1689922072, 1713515574, 1716349149, 1731545140, 1733076167, 1736576231, 1740181637, 1747814436, 1748228205, 1748607578, 1748879564, 1749656156, 1749801286, 1749917205, 1751493207, 1753343188, 1753588936, 1755076808, 1756474198, 1757146773, 1757293380, 1766632184, 1773808452, 1783388497, 1797361975, 1797585096, 1798677556, 1803876550, 1805233752, 1806806678, 1813512194, 1818755074, 1854228698, 1864368130, 1867237670, 1870268949, 1874102998, 1881669634, 1889085973, 1898223945, 1898971138, 1899694294, 1901940917, 1903761465, 1904515399, 1906135367, 1907959605, 1919418370, 1934172497, 1938173140, 1941221172, 1965334268, 1967128578, 1967795958, 1968840263, 1971461414, 1971466997, 1971628838, 1971938532, 1973040373, 1974771450, 1976348214, 1982173479, 1983002201, 1983633431, 1986140359, 1986527234, 1988486813, 1988763672, 1989812374, 1990074116, 1990969577, 1991909525, 1998724870, 1999397992, 2000158722, 2000525512, 2000965834, 2001309869, 2001349720, 2001392795, 2001392798, 2002780162, 2003062853, 2004557973, 2004635806, 2005160150, 2005231925, 2005324101, 2005543979, 2005766372, 2006028454, 2006329158, 2006592552, 2006974466, 2007601444, 2007803172, 2008133709, 2008325940, 2008851557, 2009276567, 2021937364, 2051837468, 2055515017, 2066000646, 2068523856, 2072193862, 2083120164, 2087012585, 2091479332, 2092557349, 50908899, 50916387, 51438659, 51961587, 51965683, 52486755, 52490899, 54054451, 55104723, 55111395, 56677619, 56682579, 57205395, 57207619, 57731155, 57733651, 59244545, 59821379, 60345171, 60347747, 60351123, 60352339, 60875283, 61925907, 62450211, 62974707, 67108865, 68681729, 876609538, 910163970, 943718402, 1679960596, 1682186266, 1685703382, 1686491348, 1699324759, 1703936002, 1713736758, 1715310660, 1719741029, 1730965751, 1732069431, 1733054663, 1733372532, 1736200310, 1736576583, 1738539010, 1747048757, 1747306711, 1747838298, 1748225318, 1748346119, 1748359220, 1748621670, 1748846791, 1749272732, 1749649513, 1749673195, 1749723735, 1749813486, 1749905526, 1749932347, 1751386406, 1752979652, 1753319686, 1753362711, 1753479494, 1754031332, 1754894485, 1755148615, 1756098852, 1756600614, 1757137429, 1757157700, 1757268168, 1758044696, 1765431364, 1766992520, 1773295687, 1781815495, 1783210839, 1783388498, 1790207270, 1797368887, 1797544247, 1797628983, 1798417460, 1798686984, 1800730821, 1803876557, 1803929861, 1805502724, 1806799156, 1806981428, 1807599880, 1817013469, 1818700314, 1820327938, 1854228692, 1854245076, 1857653029, 1865714391, 1867061545, 1868312196, 1870135298, 1873281026, 1874053333, 1881288348, 1881613047, 1884120164, 1887743720, 1897398274, 1898130486, 1898223946, 1898753862, 1899170008, 1899272521, 1899796819, 1900845386, 1902116866, 1903302038, 1904283860, 1904412884, 1904946933, 1906087319, 1907085604, 1907661127, 1908709605, 1914900309, 1925049415, 1932928296, 1935549734, 1938172967, 1938817026, 1941178676, 1948778498, 1965115924, 1965634084, 1966386470, 1967760215, 1967795910, 1967957189, 1968836118, 1970798594, 1971457766 };
staticJArray<int32_t,int32_t> nsHtml5ElementName::ELEMENT_HASHES = { ELEMENT_HASHES_DATA, MOZ_ARRAY_LENGTH(ELEMENT_HASHES_DATA) };
void
nsHtml5ElementName::initializeStatics()
@@ -824,7 +823,6 @@ nsHtml5ElementName::initializeStatics()
ELT_ARCCOT = new nsHtml5ElementName(nsHtml5Atoms::arccot, nsHtml5Atoms::arccot, NS_NewHTMLUnknownElement, NS_NewSVGUnknownElement, nsHtml5TreeBuilder::OTHER);
ELT_BASEFONT = new nsHtml5ElementName(nsHtml5Atoms::basefont, nsHtml5Atoms::basefont, NS_NewHTMLElement, NS_NewSVGUnknownElement, nsHtml5TreeBuilder::LINK_OR_BASEFONT_OR_BGSOUND | SPECIAL);
ELT_CARTESIANPRODUCT = new nsHtml5ElementName(nsHtml5Atoms::cartesianproduct, nsHtml5Atoms::cartesianproduct, NS_NewHTMLUnknownElement, NS_NewSVGUnknownElement, nsHtml5TreeBuilder::OTHER);
ELT_CONTENT = new nsHtml5ElementName(nsHtml5Atoms::content, nsHtml5Atoms::content, NS_NewHTMLContentElement, NS_NewSVGUnknownElement, nsHtml5TreeBuilder::OTHER);
ELT_GT = new nsHtml5ElementName(nsHtml5Atoms::gt, nsHtml5Atoms::gt, NS_NewHTMLUnknownElement, NS_NewSVGUnknownElement, nsHtml5TreeBuilder::OTHER);
ELT_DETERMINANT = new nsHtml5ElementName(nsHtml5Atoms::determinant, nsHtml5Atoms::determinant, NS_NewHTMLUnknownElement, NS_NewSVGUnknownElement, nsHtml5TreeBuilder::OTHER);
ELT_DATALIST = new nsHtml5ElementName(nsHtml5Atoms::datalist, nsHtml5Atoms::datalist, NS_NewHTMLDataListElement, NS_NewSVGUnknownElement, nsHtml5TreeBuilder::OTHER);
@@ -895,20 +893,20 @@ nsHtml5ElementName::initializeStatics()
ELT_RUBY = new nsHtml5ElementName(nsHtml5Atoms::ruby, nsHtml5Atoms::ruby, NS_NewHTMLElement, NS_NewSVGUnknownElement, nsHtml5TreeBuilder::RUBY_OR_SPAN_OR_SUB_OR_SUP_OR_VAR);
ELT_SUMMARY = new nsHtml5ElementName(nsHtml5Atoms::summary, nsHtml5Atoms::summary, NS_NewHTMLSummaryElement, NS_NewSVGUnknownElement, nsHtml5TreeBuilder::ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIALOG_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_MAIN_OR_NAV_OR_SECTION_OR_SUMMARY | SPECIAL);
ELT_TBODY = new nsHtml5ElementName(nsHtml5Atoms::tbody, nsHtml5Atoms::tbody, NS_NewHTMLTableSectionElement, NS_NewSVGUnknownElement, nsHtml5TreeBuilder::TBODY_OR_THEAD_OR_TFOOT | SPECIAL | FOSTER_PARENTING | OPTIONAL_END_TAG);
ELEMENT_NAMES = new nsHtml5ElementName*[401];
ELEMENT_NAMES = new nsHtml5ElementName*[400];
ELEMENT_NAMES[0] = ELT_VKERN;
ELEMENT_NAMES[1] = ELT_LOGBASE;
ELEMENT_NAMES[2] = ELT_FIELDSET;
ELEMENT_NAMES[3] = ELT_DATA;
ELEMENT_NAMES[4] = ELT_LI;
ELEMENT_NAMES[5] = ELT_COMPLEXES;
ELEMENT_NAMES[5] = ELT_CANVAS;
ELEMENT_NAMES[6] = ELT_QUOTIENT;
ELEMENT_NAMES[7] = ELT_PRE;
ELEMENT_NAMES[8] = ELT_ARTICLE;
ELEMENT_NAMES[9] = ELT_DIALOG;
ELEMENT_NAMES[10] = ELT_ARCTAN;
ELEMENT_NAMES[11] = ELT_LISTENER;
ELEMENT_NAMES[12] = ELT_RATIONALS;
ELEMENT_NAMES[12] = ELT_REALS;
ELEMENT_NAMES[13] = ELT_MROOT;
ELEMENT_NAMES[14] = ELT_MROW;
ELEMENT_NAMES[15] = ELT_GEQ;
@@ -920,9 +918,9 @@ nsHtml5ElementName::initializeStatics()
ELEMENT_NAMES[21] = ELT_INTERVAL;
ELEMENT_NAMES[22] = ELT_MN;
ELEMENT_NAMES[23] = ELT_BR;
ELEMENT_NAMES[24] = ELT_POWER;
ELEMENT_NAMES[25] = ELT_MMULTISCRIPTS;
ELEMENT_NAMES[26] = ELT_CONTENT;
ELEMENT_NAMES[24] = ELT_NOTANUMBER;
ELEMENT_NAMES[25] = ELT_MPRESCRIPTS;
ELEMENT_NAMES[26] = ELT_CARTESIANPRODUCT;
ELEMENT_NAMES[27] = ELT_INTERSECT;
ELEMENT_NAMES[28] = ELT_RT;
ELEMENT_NAMES[29] = ELT_SCRIPT;
@@ -945,11 +943,11 @@ nsHtml5ElementName::initializeStatics()
ELEMENT_NAMES[46] = ELT_OPTION;
ELEMENT_NAMES[47] = ELT_MALIGNGROUP;
ELEMENT_NAMES[48] = ELT_FECOMPONENTTRANSFER;
ELEMENT_NAMES[49] = ELT_MERROR;
ELEMENT_NAMES[50] = ELT_VECTOR;
ELEMENT_NAMES[51] = ELT_IMPLIES;
ELEMENT_NAMES[52] = ELT_PRIMES;
ELEMENT_NAMES[53] = ELT_APPLET;
ELEMENT_NAMES[49] = ELT_MUNDEROVER;
ELEMENT_NAMES[50] = ELT_SELECTOR;
ELEMENT_NAMES[51] = ELT_EXISTS;
ELEMENT_NAMES[52] = ELT_NATURALNUMBERS;
ELEMENT_NAMES[53] = ELT_DT;
ELEMENT_NAMES[54] = ELT_EMPTYSET;
ELEMENT_NAMES[55] = ELT_FEPOINTLIGHT;
ELEMENT_NAMES[56] = ELT_LOWLIMIT;
@@ -995,16 +993,16 @@ nsHtml5ElementName::initializeStatics()
ELEMENT_NAMES[96] = ELT_OPTGROUP;
ELEMENT_NAMES[97] = ELT_CENTER;
ELEMENT_NAMES[98] = ELT_FEGAUSSIANBLUR;
ELEMENT_NAMES[99] = ELT_MOVER;
ELEMENT_NAMES[100] = ELT_NOBR;
ELEMENT_NAMES[101] = ELT_SOLIDCOLOR;
ELEMENT_NAMES[102] = ELT_ADDRESS;
ELEMENT_NAMES[103] = ELT_DETAILS;
ELEMENT_NAMES[104] = ELT_MS;
ELEMENT_NAMES[105] = ELT_NOFRAMES;
ELEMENT_NAMES[106] = ELT_PLUS;
ELEMENT_NAMES[107] = ELT_TIMES;
ELEMENT_NAMES[108] = ELT_BASEFONT;
ELEMENT_NAMES[99] = ELT_METER;
ELEMENT_NAMES[100] = ELT_MLABELEDTR;
ELEMENT_NAMES[101] = ELT_TR;
ELEMENT_NAMES[102] = ELT_ARCCOS;
ELEMENT_NAMES[103] = ELT_DEFS;
ELEMENT_NAMES[104] = ELT_INTEGERS;
ELEMENT_NAMES[105] = ELT_MINUS;
ELEMENT_NAMES[106] = ELT_PROGRESS;
ELEMENT_NAMES[107] = ELT_SEMANTICS;
ELEMENT_NAMES[108] = ELT_ARCCOT;
ELEMENT_NAMES[109] = ELT_DETERMINANT;
ELEMENT_NAMES[110] = ELT_FONT_FACE_FORMAT;
ELEMENT_NAMES[111] = ELT_FEOFFSET;
@@ -1096,25 +1094,25 @@ nsHtml5ElementName::initializeStatics()
ELEMENT_NAMES[197] = ELT_FOOTER;
ELEMENT_NAMES[198] = ELT_HANDLER;
ELEMENT_NAMES[199] = ELT_MARKER;
ELEMENT_NAMES[200] = ELT_MUNDEROVER;
ELEMENT_NAMES[201] = ELT_MLABELEDTR;
ELEMENT_NAMES[202] = ELT_NOTANUMBER;
ELEMENT_NAMES[203] = ELT_TR;
ELEMENT_NAMES[204] = ELT_SELECTOR;
ELEMENT_NAMES[205] = ELT_ARCCOS;
ELEMENT_NAMES[206] = ELT_CANVAS;
ELEMENT_NAMES[207] = ELT_DEFS;
ELEMENT_NAMES[208] = ELT_EXISTS;
ELEMENT_NAMES[209] = ELT_INTEGERS;
ELEMENT_NAMES[210] = ELT_MPRESCRIPTS;
ELEMENT_NAMES[211] = ELT_MINUS;
ELEMENT_NAMES[212] = ELT_NATURALNUMBERS;
ELEMENT_NAMES[213] = ELT_PROGRESS;
ELEMENT_NAMES[214] = ELT_REALS;
ELEMENT_NAMES[215] = ELT_SEMANTICS;
ELEMENT_NAMES[216] = ELT_DT;
ELEMENT_NAMES[217] = ELT_ARCCOT;
ELEMENT_NAMES[218] = ELT_CARTESIANPRODUCT;
ELEMENT_NAMES[200] = ELT_MOVER;
ELEMENT_NAMES[201] = ELT_MERROR;
ELEMENT_NAMES[202] = ELT_NOBR;
ELEMENT_NAMES[203] = ELT_POWER;
ELEMENT_NAMES[204] = ELT_SOLIDCOLOR;
ELEMENT_NAMES[205] = ELT_VECTOR;
ELEMENT_NAMES[206] = ELT_ADDRESS;
ELEMENT_NAMES[207] = ELT_COMPLEXES;
ELEMENT_NAMES[208] = ELT_DETAILS;
ELEMENT_NAMES[209] = ELT_IMPLIES;
ELEMENT_NAMES[210] = ELT_MS;
ELEMENT_NAMES[211] = ELT_MMULTISCRIPTS;
ELEMENT_NAMES[212] = ELT_NOFRAMES;
ELEMENT_NAMES[213] = ELT_PRIMES;
ELEMENT_NAMES[214] = ELT_PLUS;
ELEMENT_NAMES[215] = ELT_RATIONALS;
ELEMENT_NAMES[216] = ELT_TIMES;
ELEMENT_NAMES[217] = ELT_APPLET;
ELEMENT_NAMES[218] = ELT_BASEFONT;
ELEMENT_NAMES[219] = ELT_GT;
ELEMENT_NAMES[220] = ELT_DATALIST;
ELEMENT_NAMES[221] = ELT_EQUIVALENT;
@@ -1296,7 +1294,6 @@ nsHtml5ElementName::initializeStatics()
ELEMENT_NAMES[397] = ELT_HEADER;
ELEMENT_NAMES[398] = ELT_OR;
ELEMENT_NAMES[399] = ELT_MUNDER;
ELEMENT_NAMES[400] = ELT_METER;
}
void
@@ -1633,7 +1630,6 @@ nsHtml5ElementName::releaseStatics()
delete ELT_ARCCOT;
delete ELT_BASEFONT;
delete ELT_CARTESIANPRODUCT;
delete ELT_CONTENT;
delete ELT_GT;
delete ELT_DETERMINANT;
delete ELT_DATALIST;
-1
View File
@@ -539,7 +539,6 @@ class nsHtml5ElementName
static nsHtml5ElementName* ELT_ARCCOT;
static nsHtml5ElementName* ELT_BASEFONT;
static nsHtml5ElementName* ELT_CARTESIANPRODUCT;
static nsHtml5ElementName* ELT_CONTENT;
static nsHtml5ElementName* ELT_GT;
static nsHtml5ElementName* ELT_DETERMINANT;
static nsHtml5ElementName* ELT_DATALIST;
-1
View File
@@ -62,7 +62,6 @@ static const HTMLElement gHTMLElements[] = {
ELEM(code, ____, true)
ELEM(col, ____, ____)
ELEM(colgroup, ____, true)
ELEM(content, ____, true)
ELEM(data, ____, true)
ELEM(datalist, ____, true)
ELEM(dd, ____, true)
-1
View File
@@ -71,7 +71,6 @@ HTML_HTMLELEMENT_TAG(cite)
HTML_HTMLELEMENT_TAG(code)
HTML_TAG(col, TableCol, TableCol)
HTML_TAG(colgroup, TableCol, TableCol)
HTML_TAG(content, Content, Content)
HTML_TAG(data, Data, Data)
HTML_TAG(datalist, DataList, DataList)
HTML_HTMLELEMENT_TAG(dd)