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

Side by Side Diff: third_party/WebKit/Source/core/html/HTMLOptGroupElement.cpp

Issue 2450093005: Support display: contents for elements, first-line and first-letter pseudos. (Closed)
Patch Set: Rebased Created 3 years, 11 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) 1999 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) 3 * (C) 1999 Antti Koivisto (koivisto@kde.org)
4 * (C) 2001 Dirk Mueller (mueller@kde.org) 4 * (C) 2001 Dirk Mueller (mueller@kde.org)
5 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2010 Apple Inc. All rights 5 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2010 Apple Inc. All rights
6 * reserved. 6 * reserved.
7 * (C) 2006 Alexey Proskuryakov (ap@nypop.com) 7 * (C) 2006 Alexey Proskuryakov (ap@nypop.com)
8 * 8 *
9 * This library is free software; you can redistribute it and/or 9 * This library is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU Library General Public 10 * modify it under the terms of the GNU Library General Public
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
68 HTMLElement::parseAttribute(params); 68 HTMLElement::parseAttribute(params);
69 69
70 if (params.name == disabledAttr) { 70 if (params.name == disabledAttr) {
71 pseudoStateChanged(CSSSelector::PseudoDisabled); 71 pseudoStateChanged(CSSSelector::PseudoDisabled);
72 pseudoStateChanged(CSSSelector::PseudoEnabled); 72 pseudoStateChanged(CSSSelector::PseudoEnabled);
73 } else if (params.name == labelAttr) { 73 } else if (params.name == labelAttr) {
74 updateGroupLabel(); 74 updateGroupLabel();
75 } 75 }
76 } 76 }
77 77
78 void HTMLOptGroupElement::attachLayoutTree(const AttachContext& context) {
79 if (context.resolvedStyle) {
80 DCHECK(!m_style || m_style == context.resolvedStyle);
81 m_style = context.resolvedStyle;
82 }
83 HTMLElement::attachLayoutTree(context);
84 }
85
86 void HTMLOptGroupElement::detachLayoutTree(const AttachContext& context) {
87 m_style.clear();
88 HTMLElement::detachLayoutTree(context);
89 }
90
91 bool HTMLOptGroupElement::supportsFocus() const { 78 bool HTMLOptGroupElement::supportsFocus() const {
92 HTMLSelectElement* select = ownerSelectElement(); 79 HTMLSelectElement* select = ownerSelectElement();
93 if (select && select->usesMenuList()) 80 if (select && select->usesMenuList())
94 return false; 81 return false;
95 return HTMLElement::supportsFocus(); 82 return HTMLElement::supportsFocus();
96 } 83 }
97 84
98 bool HTMLOptGroupElement::matchesEnabledPseudoClass() const { 85 bool HTMLOptGroupElement::matchesEnabledPseudoClass() const {
99 return !isDisabledFormControl(); 86 return !isDisabledFormControl();
100 } 87 }
101 88
102 Node::InsertionNotificationRequest HTMLOptGroupElement::insertedInto( 89 Node::InsertionNotificationRequest HTMLOptGroupElement::insertedInto(
103 ContainerNode* insertionPoint) { 90 ContainerNode* insertionPoint) {
104 HTMLElement::insertedInto(insertionPoint); 91 HTMLElement::insertedInto(insertionPoint);
105 if (HTMLSelectElement* select = ownerSelectElement()) { 92 if (HTMLSelectElement* select = ownerSelectElement()) {
106 if (insertionPoint == select) 93 if (insertionPoint == select)
107 select->optGroupInsertedOrRemoved(*this); 94 select->optGroupInsertedOrRemoved(*this);
108 } 95 }
109 return InsertionDone; 96 return InsertionDone;
110 } 97 }
111 98
112 void HTMLOptGroupElement::removedFrom(ContainerNode* insertionPoint) { 99 void HTMLOptGroupElement::removedFrom(ContainerNode* insertionPoint) {
113 if (isHTMLSelectElement(*insertionPoint)) { 100 if (isHTMLSelectElement(*insertionPoint)) {
114 if (!parentNode()) 101 if (!parentNode())
115 toHTMLSelectElement(insertionPoint)->optGroupInsertedOrRemoved(*this); 102 toHTMLSelectElement(insertionPoint)->optGroupInsertedOrRemoved(*this);
116 } 103 }
117 HTMLElement::removedFrom(insertionPoint); 104 HTMLElement::removedFrom(insertionPoint);
118 } 105 }
119 106
120 void HTMLOptGroupElement::updateNonComputedStyle() { 107 void HTMLOptGroupElement::willRecalcStyle(StyleRecalcChange change) {
121 m_style = originalStyleForLayoutObject(); 108 if (layoutObject() && (change >= IndependentInherit || needsStyleRecalc())) {
rune 2017/01/27 13:09:23 I don't think I understand this test completely. A
emilio 2017/01/27 22:13:15 These were the conditions that gated the customSty
rune 2017/02/06 22:40:44 I cannot make sense of this at all. layoutObject()
emilio 2017/02/08 10:59:24 So I experimented with this, and this condition is
122 if (layoutObject()) {
123 if (HTMLSelectElement* select = ownerSelectElement()) 109 if (HTMLSelectElement* select = ownerSelectElement())
124 select->updateListOnLayoutObject(); 110 select->updateListOnLayoutObject();
125 } 111 }
126 } 112 }
127 113
128 ComputedStyle* HTMLOptGroupElement::nonLayoutObjectComputedStyle() const {
129 return m_style.get();
130 }
131
132 PassRefPtr<ComputedStyle> HTMLOptGroupElement::customStyleForLayoutObject() {
133 updateNonComputedStyle();
134 return m_style;
135 }
136
137 String HTMLOptGroupElement::groupLabelText() const { 114 String HTMLOptGroupElement::groupLabelText() const {
138 String itemText = getAttribute(labelAttr); 115 String itemText = getAttribute(labelAttr);
139 116
140 // In WinIE, leading and trailing whitespace is ignored in options and 117 // In WinIE, leading and trailing whitespace is ignored in options and
141 // optgroups. We match this behavior. 118 // optgroups. We match this behavior.
142 itemText = itemText.stripWhiteSpace(); 119 itemText = itemText.stripWhiteSpace();
143 // We want to collapse our whitespace too. This will match other browsers. 120 // We want to collapse our whitespace too. This will match other browsers.
144 itemText = itemText.simplifyWhiteSpace(); 121 itemText = itemText.simplifyWhiteSpace();
145 122
146 return itemText; 123 return itemText;
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
186 label.setTextContent(labelText); 163 label.setTextContent(labelText);
187 label.setAttribute(aria_labelAttr, AtomicString(labelText)); 164 label.setAttribute(aria_labelAttr, AtomicString(labelText));
188 } 165 }
189 166
190 HTMLDivElement& HTMLOptGroupElement::optGroupLabelElement() const { 167 HTMLDivElement& HTMLOptGroupElement::optGroupLabelElement() const {
191 return *toHTMLDivElementOrDie(userAgentShadowRoot()->getElementById( 168 return *toHTMLDivElementOrDie(userAgentShadowRoot()->getElementById(
192 ShadowElementNames::optGroupLabel())); 169 ShadowElementNames::optGroupLabel()));
193 } 170 }
194 171
195 } // namespace blink 172 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698