Changeset 287030 in webkit
- Timestamp:
- Dec 14, 2021 10:20:24 AM (7 months ago)
- Location:
- trunk
- Files:
-
- 1 added
- 16 edited
-
Source/WebCore/ChangeLog (modified) (1 diff)
-
Source/WebCore/css/MediaQueryEvaluator.cpp (modified) (2 diffs)
-
Source/WebCore/dom/Document.cpp (modified) (1 diff)
-
Source/WebCore/loader/DocumentLoader.cpp (modified) (1 diff)
-
Source/WebCore/loader/DocumentLoader.h (modified) (4 diffs)
-
Source/WebKit/ChangeLog (modified) (1 diff)
-
Source/WebKit/Scripts/webkit/messages.py (modified) (1 diff)
-
Source/WebKit/Shared/WebsitePoliciesData.cpp (modified) (4 diffs)
-
Source/WebKit/Shared/WebsitePoliciesData.h (modified) (1 diff)
-
Source/WebKit/UIProcess/API/APIWebsitePolicies.cpp (modified) (2 diffs)
-
Source/WebKit/UIProcess/API/APIWebsitePolicies.h (modified) (2 diffs)
-
Source/WebKit/UIProcess/API/Cocoa/WKWebpagePreferences.mm (modified) (1 diff)
-
Source/WebKit/UIProcess/API/Cocoa/WKWebpagePreferencesPrivate.h (modified) (2 diffs)
-
Tools/ChangeLog (modified) (1 diff)
-
Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj (modified) (4 diffs)
-
Tools/TestWebKitAPI/Tests/WebKit/color-scheme.html (added)
-
Tools/TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r287028 r287030 1 2021-12-11 Dean Jackson <dino@apple.com> 2 3 Allow override of system's preferred color scheme 4 https://bugs.webkit.org/show_bug.cgi?id=234199 5 <rdar://problem/86366044> 6 7 Reviewed by Tim Horton. 8 9 Use a user-specified preference for color-scheme before reading 10 the system value. 11 12 * css/MediaQueryEvaluator.cpp: 13 (WebCore::prefersColorSchemeEvaluate): If the document loader was given 14 a preference, use that when evaluating the media query. 15 * loader/DocumentLoader.cpp: New property - colorSchemePreference. 16 (WebCore::DocumentLoader::colorSchemePreference const): 17 * loader/DocumentLoader.h: 18 (WebCore::DocumentLoader::setColorSchemePreference): 19 * dom/Document.cpp: 20 (WebCore::Document::useDarkAppearance const): Check the DocumentLoader here too. 21 1 22 2021-12-14 Alan Bujtas <zalan@apple.com> 2 23 -
trunk/Source/WebCore/css/MediaQueryEvaluator.cpp
r286123 r287030 36 36 #include "Chrome.h" 37 37 #include "ChromeClient.h" 38 #include "DocumentLoader.h" 38 39 #include "Frame.h" 39 40 #include "FrameView.h" … … 808 809 809 810 auto keyword = downcast<CSSPrimitiveValue>(*value).valueID(); 810 bool useDarkAppearance = frame.page()->useDarkAppearance(); 811 bool useDarkAppearance = [&] () -> auto { 812 if (frame.document()->loader()) { 813 auto colorSchemePreference = frame.document()->loader()->colorSchemePreference(); 814 if (colorSchemePreference != ColorSchemePreference::NoPreference) 815 return colorSchemePreference == ColorSchemePreference::Dark; 816 } 817 818 return frame.page()->useDarkAppearance(); 819 }(); 811 820 812 821 switch (keyword) { -
trunk/Source/WebCore/dom/Document.cpp
r286772 r287030 7595 7595 #endif 7596 7596 7597 if (DocumentLoader* documentLoader = loader()) { 7598 auto colorSchemePreference = documentLoader->colorSchemePreference(); 7599 if (colorSchemePreference != ColorSchemePreference::NoPreference) 7600 return colorSchemePreference == ColorSchemePreference::Dark; 7601 } 7602 7597 7603 bool pageUsesDarkAppearance = false; 7598 7604 if (Page* documentPage = page()) -
trunk/Source/WebCore/loader/DocumentLoader.cpp
r287021 r287030 1412 1412 } 1413 1413 1414 ColorSchemePreference DocumentLoader::colorSchemePreference() const 1415 { 1416 return m_colorSchemePreference; 1417 } 1418 1414 1419 void DocumentLoader::attachToFrame(Frame& frame) 1415 1420 { -
trunk/Source/WebCore/loader/DocumentLoader.h
r287021 r287030 153 153 }; 154 154 155 enum class ColorSchemePreference : uint8_t { 156 NoPreference, 157 Light, 158 Dark 159 }; 160 155 161 DECLARE_ALLOCATOR_WITH_HEAP_IDENTIFIER(DocumentLoader); 156 162 class DocumentLoader … … 354 360 ModalContainerObservationPolicy modalContainerObservationPolicy() const { return m_modalContainerObservationPolicy; } 355 361 void setModalContainerObservationPolicy(ModalContainerObservationPolicy policy) { m_modalContainerObservationPolicy = policy; } 362 363 WEBCORE_EXPORT ColorSchemePreference colorSchemePreference() const; 364 void setColorSchemePreference(ColorSchemePreference preference) { m_colorSchemePreference = preference; } 356 365 357 366 void addSubresourceLoader(ResourceLoader&); … … 680 689 MouseEventPolicy m_mouseEventPolicy { MouseEventPolicy::Default }; 681 690 ModalContainerObservationPolicy m_modalContainerObservationPolicy { ModalContainerObservationPolicy::Disabled }; 691 ColorSchemePreference m_colorSchemePreference { ColorSchemePreference::NoPreference }; 682 692 683 693 #if ENABLE(SERVICE_WORKER) … … 805 815 }; 806 816 817 template<> struct EnumTraits<WebCore::ColorSchemePreference> { 818 using values = EnumValues< 819 WebCore::ColorSchemePreference, 820 WebCore::ColorSchemePreference::NoPreference, 821 WebCore::ColorSchemePreference::Light, 822 WebCore::ColorSchemePreference::Dark 823 >; 824 }; 825 807 826 } // namespace WTF -
trunk/Source/WebKit/ChangeLog
r287021 r287030 1 2021-12-11 Dean Jackson <dino@apple.com> 2 3 Allow override of system's preferred color scheme 4 https://bugs.webkit.org/show_bug.cgi?id=234199 5 <rdar://problem/86366044> 6 7 Reviewed by Tim Horton. 8 9 Expose new Private API that allows the user to give an explicit per-page preference 10 for light or dark color schemes rather than reading the system value. 11 12 * Scripts/webkit/messages.py: 13 (headers_for_type): Add header for DocumentLoader. 14 15 * Shared/WebsitePoliciesData.cpp: Encode the new value in the policies sent 16 to the Web Process. 17 (WebKit::WebsitePoliciesData::encode const): 18 (WebKit::WebsitePoliciesData::decode): 19 (WebKit::WebsitePoliciesData::applyToDocumentLoader): 20 * Shared/WebsitePoliciesData.h: 21 22 * UIProcess/API/APIWebsitePolicies.cpp: Expose a new policy "colorSchemePreference". 23 (API::WebsitePolicies::copy const): 24 (API::WebsitePolicies::data): 25 * UIProcess/API/APIWebsitePolicies.h: 26 27 * UIProcess/API/Cocoa/WKWebpagePreferences.mm: Expose a new private API "_colorSchemePreference". 28 (-[WKWebpagePreferences _colorSchemePreference]): 29 (-[WKWebpagePreferences _setColorSchemePreference:]): 30 * UIProcess/API/Cocoa/WKWebpagePreferencesPrivate.h: 31 1 32 2021-12-14 Jean-Yves Avenard <jya@apple.com> 2 33 -
trunk/Source/WebKit/Scripts/webkit/messages.py
r286944 r287030 757 757 'WebCore::COEPDisposition': ['<WebCore/CrossOriginEmbedderPolicy.h>'], 758 758 'WebCore::COOPDisposition': ['<WebCore/CrossOriginOpenerPolicy.h>'], 759 'WebCore::ColorSchemePreference': ['<WebCore/DocumentLoader.h>'], 759 760 'WebCore::CompositeOperator': ['<WebCore/GraphicsTypes.h>'], 760 761 'WebCore::CreateNewGroupForHighlight': ['<WebCore/AppHighlight.h>'], -
trunk/Source/WebKit/Shared/WebsitePoliciesData.cpp
r286831 r287030 56 56 encoder << mouseEventPolicy; 57 57 encoder << modalContainerObservationPolicy; 58 encoder << colorSchemePreference; 58 59 encoder << idempotentModeAutosizingOnlyHonorsPercentages; 59 60 } … … 151 152 decoder >> modalContainerObservationPolicy; 152 153 if (!modalContainerObservationPolicy) 154 return std::nullopt; 155 156 std::optional<WebCore::ColorSchemePreference> colorSchemePreference; 157 decoder >> colorSchemePreference; 158 if (!colorSchemePreference) 153 159 return std::nullopt; 154 160 … … 179 185 WTFMove(*mouseEventPolicy), 180 186 WTFMove(*modalContainerObservationPolicy), 187 WTFMove(*colorSchemePreference), 181 188 WTFMove(*idempotentModeAutosizingOnlyHonorsPercentages), 182 189 } }; … … 304 311 305 312 documentLoader.setModalContainerObservationPolicy(websitePolicies.modalContainerObservationPolicy); 313 documentLoader.setColorSchemePreference(websitePolicies.colorSchemePreference); 306 314 documentLoader.setAllowContentChangeObserverQuirk(websitePolicies.allowContentChangeObserverQuirk); 307 315 documentLoader.setIdempotentModeAutosizingOnlyHonorsPercentages(websitePolicies.idempotentModeAutosizingOnlyHonorsPercentages); -
trunk/Source/WebKit/Shared/WebsitePoliciesData.h
r286831 r287030 73 73 WebCore::MouseEventPolicy mouseEventPolicy { WebCore::MouseEventPolicy::Default }; 74 74 WebCore::ModalContainerObservationPolicy modalContainerObservationPolicy { WebCore::ModalContainerObservationPolicy::Disabled }; 75 WebCore::ColorSchemePreference colorSchemePreference { WebCore::ColorSchemePreference::NoPreference }; 75 76 bool idempotentModeAutosizingOnlyHonorsPercentages { false }; 76 77 -
trunk/Source/WebKit/UIProcess/API/APIWebsitePolicies.cpp
r286831 r287030 78 78 policies->setMouseEventPolicy(m_mouseEventPolicy); 79 79 policies->setModalContainerObservationPolicy(m_modalContainerObservationPolicy); 80 policies->setColorSchemePreference(m_colorSchemePreference); 80 81 return policies; 81 82 } … … 124 125 m_mouseEventPolicy, 125 126 m_modalContainerObservationPolicy, 127 m_colorSchemePreference, 126 128 m_idempotentModeAutosizingOnlyHonorsPercentages 127 129 }; -
trunk/Source/WebKit/UIProcess/API/APIWebsitePolicies.h
r286831 r287030 133 133 bool isCaptivePortalModeExplicitlySet() const { return !!m_captivePortalModeEnabled; } 134 134 135 WebCore::ColorSchemePreference colorSchemePreference() const { return m_colorSchemePreference; } 136 void setColorSchemePreference(WebCore::ColorSchemePreference colorSchemePreference) { m_colorSchemePreference = colorSchemePreference; } 137 135 138 WebCore::MouseEventPolicy mouseEventPolicy() const { return m_mouseEventPolicy; } 136 139 void setMouseEventPolicy(WebCore::MouseEventPolicy policy) { m_mouseEventPolicy = policy; } … … 172 175 bool m_idempotentModeAutosizingOnlyHonorsPercentages { false }; 173 176 std::optional<bool> m_captivePortalModeEnabled; 177 WebCore::ColorSchemePreference m_colorSchemePreference { WebCore::ColorSchemePreference::NoPreference }; 174 178 }; 175 179 -
trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebpagePreferences.mm
r286831 r287030 502 502 } 503 503 504 - (_WKWebsiteColorSchemePreference)_colorSchemePreference 505 { 506 switch (_websitePolicies->colorSchemePreference()) { 507 case WebCore::ColorSchemePreference::NoPreference: 508 return _WKWebsiteColorSchemePreferenceNoPreference; 509 case WebCore::ColorSchemePreference::Light: 510 return _WKWebsiteColorSchemePreferenceLight; 511 case WebCore::ColorSchemePreference::Dark: 512 return _WKWebsiteColorSchemePreferenceDark; 513 } 514 } 515 516 - (void)_setColorSchemePreference:(_WKWebsiteColorSchemePreference)value 517 { 518 switch (value) { 519 case _WKWebsiteColorSchemePreferenceNoPreference: 520 _websitePolicies->setColorSchemePreference(WebCore::ColorSchemePreference::NoPreference); 521 break; 522 case _WKWebsiteColorSchemePreferenceLight: 523 _websitePolicies->setColorSchemePreference(WebCore::ColorSchemePreference::Light); 524 break; 525 case _WKWebsiteColorSchemePreferenceDark: 526 _websitePolicies->setColorSchemePreference(WebCore::ColorSchemePreference::Dark); 527 break; 528 } 529 } 530 504 531 #if PLATFORM(IOS_FAMILY) 505 532 -
trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebpagePreferencesPrivate.h
r286831 r287030 70 70 } WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA)); 71 71 72 // Allow overriding the system color-scheme with a per-website preference. 73 typedef NS_OPTIONS(NSUInteger, _WKWebsiteColorSchemePreference) { 74 _WKWebsiteColorSchemePreferenceNoPreference, 75 _WKWebsiteColorSchemePreferenceLight, 76 _WKWebsiteColorSchemePreferenceDark, 77 } WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA)); 78 72 79 @class _WKCustomHeaderFields; 73 80 @class WKUserContentController; … … 97 104 @property (nonatomic, setter=_setCaptivePortalModeEnabled:) BOOL _captivePortalModeEnabled WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA)); 98 105 106 @property (nonatomic, setter=_setColorSchemePreference:) _WKWebsiteColorSchemePreference _colorSchemePreference; 107 99 108 @end -
trunk/Tools/ChangeLog
r287025 r287030 1 2021-12-11 Dean Jackson <dino@apple.com> 2 3 Allow override of system's preferred color scheme 4 https://bugs.webkit.org/show_bug.cgi?id=234199 5 <rdar://problem/86366044> 6 7 Reviewed by Tim Horton. 8 9 New API test that checks the color-scheme after 10 explicitly setting it. 11 12 * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: 13 * TestWebKitAPI/Tests/WebKit/color-scheme.html: Added. Note: Xcode was 14 being difficult and wouldn't let me put this file in the right order 15 for the Copy Build Phase :( 16 * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm: 17 1 18 2021-12-14 Angelos Oikonomopoulos <angelos@igalia.com> 2 19 -
trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj
r286911 r287030 177 177 3128A8152376413300D90D40 /* image.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = 3128A814237640FD00D90D40 /* image.html */; }; 178 178 313C3A0221E567C300DBA86E /* SystemPreviewBlobNaming.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = 313C3A0121E5677A00DBA86E /* SystemPreviewBlobNaming.html */; }; 179 31903C912765077400363472 /* color-scheme.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = 31903C902764FE1400363472 /* color-scheme.html */; }; 179 180 31B76E4523299BDC007FED2C /* system-preview-trigger.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = 31B76E4423299BA3007FED2C /* system-preview-trigger.html */; }; 180 181 31E9BDA1247F4C62002E51A2 /* WebGLPrepareDisplayOnWebThread.mm in Sources */ = {isa = PBXBuildFile; fileRef = 31E9BDA0247F4C62002E51A2 /* WebGLPrepareDisplayOnWebThread.mm */; }; … … 1258 1259 9BAE177B22E2BBFB00DF3098 /* cocoa-writer-markup-with-system-fonts.html in Copy Resources */, 1259 1260 E5036F78211BC25400BFDBE2 /* color-drop.html in Copy Resources */, 1261 31903C912765077400363472 /* color-scheme.html in Copy Resources */, 1260 1262 0F16BED82304A1F300B4A167 /* composited.html in Copy Resources */, 1261 1263 F4B825D81EF4DBFB006E417F /* compressed-files.zip in Copy Resources */, … … 1851 1853 3128A814237640FD00D90D40 /* image.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = image.html; sourceTree = "<group>"; }; 1852 1854 313C3A0121E5677A00DBA86E /* SystemPreviewBlobNaming.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = SystemPreviewBlobNaming.html; sourceTree = "<group>"; }; 1855 31903C902764FE1400363472 /* color-scheme.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = "color-scheme.html"; sourceTree = "<group>"; }; 1853 1856 31B76E4223298E2B007FED2C /* SystemPreview.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = SystemPreview.mm; sourceTree = "<group>"; }; 1854 1857 31B76E4423299BA3007FED2C /* system-preview-trigger.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = "system-preview-trigger.html"; sourceTree = "<group>"; }; … … 4600 4603 1A50AA1F1A2A4EA500F4C345 /* close-from-within-create-page.html */, 4601 4604 9B270FED1DDC25FD002D53F3 /* closed-shadow-tree-test.html */, 4605 31903C902764FE1400363472 /* color-scheme.html */, 4602 4606 5C9E56861DF9148E00C9EE33 /* contentBlockerCheck.html */, 4603 4607 F4034FA2275D5449003A81F8 /* cookie-consent-basic.html */, -
trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm
r286040 r287030 1788 1788 EXPECT_WK_STREQ([uiDelegate waitForAlert], "testAlert3"); 1789 1789 } 1790 1791 TEST(WebpagePreferences, UserExplicitlyPrefersColorSchemeLight) 1792 { 1793 auto configuration = adoptNS([[WKWebViewConfiguration alloc] init]); 1794 1795 configuration.get().defaultWebpagePreferences._colorSchemePreference = _WKWebsiteColorSchemePreferenceLight; 1796 1797 auto webView = adoptNS([[TestWKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]); 1798 1799 [webView loadTestPageNamed:@"color-scheme"]; 1800 [webView waitForMessage:@"light-detected"]; 1801 } 1802 1803 TEST(WebpagePreferences, UserExplicitlyPrefersColorSchemeDark) 1804 { 1805 auto configuration = adoptNS([[WKWebViewConfiguration alloc] init]); 1806 1807 configuration.get().defaultWebpagePreferences._colorSchemePreference = _WKWebsiteColorSchemePreferenceDark; 1808 1809 auto webView = adoptNS([[TestWKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]); 1810 1811 [webView loadTestPageNamed:@"color-scheme"]; 1812 [webView waitForMessage:@"dark-detected"]; 1813 }
Note: See TracChangeset
for help on using the changeset viewer.