Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(17)

Side by Side Diff: third_party/WebKit/Source/core/dom/ElementRareData.h

Issue 1943803002: Move PseudoElements storage to their own object. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Updated as per review comments Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2008, 2009, 2010 Apple Inc. All rights reserved. 2 * Copyright (C) 2008, 2009, 2010 Apple Inc. All rights reserved.
3 * Copyright (C) 2008 David Smith <catfish.man@gmail.com> 3 * Copyright (C) 2008 David Smith <catfish.man@gmail.com>
4 * 4 *
5 * This library is free software; you can redistribute it and/or 5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Library General Public 6 * modify it under the terms of the GNU Library General Public
7 * License as published by the Free Software Foundation; either 7 * License as published by the Free Software Foundation; either
8 * version 2 of the License, or (at your option) any later version. 8 * version 2 of the License, or (at your option) any later version.
9 * 9 *
10 * This library is distributed in the hope that it will be useful, 10 * This library is distributed in the hope that it will be useful,
(...skipping 13 matching lines...) Expand all
24 24
25 #include "core/animation/ElementAnimations.h" 25 #include "core/animation/ElementAnimations.h"
26 #include "core/css/cssom/InlineStylePropertyMap.h" 26 #include "core/css/cssom/InlineStylePropertyMap.h"
27 #include "core/dom/Attr.h" 27 #include "core/dom/Attr.h"
28 #include "core/dom/CompositorProxiedPropertySet.h" 28 #include "core/dom/CompositorProxiedPropertySet.h"
29 #include "core/dom/DatasetDOMStringMap.h" 29 #include "core/dom/DatasetDOMStringMap.h"
30 #include "core/dom/NamedNodeMap.h" 30 #include "core/dom/NamedNodeMap.h"
31 #include "core/dom/NodeIntersectionObserverData.h" 31 #include "core/dom/NodeIntersectionObserverData.h"
32 #include "core/dom/NodeRareData.h" 32 #include "core/dom/NodeRareData.h"
33 #include "core/dom/PseudoElement.h" 33 #include "core/dom/PseudoElement.h"
34 #include "core/dom/PseudoElementData.h"
34 #include "core/dom/custom/V0CustomElementDefinition.h" 35 #include "core/dom/custom/V0CustomElementDefinition.h"
35 #include "core/dom/shadow/ElementShadow.h" 36 #include "core/dom/shadow/ElementShadow.h"
36 #include "core/html/ClassList.h" 37 #include "core/html/ClassList.h"
37 #include "core/style/StyleInheritedData.h" 38 #include "core/style/StyleInheritedData.h"
38 #include "platform/heap/Handle.h" 39 #include "platform/heap/Handle.h"
39 #include "wtf/HashSet.h" 40 #include "wtf/HashSet.h"
40 #include "wtf/OwnPtr.h" 41 #include "wtf/OwnPtr.h"
41 42
42 namespace blink { 43 namespace blink {
43 44
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
156 Member<InlineCSSStyleDeclaration> m_cssomWrapper; 157 Member<InlineCSSStyleDeclaration> m_cssomWrapper;
157 Member<InlineStylePropertyMap> m_cssomMapWrapper; 158 Member<InlineStylePropertyMap> m_cssomMapWrapper;
158 OwnPtr<CompositorProxiedPropertySet> m_proxiedProperties; 159 OwnPtr<CompositorProxiedPropertySet> m_proxiedProperties;
159 160
160 Member<ElementAnimations> m_elementAnimations; 161 Member<ElementAnimations> m_elementAnimations;
161 Member<NodeIntersectionObserverData> m_intersectionObserverData; 162 Member<NodeIntersectionObserverData> m_intersectionObserverData;
162 163
163 RefPtr<ComputedStyle> m_computedStyle; 164 RefPtr<ComputedStyle> m_computedStyle;
164 Member<V0CustomElementDefinition> m_customElementDefinition; 165 Member<V0CustomElementDefinition> m_customElementDefinition;
165 166
166 Member<PseudoElement> m_generatedBefore; 167 Member<PseudoElementData> m_pseudoElementData;
167 Member<PseudoElement> m_generatedAfter;
168 Member<PseudoElement> m_generatedFirstLetter;
169 Member<PseudoElement> m_backdrop;
170 168
171 explicit ElementRareData(LayoutObject*); 169 explicit ElementRareData(LayoutObject*);
172 }; 170 };
173 171
174 inline LayoutSize defaultMinimumSizeForResizing() 172 inline LayoutSize defaultMinimumSizeForResizing()
175 { 173 {
176 return LayoutSize(LayoutUnit::max(), LayoutUnit::max()); 174 return LayoutSize(LayoutUnit::max(), LayoutUnit::max());
177 } 175 }
178 176
179 inline ElementRareData::ElementRareData(LayoutObject* layoutObject) 177 inline ElementRareData::ElementRareData(LayoutObject* layoutObject)
180 : NodeRareData(layoutObject) 178 : NodeRareData(layoutObject)
181 , m_tabindex(0) 179 , m_tabindex(0)
182 , m_minimumSizeForResizing(defaultMinimumSizeForResizing()) 180 , m_minimumSizeForResizing(defaultMinimumSizeForResizing())
183 , m_classList(nullptr) 181 , m_classList(nullptr)
184 { 182 {
185 m_isElementRareData = true; 183 m_isElementRareData = true;
186 } 184 }
187 185
188 inline ElementRareData::~ElementRareData() 186 inline ElementRareData::~ElementRareData()
189 { 187 {
190 DCHECK(!m_generatedBefore); 188 DCHECK(!m_pseudoElementData);
191 DCHECK(!m_generatedAfter);
192 DCHECK(!m_generatedFirstLetter);
193 DCHECK(!m_backdrop);
194 } 189 }
195 190
196 inline bool ElementRareData::hasPseudoElements() const 191 inline bool ElementRareData::hasPseudoElements() const
197 { 192 {
198 return m_generatedBefore || m_generatedAfter || m_backdrop || m_generatedFir stLetter; 193 return (m_pseudoElementData && m_pseudoElementData->hasPseudoElements());
199 } 194 }
200 195
201 inline void ElementRareData::clearPseudoElements() 196 inline void ElementRareData::clearPseudoElements()
202 { 197 {
203 setPseudoElement(PseudoIdBefore, nullptr); 198 if (m_pseudoElementData) {
204 setPseudoElement(PseudoIdAfter, nullptr); 199 m_pseudoElementData->clearPseudoElements();
205 setPseudoElement(PseudoIdBackdrop, nullptr); 200 m_pseudoElementData.clear();
206 setPseudoElement(PseudoIdFirstLetter, nullptr); 201 }
207 } 202 }
208 203
209 inline void ElementRareData::setPseudoElement(PseudoId pseudoId, PseudoElement* element) 204 inline void ElementRareData::setPseudoElement(PseudoId pseudoId, PseudoElement* element)
210 { 205 {
211 switch (pseudoId) { 206 if (!m_pseudoElementData)
212 case PseudoIdBefore: 207 m_pseudoElementData = PseudoElementData::create();
213 if (m_generatedBefore) 208 m_pseudoElementData->setPseudoElement(pseudoId, element);
214 m_generatedBefore->dispose();
215 m_generatedBefore = element;
216 break;
217 case PseudoIdAfter:
218 if (m_generatedAfter)
219 m_generatedAfter->dispose();
220 m_generatedAfter = element;
221 break;
222 case PseudoIdBackdrop:
223 if (m_backdrop)
224 m_backdrop->dispose();
225 m_backdrop = element;
226 break;
227 case PseudoIdFirstLetter:
228 if (m_generatedFirstLetter)
229 m_generatedFirstLetter->dispose();
230 m_generatedFirstLetter = element;
231 break;
232 default:
233 ASSERT_NOT_REACHED();
234 }
235 } 209 }
236 210
237 inline PseudoElement* ElementRareData::pseudoElement(PseudoId pseudoId) const 211 inline PseudoElement* ElementRareData::pseudoElement(PseudoId pseudoId) const
238 { 212 {
239 switch (pseudoId) { 213 if (!m_pseudoElementData)
240 case PseudoIdBefore: 214 return nullptr;
241 return m_generatedBefore.get(); 215 return m_pseudoElementData->pseudoElement(pseudoId);
242 case PseudoIdAfter:
243 return m_generatedAfter.get();
244 case PseudoIdBackdrop:
245 return m_backdrop.get();
246 case PseudoIdFirstLetter:
247 return m_generatedFirstLetter.get();
248 default:
249 return 0;
250 }
251 } 216 }
252 217
253 inline void ElementRareData::incrementCompositorProxiedProperties(uint32_t prope rties) 218 inline void ElementRareData::incrementCompositorProxiedProperties(uint32_t prope rties)
254 { 219 {
255 ensureCompositorProxiedPropertySet().increment(properties); 220 ensureCompositorProxiedPropertySet().increment(properties);
256 } 221 }
257 222
258 inline void ElementRareData::decrementCompositorProxiedProperties(uint32_t prope rties) 223 inline void ElementRareData::decrementCompositorProxiedProperties(uint32_t prope rties)
259 { 224 {
260 m_proxiedProperties->decrement(properties); 225 m_proxiedProperties->decrement(properties);
261 if (m_proxiedProperties->isEmpty()) 226 if (m_proxiedProperties->isEmpty())
262 clearCompositorProxiedPropertySet(); 227 clearCompositorProxiedPropertySet();
263 } 228 }
264 229
265 inline CompositorProxiedPropertySet& ElementRareData::ensureCompositorProxiedPro pertySet() 230 inline CompositorProxiedPropertySet& ElementRareData::ensureCompositorProxiedPro pertySet()
266 { 231 {
267 if (!m_proxiedProperties) 232 if (!m_proxiedProperties)
268 m_proxiedProperties = CompositorProxiedPropertySet::create(); 233 m_proxiedProperties = CompositorProxiedPropertySet::create();
269 return *m_proxiedProperties; 234 return *m_proxiedProperties;
270 } 235 }
271 236
272 } // namespace blink 237 } // namespace blink
273 238
274 #endif // ElementRareData_h 239 #endif // ElementRareData_h
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/core.gypi ('k') | third_party/WebKit/Source/core/dom/ElementRareData.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698