WebKit Bugzilla
New
Browse
Search+
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
[patch]
Patch
bug-190526-20181012130550.patch (text/plain), 40.38 KB, created by
Timothy Hatcher
on 2018-10-12 13:05:52 PDT
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Timothy Hatcher
Created:
2018-10-12 13:05:52 PDT
Size:
40.38 KB
patch
obsolete
>Subversion Revision: 237009 >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index e9a1b062743d163f92a722763078936ac153da79..43908a7d54f1c30fa7c0f52bd01d214a0dbb5ab2 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,63 @@ >+2018-10-12 Timothy Hatcher <timothy@apple.com> >+ >+ Add <meta name="supported-color-schemes"> to control what color schemes the page supports >+ https://bugs.webkit.org/show_bug.cgi?id=190526 >+ rdar://problem/45230140 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Test: css-dark-mode/supported-color-schemes.html >+ >+ * dom/Document.cpp: >+ (WebCore::isColorSchemeSeparator): Added. >+ (WebCore::processColorSchemes): Added. >+ (WebCore::Document::processSupportedColorSchemes): Added. >+ (WebCore::Document::useDarkAppearance const): Take system appearance and document's >+ suppoerted color shcemes into account. >+ * dom/Document.h: >+ * editing/cocoa/WebContentReaderCocoa.mm: >+ (WebCore::createFragment): Update use of LocalDefaultSystemAppearance. >+ * html/HTMLMetaElement.cpp: >+ (WebCore::HTMLMetaElement::process): Added supported-color-schemes behind runtime feature check. >+ * inspector/InspectorOverlay.cpp: >+ (WebCore::InspectorOverlay::paint): Update use of LocalDefaultSystemAppearance. >+ * platform/mac/DragImageMac.mm: >+ (WebCore::createDragImageForLink): Update use of LocalDefaultSystemAppearance. >+ * platform/mac/LocalDefaultSystemAppearance.h: >+ * platform/mac/LocalDefaultSystemAppearance.mm: >+ (WebCore::LocalDefaultSystemAppearance::LocalDefaultSystemAppearance): >+ Drop the need for useSystemAppearance. This is accounted for in Document::useDarkAppearance. >+ * platform/mac/ThemeMac.mm: >+ (WebCore::ThemeMac::paint): Update use of LocalDefaultSystemAppearance. >+ * rendering/RenderLayerBacking.cpp: >+ (WebCore::RenderLayerBacking::paintContents): Update use of LocalDefaultSystemAppearance. >+ * rendering/RenderLayerCompositor.cpp: >+ (WebCore::RenderLayerCompositor::paintContents): Update use of LocalDefaultSystemAppearance. >+ * rendering/RenderTheme.cpp: >+ (WebCore::RenderTheme::paint): Use document instead of page. >+ * rendering/RenderThemeCocoa.mm: >+ (WebCore::RenderThemeCocoa::drawLineForDocumentMarker): Update use of LocalDefaultSystemAppearance. >+ * rendering/RenderThemeMac.mm: >+ (WebCore::RenderThemeMac::documentViewFor const): Update use of LocalDefaultSystemAppearance. >+ (WebCore::RenderThemeMac::platformActiveSelectionBackgroundColor const): Ditto. >+ (WebCore::RenderThemeMac::platformInactiveSelectionBackgroundColor const): Ditto. >+ (WebCore::RenderThemeMac::transformSelectionBackgroundColor const): Ditto. >+ (WebCore::RenderThemeMac::supportsSelectionForegroundColors const): Ditto. >+ (WebCore::RenderThemeMac::platformActiveSelectionForegroundColor const): Ditto. >+ (WebCore::RenderThemeMac::platformInactiveSelectionForegroundColor const): Ditto. >+ (WebCore::RenderThemeMac::platformActiveListBoxSelectionBackgroundColor const): Ditto. >+ (WebCore::RenderThemeMac::platformInactiveListBoxSelectionBackgroundColor const): Ditto. >+ (WebCore::RenderThemeMac::platformActiveListBoxSelectionForegroundColor const): Ditto. >+ (WebCore::RenderThemeMac::platformInactiveListBoxSelectionForegroundColor const): Ditto. >+ (WebCore::RenderThemeMac::platformActiveTextSearchHighlightColor const): Ditto. >+ (WebCore::RenderThemeMac::colorCache const): Ditto. >+ (WebCore::RenderThemeMac::systemColor const): Ditto. >+ (WebCore::RenderThemeMac::paintCellAndSetFocusedElementNeedsRepaintIfNecessary): Ditto. >+ (WebCore::RenderThemeMac::paintSliderThumb): Ditto. >+ (WebCore::RenderThemeMac::usingDarkAppearance const): No need to limit to macOS here. >+ * svg/graphics/SVGImage.cpp: >+ (WebCore::SVGImage::draw): Update use of LocalDefaultSystemAppearance. >+ > 2018-10-11 Timothy Hatcher <timothy@apple.com> > > Add support for prefers-color-scheme media query >diff --git a/Source/WebKit/ChangeLog b/Source/WebKit/ChangeLog >index a9e9e581a482a0cfa95b70e993eb9dd3a0bc501b..a85f92cc208f012ceda8f5756d201e7c70b46612 100644 >--- a/Source/WebKit/ChangeLog >+++ b/Source/WebKit/ChangeLog >@@ -1,3 +1,20 @@ >+2018-10-12 Timothy Hatcher <timothy@apple.com> >+ >+ Add <meta name="supported-color-schemes"> to control what color schemes the page supports >+ https://bugs.webkit.org/show_bug.cgi?id=190526 >+ rdar://problem/45230140 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * UIProcess/mac/WKPrintingView.mm: >+ (-[WKPrintingView drawRect:]): Update use of LocalDefaultSystemAppearance. >+ * WebProcess/InjectedBundle/DOM/InjectedBundleRangeHandle.cpp: >+ (WebKit::InjectedBundleRangeHandle::renderedImage): Ditto. >+ * WebProcess/Plugins/PDF/PDFPlugin.mm: >+ (WebKit::PDFPlugin::paintControlForLayerInContext): Ditto. >+ * WebProcess/WebPage/WebPage.cpp: >+ (WebKit::WebPage::drawRect): Ditto. >+ > 2018-10-11 Timothy Hatcher <timothy@apple.com> > > Add support for prefers-color-scheme media query >diff --git a/Source/WebKitLegacy/mac/ChangeLog b/Source/WebKitLegacy/mac/ChangeLog >index 88902838c1178de8286197fefa297d54dd2b65c1..87b2fa373934a0056fc0ee63b3d14d02da05eb39 100644 >--- a/Source/WebKitLegacy/mac/ChangeLog >+++ b/Source/WebKitLegacy/mac/ChangeLog >@@ -1,3 +1,14 @@ >+2018-10-12 Timothy Hatcher <timothy@apple.com> >+ >+ Add <meta name="supported-color-schemes"> to control what color schemes the page supports >+ https://bugs.webkit.org/show_bug.cgi?id=190526 >+ rdar://problem/45230140 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * WebCoreSupport/WebEditorClient.mm: >+ (_WebCreateFragment): Update use of LocalDefaultSystemAppearance. >+ > 2018-10-11 Timothy Hatcher <timothy@apple.com> > > Add support for prefers-color-scheme media query >diff --git a/Source/WebCore/dom/Document.cpp b/Source/WebCore/dom/Document.cpp >index 0900fa5a84a8eed44323f79dc413aa8d33eac30a..eab44a9178566fecdf39210040ed6dc136abb6ab 100644 >--- a/Source/WebCore/dom/Document.cpp >+++ b/Source/WebCore/dom/Document.cpp >@@ -3555,6 +3555,54 @@ void Document::updateViewportArguments() > } > } > >+#if ENABLE(DARK_MODE_CSS) >+static bool isColorSchemeSeparator(UChar character) >+{ >+ return isASCIISpace(character) || character == ','; >+} >+ >+static void processColorSchemes(StringView colorSchemes, const WTF::Function<void(StringView key)>& callback) >+{ >+ unsigned length = colorSchemes.length(); >+ for (unsigned i = 0; i < length; ) { >+ // Skip to first non-separator. >+ while (i < length && isColorSchemeSeparator(colorSchemes[i])) >+ ++i; >+ unsigned keyBegin = i; >+ >+ // Skip to first separator. >+ while (i < length && !isColorSchemeSeparator(colorSchemes[i])) >+ i++; >+ unsigned keyEnd = i; >+ >+ if (keyBegin == keyEnd) >+ continue; >+ >+ callback(colorSchemes.substring(keyBegin, keyEnd - keyBegin)); >+ } >+} >+ >+void Document::processSupportedColorSchemes(const String& colorSchemes) >+{ >+ OptionSet<ColorSchemes> supportedColorSchemes; >+ >+ processColorSchemes(colorSchemes, [&supportedColorSchemes](StringView key) { >+ if (equalLettersIgnoringASCIICase(key, "light")) >+ supportedColorSchemes.add(ColorSchemes::Light); >+ else if (equalLettersIgnoringASCIICase(key, "dark")) >+ supportedColorSchemes.add(ColorSchemes::Dark); >+ }); >+ >+ if (supportedColorSchemes.isEmpty()) >+ supportedColorSchemes.add(ColorSchemes::Light); >+ >+ m_supportedColorSchemes = supportedColorSchemes; >+ >+ if (auto* page = this->page()) >+ page->updateStyleAfterChangeInEnvironment(); >+} >+#endif >+ > #if PLATFORM(IOS) > > void Document::processFormatDetection(const String& features) >@@ -7210,10 +7258,26 @@ bool Document::useSystemAppearance() const > > bool Document::useDarkAppearance() const > { >- bool useDarkAppearance = false; >+#if ENABLE(DARK_MODE_CSS) >+ if (m_supportedColorSchemes.contains(ColorSchemes::Dark) && !m_supportedColorSchemes.contains(ColorSchemes::Light)) >+ return true; >+#endif >+ >+ bool pageUsesDarkAppearance = false; > if (Page* documentPage = page()) >- useDarkAppearance = documentPage->useDarkAppearance(); >- return useDarkAppearance; >+ pageUsesDarkAppearance = documentPage->useDarkAppearance(); >+ >+ if (useSystemAppearance()) >+ return pageUsesDarkAppearance; >+ >+#if ENABLE(DARK_MODE_CSS) >+ if (m_supportedColorSchemes.contains(ColorSchemes::Dark)) >+ return pageUsesDarkAppearance; >+ >+ ASSERT(m_supportedColorSchemes.contains(ColorSchemes::Light)); >+#endif >+ >+ return false; > } > > OptionSet<StyleColor::Options> Document::styleColorOptions() const >diff --git a/Source/WebCore/dom/Document.h b/Source/WebCore/dom/Document.h >index 5a3091c3a9448dcee77fafca10a05b35c2eaef72..a7428ab23839a72954d5b118d8c26f744b1af228 100644 >--- a/Source/WebCore/dom/Document.h >+++ b/Source/WebCore/dom/Document.h >@@ -571,8 +571,8 @@ public: > > float deviceScaleFactor() const; > >- bool useSystemAppearance() const; >- bool useDarkAppearance() const; >+ WEBCORE_EXPORT bool useSystemAppearance() const; >+ WEBCORE_EXPORT bool useDarkAppearance() const; > > OptionSet<StyleColor::Options> styleColorOptions() const; > >@@ -894,6 +894,15 @@ public: > void updateViewportArguments(); > void processReferrerPolicy(const String& policy, ReferrerPolicySource); > >+#if ENABLE(DARK_MODE_CSS) >+ enum class ColorSchemes : uint8_t { >+ Light = 1 << 0, >+ Dark = 1 << 1 >+ }; >+ >+ void processSupportedColorSchemes(const String& colorSchemes); >+#endif >+ > // Returns the owning element in the parent document. > // Returns 0 if this is the top level document. > HTMLFrameOwnerElement* ownerElement() const; >@@ -1746,6 +1755,10 @@ private: > std::unique_ptr<SVGDocumentExtensions> m_svgExtensions; > HashSet<SVGUseElement*> m_svgUseElements; > >+#if ENABLE(DARK_MODE_CSS) >+ OptionSet<ColorSchemes> m_supportedColorSchemes { ColorSchemes::Light }; >+#endif >+ > #if ENABLE(DASHBOARD_SUPPORT) > Vector<AnnotatedRegionValue> m_annotatedRegions; > bool m_hasAnnotatedRegions { false }; >diff --git a/Source/WebCore/editing/cocoa/WebContentReaderCocoa.mm b/Source/WebCore/editing/cocoa/WebContentReaderCocoa.mm >index c5a88f3ad5af4bdace13640890d7ca099d4bf236..1c80793ea5d0e0acb82700f194d4a7f53bf931db 100644 >--- a/Source/WebCore/editing/cocoa/WebContentReaderCocoa.mm >+++ b/Source/WebCore/editing/cocoa/WebContentReaderCocoa.mm >@@ -132,8 +132,7 @@ static FragmentAndResources createFragment(Frame& frame, NSAttributedString *str > Document& document = *frame.document(); > > #if PLATFORM(MAC) >- auto* page = frame.page(); >- LocalDefaultSystemAppearance localAppearance(page->useSystemAppearance(), page->useDarkAppearance()); >+ LocalDefaultSystemAppearance localAppearance(document.useDarkAppearance()); > #endif > > NSArray *subresources = nil; >diff --git a/Source/WebCore/html/HTMLMetaElement.cpp b/Source/WebCore/html/HTMLMetaElement.cpp >index 0acebcaf48cb5bb8a879c61681b5ccc80a0ce058..79bc87dad45a2e74026c3a0252960d748ad3fe5b 100644 >--- a/Source/WebCore/html/HTMLMetaElement.cpp >+++ b/Source/WebCore/html/HTMLMetaElement.cpp >@@ -91,6 +91,10 @@ void HTMLMetaElement::process() > document().processViewport(contentValue, ViewportArguments::ViewportMeta); > else if (RuntimeEnabledFeatures::sharedFeatures().disabledAdaptationsMetaTagEnabled() && equalLettersIgnoringASCIICase(name(), "disabled-adaptations")) > document().processDisabledAdaptations(contentValue); >+#if ENABLE(DARK_MODE_CSS) >+ else if (RuntimeEnabledFeatures::sharedFeatures().darkModeCSSEnabled() && equalLettersIgnoringASCIICase(name(), "supported-color-schemes")) >+ document().processSupportedColorSchemes(contentValue); >+#endif > #if PLATFORM(IOS) > else if (equalLettersIgnoringASCIICase(name(), "format-detection")) > document().processFormatDetection(contentValue); >diff --git a/Source/WebCore/inspector/InspectorOverlay.cpp b/Source/WebCore/inspector/InspectorOverlay.cpp >index c5b9aa5564a290767d348aac53a242f00fba974c..bdcef6cdcc6ea20195814489fd0caa0430bb7c0a 100644 >--- a/Source/WebCore/inspector/InspectorOverlay.cpp >+++ b/Source/WebCore/inspector/InspectorOverlay.cpp >@@ -181,7 +181,7 @@ void InspectorOverlay::paint(GraphicsContext& context) > return; > > #if PLATFORM(MAC) >- LocalDefaultSystemAppearance localAppearance(m_page.useSystemAppearance(), m_page.useDarkAppearance()); >+ LocalDefaultSystemAppearance localAppearance(m_page.mainFrame().document()->useDarkAppearance()); > #endif > > GraphicsContextStateSaver stateSaver(context); >diff --git a/Source/WebCore/platform/mac/DragImageMac.mm b/Source/WebCore/platform/mac/DragImageMac.mm >index 201cb338bbd7dc753b335a30062c2b9126b11949..11cda24d0c96a71ac8d1b222251acd9e33e8f210 100644 >--- a/Source/WebCore/platform/mac/DragImageMac.mm >+++ b/Source/WebCore/platform/mac/DragImageMac.mm >@@ -300,9 +300,7 @@ DragImageRef createDragImageForLink(Element& element, URL& url, const String& ti > { > LinkImageLayout layout(url, title); > >- Page* page = element.document().page(); >- >- LocalDefaultSystemAppearance localAppearance(true, page ? page->useDarkAppearance() : false); >+ LocalDefaultSystemAppearance localAppearance(element.document().useDarkAppearance()); > > auto imageSize = layout.boundingRect.size(); > #if __MAC_OS_X_VERSION_MIN_REQUIRED < 101300 >diff --git a/Source/WebCore/platform/mac/LocalDefaultSystemAppearance.h b/Source/WebCore/platform/mac/LocalDefaultSystemAppearance.h >index ef65be09c3d7b4613bfa7b73a16ccf81333e8c13..1cb1b2b1c16d43930d1911c695e727022eb52567 100644 >--- a/Source/WebCore/platform/mac/LocalDefaultSystemAppearance.h >+++ b/Source/WebCore/platform/mac/LocalDefaultSystemAppearance.h >@@ -40,7 +40,7 @@ class LocalDefaultSystemAppearance { > WTF_MAKE_NONCOPYABLE(LocalDefaultSystemAppearance); > > public: >- WEBCORE_EXPORT LocalDefaultSystemAppearance(bool useSystemAppearance, bool useDarkAppearance); >+ WEBCORE_EXPORT LocalDefaultSystemAppearance(bool useDarkAppearance); > WEBCORE_EXPORT ~LocalDefaultSystemAppearance(); > > bool usingDarkAppearance() const >diff --git a/Source/WebCore/platform/mac/LocalDefaultSystemAppearance.mm b/Source/WebCore/platform/mac/LocalDefaultSystemAppearance.mm >index 1d5f7e1ea0b342d4c34475c1661649e081096c9a..6b6821e69580162623ebb752205e6d921d9f442f 100644 >--- a/Source/WebCore/platform/mac/LocalDefaultSystemAppearance.mm >+++ b/Source/WebCore/platform/mac/LocalDefaultSystemAppearance.mm >@@ -31,15 +31,14 @@ > > namespace WebCore { > >-LocalDefaultSystemAppearance::LocalDefaultSystemAppearance(bool useSystemAppearance, bool useDarkAppearance) >+LocalDefaultSystemAppearance::LocalDefaultSystemAppearance(bool useDarkAppearance) > { > #if __MAC_OS_X_VERSION_MIN_REQUIRED >= 101400 > m_savedSystemAppearance = [NSAppearance currentAppearance]; >- m_usingDarkAppearance = useSystemAppearance && useDarkAppearance; >+ m_usingDarkAppearance = useDarkAppearance; > > [NSAppearance setCurrentAppearance:[NSAppearance appearanceNamed:m_usingDarkAppearance ? NSAppearanceNameDarkAqua : NSAppearanceNameAqua]]; > #else >- UNUSED_PARAM(useSystemAppearance); > UNUSED_PARAM(useDarkAppearance); > #endif > } >diff --git a/Source/WebCore/platform/mac/ThemeMac.mm b/Source/WebCore/platform/mac/ThemeMac.mm >index 34734268eec3ec406b7f5be429bf34015d43ffa2..955d693e923525689ccca3fb298f686746e2ddcf 100644 >--- a/Source/WebCore/platform/mac/ThemeMac.mm >+++ b/Source/WebCore/platform/mac/ThemeMac.mm >@@ -907,7 +907,9 @@ void ThemeMac::inflateControlPaintRect(ControlPart part, const ControlStates& st > > void ThemeMac::paint(ControlPart part, ControlStates& states, GraphicsContext& context, const FloatRect& zoomedRect, float zoomFactor, ScrollView* scrollView, float deviceScaleFactor, float pageScaleFactor, bool useSystemAppearance, bool useDarkAppearance) > { >- LocalDefaultSystemAppearance localAppearance(useSystemAppearance, useDarkAppearance); >+ UNUSED_PARAM(useSystemAppearance); >+ >+ LocalDefaultSystemAppearance localAppearance(useDarkAppearance); > > switch (part) { > case CheckboxPart: >diff --git a/Source/WebCore/rendering/RenderLayerBacking.cpp b/Source/WebCore/rendering/RenderLayerBacking.cpp >index e5c734238fac7f8c24e4f50b96cf76abbf20a14b..581053ac3b1b4c522cbe4e41dbc8c3c8888d5e2b 100644 >--- a/Source/WebCore/rendering/RenderLayerBacking.cpp >+++ b/Source/WebCore/rendering/RenderLayerBacking.cpp >@@ -2547,7 +2547,7 @@ void RenderLayerBacking::paintContents(const GraphicsLayer* graphicsLayer, Graph > #endif > > #if PLATFORM(MAC) >- LocalDefaultSystemAppearance localAppearance(renderer().page().useSystemAppearance(), renderer().page().useDarkAppearance()); >+ LocalDefaultSystemAppearance localAppearance(renderer().document().useDarkAppearance()); > #endif > > // The dirtyRect is in the coords of the painting root. >diff --git a/Source/WebCore/rendering/RenderLayerCompositor.cpp b/Source/WebCore/rendering/RenderLayerCompositor.cpp >index d26fabe415d6d5486ab59ce4375d60723aed8eb6..36438f5bd003c4e1503f54e84f4c9358604c9da1 100644 >--- a/Source/WebCore/rendering/RenderLayerCompositor.cpp >+++ b/Source/WebCore/rendering/RenderLayerCompositor.cpp >@@ -2816,7 +2816,7 @@ void paintScrollbar(Scrollbar* scrollbar, GraphicsContext& context, const IntRec > void RenderLayerCompositor::paintContents(const GraphicsLayer* graphicsLayer, GraphicsContext& context, GraphicsLayerPaintingPhase, const FloatRect& clip, GraphicsLayerPaintBehavior) > { > #if PLATFORM(MAC) >- LocalDefaultSystemAppearance localAppearance(page().useSystemAppearance(), page().useDarkAppearance()); >+ LocalDefaultSystemAppearance localAppearance(m_renderView.document().useDarkAppearance()); > #endif > > IntRect pixelSnappedRectForIntegralPositionedItems = snappedIntRect(LayoutRect(clip)); >diff --git a/Source/WebCore/rendering/RenderTheme.cpp b/Source/WebCore/rendering/RenderTheme.cpp >index 34f3a1e8170b59c5cdc8741dfdc96aaa77e5d6c3..a487a3c241a9530f69197d380b41e2de385443d9 100644 >--- a/Source/WebCore/rendering/RenderTheme.cpp >+++ b/Source/WebCore/rendering/RenderTheme.cpp >@@ -317,7 +317,7 @@ bool RenderTheme::paint(const RenderBox& box, ControlStates& controlStates, cons > case ButtonPart: > case InnerSpinButtonPart: > updateControlStatesForRenderer(box, controlStates); >- Theme::singleton().paint(part, controlStates, paintInfo.context(), devicePixelSnappedRect, box.style().effectiveZoom(), &box.view().frameView(), deviceScaleFactor, pageScaleFactor, box.page().useSystemAppearance(), box.page().useDarkAppearance()); >+ Theme::singleton().paint(part, controlStates, paintInfo.context(), devicePixelSnappedRect, box.style().effectiveZoom(), &box.view().frameView(), deviceScaleFactor, pageScaleFactor, box.document().useSystemAppearance(), box.document().useDarkAppearance()); > return false; > default: > break; >diff --git a/Source/WebCore/rendering/RenderThemeCocoa.mm b/Source/WebCore/rendering/RenderThemeCocoa.mm >index 1f88aed59c0c6eca17f5c226b2f15b9a11b36717..835a69523a495f5f1dc3df128833d5579ea2621d 100644 >--- a/Source/WebCore/rendering/RenderThemeCocoa.mm >+++ b/Source/WebCore/rendering/RenderThemeCocoa.mm >@@ -56,7 +56,7 @@ void RenderThemeCocoa::drawLineForDocumentMarker(const RenderText& renderer, Gra > if (context.paintingDisabled()) > return; > >- auto circleColor = colorForMarkerLineStyle(style, renderer.page().useSystemAppearance() && renderer.page().useDarkAppearance()); >+ auto circleColor = colorForMarkerLineStyle(style, renderer.document().useDarkAppearance()); > > // Center the underline and ensure we only draw entire dots. > FloatPoint offsetPoint = origin; >diff --git a/Source/WebCore/rendering/RenderThemeMac.mm b/Source/WebCore/rendering/RenderThemeMac.mm >index 91cd6de7b85288fe6427e5b7f563fda63608f35b..6b8dbcdb12e8566709d979f07a66ac16070c6eb4 100644 >--- a/Source/WebCore/rendering/RenderThemeMac.mm >+++ b/Source/WebCore/rendering/RenderThemeMac.mm >@@ -297,7 +297,7 @@ RenderThemeMac::RenderThemeMac() > > NSView *RenderThemeMac::documentViewFor(const RenderObject& o) const > { >- LocalDefaultSystemAppearance localAppearance(o.page().useSystemAppearance(), o.page().useDarkAppearance()); >+ LocalDefaultSystemAppearance localAppearance(usingDarkAppearance(o)); > ControlStates states(extractControlStatesForRenderer(o)); > return ThemeMac::ensuredView(&o.view().frameView(), states); > } >@@ -392,14 +392,14 @@ String RenderThemeMac::imageControlsStyleSheet() const > > Color RenderThemeMac::platformActiveSelectionBackgroundColor(OptionSet<StyleColor::Options> options) const > { >- LocalDefaultSystemAppearance localAppearance(options.contains(StyleColor::Options::UseSystemAppearance), options.contains(StyleColor::Options::UseDarkAppearance)); >+ LocalDefaultSystemAppearance localAppearance(options.contains(StyleColor::Options::UseDarkAppearance)); > return colorFromNSColor([NSColor selectedTextBackgroundColor]); > } > > Color RenderThemeMac::platformInactiveSelectionBackgroundColor(OptionSet<StyleColor::Options> options) const > { > #if __MAC_OS_X_VERSION_MIN_REQUIRED >= 101400 >- LocalDefaultSystemAppearance localAppearance(options.contains(StyleColor::Options::UseSystemAppearance), options.contains(StyleColor::Options::UseDarkAppearance)); >+ LocalDefaultSystemAppearance localAppearance(options.contains(StyleColor::Options::UseDarkAppearance)); > return colorFromNSColor([NSColor unemphasizedSelectedTextBackgroundColor]); > #else > UNUSED_PARAM(options); >@@ -409,7 +409,7 @@ Color RenderThemeMac::platformInactiveSelectionBackgroundColor(OptionSet<StyleCo > > Color RenderThemeMac::transformSelectionBackgroundColor(const Color& color, OptionSet<StyleColor::Options> options) const > { >- LocalDefaultSystemAppearance localAppearance(options.contains(StyleColor::Options::UseSystemAppearance), options.contains(StyleColor::Options::UseDarkAppearance)); >+ LocalDefaultSystemAppearance localAppearance(options.contains(StyleColor::Options::UseDarkAppearance)); > if (localAppearance.usingDarkAppearance()) { > // Use an alpha value that is similar to results from blendWithWhite() on light colors. > static const float darkAppearanceAlpha = 0.8; >@@ -421,13 +421,13 @@ Color RenderThemeMac::transformSelectionBackgroundColor(const Color& color, Opti > > bool RenderThemeMac::supportsSelectionForegroundColors(OptionSet<StyleColor::Options> options) const > { >- LocalDefaultSystemAppearance localAppearance(options.contains(StyleColor::Options::UseSystemAppearance), options.contains(StyleColor::Options::UseDarkAppearance)); >+ LocalDefaultSystemAppearance localAppearance(options.contains(StyleColor::Options::UseDarkAppearance)); > return localAppearance.usingDarkAppearance(); > } > > Color RenderThemeMac::platformActiveSelectionForegroundColor(OptionSet<StyleColor::Options> options) const > { >- LocalDefaultSystemAppearance localAppearance(options.contains(StyleColor::Options::UseSystemAppearance), options.contains(StyleColor::Options::UseDarkAppearance)); >+ LocalDefaultSystemAppearance localAppearance(options.contains(StyleColor::Options::UseDarkAppearance)); > if (localAppearance.usingDarkAppearance()) > return colorFromNSColor([NSColor selectedTextColor]); > return { }; >@@ -436,7 +436,7 @@ Color RenderThemeMac::platformActiveSelectionForegroundColor(OptionSet<StyleColo > Color RenderThemeMac::platformInactiveSelectionForegroundColor(OptionSet<StyleColor::Options> options) const > { > #if __MAC_OS_X_VERSION_MIN_REQUIRED >= 101400 >- LocalDefaultSystemAppearance localAppearance(options.contains(StyleColor::Options::UseSystemAppearance), options.contains(StyleColor::Options::UseDarkAppearance)); >+ LocalDefaultSystemAppearance localAppearance(options.contains(StyleColor::Options::UseDarkAppearance)); > if (localAppearance.usingDarkAppearance()) > return colorFromNSColor([NSColor unemphasizedSelectedTextColor]); > return { }; >@@ -449,7 +449,7 @@ Color RenderThemeMac::platformInactiveSelectionForegroundColor(OptionSet<StyleCo > Color RenderThemeMac::platformActiveListBoxSelectionBackgroundColor(OptionSet<StyleColor::Options> options) const > { > #if __MAC_OS_X_VERSION_MIN_REQUIRED >= 101400 >- LocalDefaultSystemAppearance localAppearance(options.contains(StyleColor::Options::UseSystemAppearance), options.contains(StyleColor::Options::UseDarkAppearance)); >+ LocalDefaultSystemAppearance localAppearance(options.contains(StyleColor::Options::UseDarkAppearance)); > return colorFromNSColor([NSColor selectedContentBackgroundColor]); > #else > UNUSED_PARAM(options); >@@ -460,7 +460,7 @@ Color RenderThemeMac::platformActiveListBoxSelectionBackgroundColor(OptionSet<St > Color RenderThemeMac::platformInactiveListBoxSelectionBackgroundColor(OptionSet<StyleColor::Options> options) const > { > #if __MAC_OS_X_VERSION_MIN_REQUIRED >= 101400 >- LocalDefaultSystemAppearance localAppearance(options.contains(StyleColor::Options::UseSystemAppearance), options.contains(StyleColor::Options::UseDarkAppearance)); >+ LocalDefaultSystemAppearance localAppearance(options.contains(StyleColor::Options::UseDarkAppearance)); > return colorFromNSColor([NSColor unemphasizedSelectedContentBackgroundColor]); > #else > UNUSED_PARAM(options); >@@ -470,14 +470,14 @@ Color RenderThemeMac::platformInactiveListBoxSelectionBackgroundColor(OptionSet< > > Color RenderThemeMac::platformActiveListBoxSelectionForegroundColor(OptionSet<StyleColor::Options> options) const > { >- LocalDefaultSystemAppearance localAppearance(options.contains(StyleColor::Options::UseSystemAppearance), options.contains(StyleColor::Options::UseDarkAppearance)); >+ LocalDefaultSystemAppearance localAppearance(options.contains(StyleColor::Options::UseDarkAppearance)); > return colorFromNSColor([NSColor alternateSelectedControlTextColor]); > } > > Color RenderThemeMac::platformInactiveListBoxSelectionForegroundColor(OptionSet<StyleColor::Options> options) const > { > #if __MAC_OS_X_VERSION_MIN_REQUIRED >= 101400 >- LocalDefaultSystemAppearance localAppearance(options.contains(StyleColor::Options::UseSystemAppearance), options.contains(StyleColor::Options::UseDarkAppearance)); >+ LocalDefaultSystemAppearance localAppearance(options.contains(StyleColor::Options::UseDarkAppearance)); > return colorFromNSColor([NSColor unemphasizedSelectedTextColor]); > #else > UNUSED_PARAM(options); >@@ -495,7 +495,7 @@ Color RenderThemeMac::platformFocusRingColor(OptionSet<StyleColor::Options> opti > Color RenderThemeMac::platformActiveTextSearchHighlightColor(OptionSet<StyleColor::Options> options) const > { > #if __MAC_OS_X_VERSION_MIN_REQUIRED >= 101300 >- LocalDefaultSystemAppearance localAppearance(options.contains(StyleColor::Options::UseSystemAppearance), options.contains(StyleColor::Options::UseDarkAppearance)); >+ LocalDefaultSystemAppearance localAppearance(options.contains(StyleColor::Options::UseDarkAppearance)); > return colorFromNSColor([NSColor findHighlightColor]); > #else > UNUSED_PARAM(options); >@@ -612,9 +612,7 @@ void RenderThemeMac::platformColorsDidChange() > > auto RenderThemeMac::colorCache(OptionSet<StyleColor::Options> options) const -> ColorCache& > { >- const bool useSystemAppearance = options.contains(StyleColor::Options::UseSystemAppearance); >- const bool useDarkAppearance = options.contains(StyleColor::Options::UseDarkAppearance); >- LocalDefaultSystemAppearance localAppearance(useSystemAppearance, useDarkAppearance); >+ LocalDefaultSystemAppearance localAppearance(options.contains(StyleColor::Options::UseDarkAppearance)); > if (localAppearance.usingDarkAppearance()) > return m_darkColorCache; > return RenderTheme::colorCache(options); >@@ -626,7 +624,7 @@ Color RenderThemeMac::systemColor(CSSValueID cssValueID, OptionSet<StyleColor::O > const bool useDarkAppearance = options.contains(StyleColor::Options::UseDarkAppearance); > const bool forVisitedLink = options.contains(StyleColor::Options::ForVisitedLink); > >- LocalDefaultSystemAppearance localAppearance(useSystemAppearance, useDarkAppearance); >+ LocalDefaultSystemAppearance localAppearance(useDarkAppearance); > > auto& cache = colorCache(options); > >@@ -1802,7 +1800,7 @@ void RenderThemeMac::setPopupButtonCellState(const RenderObject& o, const IntSiz > > void RenderThemeMac::paintCellAndSetFocusedElementNeedsRepaintIfNecessary(NSCell* cell, const RenderObject& renderer, const PaintInfo& paintInfo, const FloatRect& rect) > { >- LocalDefaultSystemAppearance localAppearance(renderer.page().useSystemAppearance(), renderer.page().useDarkAppearance()); >+ LocalDefaultSystemAppearance localAppearance(usingDarkAppearance(renderer)); > bool shouldDrawFocusRing = isFocused(renderer) && renderer.style().outlineStyleIsAuto() == OutlineIsAuto::On; > bool shouldUseImageBuffer = renderer.style().effectiveZoom() != 1 || renderer.page().pageScaleFactor() != 1; > bool shouldDrawCell = true; >@@ -1884,7 +1882,7 @@ bool RenderThemeMac::paintSliderThumb(const RenderObject& o, const PaintInfo& pa > ? sliderThumbVertical() > : sliderThumbHorizontal(); > >- LocalDefaultSystemAppearance localAppearance(o.page().useSystemAppearance(), o.page().useDarkAppearance()); >+ LocalDefaultSystemAppearance localAppearance(usingDarkAppearance(o)); > > LocalCurrentGraphicsContext localContext(paintInfo.context()); > >@@ -2997,12 +2995,7 @@ bool RenderThemeMac::paintAttachment(const RenderObject& renderer, const PaintIn > > bool RenderThemeMac::usingDarkAppearance(const RenderObject& o) const > { >-#if PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101400 >- return o.page().useSystemAppearance() && o.page().useDarkAppearance(); >-#else >- UNUSED_PARAM(o); >- return false; >-#endif >+ return o.document().useDarkAppearance(); > } > > CGColorRef RenderThemeMac::colorForMarkerLineStyle(DocumentMarkerLineStyle style, bool useDarkMode) >diff --git a/Source/WebCore/svg/graphics/SVGImage.cpp b/Source/WebCore/svg/graphics/SVGImage.cpp >index bdf92bd42437466a2fcc98dc63765f51a7724faf..0ae7be67522eb7e18244426bc190287031c53373 100644 >--- a/Source/WebCore/svg/graphics/SVGImage.cpp >+++ b/Source/WebCore/svg/graphics/SVGImage.cpp >@@ -324,7 +324,8 @@ ImageDrawResult SVGImage::draw(GraphicsContext& context, const FloatRect& dstRec > } > > #if PLATFORM(MAC) >- LocalDefaultSystemAppearance localAppearance(m_page->useSystemAppearance(), m_page->useDarkAppearance()); >+ auto* document = m_page->mainFrame().document(); >+ LocalDefaultSystemAppearance localAppearance(document ? document->useDarkAppearance() : false); > #endif > > view->paint(context, intersection(context.clipBounds(), enclosingIntRect(srcRect))); >diff --git a/Source/WebKit/UIProcess/mac/WKPrintingView.mm b/Source/WebKit/UIProcess/mac/WKPrintingView.mm >index d206ffe089534c32f3e2162209debc720875ebf8..aa5374319e8c1f43658f0dd77373c373d8933065 100644 >--- a/Source/WebKit/UIProcess/mac/WKPrintingView.mm >+++ b/Source/WebKit/UIProcess/mac/WKPrintingView.mm >@@ -556,11 +556,8 @@ - (void)drawRect:(NSRect)nsRect > > ASSERT(_printOperation == [NSPrintOperation currentOperation]); > >- auto* page = _webFrame->page(); >- if (!page) >- return; >- >- WebCore::LocalDefaultSystemAppearance localAppearance(page->useSystemAppearance(), page->useDarkAppearance()); >+ // Always use the light appearance when printing. >+ WebCore::LocalDefaultSystemAppearance localAppearance(false); > > if ([self _isPrintingPreview]) { > [self _drawPreview:nsRect]; >diff --git a/Source/WebKit/WebProcess/InjectedBundle/DOM/InjectedBundleRangeHandle.cpp b/Source/WebKit/WebProcess/InjectedBundle/DOM/InjectedBundleRangeHandle.cpp >index 6a801865315f5ba1d36d077da0417f3f9f6a9d6e..3f4f567dc4bae6185552520874f5feb55c88fc21 100644 >--- a/Source/WebKit/WebProcess/InjectedBundle/DOM/InjectedBundleRangeHandle.cpp >+++ b/Source/WebKit/WebProcess/InjectedBundle/DOM/InjectedBundleRangeHandle.cpp >@@ -124,7 +124,7 @@ RefPtr<WebImage> InjectedBundleRangeHandle::renderedImage(SnapshotOptions option > return nullptr; > > #if PLATFORM(MAC) >- LocalDefaultSystemAppearance localAppearance(frame->page()->useSystemAppearance(), frame->page()->useDarkAppearance()); >+ LocalDefaultSystemAppearance localAppearance(ownerDocument.useDarkAppearance()); > #endif > > Ref<Frame> protector(*frame); >diff --git a/Source/WebKit/WebProcess/Plugins/PDF/PDFPlugin.mm b/Source/WebKit/WebProcess/Plugins/PDF/PDFPlugin.mm >index 49b2225405b82f818d3efc027549e439ebd917f3..d20760e119d940b167c0db1b91fde2e5f7485c18 100644 >--- a/Source/WebKit/WebProcess/Plugins/PDF/PDFPlugin.mm >+++ b/Source/WebKit/WebProcess/Plugins/PDF/PDFPlugin.mm >@@ -1219,7 +1219,7 @@ void PDFPlugin::paintControlForLayerInContext(CALayer *layer, CGContextRef conte > { > #if PLATFORM(MAC) > auto* page = webFrame()->coreFrame()->page(); >- LocalDefaultSystemAppearance localAppearance(page->useSystemAppearance(), page->useDarkAppearance()); >+ LocalDefaultSystemAppearance localAppearance(page->useDarkAppearance()); > #endif > > GraphicsContext graphicsContext(context); >diff --git a/Source/WebKit/WebProcess/WebPage/WebPage.cpp b/Source/WebKit/WebProcess/WebPage/WebPage.cpp >index a4e46cb620e281de0bda804dd246b89ccf0180fe..dba1ea7ba266d8fc1f651b225ca131ea63bd0807 100644 >--- a/Source/WebKit/WebProcess/WebPage/WebPage.cpp >+++ b/Source/WebKit/WebProcess/WebPage/WebPage.cpp >@@ -1541,7 +1541,8 @@ void WebPage::scrollMainFrameIfNotAtMaxScrollPosition(const IntSize& scrollOffse > void WebPage::drawRect(GraphicsContext& graphicsContext, const IntRect& rect) > { > #if PLATFORM(MAC) >- LocalDefaultSystemAppearance localAppearance(m_page->useSystemAppearance(), m_page->useDarkAppearance()); >+ auto* document = m_mainFrame->coreFrame()->document(); >+ LocalDefaultSystemAppearance localAppearance(document ? document->useDarkAppearance() : false); > #endif > > GraphicsContextStateSaver stateSaver(graphicsContext); >diff --git a/Source/WebKitLegacy/mac/WebCoreSupport/WebEditorClient.mm b/Source/WebKitLegacy/mac/WebCoreSupport/WebEditorClient.mm >index 31804294b5af417c598a9239b6666facb07c01d8..0c073a66e437364d16ff4e49ae748f0e2e3e3bad 100644 >--- a/Source/WebKitLegacy/mac/WebCoreSupport/WebEditorClient.mm >+++ b/Source/WebKitLegacy/mac/WebCoreSupport/WebEditorClient.mm >@@ -478,8 +478,7 @@ static NSDictionary *attributesForAttributedStringConversion() > void _WebCreateFragment(Document& document, NSAttributedString *string, FragmentAndResources& result) > { > #if PLATFORM(MAC) >- auto* page = document.page(); >- LocalDefaultSystemAppearance localAppearance(page->useSystemAppearance(), page->useDarkAppearance()); >+ LocalDefaultSystemAppearance localAppearance(document.useDarkAppearance()); > #endif > > static NSDictionary *documentAttributes = [attributesForAttributedStringConversion() retain]; >diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog >index 914c252c9a73c83882122cf2a7af753ef952ae64..eb0193a852c9f2547675948e593f03c3abbfad91 100644 >--- a/LayoutTests/ChangeLog >+++ b/LayoutTests/ChangeLog >@@ -1,3 +1,14 @@ >+2018-10-12 Timothy Hatcher <timothy@apple.com> >+ >+ Add <meta name="supported-color-schemes"> to control what color schemes the page supports >+ https://bugs.webkit.org/show_bug.cgi?id=190526 >+ rdar://problem/45230140 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * css-dark-mode/supported-color-schemes-expected.txt: Added. >+ * css-dark-mode/supported-color-schemes.html: Added. >+ > 2018-10-11 Timothy Hatcher <timothy@apple.com> > > Add support for prefers-color-scheme media query >diff --git a/LayoutTests/css-dark-mode/supported-color-schemes-expected.txt b/LayoutTests/css-dark-mode/supported-color-schemes-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..19a5d705e5540d405637ddf599c9db0ac7a7b111 >--- /dev/null >+++ b/LayoutTests/css-dark-mode/supported-color-schemes-expected.txt >@@ -0,0 +1,19 @@ >+ >+PASS Element colors are correct in light color scheme with only light supported color scheme >+PASS Dark color scheme enabled >+PASS Element colors are correct in dark color scheme with only light supported color scheme >+PASS Light color scheme enabled >+PASS Supported color schemes changed to light and dark >+PASS Element colors are correct in light color scheme with light and dark supported color scheme >+PASS Dark color scheme enabled >+PASS Element colors are correct in dark color scheme with light and dark supported color scheme >+PASS Light color scheme enabled >+PASS Supported color schemes changed to dark >+PASS Element colors are correct in light color scheme with only dark supported color scheme >+PASS Dark color scheme enabled >+PASS Element colors are correct in dark color scheme with only dark supported color scheme >+PASS Supported color schemes changed to light and a bogus value >+PASS Element colors are correct in dark color scheme with only light supported color scheme >+PASS Supported color schemes changed to empty value >+PASS Element colors are correct in dark color scheme with implicit light supported color scheme >+ >diff --git a/LayoutTests/css-dark-mode/supported-color-schemes.html b/LayoutTests/css-dark-mode/supported-color-schemes.html >new file mode 100644 >index 0000000000000000000000000000000000000000..ea5c276ec8112b70453d3faae21ae4f3919b358a >--- /dev/null >+++ b/LayoutTests/css-dark-mode/supported-color-schemes.html >@@ -0,0 +1,103 @@ >+<!DOCTYPE html> >+ >+<!-- webkit-test-runner [ experimental:DarkModeCSSEnabled=true ] --> >+ >+<script src="../resources/testharness.js"></script> >+<script src="../resources/testharnessreport.js"></script> >+ >+<style> >+#test1 { >+ color: text; >+} >+</style> >+ >+<meta id="meta" name="supported-color-schemes" content="light"> >+ >+<div id="test1"></div> >+ >+<script> >+function test_prop(id, prop, expected) { >+ assert_equals(window.getComputedStyle(document.getElementById(id)).getPropertyValue(prop).trim(), expected); >+} >+ >+test(function() { >+ // The semantic text color should be black. >+ test_prop("test1", "color", "rgb(0, 0, 0)"); >+}, "Element colors are correct in light color scheme with only light supported color scheme"); >+ >+test(function() { >+ if (window.internals) >+ internals.settings.setUseDarkAppearance(true); >+}, "Dark color scheme enabled"); >+ >+test(function() { >+ // The semantic text color should be black, and not change. >+ test_prop("test1", "color", "rgb(0, 0, 0)"); >+}, "Element colors are correct in dark color scheme with only light supported color scheme"); >+ >+test(function() { >+ if (window.internals) >+ internals.settings.setUseDarkAppearance(false); >+}, "Light color scheme enabled"); >+ >+test(function() { >+ document.getElementById("meta").content = "light dark"; >+}, "Supported color schemes changed to light and dark"); >+ >+test(function() { >+ // The semantic text color should be black. >+ test_prop("test1", "color", "rgb(0, 0, 0)"); >+}, "Element colors are correct in light color scheme with light and dark supported color scheme"); >+ >+test(function() { >+ if (window.internals) >+ internals.settings.setUseDarkAppearance(true); >+}, "Dark color scheme enabled"); >+ >+test(function() { >+ // The semantic text color should be white. >+ test_prop("test1", "color", "rgb(255, 255, 255)"); >+}, "Element colors are correct in dark color scheme with light and dark supported color scheme"); >+ >+test(function() { >+ if (window.internals) >+ internals.settings.setUseDarkAppearance(false); >+}, "Light color scheme enabled"); >+ >+test(function() { >+ document.getElementById("meta").content = "dark"; >+}, "Supported color schemes changed to dark"); >+ >+test(function() { >+ // The semantic text color should be white. >+ test_prop("test1", "color", "rgb(255, 255, 255)"); >+}, "Element colors are correct in light color scheme with only dark supported color scheme"); >+ >+test(function() { >+ if (window.internals) >+ internals.settings.setUseDarkAppearance(true); >+}, "Dark color scheme enabled"); >+ >+test(function() { >+ // The semantic text color should be white still. >+ test_prop("test1", "color", "rgb(255, 255, 255)"); >+}, "Element colors are correct in dark color scheme with only dark supported color scheme"); >+ >+test(function() { >+ document.getElementById("meta").content = "light ,foo "; >+}, "Supported color schemes changed to light and a bogus value"); >+ >+test(function() { >+ // The semantic text color should be black again. >+ test_prop("test1", "color", "rgb(0, 0, 0)"); >+}, "Element colors are correct in dark color scheme with only light supported color scheme"); >+ >+test(function() { >+ document.getElementById("meta").content = ""; >+}, "Supported color schemes changed to empty value"); >+ >+test(function() { >+ // The semantic text color should be black still. >+ test_prop("test1", "color", "rgb(0, 0, 0)"); >+}, "Element colors are correct in dark color scheme with implicit light supported color scheme"); >+</script>
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 190526
:
352193
|
352199
|
352202
|
352217
|
352223
|
352270
|
352483
|
352497
|
352498