[webkit-gtk] Make unit tests buildable from tarballs

Tomas Popela tpopela at redhat.com
Fri Jan 11 01:43:22 PST 2019


Hi everyone,

with my downstream hat on I find it quite problematic that it's not
possible to build the unit tests from our tarballs. Currently there is a
trend when the CI and all kinds of testing automation are taking places in
various distributions. I personally find it really important as it adds
another layer of testing under the upstream one. I think it's even more
important than the upstream one as the upstream one runs against given set
of packages (jhbuild), but in the end the WebKitGTK+ runs on consumers
system, where the our required dependencies could be (and are) in different
versions. Also there might be some downstream patches (like for big-endian
architectures) and we should make it easier for downstream packagers to
test their modifications (I have to confess that my big-endian downstream
patch made the JSC in the Fedora to misbehave) and see whether their
freshly compiled WebKitGTK+ is functional (in the scope of what unit tests
are covering).. I know that we do have the build bots running various
distributions, but we can't support all the ones where WebKitGTK+ is used -
we could leverage that on downstreams.

So I looked how the current situation looks like:

 * In CMAKE files the ENABLE_API_TESTS is guarded by the DEVELOPER_MODE
 * The tests itself depends on the WebKit C API, that is not exported in
our shared library (it's filtered out by the webkitglib-symbols.map). The
list of what symbols are needed is on the end of this mail.
 * Even if we add all the required C APIs to the map, then the compilation
will the tests use private functions that are again not exported - e.g. the
WebProcessTest uses webkitWebExtensionSetGarbageCollectOnPageDestroy()
from Source/WebKit/WebProcess/InjectedBundle/API/glib/WebKitWebExtensionPrivate.h
 * To be able to run the tests from the builddir we would have to move
functions or their parts like getExecutablePath(), findWebKitProcess() in
Source/WebKit/Shared/glib/ProcessExecutablePathGLib.cpp and
injectedBundleDirectory() in
Source/WebKit/UIProcess/API/glib/WebKitWebContext.cpp outside of the
DEVELOPER_MODE ifdefs.
 * It "probably" needs files that are not included in the tarball

The hardest task here is what to do with the WebKit C APIs and private
functions. We definitely don't want to have these visible to our users.
Then we could probably build lets say the libwebkit2gtktest library that
could be the same as the libwebkit2gtk library, but without the
webkitglib-symbols.map applied (I don't know if it's possible to filter the
symbols ex-post - if so, then we would the libwebkit2gtk first, then copy
it as libwebkit2gtktest and then stripped the symbols from it). It's a
rough idea and I'm not sure whether it can work.

Comments/feedback/ideas welcomed!

Tom


--- a/Source/WebKit/webkitglib-symbols.map
+++ b/Source/WebKit/webkitglib-symbols.map
@@ -15,7 +15,144 @@ global:
     "bmalloc::vmPageSize()::cached";
     "WebKit::WebKitExtensionManager::singleton()";
     "WebKit::WebKitExtensionManager::initialize(WebKit::InjectedBundle*,
API::Object*)";
+    "WebKit::InputMethodFilter::EventFakedForComposition)>&&)";
+    "WebKit::InputMethodFilter::~InputMethodFilter()";
+    "WebKit::InputMethodFilter::InputMethodFilter()";
+    "WebKit::InputMethodFilter::notifyFocusedOut()";
+    "WebKit::InputMethodFilter::notifyMouseButtonPress()";
+    "WebKit::InputMethodFilter::setEnabled(bool)";
+    "WebKit::InputMethodFilter::filterKeyEvent(_GdkEventKey*,
WTF::Function<void (WebCore::CompositionResults const&,
WebKit::InputMethodFilter::EventFakedForComposition)>&&)";
   };
