Diff
Modified: trunk/Source/WebCore/ChangeLog (286150 => 286151)
--- trunk/Source/WebCore/ChangeLog 2021-11-24 16:20:55 UTC (rev 286150)
+++ trunk/Source/WebCore/ChangeLog 2021-11-24 18:29:11 UTC (rev 286151)
@@ -1,3 +1,56 @@
+2021-11-24 Dean Jackson <[email protected]>
+
+ Make DocumentClass an OptionSet
+ https://bugs.webkit.org/show_bug.cgi?id=233274
+
+ Reviewed by Sam Weinig.
+
+ DocumentClassFlags was playing the part of an OptionSet, so
+ it might as well be one.
+
+ * cssjit/SelectorCompiler.cpp:
+ (WebCore::SelectorCompiler::testIsHTMLClassOnDocument): Use
+ branchTest16 here, as DocumentClass is a 16-bit value.
+
+ * dom/Document.cpp: Use new type.
+ (WebCore::Document::Document):
+ * dom/Document.h: Make a new type alias DocumentClasses
+ that is OptionSet<DocumentClass>, use that for m_documentClasses,
+ and change all the is*Document methods to test the OptionSet.
+ (WebCore::Document::isHTMLDocument const):
+ (WebCore::Document::isXHTMLDocument const):
+ (WebCore::Document::isXMLDocument const):
+ (WebCore::Document::isImageDocument const):
+ (WebCore::Document::isSVGDocument const):
+ (WebCore::Document::isPluginDocument const):
+ (WebCore::Document::isMediaDocument const):
+ (WebCore::Document::isTextDocument const):
+ (WebCore::Document::isModelDocument const):
+ (WebCore::Document::documentClassesMemoryOffset):
+ (WebCore::Document::isHTMLDocumentClassFlag):
+ (WebCore::Document::Document):
+ * dom/XMLDocument.h: Use new type.
+ (WebCore::XMLDocument::createXHTML):
+ (WebCore::XMLDocument::XMLDocument):
+ * html/HTMLDocument.cpp: Ditto.
+ (WebCore::HTMLDocument::createSynthesizedDocument):
+ (WebCore::HTMLDocument::HTMLDocument):
+ * html/HTMLDocument.h: Ditto.
+ (WebCore::HTMLDocument::HTMLDocument):
+ (WebCore::HTMLDocument::create):
+ * html/ImageDocument.cpp: Ditto.
+ (WebCore::ImageDocument::ImageDocument):
+ * html/MediaDocument.cpp: Ditto.
+ (WebCore::MediaDocument::MediaDocument):
+ * html/ModelDocument.cpp: Ditto.
+ (WebCore::ModelDocument::ModelDocument):
+ * html/PluginDocument.cpp: Ditto.
+ (WebCore::PluginDocument::PluginDocument):
+ * html/TextDocument.cpp: Ditto.
+ (WebCore::TextDocument::TextDocument):
+ * svg/SVGDocument.cpp: Ditto.
+ (WebCore::SVGDocument::SVGDocument):
+
2021-11-24 Patrick Griffis <[email protected]>
CSP: Implement submitting samples in violation reports
Modified: trunk/Source/WebCore/cssjit/SelectorCompiler.cpp (286150 => 286151)
--- trunk/Source/WebCore/cssjit/SelectorCompiler.cpp 2021-11-24 16:20:55 UTC (rev 286150)
+++ trunk/Source/WebCore/cssjit/SelectorCompiler.cpp 2021-11-24 18:29:11 UTC (rev 286151)
@@ -3334,7 +3334,8 @@
static inline Assembler::Jump testIsHTMLClassOnDocument(Assembler::ResultCondition condition, Assembler& assembler, Assembler::RegisterID documentAddress)
{
- return assembler.branchTest32(condition, Assembler::Address(documentAddress, Document::documentClassesMemoryOffset()), Assembler::TrustedImm32(Document::isHTMLDocumentClassFlag()));
+ static_assert(sizeof(Document::DocumentClass) == 2, "Document::DocumentClass must be a 16-bit value for branchTest16");
+ return assembler.branchTest16(condition, Assembler::Address(documentAddress, Document::documentClassesMemoryOffset()), Assembler::TrustedImm32(Document::isHTMLDocumentClassFlag()));
}
void SelectorCodeGenerator::generateElementAttributeValueExactMatching(Assembler::JumpList& failureCases, Assembler::RegisterID currentAttributeAddress, const AtomString& expectedValue, AttributeCaseSensitivity valueCaseSensitivity)
Modified: trunk/Source/WebCore/dom/Document.cpp (286150 => 286151)
--- trunk/Source/WebCore/dom/Document.cpp 2021-11-24 16:20:55 UTC (rev 286150)
+++ trunk/Source/WebCore/dom/Document.cpp 2021-11-24 18:29:11 UTC (rev 286151)
@@ -607,7 +607,7 @@
return CachedResourceLoader::create(nullptr);
}
-Document::Document(Frame* frame, const Settings& settings, const URL& url, DocumentClassFlags documentClasses, unsigned constructionFlags)
+Document::Document(Frame* frame, const Settings& settings, const URL& url, DocumentClasses documentClasses, unsigned constructionFlags)
: ContainerNode(*this, CreateDocument)
, TreeScope(*this)
, FrameDestructionObserver(frame)
@@ -687,7 +687,7 @@
Ref<Document> Document::create(Document& contextDocument)
{
- auto document = adoptRef(*new Document(nullptr, contextDocument.m_settings, URL()));
+ auto document = adoptRef(*new Document(nullptr, contextDocument.m_settings, URL(), { }));
document->setContextDocument(contextDocument);
document->setSecurityOriginPolicy(contextDocument.securityOriginPolicy());
return document;
@@ -695,7 +695,7 @@
Ref<Document> Document::createNonRenderedPlaceholder(Frame& frame, const URL& url)
{
- return adoptRef(*new Document(&frame, frame.settings(), url, DefaultDocumentClass, NonRenderedPlaceholder));
+ return adoptRef(*new Document(&frame, frame.settings(), url, { }, NonRenderedPlaceholder));
}
Document::~Document()
Modified: trunk/Source/WebCore/dom/Document.h (286150 => 286151)
--- trunk/Source/WebCore/dom/Document.h 2021-11-24 16:20:55 UTC (rev 286150)
+++ trunk/Source/WebCore/dom/Document.h 2021-11-24 18:29:11 UTC (rev 286151)
@@ -291,22 +291,6 @@
enum class EventHandlerRemoval { One, All };
using EventTargetSet = HashCountedSet<Node*>;
-enum DocumentClass {
- DefaultDocumentClass = 0,
- HTMLDocumentClass = 1,
- XHTMLDocumentClass = 1 << 1,
- ImageDocumentClass = 1 << 2,
- PluginDocumentClass = 1 << 3,
- MediaDocumentClass = 1 << 4,
- SVGDocumentClass = 1 << 5,
- TextDocumentClass = 1 << 6,
- XMLDocumentClass = 1 << 7,
-#if ENABLE(MODEL_ELEMENT)
- ModelDocumentClass = 1 << 8,
-#endif
-};
-using DocumentClassFlags = uint16_t;
-
enum class DocumentCompatibilityMode : unsigned char {
NoQuirksMode = 1,
QuirksMode = 1 << 1,
@@ -532,22 +516,39 @@
// Other methods (not part of DOM)
bool isSynthesized() const { return m_isSynthesized; }
- bool isHTMLDocument() const { return m_documentClasses & HTMLDocumentClass; }
- bool isXHTMLDocument() const { return m_documentClasses & XHTMLDocumentClass; }
- bool isXMLDocument() const { return m_documentClasses & XMLDocumentClass; }
- bool isImageDocument() const { return m_documentClasses & ImageDocumentClass; }
- bool isSVGDocument() const { return m_documentClasses & SVGDocumentClass; }
- bool isPluginDocument() const { return m_documentClasses & PluginDocumentClass; }
- bool isMediaDocument() const { return m_documentClasses & MediaDocumentClass; }
- bool isTextDocument() const { return m_documentClasses & TextDocumentClass; }
+
+ enum class DocumentClass : uint16_t {
+ HTML = 1,
+ XHTML = 1 << 1,
+ Image = 1 << 2,
+ Plugin = 1 << 3,
+ Media = 1 << 4,
+ SVG = 1 << 5,
+ Text = 1 << 6,
+ XML = 1 << 7,
#if ENABLE(MODEL_ELEMENT)
- bool isModelDocument() const { return m_documentClasses & ModelDocumentClass; }
+ Model = 1 << 8,
#endif
+ };
+
+ using DocumentClasses = OptionSet<DocumentClass>;
+
+ bool isHTMLDocument() const { return m_documentClasses.contains(DocumentClass::HTML); }
+ bool isXHTMLDocument() const { return m_documentClasses.contains(DocumentClass::XHTML); }
+ bool isXMLDocument() const { return m_documentClasses.contains(DocumentClass::XML); }
+ bool isImageDocument() const { return m_documentClasses.contains(DocumentClass::Image); }
+ bool isSVGDocument() const { return m_documentClasses.contains(DocumentClass::SVG); }
+ bool isPluginDocument() const { return m_documentClasses.contains(DocumentClass::Plugin); }
+ bool isMediaDocument() const { return m_documentClasses.contains(DocumentClass::Media); }
+ bool isTextDocument() const { return m_documentClasses.contains(DocumentClass::Text); }
+#if ENABLE(MODEL_ELEMENT)
+ bool isModelDocument() const { return m_documentClasses.contains(DocumentClass::Model); }
+#endif
bool hasSVGRootNode() const;
virtual bool isFrameSet() const { return false; }
static ptrdiff_t documentClassesMemoryOffset() { return OBJECT_OFFSETOF(Document, m_documentClasses); }
- static uint32_t isHTMLDocumentClassFlag() { return HTMLDocumentClass; }
+ static uint32_t isHTMLDocumentClassFlag() { return static_cast<uint32_t>(DocumentClass::HTML); }
bool isSrcdocDocument() const { return m_isSrcdocDocument; }
@@ -1664,7 +1665,7 @@
protected:
enum ConstructionFlags { Synthesized = 1, NonRenderedPlaceholder = 1 << 1 };
- WEBCORE_EXPORT Document(Frame*, const Settings&, const URL&, DocumentClassFlags = DefaultDocumentClass, unsigned constructionFlags = 0);
+ WEBCORE_EXPORT Document(Frame*, const Settings&, const URL&, DocumentClasses = { }, unsigned constructionFlags = 0);
void clearXMLVersion() { m_xmlVersion = String(); }
@@ -1937,7 +1938,7 @@
std::unique_ptr<SelectorQueryCache> m_selectorQueryCache;
- DocumentClassFlags m_documentClasses;
+ DocumentClasses m_documentClasses;
RenderPtr<RenderView> m_renderView;
Modified: trunk/Source/WebCore/dom/XMLDocument.h (286150 => 286151)
--- trunk/Source/WebCore/dom/XMLDocument.h 2021-11-24 16:20:55 UTC (rev 286150)
+++ trunk/Source/WebCore/dom/XMLDocument.h 2021-11-24 18:29:11 UTC (rev 286151)
@@ -34,17 +34,17 @@
public:
static Ref<XMLDocument> create(Frame* frame, const Settings& settings, const URL& url)
{
- return adoptRef(*new XMLDocument(frame, settings, url));
+ return adoptRef(*new XMLDocument(frame, settings, url, { DocumentClass::XML }));
}
static Ref<XMLDocument> createXHTML(Frame* frame, const Settings& settings, const URL& url)
{
- return adoptRef(*new XMLDocument(frame, settings, url, XHTMLDocumentClass));
+ return adoptRef(*new XMLDocument(frame, settings, url, { DocumentClass::XML, DocumentClass::XHTML }));
}
protected:
- XMLDocument(Frame* frame, const Settings& settings, const URL& url, unsigned documentClasses = DefaultDocumentClass)
- : Document(frame, settings, url, XMLDocumentClass | documentClasses)
+ XMLDocument(Frame* frame, const Settings& settings, const URL& url, DocumentClasses documentClasses = { })
+ : Document(frame, settings, url, documentClasses | DocumentClasses(DocumentClass::XML))
{
}
};
Modified: trunk/Source/WebCore/html/HTMLDocument.cpp (286150 => 286151)
--- trunk/Source/WebCore/html/HTMLDocument.cpp 2021-11-24 16:20:55 UTC (rev 286150)
+++ trunk/Source/WebCore/html/HTMLDocument.cpp 2021-11-24 18:29:11 UTC (rev 286151)
@@ -89,11 +89,11 @@
Ref<HTMLDocument> HTMLDocument::createSynthesizedDocument(Frame& frame, const URL& url)
{
- return adoptRef(*new HTMLDocument(&frame, frame.settings(), url, HTMLDocumentClass, Synthesized));
+ return adoptRef(*new HTMLDocument(&frame, frame.settings(), url, { DocumentClass::HTML }, Synthesized));
}
-HTMLDocument::HTMLDocument(Frame* frame, const Settings& settings, const URL& url, DocumentClassFlags documentClasses, unsigned constructionFlags)
- : Document(frame, settings, url, documentClasses | HTMLDocumentClass, constructionFlags)
+HTMLDocument::HTMLDocument(Frame* frame, const Settings& settings, const URL& url, DocumentClasses documentClasses, unsigned constructionFlags)
+ : Document(frame, settings, url, documentClasses | DocumentClasses(DocumentClass::HTML), constructionFlags)
{
clearXMLVersion();
}
Modified: trunk/Source/WebCore/html/HTMLDocument.h (286150 => 286151)
--- trunk/Source/WebCore/html/HTMLDocument.h 2021-11-24 16:20:55 UTC (rev 286150)
+++ trunk/Source/WebCore/html/HTMLDocument.h 2021-11-24 18:29:11 UTC (rev 286151)
@@ -54,7 +54,7 @@
static bool isCaseSensitiveAttribute(const QualifiedName&);
protected:
- HTMLDocument(Frame*, const Settings&, const URL&, DocumentClassFlags = 0, unsigned constructionFlags = 0);
+ HTMLDocument(Frame*, const Settings&, const URL&, DocumentClasses = { }, unsigned constructionFlags = 0);
private:
bool isFrameSet() const final;
@@ -67,7 +67,7 @@
inline Ref<HTMLDocument> HTMLDocument::create(Frame* frame, const Settings& settings, const URL& url)
{
- return adoptRef(*new HTMLDocument(frame, settings, url, HTMLDocumentClass));
+ return adoptRef(*new HTMLDocument(frame, settings, url, { DocumentClass::HTML }));
}
} // namespace WebCore
Modified: trunk/Source/WebCore/html/ImageDocument.cpp (286150 => 286151)
--- trunk/Source/WebCore/html/ImageDocument.cpp 2021-11-24 16:20:55 UTC (rev 286150)
+++ trunk/Source/WebCore/html/ImageDocument.cpp 2021-11-24 18:29:11 UTC (rev 286151)
@@ -198,7 +198,7 @@
}
ImageDocument::ImageDocument(Frame& frame, const URL& url)
- : HTMLDocument(&frame, frame.settings(), url, ImageDocumentClass)
+ : HTMLDocument(&frame, frame.settings(), url, { DocumentClass::Image })
, m_imageElement(nullptr)
, m_imageSizeIsKnown(false)
#if !PLATFORM(IOS_FAMILY)
Modified: trunk/Source/WebCore/html/MediaDocument.cpp (286150 => 286151)
--- trunk/Source/WebCore/html/MediaDocument.cpp 2021-11-24 16:20:55 UTC (rev 286150)
+++ trunk/Source/WebCore/html/MediaDocument.cpp 2021-11-24 18:29:11 UTC (rev 286151)
@@ -140,7 +140,7 @@
}
MediaDocument::MediaDocument(Frame* frame, const Settings& settings, const URL& url)
- : HTMLDocument(frame, settings, url, MediaDocumentClass)
+ : HTMLDocument(frame, settings, url, { DocumentClass::Media })
{
setCompatibilityMode(DocumentCompatibilityMode::QuirksMode);
lockCompatibilityMode();
Modified: trunk/Source/WebCore/html/ModelDocument.cpp (286150 => 286151)
--- trunk/Source/WebCore/html/ModelDocument.cpp 2021-11-24 16:20:55 UTC (rev 286150)
+++ trunk/Source/WebCore/html/ModelDocument.cpp 2021-11-24 18:29:11 UTC (rev 286151)
@@ -138,7 +138,7 @@
}
ModelDocument::ModelDocument(Frame* frame, const Settings& settings, const URL& url)
- : HTMLDocument(frame, settings, url, ModelDocumentClass)
+ : HTMLDocument(frame, settings, url, { DocumentClass::Model })
{
if (frame)
m_outgoingReferrer = frame->loader().outgoingReferrer();
Modified: trunk/Source/WebCore/html/PluginDocument.cpp (286150 => 286151)
--- trunk/Source/WebCore/html/PluginDocument.cpp 2021-11-24 16:20:55 UTC (rev 286150)
+++ trunk/Source/WebCore/html/PluginDocument.cpp 2021-11-24 18:29:11 UTC (rev 286151)
@@ -144,7 +144,7 @@
}
PluginDocument::PluginDocument(Frame& frame, const URL& url)
- : HTMLDocument(&frame, frame.settings(), url, PluginDocumentClass)
+ : HTMLDocument(&frame, frame.settings(), url, { DocumentClass::Plugin })
{
setCompatibilityMode(DocumentCompatibilityMode::QuirksMode);
lockCompatibilityMode();
Modified: trunk/Source/WebCore/html/TextDocument.cpp (286150 => 286151)
--- trunk/Source/WebCore/html/TextDocument.cpp 2021-11-24 16:20:55 UTC (rev 286150)
+++ trunk/Source/WebCore/html/TextDocument.cpp 2021-11-24 18:29:11 UTC (rev 286151)
@@ -33,7 +33,7 @@
WTF_MAKE_ISO_ALLOCATED_IMPL(TextDocument);
TextDocument::TextDocument(Frame* frame, const Settings& settings, const URL& url)
- : HTMLDocument(frame, settings, url, TextDocumentClass)
+ : HTMLDocument(frame, settings, url, { DocumentClass::Text })
{
setCompatibilityMode(DocumentCompatibilityMode::QuirksMode);
lockCompatibilityMode();
Modified: trunk/Source/WebCore/svg/SVGDocument.cpp (286150 => 286151)
--- trunk/Source/WebCore/svg/SVGDocument.cpp 2021-11-24 16:20:55 UTC (rev 286150)
+++ trunk/Source/WebCore/svg/SVGDocument.cpp 2021-11-24 18:29:11 UTC (rev 286151)
@@ -32,7 +32,7 @@
WTF_MAKE_ISO_ALLOCATED_IMPL(SVGDocument);
SVGDocument::SVGDocument(Frame* frame, const Settings& settings, const URL& url)
- : XMLDocument(frame, settings, url, SVGDocumentClass)
+ : XMLDocument(frame, settings, url, { DocumentClass::SVG })
{
}