Title: [240659] trunk/Source/WebKit
Revision
240659
Author
[email protected]
Date
2019-01-29 09:16:33 -0800 (Tue, 29 Jan 2019)

Log Message

Regression(r240046) VoiceOver is no longer working after a process swap
https://bugs.webkit.org/show_bug.cgi?id=193953
<rdar://problem/47612398>

Reviewed by Alex Christensen.

ProvisionalPageProxy used to forward the RegisterWebProcessAccessibilityToken IPC from
the provisional WebProcess to the WebPageProxy right away. This in turn would notify
the PageClient whose logic would rely on WebPageProxy::process(), which returns the
committed process instead of the provisional one.

To address the issue, the ProvisionalPageProxy now stores the token sent by the
provisional WebProcess and we only call registerWebProcessAccessibilityToken()
on the WebPageProxy *after* we've swapped to the provisional process.

* UIProcess/ProvisionalPageProxy.cpp:
(WebKit::ProvisionalPageProxy::registerWebProcessAccessibilityToken):
(WebKit::ProvisionalPageProxy::didReceiveMessage):
* UIProcess/ProvisionalPageProxy.h:
(WebKit::ProvisionalPageProxy::takeAccessibilityToken):
* UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::commitProvisionalPage):

Modified Paths

Diff

Modified: trunk/Source/WebKit/ChangeLog (240658 => 240659)


--- trunk/Source/WebKit/ChangeLog	2019-01-29 16:39:47 UTC (rev 240658)
+++ trunk/Source/WebKit/ChangeLog	2019-01-29 17:16:33 UTC (rev 240659)
@@ -1,3 +1,28 @@
+2019-01-29  Chris Dumez  <[email protected]>
+
+        Regression(r240046) VoiceOver is no longer working after a process swap
+        https://bugs.webkit.org/show_bug.cgi?id=193953
+        <rdar://problem/47612398>
+
+        Reviewed by Alex Christensen.
+
+        ProvisionalPageProxy used to forward the RegisterWebProcessAccessibilityToken IPC from
+        the provisional WebProcess to the WebPageProxy right away. This in turn would notify
+        the PageClient whose logic would rely on WebPageProxy::process(), which returns the
+        committed process instead of the provisional one.
+
+        To address the issue, the ProvisionalPageProxy now stores the token sent by the
+        provisional WebProcess and we only call registerWebProcessAccessibilityToken()
+        on the WebPageProxy *after* we've swapped to the provisional process.
+
+        * UIProcess/ProvisionalPageProxy.cpp:
+        (WebKit::ProvisionalPageProxy::registerWebProcessAccessibilityToken):
+        (WebKit::ProvisionalPageProxy::didReceiveMessage):
+        * UIProcess/ProvisionalPageProxy.h:
+        (WebKit::ProvisionalPageProxy::takeAccessibilityToken):
+        * UIProcess/WebPageProxy.cpp:
+        (WebKit::WebPageProxy::commitProvisionalPage):
+
 2019-01-28  Ryosuke Niwa  <[email protected]>
 
         User agent string override for navigator.userAgent should be site specific quirks

Modified: trunk/Source/WebKit/UIProcess/ProvisionalPageProxy.cpp (240658 => 240659)


--- trunk/Source/WebKit/UIProcess/ProvisionalPageProxy.cpp	2019-01-29 16:39:47 UTC (rev 240658)
+++ trunk/Source/WebKit/UIProcess/ProvisionalPageProxy.cpp	2019-01-29 17:16:33 UTC (rev 240659)
@@ -284,6 +284,13 @@
     m_page.backForwardGoToItemShared(m_process.copyRef(), identifier, handle);
 }
 
+#if PLATFORM(COCOA)
+void ProvisionalPageProxy::registerWebProcessAccessibilityToken(const IPC::DataReference& data)
+{
+    m_accessibilityToken = data.vector();
+}
+#endif
+
 void ProvisionalPageProxy::didReceiveMessage(IPC::Connection& connection, IPC::Decoder& decoder)
 {
     ASSERT(decoder.messageReceiverName() == Messages::WebPageProxy::messageReceiverName());
@@ -294,9 +301,6 @@
         || decoder.messageName() == Messages::WebPageProxy::LogDiagnosticMessage::name()
         || decoder.messageName() == Messages::WebPageProxy::LogDiagnosticMessageWithEnhancedPrivacy::name()
         || decoder.messageName() == Messages::WebPageProxy::SetNetworkRequestsInProgress::name()
-#if PLATFORM(COCOA)
-        || decoder.messageName() == Messages::WebPageProxy::RegisterWebProcessAccessibilityToken::name()
-#endif
         )
     {
         m_page.didReceiveMessage(connection, decoder);
@@ -303,6 +307,13 @@
         return;
     }
 
