Skip to content

Commit 0793fab

Browse files
ItsJamie9494mnutt
authored andcommitted
[GTK] Make WebExtensions compile on Linux
https://webkit.org/b/284215 Reviewed by Timothy Hatcher. Create a CMake option to enable WK_WEB_EXTENSIONS on Linux, and fixes issues regarding compile WebKitGtk with WK_WEB_EXTENSIONS enabled. * Source/WTF/wtf/PlatformEnableGlib.h: * Source/WebCore/platform/text/LocaleICU.cpp: (WebCore::LocaleICU::defaultWritingDirection const): * Source/WebCore/platform/text/LocaleICU.h: * Source/WebCore/platform/text/PlatformLocale.h: * Source/WebKit/CMakeLists.txt: * Source/WebKit/Shared/Extensions/WebExtensionControllerParameters.h: * Source/WebKit/Shared/Extensions/WebExtensionControllerParameters.serialization.in: * Source/WebKit/Shared/Extensions/WebExtensionTab.serialization.in: * Source/WebKit/Shared/Extensions/WebExtensionTabParameters.h: * Source/WebKit/Shared/Extensions/WebExtensionWindow.serialization.in: * Source/WebKit/Shared/Extensions/WebExtensionWindowParameters.h: * Source/WebKit/UIProcess/API/APIPageConfiguration.cpp: (API::PageConfiguration::maskedURLSchemes const): * Source/WebKit/UIProcess/Extensions/WebExtensionAction.h: * Source/WebKit/UIProcess/Extensions/WebExtensionContext.h: * Source/WebKit/UIProcess/Extensions/WebExtensionController.cpp: (WebKit::WebExtensionController::WebExtensionController): * Source/WebKit/UIProcess/Extensions/WebExtensionController.h: * Source/WebKit/UIProcess/Extensions/WebExtensionControllerConfiguration.cpp: * Source/WebKit/UIProcess/Extensions/WebExtensionControllerConfiguration.h: * Source/WebKit/UIProcess/Extensions/WebExtensionDataRecord.h: * Source/WebKit/UIProcess/Extensions/WebExtensionDynamicScripts.h: * Source/WebKit/UIProcess/Extensions/WebExtensionMatchPattern.cpp: * Source/WebKit/UIProcess/Extensions/WebExtensionMessagePort.h: * Source/WebKit/UIProcess/Extensions/WebExtensionTab.h: * Source/WebKit/UIProcess/Extensions/WebExtensionWindow.h: * Source/WebKit/UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::WebPageProxy): (WebKit::m_pageForTesting): (WebKit::WebPageProxy::close): (WebKit::WebPageProxy::resourceLoadDidSendRequest): (WebKit::WebPageProxy::resourceLoadDidPerformHTTPRedirection): (WebKit::WebPageProxy::resourceLoadDidReceiveChallenge): (WebKit::WebPageProxy::resourceLoadDidReceiveResponse): (WebKit::WebPageProxy::resourceLoadDidCompleteWithError): (WebKit::WebPageProxy::creationParameters): * Source/WebKit/WebProcess/Extensions/API/WebExtensionAPIEvent.h: * Source/WebKit/WebProcess/Extensions/API/WebExtensionAPILocalization.h: * Source/WebKit/WebProcess/Extensions/API/WebExtensionAPIWebNavigationEvent.h: * Source/WebKit/WebProcess/Extensions/API/WebExtensionAPIWebRequestEvent.h: * Source/WebKit/WebProcess/Extensions/API/WebExtensionAPIWindowsEvent.h: * Source/WebKit/WebProcess/Extensions/Bindings/JSWebExtensionWrapper.h: * Source/WebKit/WebProcess/Extensions/WebExtensionContextProxy.h: * Source/WebKit/WebProcess/Extensions/WebExtensionControllerProxy.h: * Source/WebKit/WebProcess/Network/WebLoaderStrategy.cpp: (WebKit::addParametersShared): * Source/WebKit/WebProcess/WebCoreSupport/WebLocalFrameLoaderClient.cpp: (WebKit::WebLocalFrameLoaderClient::dispatchDidStartProvisionalLoad): (WebKit::WebLocalFrameLoaderClient::dispatchDidCommitLoad): (WebKit::WebLocalFrameLoaderClient::dispatchDidFailProvisionalLoad): (WebKit::WebLocalFrameLoaderClient::dispatchDidFailLoad): (WebKit::WebLocalFrameLoaderClient::dispatchDidFinishLoad): (WebKit::WebLocalFrameLoaderClient::dispatchGlobalObjectAvailable): (WebKit::WebLocalFrameLoaderClient::dispatchServiceWorkerGlobalObjectAvailable): * Source/WebKit/WebProcess/WebPage/WebPage.cpp: (WebKit::m_textAnimationController): * Source/WebKit/WebProcess/WebPage/WebPage.h: Canonical link: https://commits.webkit.org/287517@main
1 parent 26e0e62 commit 0793fab

