Title: [229511] trunk/Source
Revision
229511
Author
[email protected]
Date
2018-03-10 17:38:06 -0800 (Sat, 10 Mar 2018)

Log Message

Media query for default appearance
https://bugs.webkit.org/show_bug.cgi?id=183539
<rdar://problem/38326388>

Reviewed by Tim Horton.

Source/WebCore:

Not currently testable, will add tests in a later patch.

Write a media query to evaluate appearance.

* css/CSSValueKeywords.in:
* css/MediaFeatureNames.h:
* css/MediaQueryEvaluator.cpp:
(WebCore::defaultAppearanceEvaluate):
* css/MediaQueryExpression.cpp:
(WebCore::featureWithValidIdent):
(WebCore::isFeatureValidWithoutValue):
* page/Page.h:
(WebCore::Page::defaultAppearance const):
(WebCore::Page::setDefaultAppearance):

Source/WebKit:

Write a media query to evaluate appearance.

* Shared/WebPageCreationParameters.cpp:
(WebKit::WebPageCreationParameters::encode const):
(WebKit::WebPageCreationParameters::decode):
* Shared/WebPageCreationParameters.h:
* UIProcess/API/Cocoa/WKWebView.mm:
(-[WKWebView _initializeWithConfiguration:]):
(-[WKWebView _setUseSystemAppearance:]):
* UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::creationParameters):
(WebKit::WebPageProxy::setDefaultAppearance):
* UIProcess/WebPageProxy.h:
(WebKit::WebPageProxy::defaultAppearance const):
* WebProcess/WebPage/WebPage.cpp:
(WebKit::m_credentialsMessenger):
(WebKit::WebPage::setDefaultAppearance):
* WebProcess/WebPage/WebPage.h:
* WebProcess/WebPage/WebPage.messages.in:

Source/WebKitLegacy/mac:

Write a media query to evaluate appearance.

* WebView/WebView.mm:
(-[WebView _commonInitializationWithFrameName:groupName:]):
(-[WebView _setUseSystemAppearance:]):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (229510 => 229511)


--- trunk/Source/WebCore/ChangeLog	2018-03-10 23:26:46 UTC (rev 229510)
+++ trunk/Source/WebCore/ChangeLog	2018-03-11 01:38:06 UTC (rev 229511)
@@ -1,3 +1,26 @@
+2018-03-10  Megan Gardner  <[email protected]>
+
+        Media query for default appearance
+        https://bugs.webkit.org/show_bug.cgi?id=183539
+        <rdar://problem/38326388>
+
+        Reviewed by Tim Horton.
+
+        Not currently testable, will add tests in a later patch.
+
+        Write a media query to evaluate appearance.
+
+        * css/CSSValueKeywords.in:
+        * css/MediaFeatureNames.h:
+        * css/MediaQueryEvaluator.cpp:
+        (WebCore::defaultAppearanceEvaluate):
+        * css/MediaQueryExpression.cpp:
+        (WebCore::featureWithValidIdent):
+        (WebCore::isFeatureValidWithoutValue):
+        * page/Page.h:
+        (WebCore::Page::defaultAppearance const):
+        (WebCore::Page::setDefaultAppearance):
+
 2018-03-10  Daniel Bates  <[email protected]>
 
         InlineTextBox should own shadow data

Modified: trunk/Source/WebCore/css/CSSValueKeywords.in (229510 => 229511)


--- trunk/Source/WebCore/css/CSSValueKeywords.in	2018-03-10 23:26:46 UTC (rev 229510)
+++ trunk/Source/WebCore/css/CSSValueKeywords.in	2018-03-11 01:38:06 UTC (rev 229511)
@@ -1333,6 +1333,10 @@
 sRGB
 display-p3
 
+// prefers-default-appearance
+prefers
+// no-preference
+
 // prefers-reduced-motion
 reduce
 no-preference

Modified: trunk/Source/WebCore/css/MediaFeatureNames.h (229510 => 229511)


--- trunk/Source/WebCore/css/MediaFeatureNames.h	2018-03-10 23:26:46 UTC (rev 229510)
+++ trunk/Source/WebCore/css/MediaFeatureNames.h	2018-03-11 01:38:06 UTC (rev 229511)
@@ -29,6 +29,13 @@
 #define CSS_MEDIAQUERY_DISPLAY_MODE(macro)
 #endif
 
