Changeset 286151 in webkit
- Timestamp:
- Nov 24, 2021, 10:29:11 AM (5 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 13 edited
-
ChangeLog (modified) (1 diff)
-
cssjit/SelectorCompiler.cpp (modified) (1 diff)
-
dom/Document.cpp (modified) (3 diffs)
-
dom/Document.h (modified) (5 diffs)
-
dom/XMLDocument.h (modified) (1 diff)
-
html/HTMLDocument.cpp (modified) (1 diff)
-
html/HTMLDocument.h (modified) (2 diffs)
-
html/ImageDocument.cpp (modified) (1 diff)
-
html/MediaDocument.cpp (modified) (1 diff)
-
html/ModelDocument.cpp (modified) (1 diff)
-
html/PluginDocument.cpp (modified) (1 diff)
-
html/TextDocument.cpp (modified) (1 diff)
-
svg/SVGDocument.cpp (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r286150 r286151 1 2021-11-24 Dean Jackson <dino@apple.com> 2 3 Make DocumentClass an OptionSet 4 https://bugs.webkit.org/show_bug.cgi?id=233274 5 6 Reviewed by Sam Weinig. 7 8 DocumentClassFlags was playing the part of an OptionSet, so 9 it might as well be one. 10 11 * cssjit/SelectorCompiler.cpp: 12 (WebCore::SelectorCompiler::testIsHTMLClassOnDocument): Use 13 branchTest16 here, as DocumentClass is a 16-bit value. 14 15 * dom/Document.cpp: Use new type. 16 (WebCore::Document::Document): 17 * dom/Document.h: Make a new type alias DocumentClasses 18 that is OptionSet<DocumentClass>, use that for m_documentClasses, 19 and change all the is*Document methods to test the OptionSet. 20 (WebCore::Document::isHTMLDocument const): 21 (WebCore::Document::isXHTMLDocument const): 22 (WebCore::Document::isXMLDocument const): 23 (WebCore::Document::isImageDocument const): 24 (WebCore::Document::isSVGDocument const): 25 (WebCore::Document::isPluginDocument const): 26 (WebCore::Document::isMediaDocument const): 27 (WebCore::Document::isTextDocument const): 28 (WebCore::Document::isModelDocument const): 29 (WebCore::Document::documentClassesMemoryOffset): 30 (WebCore::Document::isHTMLDocumentClassFlag): 31 (WebCore::Document::Document): 32 * dom/XMLDocument.h: Use new type. 33 (WebCore::XMLDocument::createXHTML): 34 (WebCore::XMLDocument::XMLDocument): 35 * html/HTMLDocument.cpp: Ditto. 36 (WebCore::HTMLDocument::createSynthesizedDocument): 37 (WebCore::HTMLDocument::HTMLDocument): 38 * html/HTMLDocument.h: Ditto. 39 (WebCore::HTMLDocument::HTMLDocument): 40 (WebCore::HTMLDocument::create): 41 * html/ImageDocument.cpp: Ditto. 42 (WebCore::ImageDocument::ImageDocument): 43 * html/MediaDocument.cpp: Ditto. 44 (WebCore::MediaDocument::MediaDocument): 45 * html/ModelDocument.cpp: Ditto. 46 (WebCore::ModelDocument::ModelDocument): 47 * html/PluginDocument.cpp: Ditto. 48 (WebCore::PluginDocument::PluginDocument): 49 * html/TextDocument.cpp: Ditto. 50 (WebCore::TextDocument::TextDocument): 51 * svg/SVGDocument.cpp: Ditto. 52 (WebCore::SVGDocument::SVGDocument): 53 1 54 2021-11-24 Patrick Griffis <pgriffis@igalia.com> 2 55 -
trunk/Source/WebCore/cssjit/SelectorCompiler.cpp
r285610 r286151 3335 3335 static inline Assembler::Jump testIsHTMLClassOnDocument(Assembler::ResultCondition condition, Assembler& assembler, Assembler::RegisterID documentAddress) 3336 3336 { 3337 return assembler.branchTest32(condition, Assembler::Address(documentAddress, Document::documentClassesMemoryOffset()), Assembler::TrustedImm32(Document::isHTMLDocumentClassFlag())); 3337 static_assert(sizeof(Document::DocumentClass) == 2, "Document::DocumentClass must be a 16-bit value for branchTest16"); 3338 return assembler.branchTest16(condition, Assembler::Address(documentAddress, Document::documentClassesMemoryOffset()), Assembler::TrustedImm32(Document::isHTMLDocumentClassFlag())); 3338 3339 } 3339 3340 -
trunk/Source/WebCore/dom/Document.cpp
r286063 r286151 608 608 } 609 609 610 Document::Document(Frame* frame, const Settings& settings, const URL& url, DocumentClass Flags documentClasses, unsigned constructionFlags)610 Document::Document(Frame* frame, const Settings& settings, const URL& url, DocumentClasses documentClasses, unsigned constructionFlags) 611 611 : ContainerNode(*this, CreateDocument) 612 612 , TreeScope(*this) … … 688 688 Ref<Document> Document::create(Document& contextDocument) 689 689 { 690 auto document = adoptRef(*new Document(nullptr, contextDocument.m_settings, URL() ));690 auto document = adoptRef(*new Document(nullptr, contextDocument.m_settings, URL(), { })); 691 691 document->setContextDocument(contextDocument); 692 692 document->setSecurityOriginPolicy(contextDocument.securityOriginPolicy()); … … 696 696 Ref<Document> Document::createNonRenderedPlaceholder(Frame& frame, const URL& url) 697 697 { 698 return adoptRef(*new Document(&frame, frame.settings(), url, DefaultDocumentClass, NonRenderedPlaceholder));698 return adoptRef(*new Document(&frame, frame.settings(), url, { }, NonRenderedPlaceholder)); 699 699 } 700 700 -
trunk/Source/WebCore/dom/Document.h
r286012 r286151 292 292 using EventTargetSet = HashCountedSet<Node*>; 293 293 294 enum DocumentClass {295 DefaultDocumentClass = 0,296 HTMLDocumentClass = 1,297 XHTMLDocumentClass = 1 << 1,298 ImageDocumentClass = 1 << 2,299 PluginDocumentClass = 1 << 3,300 MediaDocumentClass = 1 << 4,301 SVGDocumentClass = 1 << 5,302 TextDocumentClass = 1 << 6,303 XMLDocumentClass = 1 << 7,304 #if ENABLE(MODEL_ELEMENT)305 ModelDocumentClass = 1 << 8,306 #endif307 };308 using DocumentClassFlags = uint16_t;309 310 294 enum class DocumentCompatibilityMode : unsigned char { 311 295 NoQuirksMode = 1, … … 533 517 // Other methods (not part of DOM) 534 518 bool isSynthesized() const { return m_isSynthesized; } 535 bool isHTMLDocument() const { return m_documentClasses & HTMLDocumentClass; } 536 bool isXHTMLDocument() const { return m_documentClasses & XHTMLDocumentClass; } 537 bool isXMLDocument() const { return m_documentClasses & XMLDocumentClass; } 538 bool isImageDocument() const { return m_documentClasses & ImageDocumentClass; } 539 bool isSVGDocument() const { return m_documentClasses & SVGDocumentClass; } 540 bool isPluginDocument() const { return m_documentClasses & PluginDocumentClass; } 541 bool isMediaDocument() const { return m_documentClasses & MediaDocumentClass; } 542 bool isTextDocument() const { return m_documentClasses & TextDocumentClass; } 519 520 enum class DocumentClass : uint16_t { 521 HTML = 1, 522 XHTML = 1 << 1, 523 Image = 1 << 2, 524 Plugin = 1 << 3, 525 Media = 1 << 4, 526 SVG = 1 << 5, 527 Text = 1 << 6, 528 XML = 1 << 7, 543 529 #if ENABLE(MODEL_ELEMENT) 544 bool isModelDocument() const { return m_documentClasses & ModelDocumentClass; } 530 Model = 1 << 8, 531 #endif 532 }; 533 534 using DocumentClasses = OptionSet<DocumentClass>; 535 536 bool isHTMLDocument() const { return m_documentClasses.contains(DocumentClass::HTML); } 537 bool isXHTMLDocument() const { return m_documentClasses.contains(DocumentClass::XHTML); } 538 bool isXMLDocument() const { return m_documentClasses.contains(DocumentClass::XML); } 539 bool isImageDocument() const { return m_documentClasses.contains(DocumentClass::Image); } 540 bool isSVGDocument() const { return m_documentClasses.contains(DocumentClass::SVG); } 541 bool isPluginDocument() const { return m_documentClasses.contains(DocumentClass::Plugin); } 542 bool isMediaDocument() const { return m_documentClasses.contains(DocumentClass::Media); } 543 bool isTextDocument() const { return m_documentClasses.contains(DocumentClass::Text); } 544 #if ENABLE(MODEL_ELEMENT) 545 bool isModelDocument() const { return m_documentClasses.contains(DocumentClass::Model); } 545 546 #endif 546 547 bool hasSVGRootNode() const; … … 548 549 549 550 static ptrdiff_t documentClassesMemoryOffset() { return OBJECT_OFFSETOF(Document, m_documentClasses); } 550 static uint32_t isHTMLDocumentClassFlag() { return HTMLDocumentClass; }551 static uint32_t isHTMLDocumentClassFlag() { return static_cast<uint32_t>(DocumentClass::HTML); } 551 552 552 553 bool isSrcdocDocument() const { return m_isSrcdocDocument; } … … 1665 1666 protected: 1666 1667 enum ConstructionFlags { Synthesized = 1, NonRenderedPlaceholder = 1 << 1 }; 1667 WEBCORE_EXPORT Document(Frame*, const Settings&, const URL&, DocumentClass Flags = DefaultDocumentClass, unsigned constructionFlags = 0);1668 WEBCORE_EXPORT Document(Frame*, const Settings&, const URL&, DocumentClasses = { }, unsigned constructionFlags = 0); 1668 1669 1669 1670 void clearXMLVersion() { m_xmlVersion = String(); } … … 1938 1939 std::unique_ptr<SelectorQueryCache> m_selectorQueryCache; 1939 1940 1940 DocumentClass Flags m_documentClasses;1941 DocumentClasses m_documentClasses; 1941 1942 1942 1943 RenderPtr<RenderView> m_renderView; -
trunk/Source/WebCore/dom/XMLDocument.h
r268114 r286151 35 35 static Ref<XMLDocument> create(Frame* frame, const Settings& settings, const URL& url) 36 36 { 37 return adoptRef(*new XMLDocument(frame, settings, url ));37 return adoptRef(*new XMLDocument(frame, settings, url, { DocumentClass::XML })); 38 38 } 39 39 40 40 static Ref<XMLDocument> createXHTML(Frame* frame, const Settings& settings, const URL& url) 41 41 { 42 return adoptRef(*new XMLDocument(frame, settings, url, XHTMLDocumentClass));42 return adoptRef(*new XMLDocument(frame, settings, url, { DocumentClass::XML, DocumentClass::XHTML })); 43 43 } 44 44 45 45 protected: 46 XMLDocument(Frame* frame, const Settings& settings, const URL& url, unsigned documentClasses = DefaultDocumentClass)47 : Document(frame, settings, url, XMLDocumentClass | documentClasses)46 XMLDocument(Frame* frame, const Settings& settings, const URL& url, DocumentClasses documentClasses = { }) 47 : Document(frame, settings, url, documentClasses | DocumentClasses(DocumentClass::XML)) 48 48 { 49 49 } -
trunk/Source/WebCore/html/HTMLDocument.cpp
r284075 r286151 90 90 Ref<HTMLDocument> HTMLDocument::createSynthesizedDocument(Frame& frame, const URL& url) 91 91 { 92 return adoptRef(*new HTMLDocument(&frame, frame.settings(), url, HTMLDocumentClass, Synthesized));93 } 94 95 HTMLDocument::HTMLDocument(Frame* frame, const Settings& settings, const URL& url, DocumentClass Flags documentClasses, unsigned constructionFlags)96 : Document(frame, settings, url, documentClasses | HTMLDocumentClass, constructionFlags)92 return adoptRef(*new HTMLDocument(&frame, frame.settings(), url, { DocumentClass::HTML }, Synthesized)); 93 } 94 95 HTMLDocument::HTMLDocument(Frame* frame, const Settings& settings, const URL& url, DocumentClasses documentClasses, unsigned constructionFlags) 96 : Document(frame, settings, url, documentClasses | DocumentClasses(DocumentClass::HTML), constructionFlags) 97 97 { 98 98 clearXMLVersion(); -
trunk/Source/WebCore/html/HTMLDocument.h
r284075 r286151 55 55 56 56 protected: 57 HTMLDocument(Frame*, const Settings&, const URL&, DocumentClass Flags = 0, unsigned constructionFlags = 0);57 HTMLDocument(Frame*, const Settings&, const URL&, DocumentClasses = { }, unsigned constructionFlags = 0); 58 58 59 59 private: … … 68 68 inline Ref<HTMLDocument> HTMLDocument::create(Frame* frame, const Settings& settings, const URL& url) 69 69 { 70 return adoptRef(*new HTMLDocument(frame, settings, url, HTMLDocumentClass));70 return adoptRef(*new HTMLDocument(frame, settings, url, { DocumentClass::HTML })); 71 71 } 72 72 -
trunk/Source/WebCore/html/ImageDocument.cpp
r284901 r286151 199 199 200 200 ImageDocument::ImageDocument(Frame& frame, const URL& url) 201 : HTMLDocument(&frame, frame.settings(), url, ImageDocumentClass)201 : HTMLDocument(&frame, frame.settings(), url, { DocumentClass::Image }) 202 202 , m_imageElement(nullptr) 203 203 , m_imageSizeIsKnown(false) -
trunk/Source/WebCore/html/MediaDocument.cpp
r282799 r286151 141 141 142 142 MediaDocument::MediaDocument(Frame* frame, const Settings& settings, const URL& url) 143 : HTMLDocument(frame, settings, url, MediaDocumentClass)143 : HTMLDocument(frame, settings, url, { DocumentClass::Media }) 144 144 { 145 145 setCompatibilityMode(DocumentCompatibilityMode::QuirksMode); -
trunk/Source/WebCore/html/ModelDocument.cpp
r285936 r286151 139 139 140 140 ModelDocument::ModelDocument(Frame* frame, const Settings& settings, const URL& url) 141 : HTMLDocument(frame, settings, url, ModelDocumentClass)141 : HTMLDocument(frame, settings, url, { DocumentClass::Model }) 142 142 { 143 143 if (frame) -
trunk/Source/WebCore/html/PluginDocument.cpp
r282799 r286151 145 145 146 146 PluginDocument::PluginDocument(Frame& frame, const URL& url) 147 : HTMLDocument(&frame, frame.settings(), url, PluginDocumentClass)147 : HTMLDocument(&frame, frame.settings(), url, { DocumentClass::Plugin }) 148 148 { 149 149 setCompatibilityMode(DocumentCompatibilityMode::QuirksMode); -
trunk/Source/WebCore/html/TextDocument.cpp
r268114 r286151 34 34 35 35 TextDocument::TextDocument(Frame* frame, const Settings& settings, const URL& url) 36 : HTMLDocument(frame, settings, url, TextDocumentClass)36 : HTMLDocument(frame, settings, url, { DocumentClass::Text }) 37 37 { 38 38 setCompatibilityMode(DocumentCompatibilityMode::QuirksMode); -
trunk/Source/WebCore/svg/SVGDocument.cpp
r268114 r286151 33 33 34 34 SVGDocument::SVGDocument(Frame* frame, const Settings& settings, const URL& url) 35 : XMLDocument(frame, settings, url, SVGDocumentClass)35 : XMLDocument(frame, settings, url, { DocumentClass::SVG }) 36 36 { 37 37 }
Note:
See TracChangeset
for help on using the changeset viewer.