[webkit-changes] [WebKit/WebKit] 234799: [GLib] Most public types should be final; most cla...

Adrian Perez noreply at github.com
Mon Feb 13 03:47:59 PST 2023


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 234799572ddb4c3f4de5bce7784441165474d038
      https://github.com/WebKit/WebKit/commit/234799572ddb4c3f4de5bce7784441165474d038
  Author: Adrian Perez de Castro <aperez at igalia.com>
  Date:   2023-02-13 (Mon, 13 Feb 2023)

  Changed paths:
    M Source/WTF/wtf/glib/WTFGType.h
    M Source/WebKit/PlatformGTK.cmake
    M Source/WebKit/Shared/API/glib/WebKitContextMenu.cpp
    M Source/WebKit/Shared/API/glib/WebKitContextMenuItem.cpp
    M Source/WebKit/Shared/API/glib/WebKitHitTestResult.cpp
    M Source/WebKit/Shared/API/glib/WebKitURIRequest.cpp
    M Source/WebKit/Shared/API/glib/WebKitURIResponse.cpp
    M Source/WebKit/Shared/API/glib/WebKitUserMessage.cpp
    M Source/WebKit/UIProcess/API/glib/WebKitAuthenticationRequest.cpp
    M Source/WebKit/UIProcess/API/glib/WebKitAuthenticationRequest.h.in
    M Source/WebKit/UIProcess/API/glib/WebKitAutocleanups.h.in
    M Source/WebKit/UIProcess/API/glib/WebKitAutomationSession.cpp
    M Source/WebKit/UIProcess/API/glib/WebKitAutomationSession.h.in
    M Source/WebKit/UIProcess/API/glib/WebKitBackForwardList.cpp
    M Source/WebKit/UIProcess/API/glib/WebKitBackForwardList.h.in
    M Source/WebKit/UIProcess/API/glib/WebKitBackForwardListItem.cpp
    M Source/WebKit/UIProcess/API/glib/WebKitBackForwardListItem.h.in
    M Source/WebKit/UIProcess/API/glib/WebKitContextMenu.h.in
    M Source/WebKit/UIProcess/API/glib/WebKitContextMenuItem.h.in
    M Source/WebKit/UIProcess/API/glib/WebKitCookieManager.cpp
    M Source/WebKit/UIProcess/API/glib/WebKitCookieManager.h.in
    M Source/WebKit/UIProcess/API/glib/WebKitDefines.h.in
    M Source/WebKit/UIProcess/API/glib/WebKitDeviceInfoPermissionRequest.cpp
    M Source/WebKit/UIProcess/API/glib/WebKitDeviceInfoPermissionRequest.h.in
    M Source/WebKit/UIProcess/API/glib/WebKitDownload.cpp
    M Source/WebKit/UIProcess/API/glib/WebKitDownload.h.in
    M Source/WebKit/UIProcess/API/glib/WebKitEditorState.cpp
    M Source/WebKit/UIProcess/API/glib/WebKitEditorState.h.in
    M Source/WebKit/UIProcess/API/glib/WebKitFaviconDatabase.cpp
    M Source/WebKit/UIProcess/API/glib/WebKitFaviconDatabase.h.in
    M Source/WebKit/UIProcess/API/glib/WebKitFileChooserRequest.cpp
    M Source/WebKit/UIProcess/API/glib/WebKitFileChooserRequest.h.in
    M Source/WebKit/UIProcess/API/glib/WebKitFindController.cpp
    M Source/WebKit/UIProcess/API/glib/WebKitFindController.h.in
    M Source/WebKit/UIProcess/API/glib/WebKitFormSubmissionRequest.cpp
    M Source/WebKit/UIProcess/API/glib/WebKitFormSubmissionRequest.h.in
    M Source/WebKit/UIProcess/API/glib/WebKitGeolocationManager.cpp
    M Source/WebKit/UIProcess/API/glib/WebKitGeolocationManager.h.in
    M Source/WebKit/UIProcess/API/glib/WebKitGeolocationPermissionRequest.cpp
    M Source/WebKit/UIProcess/API/glib/WebKitGeolocationPermissionRequest.h.in
    M Source/WebKit/UIProcess/API/glib/WebKitHitTestResult.h.in
    M Source/WebKit/UIProcess/API/glib/WebKitInputMethodContext.h.in
    M Source/WebKit/UIProcess/API/glib/WebKitMediaKeySystemPermissionRequest.cpp
    M Source/WebKit/UIProcess/API/glib/WebKitMediaKeySystemPermissionRequest.h.in
    M Source/WebKit/UIProcess/API/glib/WebKitNavigationPolicyDecision.cpp
    M Source/WebKit/UIProcess/API/glib/WebKitNavigationPolicyDecision.h.in
    M Source/WebKit/UIProcess/API/glib/WebKitNetworkSession.cpp
    M Source/WebKit/UIProcess/API/glib/WebKitNetworkSession.h.in
    M Source/WebKit/UIProcess/API/glib/WebKitNotification.cpp
    M Source/WebKit/UIProcess/API/glib/WebKitNotification.h.in
    M Source/WebKit/UIProcess/API/glib/WebKitNotificationPermissionRequest.cpp
    M Source/WebKit/UIProcess/API/glib/WebKitNotificationPermissionRequest.h.in
    M Source/WebKit/UIProcess/API/glib/WebKitOptionMenu.cpp
    M Source/WebKit/UIProcess/API/glib/WebKitOptionMenu.h.in
    M Source/WebKit/UIProcess/API/glib/WebKitPointerLockPermissionRequest.cpp
    M Source/WebKit/UIProcess/API/glib/WebKitPolicyDecision.h.in
    M Source/WebKit/UIProcess/API/glib/WebKitResponsePolicyDecision.cpp
    M Source/WebKit/UIProcess/API/glib/WebKitResponsePolicyDecision.h.in
    M Source/WebKit/UIProcess/API/glib/WebKitSecurityManager.cpp
    M Source/WebKit/UIProcess/API/glib/WebKitSecurityManager.h.in
    M Source/WebKit/UIProcess/API/glib/WebKitSettings.cpp
    M Source/WebKit/UIProcess/API/glib/WebKitSettings.h.in
    M Source/WebKit/UIProcess/API/glib/WebKitURIRequest.h.in
    M Source/WebKit/UIProcess/API/glib/WebKitURIResponse.h.in
    M Source/WebKit/UIProcess/API/glib/WebKitURISchemeRequest.cpp
    M Source/WebKit/UIProcess/API/glib/WebKitURISchemeRequest.h.in
    M Source/WebKit/UIProcess/API/glib/WebKitURISchemeResponse.cpp
    M Source/WebKit/UIProcess/API/glib/WebKitURISchemeResponse.h.in
    M Source/WebKit/UIProcess/API/glib/WebKitUserContentFilterStore.cpp
    M Source/WebKit/UIProcess/API/glib/WebKitUserContentFilterStore.h.in
    M Source/WebKit/UIProcess/API/glib/WebKitUserContentManager.cpp
    M Source/WebKit/UIProcess/API/glib/WebKitUserContentManager.h.in
    M Source/WebKit/UIProcess/API/glib/WebKitUserMediaPermissionRequest.cpp
    M Source/WebKit/UIProcess/API/glib/WebKitUserMediaPermissionRequest.h.in
    M Source/WebKit/UIProcess/API/glib/WebKitUserMessage.h.in
    M Source/WebKit/UIProcess/API/glib/WebKitWebContext.cpp
    M Source/WebKit/UIProcess/API/glib/WebKitWebContext.h.in
    M Source/WebKit/UIProcess/API/glib/WebKitWebResource.cpp
    M Source/WebKit/UIProcess/API/glib/WebKitWebResource.h.in
    M Source/WebKit/UIProcess/API/glib/WebKitWebView.h.in
    M Source/WebKit/UIProcess/API/glib/WebKitWebsiteDataAccessPermissionRequest.cpp
    M Source/WebKit/UIProcess/API/glib/WebKitWebsiteDataAccessPermissionRequest.h.in
    M Source/WebKit/UIProcess/API/glib/WebKitWebsiteDataManager.cpp
    M Source/WebKit/UIProcess/API/glib/WebKitWebsiteDataManager.h.in
    M Source/WebKit/UIProcess/API/glib/WebKitWebsitePolicies.cpp
    M Source/WebKit/UIProcess/API/glib/WebKitWebsitePolicies.h.in
    M Source/WebKit/UIProcess/API/glib/WebKitWindowProperties.cpp
    M Source/WebKit/UIProcess/API/glib/WebKitWindowProperties.h.in
    M Source/WebKit/UIProcess/API/gtk/WebKitColorChooserRequest.cpp
    M Source/WebKit/UIProcess/API/gtk/WebKitColorChooserRequest.h.in
    M Source/WebKit/UIProcess/API/gtk/WebKitPointerLockPermissionRequest.h.in
    M Source/WebKit/UIProcess/API/gtk/WebKitPrintOperation.cpp
    M Source/WebKit/UIProcess/API/gtk/WebKitPrintOperation.h.in
    M Source/WebKit/UIProcess/API/gtk/WebKitWebInspector.cpp
    M Source/WebKit/UIProcess/API/gtk/WebKitWebInspector.h.in
    M Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.h.in
    M Source/WebKit/WebProcess/InjectedBundle/API/glib/WebKitFrame.cpp
    M Source/WebKit/WebProcess/InjectedBundle/API/glib/WebKitFrame.h.in
    M Source/WebKit/WebProcess/InjectedBundle/API/glib/WebKitScriptWorld.cpp
    M Source/WebKit/WebProcess/InjectedBundle/API/glib/WebKitScriptWorld.h.in
    M Source/WebKit/WebProcess/InjectedBundle/API/glib/WebKitWebEditor.cpp
    M Source/WebKit/WebProcess/InjectedBundle/API/glib/WebKitWebEditor.h.in
    M Source/WebKit/WebProcess/InjectedBundle/API/glib/WebKitWebExtension.cpp
    M Source/WebKit/WebProcess/InjectedBundle/API/glib/WebKitWebExtension.h.in
    M Source/WebKit/WebProcess/InjectedBundle/API/glib/WebKitWebHitTestResult.cpp
    M Source/WebKit/WebProcess/InjectedBundle/API/glib/WebKitWebHitTestResult.h.in
    M Source/WebKit/WebProcess/InjectedBundle/API/glib/WebKitWebPage.cpp
    M Source/WebKit/WebProcess/InjectedBundle/API/glib/WebKitWebPage.h.in
    M Source/WebKit/WebProcess/InjectedBundle/API/glib/webkit-web-extension.h.in

  Log Message:
  -----------
  [GLib] Most public types should be final; most class structs should be private
