Changeset 171486 in webkit
- Timestamp:
- Jul 23, 2014 1:19:37 PM (10 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r171482 r171486 1 2014-07-23 Alex Christensen <achristensen@webkit.org> 2 3 Compile window-inactive and fullscreen pseudoclasses in css selectors. 4 https://bugs.webkit.org/show_bug.cgi?id=135200 5 6 Reviewed by Benjamin Poulain. 7 8 * css/SelectorChecker.cpp: 9 (WebCore::SelectorChecker::checkOne): 10 Removed the check of context.hasSelectionPseudo for a window-inactive pseudoclass. 11 Moved logic to SelectorCheckerTestFunctions.h to share with the selector compiler. 12 * css/SelectorCheckerTestFunctions.h: 13 (WebCore::isWindowInactive): 14 (WebCore::matchesFullScreenAnimatingFullScreenTransitionPseudoClass): 15 (WebCore::matchesFullScreenAncestorPseudoClass): 16 (WebCore::matchesFullScreenDocumentPseudoClass): 17 Added from SelectorChecker.cpp. 18 * cssjit/SelectorCompiler.cpp: 19 (WebCore::SelectorCompiler::addPseudoClassType): 20 Added unoptimized pseudoclass cases for window-inactive and fullscreen pseudoclasses. 21 Explicitly listed uncompiled pseudoclasses for future work instead of using a default. 22 1 23 2014-07-23 Brent Fulgham <bfulgham@apple.com> 2 24 -
trunk/Source/WebCore/css/SelectorChecker.cpp
r171378 r171486 33 33 #include "Document.h" 34 34 #include "ElementTraversal.h" 35 #include "FocusController.h"36 35 #include "Frame.h" 37 36 #include "FrameSelection.h" … … 482 481 // (since there are no elements involved). 483 482 return checkScrollbarPseudoClass(context, &element->document(), selector); 484 } else if (context.hasSelectionPseudo) {485 if (selector->pseudoClassType() == CSSSelector::PseudoClassWindowInactive)486 return !element->document().page()->focusController().isActive();487 483 } 488 484 … … 746 742 return matchesFullScreenPseudoClass(element); 747 743 case CSSSelector::PseudoClassAnimatingFullScreenTransition: 748 if (element != element->document().webkitCurrentFullScreenElement()) 749 return false; 750 return element->document().isAnimatingFullScreen(); 744 return matchesFullScreenAnimatingFullScreenTransitionPseudoClass(element); 751 745 case CSSSelector::PseudoClassFullScreenAncestor: 752 return element->containsFullScreenElement();746 return matchesFullScreenAncestorPseudoClass(element); 753 747 case CSSSelector::PseudoClassFullScreenDocument: 754 // While a Document is in the fullscreen state, the 'full-screen-document' pseudoclass applies 755 // to all elements of that Document. 756 if (!element->document().webkitIsFullScreen()) 757 return false; 758 return true; 748 return matchesFullScreenDocumentPseudoClass(element); 759 749 #endif 760 750 case CSSSelector::PseudoClassInRange: … … 778 768 779 769 case CSSSelector::PseudoClassWindowInactive: 780 return !element->document().page()->focusController().isActive();770 return isWindowInactive(element); 781 771 782 772 case CSSSelector::PseudoClassHorizontal: -
trunk/Source/WebCore/css/SelectorCheckerTestFunctions.h
r170822 r171486 27 27 #define SelectorCheckerTestFunctions_h 28 28 29 #include "FocusController.h" 29 30 #include "HTMLInputElement.h" 30 31 #include "HTMLOptionElement.h" … … 112 113 } 113 114 115 ALWAYS_INLINE bool isWindowInactive(const Element* element) 116 { 117 return !element->document().page()->focusController().isActive(); 118 } 119 114 120 inline bool matchesLangPseudoClass(const Element* element, AtomicStringImpl* filter) 115 121 { … … 164 170 return element == element->document().webkitCurrentFullScreenElement(); 165 171 } 172 173 ALWAYS_INLINE bool matchesFullScreenAnimatingFullScreenTransitionPseudoClass(const Element* element) 174 { 175 if (element != element->document().webkitCurrentFullScreenElement()) 176 return false; 177 return element->document().isAnimatingFullScreen(); 178 } 179 180 ALWAYS_INLINE bool matchesFullScreenAncestorPseudoClass(const Element* element) 181 { 182 return element->containsFullScreenElement(); 183 } 184 185 ALWAYS_INLINE bool matchesFullScreenDocumentPseudoClass(const Element* element) 186 { 187 // While a Document is in the fullscreen state, the 'full-screen-document' pseudoclass applies 188 // to all elements of that Document. 189 if (!element->document().webkitIsFullScreen()) 190 return false; 191 return true; 192 } 166 193 #endif 167 194 -
trunk/Source/WebCore/cssjit/SelectorCompiler.cpp
r171177 r171486 397 397 fragment.unoptimizedPseudoClasses.append(JSC::FunctionPtr(isValid)); 398 398 return FunctionType::SimpleSelectorChecker; 399 case CSSSelector::PseudoClassWindowInactive: 400 fragment.unoptimizedPseudoClasses.append(JSC::FunctionPtr(isWindowInactive)); 401 return FunctionType::SimpleSelectorChecker; 402 399 403 #if ENABLE(FULLSCREEN_API) 400 404 case CSSSelector::PseudoClassFullScreen: 401 405 fragment.unoptimizedPseudoClasses.append(JSC::FunctionPtr(matchesFullScreenPseudoClass)); 406 return FunctionType::SimpleSelectorChecker; 407 case CSSSelector::PseudoClassFullScreenDocument: 408 fragment.unoptimizedPseudoClasses.append(JSC::FunctionPtr(matchesFullScreenDocumentPseudoClass)); 409 return FunctionType::SimpleSelectorChecker; 410 case CSSSelector::PseudoClassFullScreenAncestor: 411 fragment.unoptimizedPseudoClasses.append(JSC::FunctionPtr(matchesFullScreenAncestorPseudoClass)); 412 return FunctionType::SimpleSelectorChecker; 413 case CSSSelector::PseudoClassAnimatingFullScreenTransition: 414 fragment.unoptimizedPseudoClasses.append(JSC::FunctionPtr(matchesFullScreenAnimatingFullScreenTransitionPseudoClass)); 402 415 return FunctionType::SimpleSelectorChecker; 403 416 #endif … … 410 423 return FunctionType::SimpleSelectorChecker; 411 424 #endif 425 426 // FIXME: Compile these pseudoclasses, too! 427 case CSSSelector::PseudoClassEmpty: 428 case CSSSelector::PseudoClassFirstOfType: 429 case CSSSelector::PseudoClassLastOfType: 430 case CSSSelector::PseudoClassOnlyOfType: 431 case CSSSelector::PseudoClassNthOfType: 432 case CSSSelector::PseudoClassNthLastChild: 433 case CSSSelector::PseudoClassNthLastOfType: 434 case CSSSelector::PseudoClassVisited: 435 case CSSSelector::PseudoClassDrag: 436 case CSSSelector::PseudoClassFullPageMedia: 437 case CSSSelector::PseudoClassScope: 438 case CSSSelector::PseudoClassCornerPresent: 439 case CSSSelector::PseudoClassDecrement: 440 case CSSSelector::PseudoClassIncrement: 441 case CSSSelector::PseudoClassHorizontal: 442 case CSSSelector::PseudoClassVertical: 443 case CSSSelector::PseudoClassStart: 444 case CSSSelector::PseudoClassEnd: 445 case CSSSelector::PseudoClassDoubleButton: 446 case CSSSelector::PseudoClassSingleButton: 447 case CSSSelector::PseudoClassNoButton: 448 return FunctionType::CannotCompile; 412 449 413 450 // Optimized pseudo selectors. … … 534 571 return FunctionType::SimpleSelectorChecker; 535 572 } 536 537 default: 538 break; 539 } 573 574 case CSSSelector::PseudoClassUnknown: 575 ASSERT_NOT_REACHED(); 576 return FunctionType::CannotMatchAnything; 577 } 578 579 ASSERT_NOT_REACHED(); 540 580 return FunctionType::CannotCompile; 541 581 }
Note: See TracChangeset
for help on using the changeset viewer.