Title: [234268] trunk/Source/WebKit
Revision
234268
Author
[email protected]
Date
2018-07-26 12:49:09 -0700 (Thu, 26 Jul 2018)

Log Message

ERROR: Unhandled web process message 'WebPage:SetUseDarkAppearance' when browsing in dark mode
https://bugs.webkit.org/show_bug.cgi?id=188028

Reviewed by Wenson Hsieh.

The issue was that the WebViewImpl constructor was calling setUseDarkAppearance() *before* calling
initializeWebPage(), which would cause us to send IPC the WebContent process for a pageID that does
not exist on WebProcess side yet.

To address the issue, the WebViewImpl constructor no longer calls setUseDarkAppearance() and WebPageProxy
no longer holds a flag indicates is dark appearance is used. Instead, the WebPageProxy asks the WebView
for the value whenever it needs to, via the PageClient.

* UIProcess/Cocoa/WebViewImpl.h:
* UIProcess/Cocoa/WebViewImpl.mm:
(WebKit::WebViewImpl::WebViewImpl):
(WebKit::WebViewImpl::effectiveAppearanceDidChange):
(WebKit::WebViewImpl::setUseDarkAppearance): Deleted.
* UIProcess/PageClient.h:
* UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::creationParameters):
(WebKit::WebPageProxy::useDarkAppearance const):
(WebKit::WebPageProxy::effectiveAppearanceDidChange):
(WebKit::WebPageProxy::showPlaybackTargetPicker):
(WebKit::WebPageProxy::setUseDarkAppearance): Deleted.
* UIProcess/WebPageProxy.h:
(WebKit::WebPageProxy::useDarkAppearance const): Deleted.
* UIProcess/mac/PageClientImplMac.h:
* UIProcess/mac/PageClientImplMac.mm:
(WebKit::PageClientImpl::effectiveAppearanceIsDark const):

Modified Paths

Diff

Modified: trunk/Source/WebKit/ChangeLog (234267 => 234268)


--- trunk/Source/WebKit/ChangeLog	2018-07-26 17:50:04 UTC (rev 234267)
+++ trunk/Source/WebKit/ChangeLog	2018-07-26 19:49:09 UTC (rev 234268)
@@ -1,3 +1,36 @@
+2018-07-26  Chris Dumez  <[email protected]>
+
+        ERROR: Unhandled web process message 'WebPage:SetUseDarkAppearance' when browsing in dark mode
+        https://bugs.webkit.org/show_bug.cgi?id=188028
+
+        Reviewed by Wenson Hsieh.
+
+        The issue was that the WebViewImpl constructor was calling setUseDarkAppearance() *before* calling
+        initializeWebPage(), which would cause us to send IPC the WebContent process for a pageID that does
+        not exist on WebProcess side yet.
+
+        To address the issue, the WebViewImpl constructor no longer calls setUseDarkAppearance() and WebPageProxy
+        no longer holds a flag indicates is dark appearance is used. Instead, the WebPageProxy asks the WebView
+        for the value whenever it needs to, via the PageClient.
+
+        * UIProcess/Cocoa/WebViewImpl.h:
+        * UIProcess/Cocoa/WebViewImpl.mm:
+        (WebKit::WebViewImpl::WebViewImpl):
+        (WebKit::WebViewImpl::effectiveAppearanceDidChange):
+        (WebKit::WebViewImpl::setUseDarkAppearance): Deleted.
+        * UIProcess/PageClient.h:
+        * UIProcess/WebPageProxy.cpp:
+        (WebKit::WebPageProxy::creationParameters):
+        (WebKit::WebPageProxy::useDarkAppearance const):
+        (WebKit::WebPageProxy::effectiveAppearanceDidChange):
+        (WebKit::WebPageProxy::showPlaybackTargetPicker):
+        (WebKit::WebPageProxy::setUseDarkAppearance): Deleted.
+        * UIProcess/WebPageProxy.h:
+        (WebKit::WebPageProxy::useDarkAppearance const): Deleted.
+        * UIProcess/mac/PageClientImplMac.h:
+        * UIProcess/mac/PageClientImplMac.mm:
+        (WebKit::PageClientImpl::effectiveAppearanceIsDark const):
+
 2018-07-26  Sihui Liu  <[email protected]>
 
         Remove a forward protocol declaration of '_WKWebViewPrintProvider'