https://bugs.webkit.org/show_bug.cgi?id=243663

Reviewed by Michael Catanzaro.

Switch over to using the WEBKIT}_DECLARE_{DERIVABLE,FINAL}_TYPE in
headers for the 2022 API, and provide a version of the macros which
expands to the pre-2022 code when the new API is not in use. By always
using macros to generate boilerplate there is less manually-written code
to maintain, which is always a good thing. There are some caveats:

- For the old API the WEBKIT_*_FOO macros have to be kept, because the
  macros that generate boilerplate produce those as static inline
  functions and existing code might be relying on them being macros.
  This results using guards in the code, which is not great, but there
  is not a better option.

- The G_DECLARE_DERIVABLE_TYPE macro produces itself the instance struct,
  with the parent type struct as only member. Using it would need
  modifying the code to avoid using the "priv" member, which would be
  some churn. Moreover, the "priv" member is used by the for the
  old API and making every access to it conditional would be
  cumbersome. A modified version of the macro that keeps the "priv"
  member is used instead.

  While in theory we could save 8 bytes (or 4 in 32-bit) per instance
  using G_ADD_PRIVATE, in practice GLib rounds up the size of instance
  to ensure its beginning is aligned, which in cases would practically
  cancel out the savings. Also, API objects are not so numerous, and
  therefore the potential memory savings are a moot point.

  Tackling the removal of the "priv" instance members might be done
  at some point in the future.

