diff --git a/Source/WebKit/UIProcess/ProvisionalFrameProxy.cpp b/Source/WebKit/UIProcess/ProvisionalFrameProxy.cpp index 4c4d178e6251..f33686ffe52d 100644 --- a/Source/WebKit/UIProcess/ProvisionalFrameProxy.cpp +++ b/Source/WebKit/UIProcess/ProvisionalFrameProxy.cpp @@ -59,10 +59,10 @@ ProvisionalFrameProxy::ProvisionalFrameProxy(WebFrameProxy& frame, RefmarkProcessAsRecentlyUsed(); m_process->addProvisionalFrameProxy(*this); - m_process->addMessageReceiver(Messages::WebFrameProxy::messageReceiverName(), m_frame.frameID().object(), *this); + m_process->addMessageReceiver(Messages::WebFrameProxy::messageReceiverName(), frame.frameID().object(), *this); - ASSERT(m_frame.page()); - auto& page = *m_frame.page(); + ASSERT(frame.page()); + auto& page = *frame.page(); auto* drawingArea = page.drawingArea(); ASSERT(drawingArea); @@ -104,14 +104,14 @@ ProvisionalFrameProxy::ProvisionalFrameProxy(WebFrameProxy& frame, RefremoveMessageReceiver(Messages::WebFrameProxy::messageReceiverName(), m_frame.frameID().object()); + m_process->removeMessageReceiver(Messages::WebFrameProxy::messageReceiverName(), m_frame->frameID().object()); m_process->removeVisitedLinkStoreUser(m_visitedLinkStore.get(), m_webPageID); m_process->removeProvisionalFrameProxy(*this); } void ProvisionalFrameProxy::didReceiveMessage(IPC::Connection& connection, IPC::Decoder& decoder) { - if (auto* page = m_frame.page()) + if (auto* page = m_frame->page()) page->didReceiveMessage(connection, decoder); } @@ -123,7 +123,7 @@ IPC::Connection* ProvisionalFrameProxy::messageSenderConnection() const uint64_t ProvisionalFrameProxy::messageSenderDestinationID() const { // FIXME: This identifier was generated in another process and can collide with identifiers in this frame's process. - return m_frame.frameID().object().toUInt64(); + return m_frame->frameID().object().toUInt64(); } } diff --git a/Source/WebKit/UIProcess/ProvisionalFrameProxy.h b/Source/WebKit/UIProcess/ProvisionalFrameProxy.h index d30e55c83262..fc2c3dd2abba 100644 --- a/Source/WebKit/UIProcess/ProvisionalFrameProxy.h +++ b/Source/WebKit/UIProcess/ProvisionalFrameProxy.h @@ -68,7 +68,7 @@ class ProvisionalFrameProxy : public IPC::MessageReceiver, public IPC::MessageSe IPC::Connection* messageSenderConnection() const final; uint64_t messageSenderDestinationID() const final; - WebFrameProxy& m_frame; + CheckedRef m_frame; Ref m_process; Ref m_visitedLinkStore; WebCore::PageIdentifier m_pageID; diff --git a/Source/WebKit/UIProcess/ProvisionalPageProxy.cpp b/Source/WebKit/UIProcess/ProvisionalPageProxy.cpp index 4509d2655a27..0bc784a8eb60 100644 --- a/Source/WebKit/UIProcess/ProvisionalPageProxy.cpp +++ b/Source/WebKit/UIProcess/ProvisionalPageProxy.cpp @@ -59,8 +59,8 @@ namespace WebKit { using namespace WebCore; -#define PROVISIONALPAGEPROXY_RELEASE_LOG(channel, fmt, ...) RELEASE_LOG(channel, "%p - [pageProxyID=%" PRIu64 ", webPageID=%" PRIu64 ", PID=%i, navigationID=%" PRIu64 "] ProvisionalPageProxy::" fmt, this, m_page.identifier().toUInt64(), m_webPageID.toUInt64(), m_process->processIdentifier(), m_navigationID, ##__VA_ARGS__) -#define PROVISIONALPAGEPROXY_RELEASE_LOG_ERROR(channel, fmt, ...) RELEASE_LOG_ERROR(channel, "%p - [pageProxyID=%" PRIu64 ", webPageID=%" PRIu64 ", PID=%i, navigationID=%" PRIu64 "] ProvisionalPageProxy::" fmt, this, m_page.identifier().toUInt64(), m_webPageID.toUInt64(), m_process->processIdentifier(), m_navigationID, ##__VA_ARGS__) +#define PROVISIONALPAGEPROXY_RELEASE_LOG(channel, fmt, ...) RELEASE_LOG(channel, "%p - [pageProxyID=%" PRIu64 ", webPageID=%" PRIu64 ", PID=%i, navigationID=%" PRIu64 "] ProvisionalPageProxy::" fmt, this, m_page->identifier().toUInt64(), m_webPageID.toUInt64(), m_process->processIdentifier(), m_navigationID, ##__VA_ARGS__) +#define PROVISIONALPAGEPROXY_RELEASE_LOG_ERROR(channel, fmt, ...) RELEASE_LOG_ERROR(channel, "%p - [pageProxyID=%" PRIu64 ", webPageID=%" PRIu64 ", PID=%i, navigationID=%" PRIu64 "] ProvisionalPageProxy::" fmt, this, m_page->identifier().toUInt64(), m_webPageID.toUInt64(), m_process->processIdentifier(), m_navigationID, ##__VA_ARGS__) ProvisionalPageProxy::ProvisionalPageProxy(WebPageProxy& page, Ref&& process, std::unique_ptr suspendedPage, uint64_t navigationID, bool isServerRedirect, const WebCore::ResourceRequest& request, ProcessSwapRequestedByClient processSwapRequestedByClient, bool isProcessSwappingOnNavigationResponse, API::WebsitePolicies* websitePolicies) : m_page(page) @@ -89,8 +89,8 @@ ProvisionalPageProxy::ProvisionalPageProxy(WebPageProxy& page, RefwebsiteDataStore(); ASSERT(m_websiteDataStore); - if (m_websiteDataStore && m_websiteDataStore != &m_page.websiteDataStore()) - m_process->processPool().pageBeginUsingWebsiteDataStore(m_page.identifier(), *m_websiteDataStore); + if (m_websiteDataStore && m_websiteDataStore != &m_page->websiteDataStore()) + m_process->processPool().pageBeginUsingWebsiteDataStore(m_page->identifier(), *m_websiteDataStore); // If we are reattaching to a SuspendedPage, then the WebProcess' WebPage already exists and // WebPageProxy::didCreateMainFrame() will not be called to initialize m_mainFrame. In such @@ -104,7 +104,7 @@ ProvisionalPageProxy::ProvisionalPageProxy(WebPageProxy& page, RefinspectorController().didCreateProvisionalPage(*this); } ProvisionalPageProxy::~ProvisionalPageProxy() @@ -115,16 +115,16 @@ ProvisionalPageProxy::~ProvisionalPageProxy() #endif if (!m_wasCommitted) { - m_page.inspectorController().willDestroyProvisionalPage(*this); + m_page->inspectorController().willDestroyProvisionalPage(*this); auto dataStore = m_process->websiteDataStore(); - if (dataStore && dataStore!= &m_page.websiteDataStore()) - m_process->processPool().pageEndUsingWebsiteDataStore(m_page.identifier(), *dataStore); + if (dataStore && dataStore!= &m_page->websiteDataStore()) + m_process->processPool().pageEndUsingWebsiteDataStore(m_page->identifier(), *dataStore); m_process->removeMessageReceiver(Messages::WebPageProxy::messageReceiverName(), m_webPageID); if (m_process->hasConnection()) send(Messages::WebPage::Close()); - m_process->removeVisitedLinkStoreUser(m_page.visitedLinkStore(), m_page.identifier()); + m_process->removeVisitedLinkStoreUser(m_page->visitedLinkStore(), m_page->identifier()); } m_process->removeProvisionalPageProxy(*this); @@ -133,7 +133,7 @@ ProvisionalPageProxy::~ProvisionalPageProxy() void ProvisionalPageProxy::processDidTerminate() { PROVISIONALPAGEPROXY_RELEASE_LOG_ERROR(ProcessSwapping, "processDidTerminate:"); - m_page.provisionalProcessDidTerminate(); + m_page->provisionalProcessDidTerminate(); } std::unique_ptr ProvisionalPageProxy::takeDrawingArea() @@ -166,14 +166,14 @@ void ProvisionalPageProxy::cancel() void ProvisionalPageProxy::initializeWebPage(RefPtr&& websitePolicies) { - m_drawingArea = m_page.pageClient().createDrawingAreaProxy(m_process); + m_drawingArea = m_page->pageClient().createDrawingAreaProxy(m_process); - auto parameters = m_page.creationParameters(m_process, *m_drawingArea, WTFMove(websitePolicies)); + auto parameters = m_page->creationParameters(m_process, *m_drawingArea, WTFMove(websitePolicies)); parameters.isProcessSwap = true; m_process->send(Messages::WebProcess::CreateWebPage(m_webPageID, parameters), 0); - m_process->addVisitedLinkStoreUser(m_page.visitedLinkStore(), m_page.identifier()); + m_process->addVisitedLinkStoreUser(m_page->visitedLinkStore(), m_page->identifier()); - if (m_page.isLayerTreeFrozenDueToSwipeAnimation()) + if (m_page->isLayerTreeFrozenDueToSwipeAnimation()) send(Messages::WebPage::FreezeLayerTreeDueToSwipeAnimation()); } @@ -182,7 +182,7 @@ void ProvisionalPageProxy::loadData(API::Navigation& navigation, const IPC::Data PROVISIONALPAGEPROXY_RELEASE_LOG(ProcessSwapping, "loadData:"); ASSERT(shouldTreatAsContinuingLoad != WebCore::ShouldTreatAsContinuingLoad::No); - m_page.loadDataWithNavigationShared(m_process.copyRef(), m_webPageID, navigation, data, mimeType, encoding, baseURL, userData, shouldTreatAsContinuingLoad, isNavigatingToAppBoundDomain, WTFMove(websitePolicies), navigation.lastNavigationAction().shouldOpenExternalURLsPolicy, sessionHistoryVisibility); + m_page->loadDataWithNavigationShared(m_process.copyRef(), m_webPageID, navigation, data, mimeType, encoding, baseURL, userData, shouldTreatAsContinuingLoad, isNavigatingToAppBoundDomain, WTFMove(websitePolicies), navigation.lastNavigationAction().shouldOpenExternalURLsPolicy, sessionHistoryVisibility); } void ProvisionalPageProxy::loadRequest(API::Navigation& navigation, WebCore::ResourceRequest&& request, API::Object* userData, WebCore::ShouldTreatAsContinuingLoad shouldTreatAsContinuingLoad, std::optional isNavigatingToAppBoundDomain, std::optional&& websitePolicies, std::optional existingNetworkResourceLoadIdentifierToResume) @@ -196,14 +196,14 @@ void ProvisionalPageProxy::loadRequest(API::Navigation& navigation, WebCore::Res if (navigation.fromItem() && navigation.lockBackForwardList() == WebCore::LockBackForwardList::Yes) navigation.fromItem()->setLastProcessIdentifier(m_process->coreProcessIdentifier()); - m_page.loadRequestWithNavigationShared(m_process.copyRef(), m_webPageID, navigation, WTFMove(request), navigation.lastNavigationAction().shouldOpenExternalURLsPolicy, userData, shouldTreatAsContinuingLoad, isNavigatingToAppBoundDomain, WTFMove(websitePolicies), existingNetworkResourceLoadIdentifierToResume); + m_page->loadRequestWithNavigationShared(m_process.copyRef(), m_webPageID, navigation, WTFMove(request), navigation.lastNavigationAction().shouldOpenExternalURLsPolicy, userData, shouldTreatAsContinuingLoad, isNavigatingToAppBoundDomain, WTFMove(websitePolicies), existingNetworkResourceLoadIdentifierToResume); } void ProvisionalPageProxy::goToBackForwardItem(API::Navigation& navigation, WebBackForwardListItem& item, RefPtr&& websitePolicies, WebCore::ShouldTreatAsContinuingLoad shouldTreatAsContinuingLoad, std::optional existingNetworkResourceLoadIdentifierToResume) { PROVISIONALPAGEPROXY_RELEASE_LOG(ProcessSwapping, "goToBackForwardItem: existingNetworkResourceLoadIdentifierToResume=%" PRIu64, valueOrDefault(existingNetworkResourceLoadIdentifierToResume).toUInt64()); - auto itemStates = m_page.backForwardList().filteredItemStates([this, targetItem = &item](auto& item) { + auto itemStates = m_page->backForwardList().filteredItemStates([this, targetItem = &item](auto& item) { if (auto* backForwardCacheEntry = item.backForwardCacheEntry()) { if (backForwardCacheEntry->processIdentifier() == m_process->coreProcessIdentifier()) return false; @@ -221,7 +221,7 @@ void ProvisionalPageProxy::goToBackForwardItem(API::Navigation& navigation, WebB #endif send(Messages::WebPage::UpdateBackForwardListForReattach(WTFMove(itemStates))); - send(Messages::WebPage::GoToBackForwardItem(navigation.navigationID(), item.itemID(), *navigation.backForwardFrameLoadType(), shouldTreatAsContinuingLoad, WTFMove(websitePoliciesData), m_page.lastNavigationWasAppInitiated(), existingNetworkResourceLoadIdentifierToResume, topPrivatelyControlledDomain)); + send(Messages::WebPage::GoToBackForwardItem(navigation.navigationID(), item.itemID(), *navigation.backForwardFrameLoadType(), shouldTreatAsContinuingLoad, WTFMove(websitePoliciesData), m_page->lastNavigationWasAppInitiated(), existingNetworkResourceLoadIdentifierToResume, topPrivatelyControlledDomain)); m_process->startResponsivenessTimer(); } @@ -242,11 +242,11 @@ void ProvisionalPageProxy::didCreateMainFrame(FrameIdentifier frameID) m_mainFrame = WebFrameProxy::create(m_page, m_process, frameID); // This navigation was destroyed so no need to notify of redirect. - if (!m_page.navigationState().hasNavigation(m_navigationID)) + if (!m_page->navigationState().hasNavigation(m_navigationID)) return; // Restore the main frame's committed URL as some clients may rely on it until the next load is committed. - RefPtr previousMainFrame = m_page.mainFrame(); + RefPtr previousMainFrame = m_page->mainFrame(); if (previousMainFrame) { m_mainFrame->frameLoadState().setURL(previousMainFrame->url()); previousMainFrame->transferNavigationCallbackToFrame(*m_mainFrame); @@ -257,7 +257,7 @@ void ProvisionalPageProxy::didCreateMainFrame(FrameIdentifier frameID) // In this case we have the UIProcess synthesize the redirect notification at the appropriate time. if (m_isServerRedirect) { m_mainFrame->frameLoadState().didStartProvisionalLoad(m_request.url()); - m_page.didReceiveServerRedirectForProvisionalLoadForFrameShared(m_process.copyRef(), m_mainFrame->frameID(), m_navigationID, WTFMove(m_request), { }); + m_page->didReceiveServerRedirectForProvisionalLoadForFrameShared(m_process.copyRef(), m_mainFrame->frameID(), m_navigationID, WTFMove(m_request), { }); } else if (previousMainFrame && !previousMainFrame->provisionalURL().isEmpty()) { // In case of a process swap after response policy, the didStartProvisionalLoad already happened but the new main frame doesn't know about it // so we need to tell it so it can update its provisional URL. @@ -270,7 +270,7 @@ void ProvisionalPageProxy::didPerformClientRedirect(const String& sourceURLStrin if (!validateInput(frameID)) return; - m_page.didPerformClientRedirectShared(m_process.copyRef(), sourceURLString, destinationURLString, frameID); + m_page->didPerformClientRedirectShared(m_process.copyRef(), sourceURLString, destinationURLString, frameID); } void ProvisionalPageProxy::didStartProvisionalLoadForFrame(FrameIdentifier frameID, FrameInfoData&& frameInfo, ResourceRequest&& request, uint64_t navigationID, URL&& url, URL&& unreachableURL, const UserData& userData) @@ -287,10 +287,10 @@ void ProvisionalPageProxy::didStartProvisionalLoadForFrame(FrameIdentifier frame return; // Clients expect the Page's main frame's expectedURL to be the provisional one when a provisional load is started. - if (auto* pageMainFrame = m_page.mainFrame()) + if (auto* pageMainFrame = m_page->mainFrame()) pageMainFrame->didStartProvisionalLoad(url); - m_page.didStartProvisionalLoadForFrameShared(m_process.copyRef(), frameID, WTFMove(frameInfo), WTFMove(request), navigationID, WTFMove(url), WTFMove(unreachableURL), userData); + m_page->didStartProvisionalLoadForFrameShared(m_process.copyRef(), frameID, WTFMove(frameInfo), WTFMove(request), navigationID, WTFMove(url), WTFMove(unreachableURL), userData); } void ProvisionalPageProxy::didFailProvisionalLoadForFrame(FrameIdentifier frameID, FrameInfoData&& frameInfo, ResourceRequest&& request, uint64_t navigationID, const String& provisionalURL, const WebCore::ResourceError& error, WebCore::WillContinueLoading willContinueLoading, const UserData& userData, WebCore::WillInternallyHandleFailure willInternallyHandleFailure) @@ -303,12 +303,12 @@ void ProvisionalPageProxy::didFailProvisionalLoadForFrame(FrameIdentifier frameI m_provisionalLoadURL = { }; // Make sure the Page's main frame's expectedURL gets cleared since we updated it in didStartProvisionalLoad. - if (auto* pageMainFrame = m_page.mainFrame()) + if (auto* pageMainFrame = m_page->mainFrame()) pageMainFrame->didFailProvisionalLoad(); RefPtr frame = WebFrameProxy::webFrame(frameID); MESSAGE_CHECK(m_process, frame); - m_page.didFailProvisionalLoadForFrameShared(m_process.copyRef(), *frame, WTFMove(frameInfo), WTFMove(request), navigationID, provisionalURL, error, willContinueLoading, userData, willInternallyHandleFailure); // May delete |this|. + m_page->didFailProvisionalLoadForFrameShared(m_process.copyRef(), *frame, WTFMove(frameInfo), WTFMove(request), navigationID, provisionalURL, error, willContinueLoading, userData, willInternallyHandleFailure); // May delete |this|. } void ProvisionalPageProxy::didCommitLoadForFrame(FrameIdentifier frameID, FrameInfoData&& frameInfo, ResourceRequest&& request, uint64_t navigationID, const String& mimeType, bool frameHasCustomContentProvider, WebCore::FrameLoadType frameLoadType, const WebCore::CertificateInfo& certificateInfo, bool usedLegacyTLS, bool privateRelayed, bool containsPluginDocument, WebCore::HasInsecureContent hasInsecureContent, WebCore::MouseEventPolicy mouseEventPolicy, const UserData& userData) @@ -321,7 +321,7 @@ void ProvisionalPageProxy::didCommitLoadForFrame(FrameIdentifier frameID, FrameI m_process->removeMessageReceiver(Messages::WebPageProxy::messageReceiverName(), m_webPageID); m_wasCommitted = true; - m_page.commitProvisionalPage(frameID, WTFMove(frameInfo), WTFMove(request), navigationID, mimeType, frameHasCustomContentProvider, frameLoadType, certificateInfo, usedLegacyTLS, privateRelayed, containsPluginDocument, hasInsecureContent, mouseEventPolicy, userData); // Will delete |this|. + m_page->commitProvisionalPage(frameID, WTFMove(frameInfo), WTFMove(request), navigationID, mimeType, frameHasCustomContentProvider, frameLoadType, certificateInfo, usedLegacyTLS, privateRelayed, containsPluginDocument, hasInsecureContent, mouseEventPolicy, userData); // Will delete |this|. } void ProvisionalPageProxy::didNavigateWithNavigationData(const WebNavigationDataStore& store, FrameIdentifier frameID) @@ -329,7 +329,7 @@ void ProvisionalPageProxy::didNavigateWithNavigationData(const WebNavigationData if (!validateInput(frameID)) return; - m_page.didNavigateWithNavigationDataShared(m_process.copyRef(), store, frameID); + m_page->didNavigateWithNavigationDataShared(m_process.copyRef(), store, frameID); } void ProvisionalPageProxy::didChangeProvisionalURLForFrame(FrameIdentifier frameID, uint64_t navigationID, URL&& url) @@ -337,7 +337,7 @@ void ProvisionalPageProxy::didChangeProvisionalURLForFrame(FrameIdentifier frame if (!validateInput(frameID, navigationID)) return; - m_page.didChangeProvisionalURLForFrameShared(m_process.copyRef(), frameID, navigationID, WTFMove(url)); + m_page->didChangeProvisionalURLForFrameShared(m_process.copyRef(), frameID, navigationID, WTFMove(url)); } void ProvisionalPageProxy::decidePolicyForNavigationActionAsync(FrameIdentifier frameID, FrameInfoData&& frameInfo, WebCore::PolicyCheckIdentifier identifier, uint64_t navigationID, NavigationActionData&& navigationActionData, FrameInfoData&& originatingFrameInfo, std::optional originatingPageID, const WebCore::ResourceRequest& originalRequest, WebCore::ResourceRequest&& request, IPC::FormDataReference&& requestBody, WebCore::ResourceResponse&& redirectResponse, uint64_t listenerID) @@ -345,7 +345,7 @@ void ProvisionalPageProxy::decidePolicyForNavigationActionAsync(FrameIdentifier if (!validateInput(frameID, navigationID)) return; - m_page.decidePolicyForNavigationActionAsyncShared(m_process.copyRef(), m_webPageID, frameID, WTFMove(frameInfo), identifier, navigationID, WTFMove(navigationActionData), WTFMove(originatingFrameInfo), originatingPageID, originalRequest, WTFMove(request), WTFMove(requestBody), WTFMove(redirectResponse), listenerID); + m_page->decidePolicyForNavigationActionAsyncShared(m_process.copyRef(), m_webPageID, frameID, WTFMove(frameInfo), identifier, navigationID, WTFMove(navigationActionData), WTFMove(originatingFrameInfo), originatingPageID, originalRequest, WTFMove(request), WTFMove(requestBody), WTFMove(redirectResponse), listenerID); } void ProvisionalPageProxy::decidePolicyForResponse(FrameIdentifier frameID, FrameInfoData&& frameInfo, WebCore::PolicyCheckIdentifier identifier, uint64_t navigationID, const WebCore::ResourceResponse& response, const WebCore::ResourceRequest& request, bool canShowMIMEType, const String& downloadAttribute, uint64_t listenerID) @@ -353,7 +353,7 @@ void ProvisionalPageProxy::decidePolicyForResponse(FrameIdentifier frameID, Fram if (!validateInput(frameID, navigationID)) return; - m_page.decidePolicyForResponseShared(m_process.copyRef(), m_webPageID, frameID, WTFMove(frameInfo), identifier, navigationID, response, request, canShowMIMEType, downloadAttribute, listenerID); + m_page->decidePolicyForResponseShared(m_process.copyRef(), m_webPageID, frameID, WTFMove(frameInfo), identifier, navigationID, response, request, canShowMIMEType, downloadAttribute, listenerID); } void ProvisionalPageProxy::didPerformServerRedirect(const String& sourceURLString, const String& destinationURLString, FrameIdentifier frameID) @@ -361,7 +361,7 @@ void ProvisionalPageProxy::didPerformServerRedirect(const String& sourceURLStrin if (!validateInput(frameID)) return; - m_page.didPerformServerRedirectShared(m_process.copyRef(), sourceURLString, destinationURLString, frameID); + m_page->didPerformServerRedirectShared(m_process.copyRef(), sourceURLString, destinationURLString, frameID); } void ProvisionalPageProxy::didReceiveServerRedirectForProvisionalLoadForFrame(FrameIdentifier frameID, uint64_t navigationID, WebCore::ResourceRequest&& request, const UserData& userData) @@ -369,17 +369,17 @@ void ProvisionalPageProxy::didReceiveServerRedirectForProvisionalLoadForFrame(Fr if (!validateInput(frameID, navigationID)) return; - m_page.didReceiveServerRedirectForProvisionalLoadForFrameShared(m_process.copyRef(), frameID, navigationID, WTFMove(request), userData); + m_page->didReceiveServerRedirectForProvisionalLoadForFrameShared(m_process.copyRef(), frameID, navigationID, WTFMove(request), userData); } void ProvisionalPageProxy::startURLSchemeTask(URLSchemeTaskParameters&& parameters) { - m_page.startURLSchemeTaskShared(m_process.copyRef(), m_webPageID, WTFMove(parameters)); + m_page->startURLSchemeTaskShared(m_process.copyRef(), m_webPageID, WTFMove(parameters)); } void ProvisionalPageProxy::backForwardGoToItem(const WebCore::BackForwardItemIdentifier& identifier, CompletionHandler&& completionHandler) { - m_page.backForwardGoToItemShared(m_process.copyRef(), identifier, WTFMove(completionHandler)); + m_page->backForwardGoToItemShared(m_process.copyRef(), identifier, WTFMove(completionHandler)); } void ProvisionalPageProxy::decidePolicyForNavigationActionSync(FrameIdentifier frameID, bool isMainFrame, FrameInfoData&& frameInfoData, WebCore::PolicyCheckIdentifier identifier, @@ -398,39 +398,39 @@ void ProvisionalPageProxy::decidePolicyForNavigationActionSync(FrameIdentifier f } ASSERT(m_mainFrame); - m_page.decidePolicyForNavigationActionSyncShared(m_process.copyRef(), m_webPageID, frameID, isMainFrame, WTFMove(frameInfoData), identifier, navigationID, WTFMove(navigationActionData), WTFMove(originatingFrameInfo), originatingPageID, originalRequest, WTFMove(request), WTFMove(requestBody), WTFMove(redirectResponse), WTFMove(reply)); + m_page->decidePolicyForNavigationActionSyncShared(m_process.copyRef(), m_webPageID, frameID, isMainFrame, WTFMove(frameInfoData), identifier, navigationID, WTFMove(navigationActionData), WTFMove(originatingFrameInfo), originatingPageID, originalRequest, WTFMove(request), WTFMove(requestBody), WTFMove(redirectResponse), WTFMove(reply)); } void ProvisionalPageProxy::logDiagnosticMessageFromWebProcess(const String& message, const String& description, WebCore::ShouldSample shouldSample) { MESSAGE_CHECK(m_process, message.isAllASCII()); - m_page.logDiagnosticMessage(message, description, shouldSample); + m_page->logDiagnosticMessage(message, description, shouldSample); } void ProvisionalPageProxy::logDiagnosticMessageWithEnhancedPrivacyFromWebProcess(const String& message, const String& description, WebCore::ShouldSample shouldSample) { MESSAGE_CHECK(m_process, message.isAllASCII()); - m_page.logDiagnosticMessageWithEnhancedPrivacy(message, description, shouldSample); + m_page->logDiagnosticMessageWithEnhancedPrivacy(message, description, shouldSample); } void ProvisionalPageProxy::logDiagnosticMessageWithValueDictionaryFromWebProcess(const String& message, const String& description, const WebCore::DiagnosticLoggingClient::ValueDictionary& valueDictionary, WebCore::ShouldSample shouldSample) { MESSAGE_CHECK(m_process, message.isAllASCII()); - m_page.logDiagnosticMessageWithValueDictionary(message, description, valueDictionary, shouldSample); + m_page->logDiagnosticMessageWithValueDictionary(message, description, valueDictionary, shouldSample); } void ProvisionalPageProxy::backForwardAddItem(BackForwardListItemState&& itemState) { - m_page.backForwardAddItemShared(m_process.copyRef(), WTFMove(itemState)); + m_page->backForwardAddItemShared(m_process.copyRef(), WTFMove(itemState)); } #if USE(QUICK_LOOK) void ProvisionalPageProxy::requestPasswordForQuickLookDocumentInMainFrame(const String& fileName, CompletionHandler&& completionHandler) { - m_page.requestPasswordForQuickLookDocumentInMainFrameShared(fileName, WTFMove(completionHandler)); + m_page->requestPasswordForQuickLookDocumentInMainFrameShared(fileName, WTFMove(completionHandler)); } #endif @@ -451,7 +451,7 @@ void ProvisionalPageProxy::bindAccessibilityTree(const String& plugID) #if ENABLE(CONTENT_FILTERING) void ProvisionalPageProxy::contentFilterDidBlockLoadForFrame(const WebCore::ContentFilterUnblockHandler& unblockHandler, FrameIdentifier frameID) { - m_page.contentFilterDidBlockLoadForFrameShared(m_process.copyRef(), unblockHandler, frameID); + m_page->contentFilterDidBlockLoadForFrameShared(m_process.copyRef(), unblockHandler, frameID); } #endif @@ -500,7 +500,7 @@ void ProvisionalPageProxy::didReceiveMessage(IPC::Connection& connection, IPC::D #endif ) { - m_page.didReceiveMessage(connection, decoder); + m_page->didReceiveMessage(connection, decoder); return; } @@ -630,7 +630,7 @@ bool ProvisionalPageProxy::didReceiveSyncMessage(IPC::Connection& connection, IP if (decoder.messageName() == Messages::WebPageProxy::DecidePolicyForNavigationActionSync::name()) return IPC::handleMessageSynchronous(connection, decoder, replyEncoder, this, &ProvisionalPageProxy::decidePolicyForNavigationActionSync); - return m_page.didReceiveSyncMessage(connection, decoder, replyEncoder); + return m_page->didReceiveSyncMessage(connection, decoder, replyEncoder); } IPC::Connection* ProvisionalPageProxy::messageSenderConnection() const diff --git a/Source/WebKit/UIProcess/ProvisionalPageProxy.h b/Source/WebKit/UIProcess/ProvisionalPageProxy.h index e1444aca0335..8d358325d0d1 100644 --- a/Source/WebKit/UIProcess/ProvisionalPageProxy.h +++ b/Source/WebKit/UIProcess/ProvisionalPageProxy.h @@ -81,7 +81,8 @@ class ProvisionalPageProxy : public IPC::MessageReceiver, public IPC::MessageSen ProvisionalPageProxy(WebPageProxy&, Ref&&, std::unique_ptr, uint64_t navigationID, bool isServerRedirect, const WebCore::ResourceRequest&, ProcessSwapRequestedByClient, bool isProcessSwappingOnNavigationResponse, API::WebsitePolicies*); ~ProvisionalPageProxy(); - WebPageProxy& page() const { return m_page; } + WebPageProxy& page() { return m_page.get(); } + const WebPageProxy& page() const { return m_page.get(); } WebCore::PageIdentifier webPageID() const { return m_webPageID; } WebFrameProxy* mainFrame() const { return m_mainFrame.get(); } WebProcessProxy& process() { return m_process.get(); } @@ -167,7 +168,7 @@ class ProvisionalPageProxy : public IPC::MessageReceiver, public IPC::MessageSen void initializeWebPage(RefPtr&&); bool validateInput(WebCore::FrameIdentifier, const std::optional& navigationID = std::nullopt); - WebPageProxy& m_page; + CheckedRef m_page; WebCore::PageIdentifier m_webPageID; Ref m_process; // Keep WebsiteDataStore alive for provisional page load. diff --git a/Source/WebKit/UIProcess/WebFrameProxy.h b/Source/WebKit/UIProcess/WebFrameProxy.h index 901078c26ffc..47f738991389 100644 --- a/Source/WebKit/UIProcess/WebFrameProxy.h +++ b/Source/WebKit/UIProcess/WebFrameProxy.h @@ -71,7 +71,7 @@ struct FrameTreeCreationParameters; struct FrameTreeNodeData; struct WebsitePoliciesData; -class WebFrameProxy : public API::ObjectImpl, public IPC::MessageReceiver, public IPC::MessageSender { +class WebFrameProxy : public API::ObjectImpl, public IPC::MessageReceiver, public IPC::MessageSender, public CanMakeCheckedPtr { public: static Ref create(WebPageProxy& page, WebProcessProxy& process, WebCore::FrameIdentifier frameID) { diff --git a/Source/WebKit/UIProcess/WebPageProxy.h b/Source/WebKit/UIProcess/WebPageProxy.h index 18f7d6983acf..c80de555981a 100644 --- a/Source/WebKit/UIProcess/WebPageProxy.h +++ b/Source/WebKit/UIProcess/WebPageProxy.h @@ -28,6 +28,7 @@ #include "APIObject.h" #include "MessageReceiver.h" #include "MessageSender.h" +#include #include #include @@ -489,7 +490,7 @@ using WebPageProxyIdentifier = ObjectIdentifier; using WebURLSchemeHandlerIdentifier = ObjectIdentifier; using WebUndoStepID = uint64_t; -class WebPageProxy final : public API::ObjectImpl, public IPC::MessageReceiver, public IPC::MessageSender { +class WebPageProxy final : public API::ObjectImpl, public IPC::MessageReceiver, public IPC::MessageSender, public CanMakeCheckedPtr { public: static Ref create(PageClient&, WebProcessProxy&, Ref&&); virtual ~WebPageProxy();