Modified: trunk/Source/WebKit/UIProcess/Cocoa/WebViewImpl.h (234267 => 234268)


--- trunk/Source/WebKit/UIProcess/Cocoa/WebViewImpl.h	2018-07-26 17:50:04 UTC (rev 234267)
+++ trunk/Source/WebKit/UIProcess/Cocoa/WebViewImpl.h	2018-07-26 19:49:09 UTC (rev 234268)
@@ -539,8 +539,6 @@
     void setUseSystemAppearance(bool);
     bool useSystemAppearance();
 
-    void setUseDarkAppearance(bool);
-
     void effectiveAppearanceDidChange();
     bool effectiveAppearanceIsDark();
 

Modified: trunk/Source/WebKit/UIProcess/Cocoa/WebViewImpl.mm (234267 => 234268)


--- trunk/Source/WebKit/UIProcess/Cocoa/WebViewImpl.mm	2018-07-26 17:50:04 UTC (rev 234267)
+++ trunk/Source/WebKit/UIProcess/Cocoa/WebViewImpl.mm	2018-07-26 19:49:09 UTC (rev 234268)
@@ -1312,8 +1312,6 @@
 
     m_page->setAddsVisitedLinks(processPool.historyClient().addsVisitedLinks());
 
-    m_page->setUseDarkAppearance(effectiveAppearanceIsDark());
-
     m_page->initializeWebPage();
 
     registerDraggedTypes();
@@ -5023,7 +5021,7 @@
 
 void WebViewImpl::effectiveAppearanceDidChange()
 {
-    setUseDarkAppearance(effectiveAppearanceIsDark());
+    m_page->effectiveAppearanceDidChange();
 }
 
 bool WebViewImpl::effectiveAppearanceIsDark()
@@ -5036,11 +5034,6 @@
 #endif
 }
 
-void WebViewImpl::setUseDarkAppearance(bool useDarkAppearance)
-{
-    m_page->setUseDarkAppearance(useDarkAppearance);
-}
-
 } // namespace WebKit
 
 #endif // PLATFORM(MAC)

Modified: trunk/Source/WebKit/UIProcess/PageClient.h (234267 => 234268)


--- trunk/Source/WebKit/UIProcess/PageClient.h	2018-07-26 17:50:04 UTC (rev 234267)
+++ trunk/Source/WebKit/UIProcess/PageClient.h	2018-07-26 19:49:09 UTC (rev 234268)
@@ -266,6 +266,8 @@
     virtual NSWindow *platformWindow() = 0;
     virtual void setShouldSuppressFirstResponderChanges(bool) = 0;
 
+    virtual bool effectiveAppearanceIsDark() const = 0;
+
 #if WK_API_ENABLED
     virtual NSView *inspectorAttachmentView() = 0;
     virtual _WKRemoteObjectRegistry *remoteObjectRegistry() = 0;

Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.cpp (234267 => 234268)


--- trunk/Source/WebKit/UIProcess/WebPageProxy.cpp	2018-07-26 17:50:04 UTC (rev 234267)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.cpp	2018-07-26 19:49:09 UTC (rev 234268)
@@ -6247,7 +6247,7 @@
 #if PLATFORM(MAC)
     parameters.colorSpace = m_pageClient.colorSpace();
     parameters.useSystemAppearance = m_useSystemAppearance;
-    parameters.useDarkAppearance = m_useDarkAppearance;
+    parameters.useDarkAppearance = useDarkAppearance();
 #endif
 #if PLATFORM(IOS)
     parameters.screenSize = screenSize();
@@ -6862,6 +6862,11 @@
         m_process->send(Messages::WebPage::HandleAlternativeTextUIResult(result), m_pageID);
 }
 
+bool WebPageProxy::useDarkAppearance() const
+{
+    return m_pageClient.effectiveAppearanceIsDark();
+}
+
 #if USE(DICTATION_ALTERNATIVES)
 void WebPageProxy::showDictationAlternativeUI(const WebCore::FloatRect& boundingBoxOfDictatedText, uint64_t dictationContext)
 {
@@ -7371,16 +7376,12 @@
     m_process->send(Messages::WebPage::SetUseSystemAppearance(useSystemAppearance), m_pageID);
 }
     