+#if USE(APPLE_INTERNAL_SDK)
+#import <WebKitAdditions/MediaFeatureNamesAdditions.h>
+#else
+#define DEFAULT_APPEARANCE_MEDIA_QUERY "prefers-default-appearance"
+#endif
+
+
 #define CSS_MEDIAQUERY_NAMES_FOR_EACH_MEDIAFEATURE(macro) \
     macro(animation, "-webkit-animation") \
     macro(anyHover, "any-hover") \
@@ -70,6 +77,7 @@
     macro(monochrome, "monochrome") \
     macro(orientation, "orientation") \
     macro(pointer, "pointer") \
+    macro(defaultAppearance, DEFAULT_APPEARANCE_MEDIA_QUERY) \
     macro(prefersReducedMotion, "prefers-reduced-motion") \
     macro(resolution, "resolution") \
     macro(transform2d, "-webkit-transform-2d") \

Modified: trunk/Source/WebCore/css/MediaQueryEvaluator.cpp (229510 => 229511)


--- trunk/Source/WebCore/css/MediaQueryEvaluator.cpp	2018-03-10 23:26:46 UTC (rev 229510)
+++ trunk/Source/WebCore/css/MediaQueryEvaluator.cpp	2018-03-11 01:38:06 UTC (rev 229511)
@@ -710,6 +710,19 @@
 {
     return pointerEvaluate(value, cssToLengthConversionData, frame, prefix);
 }
+    
+static bool defaultAppearanceEvaluate(CSSValue* value, const CSSToLengthConversionData&, Frame& frame, MediaFeaturePrefix)
+{
+    bool defaultAppearance = false;
+    
+    if (!frame.page()->defaultAppearance())
+        defaultAppearance = true;
+    
+    if (!value)
+        return defaultAppearance;
+    
+    return downcast<CSSPrimitiveValue>(*value).valueID() == (defaultAppearance ? CSSValuePrefers : CSSValueNoPreference);
+}
 
 static bool prefersReducedMotionEvaluate(CSSValue* value, const CSSToLengthConversionData&, Frame& frame, MediaFeaturePrefix)
 {

Modified: trunk/Source/WebCore/css/MediaQueryExpression.cpp (229510 => 229511)


--- trunk/Source/WebCore/css/MediaQueryExpression.cpp	2018-03-10 23:26:46 UTC (rev 229510)
+++ trunk/Source/WebCore/css/MediaQueryExpression.cpp	2018-03-11 01:38:06 UTC (rev 229511)
@@ -52,7 +52,8 @@
 #if ENABLE(APPLICATION_MANIFEST)
     || mediaFeature == MediaFeatureNames::displayMode
 #endif
-    || mediaFeature == MediaFeatureNames::prefersReducedMotion;
+    || mediaFeature == MediaFeatureNames::prefersReducedMotion
+    || mediaFeature == MediaFeatureNames::defaultAppearance;
 }
 
 static inline bool featureWithValidDensity(const String& mediaFeature, const CSSPrimitiveValue& value)
@@ -160,6 +161,7 @@
         || mediaFeature == MediaFeatureNames::invertedColors
         || mediaFeature == MediaFeatureNames::pointer
         || mediaFeature == MediaFeatureNames::prefersReducedMotion
+        || mediaFeature == MediaFeatureNames::defaultAppearance
         || mediaFeature == MediaFeatureNames::devicePixelRatio
         || mediaFeature == MediaFeatureNames::resolution
 #if ENABLE(APPLICATION_MANIFEST)

Modified: trunk/Source/WebCore/page/Page.h (229510 => 229511)


--- trunk/Source/WebCore/page/Page.h	2018-03-10 23:26:46 UTC (rev 229510)
+++ trunk/Source/WebCore/page/Page.h	2018-03-11 01:38:06 UTC (rev 229511)
@@ -327,6 +327,9 @@
     
     bool useSystemAppearance() const { return m_useSystemAppearance; }
     void setUseSystemAppearance(bool a) { m_useSystemAppearance = a; }
