WebKit Bugzilla
Attachment 360436 Details for
Bug 193953
: Regression(r240046) VoiceOver is no longer working after a process swap
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch
bug-193953-20190128213555.patch (text/plain), 6.51 KB, created by
Chris Dumez
on 2019-01-28 21:35:56 PST
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Chris Dumez
Created:
2019-01-28 21:35:56 PST
Size:
6.51 KB
patch
obsolete
>Subversion Revision: 240599 >diff --git a/Source/WebKit/ChangeLog b/Source/WebKit/ChangeLog >index d641ab3f60c66ebb90da44ba98a25994f8f85eda..7078907721060fcda6dc6941676346b958ba72b5 100644 >--- a/Source/WebKit/ChangeLog >+++ b/Source/WebKit/ChangeLog >@@ -1,3 +1,28 @@ >+2019-01-28 Chris Dumez <cdumez@apple.com> >+ >+ 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 NOBODY (OOPS!). >+ >+ 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 Chris Dumez <cdumez@apple.com> > > REGRESSION (PSON): Twitter link gets stuck at t.co after navigating back in tab >diff --git a/Source/WebKit/UIProcess/ProvisionalPageProxy.cpp b/Source/WebKit/UIProcess/ProvisionalPageProxy.cpp >index 8d44829cda146ff1a29532c743f76f78b21c7efa..a9f2be7c79dde6f459bd8090271e727e32b3d05b 100644 >--- a/Source/WebKit/UIProcess/ProvisionalPageProxy.cpp >+++ b/Source/WebKit/UIProcess/ProvisionalPageProxy.cpp >@@ -284,6 +284,13 @@ void ProvisionalPageProxy::backForwardGoToItem(const WebCore::BackForwardItemIde > 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,15 +301,19 @@ void ProvisionalPageProxy::didReceiveMessage(IPC::Connection& connection, IPC::D > || 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); > 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; >diff --git a/Source/WebKit/UIProcess/ProvisionalPageProxy.h b/Source/WebKit/UIProcess/ProvisionalPageProxy.h >index dd1519e05a301ddde5b494349cbfbfe0dde0772a..1d183adfa098c321a5be984182b49ffeea60e5ef 100644 >--- a/Source/WebKit/UIProcess/ProvisionalPageProxy.h >+++ b/Source/WebKit/UIProcess/ProvisionalPageProxy.h >@@ -56,6 +56,10 @@ public: > 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 @@ private: > 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 @@ private: > 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 >diff --git a/Source/WebKit/UIProcess/WebPageProxy.cpp b/Source/WebKit/UIProcess/WebPageProxy.cpp >index ca17ee4f7a73b666a03fd1847cd9cb614fc642eb..cc082af77091616a43fe731003941bcece9e5e54 100644 >--- a/Source/WebKit/UIProcess/WebPageProxy.cpp >+++ b/Source/WebKit/UIProcess/WebPageProxy.cpp >@@ -2781,6 +2781,12 @@ void WebPageProxy::commitProvisionalPage(uint64_t frameID, uint64_t navigationID > > 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;
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 193953
: 360436