WebKit Bugzilla
Attachment 357302 Details for
Bug 192694
: [PSON] WebsitePolicies are lost on process-swap
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch
bug-192694-20181213225136.patch (text/plain), 24.88 KB, created by
Chris Dumez
on 2018-12-13 22:51:40 PST
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Chris Dumez
Created:
2018-12-13 22:51:40 PST
Size:
24.88 KB
patch
obsolete
>Subversion Revision: 239197 >diff --git a/Source/WebKit/ChangeLog b/Source/WebKit/ChangeLog >index 9fbabea1e2f9339d6b1ddcb4f60f62fae1bb7ddd..65d1eb9948e9a4aaa4995fe20b719912764eaf7d 100644 >--- a/Source/WebKit/ChangeLog >+++ b/Source/WebKit/ChangeLog >@@ -1,3 +1,38 @@ >+2018-12-13 Chris Dumez <cdumez@apple.com> >+ >+ [PSON] WebsitePolicies are lost on process-swap >+ https://bugs.webkit.org/show_bug.cgi?id=192694 >+ <rdar://problem/46715748> >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ In case of process-swap on navigation, instead of sending the websitePolicies to the old >+ process, send them to the new process as we trigger the navigation. We tell the new process >+ that it is continueing a load and it will therefore not re-trigger a decidePolicyForNavigationAction. >+ >+ * Shared/LoadParameters.cpp: >+ (WebKit::LoadParameters::encode const): >+ (WebKit::LoadParameters::decode): >+ * Shared/LoadParameters.h: >+ * UIProcess/WebPageProxy.cpp: >+ (WebKit::WebPageProxy::reattachToWebProcessForReload): >+ (WebKit::WebPageProxy::reattachToWebProcessWithItem): >+ (WebKit::WebPageProxy::loadRequestWithNavigation): >+ (WebKit::WebPageProxy::loadDataWithNavigation): >+ (WebKit::WebPageProxy::goToBackForwardItem): >+ (WebKit::WebPageProxy::receivedNavigationPolicyDecision): >+ (WebKit::WebPageProxy::continueNavigationInNewProcess): >+ * UIProcess/WebPageProxy.h: >+ * WebProcess/WebPage/WebPage.cpp: >+ (WebKit::WebPage::loadRequest): >+ (WebKit::WebPage::loadDataImpl): >+ (WebKit::WebPage::loadData): >+ (WebKit::WebPage::loadAlternateHTML): >+ (WebKit::WebPage::goToBackForwardItem): >+ (WebKit::WebPage::createDocumentLoader): >+ * WebProcess/WebPage/WebPage.h: >+ * WebProcess/WebPage/WebPage.messages.in: >+ > 2018-12-13 Joseph Pecoraro <pecoraro@apple.com> > > [iOS] Web Inspector: Occasional UIProcess crashes under WebPageProxy::showInspectorIndication >diff --git a/Source/WebKit/Shared/LoadParameters.cpp b/Source/WebKit/Shared/LoadParameters.cpp >index 2ce68cb7128135a50d9ca763b7c42d3a3907251a..46249e791245fe6990a9570477615e9cedb2fc28 100644 >--- a/Source/WebKit/Shared/LoadParameters.cpp >+++ b/Source/WebKit/Shared/LoadParameters.cpp >@@ -49,6 +49,7 @@ void LoadParameters::encode(IPC::Encoder& encoder) const > encoder << baseURLString; > encoder << unreachableURLString; > encoder << provisionalLoadErrorURLString; >+ encoder << websitePolicies; > encoder << shouldOpenExternalURLsPolicy; > encoder << shouldTreatAsContinuingLoad; > encoder << userData; >@@ -105,6 +106,12 @@ bool LoadParameters::decode(IPC::Decoder& decoder, LoadParameters& data) > if (!decoder.decode(data.provisionalLoadErrorURLString)) > return false; > >+ std::optional<std::optional<WebsitePoliciesData>> websitePolicies; >+ decoder >> websitePolicies; >+ if (!websitePolicies) >+ return false; >+ data.websitePolicies = WTFMove(*websitePolicies); >+ > if (!decoder.decode(data.shouldOpenExternalURLsPolicy)) > return false; > >diff --git a/Source/WebKit/Shared/LoadParameters.h b/Source/WebKit/Shared/LoadParameters.h >index 82dfeaa1dae6d31ab3540b8a01f33dde0a0e06be..eef1a610040a6ae5d2dd2d4a199264067064516c 100644 >--- a/Source/WebKit/Shared/LoadParameters.h >+++ b/Source/WebKit/Shared/LoadParameters.h >@@ -28,6 +28,7 @@ > #include "DataReference.h" > #include "SandboxExtension.h" > #include "UserData.h" >+#include "WebsitePoliciesData.h" > #include <WebCore/FrameLoaderTypes.h> > #include <WebCore/ResourceRequest.h> > >@@ -60,6 +61,8 @@ struct LoadParameters { > String unreachableURLString; > String provisionalLoadErrorURLString; > >+ std::optional<WebsitePoliciesData> websitePolicies; >+ > uint64_t shouldOpenExternalURLsPolicy; > bool shouldTreatAsContinuingLoad { false }; > UserData userData; >diff --git a/Source/WebKit/UIProcess/WebPageProxy.cpp b/Source/WebKit/UIProcess/WebPageProxy.cpp >index 04b038ee2cf9ebf801604394bcbcaad7ef2a8f64..cb225109767ec3f9cd49b8efc826993f42a29a97 100644 >--- a/Source/WebKit/UIProcess/WebPageProxy.cpp >+++ b/Source/WebKit/UIProcess/WebPageProxy.cpp >@@ -859,7 +859,7 @@ RefPtr<API::Navigation> WebPageProxy::reattachToWebProcessForReload() > auto navigation = m_navigationState->createReloadNavigation(); > > // We allow stale content when reloading a WebProcess that's been killed or crashed. >- m_process->send(Messages::WebPage::GoToBackForwardItem(navigation->navigationID(), m_backForwardList->currentItem()->itemID(), FrameLoadType::IndexedBackForward, ShouldTreatAsContinuingLoad::No), m_pageID); >+ m_process->send(Messages::WebPage::GoToBackForwardItem(navigation->navigationID(), m_backForwardList->currentItem()->itemID(), FrameLoadType::IndexedBackForward, ShouldTreatAsContinuingLoad::No, std::nullopt), m_pageID); > m_process->responsivenessTimer().start(); > > return WTFMove(navigation); >@@ -878,7 +878,7 @@ RefPtr<API::Navigation> WebPageProxy::reattachToWebProcessWithItem(WebBackForwar > > auto navigation = m_navigationState->createBackForwardNavigation(item, m_backForwardList->currentItem(), FrameLoadType::IndexedBackForward); > >- m_process->send(Messages::WebPage::GoToBackForwardItem(navigation->navigationID(), item.itemID(), FrameLoadType::IndexedBackForward, ShouldTreatAsContinuingLoad::No), m_pageID); >+ m_process->send(Messages::WebPage::GoToBackForwardItem(navigation->navigationID(), item.itemID(), FrameLoadType::IndexedBackForward, ShouldTreatAsContinuingLoad::No, std::nullopt), m_pageID); > m_process->responsivenessTimer().start(); > > return WTFMove(navigation); >@@ -1049,7 +1049,7 @@ RefPtr<API::Navigation> WebPageProxy::loadRequest(ResourceRequest&& request, Sho > return WTFMove(navigation); > } > >-void WebPageProxy::loadRequestWithNavigation(API::Navigation& navigation, ResourceRequest&& request, ShouldOpenExternalURLsPolicy shouldOpenExternalURLsPolicy, API::Object* userData, ShouldTreatAsContinuingLoad shouldTreatAsContinuingLoad) >+void WebPageProxy::loadRequestWithNavigation(API::Navigation& navigation, ResourceRequest&& request, ShouldOpenExternalURLsPolicy shouldOpenExternalURLsPolicy, API::Object* userData, ShouldTreatAsContinuingLoad shouldTreatAsContinuingLoad, std::optional<WebsitePoliciesData>&& websitePolicies) > { > ASSERT(!m_isClosed); > >@@ -1067,6 +1067,7 @@ void WebPageProxy::loadRequestWithNavigation(API::Navigation& navigation, Resour > loadParameters.shouldOpenExternalURLsPolicy = (uint64_t)shouldOpenExternalURLsPolicy; > loadParameters.userData = UserData(process().transformObjectsToHandles(userData).get()); > loadParameters.shouldTreatAsContinuingLoad = shouldTreatAsContinuingLoad == ShouldTreatAsContinuingLoad::Yes; >+ loadParameters.websitePolicies = WTFMove(websitePolicies); > loadParameters.lockHistory = navigation.lockHistory(); > loadParameters.lockBackForwardList = navigation.lockBackForwardList(); > loadParameters.clientRedirectSourceForHistory = navigation.clientRedirectSourceForHistory(); >@@ -1133,7 +1134,7 @@ RefPtr<API::Navigation> WebPageProxy::loadData(const IPC::DataReference& data, c > return WTFMove(navigation); > } > >-void WebPageProxy::loadDataWithNavigation(API::Navigation& navigation, const IPC::DataReference& data, const String& MIMEType, const String& encoding, const String& baseURL, API::Object* userData) >+void WebPageProxy::loadDataWithNavigation(API::Navigation& navigation, const IPC::DataReference& data, const String& MIMEType, const String& encoding, const String& baseURL, API::Object* userData, std::optional<WebsitePoliciesData>&& websitePolicies) > { > ASSERT(!m_isClosed); > >@@ -1151,6 +1152,7 @@ void WebPageProxy::loadDataWithNavigation(API::Navigation& navigation, const IPC > loadParameters.encodingName = encoding; > loadParameters.baseURLString = baseURL; > loadParameters.userData = UserData(process().transformObjectsToHandles(userData).get()); >+ loadParameters.websitePolicies = WTFMove(websitePolicies); > addPlatformLoadParameters(loadParameters); > > m_process->assumeReadAccessToBaseURL(*this, baseURL); >@@ -1329,7 +1331,7 @@ RefPtr<API::Navigation> WebPageProxy::goToBackForwardItem(WebBackForwardListItem > if (!m_backForwardList->currentItem()->itemIsInSameDocument(item)) > navigation = m_navigationState->createBackForwardNavigation(item, m_backForwardList->currentItem(), frameLoadType); > >- m_process->send(Messages::WebPage::GoToBackForwardItem(navigation ? navigation->navigationID() : 0, item.itemID(), frameLoadType, ShouldTreatAsContinuingLoad::No), m_pageID); >+ m_process->send(Messages::WebPage::GoToBackForwardItem(navigation ? navigation->navigationID() : 0, item.itemID(), frameLoadType, ShouldTreatAsContinuingLoad::No, std::nullopt), m_pageID); > m_process->responsivenessTimer().start(); > > return navigation; >@@ -2638,10 +2640,11 @@ void WebPageProxy::receivedNavigationPolicyDecision(PolicyAction policyAction, A > } else > RELEASE_LOG_IF_ALLOWED(ProcessSwapping, "%p - WebPageProxy::decidePolicyForNavigationAction, keep using process %i for navigation, reason: %{public}s", this, processIdentifier(), reason.utf8().data()); > >- receivedPolicyDecision(policyAction, navigation.ptr(), WTFMove(data), WTFMove(sender)); >+ bool shouldProcessSwap = processForNavigation.ptr() != &process(); >+ receivedPolicyDecision(policyAction, navigation.ptr(), shouldProcessSwap ? std::nullopt : WTFMove(data), WTFMove(sender)); > >- if (processForNavigation.ptr() != &process()) >- continueNavigationInNewProcess(navigation, destinationSuspendedPage ? process().processPool().takeSuspendedPage(*destinationSuspendedPage) : nullptr, WTFMove(processForNavigation), processSwapRequestedByClient); >+ if (shouldProcessSwap) >+ continueNavigationInNewProcess(navigation, destinationSuspendedPage ? process().processPool().takeSuspendedPage(*destinationSuspendedPage) : nullptr, WTFMove(processForNavigation), processSwapRequestedByClient, WTFMove(data)); > }); > } > >@@ -2677,7 +2680,7 @@ void WebPageProxy::receivedPolicyDecision(PolicyAction action, API::Navigation* > sender->send(action, navigation ? navigation->navigationID() : 0, downloadID, WTFMove(websitePolicies)); > } > >-void WebPageProxy::continueNavigationInNewProcess(API::Navigation& navigation, std::unique_ptr<SuspendedPageProxy>&& suspendedPageProxy, Ref<WebProcessProxy>&& process, ProcessSwapRequestedByClient processSwapRequestedByClient) >+void WebPageProxy::continueNavigationInNewProcess(API::Navigation& navigation, std::unique_ptr<SuspendedPageProxy>&& suspendedPageProxy, Ref<WebProcessProxy>&& process, ProcessSwapRequestedByClient processSwapRequestedByClient, std::optional<WebsitePoliciesData>&& websitePolicies) > { > LOG(Loading, "Continuing navigation %" PRIu64 " '%s' in a new web process", navigation.navigationID(), navigation.loggingString()); > >@@ -2709,7 +2712,7 @@ void WebPageProxy::continueNavigationInNewProcess(API::Navigation& navigation, s > return &item != targetItem; > }); > m_process->send(Messages::WebPage::UpdateBackForwardListForReattach(WTFMove(itemStates)), m_pageID); >- m_process->send(Messages::WebPage::GoToBackForwardItem(navigation.navigationID(), item->itemID(), *navigation.backForwardFrameLoadType(), ShouldTreatAsContinuingLoad::Yes), m_pageID); >+ m_process->send(Messages::WebPage::GoToBackForwardItem(navigation.navigationID(), item->itemID(), *navigation.backForwardFrameLoadType(), ShouldTreatAsContinuingLoad::Yes, WTFMove(websitePolicies)), m_pageID); > m_process->responsivenessTimer().start(); > > return; >@@ -2724,9 +2727,9 @@ void WebPageProxy::continueNavigationInNewProcess(API::Navigation& navigation, s > // FIXME: Work out timing of responding with the last policy delegate, etc > ASSERT(!navigation.currentRequest().isEmpty()); > if (auto& substituteData = navigation.substituteData()) >- loadDataWithNavigation(navigation, { substituteData->content.data(), substituteData->content.size() }, substituteData->MIMEType, substituteData->encoding, substituteData->baseURL, substituteData->userData.get()); >+ loadDataWithNavigation(navigation, { substituteData->content.data(), substituteData->content.size() }, substituteData->MIMEType, substituteData->encoding, substituteData->baseURL, substituteData->userData.get(), WTFMove(websitePolicies)); > else >- loadRequestWithNavigation(navigation, ResourceRequest { navigation.currentRequest() }, WebCore::ShouldOpenExternalURLsPolicy::ShouldAllowExternalSchemes, nullptr, ShouldTreatAsContinuingLoad::Yes); >+ loadRequestWithNavigation(navigation, ResourceRequest { navigation.currentRequest() }, WebCore::ShouldOpenExternalURLsPolicy::ShouldAllowExternalSchemes, nullptr, ShouldTreatAsContinuingLoad::Yes, WTFMove(websitePolicies)); > > ASSERT(!m_mainFrame); > m_mainFrameCreationHandler = [this, weakThis = makeWeakPtr(*this), navigationID = navigation.navigationID(), request = navigation.currentRequest(), mainFrameURL, isServerRedirect = navigation.currentRequestIsRedirect()]() mutable { >diff --git a/Source/WebKit/UIProcess/WebPageProxy.h b/Source/WebKit/UIProcess/WebPageProxy.h >index d96473e8932f7f43ec3eba8b626cdaa97fab1b18..ec4763c41b92f1b8c9f3bc8b2e82b5ccc2cca405 100644 >--- a/Source/WebKit/UIProcess/WebPageProxy.h >+++ b/Source/WebKit/UIProcess/WebPageProxy.h >@@ -1576,8 +1576,8 @@ private: > RefPtr<API::Navigation> reattachToWebProcessForReload(); > RefPtr<API::Navigation> reattachToWebProcessWithItem(WebBackForwardListItem&); > >- void loadDataWithNavigation(API::Navigation&, const IPC::DataReference&, const String& MIMEType, const String& encoding, const String& baseURL, API::Object* userData = nullptr); >- void loadRequestWithNavigation(API::Navigation&, WebCore::ResourceRequest&&, WebCore::ShouldOpenExternalURLsPolicy, API::Object* userData, WebCore::ShouldTreatAsContinuingLoad); >+ void loadDataWithNavigation(API::Navigation&, const IPC::DataReference&, const String& MIMEType, const String& encoding, const String& baseURL, API::Object* userData = nullptr, std::optional<WebsitePoliciesData>&& = std::nullopt); >+ void loadRequestWithNavigation(API::Navigation&, WebCore::ResourceRequest&&, WebCore::ShouldOpenExternalURLsPolicy, API::Object* userData, WebCore::ShouldTreatAsContinuingLoad, std::optional<WebsitePoliciesData>&& = std::nullopt); > > void requestNotificationPermission(uint64_t notificationID, const String& originString); > void showNotification(const String& title, const String& body, const String& iconURL, const String& tag, const String& lang, WebCore::NotificationDirection, const String& originString, uint64_t notificationID); >@@ -1893,7 +1893,7 @@ private: > > void reportPageLoadResult(const WebCore::ResourceError& = { }); > >- void continueNavigationInNewProcess(API::Navigation&, std::unique_ptr<SuspendedPageProxy>&&, Ref<WebProcessProxy>&&, ProcessSwapRequestedByClient); >+ void continueNavigationInNewProcess(API::Navigation&, std::unique_ptr<SuspendedPageProxy>&&, Ref<WebProcessProxy>&&, ProcessSwapRequestedByClient, std::optional<WebsitePoliciesData>&&); > > void setNeedsFontAttributes(bool); > void updateFontAttributesAfterEditorStateChange(); >diff --git a/Source/WebKit/WebProcess/WebPage/WebPage.cpp b/Source/WebKit/WebProcess/WebPage/WebPage.cpp >index b28f040e1b25c3813ae5a0ad6aec5ade85eb37be..1762a7b8f8d7eadf153122cc8075d957f6012012 100644 >--- a/Source/WebKit/WebProcess/WebPage/WebPage.cpp >+++ b/Source/WebKit/WebProcess/WebPage/WebPage.cpp >@@ -1353,6 +1353,7 @@ void WebPage::loadRequest(LoadParameters&& loadParameters) > SendStopResponsivenessTimer stopper; > > m_pendingNavigationID = loadParameters.navigationID; >+ m_pendingWebsitePolicies = WTFMove(loadParameters.websitePolicies); > > m_sandboxExtensionTracker.beginLoad(m_mainFrame.get(), WTFMove(loadParameters.sandboxExtensionHandle)); > >@@ -1374,13 +1375,15 @@ void WebPage::loadRequest(LoadParameters&& loadParameters) > corePage()->userInputBridge().loadRequest(WTFMove(frameLoadRequest)); > > ASSERT(!m_pendingNavigationID); >+ ASSERT(!m_pendingWebsitePolicies); > } > >-void WebPage::loadDataImpl(uint64_t navigationID, Ref<SharedBuffer>&& sharedBuffer, const String& MIMEType, const String& encodingName, const URL& baseURL, const URL& unreachableURL, const UserData& userData) >+void WebPage::loadDataImpl(uint64_t navigationID, std::optional<WebsitePoliciesData>&& websitePolicies, Ref<SharedBuffer>&& sharedBuffer, const String& MIMEType, const String& encodingName, const URL& baseURL, const URL& unreachableURL, const UserData& userData) > { > SendStopResponsivenessTimer stopper; > > m_pendingNavigationID = navigationID; >+ m_pendingWebsitePolicies = WTFMove(websitePolicies); > > ResourceRequest request(baseURL); > ResourceResponse response(URL(), MIMEType, sharedBuffer->size(), encodingName); >@@ -1400,10 +1403,10 @@ void WebPage::loadData(LoadParameters&& loadParameters) > > auto sharedBuffer = SharedBuffer::create(reinterpret_cast<const char*>(loadParameters.data.data()), loadParameters.data.size()); > URL baseURL = loadParameters.baseURLString.isEmpty() ? WTF::blankURL() : URL(URL(), loadParameters.baseURLString); >- loadDataImpl(loadParameters.navigationID, WTFMove(sharedBuffer), loadParameters.MIMEType, loadParameters.encodingName, baseURL, URL(), loadParameters.userData); >+ loadDataImpl(loadParameters.navigationID, WTFMove(loadParameters.websitePolicies), WTFMove(sharedBuffer), loadParameters.MIMEType, loadParameters.encodingName, baseURL, URL(), loadParameters.userData); > } > >-void WebPage::loadAlternateHTML(const LoadParameters& loadParameters) >+void WebPage::loadAlternateHTML(LoadParameters&& loadParameters) > { > platformDidReceiveLoadParameters(loadParameters); > >@@ -1412,7 +1415,7 @@ void WebPage::loadAlternateHTML(const LoadParameters& loadParameters) > URL provisionalLoadErrorURL = loadParameters.provisionalLoadErrorURLString.isEmpty() ? URL() : URL(URL(), loadParameters.provisionalLoadErrorURLString); > auto sharedBuffer = SharedBuffer::create(reinterpret_cast<const char*>(loadParameters.data.data()), loadParameters.data.size()); > m_mainFrame->coreFrame()->loader().setProvisionalLoadErrorBeingHandledURL(provisionalLoadErrorURL); >- loadDataImpl(loadParameters.navigationID, WTFMove(sharedBuffer), loadParameters.MIMEType, loadParameters.encodingName, baseURL, unreachableURL, loadParameters.userData); >+ loadDataImpl(loadParameters.navigationID, WTFMove(loadParameters.websitePolicies), WTFMove(sharedBuffer), loadParameters.MIMEType, loadParameters.encodingName, baseURL, unreachableURL, loadParameters.userData); > m_mainFrame->coreFrame()->loader().setProvisionalLoadErrorBeingHandledURL({ }); > } > >@@ -1475,7 +1478,7 @@ void WebPage::reload(uint64_t navigationID, uint32_t reloadOptions, SandboxExten > } > } > >-void WebPage::goToBackForwardItem(uint64_t navigationID, const BackForwardItemIdentifier& backForwardItemID, FrameLoadType backForwardType, ShouldTreatAsContinuingLoad shouldTreatAsContinuingLoad) >+void WebPage::goToBackForwardItem(uint64_t navigationID, const BackForwardItemIdentifier& backForwardItemID, FrameLoadType backForwardType, ShouldTreatAsContinuingLoad shouldTreatAsContinuingLoad, std::optional<WebsitePoliciesData>&& websitePolicies) > { > SendStopResponsivenessTimer stopper; > >@@ -1490,6 +1493,7 @@ void WebPage::goToBackForwardItem(uint64_t navigationID, const BackForwardItemId > > ASSERT(!m_pendingNavigationID); > m_pendingNavigationID = navigationID; >+ m_pendingWebsitePolicies = WTFMove(websitePolicies); > > m_page->goToItem(*item, backForwardType, shouldTreatAsContinuingLoad); > } >@@ -5979,6 +5983,9 @@ Ref<DocumentLoader> WebPage::createDocumentLoader(Frame& frame, const ResourceRe > documentLoader->setNavigationID(m_pendingNavigationID); > m_pendingNavigationID = 0; > } >+ >+ if (auto pendingWebsitePolicies = WTFMove(m_pendingWebsitePolicies)) >+ WebsitePoliciesData::applyToDocumentLoader(WTFMove(*pendingWebsitePolicies), documentLoader); > } > > return WTFMove(documentLoader); >diff --git a/Source/WebKit/WebProcess/WebPage/WebPage.h b/Source/WebKit/WebProcess/WebPage/WebPage.h >index 099b2c5fa09d642ed4ae4c5201fc47a1a1da912f..e873c87646b37769be030a99cdcd0868506491d3 100644 >--- a/Source/WebKit/WebProcess/WebPage/WebPage.h >+++ b/Source/WebKit/WebProcess/WebPage/WebPage.h >@@ -50,6 +50,7 @@ > #include "WebBackForwardListProxy.h" > #include "WebURLSchemeHandler.h" > #include "WebUserContentController.h" >+#include "WebsitePoliciesData.h" > #include <JavaScriptCore/InspectorFrontendChannel.h> > #include <WebCore/ActivityState.h> > #include <WebCore/DictionaryPopupInfo.h> >@@ -1194,17 +1195,17 @@ private: > > String sourceForFrame(WebFrame*); > >- void loadDataImpl(uint64_t navigationID, Ref<WebCore::SharedBuffer>&&, const String& MIMEType, const String& encodingName, const URL& baseURL, const URL& failingURL, const UserData&); >+ void loadDataImpl(uint64_t navigationID, std::optional<WebsitePoliciesData>&&, Ref<WebCore::SharedBuffer>&&, const String& MIMEType, const String& encodingName, const URL& baseURL, const URL& failingURL, const UserData&); > > // Actions > void tryClose(); > void platformDidReceiveLoadParameters(const LoadParameters&); > void loadRequest(LoadParameters&&); > void loadData(LoadParameters&&); >- void loadAlternateHTML(const LoadParameters&); >+ void loadAlternateHTML(LoadParameters&&); > void navigateToPDFLinkWithSimulatedClick(const String& url, WebCore::IntPoint documentPoint, WebCore::IntPoint screenPoint); > void reload(uint64_t navigationID, uint32_t reloadOptions, SandboxExtension::Handle&&); >- void goToBackForwardItem(uint64_t navigationID, const WebCore::BackForwardItemIdentifier&, WebCore::FrameLoadType, WebCore::ShouldTreatAsContinuingLoad); >+ void goToBackForwardItem(uint64_t navigationID, const WebCore::BackForwardItemIdentifier&, WebCore::FrameLoadType, WebCore::ShouldTreatAsContinuingLoad, std::optional<WebsitePoliciesData>&&); > void tryRestoreScrollPosition(); > void setInitialFocus(bool forward, bool isKeyboardEventValid, const WebKeyboardEvent&, CallbackID); > void updateIsInWindow(bool isInitialState = false); >@@ -1748,6 +1749,7 @@ private: > PAL::HysteresisActivity m_userActivityHysteresis; > > uint64_t m_pendingNavigationID { 0 }; >+ std::optional<WebsitePoliciesData> m_pendingWebsitePolicies; > > bool m_mainFrameProgressCompleted { false }; > bool m_shouldDispatchFakeMouseMoveEvents { true }; >diff --git a/Source/WebKit/WebProcess/WebPage/WebPage.messages.in b/Source/WebKit/WebProcess/WebPage/WebPage.messages.in >index 6f917bc8b2ce67686358eb9f2d5ca705ba62b166..b5b8e7da47dc246b0df5ad11bfc24801fdcf067f 100644 >--- a/Source/WebKit/WebProcess/WebPage/WebPage.messages.in >+++ b/Source/WebKit/WebProcess/WebPage/WebPage.messages.in >@@ -145,7 +145,7 @@ messages -> WebPage LegacyReceiver { > ScrollBy(uint32_t scrollDirection, uint32_t scrollGranularity) > CenterSelectionInVisibleArea() > >- GoToBackForwardItem(uint64_t navigationID, struct WebCore::BackForwardItemIdentifier backForwardItemID, enum:uint8_t WebCore::FrameLoadType backForwardType, enum:bool WebCore::ShouldTreatAsContinuingLoad shouldTreatAsContinuingLoad) >+ GoToBackForwardItem(uint64_t navigationID, struct WebCore::BackForwardItemIdentifier backForwardItemID, enum:uint8_t WebCore::FrameLoadType backForwardType, enum:bool WebCore::ShouldTreatAsContinuingLoad shouldTreatAsContinuingLoad, std::optional<WebKit::WebsitePoliciesData> websitePolicies) > TryRestoreScrollPosition() > > LoadURLInFrame(URL url, uint64_t frameID) >diff --git a/Tools/ChangeLog b/Tools/ChangeLog >index 9078ea15e57188695f85eb446f48c79c1adfda09..4c3a40742ab10010bc5b5fa3c10b894f30a20c7d 100644 >--- a/Tools/ChangeLog >+++ b/Tools/ChangeLog >@@ -1,3 +1,15 @@ >+2018-12-13 Chris Dumez <cdumez@apple.com> >+ >+ [PSON] WebsitePolicies are lost on process-swap >+ https://bugs.webkit.org/show_bug.cgi?id=192694 >+ <rdar://problem/46715748> >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Extend existing API test to reproduce the issue. >+ >+ * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm: >+ > 2018-12-13 Don Olmstead <don.olmstead@sony.com> > > Unreviewed. Changed my status to a reviewer. >diff --git a/Tools/TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm b/Tools/TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm >index 88c4af4c04345c44ca0d39947b8d819c518ff1b5..2e89e3608bd59273dd138f34d9529e2e2ab0be49 100644 >--- a/Tools/TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm >+++ b/Tools/TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm >@@ -972,6 +972,15 @@ TEST(WebKit, WebsitePoliciesCustomUserAgent) > while (loadCount != 9U) > TestWebKitAPI::Util::spinRunLoop(); > loadCount = 0; >+ >+ request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"test://www.google.com/main.html"]]; >+ [webView loadRequest:request]; >+ >+ TestWebKitAPI::Util::run(&finishedNavigation); >+ finishedNavigation = false; >+ >+ EXPECT_EQ(1U, loadCount); >+ loadCount = 0; > } > > @interface PopUpPoliciesDelegate : NSObject <WKNavigationDelegate, WKUIDelegatePrivate>
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
Flags:
beidson
:
review+
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 192694
: 357302