+    
+    bool defaultAppearance() const { return m_defaultAppearance; }
+    void setDefaultAppearance(bool a) { m_defaultAppearance = a; }
 
 #if ENABLE(TEXT_AUTOSIZING)
     float textAutosizingWidth() const { return m_textAutosizingWidth; }
@@ -707,6 +710,7 @@
 #endif
     
     bool m_useSystemAppearance { false };
+    bool m_defaultAppearance { true };
 
 #if ENABLE(TEXT_AUTOSIZING)
     float m_textAutosizingWidth { 0 };

Modified: trunk/Source/WebKit/ChangeLog (229510 => 229511)


--- trunk/Source/WebKit/ChangeLog	2018-03-10 23:26:46 UTC (rev 229510)
+++ trunk/Source/WebKit/ChangeLog	2018-03-11 01:38:06 UTC (rev 229511)
@@ -1,3 +1,31 @@
+2018-03-10  Megan Gardner  <[email protected]>
+
+        Media query for default appearance
+        https://bugs.webkit.org/show_bug.cgi?id=183539
+        <rdar://problem/38326388>
+
+        Reviewed by Tim Horton.
+
+        Write a media query to evaluate appearance.
+
+        * Shared/WebPageCreationParameters.cpp:
+        (WebKit::WebPageCreationParameters::encode const):
+        (WebKit::WebPageCreationParameters::decode):
+        * Shared/WebPageCreationParameters.h:
+        * UIProcess/API/Cocoa/WKWebView.mm:
+        (-[WKWebView _initializeWithConfiguration:]):
+        (-[WKWebView _setUseSystemAppearance:]):
+        * UIProcess/WebPageProxy.cpp:
+        (WebKit::WebPageProxy::creationParameters):
+        (WebKit::WebPageProxy::setDefaultAppearance):
+        * UIProcess/WebPageProxy.h:
+        (WebKit::WebPageProxy::defaultAppearance const):
+        * WebProcess/WebPage/WebPage.cpp:
+        (WebKit::m_credentialsMessenger):
+        (WebKit::WebPage::setDefaultAppearance):
+        * WebProcess/WebPage/WebPage.h:
+        * WebProcess/WebPage/WebPage.messages.in:
+
 2018-03-09  Jer Noble  <[email protected]>
 
         Unconditionalize more methods in VideoFullscreenInterface (and related classes)

Modified: trunk/Source/WebKit/Shared/WebPageCreationParameters.cpp (229510 => 229511)


--- trunk/Source/WebKit/Shared/WebPageCreationParameters.cpp	2018-03-10 23:26:46 UTC (rev 229510)
+++ trunk/Source/WebKit/Shared/WebPageCreationParameters.cpp	2018-03-11 01:38:06 UTC (rev 229511)
@@ -82,6 +82,7 @@
 #if PLATFORM(MAC)
     encoder << colorSpace;
     encoder << useSystemAppearance;
+    encoder << defaultAppearance;
 #endif
 #if PLATFORM(IOS)
     encoder << screenSize;
@@ -235,6 +236,8 @@
         return std::nullopt;
     if (!decoder.decode(parameters.useSystemAppearance))
         return std::nullopt;
+    if (!decoder.decode(parameters.defaultAppearance))
+        return std::nullopt;
 #endif
 
 #if PLATFORM(IOS)

Modified: trunk/Source/WebKit/Shared/WebPageCreationParameters.h (229510 => 229511)


--- trunk/Source/WebKit/Shared/WebPageCreationParameters.h	2018-03-10 23:26:46 UTC (rev 229510)
+++ trunk/Source/WebKit/Shared/WebPageCreationParameters.h	2018-03-11 01:38:06 UTC (rev 229511)
@@ -139,6 +139,7 @@
 #if PLATFORM(MAC)
     ColorSpaceData colorSpace;
     bool useSystemAppearance;
+    bool defaultAppearance;
 #endif
 #if PLATFORM(IOS)
     WebCore::FloatSize screenSize;

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm (229510 => 229511)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm	2018-03-10 23:26:46 UTC (rev 229510)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm	2018-03-11 01:38:06 UTC (rev 229511)
@@ -471,8 +471,15 @@
     }
     return static_cast<uint32_t>(WebCore::UserInterfaceLayoutDirection::LTR);
 }
