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

Side by Side Diff: third_party/WebKit/Source/core/css/parser/CSSSelectorParser.cpp

Issue 2795143004: [selectors4] Implement :focus-within pseudo-class (Closed)
Patch Set: Rebased patch Created 3 years, 8 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 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "core/css/parser/CSSSelectorParser.h" 5 #include "core/css/parser/CSSSelectorParser.h"
6 6
7 #include "core/css/CSSSelectorList.h" 7 #include "core/css/CSSSelectorList.h"
8 #include "core/css/StyleSheetContents.h" 8 #include "core/css/StyleSheetContents.h"
9 #include "core/css/parser/CSSParserContext.h" 9 #include "core/css/parser/CSSParserContext.h"
10 #include "core/frame/Deprecation.h" 10 #include "core/frame/Deprecation.h"
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after
166 return true; 166 return true;
167 default: 167 default:
168 return false; 168 return false;
169 } 169 }
170 } 170 }
171 171
172 bool IsUserActionPseudoClass(CSSSelector::PseudoType pseudo) { 172 bool IsUserActionPseudoClass(CSSSelector::PseudoType pseudo) {
173 switch (pseudo) { 173 switch (pseudo) {
174 case CSSSelector::kPseudoHover: 174 case CSSSelector::kPseudoHover:
175 case CSSSelector::kPseudoFocus: 175 case CSSSelector::kPseudoFocus:
176 case CSSSelector::kPseudoFocusWithin:
176 case CSSSelector::kPseudoActive: 177 case CSSSelector::kPseudoActive:
177 return true; 178 return true;
178 default: 179 default:
179 return false; 180 return false;
180 } 181 }
181 } 182 }
182 183
183 bool IsPseudoClassValidAfterPseudoElement( 184 bool IsPseudoClassValidAfterPseudoElement(
184 CSSSelector::PseudoType pseudo_class, 185 CSSSelector::PseudoType pseudo_class,
185 CSSSelector::PseudoType compound_pseudo_element) { 186 CSSSelector::PseudoType compound_pseudo_element) {
(...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after
436 return nullptr; 437 return nullptr;
437 438
438 std::unique_ptr<CSSParserSelector> selector = CSSParserSelector::Create(); 439 std::unique_ptr<CSSParserSelector> selector = CSSParserSelector::Create();
439 selector->SetMatch(colons == 1 ? CSSSelector::kPseudoClass 440 selector->SetMatch(colons == 1 ? CSSSelector::kPseudoClass
440 : CSSSelector::kPseudoElement); 441 : CSSSelector::kPseudoElement);
441 442
442 AtomicString value = token.Value().ToAtomicString().LowerASCII(); 443 AtomicString value = token.Value().ToAtomicString().LowerASCII();
443 bool has_arguments = token.GetType() == kFunctionToken; 444 bool has_arguments = token.GetType() == kFunctionToken;
444 selector->UpdatePseudoType(value, has_arguments); 445 selector->UpdatePseudoType(value, has_arguments);
445 446
447 if (!RuntimeEnabledFeatures::cssSelectorsFocusWithinEnabled() &&
448 selector->GetPseudoType() == CSSSelector::kPseudoFocusWithin)
449 return nullptr;
450
446 if (selector->Match() == CSSSelector::kPseudoElement && 451 if (selector->Match() == CSSSelector::kPseudoElement &&
447 disallow_pseudo_elements_) 452 disallow_pseudo_elements_)
448 return nullptr; 453 return nullptr;
449 454
450 if (token.GetType() == kIdentToken) { 455 if (token.GetType() == kIdentToken) {
451 range.Consume(); 456 range.Consume();
452 if (selector->GetPseudoType() == CSSSelector::kPseudoUnknown) 457 if (selector->GetPseudoType() == CSSSelector::kPseudoUnknown)
453 return nullptr; 458 return nullptr;
454 return selector; 459 return selector;
455 } 460 }
(...skipping 437 matching lines...) Expand 10 before | Expand all | Expand 10 after
893 } 898 }
894 if (current->Relation() == CSSSelector::kIndirectAdjacent) 899 if (current->Relation() == CSSSelector::kIndirectAdjacent)
895 context_->Count(UseCounter::kCSSSelectorIndirectAdjacent); 900 context_->Count(UseCounter::kCSSSelectorIndirectAdjacent);
896 if (current->SelectorList()) 901 if (current->SelectorList())
897 RecordUsageAndDeprecations(*current->SelectorList()); 902 RecordUsageAndDeprecations(*current->SelectorList());
898 } 903 }
899 } 904 }
900 } 905 }
901 906
902 } // namespace blink 907 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698