- On the other hand, while G_DECLARE_FINAL_TYPE also creates the class
  struct without any frills, we can use the macro because it is allowed
  to turn later on a final type into a non-final one without breaking
  the ABI. Hence, this GLib macro gets reused with a few additions.

While at it, derivable types (WebKitWebView, WebKitInputMethodContext,
WebKitPolicyDecision) have been changed to use the DERIVABLE version of
the macros. This needs to be done in the same patch because the
subclasses of WebKitPolicyDecision are final and the generated
boilerplace includes definitions for autocleanups, and expects that the
parent type has their autocleanups defined in a certain way. Conversely,
the WebKitAutocleanups.h.in header needed a touch-up to avoid providing
duplicate definitions of the autocleanups generated by the boilerplate
macros.

The instance struct for the types which are now final has been moved
into the implementation files, by piggybacking into the
WEBKIT_DEFINE_FINAL_TYPE[_WITH_CODE] macros to emit its definition.

Finally, the _IN_2022_API suffix gets removed from the
WEBKIT_DEFINE_FINAL_TYPE_WITH_CODE_IN_2022_API and
WEBKIT_DEFINE_FINAL_TYPE_IN_2022_API for the sake of brevity, and a
few more types are marked as final.

* Source/WTF/wtf/glib/WTFGType.h:
* Source/WebKit/PlatformGTK.cmake: Install WebKitWebExtensionAutocleanups.h
  only for the old API.