+
+#if USE(APPLE_INTERNAL_SDK)
+#import <WebKitAdditions/WebViewAndWKWebViewAdditions.mm>
+#else
+- (bool)_defaultAppearance { return true; }
 #endif
 
+#endif // PLATFORM(MAC)
+
 static void validate(WKWebViewConfiguration *configuration)
 {
     if (!configuration.processPool)
@@ -677,6 +684,8 @@
 
     _impl->setAutomaticallyAdjustsContentInsets(true);
     _impl->setRequiresUserActionForEditingControlsManager([configuration _requiresUserActionForEditingControlsManager]);
+    
+    _page->setDefaultAppearance([self _defaultAppearance]);
 #endif
 
     _page->setBackgroundExtendsBeyondPage(true);
@@ -6155,6 +6164,7 @@
 - (void)_setUseSystemAppearance:(BOOL)useSystemAppearance
 {
     _page->setUseSystemAppearance(useSystemAppearance);
+    _page->setDefaultAppearance([self _defaultAppearance]);
 }
 
 - (void)_setHeaderBannerHeight:(int)height

Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.cpp (229510 => 229511)


--- trunk/Source/WebKit/UIProcess/WebPageProxy.cpp	2018-03-10 23:26:46 UTC (rev 229510)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.cpp	2018-03-11 01:38:06 UTC (rev 229511)
@@ -5855,6 +5855,7 @@
 #if PLATFORM(MAC)
     parameters.colorSpace = m_pageClient.colorSpace();
     parameters.useSystemAppearance = m_useSystemAppearance;
+    parameters.defaultAppearance = m_defaultAppearance;
 #endif
 #if PLATFORM(IOS)
     parameters.screenSize = screenSize();
@@ -6962,6 +6963,18 @@
     m_useSystemAppearance = useSystemAppearance;
     m_process->send(Messages::WebPage::SetUseSystemAppearance(useSystemAppearance), m_pageID);
 }
