Title: [226273] trunk/Source/WebCore
Revision
226273
Author
[email protected]
Date
2017-12-22 12:43:35 -0800 (Fri, 22 Dec 2017)

Log Message

[RenderTreeBuilder] Move RenderMenuList::addChild() tree mutation to RenderTreeBuilder
https://bugs.webkit.org/show_bug.cgi?id=181130
<rdar://problem/36196266>

Reviewed by Antti Koivisto.

This patch also creates a dedicated class for form control related tree mutations.

Covered by existing tests.

* Sources.txt:
* WebCore.xcodeproj/project.pbxproj:
* rendering/RenderButton.cpp:
(WebCore::RenderButton::setInnerRenderer): Update the style here instead.
* rendering/RenderMenuList.cpp:
(WebCore::RenderMenuList::setInnerRenderer):
(RenderMenuList::addChild):
(RenderMenuList::showPopup): We should't really call showPopup on a detached renderer.
(WebCore::RenderMenuList::createInnerBlock): Deleted.
* rendering/RenderMenuList.h:
* rendering/updating/RenderTreeBuilder.cpp:
(WebCore::RenderTreeBuilder::RenderTreeBuilder):
(WebCore::RenderTreeBuilder::insertChild):
(WebCore::createInnerRendererForButtonIfNeeded): Deleted.
* rendering/updating/RenderTreeBuilder.h:
(WebCore::RenderTreeBuilder::formControlsBuilder):
* rendering/updating/RenderTreeBuilderFormControls.cpp: Copied from Source/WebCore/rendering/updating/RenderTreeBuilder.h.
(WebCore::RenderTreeBuilder::FormControls::FormControls):
(WebCore::RenderTreeBuilder::FormControls::createInnerRendererIfNeeded):
* rendering/updating/RenderTreeBuilderFormControls.h: Copied from Source/WebCore/rendering/updating/RenderTreeBuilder.h.

Modified Paths

Added Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (226272 => 226273)


--- trunk/Source/WebCore/ChangeLog	2017-12-22 20:41:48 UTC (rev 226272)
+++ trunk/Source/WebCore/ChangeLog	2017-12-22 20:43:35 UTC (rev 226273)
@@ -1,3 +1,36 @@
+2017-12-22  Zalan Bujtas  <[email protected]>
+
+        [RenderTreeBuilder] Move RenderMenuList::addChild() tree mutation to RenderTreeBuilder
+        https://bugs.webkit.org/show_bug.cgi?id=181130
+        <rdar://problem/36196266>
+
+        Reviewed by Antti Koivisto.
+
+        This patch also creates a dedicated class for form control related tree mutations.
+
+        Covered by existing tests.
+
+        * Sources.txt:
+        * WebCore.xcodeproj/project.pbxproj:
+        * rendering/RenderButton.cpp:
+        (WebCore::RenderButton::setInnerRenderer): Update the style here instead.
+        * rendering/RenderMenuList.cpp:
+        (WebCore::RenderMenuList::setInnerRenderer):
+        (RenderMenuList::addChild):
+        (RenderMenuList::showPopup): We should't really call showPopup on a detached renderer.
+        (WebCore::RenderMenuList::createInnerBlock): Deleted.
+        * rendering/RenderMenuList.h:
+        * rendering/updating/RenderTreeBuilder.cpp:
+        (WebCore::RenderTreeBuilder::RenderTreeBuilder):
+        (WebCore::RenderTreeBuilder::insertChild):
+        (WebCore::createInnerRendererForButtonIfNeeded): Deleted.
+        * rendering/updating/RenderTreeBuilder.h:
+        (WebCore::RenderTreeBuilder::formControlsBuilder):
+        * rendering/updating/RenderTreeBuilderFormControls.cpp: Copied from Source/WebCore/rendering/updating/RenderTreeBuilder.h.
+        (WebCore::RenderTreeBuilder::FormControls::FormControls):
+        (WebCore::RenderTreeBuilder::FormControls::createInnerRendererIfNeeded):
+        * rendering/updating/RenderTreeBuilderFormControls.h: Copied from Source/WebCore/rendering/updating/RenderTreeBuilder.h.
+
 2017-12-21  Ryosuke Niwa  <[email protected]>
 
         REGRESSION(r223678): Cannot copy & paste a web page content into Yahoo! Mail

