Skip to content

Commit

Permalink
Add support for Web Extension windows APIs.
Browse files Browse the repository at this point in the history
https://bugs.webkit.org/show_bug.cgi?id=260155
rdar://problem/114736173

Reviewed by Brian Weinstein.

Fully plumbs the windows API from JavaScript up to the Objective-C API.

* Source/WebKit/DerivedSources-input.xcfilelist: Addeed new files.
* Source/WebKit/DerivedSources.make: Added new files.
* Source/WebKit/Scripts/webkit/messages.py: Added new extension types.
(serialized_identifiers):
(types_that_cannot_be_forward_declared):
* Source/WebKit/Scripts/webkit/tests/MessageArgumentDescriptions.cpp: Updated with make command mentioned in messages.py comment.
(IPC::serializedIdentifiers):
* Source/WebKit/Shared/Extensions/WebExtensionEventListenerType.serialization.in:
* Source/WebKit/Shared/Extensions/WebExtensionTab.serialization.in: Added.
* Source/WebKit/Shared/Extensions/WebExtensionTabIdentifier.h:
(WebKit::isNone): Added.
(WebKit::isValid): Added.
(WebKit::toWebExtensionTabIdentifier): Added.
(WebKit::toWebAPI): Added.
* Source/WebKit/Shared/Extensions/WebExtensionTabParameters.h: Copied from Source/WebKit/UIProcess/API/Cocoa/_WKWebExtensionWindowCreationOptionsInternal.h.
* Source/WebKit/Shared/Extensions/WebExtensionWindow.serialization.in: Added.
* Source/WebKit/Shared/Extensions/WebExtensionWindowIdentifier.h:
(WebKit::isNone): Added.
(WebKit::isCurrent): Added.
(WebKit::isValid): Added.
(WebKit::toWebExtensionWindowIdentifier): Added.
(WebKit::toWebAPI): Added.
* Source/WebKit/Shared/Extensions/WebExtensionWindowParameters.h: Copied from Source/WebKit/Shared/Extensions/WebExtensionTabIdentifier.h.
* Source/WebKit/Shared/Extensions/_WKWebExtensionUtilities.mm:
(classToClassString): Use dot-syntax.
(+[_WKWebExtensionUtilities validateContentsOfDictionary:requiredKeys:optionalKeys:keyToExpectedValueType:outExceptionString:]):
Added support for NSSet input, where any class or array in the set can match. This is needed for the windows API that allows a single
URL or array of URLs. Also removed error logging, since this can be used for partial validation and it was causing log noise.
* Source/WebKit/UIProcess/API/Cocoa/_WKWebExtensionTabCreationOptionsInternal.h:
* Source/WebKit/UIProcess/API/Cocoa/_WKWebExtensionWindow.h:
* Source/WebKit/UIProcess/API/Cocoa/_WKWebExtensionWindowCreationOptions.h:
* Source/WebKit/UIProcess/API/Cocoa/_WKWebExtensionWindowCreationOptionsInternal.h:
* Source/WebKit/UIProcess/Extensions/Cocoa/API/WebExtensionContextAPIWindowsCocoa.mm: Added.
(WebKit::matchesFilter): Added.
(WebKit::WebExtensionContext::windowsCreate): Added.
(WebKit::WebExtensionContext::windowsGet): Added.
(WebKit::WebExtensionContext::windowsGetLastFocused): Added.
(WebKit::WebExtensionContext::windowsGetAll): Added.
(WebKit::WebExtensionContext::windowsUpdate): Added.
(WebKit::WebExtensionContext::windowsRemove): Added.
* Source/WebKit/UIProcess/Extensions/Cocoa/WebExtensionContextCocoa.mm:
(WebKit::WebExtensionContext::getOrCreateWindow): Tweaked logging.
(WebKit::WebExtensionContext::getWindow): Added current window support with FIXME.
(WebKit::WebExtensionContext::getOrCreateTab): Tweaked logging.
(WebKit::WebExtensionContext::getTab): Ditto.
(WebKit::WebExtensionContext::frontmostWindow): Added.
(WebKit::WebExtensionContext::didOpenWindow): Added logging.
(WebKit::WebExtensionContext::didCloseWindow): Ditto.
(WebKit::WebExtensionContext::didFocusWindow): Ditto.
(WebKit::WebExtensionContext::didOpenTab): Ditto.
(WebKit::WebExtensionContext::didCloseTab): Ditto.
(WebKit::WebExtensionContext::didActivateTab): Ditto.
(WebKit::WebExtensionContext::didSelectTabs): Ditto.
(WebKit::WebExtensionContext::didMoveTab): Ditto.
(WebKit::WebExtensionContext::didReplaceTab): Ditto.
(WebKit::WebExtensionContext::didChangeTabProperties): Ditto.
* Source/WebKit/UIProcess/Extensions/Cocoa/WebExtensionTabCocoa.mm:
(WebKit::WebExtensionTab::extensionContext const): Added here to fix build.
(WebKit::WebExtensionTab::parameters const): Added.
(WebKit::WebExtensionTab::toggleReaderMode): Call completion handler.
(WebKit::WebExtensionTab::mute): Ditto.
(WebKit::WebExtensionTab::unmute): Ditto.
(WebKit::WebExtensionTab::setZoomFactor): Ditto.
(WebKit::WebExtensionTab::loadURL): Ditto.
(WebKit::WebExtensionTab::reload): Ditto.
(WebKit::WebExtensionTab::reloadFromOrigin): Ditto.
(WebKit::WebExtensionTab::goBack): Ditto.
(WebKit::WebExtensionTab::goForward): Ditto.
(WebKit::WebExtensionTab::activate): Ditto.
(WebKit::WebExtensionTab::select): Ditto.
(WebKit::WebExtensionTab::duplicate): Ditto.
(WebKit::WebExtensionTab::close): Ditto.
* Source/WebKit/UIProcess/Extensions/Cocoa/WebExtensionWindowCocoa.mm:
(WebKit::WebExtensionWindow::WebExtensionWindow):
(WebKit::WebExtensionWindow::extensionContext const): Added here to fix build.
(WebKit::WebExtensionWindow::parameters const): Added.
(WebKit::toAPI): Added.
(WebKit::WebExtensionWindow::setState): Call completion handler.
(WebKit::WebExtensionWindow::focus):
(WebKit::WebExtensionWindow::normalizedFrame const): Added.
(WebKit::WebExtensionWindow::frame const): Added rect standardization.
(WebKit::WebExtensionWindow::setFrame): Call completion handler.
(WebKit::WebExtensionWindow::screenFrame const): Added.
(WebKit::WebExtensionWindow::close): Call completion handler.
* Source/WebKit/UIProcess/Extensions/WebExtensionContext.h:
* Source/WebKit/UIProcess/Extensions/WebExtensionContext.messages.in:
* Source/WebKit/UIProcess/Extensions/WebExtensionTab.h:
(WebKit::WebExtensionTab::extensionContext const): Deleted.
* Source/WebKit/UIProcess/Extensions/WebExtensionWindow.h:
(WebKit::WebExtensionWindow::extensionContext const): Deleted.
* Source/WebKit/WebKit.xcodeproj/project.pbxproj:
* Source/WebKit/WebProcess/Extensions/API/Cocoa/WebExtensionAPITabsCocoa.mm:
(WebKit::toWebAPI): Added stub.
* Source/WebKit/WebProcess/Extensions/API/Cocoa/WebExtensionAPIWindowsCocoa.mm:
(WebKit::toWebAPI): Added.
(WebKit::toTypeImpl): Added.
(WebKit::toStateImpl): Added.
(WebKit::WebExtensionAPIWindows::parsePopulateTabs): Added.
(WebKit::WebExtensionAPIWindows::parseWindowTypesFilter): Added.
(WebKit::WebExtensionAPIWindows::parseWindowGetOptions): Added.
(WebKit::WebExtensionAPIWindows::parseWindowCreateOptions): Added.
(WebKit::WebExtensionAPIWindows::parseWindowUpdateOptions): Added.
(WebKit::WebExtensionAPIWindows::isPropertyAllowed): Added implementation.
(WebKit::WebExtensionAPIWindows::createWindow): Added implementation.
(WebKit::WebExtensionAPIWindows::get): Added implementation.
(WebKit::WebExtensionAPIWindows::getCurrent): Added implementation.
(WebKit::WebExtensionAPIWindows::getLastFocused): Added implementation.
(WebKit::WebExtensionAPIWindows::getAll): Added implementation.
(WebKit::WebExtensionAPIWindows::update): Added implementation.
(WebKit::WebExtensionAPIWindows::remove): Added implementation.
* Source/WebKit/WebProcess/Extensions/API/Cocoa/WebExtensionAPIWindowsEventCocoa.mm:
(WebKit::WebExtensionAPIWindowsEvent::invokeListenersWithArgument): Use WebExtensionAPIWindows filter.
(WebKit::WebExtensionAPIWindowsEvent::addListener): Ditto.
* Source/WebKit/WebProcess/Extensions/API/WebExtensionAPITabs.h:
* Source/WebKit/WebProcess/Extensions/API/WebExtensionAPIWindows.h:
(WebKit::WebExtensionAPIWindows::windowIdentifierNone const): Added.
(WebKit::WebExtensionAPIWindows::windowIdentifierCurrent const): Added.
* Source/WebKit/WebProcess/Extensions/API/WebExtensionAPIWindowsEvent.h:
* Source/WebKit/WebProcess/Extensions/Interfaces/WebExtensionAPIWindows.idl: Added NeedsPage on a couple methods.
* Tools/TestWebKitAPI/SourcesCocoa.txt: Added new files.
* Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
* Tools/TestWebKitAPI/Tests/WebKitCocoa/WKWebExtensionAPIWindows.mm: Added.
(TestWebKitAPI::TEST):
* Tools/TestWebKitAPI/Tests/WebKitCocoa/WKWebExtensionTab.mm:
(TestWebKitAPI::TEST): Use new TestWebExtensionWindow object.
(-[TestWindowForTabs tabsForWebExtensionContext:]): Deleted.
(-[TestWindowForTabs activeTabForWebExtensionContext:]): Deleted.
* Tools/TestWebKitAPI/Tests/WebKitCocoa/WKWebExtensionWindow.mm:
(TestWebKitAPI::TEST): Use new TestWebExtensionWindow object.
* Tools/TestWebKitAPI/cocoa/TestWebExtensionsDelegate.h:
* Tools/TestWebKitAPI/cocoa/TestWebExtensionsDelegate.mm:
(-[TestWebExtensionsDelegate webExtensionController:openNewWindowWithOptions:forExtensionContext:completionHandler:]): Added.
(-[TestWebExtensionsDelegate webExtensionController:openNewTabWithOptions:forExtensionContext:completionHandler:]): Added.
* Tools/TestWebKitAPI/cocoa/WebExtensionUtilities.h:
* Tools/TestWebKitAPI/cocoa/WebExtensionUtilities.mm:
(-[TestWebExtensionWindow init]): Added.
(-[TestWebExtensionWindow tabsForWebExtensionContext:]): Added.
(-[TestWebExtensionWindow activeTabForWebExtensionContext:]): Added.
(-[TestWebExtensionWindow windowTypeForWebExtensionContext:]): Added.
(-[TestWebExtensionWindow windowStateForWebExtensionContext:]): Added.
(-[TestWebExtensionWindow setWindowState:forWebExtensionContext:completionHandler:]): Added.
(-[TestWebExtensionWindow isUsingPrivateBrowsingForWebExtensionContext:]): Added.
(-[TestWebExtensionWindow screenFrameForWebExtensionContext:]): Added.
(-[TestWebExtensionWindow frameForWebExtensionContext:]): Added.
(-[TestWebExtensionWindow setFrame:forWebExtensionContext:completionHandler:]): Added.
(-[TestWebExtensionWindow focusForWebExtensionContext:completionHandler:]): Added.
(-[TestWebExtensionWindow closeForWebExtensionContext:completionHandler:]): Added.

