From 43764db17fb88fbd41265fa0b51905ffe9959829 Mon Sep 17 00:00:00 2001 From: Rob Buis Date: Tue, 23 Jul 2024 03:39:32 -0700 Subject: [PATCH] Use smart pointers to access NavigationScheduler https://bugs.webkit.org/show_bug.cgi?id=276880 Reviewed by Chris Dumez. Use smart pointers to access NavigationScheduler based on [alpha.webkit.UncountedCallArgsChecker] warnings. * Source/WebCore/dom/Document.cpp: (WebCore::Document::open): (WebCore::Document::implicitClose): (WebCore::Document::navigateFromServiceWorker): * Source/WebCore/html/parser/HTMLDocumentParser.cpp: (WebCore::HTMLDocumentParser::pumpTokenizerLoop): * Source/WebCore/loader/DocumentLoader.cpp: (WebCore::DocumentLoader::responseReceived): * Source/WebCore/loader/appcache/ApplicationCacheGroup.cpp: (WebCore::ApplicationCacheGroup::selectCache): * Source/WebCore/page/Frame.h: (WebCore::Frame::navigationScheduler const): Deleted. * Source/WebCore/page/History.cpp: (WebCore::History::go): * Source/WebCore/page/RemoteDOMWindow.cpp: (WebCore::RemoteDOMWindow::setLocation): Canonical link: https://commits.webkit.org/281239@main --- Source/WebCore/dom/Document.cpp | 6 +++--- Source/WebCore/html/parser/HTMLDocumentParser.cpp | 2 +- Source/WebCore/loader/DocumentLoader.cpp | 2 +- Source/WebCore/loader/appcache/ApplicationCacheGroup.cpp | 2 +- Source/WebCore/page/History.cpp | 4 ++-- Source/WebCore/page/RemoteDOMWindow.cpp | 2 +- 6 files changed, 9 insertions(+), 9 deletions(-) diff --git a/Source/WebCore/dom/Document.cpp b/Source/WebCore/dom/Document.cpp index 8d2a58413f79b..66489b5d630bd 100644 --- a/Source/WebCore/dom/Document.cpp +++ b/Source/WebCore/dom/Document.cpp @@ -3558,7 +3558,7 @@ ExceptionOr Document::open(Document* entryDocument) } } - bool isNavigating = frame->loader().policyChecker().delegateIsDecidingNavigationPolicy() || frame->loader().state() == FrameState::Provisional || frame->navigationScheduler().hasQueuedNavigation(); + bool isNavigating = frame->loader().policyChecker().delegateIsDecidingNavigationPolicy() || frame->loader().state() == FrameState::Provisional || frame->checkedNavigationScheduler()->hasQueuedNavigation(); if (frame->loader().policyChecker().delegateIsDecidingNavigationPolicy()) frame->loader().policyChecker().stopCheck(); // Null-checking m_frame again as `policyChecker().stopCheck()` may have cleared it. @@ -3754,7 +3754,7 @@ void Document::explicitClose() void Document::implicitClose() { RELEASE_ASSERT(!m_inStyleRecalc); - bool wasLocationChangePending = frame() && frame()->navigationScheduler().locationChangePending(); + bool wasLocationChangePending = frame() && frame()->checkedNavigationScheduler()->locationChangePending(); bool doload = !parsing() && m_parser && !m_processingLoadEvent && !wasLocationChangePending; if (!doload) @@ -10090,7 +10090,7 @@ void Document::navigateFromServiceWorker(const URL& url, CompletionHandlernavigationScheduler().scheduleLocationChange(*weakThis, weakThis->securityOrigin(), url, frame->loader().outgoingReferrer(), LockHistory::Yes, LockBackForwardList::No, NavigationHistoryBehavior::Auto, [callback = WTFMove(callback)](auto result) mutable { + frame->checkedNavigationScheduler()->scheduleLocationChange(*weakThis, weakThis->securityOrigin(), url, frame->loader().outgoingReferrer(), LockHistory::Yes, LockBackForwardList::No, NavigationHistoryBehavior::Auto, [callback = WTFMove(callback)](auto result) mutable { callback(result); }); }); diff --git a/Source/WebCore/html/parser/HTMLDocumentParser.cpp b/Source/WebCore/html/parser/HTMLDocumentParser.cpp index 09a3e892a65d3..92d1a69574586 100644 --- a/Source/WebCore/html/parser/HTMLDocumentParser.cpp +++ b/Source/WebCore/html/parser/HTMLDocumentParser.cpp @@ -272,7 +272,7 @@ bool HTMLDocumentParser::pumpTokenizerLoop(SynchronousMode mode, bool parsingFra // how the parser has always handled stopping when the page assigns window.location. What should // happen instead is that assigning window.location causes the parser to stop parsing cleanly. // The problem is we're not prepared to do that at every point where we run JavaScript. - if (UNLIKELY(!parsingFragment && document()->frame() && document()->frame()->navigationScheduler().locationChangePending())) + if (UNLIKELY(!parsingFragment && document()->frame() && document()->frame()->checkedNavigationScheduler()->locationChangePending())) return false; if (UNLIKELY(mode == SynchronousMode::AllowYield && m_parserScheduler->shouldYieldBeforeToken(session))) diff --git a/Source/WebCore/loader/DocumentLoader.cpp b/Source/WebCore/loader/DocumentLoader.cpp index 7666ec6996b1c..1b6c1778f59ab 100644 --- a/Source/WebCore/loader/DocumentLoader.cpp +++ b/Source/WebCore/loader/DocumentLoader.cpp @@ -935,7 +935,7 @@ void DocumentLoader::responseReceived(CachedResource& resource, const ResourceRe auto firstPartyDomain = RegistrableDomain(response.url()); if (auto loginDomains = NetworkStorageSession::subResourceDomainsInNeedOfStorageAccessForFirstParty(firstPartyDomain)) { if (!Quirks::hasStorageAccessForAllLoginDomains(*loginDomains, firstPartyDomain)) { - m_frame->navigationScheduler().scheduleRedirect(document, 0, microsoftTeamsRedirectURL(), IsMetaRefresh::No); + m_frame->checkedNavigationScheduler()->scheduleRedirect(document, 0, microsoftTeamsRedirectURL(), IsMetaRefresh::No); return; } } diff --git a/Source/WebCore/loader/appcache/ApplicationCacheGroup.cpp b/Source/WebCore/loader/appcache/ApplicationCacheGroup.cpp index 5a4ef259490f0..2b228b53e9095 100644 --- a/Source/WebCore/loader/appcache/ApplicationCacheGroup.cpp +++ b/Source/WebCore/loader/appcache/ApplicationCacheGroup.cpp @@ -183,7 +183,7 @@ void ApplicationCacheGroup::selectCache(LocalFrame& frame, const URL& passedMani // as part of the initial load. // The navigation will not result in the same resource being loaded, because "foreign" entries are never picked during navigation. RefPtr document = frame.document(); - frame.navigationScheduler().scheduleLocationChange(*document, document->protectedSecurityOrigin(), documentLoader.url(), frame.loader().referrer()); + frame.checkedNavigationScheduler()->scheduleLocationChange(*document, document->protectedSecurityOrigin(), documentLoader.url(), frame.loader().referrer()); } return; } diff --git a/Source/WebCore/page/History.cpp b/Source/WebCore/page/History.cpp index 6c33bd51a2eae..22ef70201db21 100644 --- a/Source/WebCore/page/History.cpp +++ b/Source/WebCore/page/History.cpp @@ -172,7 +172,7 @@ ExceptionOr History::go(int distance) if (!isDocumentFullyActive(frame.get())) return documentNotFullyActive(); - frame->navigationScheduler().scheduleHistoryNavigation(distance); + frame->checkedNavigationScheduler()->scheduleHistoryNavigation(distance); return { }; } @@ -189,7 +189,7 @@ ExceptionOr History::go(Document& document, int distance) if (!document.canNavigate(frame.get())) return { }; - frame->navigationScheduler().scheduleHistoryNavigation(distance); + frame->checkedNavigationScheduler()->scheduleHistoryNavigation(distance); return { }; } diff --git a/Source/WebCore/page/RemoteDOMWindow.cpp b/Source/WebCore/page/RemoteDOMWindow.cpp index 7811046cff072..afa1bc7676308 100644 --- a/Source/WebCore/page/RemoteDOMWindow.cpp +++ b/Source/WebCore/page/RemoteDOMWindow.cpp @@ -152,7 +152,7 @@ void RemoteDOMWindow::setLocation(LocalDOMWindow& activeWindow, const URL& compl // We want a new history item if we are processing a user gesture. LockHistory lockHistory = (locking != SetLocationLocking::LockHistoryBasedOnGestureState || !UserGestureIndicator::processingUserGesture()) ? LockHistory::Yes : LockHistory::No; LockBackForwardList lockBackForwardList = (locking != SetLocationLocking::LockHistoryBasedOnGestureState) ? LockBackForwardList::Yes : LockBackForwardList::No; - frame->navigationScheduler().scheduleLocationChange(*activeDocument, activeDocument->securityOrigin(), + frame->checkedNavigationScheduler()->scheduleLocationChange(*activeDocument, activeDocument->securityOrigin(), // FIXME: What if activeDocument()->frame() is 0? completedURL, activeDocument->frame()->loader().outgoingReferrer(), lockHistory, lockBackForwardList,