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

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: Support display: contents for elements, first-line and first-letter pseudos. Created 3 years, 10 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 25 matching lines...) Expand all
36 #include "core/style/ComputedStyle.h" 36 #include "core/style/ComputedStyle.h"
37 #include "wtf/StdLibExtras.h" 37 #include "wtf/StdLibExtras.h"
38 #include "wtf/text/CharacterNames.h" 38 #include "wtf/text/CharacterNames.h"
39 39
40 namespace blink { 40 namespace blink {
41 41
42 using namespace HTMLNames; 42 using namespace HTMLNames;
43 43
44 inline HTMLOptGroupElement::HTMLOptGroupElement(Document& document) 44 inline HTMLOptGroupElement::HTMLOptGroupElement(Document& document)
45 : HTMLElement(optgroupTag, document) { 45 : HTMLElement(optgroupTag, document) {
46 setHasCustomStyleCallbacks();
47 } 46 }
48 47
49 // An explicit empty destructor should be in HTMLOptGroupElement.cpp, because 48 // An explicit empty destructor should be in HTMLOptGroupElement.cpp, because
50 // if an implicit destructor is used or an empty destructor is defined in 49 // if an implicit destructor is used or an empty destructor is defined in
51 // HTMLOptGroupElement.h, when including HTMLOptGroupElement.h, 50 // HTMLOptGroupElement.h, when including HTMLOptGroupElement.h,
52 // msvc tries to expand the destructor and causes 51 // msvc tries to expand the destructor and causes
53 // a compile error because of lack of ComputedStyle definition. 52 // a compile error because of lack of ComputedStyle definition.
54 HTMLOptGroupElement::~HTMLOptGroupElement() {} 53 HTMLOptGroupElement::~HTMLOptGroupElement() {}
55 54
56 HTMLOptGroupElement* HTMLOptGroupElement::create(Document& document) { 55 HTMLOptGroupElement* HTMLOptGroupElement::create(Document& document) {
(...skipping 11 matching lines...) Expand all
68 HTMLElement::parseAttribute(params); 67 HTMLElement::parseAttribute(params);
69 68
70 if (params.name == disabledAttr) { 69 if (params.name == disabledAttr) {
71 pseudoStateChanged(CSSSelector::PseudoDisabled); 70 pseudoStateChanged(CSSSelector::PseudoDisabled);
72 pseudoStateChanged(CSSSelector::PseudoEnabled); 71 pseudoStateChanged(CSSSelector::PseudoEnabled);
73 } else if (params.name == labelAttr) { 72 } else if (params.name == labelAttr) {
74 updateGroupLabel(); 73 updateGroupLabel();
75 } 74 }
76 } 75 }
77 76
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 { 77 bool HTMLOptGroupElement::supportsFocus() const {
92 HTMLSelectElement* select = ownerSelectElement(); 78 HTMLSelectElement* select = ownerSelectElement();
93 if (select && select->usesMenuList()) 79 if (select && select->usesMenuList())
94 return false; 80 return false;
95 return HTMLElement::supportsFocus(); 81 return HTMLElement::supportsFocus();
96 } 82 }
97 83
98 bool HTMLOptGroupElement::matchesEnabledPseudoClass() const { 84 bool HTMLOptGroupElement::matchesEnabledPseudoClass() const {
99 return !isDisabledFormControl(); 85 return !isDisabledFormControl();
100 } 86 }
101 87
102 Node::InsertionNotificationRequest HTMLOptGroupElement::insertedInto( 88 Node::InsertionNotificationRequest HTMLOptGroupElement::insertedInto(
103 ContainerNode* insertionPoint) { 89 ContainerNode* insertionPoint) {
104 HTMLElement::insertedInto(insertionPoint); 90 HTMLElement::insertedInto(insertionPoint);
105 if (HTMLSelectElement* select = ownerSelectElement()) { 91 if (HTMLSelectElement* select = ownerSelectElement()) {
106 if (insertionPoint == select) 92 if (insertionPoint == select)
107 select->optGroupInsertedOrRemoved(*this); 93 select->optGroupInsertedOrRemoved(*this);
108 } 94 }
109 return InsertionDone; 95 return InsertionDone;
110 } 96 }
111 97
112 void HTMLOptGroupElement::removedFrom(ContainerNode* insertionPoint) { 98 void HTMLOptGroupElement::removedFrom(ContainerNode* insertionPoint) {
113 if (isHTMLSelectElement(*insertionPoint)) { 99 if (isHTMLSelectElement(*insertionPoint)) {
114 if (!parentNode()) 100 if (!parentNode())
115 toHTMLSelectElement(insertionPoint)->optGroupInsertedOrRemoved(*this); 101 toHTMLSelectElement(insertionPoint)->optGroupInsertedOrRemoved(*this);
116 } 102 }
117 HTMLElement::removedFrom(insertionPoint); 103 HTMLElement::removedFrom(insertionPoint);
118 } 104 }
119 105
120 void HTMLOptGroupElement::updateNonComputedStyle() {
121 m_style = originalStyleForLayoutObject();
122 if (layoutObject()) {
123 if (HTMLSelectElement* select = ownerSelectElement())
124 select->updateListOnLayoutObject();
125 }
126 }
127
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 { 106 String HTMLOptGroupElement::groupLabelText() const {
138 String itemText = getAttribute(labelAttr); 107 String itemText = getAttribute(labelAttr);
139 108
140 // In WinIE, leading and trailing whitespace is ignored in options and 109 // In WinIE, leading and trailing whitespace is ignored in options and
141 // optgroups. We match this behavior. 110 // optgroups. We match this behavior.
142 itemText = itemText.stripWhiteSpace(); 111 itemText = itemText.stripWhiteSpace();
143 // We want to collapse our whitespace too. This will match other browsers. 112 // We want to collapse our whitespace too. This will match other browsers.
144 itemText = itemText.simplifyWhiteSpace(); 113 itemText = itemText.simplifyWhiteSpace();
145 114
146 return itemText; 115 return itemText;
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
186 label.setTextContent(labelText); 155 label.setTextContent(labelText);
187 label.setAttribute(aria_labelAttr, AtomicString(labelText)); 156 label.setAttribute(aria_labelAttr, AtomicString(labelText));
188 } 157 }
189 158
190 HTMLDivElement& HTMLOptGroupElement::optGroupLabelElement() const { 159 HTMLDivElement& HTMLOptGroupElement::optGroupLabelElement() const {
191 return *toHTMLDivElementOrDie(userAgentShadowRoot()->getElementById( 160 return *toHTMLDivElementOrDie(userAgentShadowRoot()->getElementById(
192 ShadowElementNames::optGroupLabel())); 161 ShadowElementNames::optGroupLabel()));
193 } 162 }
194 163
195 } // namespace blink 164 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698