Canonical link: https://commits.webkit.org/267522@main
  • Loading branch information
xeenon committed Aug 31, 2023
1 parent f6b1fa7 commit 589a9da
Show file tree
Hide file tree
Showing 41 changed files with 2,151 additions and 185 deletions.
3 changes: 3 additions & 0 deletions Source/WebKit/DerivedSources-input.xcfilelist
Original file line number Diff line number Diff line change
Expand Up @@ -189,6 +189,9 @@ $(PROJECT_DIR)/Shared/Extensions/WebExtensionAlarmParameters.serialization.in
$(PROJECT_DIR)/Shared/Extensions/WebExtensionContextParameters.serialization.in
$(PROJECT_DIR)/Shared/Extensions/WebExtensionControllerParameters.serialization.in
$(PROJECT_DIR)/Shared/Extensions/WebExtensionEventListenerType.serialization.in
$(PROJECT_DIR)/Shared/Extensions/WebExtensionTab.serialization.in
$(PROJECT_DIR)/Shared/Extensions/WebExtensionTabParameters.serialization.in
$(PROJECT_DIR)/Shared/Extensions/WebExtensionWindow.serialization.in
$(PROJECT_DIR)/Shared/FileSystemSyncAccessHandleInfo.serialization.in
$(PROJECT_DIR)/Shared/FocusedElementInformation.serialization.in
$(PROJECT_DIR)/Shared/FrameInfoData.serialization.in
Expand Down
4 changes: 3 additions & 1 deletion Source/WebKit/DerivedSources.make
Original file line number Diff line number Diff line change
Expand Up @@ -494,14 +494,16 @@ SERIALIZATION_DESCRIPTION_FILES = \
Shared/Extensions/WebExtensionContextParameters.serialization.in \
Shared/Extensions/WebExtensionControllerParameters.serialization.in \
Shared/Extensions/WebExtensionEventListenerType.serialization.in \
Shared/Extensions/WebExtensionTab.serialization.in \
Shared/Extensions/WebExtensionWindow.serialization.in \
Shared/FileSystemSyncAccessHandleInfo.serialization.in \
Shared/FocusedElementInformation.serialization.in \
Shared/FrameInfoData.serialization.in \
Shared/FrameTreeCreationParameters.serialization.in \
Shared/FrameTreeNodeData.serialization.in \
Shared/Gamepad/GamepadData.serialization.in \
Shared/GPUProcessConnectionParameters.serialization.in \
Shared/GoToBackForwardItemParameters.serialization.in \
Shared/GoToBackForwardItemParameters.serialization.in \
Shared/ios/DynamicViewportSizeUpdate.serialization.in \
Shared/ios/InteractionInformationAtPosition.serialization.in \
Shared/ios/WebAutocorrectionContext.serialization.in \
Expand Down
14 changes: 9 additions & 5 deletions Source/WebKit/Scripts/webkit/messages.py
Original file line number Diff line number Diff line change
Expand Up @@ -283,13 +283,13 @@ def serialized_identifiers():
'WebCore::OpaqueOriginIdentifier',
'WebCore::PageIdentifier',
'WebCore::PlaybackTargetClientContextIdentifier',
'WebCore::PushSubscriptionIdentifier',
'WebCore::PortIdentifier',
'WebCore::ProcessIdentifier',
'WebCore::PushSubscriptionIdentifier',
'WebCore::RTCDataChannelLocalIdentifier',
'WebCore::RealtimeMediaSourceIdentifier',
'WebCore::RenderingResourceIdentifier',
'WebCore::ResourceLoaderIdentifier',
'WebCore::RTCDataChannelLocalIdentifier',
'WebCore::SWServerConnectionIdentifier',
'WebCore::ServiceWorkerIdentifier',
'WebCore::ServiceWorkerJobIdentifier',
Expand Down Expand Up @@ -329,9 +329,9 @@ def serialized_identifiers():
'WebKit::RemoteLegacyCDMIdentifier',
'WebKit::RemoteLegacyCDMSessionIdentifier',
'WebKit::RemoteMediaResourceIdentifier',
'WebKit::RemoteRemoteCommandListenerIdentifier',
'WebKit::RemoteSerializedImageBufferIdentifier',
'WebKit::RemoteVideoFrameIdentifier',
'WebKit::RemoteRemoteCommandListenerIdentifier',
'WebKit::RenderingBackendIdentifier',
'WebKit::RenderingUpdateID',
'WebKit::RetrieveRecordResponseBodyCallbackIdentifier',
Expand All @@ -349,6 +349,8 @@ def serialized_identifiers():
'WebKit::VideoEncoderIdentifier',
'WebKit::WebExtensionContextIdentifier',
'WebKit::WebExtensionControllerIdentifier',
'WebKit::WebExtensionTabIdentifier',
'WebKit::WebExtensionWindowIdentifier',
'WebKit::WebGPUIdentifier',
'WebKit::WebPageProxyIdentifier',
'WebKit::WebURLSchemeHandlerIdentifier',
Expand Down Expand Up @@ -413,14 +415,16 @@ def types_that_cannot_be_forward_declared():
'WebKit::LegacyCustomProtocolID',
'WebKit::RemoteMediaSourceIdentifier',
'WebKit::RemoteSourceBufferIdentifier',
'WebKit::RemoteVideoFrameWriteReference',
'WebKit::RemoteVideoFrameReadReference',
'WebKit::RemoteVideoFrameWriteReference',
'WebKit::RenderingUpdateID',
'WebKit::TextCheckerRequestID',
'WebKit::TransactionID',
'WebKit::WCLayerTreeHostIdentifier',
'WebKit::WCContentBufferIdentifier',
'WebKit::WCLayerTreeHostIdentifier',
'WebKit::WebExtensionEventListenerType',
'WebKit::WebExtensionTabParameters',
'WebKit::WebExtensionWindowParameters',
'WebKit::XRDeviceIdentifier',
] + serialized_identifiers() + types_that_must_be_moved())