* Source/WebKit/UIProcess/API/glib/WebKitAuthenticationRequest.cpp:
* Source/WebKit/UIProcess/API/glib/WebKitAuthenticationRequest.h.in:
* Source/WebKit/UIProcess/API/glib/WebKitAutocleanups.h.in:
* Source/WebKit/UIProcess/API/glib/WebKitAutomationSession.cpp:
* Source/WebKit/UIProcess/API/glib/WebKitAutomationSession.h.in:
* Source/WebKit/UIProcess/API/glib/WebKitBackForwardList.cpp:
* Source/WebKit/UIProcess/API/glib/WebKitBackForwardList.h.in:
* Source/WebKit/UIProcess/API/glib/WebKitBackForwardListItem.cpp:
* Source/WebKit/UIProcess/API/glib/WebKitBackForwardListItem.h.in:
* Source/WebKit/UIProcess/API/glib/WebKitContextMenu.h.in:
* Source/WebKit/UIProcess/API/glib/WebKitContextMenuItem.h.in:
* Source/WebKit/UIProcess/API/glib/WebKitCookieManager.cpp:
* Source/WebKit/UIProcess/API/glib/WebKitCookieManager.h.in:
* Source/WebKit/UIProcess/API/glib/WebKitDefines.h.in:
* Source/WebKit/UIProcess/API/glib/WebKitDeviceInfoPermissionRequest.cpp:
* Source/WebKit/UIProcess/API/glib/WebKitDeviceInfoPermissionRequest.h.in:
* Source/WebKit/UIProcess/API/glib/WebKitDownload.cpp:
* Source/WebKit/UIProcess/API/glib/WebKitDownload.h.in:
* Source/WebKit/UIProcess/API/glib/WebKitEditorState.cpp:
* Source/WebKit/UIProcess/API/glib/WebKitEditorState.h.in:
* Source/WebKit/UIProcess/API/glib/WebKitFaviconDatabase.cpp:
* Source/WebKit/UIProcess/API/glib/WebKitFaviconDatabase.h.in:
* Source/WebKit/UIProcess/API/glib/WebKitFileChooserRequest.cpp:
* Source/WebKit/UIProcess/API/glib/WebKitFileChooserRequest.h.in:
* Source/WebKit/UIProcess/API/glib/WebKitFindController.cpp:
* Source/WebKit/UIProcess/API/glib/WebKitFindController.h.in:
* Source/WebKit/UIProcess/API/glib/WebKitFormSubmissionRequest.cpp:
* Source/WebKit/UIProcess/API/glib/WebKitFormSubmissionRequest.h.in:
* Source/WebKit/UIProcess/API/glib/WebKitGeolocationManager.cpp:
* Source/WebKit/UIProcess/API/glib/WebKitGeolocationManager.h.in:
* Source/WebKit/UIProcess/API/glib/WebKitGeolocationPermissionRequest.cpp:
* Source/WebKit/UIProcess/API/glib/WebKitGeolocationPermissionRequest.h.in:
* Source/WebKit/UIProcess/API/glib/WebKitHitTestResult.h.in:
* Source/WebKit/UIProcess/API/glib/WebKitInputMethodContext.h.in:
* Source/WebKit/UIProcess/API/glib/WebKitMediaKeySystemPermissionRequest.cpp:
* Source/WebKit/UIProcess/API/glib/WebKitMediaKeySystemPermissionRequest.h.in:
* Source/WebKit/UIProcess/API/glib/WebKitNavigationPolicyDecision.cpp:
* Source/WebKit/UIProcess/API/glib/WebKitNavigationPolicyDecision.h.in:
* Source/WebKit/UIProcess/API/glib/WebKitNetworkSession.cpp:
* Source/WebKit/UIProcess/API/glib/WebKitNetworkSession.h.in:
* Source/WebKit/UIProcess/API/glib/WebKitNotification.cpp:
* Source/WebKit/UIProcess/API/glib/WebKitNotification.h.in:
* Source/WebKit/UIProcess/API/glib/WebKitNotificationPermissionRequest.cpp:
* Source/WebKit/UIProcess/API/glib/WebKitNotificationPermissionRequest.h.in:
* Source/WebKit/UIProcess/API/glib/WebKitOptionMenu.cpp:
* Source/WebKit/UIProcess/API/glib/WebKitOptionMenu.h.in:
* Source/WebKit/UIProcess/API/glib/WebKitPointerLockPermissionRequest.cpp:
* Source/WebKit/UIProcess/API/glib/WebKitPolicyDecision.h.in:
* Source/WebKit/UIProcess/API/glib/WebKitResponsePolicyDecision.cpp:
* Source/WebKit/UIProcess/API/glib/WebKitResponsePolicyDecision.h.in:
* Source/WebKit/UIProcess/API/glib/WebKitSecurityManager.cpp:
* Source/WebKit/UIProcess/API/glib/WebKitSecurityManager.h.in:
* Source/WebKit/UIProcess/API/glib/WebKitSettings.cpp:
* Source/WebKit/UIProcess/API/glib/WebKitSettings.h.in:
* Source/WebKit/UIProcess/API/glib/WebKitURIRequest.h.in:
* Source/WebKit/UIProcess/API/glib/WebKitURIResponse.h.in:
* Source/WebKit/UIProcess/API/glib/WebKitURISchemeRequest.cpp:
* Source/WebKit/UIProcess/API/glib/WebKitURISchemeRequest.h.in:
* Source/WebKit/UIProcess/API/glib/WebKitURISchemeResponse.cpp:
* Source/WebKit/UIProcess/API/glib/WebKitURISchemeResponse.h.in:
* Source/WebKit/UIProcess/API/glib/WebKitUserContentFilterStore.cpp:
* Source/WebKit/UIProcess/API/glib/WebKitUserContentFilterStore.h.in:
* Source/WebKit/UIProcess/API/glib/WebKitUserContentManager.cpp:
* Source/WebKit/UIProcess/API/glib/WebKitUserContentManager.h.in:
* Source/WebKit/UIProcess/API/glib/WebKitUserMediaPermissionRequest.cpp:
* Source/WebKit/UIProcess/API/glib/WebKitUserMediaPermissionRequest.h.in:
* Source/WebKit/UIProcess/API/glib/WebKitUserMessage.h.in:
* Source/WebKit/UIProcess/API/glib/WebKitWebContext.cpp:
* Source/WebKit/UIProcess/API/glib/WebKitWebContext.h.in:
* Source/WebKit/UIProcess/API/glib/WebKitWebResource.cpp:
* Source/WebKit/UIProcess/API/glib/WebKitWebResource.h.in:
* Source/WebKit/UIProcess/API/glib/WebKitWebView.h.in:
* Source/WebKit/UIProcess/API/glib/WebKitWebsiteDataAccessPermissionRequest.cpp:
* Source/WebKit/UIProcess/API/glib/WebKitWebsiteDataAccessPermissionRequest.h.in:
* Source/WebKit/UIProcess/API/glib/WebKitWebsiteDataManager.cpp:
* Source/WebKit/UIProcess/API/glib/WebKitWebsiteDataManager.h.in:
* Source/WebKit/UIProcess/API/glib/WebKitWebsitePolicies.cpp:
* Source/WebKit/UIProcess/API/glib/WebKitWebsitePolicies.h.in:
* Source/WebKit/UIProcess/API/glib/WebKitWindowProperties.cpp:
* Source/WebKit/UIProcess/API/glib/WebKitWindowProperties.h.in:
* Source/WebKit/UIProcess/API/gtk/WebKitColorChooserRequest.cpp:
* Source/WebKit/UIProcess/API/gtk/WebKitColorChooserRequest.h.in:
* Source/WebKit/UIProcess/API/gtk/WebKitPointerLockPermissionRequest.h.in:
* Source/WebKit/UIProcess/API/gtk/WebKitPrintOperation.cpp:
* Source/WebKit/UIProcess/API/gtk/WebKitPrintOperation.h.in:
* Source/WebKit/UIProcess/API/gtk/WebKitWebInspector.cpp:
* Source/WebKit/UIProcess/API/gtk/WebKitWebInspector.h.in:
* Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.h.in:
* Source/WebKit/WebProcess/InjectedBundle/API/glib/WebKitFrame.cpp:
* Source/WebKit/WebProcess/InjectedBundle/API/glib/WebKitFrame.h.in:
* Source/WebKit/WebProcess/InjectedBundle/API/glib/WebKitScriptWorld.cpp:
* Source/WebKit/WebProcess/InjectedBundle/API/glib/WebKitScriptWorld.h.in:
* Source/WebKit/WebProcess/InjectedBundle/API/glib/WebKitWebEditor.cpp:
* Source/WebKit/WebProcess/InjectedBundle/API/glib/WebKitWebEditor.h.in:
* Source/WebKit/WebProcess/InjectedBundle/API/glib/WebKitWebExtension.cpp:
* Source/WebKit/WebProcess/InjectedBundle/API/glib/WebKitWebExtension.h.in:
* Source/WebKit/WebProcess/InjectedBundle/API/glib/WebKitWebHitTestResult.cpp:
* Source/WebKit/WebProcess/InjectedBundle/API/glib/WebKitWebHitTestResult.h.in:
* Source/WebKit/WebProcess/InjectedBundle/API/glib/WebKitWebPage.cpp:
* Source/WebKit/WebProcess/InjectedBundle/API/glib/WebKitWebPage.h.in:
* Source/WebKit/WebProcess/InjectedBundle/API/glib/webkit-web-extension.h.in:

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




More information about the webkit-changes mailing list