+    
+void WebPageProxy::setDefaultAppearance(bool defaultAppearance)
+{
+    if (!isValid())
+        return;
+    
+    if (defaultAppearance == m_defaultAppearance)
+        return;
+    
+    m_defaultAppearance = defaultAppearance;
+    m_process->send(Messages::WebPage::SetDefaultAppearance(defaultAppearance), m_pageID);
+}
 
 void WebPageProxy::setHeaderBannerHeightForTesting(int height)
 {

Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.h (229510 => 229511)


--- trunk/Source/WebKit/UIProcess/WebPageProxy.h	2018-03-10 23:26:46 UTC (rev 229510)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.h	2018-03-11 01:38:06 UTC (rev 229511)
@@ -805,6 +805,8 @@
 #if PLATFORM(MAC)
     void setUseSystemAppearance(bool);
     bool useSystemAppearance() const { return m_useSystemAppearance; }
+    void setDefaultAppearance(bool);
+    bool defaultAppearance() const { return m_defaultAppearance; }
 #endif
 
 #if PLATFORM(COCOA)
@@ -1795,6 +1797,7 @@
         
 #if PLATFORM(MAC)
     bool m_useSystemAppearance { false };
+    bool m_defaultAppearance { true };
 #endif
 
 #if ENABLE(APPLE_PAY)

Modified: trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp (229510 => 229511)


--- trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp	2018-03-10 23:26:46 UTC (rev 229510)
+++ trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp	2018-03-11 01:38:06 UTC (rev 229511)
@@ -492,7 +492,10 @@
     setPageLength(parameters.pageLength);
     setGapBetweenPages(parameters.gapBetweenPages);
     setPaginationLineGridEnabled(parameters.paginationLineGridEnabled);
-    
+#if PLATFORM(MAC)
+    setUseSystemAppearance(parameters.useSystemAppearance);
+    setDefaultAppearance(parameters.defaultAppearance);
+#endif
     // If the page is created off-screen, its visibilityState should be prerender.
     m_page->setActivityState(m_activityState);
     if (!isVisible())
@@ -4123,6 +4126,11 @@
 {
     corePage()->setUseSystemAppearance(useSystemAppearance);
 }
+    
+void WebPage::setDefaultAppearance(bool defaultAppearance)
+{
+    corePage()->setDefaultAppearance(defaultAppearance);
+}
 #endif
 
 void WebPage::beginPrinting(uint64_t frameID, const PrintInfo& printInfo)

Modified: trunk/Source/WebKit/WebProcess/WebPage/WebPage.h (229510 => 229511)


--- trunk/Source/WebKit/WebProcess/WebPage/WebPage.h	2018-03-10 23:26:46 UTC (rev 229510)
+++ trunk/Source/WebKit/WebProcess/WebPage/WebPage.h	2018-03-11 01:38:06 UTC (rev 229511)
@@ -490,6 +490,7 @@
     void setBottomOverhangImage(WebImage*);
     
     void setUseSystemAppearance(bool);
+    void setDefaultAppearance(bool);
 #endif
 
     bool windowIsFocused() const;

Modified: trunk/Source/WebKit/WebProcess/WebPage/WebPage.messages.in (229510 => 229511)


--- trunk/Source/WebKit/WebProcess/WebPage/WebPage.messages.in	2018-03-10 23:26:46 UTC (rev 229510)
+++ trunk/Source/WebKit/WebProcess/WebPage/WebPage.messages.in	2018-03-11 01:38:06 UTC (rev 229511)
@@ -443,6 +443,7 @@
     HandleAcceptedCandidate(struct WebCore::TextCheckingResult acceptedCandidate)
 
     SetUseSystemAppearance(bool useSystemAppearance);
+    SetDefaultAppearance(bool defaultAppearance);
 
     SetHeaderBannerHeightForTesting(int height);
     SetFooterBannerHeightForTesting(int height);

Modified: trunk/Source/WebKitLegacy/mac/ChangeLog (229510 => 229511)


--- trunk/Source/WebKitLegacy/mac/ChangeLog	2018-03-10 23:26:46 UTC (rev 229510)
+++ trunk/Source/WebKitLegacy/mac/ChangeLog	2018-03-11 01:38:06 UTC (rev 229511)
@@ -1,3 +1,17 @@
+2018-03-10  Megan Gardner  <[email protected]>
+
+        Media query for default appearance
+        https://bugs.webkit.org/show_bug.cgi?id=183539
+        <rdar://problem/38326388>
+
+        Reviewed by Tim Horton.
+
+        Write a media query to evaluate appearance.
+
+        * WebView/WebView.mm:
+        (-[WebView _commonInitializationWithFrameName:groupName:]):
+        (-[WebView _setUseSystemAppearance:]):
+
 2018-03-09  Andy Estes  <[email protected]>
 
         [Mac] WebKit fails to receive file promises when the embedding app is sandboxed

Modified: trunk/Source/WebKitLegacy/mac/WebView/WebView.mm (229510 => 229511)


--- trunk/Source/WebKitLegacy/mac/WebView/WebView.mm	2018-03-10 23:26:46 UTC (rev 229510)
+++ trunk/Source/WebKitLegacy/mac/WebView/WebView.mm	2018-03-11 01:38:06 UTC (rev 229511)
@@ -1574,6 +1574,7 @@
         ResourceHandle::forceContentSniffing();
 
     _private->page->setDeviceScaleFactor([self _deviceScaleFactor]);
+    _private->page->setDefaultAppearance([self _defaultAppearance]);
 #endif
 
     _private->page->settings().setContentDispositionAttachmentSandboxEnabled(true);
@@ -5191,10 +5192,18 @@
     return insets;
 }
 
+#if USE(APPLE_INTERNAL_SDK)
+#import <WebKitAdditions/WebViewAndWKWebViewAdditions.mm>
+#else
+- (bool)_defaultAppearance { return true; }
+#endif
+
 - (void)_setUseSystemAppearance:(BOOL)useSystemAppearance
 {
-    if (auto page = _private->page)
+    if (auto page = _private->page) {
         page->setUseSystemAppearance(useSystemAppearance);
+        page->setDefaultAppearance([self _defaultAppearance]);
+    }
 }
 
 - (BOOL)_useSystemAppearance
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to