Changeset 207173 in webkit
- Timestamp:
- Oct 11, 2016, 3:45:22 PM (9 years ago)
- Location:
- trunk
- Files:
-
- 4 added
- 21 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r207172 r207173 1 2016-10-11 Dean Jackson <dino@apple.com> 2 3 Implement prefers-reduced-motion media query 4 https://bugs.webkit.org/show_bug.cgi?id=163250 5 <rdar://problem/28704129> 6 7 Reviewed by Simon Fraser. 8 9 One test checks the system value. The other test overrides 10 the system values to make sure as much as possible is working. 11 12 * fast/media/mq-prefers-reduced-motion-expected.html: Added. 13 * fast/media/mq-prefers-reduced-motion-forced-value-expected.html: Added. 14 * fast/media/mq-prefers-reduced-motion-forced-value.html: Added. 15 * fast/media/mq-prefers-reduced-motion.html: Added. 16 1 17 2016-10-11 Ryan Haddad <ryanhaddad@apple.com> 2 18 -
trunk/Source/WebCore/ChangeLog
r207170 r207173 1 2016-10-11 Dean Jackson <dino@apple.com> 2 3 Implement prefers-reduced-motion media query 4 https://bugs.webkit.org/show_bug.cgi?id=163250 5 <rdar://problem/28704129> 6 7 Reviewed by Simon Fraser. 8 9 Implement the prefers-reduced-motion media query, as 10 described in https://github.com/w3c/csswg-drafts/issues/442. 11 12 Tests: fast/media/mq-prefers-reduced-motion-forced-value.html 13 fast/media/mq-prefers-reduced-motion.html 14 15 * Configurations/WebCoreTestSupport.xcconfig: Link against AppKit and UIKit. 16 17 * css/CSSValueKeywords.in: New keyword for "reduce". 18 19 * css/MediaFeatureNames.h: Add prefers-reduced-motion. 20 * css/MediaQueryEvaluator.cpp: 21 (WebCore::prefersReducedMotionEvaluate): 22 * css/MediaQueryExp.cpp: 23 (WebCore::featureWithValidIdent): 24 (WebCore::isFeatureValidWithoutValue): 25 26 * platform/Theme.h: New API to detect the system accessibility settings. 27 (WebCore::Theme::userPrefersReducedMotion): 28 * platform/ios/ThemeIOS.h: 29 * platform/ios/ThemeIOS.mm: 30 (WebCore::ThemeIOS::userPrefersReducedMotion): 31 * platform/mac/ThemeMac.h: 32 * platform/mac/ThemeMac.mm: 33 (WebCore::ThemeMac::userPrefersReducedMotion): 34 35 * testing/Internals.cpp: Expose the same API to internals, so that 36 a test can examine the value too. 37 (WebCore::Internals::userPrefersReducedMotion): 38 * testing/Internals.h: 39 * testing/Internals.idl: 40 * testing/Internals.mm: 41 (WebCore::Internals::userPrefersReducedMotion): 42 43 * page/Settings.h: New setting to override the system value... 44 * page/Settings.in: 45 46 * testing/InternalSettings.cpp: ... plumbed through internals. 47 (WebCore::InternalSettings::Backup::Backup): 48 (WebCore::InternalSettings::Backup::restoreTo): 49 (WebCore::InternalSettings::forcedPrefersReducedMotionValue): 50 (WebCore::InternalSettings::setForcedPrefersReducedMotionValue): 51 * testing/InternalSettings.h: 52 * testing/InternalSettings.idl: 53 * testing/Internals.cpp: 54 (WebCore::Internals::userPrefersReducedMotion): 55 * testing/Internals.h: 56 * testing/Internals.idl: 57 * testing/Internals.mm: 58 (WebCore::Internals::userPrefersReducedMotion): 59 60 1 61 2016-10-10 Ryosuke Niwa <rniwa@webkit.org> 2 62 -
trunk/Source/WebCore/Configurations/WebCoreTestSupport.xcconfig
r204879 r207173 50 50 GCC_SYMBOLS_PRIVATE_EXTERN = YES; 51 51 OTHER_LDFLAGS = $(ASAN_OTHER_LDFLAGS); 52 OTHER_LDFLAGS[sdk=iphoneos*] = $(ASAN_OTHER_LDFLAGS) -lAccessibility -F$(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/PhonyWebKitLegacy; 53 OTHER_LDFLAGS[sdk=iphonesimulator*] = $(ASAN_OTHER_LDFLAGS) -lAccessibility -F$(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/PhonyWebKitLegacy; 52 OTHER_LDFLAGS[sdk=macos*] = $(ASAN_OTHER_LDFLAGS) -framework AppKit; 53 OTHER_LDFLAGS[sdk=iphoneos*] = $(ASAN_OTHER_LDFLAGS) -framework UIKit -lAccessibility -F$(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/PhonyWebKitLegacy; 54 OTHER_LDFLAGS[sdk=iphonesimulator*] = $(ASAN_OTHER_LDFLAGS) -framework UIKit -lAccessibility -F$(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/PhonyWebKitLegacy; 54 55 SECT_ORDER_FLAGS = ; -
trunk/Source/WebCore/css/CSSValueKeywords.in
r206181 r207173 1305 1305 rec2020 1306 1306 1307 // prefers-reduced-motion 1308 reduce 1309 1307 1310 #if defined(ENABLE_CSS_GRID_LAYOUT) && ENABLE_CSS_GRID_LAYOUT 1308 1311 // auto-repeat -
trunk/Source/WebCore/css/MediaFeatureNames.h
r201441 r207173 70 70 macro(orientation, "orientation") \ 71 71 macro(pointer, "pointer") \ 72 macro(prefersReducedMotion, "prefers-reduced-motion") \ 72 73 macro(resolution, "resolution") \ 73 74 macro(transform2d, "-webkit-transform-2d") \ -
trunk/Source/WebCore/css/MediaQueryEvaluator.cpp
r205905 r207173 50 50 #include "Settings.h" 51 51 #include "StyleResolver.h" 52 #include "Theme.h" 52 53 #include <wtf/HashMap.h> 53 54 … … 656 657 } 657 658 659 static bool prefersReducedMotionEvaluate(CSSValue* value, const CSSToLengthConversionData&, Frame& frame, MediaFeaturePrefix) 660 { 661 #if USE(NEW_THEME) 662 bool userPrefersReducedMotion = platformTheme()->userPrefersReducedMotion(); 663 #else 664 bool userPrefersReducedMotion = false; 665 #endif 666 667 if (frame.settings().forcedPrefersReducedMotionValue() == Settings::ForcedPrefersReducedMotionValue::On) 668 userPrefersReducedMotion = true; 669 else if (frame.settings().forcedPrefersReducedMotionValue() == Settings::ForcedPrefersReducedMotionValue::Off) 670 userPrefersReducedMotion = false; 671 672 if (!value) 673 return userPrefersReducedMotion; 674 675 return downcast<CSSPrimitiveValue>(*value).getValueID() == (userPrefersReducedMotion ? CSSValueReduce : CSSValueDefault); 676 } 677 658 678 // Use this function instead of calling add directly to avoid inlining. 659 679 static void add(MediaQueryFunctionMap& map, AtomicStringImpl* key, MediaQueryFunction value) -
trunk/Source/WebCore/css/MediaQueryExp.cpp
r205368 r207173 51 51 || mediaFeature == MediaFeatureNames::hover 52 52 || mediaFeature == MediaFeatureNames::invertedColors 53 || mediaFeature == MediaFeatureNames::pointer; 54 } 55 53 || mediaFeature == MediaFeatureNames::pointer 54 || mediaFeature == MediaFeatureNames::prefersReducedMotion; 55 } 56 56 57 static inline bool featureWithValidDensity(const String& mediaFeature, const CSSParserToken& token) 57 58 { … … 229 230 #endif 230 231 || mediaFeature == MediaFeatureNames::pointer 232 || mediaFeature == MediaFeatureNames::prefersReducedMotion 231 233 || mediaFeature == MediaFeatureNames::devicePixelRatio 232 234 || mediaFeature == MediaFeatureNames::resolution -
trunk/Source/WebCore/page/Settings.h
r206811 r207173 99 99 void pageDestroyed() { m_page = nullptr; } 100 100 101 enum class ForcedPrefersReducedMotionValue { System, On, Off }; 102 static const Settings::ForcedPrefersReducedMotionValue defaultForcedPrefersReducedMotionValue = ForcedPrefersReducedMotionValue::System; 103 101 104 WEBCORE_EXPORT void setStandardFontFamily(const AtomicString&, UScriptCode = USCRIPT_COMMON); 102 105 WEBCORE_EXPORT const AtomicString& standardFontFamily(UScriptCode = USCRIPT_COMMON) const; -
trunk/Source/WebCore/page/Settings.in
r207159 r207173 284 284 quickTimePluginReplacementEnabled initial=defaultQuickTimePluginReplacementEnabled 285 285 youTubeFlashPluginReplacementEnabled initial=defaultYouTubeFlashPluginReplacementEnabled 286 287 forcedPrefersReducedMotionValue type=ForcedPrefersReducedMotionValue, initial=defaultForcedPrefersReducedMotionValue -
trunk/Source/WebCore/platform/Theme.h
r189830 r207173 111 111 virtual void drawNamedImage(const String&, GraphicsContext&, const FloatRect&) const; 112 112 113 virtual bool userPrefersReducedMotion() const { return false; } 114 113 115 // This method is called once, from RenderTheme::adjustDefaultStyleSheet(), to let each platform adjust 114 116 // the default CSS rules in html.css. -
trunk/Source/WebCore/platform/ios/ThemeIOS.h
r185731 r207173 35 35 ThemeIOS() { } 36 36 virtual ~ThemeIOS() { } 37 38 bool userPrefersReducedMotion() const override; 37 39 }; 38 40 -
trunk/Source/WebCore/platform/ios/ThemeIOS.mm
r161589 r207173 29 29 #import "GraphicsContext.h" 30 30 #import "ScrollView.h" 31 #import "SoftLinking.h" 31 32 #include <wtf/NeverDestroyed.h> 32 33 #include <wtf/StdLibExtras.h> 34 35 SOFT_LINK_FRAMEWORK(UIKit) 36 SOFT_LINK(UIKit, UIAccessibilityIsReduceMotionEnabled, BOOL, (void), ()) 33 37 34 38 using namespace std; … … 44 48 } 45 49 50 bool ThemeIOS::userPrefersReducedMotion() const 51 { 52 return UIAccessibilityIsReduceMotionEnabled(); 46 53 } 54 55 } -
trunk/Source/WebCore/platform/mac/ThemeMac.h
r197563 r207173 56 56 void inflateControlPaintRect(ControlPart, const ControlStates&, FloatRect&, float zoomFactor) const override; 57 57 58 bool userPrefersReducedMotion() const override; 59 58 60 // FIXME: Once RenderThemeMac is converted over to use Theme then this can be internal to ThemeMac. 59 61 static NSView* ensuredView(ScrollView*, const ControlStates&, bool useUnparentedView = false); -
trunk/Source/WebCore/platform/mac/ThemeMac.mm
r202927 r207173 871 871 } 872 872 873 } 873 bool ThemeMac::userPrefersReducedMotion() const 874 { 875 #if __MAC_OS_X_VERSION_MIN_REQUIRED >= 101200 876 return [[NSWorkspace sharedWorkspace] accessibilityDisplayShouldReduceMotion]; 877 #else 878 return false; 879 #endif 880 } 881 882 } -
trunk/Source/WebCore/testing/InternalSettings.cpp
r206843 r207173 116 116 , m_systemLayoutDirection(settings.systemLayoutDirection()) 117 117 , m_pdfImageCachingPolicy(settings.pdfImageCachingPolicy()) 118 , m_forcedPrefersReducedMotionValue(settings.forcedPrefersReducedMotionValue()) 118 119 { 119 120 } … … 195 196 settings.setSystemLayoutDirection(m_systemLayoutDirection); 196 197 settings.setPdfImageCachingPolicy(m_pdfImageCachingPolicy); 198 settings.setForcedPrefersReducedMotionValue(m_forcedPrefersReducedMotionValue); 197 199 Settings::setAllowsAnySSLCertificate(false); 198 200 } … … 680 682 } 681 683 684 InternalSettings::ForcedPrefersReducedMotionValue InternalSettings::forcedPrefersReducedMotionValue() const 685 { 686 switch (settings()->forcedPrefersReducedMotionValue()) { 687 case Settings::ForcedPrefersReducedMotionValue::System: 688 return InternalSettings::ForcedPrefersReducedMotionValue::System; 689 case Settings::ForcedPrefersReducedMotionValue::On: 690 return InternalSettings::ForcedPrefersReducedMotionValue::On; 691 case Settings::ForcedPrefersReducedMotionValue::Off: 692 return InternalSettings::ForcedPrefersReducedMotionValue::Off; 693 } 694 } 695 696 void InternalSettings::setForcedPrefersReducedMotionValue(InternalSettings::ForcedPrefersReducedMotionValue value) 697 { 698 switch (value) { 699 case InternalSettings::ForcedPrefersReducedMotionValue::System: 700 settings()->setForcedPrefersReducedMotionValue(Settings::ForcedPrefersReducedMotionValue::System); 701 break; 702 case InternalSettings::ForcedPrefersReducedMotionValue::On: 703 settings()->setForcedPrefersReducedMotionValue(Settings::ForcedPrefersReducedMotionValue::On); 704 break; 705 case InternalSettings::ForcedPrefersReducedMotionValue::Off: 706 settings()->setForcedPrefersReducedMotionValue(Settings::ForcedPrefersReducedMotionValue::Off); 707 break; 708 } 709 } 710 682 711 // If you add to this list, make sure that you update the Backup class for test reproducability! 683 712 -
trunk/Source/WebCore/testing/InternalSettings.h
r206843 r207173 116 116 TextDirection m_systemLayoutDirection; 117 117 PDFImageCachingPolicy m_pdfImageCachingPolicy; 118 Settings::ForcedPrefersReducedMotionValue m_forcedPrefersReducedMotionValue; 118 119 }; 119 120 … … 175 176 void setVariationFontsEnabled(bool, ExceptionCode&); 176 177 178 enum class ForcedPrefersReducedMotionValue { System, On, Off }; 179 ForcedPrefersReducedMotionValue forcedPrefersReducedMotionValue() const; 180 void setForcedPrefersReducedMotionValue(ForcedPrefersReducedMotionValue); 181 177 182 static void setAllowsAnySSLCertificate(bool); 178 183 -
trunk/Source/WebCore/testing/InternalSettings.idl
r207150 r207173 24 24 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 25 */ 26 27 enum ForcedPrefersReducedMotionValue { "system", "on", "off" }; 26 28 27 29 [ … … 90 92 [MayThrowLegacyException] void setVariationFontsEnabled(boolean enabled); 91 93 94 attribute ForcedPrefersReducedMotionValue forcedPrefersReducedMotionValue; 95 92 96 void setInputEventsEnabled(boolean enabled); 93 97 }; -
trunk/Source/WebCore/testing/Internals.cpp
r207005 r207173 3379 3379 } 3380 3380 3381 #if !PLATFORM(COCOA) 3382 bool Internals::userPrefersReducedMotion() const 3383 { 3384 return false; 3385 } 3386 #endif 3387 3381 3388 } // namespace WebCore -
trunk/Source/WebCore/testing/Internals.h
r206856 r207173 496 496 void setUserInterfaceLayoutDirection(UserInterfaceLayoutDirection); 497 497 498 bool userPrefersReducedMotion() const; 499 498 500 private: 499 501 explicit Internals(Document&); -
trunk/Source/WebCore/testing/Internals.idl
r206856 r207173 467 467 468 468 void setUserInterfaceLayoutDirection(UserInterfaceLayoutDirection userInterfaceLayoutDirection); 469 }; 469 470 boolean userPrefersReducedMotion(); 471 }; -
trunk/Source/WebCore/testing/Internals.mm
r199539 r207173 33 33 #include "Frame.h" 34 34 35 #if PLATFORM(IOS) 36 #import <UIKit/UIKit.h> 37 #endif 38 35 39 namespace WebCore { 36 40 … … 40 44 } 41 45 46 #if PLATFORM(COCOA) 47 bool Internals::userPrefersReducedMotion() const 48 { 49 #if PLATFORM(IOS) 50 return UIAccessibilityIsReduceMotionEnabled(); 51 #elif PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101200 52 return [[NSWorkspace sharedWorkspace] accessibilityDisplayShouldReduceMotion]; 53 #else 54 return false; 55 #endif 42 56 } 57 #endif 58 59 }
Note:
See TracChangeset
for help on using the changeset viewer.