+  WKBackForwardListGetBackListCount;
+  WKBackForwardListGetForwardListCount;
+  WKBackForwardListItemCopyURL;
+  WKBooleanGetTypeID;
+  WKBooleanGetValue;
+  WKContextCreate;
+  WKContextCreateWithInjectedBundlePath;
+  WKContextGetCookieManager;
+  WKContextGetGeolocationManager;
+  WKContextPostMessageToInjectedBundle;
+  WKContextRegisterURLSchemeAsEmptyDocument;
+  WKContextSetCacheModel;
+  WKContextSetDownloadClient;
+  WKContextSetHistoryClient;
+  WKContextSetInitializationUserDataForInjectedBundle;
+  WKContextSetInjectedBundleClient;
+  WKCookieManagerGetHTTPCookieAcceptPolicy;
+  WKCookieManagerSetHTTPCookieAcceptPolicy;
+  WKDataCreate;
+  WKDictionaryGetItemForKey;
+  WKDictionaryGetTypeID;
+  WKDictionarySetItem;
+  WKDownloadCancel;
+  WKFrameCopyMIMEType;
+  WKFrameCopyProvisionalURL;
+  WKFrameCopyURL;
+  WKFrameGetFrameLoadState;
+  WKFrameGetPage;
+  WKFramePolicyListenerDownload;
+  WKFramePolicyListenerUse;
+  WKGeolocationManagerProviderDidChangePosition;
+  WKGeolocationManagerSetProvider;
+  WKGeolocationPermissionRequestAllow;
+  WKGeolocationPositionCreate;
+  WKGetTypeID;
+  WKMutableDictionaryCreate;
+  WKPageCanGoBack;
+  WKPageClose;
+  WKPageConfigurationCreate;
+  WKPageConfigurationSetContext;
+  WKPageConfigurationSetPageGroup;
+  WKPageConfigurationSetRelatedPage;
+  WKPageCopyActiveURL;
+  WKPageCopySessionState;
+  WKPageCountStringMatches;
+  WKPageForceRepaint;
+  WKPageGetBackForwardList;
+  WKPageGetContext;
+  WKPageGetMainFrame;
+  WKPageGetPageGroup;
+  WKPageGetScaleFactor;
+  WKPageGetSessionBackForwardListItemValueType;
+  WKPageGoBack;
+  WKPageGroupCreateWithIdentifier;
+  WKPageGroupSetPreferences;
+  WKPageLoadAlternateHTMLString;
+  WKPageLoadData;
+  WKPageLoadFile;
+  WKPageLoadHTMLString;
+  WKPageLoadPlainTextString;
+  WKPageLoadURL;
+  WKPageReload;
+  WKPageRestoreFromSessionState;
+  WKPageRunJavaScriptInMainFrame;
+  WKPageSetCustomUserAgent;
+  WKPageSetPageFindClient;
+  WKPageSetPageNavigationClient;
+  WKPageSetPageUIClient;
+  WKPageStopLoading;
+  WKPageTerminate;
+  WKPreferencesCopyCursiveFontFamily;
+  WKPreferencesCopyFantasyFontFamily;
+  WKPreferencesCopyFixedFontFamily;
+  WKPreferencesCopyPictographFontFamily;
+  WKPreferencesCopySansSerifFontFamily;
+  WKPreferencesCopySerifFontFamily;
+  WKPreferencesCopyStandardFontFamily;
+  WKPreferencesCreate;
+  WKPreferencesCreateCopy;
+  WKPreferencesCreateWithIdentifier;
+  WKPreferencesGetAcceleratedCompositingEnabled;
+  WKPreferencesGetCompositingBordersVisible;
+  WKPreferencesGetCompositingRepaintCountersVisible;
+  WKPreferencesGetDefaultFontSize;
+  WKPreferencesGetDeveloperExtrasEnabled;
+  WKPreferencesGetFrameFlatteningEnabled;
+  WKPreferencesGetHyperlinkAuditingEnabled;
+  WKPreferencesGetJavaEnabled;
+  WKPreferencesGetJavaScriptCanOpenWindowsAutomatically;
+  WKPreferencesGetJavaScriptEnabled;
+  WKPreferencesGetLoadsImagesAutomatically;
+  WKPreferencesGetLocalStorageEnabled;
+  WKPreferencesGetMinimumFontSize;
+  WKPreferencesGetNeedsSiteSpecificQuirks;
+  WKPreferencesGetOfflineWebApplicationCacheEnabled;
+  WKPreferencesGetPluginsEnabled;
+  WKPreferencesGetPrivateBrowsingEnabled;
+  WKPreferencesGetStorageBlockingPolicy;
+  WKPreferencesGetTextAreasAreResizable;
+  WKPreferencesGetTextAutosizingEnabled;
+  WKPreferencesGetTypeID;
+  WKPreferencesGetXSSAuditorEnabled;
+  WKPreferencesSetDefaultFontSize;
+  WKPreferencesSetPrivateBrowsingEnabled;
+  WKPreferencesSetUniversalAccessFromFileURLsAllowed;
+  WKRelease;
+  WKRetain;
+  WKSerializedScriptValueDeserialize;
+  WKSessionStateCopyData;
+  WKSessionStateCreateFromData;
+  WKStringCopyJSString;
+  WKStringCreateWithJSString;
+  WKStringCreateWithUTF8CString;
+  WKStringGetCharacters;
+  WKStringGetLength;
+  WKStringGetMaximumUTF8CStringSize;
+  WKStringGetTypeID;
+  WKStringGetUTF8CString;
+  WKStringIsEmpty;
+  WKStringIsEqual;
+  WKStringIsEqualToUTF8CString;
+  WKURLCopyLastPathComponent;
+  WKURLCopyString;
+  WKURLCreateWithBaseURL;
+  WKURLCreateWithUTF8CString;
+  WKURLIsEqual;
+  WKURLRequestCopyURL;
+  WKURLRequestCreateWithWKURL;
+  WKViewCreate;
+  WKViewGetPage;
 local:
   *;
 };
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.webkit.org/pipermail/webkit-gtk/attachments/20190111/140d0b61/attachment.html>


More information about the webkit-gtk mailing list