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;
+};
+
+}
+