+#if PLATFORM(COCOA)
+    if (decoder.messageName() == Messages::WebPageProxy::RegisterWebProcessAccessibilityToken::name()) {
+        IPC::handleMessage<Messages::WebPageProxy::RegisterWebProcessAccessibilityToken>(decoder, this, &ProvisionalPageProxy::registerWebProcessAccessibilityToken);
+        return;
+    }
+#endif
+
     if (decoder.messageName() == Messages::WebPageProxy::StartURLSchemeTask::name()) {
         IPC::handleMessage<Messages::WebPageProxy::StartURLSchemeTask>(decoder, this, &ProvisionalPageProxy::startURLSchemeTask);
         return;

Modified: trunk/Source/WebKit/UIProcess/ProvisionalPageProxy.h (240658 => 240659)


--- trunk/Source/WebKit/UIProcess/ProvisionalPageProxy.h	2019-01-29 16:39:47 UTC (rev 240658)
+++ trunk/Source/WebKit/UIProcess/ProvisionalPageProxy.h	2019-01-29 17:16:33 UTC (rev 240659)
@@ -56,6 +56,10 @@
     DrawingAreaProxy* drawingArea() const { return m_drawingArea.get(); }
     std::unique_ptr<DrawingAreaProxy> takeDrawingArea();
 
+#if PLATFORM(COCOA)
+    Vector<uint8_t> takeAccessibilityToken() { return WTFMove(m_accessibilityToken); }
+#endif
+
     void loadData(API::Navigation&, const IPC::DataReference&, const String& MIMEType, const String& encoding, const String& baseURL, API::Object* userData, Optional<WebsitePoliciesData>&& = WTF::nullopt);
     void loadRequest(API::Navigation&, WebCore::ResourceRequest&&, WebCore::ShouldOpenExternalURLsPolicy, API::Object* userData, Optional<WebsitePoliciesData>&& = WTF::nullopt);
     void goToBackForwardItem(API::Navigation&, WebBackForwardListItem&, Optional<WebsitePoliciesData>&&);
@@ -80,6 +84,9 @@
     void didFailProvisionalLoadForFrame(uint64_t frameID, const WebCore::SecurityOriginData& frameSecurityOrigin, uint64_t navigationID, const String& provisionalURL, const WebCore::ResourceError&, const UserData&);
     void startURLSchemeTask(URLSchemeTaskParameters&&);
     void backForwardGoToItem(const WebCore::BackForwardItemIdentifier&, SandboxExtension::Handle&);
+#if PLATFORM(COCOA)
+    void registerWebProcessAccessibilityToken(const IPC::DataReference&);
+#endif
 
     void initializeWebPage();
     void finishInitializingWebPageAfterProcessLaunch();
@@ -95,6 +102,9 @@
     bool m_wasCommitted { false };
     URL m_provisionalLoadURL;
 
+#if PLATFORM(COCOA)
+    Vector<uint8_t> m_accessibilityToken;
+#endif
 #if PLATFORM(IOS_FAMILY)
     ProcessThrottler::ForegroundActivityToken m_suspensionToken;
 #endif

Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.cpp (240658 => 240659)


--- trunk/Source/WebKit/UIProcess/WebPageProxy.cpp	2019-01-29 16:39:47 UTC (rev 240658)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.cpp	2019-01-29 17:16:33 UTC (rev 240659)
@@ -2776,6 +2776,12 @@
 
     swapToWebProcess(m_provisionalPage->process(), m_provisionalPage->takeDrawingArea(), m_provisionalPage->mainFrame());
 
+#if PLATFORM(COCOA)
+    auto accessibilityToken = m_provisionalPage->takeAccessibilityToken();
+    if (!accessibilityToken.isEmpty())
+        registerWebProcessAccessibilityToken({ accessibilityToken.data(), accessibilityToken.size() });
+#endif
+
     didCommitLoadForFrame(frameID, navigationID, mimeType, frameHasCustomContentProvider, frameLoadType, certificateInfo, containsPluginDocument, forcedHasInsecureContent, userData);
 
     m_provisionalPage = nullptr;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to