Expand Down
18 changes: 12 additions & 6 deletions Source/WebKit/Scripts/webkit/tests/MessageArgumentDescriptions.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,8 @@
#include "VideoEncoderIdentifier.h"
#include "WebExtensionContextIdentifier.h"
#include "WebExtensionControllerIdentifier.h"
#include "WebExtensionTabIdentifier.h"
#include "WebExtensionWindowIdentifier.h"
#include "WebGPUIdentifier.h"
#include "WebPageProxyIdentifier.h"
#include "WebURLSchemeHandlerIdentifier.h"
Expand Down Expand Up @@ -449,13 +451,13 @@ Vector<ASCIILiteral> serializedIdentifiers()
static_assert(sizeof(uint64_t) == sizeof(WebCore::OpaqueOriginIdentifier));
static_assert(sizeof(uint64_t) == sizeof(WebCore::PageIdentifier));
static_assert(sizeof(uint64_t) == sizeof(WebCore::PlaybackTargetClientContextIdentifier));
static_assert(sizeof(uint64_t) == sizeof(WebCore::PushSubscriptionIdentifier));
static_assert(sizeof(uint64_t) == sizeof(WebCore::PortIdentifier));
static_assert(sizeof(uint64_t) == sizeof(WebCore::ProcessIdentifier));
static_assert(sizeof(uint64_t) == sizeof(WebCore::PushSubscriptionIdentifier));
static_assert(sizeof(uint64_t) == sizeof(WebCore::RTCDataChannelLocalIdentifier));
static_assert(sizeof(uint64_t) == sizeof(WebCore::RealtimeMediaSourceIdentifier));
static_assert(sizeof(uint64_t) == sizeof(WebCore::RenderingResourceIdentifier));
static_assert(sizeof(uint64_t) == sizeof(WebCore::ResourceLoaderIdentifier));
static_assert(sizeof(uint64_t) == sizeof(WebCore::RTCDataChannelLocalIdentifier));
static_assert(sizeof(uint64_t) == sizeof(WebCore::SWServerConnectionIdentifier));
static_assert(sizeof(uint64_t) == sizeof(WebCore::ServiceWorkerIdentifier));
static_assert(sizeof(uint64_t) == sizeof(WebCore::ServiceWorkerJobIdentifier));
Expand Down Expand Up @@ -505,9 +507,9 @@ Vector<ASCIILiteral> serializedIdentifiers()
static_assert(sizeof(uint64_t) == sizeof(WebKit::RemoteLegacyCDMSessionIdentifier));
#endif
static_assert(sizeof(uint64_t) == sizeof(WebKit::RemoteMediaResourceIdentifier));
static_assert(sizeof(uint64_t) == sizeof(WebKit::RemoteRemoteCommandListenerIdentifier));
static_assert(sizeof(uint64_t) == sizeof(WebKit::RemoteSerializedImageBufferIdentifier));
static_assert(sizeof(uint64_t) == sizeof(WebKit::RemoteVideoFrameIdentifier));
static_assert(sizeof(uint64_t) == sizeof(WebKit::RemoteRemoteCommandListenerIdentifier));
static_assert(sizeof(uint64_t) == sizeof(WebKit::RenderingBackendIdentifier));
static_assert(sizeof(uint64_t) == sizeof(WebKit::RenderingUpdateID));
static_assert(sizeof(uint64_t) == sizeof(WebKit::RetrieveRecordResponseBodyCallbackIdentifier));
Expand All @@ -525,6 +527,8 @@ Vector<ASCIILiteral> serializedIdentifiers()
static_assert(sizeof(uint64_t) == sizeof(WebKit::VideoEncoderIdentifier));
static_assert(sizeof(uint64_t) == sizeof(WebKit::WebExtensionContextIdentifier));
static_assert(sizeof(uint64_t) == sizeof(WebKit::WebExtensionControllerIdentifier));
static_assert(sizeof(uint64_t) == sizeof(WebKit::WebExtensionTabIdentifier));
static_assert(sizeof(uint64_t) == sizeof(WebKit::WebExtensionWindowIdentifier));
static_assert(sizeof(uint64_t) == sizeof(WebKit::WebGPUIdentifier));
static_assert(sizeof(uint64_t) == sizeof(WebKit::WebPageProxyIdentifier));
static_assert(sizeof(uint64_t) == sizeof(WebKit::WebURLSchemeHandlerIdentifier));
Expand All @@ -546,13 +550,13 @@ Vector<ASCIILiteral> serializedIdentifiers()
"WebCore::OpaqueOriginIdentifier"_s,
"WebCore::PageIdentifier"_s,
"WebCore::PlaybackTargetClientContextIdentifier"_s,
"WebCore::PushSubscriptionIdentifier"_s,
"WebCore::PortIdentifier"_s,
"WebCore::ProcessIdentifier"_s,
"WebCore::PushSubscriptionIdentifier"_s,
"WebCore::RTCDataChannelLocalIdentifier"_s,
"WebCore::RealtimeMediaSourceIdentifier"_s,
"WebCore::RenderingResourceIdentifier"_s,
"WebCore::ResourceLoaderIdentifier"_s,
"WebCore::RTCDataChannelLocalIdentifier"_s,
"WebCore::SWServerConnectionIdentifier"_s,
"WebCore::ServiceWorkerIdentifier"_s,
"WebCore::ServiceWorkerJobIdentifier"_s,
Expand Down Expand Up @@ -602,9 +606,9 @@ Vector<ASCIILiteral> serializedIdentifiers()
"WebKit::RemoteLegacyCDMSessionIdentifier"_s,
#endif
"WebKit::RemoteMediaResourceIdentifier"_s,
"WebKit::RemoteRemoteCommandListenerIdentifier"_s,
"WebKit::RemoteSerializedImageBufferIdentifier"_s,
"WebKit::RemoteVideoFrameIdentifier"_s,
"WebKit::RemoteRemoteCommandListenerIdentifier"_s,
"WebKit::RenderingBackendIdentifier"_s,
"WebKit::RenderingUpdateID"_s,
"WebKit::RetrieveRecordResponseBodyCallbackIdentifier"_s,
Expand All @@ -622,6 +626,8 @@ Vector<ASCIILiteral> serializedIdentifiers()
"WebKit::VideoEncoderIdentifier"_s,
"WebKit::WebExtensionContextIdentifier"_s,
"WebKit::WebExtensionControllerIdentifier"_s,
"WebKit::WebExtensionTabIdentifier"_s,
"WebKit::WebExtensionWindowIdentifier"_s,
"WebKit::WebGPUIdentifier"_s,
"WebKit::WebPageProxyIdentifier"_s,
"WebKit::WebURLSchemeHandlerIdentifier"_s,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,8 @@
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