40 files changed

+263
-52
lines changed

Source/WebCore/platform/text/LocaleICU.cpp

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,14 @@
3131
#include "config.h"
3232
#include "LocaleICU.h"
3333

34+
#include "LocaleToScriptMapping.h"
3435
#include "LocalizedStrings.h"
36+
#include <hb-icu.h>
37+
#include <hb.h>
3538
#include <limits>
3639
#include <unicode/udatpg.h>
3740
#include <unicode/uloc.h>
41+
#include <unicode/uscript.h>
3842
#include <wtf/DateMath.h>
3943
#include <wtf/text/StringBuffer.h>
4044
#include <wtf/text/StringBuilder.h>
@@ -66,6 +70,21 @@ LocaleICU::~LocaleICU()
6670
#endif
6771
}
6872

73+
Locale::WritingDirection LocaleICU::defaultWritingDirection() const
74+
{
75+
UScriptCode icuScript = localeToScriptCodeForFontSelection(m_locale.span());
76+
hb_script_t script = hb_icu_script_to_script(icuScript);
77+
78+
switch (hb_script_get_horizontal_direction(script)) {
79+
case HB_DIRECTION_LTR:
80+
return WritingDirection::LeftToRight;
81+
case HB_DIRECTION_RTL:
82+
return WritingDirection::RightToLeft;
83+
default:
84+
return WritingDirection::Default;
85+
}
86+
}
87+
6988
#if !UCONFIG_NO_FORMATTING
7089
String LocaleICU::decimalSymbol(UNumberFormatSymbol symbol)
7190
{

Source/WebCore/platform/text/LocaleICU.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,8 @@ class LocaleICU : public Locale {
4747
explicit LocaleICU(const char*);
4848
virtual ~LocaleICU();
4949

50+
Locale::WritingDirection defaultWritingDirection() const override;
51+
5052
#if ENABLE(DATE_AND_TIME_INPUT_TYPES)
5153
String dateFormat() override;
5254
String monthFormat() override;

Source/WebCore/platform/text/PlatformLocale.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ class Locale {
6565
RightToLeft
6666
};
6767

68-
#if PLATFORM(COCOA)
68+
#if PLATFORM(GTK) || PLATFORM(WPE) || PLATFORM(COCOA)
6969
// Returns the default writing direction for the specified locale.
7070
virtual WritingDirection defaultWritingDirection() const = 0;
7171
#endif

Source/WebKit/CMakeLists.txt

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ set(WebKit_PRIVATE_INCLUDE_DIRECTORIES
6060
"${WEBKIT_DIR}/UIProcess/Automation"
6161
"${WEBKIT_DIR}/UIProcess/DigitalCredentials"
6262
"${WEBKIT_DIR}/UIProcess/Downloads"
63+
"${WEBKIT_DIR}/UIProcess/Extensions"
6364
"${WEBKIT_DIR}/UIProcess/Gamepad"
6465
"${WEBKIT_DIR}/UIProcess/GPU"
6566
"${WEBKIT_DIR}/UIProcess/Inspector"
@@ -85,6 +86,9 @@ set(WebKit_PRIVATE_INCLUDE_DIRECTORIES
8586
"${WEBKIT_DIR}/WebProcess/Databases"
8687
"${WEBKIT_DIR}/WebProcess/Databases/IndexedDB"
8788
"${WEBKIT_DIR}/WebProcess/EncryptedMedia"
89+
"${WEBKIT_DIR}/WebProcess/Extensions"
90+
"${WEBKIT_DIR}/WebProcess/Extensions/API"
91+
"${WEBKIT_DIR}/WebProcess/Extensions/Bindings"
8892
"${WEBKIT_DIR}/WebProcess/FileAPI"
8993
"${WEBKIT_DIR}/WebProcess/FullScreen"
9094
"${WEBKIT_DIR}/WebProcess/Gamepad"
@@ -132,6 +136,43 @@ list(APPEND WebKit_UNIFIED_SOURCE_LIST_FILES
132136
"Platform/Sources.txt"
133137
)
134138

139+
set(WebKit_BINDINGS_IN_FILES
140+
WebProcess/Extensions/Interfaces/WebExtensionAPIAction
141+
WebProcess/Extensions/Interfaces/WebExtensionAPIAlarms
142+
WebProcess/Extensions/Interfaces/WebExtensionAPICommands
143+
WebProcess/Extensions/Interfaces/WebExtensionAPICookies
144+
WebProcess/Extensions/Interfaces/WebExtensionAPIDeclarativeNetRequest
145+
WebProcess/Extensions/Interfaces/WebExtensionAPIDevTools
146+
WebProcess/Extensions/Interfaces/WebExtensionAPIDevToolsExtensionPanel
147+
WebProcess/Extensions/Interfaces/WebExtensionAPIDevToolsInspectedWindow
148+
WebProcess/Extensions/Interfaces/WebExtensionAPIDevToolsNetwork
149+
WebProcess/Extensions/Interfaces/WebExtensionAPIDevToolsPanels
150+
WebProcess/Extensions/Interfaces/WebExtensionAPIEvent
151+
WebProcess/Extensions/Interfaces/WebExtensionAPIExtension
152+
WebProcess/Extensions/Interfaces/WebExtensionAPILocalization
153+
WebProcess/Extensions/Interfaces/WebExtensionAPIMenus
154+
WebProcess/Extensions/Interfaces/WebExtensionAPINamespace
155+
WebProcess/Extensions/Interfaces/WebExtensionAPINotifications
156+
WebProcess/Extensions/Interfaces/WebExtensionAPIPermissions
157+
WebProcess/Extensions/Interfaces/WebExtensionAPIPort
158+
WebProcess/Extensions/Interfaces/WebExtensionAPIRuntime
159+
WebProcess/Extensions/Interfaces/WebExtensionAPIScripting
160+
WebProcess/Extensions/Interfaces/WebExtensionAPISidePanel
161+
WebProcess/Extensions/Interfaces/WebExtensionAPISidebarAction
162+
WebProcess/Extensions/Interfaces/WebExtensionAPIStorage
163+
WebProcess/Extensions/Interfaces/WebExtensionAPIStorageArea
164+
WebProcess/Extensions/Interfaces/WebExtensionAPITabs
165+
WebProcess/Extensions/Interfaces/WebExtensionAPITest
166+
WebProcess/Extensions/Interfaces/WebExtensionAPIWebNavigation
167+
WebProcess/Extensions/Interfaces/WebExtensionAPIWebNavigationEvent
168+
WebProcess/Extensions/Interfaces/WebExtensionAPIWebPageNamespace
169+
WebProcess/Extensions/Interfaces/WebExtensionAPIWebPageRuntime
170+
WebProcess/Extensions/Interfaces/WebExtensionAPIWebRequest
171+
WebProcess/Extensions/Interfaces/WebExtensionAPIWebRequestEvent
172+
WebProcess/Extensions/Interfaces/WebExtensionAPIWindows
173+
WebProcess/Extensions/Interfaces/WebExtensionAPIWindowsEvent
174+
)
175+
135176
set(WebKit_MESSAGES_IN_FILES
136177
GPUProcess/GPUConnectionToWebProcess
137178
GPUProcess/GPUProcess
@@ -243,6 +284,9 @@ set(WebKit_MESSAGES_IN_FILES
243284
UIProcess/DigitalCredentials/DigitalCredentialsCoordinatorProxy
244285
UIProcess/DrawingAreaProxy
245286

287+
UIProcess/Extensions/WebExtensionContext
288+
UIProcess/Extensions/WebExtensionController
289+
246290
UIProcess/Media/RemoteMediaSessionCoordinatorProxy
247291

248292
UIProcess/SpeechRecognitionRemoteRealtimeMediaSourceManager
@@ -279,6 +323,9 @@ set(WebKit_MESSAGES_IN_FILES
279323

280324
WebProcess/Databases/IndexedDB/WebIDBConnectionToServer
281325

326+
WebProcess/Extensions/WebExtensionContextProxy
327+
WebProcess/Extensions/WebExtensionControllerProxy
328+
282329
WebProcess/FullScreen/WebFullScreenManager
283330

284331
WebProcess/GPU/GPUProcessConnection
@@ -513,7 +560,25 @@ set(WebKit_SERIALIZATION_IN_FILES
513560

514561
Shared/Databases/IndexedDB/WebIDBResult.serialization.in
515562

563+
Shared/Extensions/WebExtensionActionClickBehavior.serialization.in
564+
Shared/Extensions/WebExtensionAlarmParameters.serialization.in
565+
Shared/Extensions/WebExtensionCommandParameters.serialization.in
566+
Shared/Extensions/WebExtensionContentWorldType.serialization.in
567+
Shared/Extensions/WebExtensionContext.serialization.in
568+
Shared/Extensions/WebExtensionContextParameters.serialization.in
569+
Shared/Extensions/WebExtensionControllerParameters.serialization.in
570+
Shared/Extensions/WebExtensionCookieParameters.serialization.in
571+
Shared/Extensions/WebExtensionDynamicScripts.serialization.in
516572
Shared/Extensions/WebExtensionEventListenerType.serialization.in
573+
Shared/Extensions/WebExtensionFrameParameters.serialization.in
574+
Shared/Extensions/WebExtensionMatchedRuleParameters.serialization.in
575+
Shared/Extensions/WebExtensionMenuItem.serialization.in
576+
Shared/Extensions/WebExtensionMessageSenderParameters.serialization.in
577+
Shared/Extensions/WebExtensionMessageTargetParameters.serialization.in
578+
Shared/Extensions/WebExtensionSidebarParameters.serialization.in
579+
Shared/Extensions/WebExtensionStorage.serialization.in
580+
Shared/Extensions/WebExtensionTab.serialization.in
581+
Shared/Extensions/WebExtensionWindow.serialization.in
517582

518583
Shared/Gamepad/GamepadData.serialization.in
519584

@@ -798,6 +863,36 @@ macro(GENERATE_MESSAGE_SOURCES _output_source _inputs)
798863
endmacro()
799864
GENERATE_MESSAGE_SOURCES(WebKit_DERIVED_SOURCES "${WebKit_MESSAGES_IN_FILES}")
800865

866+
# Helper macro which wraps the bindings script
867+
# _output_source is a list name which will contain generated sources.(eg. WebKit_SOURCES)
868+
# _inputs are .idl files to generate.
869+
macro(GENERATE_IDL_BINDINGS _output_source _inputs)
870+
unset(_input_files)
871+
unset(_outputs)
872+
foreach (_file IN ITEMS ${_inputs})
873+
get_filename_component(_name ${_file} NAME_WE)
874+
list(APPEND _input_files ${WEBKIT_DIR}/${_file}.idl)
875+
list(APPEND _outputs
876+
${WebKit_DERIVED_SOURCES_DIR}/JS${_name}.mm
877+
878+
${WebKit_DERIVED_SOURCES_DIR}/JS${_name}.h
879+
)
880+
list(APPEND ${_output_source} ${WebKit_DERIVED_SOURCES_DIR}/JS${_name}.h)
881+
endforeach ()
882+
883+
add_custom_command(
884+
OUTPUT
885+
${_outputs}
886+
MAIN_DEPENDENCY ${WEBCORE_DIR}/bindings/scripts/generate-bindings-all.pl
887+
DEPENDS
888+
${_input_files}
889+
COMMAND ${PERL_EXECUTABLE} -I "${WEBKIT_DIR}/WebProcess/Extensions/Bindings/Scripts" ${WEBCORE_DIR}/bindings/scripts/generate-bindings.pl --outputDir . --generator Extensions --idlAttributesFile "${WEBKIT_DIR}/WebProcess/Extensions/Bindings/Scripts/IDLAttributes.json" --idlFileNamesList WebExtensionIDLFileNamesList.txt ${_input_files}
890+
WORKING_DIRECTORY ${WebKit_DERIVED_SOURCES_DIR}
891+
VERBATIM
892+
)
893+
endmacro()
894+
GENERATE_IDL_BINDINGS(WebKit_DERIVED_SOURCES "${WebKit_BINDINGS_IN_FILES}")
895+
801896
foreach (in_file ${WebKit_SERIALIZATION_IN_FILES})
802897
list(APPEND WebKit_SERIALIZATION_DEPENDENCIES "${WEBKIT_DIR}/${in_file}")
803898
endforeach ()

Source/WebKit/Shared/Extensions/WebExtensionControllerParameters.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,7 @@ struct WebExtensionControllerParameters {
3737

3838
bool testingMode { false };
3939

40-
#if PLATFORM(COCOA)
4140
Vector<WebExtensionContextParameters> contextParameters;
42-
#endif
4341
};
4442

4543
} // namespace WebKit

Source/WebKit/Shared/Extensions/WebExtensionControllerParameters.serialization.in

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,7 @@ struct WebKit::WebExtensionControllerParameters {
2727

2828
bool testingMode;
2929

30-
#if PLATFORM(COCOA)
3130
Vector<WebKit::WebExtensionContextParameters> contextParameters;
32-
#endif
3331
}
3432

3533
#endif

Source/WebKit/Shared/Extensions/WebExtensionTab.serialization.in

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,9 @@ struct WebKit::WebExtensionTabParameters {
3232

3333
std::optional<WebKit::WebExtensionWindowIdentifier> windowIdentifier;
3434
std::optional<size_t> index;
35+
#if PLATFORM(COCOA)
3536
std::optional<CGSize> size;
37+
#endif
3638

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

Source/WebKit/Shared/Extensions/WebExtensionTabParameters.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,9 @@ struct WebExtensionTabParameters {
4141

4242
std::optional<WebExtensionWindowIdentifier> windowIdentifier;
4343
std::optional<size_t> index;
44+
#if PLATFORM(COCOA)
4445
std::optional<CGSize> size;
46+
#endif
4547

4648
std::optional<WebExtensionTabIdentifier> parentTabIdentifier;
4749

Source/WebKit/Shared/Extensions/WebExtensionWindow.serialization.in

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,9 @@ struct WebKit::WebExtensionWindowParameters {
3232

3333
std::optional<Vector<WebKit::WebExtensionTabParameters>> tabs;
3434

35+
#if PLATFORM(COCOA)
3536
std::optional<CGRect> frame;
37+
#endif
3638

3739
std::optional<bool> focused;
3840
std::optional<bool> privateBrowsing;

Source/WebKit/Shared/Extensions/WebExtensionWindowParameters.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,9 @@ struct WebExtensionWindowParameters {
4242

4343
std::optional<Vector<WebExtensionTabParameters>> tabs;
4444

45+
#if PLATFORM(COCOA)
4546
std::optional<CGRect> frame;
47+
#endif
4648

4749
std::optional<bool> focused;
4850
std::optional<bool> privateBrowsing;

0 commit comments

Comments
 (0)