-void WebPageProxy::setUseDarkAppearance(bool useDarkAppearance)
+void WebPageProxy::effectiveAppearanceDidChange()
 {
     if (!isValid())
         return;
 
-    if (useDarkAppearance == m_useDarkAppearance)
-        return;
-
-    m_useDarkAppearance = useDarkAppearance;
-    m_process->send(Messages::WebPage::SetUseDarkAppearance(useDarkAppearance), m_pageID);
+    m_process->send(Messages::WebPage::SetUseDarkAppearance(useDarkAppearance()), m_pageID);
 }
 
 void WebPageProxy::setHeaderBannerHeightForTesting(int height)
@@ -7428,7 +7429,7 @@
 
 void WebPageProxy::showPlaybackTargetPicker(uint64_t contextId, const WebCore::FloatRect& rect, bool hasVideo)
 {
-    m_pageClient.mediaSessionManager().showPlaybackTargetPicker(*this, contextId, m_pageClient.rootViewToScreen(IntRect(rect)), hasVideo, m_useDarkAppearance);
+    m_pageClient.mediaSessionManager().showPlaybackTargetPicker(*this, contextId, m_pageClient.rootViewToScreen(IntRect(rect)), hasVideo, useDarkAppearance());
 }
 
 void WebPageProxy::playbackTargetPickerClientStateDidChange(uint64_t contextId, WebCore::MediaProducer::MediaStateFlags state)

Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.h (234267 => 234268)


--- trunk/Source/WebKit/UIProcess/WebPageProxy.h	2018-07-26 17:50:04 UTC (rev 234267)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.h	2018-07-26 19:49:09 UTC (rev 234268)
@@ -836,8 +836,8 @@
 #if PLATFORM(MAC)
     void setUseSystemAppearance(bool);
     bool useSystemAppearance() const { return m_useSystemAppearance; }
-    void setUseDarkAppearance(bool);
-    bool useDarkAppearance() const { return m_useDarkAppearance; }
+    void effectiveAppearanceDidChange();
+    bool useDarkAppearance() const;
 #endif
 
 #if PLATFORM(COCOA)
@@ -1891,7 +1891,6 @@
         
 #if PLATFORM(MAC)
     bool m_useSystemAppearance { false };
-    bool m_useDarkAppearance { false };
 #endif
 
 #if ENABLE(APPLE_PAY)

Modified: trunk/Source/WebKit/UIProcess/mac/PageClientImplMac.h (234267 => 234268)


--- trunk/Source/WebKit/UIProcess/mac/PageClientImplMac.h	2018-07-26 17:50:04 UTC (rev 234267)
+++ trunk/Source/WebKit/UIProcess/mac/PageClientImplMac.h	2018-07-26 19:49:09 UTC (rev 234268)
@@ -231,6 +231,7 @@
     NSWindow *platformWindow() override;
 
     WebCore::UserInterfaceLayoutDirection userInterfaceLayoutDirection() override;
+    bool effectiveAppearanceIsDark() const override;
 
 #if WK_API_ENABLED
     NSView *inspectorAttachmentView() override;

Modified: trunk/Source/WebKit/UIProcess/mac/PageClientImplMac.mm (234267 => 234268)


--- trunk/Source/WebKit/UIProcess/mac/PageClientImplMac.mm	2018-07-26 17:50:04 UTC (rev 234267)
+++ trunk/Source/WebKit/UIProcess/mac/PageClientImplMac.mm	2018-07-26 19:49:09 UTC (rev 234268)
@@ -894,6 +894,11 @@
     return (m_view.userInterfaceLayoutDirection == NSUserInterfaceLayoutDirectionLeftToRight) ? WebCore::UserInterfaceLayoutDirection::LTR : WebCore::UserInterfaceLayoutDirection::RTL;
 }
 
+bool PageClientImpl::effectiveAppearanceIsDark() const
+{
+    return m_impl->effectiveAppearanceIsDark();
+}
+
 } // namespace WebKit
 
 #endif // PLATFORM(MAC)
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to