#if ENABLE(WK_WEB_EXTENSIONS)
headers: <WebKit/WebExtensionEventListenerType.h>

headers: "WebExtensionEventListenerType.h"

enum class WebKit::WebExtensionEventListenerType : uint8_t {
Unknown,
Expand Down Expand Up @@ -82,4 +83,5 @@ enum class WebKit::WebExtensionEventListenerType : uint8_t {
DownloadsOnCreated,
DownloadsOnChanged,
};

#endif
48 changes: 48 additions & 0 deletions Source/WebKit/Shared/Extensions/WebExtensionTab.serialization.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
# Copyright (C) 2023 Apple Inc. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR
# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

#if ENABLE(WK_WEB_EXTENSIONS)

struct WebKit::WebExtensionTabParameters {
std::optional<WebKit::WebExtensionTabIdentifier> identifier;

std::optional<URL> url;
std::optional<String> title;

std::optional<WebKit::WebExtensionWindowIdentifier> windowIdentifier;
std::optional<size_t> index;
std::optional<CGSize> size;

std::optional<WebKit::WebExtensionTabIdentifier> parentTabIdentifier;

std::optional<bool> active;
std::optional<bool> selected;
std::optional<bool> pinned;
std::optional<bool> audible;
std::optional<bool> muted;
std::optional<bool> loading;
std::optional<bool> privateBrowsing;
std::optional<bool> readerModeAvailable;
std::optional<bool> showingReaderMode;
}

#endif
50 changes: 50 additions & 0 deletions Source/WebKit/Shared/Extensions/WebExtensionTabIdentifier.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,4 +32,54 @@ namespace WebKit {
struct WebExtensionTabIdentifierType;
using WebExtensionTabIdentifier = ObjectIdentifier<WebExtensionTabIdentifierType>;

struct WebExtensionTabConstants {
static constexpr double None { -1 };

static constexpr const WebExtensionTabIdentifier NoneIdentifier { std::numeric_limits<uint64_t>::max() - 1 };
};

inline bool isNone(WebExtensionTabIdentifier identifier)
{
return identifier == WebExtensionTabConstants::NoneIdentifier;
}

inline bool isNone(std::optional<WebExtensionTabIdentifier> identifier)
{
return identifier && isNone(identifier.value());
}

inline bool isValid(std::optional<WebExtensionTabIdentifier> identifier)
{
return identifier && !isNone(identifier.value());
}

inline std::optional<WebExtensionTabIdentifier> toWebExtensionTabIdentifier(double identifier)
{
if (identifier == WebExtensionTabConstants::None)
return WebExtensionTabConstants::NoneIdentifier;

if (!std::isfinite(identifier) || identifier <= 0 || identifier >= static_cast<double>(WebExtensionTabConstants::NoneIdentifier.toUInt64()))
return std::nullopt;

double integral;
if (std::modf(identifier, &integral) != 0.0) {
// Only integral numbers can be used.
return std::nullopt;
}

WebExtensionTabIdentifier result { static_cast<uint64_t>(identifier) };
ASSERT(result.isValid());
return result;
}

inline double toWebAPI(WebExtensionTabIdentifier identifier)
{
ASSERT(identifier.isValid());

if (isNone(identifier))
return WebExtensionTabConstants::None;

return static_cast<double>(identifier.toUInt64());
}

}
61 changes: 61 additions & 0 deletions Source/WebKit/Shared/Extensions/WebExtensionTabParameters.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
/*
* Copyright (C) 2023 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGE.
*/

#pragma once

#if ENABLE(WK_WEB_EXTENSIONS)

#include "WebExtensionTabIdentifier.h"
#include "WebExtensionWindowIdentifier.h"
#include <wtf/Forward.h>

namespace WebKit {

struct WebExtensionTabParameters {
std::optional<WebExtensionTabIdentifier> identifier;

std::optional<URL> url;
std::optional<String> title;

std::optional<WebExtensionWindowIdentifier> windowIdentifier;
std::optional<size_t> index;
std::optional<CGSize> size;

std::optional<WebExtensionTabIdentifier> parentTabIdentifier;

std::optional<bool> active;
std::optional<bool> selected;
std::optional<bool> pinned;
std::optional<bool> audible;
std::optional<bool> muted;
std::optional<bool> loading;
std::optional<bool> privateBrowsing;
std::optional<bool> readerModeAvailable;
std::optional<bool> showingReaderMode;
};

} // namespace WebKit

#endif // ENABLE(WK_WEB_EXTENSIONS)
Loading

0 comments on commit 589a9da

Please sign in to comment.