[webkit-changes] [WebKit/WebKit] 946a76: Use smart pointers with PageLoadStateObserverBase ...

Commit Queue noreply at github.com
Tue Jun 13 06:50:57 PDT 2023


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 946a761a0a7f9b63ceda7211a863527fa110883c
      https://github.com/WebKit/WebKit/commit/946a761a0a7f9b63ceda7211a863527fa110883c
  Author: David Kilzer <ddkilzer at apple.com>
  Date:   2023-06-13 (Tue, 13 Jun 2023)

  Changed paths:
    M Source/WebKit/UIProcess/API/Cocoa/PageLoadStateObserver.h
    M Source/WebKit/UIProcess/Cocoa/NavigationState.h
    M Source/WebKit/UIProcess/Cocoa/NavigationState.mm
    M Source/WebKit/UIProcess/Cocoa/PageClientImplCocoa.h
    M Source/WebKit/UIProcess/PageLoadState.cpp
    M Source/WebKit/UIProcess/PageLoadState.h
    M Source/WebKit/UIProcess/ios/PageClientImplIOS.mm
    M Source/WebKit/UIProcess/ios/WebPageProxyIOS.mm
    M Source/WebKit/UIProcess/mac/PageClientImplMac.mm

  Log Message:
  -----------
  Use smart pointers with PageLoadStateObserverBase subclasses and instance variables
https://bugs.webkit.org/show_bug.cgi?id=257938
<rdar://110485192>

Reviewed by Alex Christensen.

PageLoadStateObserverBase (a.k.a. PageLoadState::Observer) is stored as
a raw pointer in PageLoadState::m_observers, but subclass
NavigationState inherits CanMakeWeakPtr<>.  Be consistent by making
PageLoadStateObserverBase inherit CanMakeWeakPtr<> and propagate
necessary changes.

While here, make Cocoa instance variables in these classes use
WeakObjCPtr<> instead of raw pointers, and implement convenience
functions that return RetainPtr<> objects to avoid autoreleasing these
instance variables repeatedly for method calls.

* Source/WebKit/UIProcess/API/Cocoa/PageLoadStateObserver.h:
- Store m_object using WeakObjCPtr<>, and use WeakObjCPtr<>::get() to
  avoid autoreleasing m_object on every method call.

* Source/WebKit/UIProcess/Cocoa/NavigationState.h:
(WebKit::NavigationState):
- Change PageLoadState::Observer to public inheritance so
  CanMakeWeakPtr<> may be used from PageLoadState::Observer.
- Stop inheriting CanMakeWeakPtr<> from NavigationState.
(WebKit::NavigationState::fromWebPage):
- Must return a pointer because navigationStates() stores
  WeakPtr<NavigationState> values.
(WebKit::NavigationState::navigationDelegate const):
(WebKit::NavigationState::historyDelegate const):
- Add const modifier to methods.
(WebKit::NavigationState::webView const): Add.
- Store m_viewView as WeakObjCPtr<WKWebView>.

* Source/WebKit/UIProcess/Cocoa/NavigationState.mm:
(WebKit::navigationStates):
- Change from HashMap<> to WeakHashMap<>.
(WebKit::NavigationState::NavigationState):
- Use `webView` parameter instead of m_webView to avoid autoreleasing
  the object.