Modified: trunk/Source/WebCore/Sources.txt (226272 => 226273)


--- trunk/Source/WebCore/Sources.txt	2017-12-22 20:41:48 UTC (rev 226272)
+++ trunk/Source/WebCore/Sources.txt	2017-12-22 20:43:35 UTC (rev 226273)
@@ -1982,6 +1982,7 @@
 
 rendering/updating/RenderTreeBuilder.cpp
 rendering/updating/RenderTreeBuilderFirstLetter.cpp
+rendering/updating/RenderTreeBuilderFormControls.cpp
 rendering/updating/RenderTreeBuilderList.cpp
 rendering/updating/RenderTreeBuilderMultiColumn.cpp
 rendering/updating/RenderTreeBuilderRuby.cpp

Modified: trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj (226272 => 226273)


--- trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj	2017-12-22 20:41:48 UTC (rev 226272)
+++ trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj	2017-12-22 20:43:35 UTC (rev 226273)
@@ -392,6 +392,7 @@
 		113D0B521F9FDD2B00F611BB /* LayoutContext.h in Headers */ = {isa = PBXBuildFile; fileRef = 113D0B501F9FDD2B00F611BB /* LayoutContext.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		119340791FE8B92300935F1E /* RenderTreeBuilderTable.h in Headers */ = {isa = PBXBuildFile; fileRef = 119340771FE8B92300935F1E /* RenderTreeBuilderTable.h */; };
 		1193408A1FEB355D00935F1E /* RenderTreeBuilderRuby.h in Headers */ = {isa = PBXBuildFile; fileRef = 119340881FEB355D00935F1E /* RenderTreeBuilderRuby.h */; };
+		119340971FED715500935F1E /* RenderTreeBuilderFormControls.h in Headers */ = {isa = PBXBuildFile; fileRef = 119340951FED715500935F1E /* RenderTreeBuilderFormControls.h */; };
 		11E067EE1E6246E500162D16 /* SimpleLineLayoutCoverage.h in Headers */ = {isa = PBXBuildFile; fileRef = 11E067ED1E6246E500162D16 /* SimpleLineLayoutCoverage.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		1400D7A817136EA70077CE05 /* ScriptWrappableInlines.h in Headers */ = {isa = PBXBuildFile; fileRef = 1400D7A717136EA70077CE05 /* ScriptWrappableInlines.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		1403B99709EB13AF00797C7F /* DOMWindow.h in Headers */ = {isa = PBXBuildFile; fileRef = 1403B99509EB13AF00797C7F /* DOMWindow.h */; settings = {ATTRIBUTES = (Private, ); }; };
@@ -5556,6 +5557,8 @@
 		119340771FE8B92300935F1E /* RenderTreeBuilderTable.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RenderTreeBuilderTable.h; sourceTree = "<group>"; };
 		119340871FEB355D00935F1E /* RenderTreeBuilderRuby.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = RenderTreeBuilderRuby.cpp; sourceTree = "<group>"; };
 		119340881FEB355D00935F1E /* RenderTreeBuilderRuby.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RenderTreeBuilderRuby.h; sourceTree = "<group>"; };
+		119340941FED715500935F1E /* RenderTreeBuilderFormControls.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = RenderTreeBuilderFormControls.cpp; sourceTree = "<group>"; };
+		119340951FED715500935F1E /* RenderTreeBuilderFormControls.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RenderTreeBuilderFormControls.h; sourceTree = "<group>"; };
 		11E067EB1E62461300162D16 /* SimpleLineLayoutCoverage.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SimpleLineLayoutCoverage.cpp; sourceTree = "<group>"; };
 		11E067ED1E6246E500162D16 /* SimpleLineLayoutCoverage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SimpleLineLayoutCoverage.h; sourceTree = "<group>"; };
 		1400D7A717136EA70077CE05 /* ScriptWrappableInlines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScriptWrappableInlines.h; sourceTree = "<group>"; };
@@ -24491,6 +24494,8 @@
 				E47C392A1FE6E0DE00BBBC6B /* RenderTreeBuilder.h */,
 				E47C39211FE6E0DA00BBBC6B /* RenderTreeBuilderFirstLetter.cpp */,
 				E47C39261FE6E0DC00BBBC6B /* RenderTreeBuilderFirstLetter.h */,
+				119340941FED715500935F1E /* RenderTreeBuilderFormControls.cpp */,
+				119340951FED715500935F1E /* RenderTreeBuilderFormControls.h */,
 				E47C392B1FE6E0DF00BBBC6B /* RenderTreeBuilderList.cpp */,
 				E47C39281FE6E0DD00BBBC6B /* RenderTreeBuilderList.h */,
 				E47C39231FE6E0DA00BBBC6B /* RenderTreeBuilderMultiColumn.cpp */,
@@ -25373,12 +25378,12 @@
 				C3CF17A315B0063F00276D39 /* IdTargetObserverRegistry.h */,
 				8AB4BC76126FDB7100DEB727 /* IgnoreDestructiveWriteCountIncrementer.h */,
 				467302011C4EFE6600BCB357 /* IgnoreOpensDuringUnloadCountIncrementer.h */,
-				512B57BF1FE9902E000A1E5E /* InProcessMessagePortChannel.cpp */,
-				512B57BC1FE9902C000A1E5E /* InProcessMessagePortChannel.h */,
 				E30592611E27A38C00D57C98 /* InlineClassicScript.cpp */,
 				E30592621E27A38C00D57C98 /* InlineClassicScript.h */,
 				AA4C3A740B2B1679002334A2 /* InlineStyleSheetOwner.cpp */,
 				AA4C3A750B2B1679002334A2 /* InlineStyleSheetOwner.h */,
+				512B57BF1FE9902E000A1E5E /* InProcessMessagePortChannel.cpp */,
+				512B57BC1FE9902C000A1E5E /* InProcessMessagePortChannel.h */,
 				2EB767551DA19B99003E23B5 /* InputEvent.cpp */,
 				2EB767541DA19B67003E23B5 /* InputEvent.h */,
 				2EB767531DA19313003E23B5 /* InputEvent.idl */,
@@ -25509,9 +25514,9 @@
 				9BD0BF9112A42BF50072FD43 /* ScopedEventQueue.h */,
 				A84D82C011D3474800972990 /* ScriptableDocumentParser.cpp */,
 				A84D82BF11D3474800972990 /* ScriptableDocumentParser.h */,
+				E46B41F81CB24E70008F11DE /* ScriptDisallowedScope.h */,
 				4998AECF13FB224D0090B1AA /* ScriptedAnimationController.cpp */,
 				4998AED013FB224D0090B1AA /* ScriptedAnimationController.h */,
-				E46B41F81CB24E70008F11DE /* ScriptDisallowedScope.h */,
 				08A484750E5272C500C3FE76 /* ScriptElement.cpp */,
 				08A484760E5272C500C3FE76 /* ScriptElement.h */,
 				E3E4E2A51E3B16FC0023BB8A /* ScriptElementCachedScriptFetcher.cpp */,
@@ -27338,6 +27343,7 @@
 				BCEA485A097D93020094C9E4 /* InlineTextBox.h in Headers */,
 				1C010701192594DF008A4201 /* InlineTextBoxStyle.h in Headers */,
 				510A58E51BAA40B100C19282 /* InProcessIDBServer.h in Headers */,
+				512B57C01FE99083000A1E5E /* InProcessMessagePortChannel.h in Headers */,
 				2EB767571DA19BDF003E23B5 /* InputEvent.h in Headers */,
 				37E3524D12450C6600BAF5D9 /* InputType.h in Headers */,
 				C348612415FDE21E007A1CC9 /* InputTypeNames.h in Headers */,
@@ -28482,7 +28488,6 @@
 				63D7B32D0E78CD3F00F7617C /* NodeRenderStyle.h in Headers */,
 				E43105BB16750F1600DB2FB8 /* NodeTraversal.h in Headers */,
 				9382AAB40D8C386100F357A6 /* NodeWithIndex.h in Headers */,
-				E46B41F91CB24E70008F11DE /* ScriptDisallowedScope.h in Headers */,
 				312C0C41146DC6CC0016C911 /* Notification.h in Headers */,
 				33503C9A10179A74003B47E1 /* NotificationClient.h in Headers */,
 				3128CA6B147331630074C72A /* NotificationController.h in Headers */,
@@ -28643,7 +28648,6 @@
 				CEEFCD7C19DB33DC003876D7 /* PlatformMediaResourceLoader.h in Headers */,
 				070E09191875EEFC003A1D3C /* PlatformMediaSession.h in Headers */,
 				07F944161864D046005D31CB /* PlatformMediaSessionManager.h in Headers */,
-				41BF70100FE86F61005E8DEC /* PlatformMessagePortChannel.h in Headers */,
 				935C476909AC4D4300A6AAB4 /* PlatformMouseEvent.h in Headers */,
 				C598905814E9C29900E8D18B /* PlatformPasteboard.h in Headers */,
 				BCEC01D70C274EB4009F4EC9 /* PlatformScreen.h in Headers */,
@@ -28893,6 +28897,7 @@
 				93F1998C08245E59001E9ABC /* RenderTreeAsText.h in Headers */,
 				E47C392D1FE6E0F300BBBC6B /* RenderTreeBuilder.h in Headers */,
 				E47C39301FE6E0FD00BBBC6B /* RenderTreeBuilderFirstLetter.h in Headers */,
+				119340971FED715500935F1E /* RenderTreeBuilderFormControls.h in Headers */,
 				E47C39321FE6E10500BBBC6B /* RenderTreeBuilderList.h in Headers */,
 				E47C39331FE6E10800BBBC6B /* RenderTreeBuilderMultiColumn.h in Headers */,
 				1193408A1FEB355D00935F1E /* RenderTreeBuilderRuby.h in Headers */,
@@ -29002,6 +29007,7 @@
 				A84D82C111D3474800972990 /* ScriptableDocumentParser.h in Headers */,
 				41F1D21F0EF35C2A00DA8753 /* ScriptCachedFrameData.h in Headers */,
 				93B70D7009EB0C7C009D8468 /* ScriptController.h in Headers */,
+				E46B41F91CB24E70008F11DE /* ScriptDisallowedScope.h in Headers */,
 				4998AED213FB224D0090B1AA /* ScriptedAnimationController.h in Headers */,
 				08A484780E5272C500C3FE76 /* ScriptElement.h in Headers */,
 				E3E4E2A81E3B17100023BB8A /* ScriptElementCachedScriptFetcher.h in Headers */,
@@ -29758,7 +29764,6 @@
 				A5B81CB51FAA44620037D1E6 /* WebConsoleAgent.h in Headers */,
 				9BBA2CAB1F679E0C00FD1C1E /* WebContentReader.h in Headers */,
 				419BE7591BC7F42B00E1C85B /* WebCoreBuiltinNames.h in Headers */,
-				512B57C01FE99083000A1E5E /* InProcessMessagePortChannel.h in Headers */,
 				2D3EF44A1917915C00034184 /* WebCoreCALayerExtras.h in Headers */,
 				515F79541CFCA3D500CCED93 /* WebCoreCrossThreadCopier.h in Headers */,
 				CD5D27781E8318E000D80A3D /* WebCoreDecompressionSession.h in Headers */,

Modified: trunk/Source/WebCore/rendering/RenderButton.cpp (226272 => 226273)


--- trunk/Source/WebCore/rendering/RenderButton.cpp	2017-12-22 20:41:48 UTC (rev 226272)
+++ trunk/Source/WebCore/rendering/RenderButton.cpp	2017-12-22 20:43:35 UTC (rev 226273)
@@ -67,6 +67,7 @@
 {
     ASSERT(!m_inner.get());
     m_inner = makeWeakPtr(innerRenderer);
+    updateAnonymousChildStyle(m_inner->mutableStyle());
 }
 
 RenderPtr<RenderObject> RenderButton::takeChild(RenderObject& oldChild)

Modified: trunk/Source/WebCore/rendering/RenderMenuList.cpp (226272 => 226273)


--- trunk/Source/WebCore/rendering/RenderMenuList.cpp	2017-12-22 20:41:48 UTC (rev 226272)
+++ trunk/Source/WebCore/rendering/RenderMenuList.cpp	2017-12-22 20:43:35 UTC (rev 226273)
@@ -100,20 +100,11 @@
     RenderFlexibleBox::willBeDestroyed();
 }
 
-void RenderMenuList::createInnerBlock()
+void RenderMenuList::setInnerRenderer(RenderBlock& innerRenderer)
 {
-    if (m_innerBlock) {
-        ASSERT(firstChild() == m_innerBlock);
-        ASSERT(!m_innerBlock->nextSibling());
-        return;
-    }
-
-    // Create an anonymous block.
-    ASSERT(!firstChild());
-    auto newInnerBlock = createAnonymousBlock();
-    m_innerBlock = makeWeakPtr(*newInnerBlock.get());
+    ASSERT(!m_innerBlock.get());
+    m_innerBlock = makeWeakPtr(innerRenderer);
     adjustInnerStyle();
-    RenderFlexibleBox::addChild(*RenderTreeBuilder::current(), WTFMove(newInnerBlock));
 }
 
 void RenderMenuList::adjustInnerStyle()
@@ -175,15 +166,10 @@
     return downcast<HTMLSelectElement>(nodeForNonAnonymous());
 }
 
-void RenderMenuList::addChild(RenderTreeBuilder& builder, RenderPtr<RenderObject> newChild, RenderObject* beforeChild)
+void RenderMenuList::addChild(RenderTreeBuilder&, RenderPtr<RenderObject> child, RenderObject*)
 {
-    createInnerBlock();
-    auto& child = *newChild;
-    builder.insertChild(*m_innerBlock, WTFMove(newChild), beforeChild);
-    ASSERT(m_innerBlock == firstChild());
-
     if (AXObjectCache* cache = document().existingAXObjectCache())
-        cache->childrenChanged(this, &child);
+        cache->childrenChanged(this, child.get());
 }
 
 RenderPtr<RenderObject> RenderMenuList::takeChild(RenderObject& oldChild)
@@ -374,10 +360,7 @@
     if (m_popupIsVisible)
         return;
 
-    // Create m_innerBlock here so it ends up as the first child.
-    // This is important because otherwise we might try to create m_innerBlock
-    // inside the showPopup call and it would fail.
-    createInnerBlock();
+    ASSERT(m_innerBlock);
     if (!m_popup)
         m_popup = document().page()->chrome().createPopupMenu(*this);
     m_popupIsVisible = true;

Modified: trunk/Source/WebCore/rendering/RenderMenuList.h (226272 => 226273)


--- trunk/Source/WebCore/rendering/RenderMenuList.h	2017-12-22 20:41:48 UTC (rev 226272)
+++ trunk/Source/WebCore/rendering/RenderMenuList.h	2017-12-22 20:43:35 UTC (rev 226273)
@@ -59,6 +59,9 @@
 
     String text() const;
 
+    RenderBlock* innerRenderer() const { return m_innerBlock.get(); }
+    void setInnerRenderer(RenderBlock&);
+
 private:
     void willBeDestroyed() override;
 
@@ -127,7 +130,6 @@
 
     void getItemBackgroundColor(unsigned listIndex, Color&, bool& itemHasCustomBackgroundColor) const;
 
-    void createInnerBlock();
     void adjustInnerStyle();
     void setText(const String&);
     void setTextFromOption(int optionIndex);

Modified: trunk/Source/WebCore/rendering/updating/RenderTreeBuilder.cpp (226272 => 226273)


--- trunk/Source/WebCore/rendering/updating/RenderTreeBuilder.cpp	2017-12-22 20:41:48 UTC (rev 226272)
+++ trunk/Source/WebCore/rendering/updating/RenderTreeBuilder.cpp	2017-12-22 20:43:35 UTC (rev 226273)
@@ -34,6 +34,7 @@
 #include "RenderTableRow.h"
 #include "RenderText.h"
 #include "RenderTreeBuilderFirstLetter.h"
+#include "RenderTreeBuilderFormControls.h"
 #include "RenderTreeBuilderList.h"
 #include "RenderTreeBuilderMultiColumn.h"
 #include "RenderTreeBuilderRuby.h"
@@ -50,6 +51,7 @@
     , m_multiColumnBuilder(std::make_unique<MultiColumn>(*this))
     , m_tableBuilder(std::make_unique<Table>(*this))
     , m_rubyBuilder(std::make_unique<Ruby>(*this))
+    , m_formControlsBuilder(std::make_unique<FormControls>(*this))
 {
     RELEASE_ASSERT(!s_current || &m_view != &s_current->m_view);
     m_previous = s_current;
@@ -61,19 +63,6 @@
     s_current = m_previous;
 }
 
-static RenderBlock& createInnerRendererForButtonIfNeeded(RenderButton& button, RenderTreeBuilder& builder)
-{
-    auto* innerRenderer = button.innerRenderer();
-    if (innerRenderer)
-        return *innerRenderer;
-    auto wrapper = button.createAnonymousBlock(button.style().display());
-    innerRenderer = wrapper.get();
-    button.updateAnonymousChildStyle(wrapper->mutableStyle());
-    button.RenderFlexibleBox::addChild(builder, WTFMove(wrapper));
-    button.setInnerRenderer(*innerRenderer);
-    return *innerRenderer;
-}
-
 void RenderTreeBuilder::insertChild(RenderElement& parent, RenderPtr<RenderObject> child, RenderObject* beforeChild)
 {
     auto insertRecursiveIfNeeded = [&](RenderElement& parentCandidate) {
@@ -122,9 +111,15 @@
     }
 
     if (is<RenderButton>(parent)) {
-        insertRecursiveIfNeeded(createInnerRendererForButtonIfNeeded(downcast<RenderButton>(parent), *this));
+        insertRecursiveIfNeeded(formControlsBuilder().createInnerRendererIfNeeded(downcast<RenderButton>(parent)));
         return;
     }
+
+    if (is<RenderMenuList>(parent)) {
+        insertRecursiveIfNeeded(formControlsBuilder().createInnerRendererIfNeeded(downcast<RenderMenuList>(parent)));
+        return;
+    }
+
     parent.addChild(*this, WTFMove(child), beforeChild);
 }
 

Modified: trunk/Source/WebCore/rendering/updating/RenderTreeBuilder.h (226272 => 226273)


--- trunk/Source/WebCore/rendering/updating/RenderTreeBuilder.h	2017-12-22 20:41:48 UTC (rev 226272)
+++ trunk/Source/WebCore/rendering/updating/RenderTreeBuilder.h	2017-12-22 20:43:35 UTC (rev 226273)
@@ -52,6 +52,7 @@
     class MultiColumn;
     class Table;
     class Ruby;
+    class FormControls;
 
     FirstLetter& firstLetterBuilder() { return *m_firstLetterBuilder; }
     List& listBuilder() { return *m_listBuilder; }
@@ -58,6 +59,7 @@
     MultiColumn& multiColumnBuilder() { return *m_multiColumnBuilder; }
     Table& tableBuilder() { return *m_tableBuilder; }
     Ruby& rubyBuilder() { return *m_rubyBuilder; }
+    FormControls& formControlsBuilder() { return *m_formControlsBuilder; }
 
     RenderView& m_view;
 
@@ -69,6 +71,7 @@
     std::unique_ptr<MultiColumn> m_multiColumnBuilder;
     std::unique_ptr<Table> m_tableBuilder;
     std::unique_ptr<Ruby> m_rubyBuilder;
+    std::unique_ptr<FormControls> m_formControlsBuilder;
 };
 
 }