(WebKit::NavigationState::~NavigationState):
(WebKit::NavigationState::fromWebPage):
- Update to return a pointer instead of a reference.
(WebKit::NavigationState::navigationDelegate const):
(WebKit::NavigationState::historyDelegate const):
- Add const modifier to methods.
(WebKit::NavigationState::navigationGestureDidBegin):
(WebKit::NavigationState::navigationGestureWillEnd):
(WebKit::NavigationState::navigationGestureDidEnd):
(WebKit::NavigationState::willRecordNavigationSnapshot):
(WebKit::NavigationState::navigationGestureSnapshotWasRemoved):
(WebKit::NavigationState::didRequestPasswordForQuickLookDocument):
(WebKit::NavigationState::didStopRequestingPasswordForQuickLookDocument):
(WebKit::NavigationState::didFirstPaint):
(WebKit::NavigationState::NavigationClient::didChangeBackForwardList):
(WebKit::NavigationState::NavigationClient::willGoToBackForwardListItem):
(WebKit::NavigationState::NavigationClient::decidePolicyForNavigationAction):
(WebKit::NavigationState::NavigationClient::contentRuleListNotification):
(WebKit::NavigationState::NavigationClient::decidePolicyForNavigationResponse):
(WebKit::NavigationState::NavigationClient::didStartProvisionalNavigation):
(WebKit::NavigationState::NavigationClient::didStartProvisionalLoadForFrame):
(WebKit::NavigationState::NavigationClient::didReceiveServerRedirectForProvisionalNavigation):
(WebKit::NavigationState::NavigationClient::willPerformClientRedirect):
(WebKit::NavigationState::NavigationClient::didPerformClientRedirect):
(WebKit::NavigationState::NavigationClient::didCancelClientRedirect):
(WebKit::NavigationState::NavigationClient::didFailProvisionalNavigationWithError):
(WebKit::NavigationState::NavigationClient::didFailProvisionalLoadWithErrorForFrame):
(WebKit::NavigationState::NavigationClient::didCommitNavigation):
(WebKit::NavigationState::NavigationClient::didCommitLoadForFrame):
(WebKit::NavigationState::NavigationClient::didFinishDocumentLoad):
(WebKit::NavigationState::NavigationClient::didFinishNavigation):
(WebKit::NavigationState::NavigationClient::didFinishLoadForFrame):
(WebKit::NavigationState::NavigationClient::didFailLoadDueToNetworkConnectionIntegrity):
(WebKit::NavigationState::NavigationClient::didChangeLookalikeCharacters):
(WebKit::NavigationState::NavigationClient::didFailNavigationWithError):
(WebKit::NavigationState::NavigationClient::didFailLoadWithErrorForFrame):
(WebKit::NavigationState::NavigationClient::didSameDocumentNavigation):
(WebKit::NavigationState::NavigationClient::renderingProgressDidChange):
(WebKit::NavigationState::NavigationClient::didReceiveAuthenticationChallenge):
(WebKit::NavigationState::NavigationClient::shouldAllowLegacyTLS):
(WebKit::NavigationState::NavigationClient::didNegotiateModernTLS):
(WebKit::NavigationState::NavigationClient::processDidTerminate):
(WebKit::NavigationState::NavigationClient::processDidBecomeResponsive):
(WebKit::NavigationState::NavigationClient::processDidBecomeUnresponsive):
(WebKit::NavigationState::NavigationClient::webCryptoMasterKey):
(WebKit::NavigationState::NavigationClient::navigationActionDidBecomeDownload):
(WebKit::NavigationState::NavigationClient::navigationResponseDidBecomeDownload):
(WebKit::NavigationState::NavigationClient::contextMenuDidCreateDownload):
(WebKit::NavigationState::NavigationClient::didStartLoadForQuickLookDocumentInMainFrame):
(WebKit::NavigationState::NavigationClient::didFinishLoadForQuickLookDocumentInMainFrame):
(WebKit::NavigationState::NavigationClient::decidePolicyForSOAuthorizationLoad):
(WebKit::NavigationState::HistoryClient::didNavigateWithNavigationData):
(WebKit::NavigationState::HistoryClient::didPerformClientRedirect):
(WebKit::NavigationState::HistoryClient::didPerformServerRedirect):
(WebKit::NavigationState::HistoryClient::didUpdateHistoryTitle):
(WebKit::NavigationState::willChangeIsLoading):
(WebKit::NavigationState::didChangeIsLoading):
(WebKit::NavigationState::willChangeTitle):
(WebKit::NavigationState::didChangeTitle):
(WebKit::NavigationState::willChangeActiveURL):
(WebKit::NavigationState::didChangeActiveURL):
(WebKit::NavigationState::willChangeHasOnlySecureContent):
(WebKit::NavigationState::didChangeHasOnlySecureContent):
(WebKit::NavigationState::willChangeNegotiatedLegacyTLS):
(WebKit::NavigationState::didChangeNegotiatedLegacyTLS):
(WebKit::NavigationState::willChangeWasPrivateRelayed):
(WebKit::NavigationState::didChangeWasPrivateRelayed):
(WebKit::NavigationState::willChangeEstimatedProgress):
(WebKit::NavigationState::didChangeEstimatedProgress):
(WebKit::NavigationState::willChangeCanGoBack):
(WebKit::NavigationState::didChangeCanGoBack):
(WebKit::NavigationState::willChangeCanGoForward):
(WebKit::NavigationState::didChangeCanGoForward):
(WebKit::NavigationState::willChangeNetworkRequestsInProgress):
(WebKit::NavigationState::didChangeNetworkRequestsInProgress):
(WebKit::NavigationState::willChangeCertificateInfo):
(WebKit::NavigationState::didChangeCertificateInfo):
(WebKit::NavigationState::willChangeWebProcessIsResponsive):
(WebKit::NavigationState::didChangeWebProcessIsResponsive):
(WebKit::NavigationState::didSwapWebProcesses):
- Make use of navigationDelegate() convenience method instead of calling
  m_navigationDelegate.get().
- Make use of new webView() convenience method to avoid autoreleasing
  m_webView each time.  Add nil checks as needed.
- Remove unneeded RetainPtr<>::get() calls.
- Change C-style casts to static_cast<>() for consistency.

* Source/WebKit/UIProcess/Cocoa/PageClientImplCocoa.h:
(WebKit::PageClientImplCocoa::webView const): Add.

* Source/WebKit/UIProcess/PageLoadState.cpp:
(WebKit::PageLoadState::~PageLoadState):
(WebKit::PageLoadState::addObserver):
(WebKit::PageLoadState::removeObserver):
(WebKit::PageLoadState::callObserverCallback):
- Update to work with m_observers storing WeakPtr<Observer>.

* Source/WebKit/UIProcess/PageLoadState.h:
(WebKit::PageLoadStateObserverBase):
- Inherit from CanMakeWeakPtr<>.
- Change m_observers from Vector<Observer*> to WeakHashSet<Observer>.

* Source/WebKit/UIProcess/ios/PageClientImplIOS.mm:
(MESSAGE_CHECK):
- Update to use webView().
(WebKit::PageClientImpl::isViewVisible):
(WebKit::PageClientImpl::isViewInWindow):
(WebKit::PageClientImpl::decidePolicyForGeolocationPermissionRequest):
(WebKit::PageClientImpl::didStartProvisionalLoadForMainFrame):
(WebKit::PageClientImpl::didFailProvisionalLoadForMainFrame):
(WebKit::PageClientImpl::didCommitLoadForMainFrame):
(WebKit::PageClientImpl::minimumZoomScale const):
(WebKit::PageClientImpl::showSafeBrowsingWarning):
(WebKit::PageClientImpl::clearSafeBrowsingWarning):
(WebKit::PageClientImpl::clearSafeBrowsingWarningIfForMainFrameNavigation):
(WebKit::PageClientImpl::effectiveAppearanceIsDark const):
(WebKit::PageClientImpl::effectiveUserInterfaceLevelIsElevated const):
(WebKit::PageClientImpl::takeViewSnapshot):
(WebKit::PageClientImpl::couldNotRestorePageState):
(WebKit::PageClientImpl::restorePageState):
(WebKit::PageClientImpl::restorePageCenterAndScale):
(WebKit::PageClientImpl::closeFullScreenManager):
(WebKit::PageClientImpl::isFullScreen):
(WebKit::PageClientImpl::enterFullScreen):
(WebKit::PageClientImpl::exitFullScreen):
(WebKit::PageClientImpl::lockFullscreenOrientation):
(WebKit::PageClientImpl::unlockFullscreenOrientation):
(WebKit::PageClientImpl::beganEnterFullScreen):
(WebKit::PageClientImpl::beganExitFullScreen):
(WebKit::PageClientImpl::didFinishLoadingDataForCustomContentProvider):
(WebKit::PageClientImpl::mimeTypesWithCustomContentProviders):
(WebKit::PageClientImpl::navigationGestureDidBegin):
(WebKit::PageClientImpl::navigationGestureWillEnd):
(WebKit::PageClientImpl::navigationGestureDidEnd):
(WebKit::PageClientImpl::willRecordNavigationSnapshot):
(WebKit::PageClientImpl::didRemoveNavigationGestureSnapshot):
(WebKit::PageClientImpl::didFinishNavigation):
(WebKit::PageClientImpl::didFailNavigation):
(WebKit::PageClientImpl::didSameDocumentNavigationForMainFrame):
(WebKit::PageClientImpl::didChangeBackgroundColor):
(WebKit::PageClientImpl::videoControlsManagerDidChange):
* Source/WebKit/UIProcess/ios/WebPageProxyIOS.mm:
(WebKit::WebPageProxy::applicationDidEnterBackground):
* Source/WebKit/UIProcess/mac/PageClientImplMac.mm:
(WebKit::PageClientImpl::pinnedStateWillChange):
(WebKit::PageClientImpl::pinnedStateDidChange):
(WebKit::PageClientImpl::drawPageBorderForPrinting):
(WebKit::PageClientImpl::didShowContextMenu):
(WebKit::PageClientImpl::didDismissContextMenu):
(WebKit::PageClientImpl::showShareSheet):
(WebKit::PageClientImpl::navigationGestureDidBegin):
(WebKit::PageClientImpl::navigationGestureWillEnd):
(WebKit::PageClientImpl::navigationGestureDidEnd):
(WebKit::PageClientImpl::willRecordNavigationSnapshot):
(WebKit::PageClientImpl::didRemoveNavigationGestureSnapshot):
(WebKit::PageClientImpl::handleControlledElementIDResponse):
- Make use of new webView() convenience method to avoid autoreleasing
  m_webView each time.  Add nil checks as needed.
- Add nullptr checks after calling NavigationState::fromWebPage() since
  it now returns a pointer instead of a reference.

Canonical link: https://commits.webkit.org/265120@main




More information about the webkit-changes mailing list