Copied: trunk/Source/WebCore/rendering/updating/RenderTreeBuilderFormControls.cpp (from rev 226272, trunk/Source/WebCore/rendering/updating/RenderTreeBuilder.h) (0 => 226273)


--- trunk/Source/WebCore/rendering/updating/RenderTreeBuilderFormControls.cpp	                        (rev 0)
+++ trunk/Source/WebCore/rendering/updating/RenderTreeBuilderFormControls.cpp	2017-12-22 20:43:35 UTC (rev 226273)
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2017 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "RenderTreeBuilderFormControls.h"
+
+#include "RenderButton.h"
+#include "RenderMenuList.h"
+
+namespace WebCore {
+
+RenderTreeBuilder::FormControls::FormControls(RenderTreeBuilder& builder)
+    : m_builder(builder)
+{
+}
+
+RenderBlock& RenderTreeBuilder::FormControls::createInnerRendererIfNeeded(RenderButton& button)
+{
+    auto* innerRenderer = button.innerRenderer();
+    if (innerRenderer)
+        return *innerRenderer;
+
+    auto wrapper = button.createAnonymousBlock(button.style().display());
+    innerRenderer = wrapper.get();
+    button.RenderFlexibleBox::addChild(m_builder, WTFMove(wrapper));
+    button.setInnerRenderer(*innerRenderer);
+    return *innerRenderer;
+}
+
+RenderBlock& RenderTreeBuilder::FormControls::createInnerRendererIfNeeded(RenderMenuList& menuList)
+{
+    auto* innerRenderer = menuList.innerRenderer();
+    if (innerRenderer)
+        return *innerRenderer;
+
+    auto wrapper = menuList.createAnonymousBlock();
+    innerRenderer = wrapper.get();
+    menuList.RenderFlexibleBox::addChild(m_builder, WTFMove(wrapper));
+    menuList.setInnerRenderer(*innerRenderer);
+    return *innerRenderer;
+}
+
+}

Copied: trunk/Source/WebCore/rendering/updating/RenderTreeBuilderFormControls.h (from rev 226272, trunk/Source/WebCore/rendering/updating/RenderTreeBuilder.h) (0 => 226273)


--- trunk/Source/WebCore/rendering/updating/RenderTreeBuilderFormControls.h	                        (rev 0)
+++ trunk/Source/WebCore/rendering/updating/RenderTreeBuilderFormControls.h	2017-12-22 20:43:35 UTC (rev 226273)
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2017 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#include "RenderTreeBuilder.h"
+
+namespace WebCore {
+
+class RenderBlock;
+class RenderButton;
+class RenderMenuList;
+
+class RenderTreeBuilder::FormControls {
+public:
+    FormControls(RenderTreeBuilder&);
+
+    RenderBlock& createInnerRendererIfNeeded(RenderButton&);
+    RenderBlock& createInnerRendererIfNeeded(RenderMenuList&);
+
+private:
+    RenderTreeBuilder& m_builder;
+};
+
+}
+
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to