WebKit Bugzilla
Attachment 347273 Details for
Bug 187773
: Add Web API Statistics Collection
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch
bug-187773-20180816103236.patch (text/plain), 91.62 KB, created by
Woodrow Wang
on 2018-08-16 10:32:37 PDT
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Woodrow Wang
Created:
2018-08-16 10:32:37 PDT
Size:
91.62 KB
patch
obsolete
>Subversion Revision: 234888 >diff --git a/Source/JavaScriptCore/ChangeLog b/Source/JavaScriptCore/ChangeLog >index 81a4c67198b78679752e497cafa7d55f0593545e..da341e2959e724338c9b0d4cfb8b15769a68d4e5 100644 >--- a/Source/JavaScriptCore/ChangeLog >+++ b/Source/JavaScriptCore/ChangeLog >@@ -1,3 +1,15 @@ >+2018-07-18 Woodrow Wang <woodrow_wang@apple.com> >+ >+ Added Web API Statistics Collection >+ https://bugs.webkit.org/show_bug.cgi?id=187773 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Added a new flag ENABLE_WEB_API_STATISTICS to wrap all code in compile time flags for when >+ we would like to collect various web API statistics for analysis. >+ >+ * Configurations/FeatureDefines.xcconfig: >+ > 2018-08-14 Fujii Hironori <Hironori.Fujii@sony.com> > > Unreviewed, rolling out r234874 and r234876. >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index c052c632521fffed7f6a1b9181d118bdd56bcd27..12924f943cd163996d645b590f1bb4535f82ce70 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,74 @@ >+2018-07-18 Woodrow Wang <woodrow_wang@apple.com> >+ >+ Added Web API Statistics Collection >+ https://bugs.webkit.org/show_bug.cgi?id=187773 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Added a new flag ENABLE_WEB_API_STATISTICS to wrap all code in compile time flags for when >+ we would like to collect various web API statistics for analysis. >+ >+ Added data collection for web API statistics, specifically regarding the canvas, font loads, >+ screen functions, and navigator functions. All of the code is placed under the compile time flag >+ ENABLE_WEB_API_STATISTICS. The statistics are stored in a ResourceLoadStatistics object and written >+ to a plist on disk. Added a new file CanvasLog.h which includes a struct to keep track of HTML5 canvas >+ element read and writes. >+ >+ * Configurations/FeatureDefines.xcconfig: >+ * WebCore.xcodeproj/project.pbxproj: >+ * css/CSSFontSelector.cpp: >+ (WebCore::CSSFontSelector::fontRangesForFamily): >+ >+ For canvas statistics, we record any attempt at a canvas read, regardless of >+ whether or not it was successful, as we would like to keep track of the site's intent >+ in our predictions. >+ >+ * html/HTMLCanvasElement.cpp: >+ (WebCore::HTMLCanvasElement::toDataURL): >+ (WebCore::HTMLCanvasElement::toBlob): >+ (WebCore::HTMLCanvasElement::getImageData): >+ (WebCore::HTMLCanvasElement::toMediaSample): >+ (WebCore::HTMLCanvasElement::captureStream): >+ (WebCore::HTMLCanvasElement::logFingerprint): >+ >+ * html/HTMLCanvasElement.h: >+ * html/canvas/CanvasRenderingContext2D.cpp: >+ (WebCore::CanvasRenderingContext2D::measureText): >+ (WebCore::CanvasRenderingContext2D::drawTextInternal): >+ * loader/CanvasLog.h: Added. >+ * loader/ResourceLoadObserver.cpp: >+ (WebCore::ResourceLoadObserver::logFontLoad): >+ (WebCore::ResourceLoadObserver::logCanvasFingerprint): >+ (WebCore::ResourceLoadObserver::logNavigatorLoad): >+ (WebCore::ResourceLoadObserver::logScreenLoad): >+ * loader/ResourceLoadObserver.h: >+ * loader/ResourceLoadStatistics.cpp: >+ (WebCore::encodeCanvasLog): >+ (WebCore::ResourceLoadStatistics::encode const): >+ (WebCore::decodeCanvasLog): >+ (WebCore::ResourceLoadStatistics::decode): >+ (WebCore::ResourceLoadStatistics::toString const): >+ (WebCore::ResourceLoadStatistics::merge): >+ * loader/ResourceLoadStatistics.h: >+ * page/Navigator.cpp: >+ (WebCore::Navigator::appVersion const): >+ (WebCore::Navigator::userAgent const): >+ (WebCore::Navigator::plugins): >+ (WebCore::Navigator::mimeTypes): >+ (WebCore::Navigator::cookieEnabled const): >+ (WebCore::Navigator::javaEnabled const): >+ (WebCore::Navigator::standalone const): >+ (WebCore::Navigator::getStorageUpdates): >+ * page/Screen.cpp: >+ (WebCore::Screen::height const): >+ (WebCore::Screen::width const): >+ (WebCore::Screen::colorDepth const): >+ (WebCore::Screen::pixelDepth const): >+ (WebCore::Screen::availLeft const): >+ (WebCore::Screen::availTop const): >+ (WebCore::Screen::availHeight const): >+ (WebCore::Screen::availWidth const): >+ > 2018-08-15 Wenson Hsieh <wenson_hsieh@apple.com> > > [Attachment SPI] Remove attachment display mode options >diff --git a/Source/WebCore/PAL/ChangeLog b/Source/WebCore/PAL/ChangeLog >index 5268cbccff1434bf5017549ea543307c20bffeb9..7760c0c69da203f7d73baedc49f707e0068591bc 100644 >--- a/Source/WebCore/PAL/ChangeLog >+++ b/Source/WebCore/PAL/ChangeLog >@@ -1,3 +1,15 @@ >+2018-07-18 Woodrow Wang <woodrow_wang@apple.com> >+ >+ Added Web API Statistics Collection >+ https://bugs.webkit.org/show_bug.cgi?id=187773 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Added a new flag ENABLE_WEB_API_STATISTICS to wrap all code in compile time flags for when >+ we would like to collect various web API statistics for analysis. >+ >+ * Configurations/FeatureDefines.xcconfig: >+ > 2018-08-14 Ansh Shukla <ansh_shukla@apple.com> > > NSURLAuthenticationMethodOAuth challenges are surfaced to clients in -didReceiveAuthenticationChallenge as NSURLAuthenticationMethodDefault >diff --git a/Source/WebKit/ChangeLog b/Source/WebKit/ChangeLog >index 65b78a253c9de6d06d570c6bdfef158d67ac774b..eabfda38460d0a8e1dc6d229d4dc79d79882c1e7 100644 >--- a/Source/WebKit/ChangeLog >+++ b/Source/WebKit/ChangeLog >@@ -1,3 +1,23 @@ >+2018-07-18 Woodrow Wang <woodrow_wang@apple.com> >+ >+ Added Web API Statistics Collection >+ https://bugs.webkit.org/show_bug.cgi?id=187773 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Added a new flag ENABLE_WEB_API_STATISTICS to wrap all code in compile time flags for when >+ we would like to collect various web API statistics for analysis. >+ >+ Updated the resource load statistics model version to 13. >+ >+ Added encode and decode functions for the respective web API statistics. >+ >+ * Configurations/FeatureDefines.xcconfig: >+ * Shared/WebCoreArgumentCoders.cpp: >+ (IPC::ArgumentCoder<ResourceLoadStatistics>::encode): >+ (IPC::ArgumentCoder<ResourceLoadStatistics>::decode): >+ * UIProcess/ResourceLoadStatisticsMemoryStore.cpp: >+ > 2018-08-15 Michael Catanzaro <mcatanzaro@igalia.com> > > [WPE][GTK] WaylandCompositor fails to properly remove surface from its page map >diff --git a/Source/WebKitLegacy/mac/ChangeLog b/Source/WebKitLegacy/mac/ChangeLog >index 77093f102445849d564e90ff87bad866f1a160df..72bd07caada31e838d99b4814d8c57657fac31a2 100644 >--- a/Source/WebKitLegacy/mac/ChangeLog >+++ b/Source/WebKitLegacy/mac/ChangeLog >@@ -1,3 +1,15 @@ >+2018-07-18 Woodrow Wang <woodrow_wang@apple.com> >+ >+ Added Web API Statistics Collection >+ https://bugs.webkit.org/show_bug.cgi?id=187773 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Added a new flag ENABLE_WEB_API_STATISTICS to wrap all code in compile time flags for when >+ we would like to collect various web API statistics for analysis. >+ >+ * Configurations/FeatureDefines.xcconfig: >+ > 2018-08-13 Alex Christensen <achristensen@webkit.org> > > Use a 1-byte enum class for TextDirection >diff --git a/Source/JavaScriptCore/Configurations/FeatureDefines.xcconfig b/Source/JavaScriptCore/Configurations/FeatureDefines.xcconfig >index 41a336c75084648f7bfc607ba82245ab25568170..7a7d9ef8ddec7b03b9d9ff9b54e99fc1cb5ca6e2 100644 >--- a/Source/JavaScriptCore/Configurations/FeatureDefines.xcconfig >+++ b/Source/JavaScriptCore/Configurations/FeatureDefines.xcconfig >@@ -352,6 +352,8 @@ ENABLE_WEBGPU_watchos = ENABLE_WEBGPU; > ENABLE_WEBGPU_appletvos = ENABLE_WEBGPU; > ENABLE_WEBGPU_macosx = ENABLE_WEBGPU; > >+ENABLE_WEB_API_STATISTICS = ENABLE_WEB_API_STATISTICS; >+ > ENABLE_WEB_AUDIO = ENABLE_WEB_AUDIO; > > ENABLE_WEB_AUTHN = $(ENABLE_WEB_AUTHN_$(WK_PLATFORM_NAME)); >@@ -368,4 +370,4 @@ ENABLE_WIRELESS_PLAYBACK_TARGET = ENABLE_WIRELESS_PLAYBACK_TARGET; > > ENABLE_XSLT = ENABLE_XSLT; > >-FEATURE_DEFINES = $(ENABLE_3D_TRANSFORMS) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_ACCELERATED_OVERFLOW_SCROLLING) $(ENABLE_APPLE_PAY) $(ENABLE_APPLE_PAY_SESSION_V3) $(ENABLE_APPLICATION_MANIFEST) $(ENABLE_ATTACHMENT_ELEMENT) $(ENABLE_AVF_CAPTIONS) $(ENABLE_CACHE_PARTITIONING) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CONTENT_FILTERING) $(ENABLE_CSS3_TEXT) $(ENABLE_CSS_ANIMATIONS_LEVEL_2) $(ENABLE_CSS_BOX_DECORATION_BREAK) $(ENABLE_CSS_COMPOSITING) $(ENABLE_CSS_DEVICE_ADAPTATION) $(ENABLE_CSS_IMAGE_ORIENTATION) $(ENABLE_CSS_IMAGE_RESOLUTION) $(ENABLE_CSS_SCROLL_SNAP) $(ENABLE_CSS_SELECTORS_LEVEL4) $(ENABLE_CSS_TRAILING_WORD) $(ENABLE_CURSOR_VISIBILITY) $(ENABLE_CUSTOM_SCHEME_HANDLER) $(ENABLE_DASHBOARD_SUPPORT) $(ENABLE_DATA_INTERACTION) $(ENABLE_DATACUE_VALUE) $(ENABLE_DATALIST_ELEMENT) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DRAG_SUPPORT) $(ENABLE_ENCRYPTED_MEDIA) $(ENABLE_EXPERIMENTAL_FEATURES) $(ENABLE_FAST_JIT_PERMISSIONS) $(ENABLE_FILTERS_LEVEL_2) $(ENABLE_FTL_JIT) $(ENABLE_FULLSCREEN_API) $(ENABLE_GAMEPAD) $(ENABLE_GEOLOCATION) $(ENABLE_ICONDATABASE) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INDEXED_DATABASE_IN_WORKERS) $(ENABLE_INPUT_TYPE_COLOR) $(ENABLE_INPUT_TYPE_COLOR_POPOVER) $(ENABLE_INPUT_TYPE_DATE) $(ENABLE_INPUT_TYPE_DATETIME_INCOMPLETE) $(ENABLE_INPUT_TYPE_DATETIMELOCAL) $(ENABLE_INPUT_TYPE_MONTH) $(ENABLE_INPUT_TYPE_TIME) $(ENABLE_INPUT_TYPE_WEEK) $(ENABLE_INTERSECTION_OBSERVER) $(ENABLE_INTL) $(ENABLE_IOS_GESTURE_EVENTS) $(ENABLE_IOS_TOUCH_EVENTS) $(ENABLE_JIT) $(ENABLE_JS_ASYNC_ITERATION) $(ENABLE_KEYBOARD_CODE_ATTRIBUTE) $(ENABLE_KEYBOARD_KEY_ATTRIBUTE) $(ENABLE_LAYOUT_FORMATTING_CONTEXT) $(ENABLE_LEGACY_CSS_VENDOR_PREFIXES) $(ENABLE_LEGACY_CUSTOM_PROTOCOL_MANAGER) $(ENABLE_LEGACY_ENCRYPTED_MEDIA) $(ENABLE_LETTERPRESS) $(ENABLE_MAC_GESTURE_EVENTS) $(ENABLE_MAC_VIDEO_TOOLBOX) $(ENABLE_MATHML) $(ENABLE_MEDIA_CAPTURE) $(ENABLE_MEDIA_CONTROLS_SCRIPT) $(ENABLE_MEDIA_SESSION) $(ENABLE_MEDIA_SOURCE) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_MEDIA_STREAM) $(ENABLE_METER_ELEMENT) $(ENABLE_MHTML) $(ENABLE_MOUSE_CURSOR_SCALE) $(ENABLE_NAVIGATOR_CONTENT_UTILS) $(ENABLE_NAVIGATOR_STANDALONE) $(ENABLE_NOTIFICATIONS) $(ENABLE_PAYMENT_REQUEST) $(ENABLE_PDFKIT_PLUGIN) $(ENABLE_POINTER_LOCK) $(ENABLE_PUBLIC_SUFFIX_LIST) $(ENABLE_QUOTA) $(ENABLE_REMOTE_INSPECTOR) $(ENABLE_RESOLUTION_MEDIA_QUERY) $(ENABLE_RESOURCE_USAGE) $(ENABLE_RUBBER_BANDING) $(ENABLE_SERVICE_CONTROLS) $(ENABLE_SERVICE_WORKER) $(ENABLE_SPEECH_SYNTHESIS) $(ENABLE_STREAMS_API) $(ENABLE_SUBTLE_CRYPTO) $(ENABLE_SVG_FONTS) $(ENABLE_TELEPHONE_NUMBER_DETECTION) $(ENABLE_TEXT_AUTOSIZING) $(ENABLE_TOUCH_EVENTS) $(ENABLE_USER_MESSAGE_HANDLERS) $(ENABLE_USERSELECT_ALL) $(ENABLE_VARIATION_FONTS) $(ENABLE_VIDEO) $(ENABLE_VIDEO_PRESENTATION_MODE) $(ENABLE_VIDEO_TRACK) $(ENABLE_VIDEO_USES_ELEMENT_FULLSCREEN) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_AUTHN) $(ENABLE_WEB_RTC) $(ENABLE_WEBASSEMBLY) $(ENABLE_WEBASSEMBLY_STREAMING_API) $(ENABLE_WEBGL) $(ENABLE_WEBGL2) $(ENABLE_WEBGPU) $(ENABLE_WIRELESS_PLAYBACK_TARGET) $(ENABLE_XSLT); >+FEATURE_DEFINES = $(ENABLE_3D_TRANSFORMS) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_ACCELERATED_OVERFLOW_SCROLLING) $(ENABLE_APPLE_PAY) $(ENABLE_APPLE_PAY_SESSION_V3) $(ENABLE_APPLICATION_MANIFEST) $(ENABLE_ATTACHMENT_ELEMENT) $(ENABLE_AVF_CAPTIONS) $(ENABLE_CACHE_PARTITIONING) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CONTENT_FILTERING) $(ENABLE_CSS3_TEXT) $(ENABLE_CSS_ANIMATIONS_LEVEL_2) $(ENABLE_CSS_BOX_DECORATION_BREAK) $(ENABLE_CSS_COMPOSITING) $(ENABLE_CSS_DEVICE_ADAPTATION) $(ENABLE_CSS_IMAGE_ORIENTATION) $(ENABLE_CSS_IMAGE_RESOLUTION) $(ENABLE_CSS_SCROLL_SNAP) $(ENABLE_CSS_SELECTORS_LEVEL4) $(ENABLE_CSS_TRAILING_WORD) $(ENABLE_CURSOR_VISIBILITY) $(ENABLE_CUSTOM_SCHEME_HANDLER) $(ENABLE_DASHBOARD_SUPPORT) $(ENABLE_DATA_INTERACTION) $(ENABLE_DATACUE_VALUE) $(ENABLE_DATALIST_ELEMENT) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DRAG_SUPPORT) $(ENABLE_ENCRYPTED_MEDIA) $(ENABLE_EXPERIMENTAL_FEATURES) $(ENABLE_FAST_JIT_PERMISSIONS) $(ENABLE_FILTERS_LEVEL_2) $(ENABLE_FTL_JIT) $(ENABLE_FULLSCREEN_API) $(ENABLE_GAMEPAD) $(ENABLE_GEOLOCATION) $(ENABLE_ICONDATABASE) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INDEXED_DATABASE_IN_WORKERS) $(ENABLE_INPUT_TYPE_COLOR) $(ENABLE_INPUT_TYPE_COLOR_POPOVER) $(ENABLE_INPUT_TYPE_DATE) $(ENABLE_INPUT_TYPE_DATETIME_INCOMPLETE) $(ENABLE_INPUT_TYPE_DATETIMELOCAL) $(ENABLE_INPUT_TYPE_MONTH) $(ENABLE_INPUT_TYPE_TIME) $(ENABLE_INPUT_TYPE_WEEK) $(ENABLE_INTERSECTION_OBSERVER) $(ENABLE_INTL) $(ENABLE_IOS_GESTURE_EVENTS) $(ENABLE_IOS_TOUCH_EVENTS) $(ENABLE_JIT) $(ENABLE_JS_ASYNC_ITERATION) $(ENABLE_KEYBOARD_CODE_ATTRIBUTE) $(ENABLE_KEYBOARD_KEY_ATTRIBUTE) $(ENABLE_LAYOUT_FORMATTING_CONTEXT) $(ENABLE_LEGACY_CSS_VENDOR_PREFIXES) $(ENABLE_LEGACY_CUSTOM_PROTOCOL_MANAGER) $(ENABLE_LEGACY_ENCRYPTED_MEDIA) $(ENABLE_LETTERPRESS) $(ENABLE_MAC_GESTURE_EVENTS) $(ENABLE_MAC_VIDEO_TOOLBOX) $(ENABLE_MATHML) $(ENABLE_MEDIA_CAPTURE) $(ENABLE_MEDIA_CONTROLS_SCRIPT) $(ENABLE_MEDIA_SESSION) $(ENABLE_MEDIA_SOURCE) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_MEDIA_STREAM) $(ENABLE_METER_ELEMENT) $(ENABLE_MHTML) $(ENABLE_MOUSE_CURSOR_SCALE) $(ENABLE_NAVIGATOR_CONTENT_UTILS) $(ENABLE_NAVIGATOR_STANDALONE) $(ENABLE_NOTIFICATIONS) $(ENABLE_PAYMENT_REQUEST) $(ENABLE_PDFKIT_PLUGIN) $(ENABLE_POINTER_LOCK) $(ENABLE_PUBLIC_SUFFIX_LIST) $(ENABLE_QUOTA) $(ENABLE_REMOTE_INSPECTOR) $(ENABLE_RESOLUTION_MEDIA_QUERY) $(ENABLE_RESOURCE_USAGE) $(ENABLE_RUBBER_BANDING) $(ENABLE_SERVICE_CONTROLS) $(ENABLE_SERVICE_WORKER) $(ENABLE_SPEECH_SYNTHESIS) $(ENABLE_STREAMS_API) $(ENABLE_SUBTLE_CRYPTO) $(ENABLE_SVG_FONTS) $(ENABLE_TELEPHONE_NUMBER_DETECTION) $(ENABLE_TEXT_AUTOSIZING) $(ENABLE_TOUCH_EVENTS) $(ENABLE_USER_MESSAGE_HANDLERS) $(ENABLE_USERSELECT_ALL) $(ENABLE_VARIATION_FONTS) $(ENABLE_VIDEO) $(ENABLE_VIDEO_PRESENTATION_MODE) $(ENABLE_VIDEO_TRACK) $(ENABLE_VIDEO_USES_ELEMENT_FULLSCREEN) $(ENABLE_WEB_API_STATISTICS) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_AUTHN) $(ENABLE_WEB_RTC) $(ENABLE_WEBASSEMBLY) $(ENABLE_WEBASSEMBLY_STREAMING_API) $(ENABLE_WEBGL) $(ENABLE_WEBGL2) $(ENABLE_WEBGPU) $(ENABLE_WIRELESS_PLAYBACK_TARGET) $(ENABLE_XSLT); >diff --git a/Source/WebCore/Configurations/FeatureDefines.xcconfig b/Source/WebCore/Configurations/FeatureDefines.xcconfig >index 41a336c75084648f7bfc607ba82245ab25568170..7a7d9ef8ddec7b03b9d9ff9b54e99fc1cb5ca6e2 100644 >--- a/Source/WebCore/Configurations/FeatureDefines.xcconfig >+++ b/Source/WebCore/Configurations/FeatureDefines.xcconfig >@@ -352,6 +352,8 @@ ENABLE_WEBGPU_watchos = ENABLE_WEBGPU; > ENABLE_WEBGPU_appletvos = ENABLE_WEBGPU; > ENABLE_WEBGPU_macosx = ENABLE_WEBGPU; > >+ENABLE_WEB_API_STATISTICS = ENABLE_WEB_API_STATISTICS; >+ > ENABLE_WEB_AUDIO = ENABLE_WEB_AUDIO; > > ENABLE_WEB_AUTHN = $(ENABLE_WEB_AUTHN_$(WK_PLATFORM_NAME)); >@@ -368,4 +370,4 @@ ENABLE_WIRELESS_PLAYBACK_TARGET = ENABLE_WIRELESS_PLAYBACK_TARGET; > > ENABLE_XSLT = ENABLE_XSLT; > >-FEATURE_DEFINES = $(ENABLE_3D_TRANSFORMS) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_ACCELERATED_OVERFLOW_SCROLLING) $(ENABLE_APPLE_PAY) $(ENABLE_APPLE_PAY_SESSION_V3) $(ENABLE_APPLICATION_MANIFEST) $(ENABLE_ATTACHMENT_ELEMENT) $(ENABLE_AVF_CAPTIONS) $(ENABLE_CACHE_PARTITIONING) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CONTENT_FILTERING) $(ENABLE_CSS3_TEXT) $(ENABLE_CSS_ANIMATIONS_LEVEL_2) $(ENABLE_CSS_BOX_DECORATION_BREAK) $(ENABLE_CSS_COMPOSITING) $(ENABLE_CSS_DEVICE_ADAPTATION) $(ENABLE_CSS_IMAGE_ORIENTATION) $(ENABLE_CSS_IMAGE_RESOLUTION) $(ENABLE_CSS_SCROLL_SNAP) $(ENABLE_CSS_SELECTORS_LEVEL4) $(ENABLE_CSS_TRAILING_WORD) $(ENABLE_CURSOR_VISIBILITY) $(ENABLE_CUSTOM_SCHEME_HANDLER) $(ENABLE_DASHBOARD_SUPPORT) $(ENABLE_DATA_INTERACTION) $(ENABLE_DATACUE_VALUE) $(ENABLE_DATALIST_ELEMENT) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DRAG_SUPPORT) $(ENABLE_ENCRYPTED_MEDIA) $(ENABLE_EXPERIMENTAL_FEATURES) $(ENABLE_FAST_JIT_PERMISSIONS) $(ENABLE_FILTERS_LEVEL_2) $(ENABLE_FTL_JIT) $(ENABLE_FULLSCREEN_API) $(ENABLE_GAMEPAD) $(ENABLE_GEOLOCATION) $(ENABLE_ICONDATABASE) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INDEXED_DATABASE_IN_WORKERS) $(ENABLE_INPUT_TYPE_COLOR) $(ENABLE_INPUT_TYPE_COLOR_POPOVER) $(ENABLE_INPUT_TYPE_DATE) $(ENABLE_INPUT_TYPE_DATETIME_INCOMPLETE) $(ENABLE_INPUT_TYPE_DATETIMELOCAL) $(ENABLE_INPUT_TYPE_MONTH) $(ENABLE_INPUT_TYPE_TIME) $(ENABLE_INPUT_TYPE_WEEK) $(ENABLE_INTERSECTION_OBSERVER) $(ENABLE_INTL) $(ENABLE_IOS_GESTURE_EVENTS) $(ENABLE_IOS_TOUCH_EVENTS) $(ENABLE_JIT) $(ENABLE_JS_ASYNC_ITERATION) $(ENABLE_KEYBOARD_CODE_ATTRIBUTE) $(ENABLE_KEYBOARD_KEY_ATTRIBUTE) $(ENABLE_LAYOUT_FORMATTING_CONTEXT) $(ENABLE_LEGACY_CSS_VENDOR_PREFIXES) $(ENABLE_LEGACY_CUSTOM_PROTOCOL_MANAGER) $(ENABLE_LEGACY_ENCRYPTED_MEDIA) $(ENABLE_LETTERPRESS) $(ENABLE_MAC_GESTURE_EVENTS) $(ENABLE_MAC_VIDEO_TOOLBOX) $(ENABLE_MATHML) $(ENABLE_MEDIA_CAPTURE) $(ENABLE_MEDIA_CONTROLS_SCRIPT) $(ENABLE_MEDIA_SESSION) $(ENABLE_MEDIA_SOURCE) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_MEDIA_STREAM) $(ENABLE_METER_ELEMENT) $(ENABLE_MHTML) $(ENABLE_MOUSE_CURSOR_SCALE) $(ENABLE_NAVIGATOR_CONTENT_UTILS) $(ENABLE_NAVIGATOR_STANDALONE) $(ENABLE_NOTIFICATIONS) $(ENABLE_PAYMENT_REQUEST) $(ENABLE_PDFKIT_PLUGIN) $(ENABLE_POINTER_LOCK) $(ENABLE_PUBLIC_SUFFIX_LIST) $(ENABLE_QUOTA) $(ENABLE_REMOTE_INSPECTOR) $(ENABLE_RESOLUTION_MEDIA_QUERY) $(ENABLE_RESOURCE_USAGE) $(ENABLE_RUBBER_BANDING) $(ENABLE_SERVICE_CONTROLS) $(ENABLE_SERVICE_WORKER) $(ENABLE_SPEECH_SYNTHESIS) $(ENABLE_STREAMS_API) $(ENABLE_SUBTLE_CRYPTO) $(ENABLE_SVG_FONTS) $(ENABLE_TELEPHONE_NUMBER_DETECTION) $(ENABLE_TEXT_AUTOSIZING) $(ENABLE_TOUCH_EVENTS) $(ENABLE_USER_MESSAGE_HANDLERS) $(ENABLE_USERSELECT_ALL) $(ENABLE_VARIATION_FONTS) $(ENABLE_VIDEO) $(ENABLE_VIDEO_PRESENTATION_MODE) $(ENABLE_VIDEO_TRACK) $(ENABLE_VIDEO_USES_ELEMENT_FULLSCREEN) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_AUTHN) $(ENABLE_WEB_RTC) $(ENABLE_WEBASSEMBLY) $(ENABLE_WEBASSEMBLY_STREAMING_API) $(ENABLE_WEBGL) $(ENABLE_WEBGL2) $(ENABLE_WEBGPU) $(ENABLE_WIRELESS_PLAYBACK_TARGET) $(ENABLE_XSLT); >+FEATURE_DEFINES = $(ENABLE_3D_TRANSFORMS) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_ACCELERATED_OVERFLOW_SCROLLING) $(ENABLE_APPLE_PAY) $(ENABLE_APPLE_PAY_SESSION_V3) $(ENABLE_APPLICATION_MANIFEST) $(ENABLE_ATTACHMENT_ELEMENT) $(ENABLE_AVF_CAPTIONS) $(ENABLE_CACHE_PARTITIONING) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CONTENT_FILTERING) $(ENABLE_CSS3_TEXT) $(ENABLE_CSS_ANIMATIONS_LEVEL_2) $(ENABLE_CSS_BOX_DECORATION_BREAK) $(ENABLE_CSS_COMPOSITING) $(ENABLE_CSS_DEVICE_ADAPTATION) $(ENABLE_CSS_IMAGE_ORIENTATION) $(ENABLE_CSS_IMAGE_RESOLUTION) $(ENABLE_CSS_SCROLL_SNAP) $(ENABLE_CSS_SELECTORS_LEVEL4) $(ENABLE_CSS_TRAILING_WORD) $(ENABLE_CURSOR_VISIBILITY) $(ENABLE_CUSTOM_SCHEME_HANDLER) $(ENABLE_DASHBOARD_SUPPORT) $(ENABLE_DATA_INTERACTION) $(ENABLE_DATACUE_VALUE) $(ENABLE_DATALIST_ELEMENT) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DRAG_SUPPORT) $(ENABLE_ENCRYPTED_MEDIA) $(ENABLE_EXPERIMENTAL_FEATURES) $(ENABLE_FAST_JIT_PERMISSIONS) $(ENABLE_FILTERS_LEVEL_2) $(ENABLE_FTL_JIT) $(ENABLE_FULLSCREEN_API) $(ENABLE_GAMEPAD) $(ENABLE_GEOLOCATION) $(ENABLE_ICONDATABASE) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INDEXED_DATABASE_IN_WORKERS) $(ENABLE_INPUT_TYPE_COLOR) $(ENABLE_INPUT_TYPE_COLOR_POPOVER) $(ENABLE_INPUT_TYPE_DATE) $(ENABLE_INPUT_TYPE_DATETIME_INCOMPLETE) $(ENABLE_INPUT_TYPE_DATETIMELOCAL) $(ENABLE_INPUT_TYPE_MONTH) $(ENABLE_INPUT_TYPE_TIME) $(ENABLE_INPUT_TYPE_WEEK) $(ENABLE_INTERSECTION_OBSERVER) $(ENABLE_INTL) $(ENABLE_IOS_GESTURE_EVENTS) $(ENABLE_IOS_TOUCH_EVENTS) $(ENABLE_JIT) $(ENABLE_JS_ASYNC_ITERATION) $(ENABLE_KEYBOARD_CODE_ATTRIBUTE) $(ENABLE_KEYBOARD_KEY_ATTRIBUTE) $(ENABLE_LAYOUT_FORMATTING_CONTEXT) $(ENABLE_LEGACY_CSS_VENDOR_PREFIXES) $(ENABLE_LEGACY_CUSTOM_PROTOCOL_MANAGER) $(ENABLE_LEGACY_ENCRYPTED_MEDIA) $(ENABLE_LETTERPRESS) $(ENABLE_MAC_GESTURE_EVENTS) $(ENABLE_MAC_VIDEO_TOOLBOX) $(ENABLE_MATHML) $(ENABLE_MEDIA_CAPTURE) $(ENABLE_MEDIA_CONTROLS_SCRIPT) $(ENABLE_MEDIA_SESSION) $(ENABLE_MEDIA_SOURCE) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_MEDIA_STREAM) $(ENABLE_METER_ELEMENT) $(ENABLE_MHTML) $(ENABLE_MOUSE_CURSOR_SCALE) $(ENABLE_NAVIGATOR_CONTENT_UTILS) $(ENABLE_NAVIGATOR_STANDALONE) $(ENABLE_NOTIFICATIONS) $(ENABLE_PAYMENT_REQUEST) $(ENABLE_PDFKIT_PLUGIN) $(ENABLE_POINTER_LOCK) $(ENABLE_PUBLIC_SUFFIX_LIST) $(ENABLE_QUOTA) $(ENABLE_REMOTE_INSPECTOR) $(ENABLE_RESOLUTION_MEDIA_QUERY) $(ENABLE_RESOURCE_USAGE) $(ENABLE_RUBBER_BANDING) $(ENABLE_SERVICE_CONTROLS) $(ENABLE_SERVICE_WORKER) $(ENABLE_SPEECH_SYNTHESIS) $(ENABLE_STREAMS_API) $(ENABLE_SUBTLE_CRYPTO) $(ENABLE_SVG_FONTS) $(ENABLE_TELEPHONE_NUMBER_DETECTION) $(ENABLE_TEXT_AUTOSIZING) $(ENABLE_TOUCH_EVENTS) $(ENABLE_USER_MESSAGE_HANDLERS) $(ENABLE_USERSELECT_ALL) $(ENABLE_VARIATION_FONTS) $(ENABLE_VIDEO) $(ENABLE_VIDEO_PRESENTATION_MODE) $(ENABLE_VIDEO_TRACK) $(ENABLE_VIDEO_USES_ELEMENT_FULLSCREEN) $(ENABLE_WEB_API_STATISTICS) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_AUTHN) $(ENABLE_WEB_RTC) $(ENABLE_WEBASSEMBLY) $(ENABLE_WEBASSEMBLY_STREAMING_API) $(ENABLE_WEBGL) $(ENABLE_WEBGL2) $(ENABLE_WEBGPU) $(ENABLE_WIRELESS_PLAYBACK_TARGET) $(ENABLE_XSLT); >diff --git a/Source/WebCore/PAL/Configurations/FeatureDefines.xcconfig b/Source/WebCore/PAL/Configurations/FeatureDefines.xcconfig >index 41a336c75084648f7bfc607ba82245ab25568170..7a7d9ef8ddec7b03b9d9ff9b54e99fc1cb5ca6e2 100644 >--- a/Source/WebCore/PAL/Configurations/FeatureDefines.xcconfig >+++ b/Source/WebCore/PAL/Configurations/FeatureDefines.xcconfig >@@ -352,6 +352,8 @@ ENABLE_WEBGPU_watchos = ENABLE_WEBGPU; > ENABLE_WEBGPU_appletvos = ENABLE_WEBGPU; > ENABLE_WEBGPU_macosx = ENABLE_WEBGPU; > >+ENABLE_WEB_API_STATISTICS = ENABLE_WEB_API_STATISTICS; >+ > ENABLE_WEB_AUDIO = ENABLE_WEB_AUDIO; > > ENABLE_WEB_AUTHN = $(ENABLE_WEB_AUTHN_$(WK_PLATFORM_NAME)); >@@ -368,4 +370,4 @@ ENABLE_WIRELESS_PLAYBACK_TARGET = ENABLE_WIRELESS_PLAYBACK_TARGET; > > ENABLE_XSLT = ENABLE_XSLT; > >-FEATURE_DEFINES = $(ENABLE_3D_TRANSFORMS) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_ACCELERATED_OVERFLOW_SCROLLING) $(ENABLE_APPLE_PAY) $(ENABLE_APPLE_PAY_SESSION_V3) $(ENABLE_APPLICATION_MANIFEST) $(ENABLE_ATTACHMENT_ELEMENT) $(ENABLE_AVF_CAPTIONS) $(ENABLE_CACHE_PARTITIONING) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CONTENT_FILTERING) $(ENABLE_CSS3_TEXT) $(ENABLE_CSS_ANIMATIONS_LEVEL_2) $(ENABLE_CSS_BOX_DECORATION_BREAK) $(ENABLE_CSS_COMPOSITING) $(ENABLE_CSS_DEVICE_ADAPTATION) $(ENABLE_CSS_IMAGE_ORIENTATION) $(ENABLE_CSS_IMAGE_RESOLUTION) $(ENABLE_CSS_SCROLL_SNAP) $(ENABLE_CSS_SELECTORS_LEVEL4) $(ENABLE_CSS_TRAILING_WORD) $(ENABLE_CURSOR_VISIBILITY) $(ENABLE_CUSTOM_SCHEME_HANDLER) $(ENABLE_DASHBOARD_SUPPORT) $(ENABLE_DATA_INTERACTION) $(ENABLE_DATACUE_VALUE) $(ENABLE_DATALIST_ELEMENT) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DRAG_SUPPORT) $(ENABLE_ENCRYPTED_MEDIA) $(ENABLE_EXPERIMENTAL_FEATURES) $(ENABLE_FAST_JIT_PERMISSIONS) $(ENABLE_FILTERS_LEVEL_2) $(ENABLE_FTL_JIT) $(ENABLE_FULLSCREEN_API) $(ENABLE_GAMEPAD) $(ENABLE_GEOLOCATION) $(ENABLE_ICONDATABASE) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INDEXED_DATABASE_IN_WORKERS) $(ENABLE_INPUT_TYPE_COLOR) $(ENABLE_INPUT_TYPE_COLOR_POPOVER) $(ENABLE_INPUT_TYPE_DATE) $(ENABLE_INPUT_TYPE_DATETIME_INCOMPLETE) $(ENABLE_INPUT_TYPE_DATETIMELOCAL) $(ENABLE_INPUT_TYPE_MONTH) $(ENABLE_INPUT_TYPE_TIME) $(ENABLE_INPUT_TYPE_WEEK) $(ENABLE_INTERSECTION_OBSERVER) $(ENABLE_INTL) $(ENABLE_IOS_GESTURE_EVENTS) $(ENABLE_IOS_TOUCH_EVENTS) $(ENABLE_JIT) $(ENABLE_JS_ASYNC_ITERATION) $(ENABLE_KEYBOARD_CODE_ATTRIBUTE) $(ENABLE_KEYBOARD_KEY_ATTRIBUTE) $(ENABLE_LAYOUT_FORMATTING_CONTEXT) $(ENABLE_LEGACY_CSS_VENDOR_PREFIXES) $(ENABLE_LEGACY_CUSTOM_PROTOCOL_MANAGER) $(ENABLE_LEGACY_ENCRYPTED_MEDIA) $(ENABLE_LETTERPRESS) $(ENABLE_MAC_GESTURE_EVENTS) $(ENABLE_MAC_VIDEO_TOOLBOX) $(ENABLE_MATHML) $(ENABLE_MEDIA_CAPTURE) $(ENABLE_MEDIA_CONTROLS_SCRIPT) $(ENABLE_MEDIA_SESSION) $(ENABLE_MEDIA_SOURCE) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_MEDIA_STREAM) $(ENABLE_METER_ELEMENT) $(ENABLE_MHTML) $(ENABLE_MOUSE_CURSOR_SCALE) $(ENABLE_NAVIGATOR_CONTENT_UTILS) $(ENABLE_NAVIGATOR_STANDALONE) $(ENABLE_NOTIFICATIONS) $(ENABLE_PAYMENT_REQUEST) $(ENABLE_PDFKIT_PLUGIN) $(ENABLE_POINTER_LOCK) $(ENABLE_PUBLIC_SUFFIX_LIST) $(ENABLE_QUOTA) $(ENABLE_REMOTE_INSPECTOR) $(ENABLE_RESOLUTION_MEDIA_QUERY) $(ENABLE_RESOURCE_USAGE) $(ENABLE_RUBBER_BANDING) $(ENABLE_SERVICE_CONTROLS) $(ENABLE_SERVICE_WORKER) $(ENABLE_SPEECH_SYNTHESIS) $(ENABLE_STREAMS_API) $(ENABLE_SUBTLE_CRYPTO) $(ENABLE_SVG_FONTS) $(ENABLE_TELEPHONE_NUMBER_DETECTION) $(ENABLE_TEXT_AUTOSIZING) $(ENABLE_TOUCH_EVENTS) $(ENABLE_USER_MESSAGE_HANDLERS) $(ENABLE_USERSELECT_ALL) $(ENABLE_VARIATION_FONTS) $(ENABLE_VIDEO) $(ENABLE_VIDEO_PRESENTATION_MODE) $(ENABLE_VIDEO_TRACK) $(ENABLE_VIDEO_USES_ELEMENT_FULLSCREEN) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_AUTHN) $(ENABLE_WEB_RTC) $(ENABLE_WEBASSEMBLY) $(ENABLE_WEBASSEMBLY_STREAMING_API) $(ENABLE_WEBGL) $(ENABLE_WEBGL2) $(ENABLE_WEBGPU) $(ENABLE_WIRELESS_PLAYBACK_TARGET) $(ENABLE_XSLT); >+FEATURE_DEFINES = $(ENABLE_3D_TRANSFORMS) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_ACCELERATED_OVERFLOW_SCROLLING) $(ENABLE_APPLE_PAY) $(ENABLE_APPLE_PAY_SESSION_V3) $(ENABLE_APPLICATION_MANIFEST) $(ENABLE_ATTACHMENT_ELEMENT) $(ENABLE_AVF_CAPTIONS) $(ENABLE_CACHE_PARTITIONING) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CONTENT_FILTERING) $(ENABLE_CSS3_TEXT) $(ENABLE_CSS_ANIMATIONS_LEVEL_2) $(ENABLE_CSS_BOX_DECORATION_BREAK) $(ENABLE_CSS_COMPOSITING) $(ENABLE_CSS_DEVICE_ADAPTATION) $(ENABLE_CSS_IMAGE_ORIENTATION) $(ENABLE_CSS_IMAGE_RESOLUTION) $(ENABLE_CSS_SCROLL_SNAP) $(ENABLE_CSS_SELECTORS_LEVEL4) $(ENABLE_CSS_TRAILING_WORD) $(ENABLE_CURSOR_VISIBILITY) $(ENABLE_CUSTOM_SCHEME_HANDLER) $(ENABLE_DASHBOARD_SUPPORT) $(ENABLE_DATA_INTERACTION) $(ENABLE_DATACUE_VALUE) $(ENABLE_DATALIST_ELEMENT) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DRAG_SUPPORT) $(ENABLE_ENCRYPTED_MEDIA) $(ENABLE_EXPERIMENTAL_FEATURES) $(ENABLE_FAST_JIT_PERMISSIONS) $(ENABLE_FILTERS_LEVEL_2) $(ENABLE_FTL_JIT) $(ENABLE_FULLSCREEN_API) $(ENABLE_GAMEPAD) $(ENABLE_GEOLOCATION) $(ENABLE_ICONDATABASE) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INDEXED_DATABASE_IN_WORKERS) $(ENABLE_INPUT_TYPE_COLOR) $(ENABLE_INPUT_TYPE_COLOR_POPOVER) $(ENABLE_INPUT_TYPE_DATE) $(ENABLE_INPUT_TYPE_DATETIME_INCOMPLETE) $(ENABLE_INPUT_TYPE_DATETIMELOCAL) $(ENABLE_INPUT_TYPE_MONTH) $(ENABLE_INPUT_TYPE_TIME) $(ENABLE_INPUT_TYPE_WEEK) $(ENABLE_INTERSECTION_OBSERVER) $(ENABLE_INTL) $(ENABLE_IOS_GESTURE_EVENTS) $(ENABLE_IOS_TOUCH_EVENTS) $(ENABLE_JIT) $(ENABLE_JS_ASYNC_ITERATION) $(ENABLE_KEYBOARD_CODE_ATTRIBUTE) $(ENABLE_KEYBOARD_KEY_ATTRIBUTE) $(ENABLE_LAYOUT_FORMATTING_CONTEXT) $(ENABLE_LEGACY_CSS_VENDOR_PREFIXES) $(ENABLE_LEGACY_CUSTOM_PROTOCOL_MANAGER) $(ENABLE_LEGACY_ENCRYPTED_MEDIA) $(ENABLE_LETTERPRESS) $(ENABLE_MAC_GESTURE_EVENTS) $(ENABLE_MAC_VIDEO_TOOLBOX) $(ENABLE_MATHML) $(ENABLE_MEDIA_CAPTURE) $(ENABLE_MEDIA_CONTROLS_SCRIPT) $(ENABLE_MEDIA_SESSION) $(ENABLE_MEDIA_SOURCE) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_MEDIA_STREAM) $(ENABLE_METER_ELEMENT) $(ENABLE_MHTML) $(ENABLE_MOUSE_CURSOR_SCALE) $(ENABLE_NAVIGATOR_CONTENT_UTILS) $(ENABLE_NAVIGATOR_STANDALONE) $(ENABLE_NOTIFICATIONS) $(ENABLE_PAYMENT_REQUEST) $(ENABLE_PDFKIT_PLUGIN) $(ENABLE_POINTER_LOCK) $(ENABLE_PUBLIC_SUFFIX_LIST) $(ENABLE_QUOTA) $(ENABLE_REMOTE_INSPECTOR) $(ENABLE_RESOLUTION_MEDIA_QUERY) $(ENABLE_RESOURCE_USAGE) $(ENABLE_RUBBER_BANDING) $(ENABLE_SERVICE_CONTROLS) $(ENABLE_SERVICE_WORKER) $(ENABLE_SPEECH_SYNTHESIS) $(ENABLE_STREAMS_API) $(ENABLE_SUBTLE_CRYPTO) $(ENABLE_SVG_FONTS) $(ENABLE_TELEPHONE_NUMBER_DETECTION) $(ENABLE_TEXT_AUTOSIZING) $(ENABLE_TOUCH_EVENTS) $(ENABLE_USER_MESSAGE_HANDLERS) $(ENABLE_USERSELECT_ALL) $(ENABLE_VARIATION_FONTS) $(ENABLE_VIDEO) $(ENABLE_VIDEO_PRESENTATION_MODE) $(ENABLE_VIDEO_TRACK) $(ENABLE_VIDEO_USES_ELEMENT_FULLSCREEN) $(ENABLE_WEB_API_STATISTICS) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_AUTHN) $(ENABLE_WEB_RTC) $(ENABLE_WEBASSEMBLY) $(ENABLE_WEBASSEMBLY_STREAMING_API) $(ENABLE_WEBGL) $(ENABLE_WEBGL2) $(ENABLE_WEBGPU) $(ENABLE_WIRELESS_PLAYBACK_TARGET) $(ENABLE_XSLT); >diff --git a/Source/WebCore/WebCore.xcodeproj/project.pbxproj b/Source/WebCore/WebCore.xcodeproj/project.pbxproj >index d34f8b009380c32c935e8790b7eddad0898df738..fcc5db4223f63f4b1c9823d3e7c8b9ec4cfaf96b 100644 >--- a/Source/WebCore/WebCore.xcodeproj/project.pbxproj >+++ b/Source/WebCore/WebCore.xcodeproj/project.pbxproj >@@ -4797,6 +4797,8 @@ > ED2BA83C09A24B91006C0AC4 /* DocumentMarker.h in Headers */ = {isa = PBXBuildFile; fileRef = ED2BA83B09A24B91006C0AC4 /* DocumentMarker.h */; settings = {ATTRIBUTES = (Private, ); }; }; > EDE3A5000C7A430600956A37 /* ColorMac.h in Headers */ = {isa = PBXBuildFile; fileRef = EDE3A4FF0C7A430600956A37 /* ColorMac.h */; settings = {ATTRIBUTES = (Private, ); }; }; > EDEC98030AED7E170059137F /* WebCorePrefix.h in Headers */ = {isa = PBXBuildFile; fileRef = EDEC98020AED7E170059137F /* WebCorePrefix.h */; }; >+ EFB728812124CA38005C2558 /* CanvasActivityRecord.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EFB7287B2124C73D005C2558 /* CanvasActivityRecord.cpp */; }; >+ EFCC6C8F20FE914400A2321B /* CanvasActivityRecord.h in Headers */ = {isa = PBXBuildFile; fileRef = EFCC6C8D20FE914000A2321B /* CanvasActivityRecord.h */; settings = {ATTRIBUTES = (Private, ); }; }; > F12171F516A8CED2000053CA /* WebVTTElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F12171F316A8BC63000053CA /* WebVTTElement.cpp */; }; > F12171F616A8CF0B000053CA /* WebVTTElement.h in Headers */ = {isa = PBXBuildFile; fileRef = F12171F416A8BC63000053CA /* WebVTTElement.h */; }; > F344C7141125B82C00F26EEE /* InspectorFrontendClient.h in Headers */ = {isa = PBXBuildFile; fileRef = F344C7121125B82C00F26EEE /* InspectorFrontendClient.h */; settings = {ATTRIBUTES = (Private, ); }; }; >@@ -7170,7 +7172,6 @@ > 3FFFF9AC159D9B060020BBD5 /* ViewportStyleResolver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ViewportStyleResolver.h; sourceTree = "<group>"; }; > 4107908A1FC3E4F20061B27A /* ClientOrigin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ClientOrigin.h; sourceTree = "<group>"; }; > 410B7E711045FAB000D8224F /* JSMessageEventCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSMessageEventCustom.cpp; sourceTree = "<group>"; }; >- D2CDB5ED638F43AF86F07AA2 /* JSErrorEventCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSErrorEventCustom.cpp; sourceTree = "<group>"; }; > 41103AA71E39790A00769F03 /* RealtimeOutgoingAudioSource.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RealtimeOutgoingAudioSource.cpp; sourceTree = "<group>"; }; > 41103AA71E39790A00769F14 /* RealtimeOutgoingAudioSourceCocoa.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RealtimeOutgoingAudioSourceCocoa.cpp; sourceTree = "<group>"; }; > 41103AA81E39790A00769F03 /* RealtimeOutgoingAudioSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RealtimeOutgoingAudioSource.h; sourceTree = "<group>"; }; >@@ -9256,7 +9257,6 @@ > 71EFCEDA202B388F00D7C411 /* AnimationEffectReadOnly.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AnimationEffectReadOnly.cpp; sourceTree = "<group>"; }; > 71EFCEDB202B389000D7C411 /* KeyframeEffectReadOnly.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = KeyframeEffectReadOnly.idl; sourceTree = "<group>"; }; > 71EFCEDE202B39C700D7C411 /* JSAnimationEffectReadOnlyCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSAnimationEffectReadOnlyCustom.cpp; sourceTree = "<group>"; }; >- A4A69B8BB91B49D0A804C31D /* JSPromiseRejectionEventCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSPromiseRejectionEventCustom.cpp; sourceTree = "<group>"; }; > 71EFCEDF202B3AA100D7C411 /* JSKeyframeEffectReadOnly.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSKeyframeEffectReadOnly.h; sourceTree = "<group>"; }; > 71EFCEE0202B3AA300D7C411 /* JSKeyframeEffectReadOnly.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSKeyframeEffectReadOnly.cpp; sourceTree = "<group>"; }; > 71F936F71DD4F99B00922CC7 /* tracks-support.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "tracks-support.js"; sourceTree = "<group>"; }; >@@ -11178,6 +11178,7 @@ > A454424D119B3687009BE912 /* RenderMeter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderMeter.h; sourceTree = "<group>"; }; > A456FA2411AD4A830020B420 /* LabelsNodeList.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LabelsNodeList.cpp; sourceTree = "<group>"; }; > A456FA2511AD4A830020B420 /* LabelsNodeList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LabelsNodeList.h; sourceTree = "<group>"; }; >+ A4A69B8BB91B49D0A804C31D /* JSPromiseRejectionEventCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSPromiseRejectionEventCustom.cpp; sourceTree = "<group>"; }; > A501920C132EBF2E008BFE55 /* Autocapitalize.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Autocapitalize.h; sourceTree = "<group>"; }; > A5071E821C56D079009951BE /* ResourceUsageData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ResourceUsageData.h; sourceTree = "<group>"; }; > A5071E831C56D079009951BE /* ResourceUsageThread.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ResourceUsageThread.cpp; sourceTree = "<group>"; }; >@@ -13580,6 +13581,7 @@ > D0EDA773143E303C0028E383 /* CachedRawResource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CachedRawResource.h; sourceTree = "<group>"; }; > D0FF2A5B11F8C45A007E74E0 /* PingLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PingLoader.cpp; sourceTree = "<group>"; }; > D0FF2A5C11F8C45A007E74E0 /* PingLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PingLoader.h; sourceTree = "<group>"; }; >+ D2CDB5ED638F43AF86F07AA2 /* JSErrorEventCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSErrorEventCustom.cpp; sourceTree = "<group>"; }; > D302754512A5FE84004BD828 /* RenderDetailsMarker.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderDetailsMarker.cpp; sourceTree = "<group>"; }; > D302754612A5FE84004BD828 /* RenderDetailsMarker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderDetailsMarker.h; sourceTree = "<group>"; }; > D359D786129CA2710006E5D2 /* HTMLDetailsElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HTMLDetailsElement.cpp; sourceTree = "<group>"; }; >@@ -14531,6 +14533,8 @@ > ED501DC50B249F2900AE18D9 /* EditorMac.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; path = EditorMac.mm; sourceTree = "<group>"; }; > EDE3A4FF0C7A430600956A37 /* ColorMac.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ColorMac.h; sourceTree = "<group>"; }; > EDEC98020AED7E170059137F /* WebCorePrefix.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = WebCorePrefix.h; sourceTree = "<group>"; tabWidth = 4; usesTabs = 0; }; >+ EFB7287B2124C73D005C2558 /* CanvasActivityRecord.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = CanvasActivityRecord.cpp; sourceTree = "<group>"; }; >+ EFCC6C8D20FE914000A2321B /* CanvasActivityRecord.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CanvasActivityRecord.h; sourceTree = "<group>"; }; > F12171F316A8BC63000053CA /* WebVTTElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebVTTElement.cpp; sourceTree = "<group>"; }; > F12171F416A8BC63000053CA /* WebVTTElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebVTTElement.h; sourceTree = "<group>"; }; > F344C7121125B82C00F26EEE /* InspectorFrontendClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InspectorFrontendClient.h; sourceTree = "<group>"; }; >@@ -24296,6 +24300,8 @@ > 93A1EAA20A5634D8006960A0 /* mac */, > 63152D181F9531EE007A5E4B /* ApplicationManifestLoader.cpp */, > 63152D171F9531EE007A5E4B /* ApplicationManifestLoader.h */, >+ EFB7287B2124C73D005C2558 /* CanvasActivityRecord.cpp */, >+ EFCC6C8D20FE914000A2321B /* CanvasActivityRecord.h */, > A149786C1ABAF33800CEF7E4 /* ContentFilter.cpp */, > A149786D1ABAF33800CEF7E4 /* ContentFilter.h */, > E1424C91164B52C800F32D40 /* CookieJar.cpp */, >@@ -27379,6 +27385,7 @@ > 7C1E8D011ED0C2DA00B1D983 /* CallbackResult.h in Headers */, > 952076051F2675FE007D2AAB /* CallTracer.h in Headers */, > 952076061F2675FE007D2AAB /* CallTracerTypes.h in Headers */, >+ EFCC6C8F20FE914400A2321B /* CanvasActivityRecord.h in Headers */, > 313171561FB079E5008D91FC /* CanvasBase.h in Headers */, > 415CDAF51E6B8F8B004F11EE /* CanvasCaptureMediaStreamTrack.h in Headers */, > 7C193BBB1F5E0EED0088F3E6 /* CanvasDirection.h in Headers */, >@@ -31510,6 +31517,7 @@ > 070363E7181A1CDC00C074A5 /* AVVideoCaptureSource.mm in Sources */, > 7A45032F18DB717200377B34 /* BufferedLineReader.cpp in Sources */, > 0753860214489E9800B78452 /* CachedTextTrack.cpp in Sources */, >+ EFB728812124CA38005C2558 /* CanvasActivityRecord.cpp in Sources */, > CDF4B7151E00B7E500E235A2 /* CDM.cpp in Sources */, > CD94A5DD1F71D5D800F525C5 /* CDMClearKey.cpp in Sources */, > CDB7045B1F7465A1003923DF /* CDMFairPlayStreaming.cpp in Sources */, >diff --git a/Source/WebCore/css/CSSFontFaceSource.cpp b/Source/WebCore/css/CSSFontFaceSource.cpp >index 4d603b5769587cad4cd6669ad2a65ba37baeb8e8..4f532d69d3cc31531ee4c5369cd8237cfe73946e 100644 >--- a/Source/WebCore/css/CSSFontFaceSource.cpp >+++ b/Source/WebCore/css/CSSFontFaceSource.cpp >@@ -37,6 +37,10 @@ > #include "SVGToOTFFontConversion.h" > #include "SharedBuffer.h" > >+#if ENABLE(WEB_API_STATISTICS) >+#include "ResourceLoadObserver.h" >+#endif >+ > #if ENABLE(SVG_FONTS) > #include "CachedSVGFont.h" > #include "FontCustomPlatformData.h" >@@ -181,6 +185,10 @@ void CSSFontFaceSource::load(CSSFontSelector* fontSelector) > fontDescription.setComputedSize(1); > fontDescription.setShouldAllowUserInstalledFonts(m_face.allowUserInstalledFonts()); > success = FontCache::singleton().fontForFamily(fontDescription, m_familyNameOrURI, nullptr, nullptr, FontSelectionSpecifiedCapabilities(), true); >+#if ENABLE(WEB_API_STATISTICS) >+ if (auto document = fontSelector->document()) >+ ResourceLoadObserver::shared().logFontLoad(*document, m_familyNameOrURI.string(), success); >+#endif > } > setStatus(success ? Status::Success : Status::Failure); > } >diff --git a/Source/WebCore/css/CSSFontSelector.cpp b/Source/WebCore/css/CSSFontSelector.cpp >index 9ad88a2a4df62a851786c0f34a9541d0a3cffdcc..a1bfa0d844d4f97e123781590be03edb114a8efc 100644 >--- a/Source/WebCore/css/CSSFontSelector.cpp >+++ b/Source/WebCore/css/CSSFontSelector.cpp >@@ -54,6 +54,10 @@ > #include <wtf/SetForScope.h> > #include <wtf/text/AtomicString.h> > >+#if ENABLE(WEB_API_STATISTICS) >+#include "ResourceLoadObserver.h" >+#endif >+ > namespace WebCore { > > static unsigned fontSelectorId; >@@ -304,13 +308,22 @@ FontRanges CSSFontSelector::fontRangesForFamily(const FontDescription& fontDescr > > AtomicString familyForLookup = resolveGenericFamilyFirst ? resolveGenericFamily(m_document, fontDescription, familyName) : familyName; > auto* face = m_cssFontFaceSet->fontFace(fontDescription.fontSelectionRequest(), familyForLookup); >- if (!face) { >- if (!resolveGenericFamilyFirst) >- familyForLookup = resolveGenericFamily(m_document, fontDescription, familyName); >- return FontRanges(FontCache::singleton().fontForFamily(fontDescription, familyForLookup)); >+ if (face) { >+#if ENABLE(WEB_API_STATISTICS) >+ // This logs an attempted font load by setting the loadStatus boolean to true >+ if (m_document) >+ ResourceLoadObserver::shared().logFontLoad(*m_document, familyName.string(), true); >+#endif >+ return face->fontRanges(fontDescription); > } >- >- return face->fontRanges(fontDescription); >+ if (!resolveGenericFamilyFirst) >+ familyForLookup = resolveGenericFamily(m_document, fontDescription, familyName); >+ auto font = FontCache::singleton().fontForFamily(fontDescription, familyForLookup); >+#if ENABLE(WEB_API_STATISTICS) >+ if (m_document) >+ ResourceLoadObserver::shared().logFontLoad(*m_document, familyName.string(), !!font); >+#endif >+ return FontRanges { WTFMove(font) }; > } > > void CSSFontSelector::clearDocument() >@@ -390,8 +403,13 @@ RefPtr<Font> CSSFontSelector::fallbackFontAt(const FontDescription& fontDescript > > if (!m_document->settings().fontFallbackPrefersPictographs()) > return nullptr; >- >- return FontCache::singleton().fontForFamily(fontDescription, m_document->settings().pictographFontFamily()); >+ RefPtr<Font> font = FontCache::singleton().fontForFamily(fontDescription, m_document->settings().pictographFontFamily()); >+#if ENABLE(WEB_API_STATISTICS) >+ if (m_document) >+ ResourceLoadObserver::shared().logFontLoad(*m_document, m_document->settings().pictographFontFamily().string(), !!font); >+#endif >+ >+ return font; > } > > } >diff --git a/Source/WebCore/html/HTMLCanvasElement.cpp b/Source/WebCore/html/HTMLCanvasElement.cpp >index 6298643a2d96092a4cfee988dd28b6d937c5da73..8d209fb91839163904ed1e893cbd096be1b401e5 100644 >--- a/Source/WebCore/html/HTMLCanvasElement.cpp >+++ b/Source/WebCore/html/HTMLCanvasElement.cpp >@@ -64,6 +64,10 @@ > #include "MediaStream.h" > #endif > >+#if ENABLE(WEB_API_STATISTICS) >+#include "ResourceLoadObserver.h" >+#endif >+ > #if ENABLE(WEBGL) > #include "WebGLContextAttributes.h" > #include "WebGLRenderingContext.h" >@@ -698,6 +702,10 @@ ExceptionOr<UncachedString> HTMLCanvasElement::toDataURL(const String& mimeType, > > if (m_size.isEmpty() || !buffer()) > return UncachedString { "data:,"_s }; >+#if ENABLE(WEB_API_STATISTICS) >+ // Records attempt to read canvas data, regardless of whether the read is successful or not. >+ ResourceLoadObserver::shared().logCanvasRead(document()); >+#endif > > auto encodingMIMEType = toEncodingMimeType(mimeType); > auto quality = qualityFromJSValue(qualityValue); >@@ -727,6 +735,10 @@ ExceptionOr<void> HTMLCanvasElement::toBlob(ScriptExecutionContext& context, Ref > callback->scheduleCallback(context, nullptr); > return { }; > } >+#if ENABLE(WEB_API_STATISTICS) >+ // Records attempt to read canvas data, regardless of whether the read is successful or not. >+ ResourceLoadObserver::shared().logCanvasRead(document()); >+#endif > > auto encodingMIMEType = toEncodingMimeType(mimeType); > auto quality = qualityFromJSValue(qualityValue); >@@ -755,8 +767,13 @@ ExceptionOr<void> HTMLCanvasElement::toBlob(ScriptExecutionContext& context, Ref > RefPtr<ImageData> HTMLCanvasElement::getImageData() > { > #if ENABLE(WEBGL) >- if (is<WebGLRenderingContextBase>(m_context.get())) >+ if (is<WebGLRenderingContextBase>(m_context.get())) { >+#if ENABLE(WEB_API_STATISTICS) >+ // Records attempt to read canvas data, regardless of whether the read is successful or not. >+ ResourceLoadObserver::shared().logCanvasRead(document()); >+#endif > return downcast<WebGLRenderingContextBase>(*m_context).paintRenderingResultsToImageData(); >+ } > #endif > return nullptr; > } >@@ -768,6 +785,10 @@ RefPtr<MediaSample> HTMLCanvasElement::toMediaSample() > auto* imageBuffer = buffer(); > if (!imageBuffer) > return nullptr; >+#if ENABLE(WEB_API_STATISTICS) >+ // Records attempt to read canvas data, regardless of whether the read is successful or not. >+ ResourceLoadObserver::shared().logCanvasRead(document()); >+#endif > > #if PLATFORM(COCOA) > makeRenderingResultsAvailable(); >@@ -781,6 +802,10 @@ ExceptionOr<Ref<MediaStream>> HTMLCanvasElement::captureStream(ScriptExecutionCo > { > if (!originClean()) > return Exception(SecurityError, "Canvas is tainted"_s); >+#if ENABLE(WEB_API_STATISTICS) >+ // Records attempt to read canvas data, regardless of whether the read is successful or not. >+ ResourceLoadObserver::shared().logCanvasRead(document()); >+#endif > > if (frameRequestRate && frameRequestRate.value() < 0) > return Exception(NotSupportedError, "frameRequestRate is negative"_s); >diff --git a/Source/WebCore/html/canvas/CanvasRenderingContext2D.cpp b/Source/WebCore/html/canvas/CanvasRenderingContext2D.cpp >index e27d95194819b02e9414d49bfa8faff2ea1761de..88860497462a249293d4969effa6bed0008a4c31 100644 >--- a/Source/WebCore/html/canvas/CanvasRenderingContext2D.cpp >+++ b/Source/WebCore/html/canvas/CanvasRenderingContext2D.cpp >@@ -49,6 +49,10 @@ > #include <wtf/MathExtras.h> > #include <wtf/text/StringBuilder.h> > >+#if ENABLE(WEB_API_STATISTICS) >+#include "ResourceLoadObserver.h" >+#endif >+ > namespace WebCore { > > using namespace HTMLNames; >@@ -363,6 +367,12 @@ static void normalizeSpaces(String& text) > > Ref<TextMetrics> CanvasRenderingContext2D::measureText(const String& text) > { >+#if ENABLE(WEB_API_STATISTICS) >+ HTMLCanvasElement& canvas = this->canvas(); >+ ResourceLoadObserver::shared().logCanvasWriteOrMeasure(canvas.document(), text); >+ ResourceLoadObserver::shared().logCanvasRead(canvas.document()); >+#endif >+ > Ref<TextMetrics> metrics = TextMetrics::create(); > > String normalizedText = text; >@@ -451,6 +461,11 @@ FloatPoint CanvasRenderingContext2D::textOffset(float width, TextDirection direc > > void CanvasRenderingContext2D::drawTextInternal(const String& text, float x, float y, bool fill, std::optional<float> maxWidth) > { >+#if ENABLE(WEB_API_STATISTICS) >+ HTMLCanvasElement& canvas = this->canvas(); >+ ResourceLoadObserver::shared().logCanvasWriteOrMeasure(canvas.document(), text); >+#endif >+ > auto& fontProxy = this->fontProxy(); > const auto& fontMetrics = fontProxy.fontMetrics(); > >diff --git a/Source/WebCore/loader/CanvasActivityRecord.cpp b/Source/WebCore/loader/CanvasActivityRecord.cpp >new file mode 100644 >index 0000000000000000000000000000000000000000..6b8fd225f18cc1c63fe10a553ae7dd921776f0af >--- /dev/null >+++ b/Source/WebCore/loader/CanvasActivityRecord.cpp >@@ -0,0 +1,46 @@ >+/* >+ * Copyright (C) 2018 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. >+ */ >+ >+#include "config.h" >+#include "CanvasActivityRecord.h" >+ >+#include <wtf/text/StringHash.h> >+#include <wtf/text/WTFString.h> >+ >+const unsigned textCapacity = 10; >+namespace WebCore { >+bool CanvasActivityRecord::recordWrittenOrMeasuredText(const String& text) >+{ >+ if (textWritten.size() < textCapacity && textWritten.add(text).isNewEntry) >+ return true; >+ return false; >+} >+ >+void CanvasActivityRecord::mergeWith(const CanvasActivityRecord& otherCanvasActivityRecord) >+{ >+ textWritten.add(otherCanvasActivityRecord.textWritten.begin(), otherCanvasActivityRecord.textWritten.end()); >+ wasDataRead |= otherCanvasActivityRecord.wasDataRead; >+} >+} // namespace WebCore >diff --git a/Source/WebCore/loader/CanvasActivityRecord.h b/Source/WebCore/loader/CanvasActivityRecord.h >new file mode 100644 >index 0000000000000000000000000000000000000000..8cc142dd17a2989e32e1567041396b205a3e92b8 >--- /dev/null >+++ b/Source/WebCore/loader/CanvasActivityRecord.h >@@ -0,0 +1,57 @@ >+/* >+ * Copyright (C) 2018 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 >+#include <wtf/HashSet.h> >+ >+namespace WebCore { >+struct CanvasActivityRecord { >+ HashSet<String> textWritten; >+ bool wasDataRead { false }; >+ >+ bool recordWrittenOrMeasuredText(const String&); >+ void mergeWith(const CanvasActivityRecord&); >+ >+ template <class Encoder> void encode(Encoder&) const; >+ template <class Decoder> static bool decode(Decoder&, CanvasActivityRecord&); >+}; >+ >+template <class Encoder> >+void CanvasActivityRecord::encode(Encoder& encoder) const >+{ >+ encoder << textWritten; >+ encoder << wasDataRead; >+} >+ >+template <class Decoder> >+bool CanvasActivityRecord::decode(Decoder& decoder, CanvasActivityRecord& canvasActivityRecord) >+{ >+ if (!decoder.decode(canvasActivityRecord.textWritten)) >+ return false; >+ if (!decoder.decode(canvasActivityRecord.wasDataRead)) >+ return false; >+ return true; >+} >+} >diff --git a/Source/WebCore/loader/ResourceLoadObserver.cpp b/Source/WebCore/loader/ResourceLoadObserver.cpp >index 8b9836e1ce12714bed2b6c2cae26f1fa78c9a856..3e1563a6c5cff6bd2937fd6f262c473271040ddd 100644 >--- a/Source/WebCore/loader/ResourceLoadObserver.cpp >+++ b/Source/WebCore/loader/ResourceLoadObserver.cpp >@@ -283,6 +283,75 @@ void ResourceLoadObserver::requestStorageAccessUnderOpener(const String& domainI > } > #endif > >+#if ENABLE(WEB_API_STATISTICS) >+// Web API stats >+void ResourceLoadObserver::logFontLoad(const Document& document, const String& familyName, bool loadStatus) >+{ >+ if (!shouldLog(document.page())) >+ return; >+ auto registrableDomain = primaryDomain(document.url()); >+ auto& statistics = ensureResourceStatisticsForPrimaryDomain(registrableDomain); >+ if (!loadStatus) >+ statistics.fontsFailedToLoad.add(familyName); >+ statistics.fontsLoaded.add(familyName); >+ auto mainFrameRegistrableDomain = primaryDomain(document.frame()->mainFrame().document()->url()); >+ if (statistics.topFrameRegistrableDomainsWhichAccessedWebAPIs.add(mainFrameRegistrableDomain).isNewEntry) >+ scheduleNotificationIfNeeded(); >+} >+ >+void ResourceLoadObserver::logCanvasRead(const Document& document) >+{ >+ if (!shouldLog(document.page())) >+ return; >+ auto registrableDomain = primaryDomain(document.url()); >+ auto& statistics = ensureResourceStatisticsForPrimaryDomain(registrableDomain); >+ auto mainFrameRegistrableDomain = primaryDomain(document.frame()->mainFrame().document()->url()); >+ statistics.canvasActivityRecord.wasDataRead = true; >+ if (statistics.topFrameRegistrableDomainsWhichAccessedWebAPIs.add(mainFrameRegistrableDomain).isNewEntry) >+ scheduleNotificationIfNeeded(); >+} >+ >+void ResourceLoadObserver::logCanvasWriteOrMeasure(const Document& document, const String& textWritten) >+{ >+ if (!shouldLog(document.page())) >+ return; >+ bool shouldCallNotificationCallback = false; >+ auto registrableDomain = primaryDomain(document.url()); >+ auto& statistics = ensureResourceStatisticsForPrimaryDomain(registrableDomain); >+ auto mainFrameRegistrableDomain = primaryDomain(document.frame()->mainFrame().document()->url()); >+ if (statistics.canvasActivityRecord.recordWrittenOrMeasuredText(textWritten)) >+ shouldCallNotificationCallback = true; >+ if (statistics.topFrameRegistrableDomainsWhichAccessedWebAPIs.add(mainFrameRegistrableDomain).isNewEntry) >+ shouldCallNotificationCallback = true; >+ if (shouldCallNotificationCallback) >+ scheduleNotificationIfNeeded(); >+} >+ >+void ResourceLoadObserver::logNavigatorAPIAccessed(const Document& document, const String& functionName) >+{ >+ if (!shouldLog(document.page())) >+ return; >+ auto registrableDomain = primaryDomain(document.url()); >+ auto& statistics = ensureResourceStatisticsForPrimaryDomain(registrableDomain); >+ statistics.navigatorFunctionsAccessed.add(functionName); >+ auto mainFrameRegistrableDomain = primaryDomain(document.frame()->mainFrame().document()->url()); >+ if (statistics.topFrameRegistrableDomainsWhichAccessedWebAPIs.add(mainFrameRegistrableDomain).isNewEntry) >+ scheduleNotificationIfNeeded(); >+} >+ >+void ResourceLoadObserver::logScreenAPIAccessed(const Document& document, const String& functionName) >+{ >+ if (!shouldLog(document.page())) >+ return; >+ auto registrableDomain = primaryDomain(document.url()); >+ auto& statistics = ensureResourceStatisticsForPrimaryDomain(registrableDomain); >+ statistics.screenFunctionsAccessed.add(functionName); >+ auto mainFrameRegistrableDomain = primaryDomain(document.frame()->mainFrame().document()->url()); >+ if (statistics.topFrameRegistrableDomainsWhichAccessedWebAPIs.add(mainFrameRegistrableDomain).isNewEntry) >+ scheduleNotificationIfNeeded(); >+} >+#endif >+ > ResourceLoadStatistics& ResourceLoadObserver::ensureResourceStatisticsForPrimaryDomain(const String& primaryDomain) > { > auto addResult = m_resourceStatisticsMap.ensure(primaryDomain, [&primaryDomain] { >diff --git a/Source/WebCore/loader/ResourceLoadObserver.h b/Source/WebCore/loader/ResourceLoadObserver.h >index 52570a79aa8ffdcbfb9b079f375f283526193409..7f58c35a045b211c6c4ae940a5388d590f4a94d9 100644 >--- a/Source/WebCore/loader/ResourceLoadObserver.h >+++ b/Source/WebCore/loader/ResourceLoadObserver.h >@@ -31,6 +31,10 @@ > #include <wtf/NeverDestroyed.h> > #include <wtf/text/WTFString.h> > >+#if ENABLE(WEB_API_STATISTICS) >+#include "CanvasActivityRecord.h" >+#endif >+ > namespace WTF { > class Lock; > class WorkQueue; >@@ -57,6 +61,14 @@ public: > void logWebSocketLoading(const Frame*, const URL&); > void logUserInteractionWithReducedTimeResolution(const Document&); > void logWindowCreation(const URL& popupUrl, uint64_t openerPageID, Document& openerDocument); >+ >+#if ENABLE(WEB_API_STATISTICS) >+ void logFontLoad(const Document&, const String& familyName, bool loadStatus); >+ void logCanvasRead(const Document&); >+ void logCanvasWriteOrMeasure(const Document&, const String& textWritten); >+ void logNavigatorAPIAccessed(const Document&, const String& functionName); >+ void logScreenAPIAccessed(const Document&, const String& functionName); >+#endif > > WEBCORE_EXPORT String statisticsForOrigin(const String&); > >diff --git a/Source/WebCore/loader/ResourceLoadStatistics.cpp b/Source/WebCore/loader/ResourceLoadStatistics.cpp >index d75639c62c0385e655c6b91d9e9cdf0748443af4..1949330393f955a1ab1d171f84ebb582ab49221b 100644 >--- a/Source/WebCore/loader/ResourceLoadStatistics.cpp >+++ b/Source/WebCore/loader/ResourceLoadStatistics.cpp >@@ -59,6 +59,18 @@ static void encodeHashSet(KeyedEncoder& encoder, const String& label, const Hash > }); > } > >+#if ENABLE(WEB_API_STATISTICS) >+static void encodeCanvasActivityRecord(KeyedEncoder& encoder, const String& label, const CanvasActivityRecord& canvasActivityRecord) >+{ >+ encoder.encodeObject(label, canvasActivityRecord, [] (KeyedEncoder& encoderInner, const CanvasActivityRecord& canvasActivityRecord) { >+ encoderInner.encodeBool("wasDataRead", canvasActivityRecord.wasDataRead); >+ encoderInner.encodeObjects("textWritten", canvasActivityRecord.textWritten.begin(), canvasActivityRecord.textWritten.end(), [] (KeyedEncoder& encoderInner2, const String& text) { >+ encoderInner2.encodeString("text", text); >+ }); >+ }); >+} >+#endif >+ > void ResourceLoadStatistics::encode(KeyedEncoder& encoder) const > { > encoder.encodeString("PrevalentResourceOrigin", highLevelDomain); >@@ -92,6 +104,16 @@ void ResourceLoadStatistics::encode(KeyedEncoder& encoder) const > > encoder.encodeUInt32("timesAccessedAsFirstPartyDueToUserInteraction", timesAccessedAsFirstPartyDueToUserInteraction); > encoder.encodeUInt32("timesAccessedAsFirstPartyDueToStorageAccessAPI", timesAccessedAsFirstPartyDueToStorageAccessAPI); >+ >+#if ENABLE(WEB_API_STATISTICS) >+ // Web API stats >+ encodeHashCountedSet(encoder, "fontsFailedToLoad", fontsFailedToLoad); >+ encodeHashCountedSet(encoder, "fontsLoaded", fontsLoaded); >+ encodeHashCountedSet(encoder, "topFrameRegistrableDomainsWhichAccessedWebAPIs", topFrameRegistrableDomainsWhichAccessedWebAPIs); >+ encodeCanvasActivityRecord(encoder, "canvasActivityRecord", canvasActivityRecord); >+ encodeHashSet(encoder, "navigatorFunctionsAccessed", navigatorFunctionsAccessed); >+ encodeHashSet(encoder, "screenFunctionsAccessed", screenFunctionsAccessed); >+#endif > } > > static void decodeHashCountedSet(KeyedDecoder& decoder, const String& label, HashCountedSet<String>& hashCountedSet) >@@ -122,6 +144,24 @@ static void decodeHashSet(KeyedDecoder& decoder, const String& label, HashSet<St > }); > } > >+#if ENABLE(WEB_API_STATISTICS) >+static void decodeCanvasActivityRecord(KeyedDecoder& decoder, const String& label, CanvasActivityRecord& canvasActivityRecord) >+{ >+ decoder.decodeObject(label, canvasActivityRecord, [] (KeyedDecoder& decoderInner, CanvasActivityRecord& canvasActivityRecord) { >+ if (!decoderInner.decodeBool("wasDataRead", canvasActivityRecord.wasDataRead)) >+ return false; >+ Vector<String> ignore; >+ decoderInner.decodeObjects("textWritten", ignore, [&canvasActivityRecord] (KeyedDecoder& decoderInner2, String& text) { >+ if (!decoderInner2.decodeString("text", text)) >+ return false; >+ canvasActivityRecord.textWritten.add(text); >+ return true; >+ }); >+ return true; >+ }); >+} >+#endif >+ > bool ResourceLoadStatistics::decode(KeyedDecoder& decoder, unsigned modelVersion) > { > if (!decoder.decodeString("PrevalentResourceOrigin", highLevelDomain)) >@@ -180,6 +220,18 @@ bool ResourceLoadStatistics::decode(KeyedDecoder& decoder, unsigned modelVersion > if (!decoder.decodeUInt32("timesAccessedAsFirstPartyDueToStorageAccessAPI", timesAccessedAsFirstPartyDueToStorageAccessAPI)) > timesAccessedAsFirstPartyDueToStorageAccessAPI = 0; > } >+ >+#if ENABLE(WEB_API_STATISTICS) >+ if (modelVersion >= 13) { >+ decodeHashCountedSet(decoder, "fontsFailedToLoad", fontsFailedToLoad); >+ decodeHashCountedSet(decoder, "fontsLoaded", fontsLoaded); >+ decodeHashCountedSet(decoder, "topFrameRegistrableDomainsWhichAccessedWebAPIs", topFrameRegistrableDomainsWhichAccessedWebAPIs); >+ decodeCanvasActivityRecord(decoder, "canvasActivityRecord", canvasActivityRecord); >+ decodeHashSet(decoder, "navigatorFunctionsAccessed", navigatorFunctionsAccessed); >+ decodeHashSet(decoder, "screenFunctionsAccessed", screenFunctionsAccessed); >+ } >+#endif >+ > return true; > } > >@@ -268,6 +320,14 @@ String ResourceLoadStatistics::toString() const > appendBoolean(builder, "isMarkedForCookieBlocking", isMarkedForCookieBlocking); > builder.append('\n'); > >+#if ENABLE(WEB_API_STATISTICS) >+ appendHashCountedSet(builder, "fontsFailedToLoad", fontsFailedToLoad); >+ appendHashCountedSet(builder, "fontsLoaded", fontsLoaded); >+ appendHashCountedSet(builder, "topFrameRegistrableDomainsWhichAccessedWebAPIs", topFrameRegistrableDomainsWhichAccessedWebAPIs); >+ appendHashSet(builder, "navigatorFunctionsAccessed", navigatorFunctionsAccessed); >+ appendHashSet(builder, "screenFunctions", screenFunctionsAccessed); >+#endif >+ > builder.append('\n'); > > return builder.toString(); >@@ -330,6 +390,17 @@ void ResourceLoadStatistics::merge(const ResourceLoadStatistics& other) > > // In-memory only > isMarkedForCookieBlocking |= other.isMarkedForCookieBlocking; >+ >+#if ENABLE(WEB_API_STATISTICS) >+ mergeHashCountedSet(fontsFailedToLoad, other.fontsFailedToLoad); >+ mergeHashCountedSet(fontsLoaded, other.fontsLoaded); >+ mergeHashCountedSet(topFrameRegistrableDomainsWhichAccessedWebAPIs, other.topFrameRegistrableDomainsWhichAccessedWebAPIs); >+ >+ canvasActivityRecord.mergeWith(other.canvasActivityRecord); >+ >+ navigatorFunctionsAccessed.add(other.navigatorFunctionsAccessed.begin(), other.navigatorFunctionsAccessed.end()); >+ screenFunctionsAccessed.add(other.screenFunctionsAccessed.begin(), other.screenFunctionsAccessed.end()); >+#endif > } > > String ResourceLoadStatistics::primaryDomain(const URL& url) >diff --git a/Source/WebCore/loader/ResourceLoadStatistics.h b/Source/WebCore/loader/ResourceLoadStatistics.h >index eb9c7b6906493dd9e78b45d8c1b87e7431d9b033..7a314ed22d07db9333421ed9eb8b4af0c865323c 100644 >--- a/Source/WebCore/loader/ResourceLoadStatistics.h >+++ b/Source/WebCore/loader/ResourceLoadStatistics.h >@@ -32,6 +32,10 @@ > #include <wtf/text/StringHash.h> > #include <wtf/text/WTFString.h> > >+#if ENABLE(WEB_API_STATISTICS) >+#include "CanvasActivityRecord.h" >+#endif >+ > namespace WebCore { > > class KeyedDecoder; >@@ -97,6 +101,17 @@ struct ResourceLoadStatistics { > > // In-memory only > bool isMarkedForCookieBlocking { false }; >+ >+#if ENABLE(WEB_API_STATISTICS) >+ // This set represents the registrable domain of the top frame where web API >+ // were used in the top frame or one of its subframes. >+ HashCountedSet<String> topFrameRegistrableDomainsWhichAccessedWebAPIs; >+ HashCountedSet<String> fontsFailedToLoad; >+ HashCountedSet<String> fontsLoaded; >+ CanvasActivityRecord canvasActivityRecord; >+ HashSet<String> navigatorFunctionsAccessed; >+ HashSet<String> screenFunctionsAccessed; >+#endif > }; > > } // namespace WebCore >diff --git a/Source/WebCore/page/Navigator.cpp b/Source/WebCore/page/Navigator.cpp >index 78098006b72bc17a6d159fd2ad18dc7f773b659c..a2bfe04378449f608aa886324195ff565300271c 100644 >--- a/Source/WebCore/page/Navigator.cpp >+++ b/Source/WebCore/page/Navigator.cpp >@@ -41,6 +41,9 @@ > #include <wtf/Language.h> > #include <wtf/StdLibExtras.h> > >+#if ENABLE(WEB_API_STATISTICS) >+#include "ResourceLoadObserver.h" >+#endif > > namespace WebCore { > using namespace WTF; >@@ -71,6 +74,9 @@ String Navigator::appVersion() const > { > if (!m_frame) > return String(); >+#if ENABLE(WEB_API_STATISTICS) >+ ResourceLoadObserver::shared().logNavigatorAPIAccessed(*m_frame->document(), "appVersion"); >+#endif > String appVersion = NavigatorBase::appVersion(); > if (shouldHideFourDot(*m_frame)) > appVersion.replace("4.", "4_"); >@@ -79,7 +85,12 @@ String Navigator::appVersion() const > > const String& Navigator::userAgent() const > { >- if (m_userAgent.isNull() && m_frame && m_frame->page()) >+ if (!m_frame || !m_frame->page()) >+ return m_userAgent; >+#if ENABLE(WEB_API_STATISTICS) >+ ResourceLoadObserver::shared().logNavigatorAPIAccessed(*m_frame->document(), "userAgent"); >+#endif >+ if (m_userAgent.isNull()) > m_userAgent = m_frame->loader().userAgent(m_frame->document()->url()); > return m_userAgent; > } >@@ -96,6 +107,10 @@ bool Navigator::onLine() const > > DOMPluginArray& Navigator::plugins() > { >+#if ENABLE(WEB_API_STATISTICS) >+ if (m_frame) >+ ResourceLoadObserver::shared().logNavigatorAPIAccessed(*m_frame->document(), "plugins"); >+#endif > if (!m_plugins) > m_plugins = DOMPluginArray::create(m_frame); > return *m_plugins; >@@ -103,6 +118,10 @@ DOMPluginArray& Navigator::plugins() > > DOMMimeTypeArray& Navigator::mimeTypes() > { >+#if ENABLE(WEB_API_STATISTICS) >+ if (m_frame) >+ ResourceLoadObserver::shared().logNavigatorAPIAccessed(*m_frame->document(), "mimeTypes"); >+#endif > if (!m_mimeTypes) > m_mimeTypes = DOMMimeTypeArray::create(m_frame); > return *m_mimeTypes; >@@ -112,6 +131,10 @@ bool Navigator::cookieEnabled() const > { > if (!m_frame) > return false; >+ >+#if ENABLE(WEB_API_STATISTICS) >+ ResourceLoadObserver::shared().logNavigatorAPIAccessed(*m_frame->document(), "cookieEnabled"); >+#endif > > if (m_frame->page() && !m_frame->page()->settings().cookieEnabled()) > return false; >@@ -127,6 +150,10 @@ bool Navigator::javaEnabled() const > { > if (!m_frame) > return false; >+ >+#if ENABLE(WEB_API_STATISTICS) >+ ResourceLoadObserver::shared().logNavigatorAPIAccessed(*m_frame->document(), "javaEnabled"); >+#endif > > if (!m_frame->settings().isJavaEnabled()) > return false; >diff --git a/Source/WebCore/page/Screen.cpp b/Source/WebCore/page/Screen.cpp >index ff487d7cad06c754f00fbbd0244bdaa87ae9d2c0..4a2f759a076633d83fc473d4a278e59972230c97 100644 >--- a/Source/WebCore/page/Screen.cpp >+++ b/Source/WebCore/page/Screen.cpp >@@ -34,6 +34,10 @@ > #include "FrameView.h" > #include "PlatformScreen.h" > >+#if ENABLE(WEB_API_STATISTICS) >+#include "ResourceLoadObserver.h" >+#endif >+ > namespace WebCore { > > Screen::Screen(Frame* frame) >@@ -45,6 +49,9 @@ unsigned Screen::height() const > { > if (!m_frame) > return 0; >+#if ENABLE(WEB_API_STATISTICS) >+ ResourceLoadObserver::shared().logScreenAPIAccessed(*m_frame->document(), "height"); >+#endif > long height = static_cast<long>(screenRect(m_frame->view()).height()); > return static_cast<unsigned>(height); > } >@@ -53,6 +60,9 @@ unsigned Screen::width() const > { > if (!m_frame) > return 0; >+#if ENABLE(WEB_API_STATISTICS) >+ ResourceLoadObserver::shared().logScreenAPIAccessed(*m_frame->document(), "width"); >+#endif > long width = static_cast<long>(screenRect(m_frame->view()).width()); > return static_cast<unsigned>(width); > } >@@ -61,6 +71,9 @@ unsigned Screen::colorDepth() const > { > if (!m_frame) > return 0; >+#if ENABLE(WEB_API_STATISTICS) >+ ResourceLoadObserver::shared().logScreenAPIAccessed(*m_frame->document(), "colorDepth"); >+#endif > return static_cast<unsigned>(screenDepth(m_frame->view())); > } > >@@ -68,6 +81,9 @@ unsigned Screen::pixelDepth() const > { > if (!m_frame) > return 0; >+#if ENABLE(WEB_API_STATISTICS) >+ ResourceLoadObserver::shared().logScreenAPIAccessed(*m_frame->document(), "pixelDepth"); >+#endif > return static_cast<unsigned>(screenDepth(m_frame->view())); > } > >@@ -75,6 +91,9 @@ int Screen::availLeft() const > { > if (!m_frame) > return 0; >+#if ENABLE(WEB_API_STATISTICS) >+ ResourceLoadObserver::shared().logScreenAPIAccessed(*m_frame->document(), "availLeft"); >+#endif > return static_cast<int>(screenAvailableRect(m_frame->view()).x()); > } > >@@ -82,6 +101,9 @@ int Screen::availTop() const > { > if (!m_frame) > return 0; >+#if ENABLE(WEB_API_STATISTICS) >+ ResourceLoadObserver::shared().logScreenAPIAccessed(*m_frame->document(), "availTop"); >+#endif > return static_cast<int>(screenAvailableRect(m_frame->view()).y()); > } > >@@ -89,6 +111,9 @@ unsigned Screen::availHeight() const > { > if (!m_frame) > return 0; >+#if ENABLE(WEB_API_STATISTICS) >+ ResourceLoadObserver::shared().logScreenAPIAccessed(*m_frame->document(), "availHeight"); >+#endif > return static_cast<unsigned>(screenAvailableRect(m_frame->view()).height()); > } > >@@ -96,6 +121,9 @@ unsigned Screen::availWidth() const > { > if (!m_frame) > return 0; >+#if ENABLE(WEB_API_STATISTICS) >+ ResourceLoadObserver::shared().logScreenAPIAccessed(*m_frame->document(), "availWidth"); >+#endif > return static_cast<unsigned>(screenAvailableRect(m_frame->view()).width()); > } > >diff --git a/Source/WebKit/Configurations/FeatureDefines.xcconfig b/Source/WebKit/Configurations/FeatureDefines.xcconfig >index 41a336c75084648f7bfc607ba82245ab25568170..7a7d9ef8ddec7b03b9d9ff9b54e99fc1cb5ca6e2 100644 >--- a/Source/WebKit/Configurations/FeatureDefines.xcconfig >+++ b/Source/WebKit/Configurations/FeatureDefines.xcconfig >@@ -352,6 +352,8 @@ ENABLE_WEBGPU_watchos = ENABLE_WEBGPU; > ENABLE_WEBGPU_appletvos = ENABLE_WEBGPU; > ENABLE_WEBGPU_macosx = ENABLE_WEBGPU; > >+ENABLE_WEB_API_STATISTICS = ENABLE_WEB_API_STATISTICS; >+ > ENABLE_WEB_AUDIO = ENABLE_WEB_AUDIO; > > ENABLE_WEB_AUTHN = $(ENABLE_WEB_AUTHN_$(WK_PLATFORM_NAME)); >@@ -368,4 +370,4 @@ ENABLE_WIRELESS_PLAYBACK_TARGET = ENABLE_WIRELESS_PLAYBACK_TARGET; > > ENABLE_XSLT = ENABLE_XSLT; > >-FEATURE_DEFINES = $(ENABLE_3D_TRANSFORMS) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_ACCELERATED_OVERFLOW_SCROLLING) $(ENABLE_APPLE_PAY) $(ENABLE_APPLE_PAY_SESSION_V3) $(ENABLE_APPLICATION_MANIFEST) $(ENABLE_ATTACHMENT_ELEMENT) $(ENABLE_AVF_CAPTIONS) $(ENABLE_CACHE_PARTITIONING) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CONTENT_FILTERING) $(ENABLE_CSS3_TEXT) $(ENABLE_CSS_ANIMATIONS_LEVEL_2) $(ENABLE_CSS_BOX_DECORATION_BREAK) $(ENABLE_CSS_COMPOSITING) $(ENABLE_CSS_DEVICE_ADAPTATION) $(ENABLE_CSS_IMAGE_ORIENTATION) $(ENABLE_CSS_IMAGE_RESOLUTION) $(ENABLE_CSS_SCROLL_SNAP) $(ENABLE_CSS_SELECTORS_LEVEL4) $(ENABLE_CSS_TRAILING_WORD) $(ENABLE_CURSOR_VISIBILITY) $(ENABLE_CUSTOM_SCHEME_HANDLER) $(ENABLE_DASHBOARD_SUPPORT) $(ENABLE_DATA_INTERACTION) $(ENABLE_DATACUE_VALUE) $(ENABLE_DATALIST_ELEMENT) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DRAG_SUPPORT) $(ENABLE_ENCRYPTED_MEDIA) $(ENABLE_EXPERIMENTAL_FEATURES) $(ENABLE_FAST_JIT_PERMISSIONS) $(ENABLE_FILTERS_LEVEL_2) $(ENABLE_FTL_JIT) $(ENABLE_FULLSCREEN_API) $(ENABLE_GAMEPAD) $(ENABLE_GEOLOCATION) $(ENABLE_ICONDATABASE) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INDEXED_DATABASE_IN_WORKERS) $(ENABLE_INPUT_TYPE_COLOR) $(ENABLE_INPUT_TYPE_COLOR_POPOVER) $(ENABLE_INPUT_TYPE_DATE) $(ENABLE_INPUT_TYPE_DATETIME_INCOMPLETE) $(ENABLE_INPUT_TYPE_DATETIMELOCAL) $(ENABLE_INPUT_TYPE_MONTH) $(ENABLE_INPUT_TYPE_TIME) $(ENABLE_INPUT_TYPE_WEEK) $(ENABLE_INTERSECTION_OBSERVER) $(ENABLE_INTL) $(ENABLE_IOS_GESTURE_EVENTS) $(ENABLE_IOS_TOUCH_EVENTS) $(ENABLE_JIT) $(ENABLE_JS_ASYNC_ITERATION) $(ENABLE_KEYBOARD_CODE_ATTRIBUTE) $(ENABLE_KEYBOARD_KEY_ATTRIBUTE) $(ENABLE_LAYOUT_FORMATTING_CONTEXT) $(ENABLE_LEGACY_CSS_VENDOR_PREFIXES) $(ENABLE_LEGACY_CUSTOM_PROTOCOL_MANAGER) $(ENABLE_LEGACY_ENCRYPTED_MEDIA) $(ENABLE_LETTERPRESS) $(ENABLE_MAC_GESTURE_EVENTS) $(ENABLE_MAC_VIDEO_TOOLBOX) $(ENABLE_MATHML) $(ENABLE_MEDIA_CAPTURE) $(ENABLE_MEDIA_CONTROLS_SCRIPT) $(ENABLE_MEDIA_SESSION) $(ENABLE_MEDIA_SOURCE) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_MEDIA_STREAM) $(ENABLE_METER_ELEMENT) $(ENABLE_MHTML) $(ENABLE_MOUSE_CURSOR_SCALE) $(ENABLE_NAVIGATOR_CONTENT_UTILS) $(ENABLE_NAVIGATOR_STANDALONE) $(ENABLE_NOTIFICATIONS) $(ENABLE_PAYMENT_REQUEST) $(ENABLE_PDFKIT_PLUGIN) $(ENABLE_POINTER_LOCK) $(ENABLE_PUBLIC_SUFFIX_LIST) $(ENABLE_QUOTA) $(ENABLE_REMOTE_INSPECTOR) $(ENABLE_RESOLUTION_MEDIA_QUERY) $(ENABLE_RESOURCE_USAGE) $(ENABLE_RUBBER_BANDING) $(ENABLE_SERVICE_CONTROLS) $(ENABLE_SERVICE_WORKER) $(ENABLE_SPEECH_SYNTHESIS) $(ENABLE_STREAMS_API) $(ENABLE_SUBTLE_CRYPTO) $(ENABLE_SVG_FONTS) $(ENABLE_TELEPHONE_NUMBER_DETECTION) $(ENABLE_TEXT_AUTOSIZING) $(ENABLE_TOUCH_EVENTS) $(ENABLE_USER_MESSAGE_HANDLERS) $(ENABLE_USERSELECT_ALL) $(ENABLE_VARIATION_FONTS) $(ENABLE_VIDEO) $(ENABLE_VIDEO_PRESENTATION_MODE) $(ENABLE_VIDEO_TRACK) $(ENABLE_VIDEO_USES_ELEMENT_FULLSCREEN) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_AUTHN) $(ENABLE_WEB_RTC) $(ENABLE_WEBASSEMBLY) $(ENABLE_WEBASSEMBLY_STREAMING_API) $(ENABLE_WEBGL) $(ENABLE_WEBGL2) $(ENABLE_WEBGPU) $(ENABLE_WIRELESS_PLAYBACK_TARGET) $(ENABLE_XSLT); >+FEATURE_DEFINES = $(ENABLE_3D_TRANSFORMS) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_ACCELERATED_OVERFLOW_SCROLLING) $(ENABLE_APPLE_PAY) $(ENABLE_APPLE_PAY_SESSION_V3) $(ENABLE_APPLICATION_MANIFEST) $(ENABLE_ATTACHMENT_ELEMENT) $(ENABLE_AVF_CAPTIONS) $(ENABLE_CACHE_PARTITIONING) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CONTENT_FILTERING) $(ENABLE_CSS3_TEXT) $(ENABLE_CSS_ANIMATIONS_LEVEL_2) $(ENABLE_CSS_BOX_DECORATION_BREAK) $(ENABLE_CSS_COMPOSITING) $(ENABLE_CSS_DEVICE_ADAPTATION) $(ENABLE_CSS_IMAGE_ORIENTATION) $(ENABLE_CSS_IMAGE_RESOLUTION) $(ENABLE_CSS_SCROLL_SNAP) $(ENABLE_CSS_SELECTORS_LEVEL4) $(ENABLE_CSS_TRAILING_WORD) $(ENABLE_CURSOR_VISIBILITY) $(ENABLE_CUSTOM_SCHEME_HANDLER) $(ENABLE_DASHBOARD_SUPPORT) $(ENABLE_DATA_INTERACTION) $(ENABLE_DATACUE_VALUE) $(ENABLE_DATALIST_ELEMENT) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DRAG_SUPPORT) $(ENABLE_ENCRYPTED_MEDIA) $(ENABLE_EXPERIMENTAL_FEATURES) $(ENABLE_FAST_JIT_PERMISSIONS) $(ENABLE_FILTERS_LEVEL_2) $(ENABLE_FTL_JIT) $(ENABLE_FULLSCREEN_API) $(ENABLE_GAMEPAD) $(ENABLE_GEOLOCATION) $(ENABLE_ICONDATABASE) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INDEXED_DATABASE_IN_WORKERS) $(ENABLE_INPUT_TYPE_COLOR) $(ENABLE_INPUT_TYPE_COLOR_POPOVER) $(ENABLE_INPUT_TYPE_DATE) $(ENABLE_INPUT_TYPE_DATETIME_INCOMPLETE) $(ENABLE_INPUT_TYPE_DATETIMELOCAL) $(ENABLE_INPUT_TYPE_MONTH) $(ENABLE_INPUT_TYPE_TIME) $(ENABLE_INPUT_TYPE_WEEK) $(ENABLE_INTERSECTION_OBSERVER) $(ENABLE_INTL) $(ENABLE_IOS_GESTURE_EVENTS) $(ENABLE_IOS_TOUCH_EVENTS) $(ENABLE_JIT) $(ENABLE_JS_ASYNC_ITERATION) $(ENABLE_KEYBOARD_CODE_ATTRIBUTE) $(ENABLE_KEYBOARD_KEY_ATTRIBUTE) $(ENABLE_LAYOUT_FORMATTING_CONTEXT) $(ENABLE_LEGACY_CSS_VENDOR_PREFIXES) $(ENABLE_LEGACY_CUSTOM_PROTOCOL_MANAGER) $(ENABLE_LEGACY_ENCRYPTED_MEDIA) $(ENABLE_LETTERPRESS) $(ENABLE_MAC_GESTURE_EVENTS) $(ENABLE_MAC_VIDEO_TOOLBOX) $(ENABLE_MATHML) $(ENABLE_MEDIA_CAPTURE) $(ENABLE_MEDIA_CONTROLS_SCRIPT) $(ENABLE_MEDIA_SESSION) $(ENABLE_MEDIA_SOURCE) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_MEDIA_STREAM) $(ENABLE_METER_ELEMENT) $(ENABLE_MHTML) $(ENABLE_MOUSE_CURSOR_SCALE) $(ENABLE_NAVIGATOR_CONTENT_UTILS) $(ENABLE_NAVIGATOR_STANDALONE) $(ENABLE_NOTIFICATIONS) $(ENABLE_PAYMENT_REQUEST) $(ENABLE_PDFKIT_PLUGIN) $(ENABLE_POINTER_LOCK) $(ENABLE_PUBLIC_SUFFIX_LIST) $(ENABLE_QUOTA) $(ENABLE_REMOTE_INSPECTOR) $(ENABLE_RESOLUTION_MEDIA_QUERY) $(ENABLE_RESOURCE_USAGE) $(ENABLE_RUBBER_BANDING) $(ENABLE_SERVICE_CONTROLS) $(ENABLE_SERVICE_WORKER) $(ENABLE_SPEECH_SYNTHESIS) $(ENABLE_STREAMS_API) $(ENABLE_SUBTLE_CRYPTO) $(ENABLE_SVG_FONTS) $(ENABLE_TELEPHONE_NUMBER_DETECTION) $(ENABLE_TEXT_AUTOSIZING) $(ENABLE_TOUCH_EVENTS) $(ENABLE_USER_MESSAGE_HANDLERS) $(ENABLE_USERSELECT_ALL) $(ENABLE_VARIATION_FONTS) $(ENABLE_VIDEO) $(ENABLE_VIDEO_PRESENTATION_MODE) $(ENABLE_VIDEO_TRACK) $(ENABLE_VIDEO_USES_ELEMENT_FULLSCREEN) $(ENABLE_WEB_API_STATISTICS) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_AUTHN) $(ENABLE_WEB_RTC) $(ENABLE_WEBASSEMBLY) $(ENABLE_WEBASSEMBLY_STREAMING_API) $(ENABLE_WEBGL) $(ENABLE_WEBGL2) $(ENABLE_WEBGPU) $(ENABLE_WIRELESS_PLAYBACK_TARGET) $(ENABLE_XSLT); >diff --git a/Source/WebKit/Shared/WebCoreArgumentCoders.cpp b/Source/WebKit/Shared/WebCoreArgumentCoders.cpp >index 92d324ca7a9e2c62bbbe9c44eb329d68af0c411e..47e432da88320711fadc49cedb6cc68a1ba35063 100644 >--- a/Source/WebKit/Shared/WebCoreArgumentCoders.cpp >+++ b/Source/WebKit/Shared/WebCoreArgumentCoders.cpp >@@ -2623,6 +2623,18 @@ void ArgumentCoder<ResourceLoadStatistics>::encode(Encoder& encoder, const WebCo > encoder << statistics.isPrevalentResource; > encoder << statistics.isVeryPrevalentResource; > encoder << statistics.dataRecordsRemoved; >+ >+#if ENABLE(WEB_API_STATISTICS) >+ encoder << statistics.fontsFailedToLoad; >+ encoder << statistics.fontsLoaded; >+ encoder << statistics.topFrameRegistrableDomainsWhichAccessedWebAPIs; >+ >+ encoder << statistics.canvasActivityRecord; >+ >+ encoder << statistics.navigatorFunctionsAccessed; >+ encoder << statistics.screenFunctionsAccessed; >+#endif >+ > } > > std::optional<ResourceLoadStatistics> ArgumentCoder<ResourceLoadStatistics>::decode(Decoder& decoder) >@@ -2682,7 +2694,26 @@ std::optional<ResourceLoadStatistics> ArgumentCoder<ResourceLoadStatistics>::dec > > if (!decoder.decode(statistics.dataRecordsRemoved)) > return std::nullopt; >- >+#if ENABLE(WEB_API_STATISTICS) >+ if (!decoder.decode(statistics.fontsFailedToLoad)) >+ return std::nullopt; >+ >+ if (!decoder.decode(statistics.fontsLoaded)) >+ return std::nullopt; >+ >+ if (!decoder.decode(statistics.topFrameRegistrableDomainsWhichAccessedWebAPIs)) >+ return std::nullopt; >+ >+ if (!decoder.decode(statistics.canvasActivityRecord)) >+ return std::nullopt; >+ >+ if (!decoder.decode(statistics.navigatorFunctionsAccessed)) >+ return std::nullopt; >+ >+ if (!decoder.decode(statistics.screenFunctionsAccessed)) >+ return std::nullopt; >+#endif >+ > return WTFMove(statistics); > } > >diff --git a/Source/WebKit/UIProcess/ResourceLoadStatisticsMemoryStore.cpp b/Source/WebKit/UIProcess/ResourceLoadStatisticsMemoryStore.cpp >index 348cacd3be5115cd797ced8856ee546a31faf007..cb6a1d258d716d06348ad4d4611461b85f0c8c17 100644 >--- a/Source/WebKit/UIProcess/ResourceLoadStatisticsMemoryStore.cpp >+++ b/Source/WebKit/UIProcess/ResourceLoadStatisticsMemoryStore.cpp >@@ -47,7 +47,7 @@ namespace WebKit { > > using namespace WebCore; > >-constexpr unsigned statisticsModelVersion { 12 }; >+constexpr unsigned statisticsModelVersion { 13 }; > constexpr unsigned maxNumberOfRecursiveCallsInRedirectTraceBack { 50 }; > constexpr Seconds minimumStatisticsProcessingInterval { 5_s }; > constexpr unsigned operatingDatesWindow { 30 }; >diff --git a/Source/WebKitLegacy/mac/Configurations/FeatureDefines.xcconfig b/Source/WebKitLegacy/mac/Configurations/FeatureDefines.xcconfig >index 41a336c75084648f7bfc607ba82245ab25568170..7a7d9ef8ddec7b03b9d9ff9b54e99fc1cb5ca6e2 100644 >--- a/Source/WebKitLegacy/mac/Configurations/FeatureDefines.xcconfig >+++ b/Source/WebKitLegacy/mac/Configurations/FeatureDefines.xcconfig >@@ -352,6 +352,8 @@ ENABLE_WEBGPU_watchos = ENABLE_WEBGPU; > ENABLE_WEBGPU_appletvos = ENABLE_WEBGPU; > ENABLE_WEBGPU_macosx = ENABLE_WEBGPU; > >+ENABLE_WEB_API_STATISTICS = ENABLE_WEB_API_STATISTICS; >+ > ENABLE_WEB_AUDIO = ENABLE_WEB_AUDIO; > > ENABLE_WEB_AUTHN = $(ENABLE_WEB_AUTHN_$(WK_PLATFORM_NAME)); >@@ -368,4 +370,4 @@ ENABLE_WIRELESS_PLAYBACK_TARGET = ENABLE_WIRELESS_PLAYBACK_TARGET; > > ENABLE_XSLT = ENABLE_XSLT; > >-FEATURE_DEFINES = $(ENABLE_3D_TRANSFORMS) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_ACCELERATED_OVERFLOW_SCROLLING) $(ENABLE_APPLE_PAY) $(ENABLE_APPLE_PAY_SESSION_V3) $(ENABLE_APPLICATION_MANIFEST) $(ENABLE_ATTACHMENT_ELEMENT) $(ENABLE_AVF_CAPTIONS) $(ENABLE_CACHE_PARTITIONING) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CONTENT_FILTERING) $(ENABLE_CSS3_TEXT) $(ENABLE_CSS_ANIMATIONS_LEVEL_2) $(ENABLE_CSS_BOX_DECORATION_BREAK) $(ENABLE_CSS_COMPOSITING) $(ENABLE_CSS_DEVICE_ADAPTATION) $(ENABLE_CSS_IMAGE_ORIENTATION) $(ENABLE_CSS_IMAGE_RESOLUTION) $(ENABLE_CSS_SCROLL_SNAP) $(ENABLE_CSS_SELECTORS_LEVEL4) $(ENABLE_CSS_TRAILING_WORD) $(ENABLE_CURSOR_VISIBILITY) $(ENABLE_CUSTOM_SCHEME_HANDLER) $(ENABLE_DASHBOARD_SUPPORT) $(ENABLE_DATA_INTERACTION) $(ENABLE_DATACUE_VALUE) $(ENABLE_DATALIST_ELEMENT) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DRAG_SUPPORT) $(ENABLE_ENCRYPTED_MEDIA) $(ENABLE_EXPERIMENTAL_FEATURES) $(ENABLE_FAST_JIT_PERMISSIONS) $(ENABLE_FILTERS_LEVEL_2) $(ENABLE_FTL_JIT) $(ENABLE_FULLSCREEN_API) $(ENABLE_GAMEPAD) $(ENABLE_GEOLOCATION) $(ENABLE_ICONDATABASE) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INDEXED_DATABASE_IN_WORKERS) $(ENABLE_INPUT_TYPE_COLOR) $(ENABLE_INPUT_TYPE_COLOR_POPOVER) $(ENABLE_INPUT_TYPE_DATE) $(ENABLE_INPUT_TYPE_DATETIME_INCOMPLETE) $(ENABLE_INPUT_TYPE_DATETIMELOCAL) $(ENABLE_INPUT_TYPE_MONTH) $(ENABLE_INPUT_TYPE_TIME) $(ENABLE_INPUT_TYPE_WEEK) $(ENABLE_INTERSECTION_OBSERVER) $(ENABLE_INTL) $(ENABLE_IOS_GESTURE_EVENTS) $(ENABLE_IOS_TOUCH_EVENTS) $(ENABLE_JIT) $(ENABLE_JS_ASYNC_ITERATION) $(ENABLE_KEYBOARD_CODE_ATTRIBUTE) $(ENABLE_KEYBOARD_KEY_ATTRIBUTE) $(ENABLE_LAYOUT_FORMATTING_CONTEXT) $(ENABLE_LEGACY_CSS_VENDOR_PREFIXES) $(ENABLE_LEGACY_CUSTOM_PROTOCOL_MANAGER) $(ENABLE_LEGACY_ENCRYPTED_MEDIA) $(ENABLE_LETTERPRESS) $(ENABLE_MAC_GESTURE_EVENTS) $(ENABLE_MAC_VIDEO_TOOLBOX) $(ENABLE_MATHML) $(ENABLE_MEDIA_CAPTURE) $(ENABLE_MEDIA_CONTROLS_SCRIPT) $(ENABLE_MEDIA_SESSION) $(ENABLE_MEDIA_SOURCE) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_MEDIA_STREAM) $(ENABLE_METER_ELEMENT) $(ENABLE_MHTML) $(ENABLE_MOUSE_CURSOR_SCALE) $(ENABLE_NAVIGATOR_CONTENT_UTILS) $(ENABLE_NAVIGATOR_STANDALONE) $(ENABLE_NOTIFICATIONS) $(ENABLE_PAYMENT_REQUEST) $(ENABLE_PDFKIT_PLUGIN) $(ENABLE_POINTER_LOCK) $(ENABLE_PUBLIC_SUFFIX_LIST) $(ENABLE_QUOTA) $(ENABLE_REMOTE_INSPECTOR) $(ENABLE_RESOLUTION_MEDIA_QUERY) $(ENABLE_RESOURCE_USAGE) $(ENABLE_RUBBER_BANDING) $(ENABLE_SERVICE_CONTROLS) $(ENABLE_SERVICE_WORKER) $(ENABLE_SPEECH_SYNTHESIS) $(ENABLE_STREAMS_API) $(ENABLE_SUBTLE_CRYPTO) $(ENABLE_SVG_FONTS) $(ENABLE_TELEPHONE_NUMBER_DETECTION) $(ENABLE_TEXT_AUTOSIZING) $(ENABLE_TOUCH_EVENTS) $(ENABLE_USER_MESSAGE_HANDLERS) $(ENABLE_USERSELECT_ALL) $(ENABLE_VARIATION_FONTS) $(ENABLE_VIDEO) $(ENABLE_VIDEO_PRESENTATION_MODE) $(ENABLE_VIDEO_TRACK) $(ENABLE_VIDEO_USES_ELEMENT_FULLSCREEN) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_AUTHN) $(ENABLE_WEB_RTC) $(ENABLE_WEBASSEMBLY) $(ENABLE_WEBASSEMBLY_STREAMING_API) $(ENABLE_WEBGL) $(ENABLE_WEBGL2) $(ENABLE_WEBGPU) $(ENABLE_WIRELESS_PLAYBACK_TARGET) $(ENABLE_XSLT); >+FEATURE_DEFINES = $(ENABLE_3D_TRANSFORMS) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_ACCELERATED_OVERFLOW_SCROLLING) $(ENABLE_APPLE_PAY) $(ENABLE_APPLE_PAY_SESSION_V3) $(ENABLE_APPLICATION_MANIFEST) $(ENABLE_ATTACHMENT_ELEMENT) $(ENABLE_AVF_CAPTIONS) $(ENABLE_CACHE_PARTITIONING) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CONTENT_FILTERING) $(ENABLE_CSS3_TEXT) $(ENABLE_CSS_ANIMATIONS_LEVEL_2) $(ENABLE_CSS_BOX_DECORATION_BREAK) $(ENABLE_CSS_COMPOSITING) $(ENABLE_CSS_DEVICE_ADAPTATION) $(ENABLE_CSS_IMAGE_ORIENTATION) $(ENABLE_CSS_IMAGE_RESOLUTION) $(ENABLE_CSS_SCROLL_SNAP) $(ENABLE_CSS_SELECTORS_LEVEL4) $(ENABLE_CSS_TRAILING_WORD) $(ENABLE_CURSOR_VISIBILITY) $(ENABLE_CUSTOM_SCHEME_HANDLER) $(ENABLE_DASHBOARD_SUPPORT) $(ENABLE_DATA_INTERACTION) $(ENABLE_DATACUE_VALUE) $(ENABLE_DATALIST_ELEMENT) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DRAG_SUPPORT) $(ENABLE_ENCRYPTED_MEDIA) $(ENABLE_EXPERIMENTAL_FEATURES) $(ENABLE_FAST_JIT_PERMISSIONS) $(ENABLE_FILTERS_LEVEL_2) $(ENABLE_FTL_JIT) $(ENABLE_FULLSCREEN_API) $(ENABLE_GAMEPAD) $(ENABLE_GEOLOCATION) $(ENABLE_ICONDATABASE) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INDEXED_DATABASE_IN_WORKERS) $(ENABLE_INPUT_TYPE_COLOR) $(ENABLE_INPUT_TYPE_COLOR_POPOVER) $(ENABLE_INPUT_TYPE_DATE) $(ENABLE_INPUT_TYPE_DATETIME_INCOMPLETE) $(ENABLE_INPUT_TYPE_DATETIMELOCAL) $(ENABLE_INPUT_TYPE_MONTH) $(ENABLE_INPUT_TYPE_TIME) $(ENABLE_INPUT_TYPE_WEEK) $(ENABLE_INTERSECTION_OBSERVER) $(ENABLE_INTL) $(ENABLE_IOS_GESTURE_EVENTS) $(ENABLE_IOS_TOUCH_EVENTS) $(ENABLE_JIT) $(ENABLE_JS_ASYNC_ITERATION) $(ENABLE_KEYBOARD_CODE_ATTRIBUTE) $(ENABLE_KEYBOARD_KEY_ATTRIBUTE) $(ENABLE_LAYOUT_FORMATTING_CONTEXT) $(ENABLE_LEGACY_CSS_VENDOR_PREFIXES) $(ENABLE_LEGACY_CUSTOM_PROTOCOL_MANAGER) $(ENABLE_LEGACY_ENCRYPTED_MEDIA) $(ENABLE_LETTERPRESS) $(ENABLE_MAC_GESTURE_EVENTS) $(ENABLE_MAC_VIDEO_TOOLBOX) $(ENABLE_MATHML) $(ENABLE_MEDIA_CAPTURE) $(ENABLE_MEDIA_CONTROLS_SCRIPT) $(ENABLE_MEDIA_SESSION) $(ENABLE_MEDIA_SOURCE) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_MEDIA_STREAM) $(ENABLE_METER_ELEMENT) $(ENABLE_MHTML) $(ENABLE_MOUSE_CURSOR_SCALE) $(ENABLE_NAVIGATOR_CONTENT_UTILS) $(ENABLE_NAVIGATOR_STANDALONE) $(ENABLE_NOTIFICATIONS) $(ENABLE_PAYMENT_REQUEST) $(ENABLE_PDFKIT_PLUGIN) $(ENABLE_POINTER_LOCK) $(ENABLE_PUBLIC_SUFFIX_LIST) $(ENABLE_QUOTA) $(ENABLE_REMOTE_INSPECTOR) $(ENABLE_RESOLUTION_MEDIA_QUERY) $(ENABLE_RESOURCE_USAGE) $(ENABLE_RUBBER_BANDING) $(ENABLE_SERVICE_CONTROLS) $(ENABLE_SERVICE_WORKER) $(ENABLE_SPEECH_SYNTHESIS) $(ENABLE_STREAMS_API) $(ENABLE_SUBTLE_CRYPTO) $(ENABLE_SVG_FONTS) $(ENABLE_TELEPHONE_NUMBER_DETECTION) $(ENABLE_TEXT_AUTOSIZING) $(ENABLE_TOUCH_EVENTS) $(ENABLE_USER_MESSAGE_HANDLERS) $(ENABLE_USERSELECT_ALL) $(ENABLE_VARIATION_FONTS) $(ENABLE_VIDEO) $(ENABLE_VIDEO_PRESENTATION_MODE) $(ENABLE_VIDEO_TRACK) $(ENABLE_VIDEO_USES_ELEMENT_FULLSCREEN) $(ENABLE_WEB_API_STATISTICS) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_AUTHN) $(ENABLE_WEB_RTC) $(ENABLE_WEBASSEMBLY) $(ENABLE_WEBASSEMBLY_STREAMING_API) $(ENABLE_WEBGL) $(ENABLE_WEBGL2) $(ENABLE_WEBGPU) $(ENABLE_WIRELESS_PLAYBACK_TARGET) $(ENABLE_XSLT); >diff --git a/Tools/ChangeLog b/Tools/ChangeLog >index f6377dbbf9642284e586978ddfecb8571e6197e1..d7d7d7efde11dd06013fc862113934b902f2f2a6 100644 >--- a/Tools/ChangeLog >+++ b/Tools/ChangeLog >@@ -1,3 +1,15 @@ >+2018-07-18 Woodrow Wang <woodrow_wang@apple.com> >+ >+ Added Web API Statistics Collection >+ https://bugs.webkit.org/show_bug.cgi?id=187773 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Added a new flag ENABLE_WEB_API_STATISTICS to wrap all code in compile time flags for when >+ we would like to collect various web API statistics for analysis. >+ >+ * TestWebKitAPI/Configurations/FeatureDefines.xcconfig: >+ > 2018-08-15 Jonathan Bedard <jbedard@apple.com> > > WebKitTestRunner should support watch devices >diff --git a/Tools/TestWebKitAPI/Configurations/FeatureDefines.xcconfig b/Tools/TestWebKitAPI/Configurations/FeatureDefines.xcconfig >index 41a336c75084648f7bfc607ba82245ab25568170..7a7d9ef8ddec7b03b9d9ff9b54e99fc1cb5ca6e2 100644 >--- a/Tools/TestWebKitAPI/Configurations/FeatureDefines.xcconfig >+++ b/Tools/TestWebKitAPI/Configurations/FeatureDefines.xcconfig >@@ -352,6 +352,8 @@ ENABLE_WEBGPU_watchos = ENABLE_WEBGPU; > ENABLE_WEBGPU_appletvos = ENABLE_WEBGPU; > ENABLE_WEBGPU_macosx = ENABLE_WEBGPU; > >+ENABLE_WEB_API_STATISTICS = ENABLE_WEB_API_STATISTICS; >+ > ENABLE_WEB_AUDIO = ENABLE_WEB_AUDIO; > > ENABLE_WEB_AUTHN = $(ENABLE_WEB_AUTHN_$(WK_PLATFORM_NAME)); >@@ -368,4 +370,4 @@ ENABLE_WIRELESS_PLAYBACK_TARGET = ENABLE_WIRELESS_PLAYBACK_TARGET; > > ENABLE_XSLT = ENABLE_XSLT; > >-FEATURE_DEFINES = $(ENABLE_3D_TRANSFORMS) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_ACCELERATED_OVERFLOW_SCROLLING) $(ENABLE_APPLE_PAY) $(ENABLE_APPLE_PAY_SESSION_V3) $(ENABLE_APPLICATION_MANIFEST) $(ENABLE_ATTACHMENT_ELEMENT) $(ENABLE_AVF_CAPTIONS) $(ENABLE_CACHE_PARTITIONING) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CONTENT_FILTERING) $(ENABLE_CSS3_TEXT) $(ENABLE_CSS_ANIMATIONS_LEVEL_2) $(ENABLE_CSS_BOX_DECORATION_BREAK) $(ENABLE_CSS_COMPOSITING) $(ENABLE_CSS_DEVICE_ADAPTATION) $(ENABLE_CSS_IMAGE_ORIENTATION) $(ENABLE_CSS_IMAGE_RESOLUTION) $(ENABLE_CSS_SCROLL_SNAP) $(ENABLE_CSS_SELECTORS_LEVEL4) $(ENABLE_CSS_TRAILING_WORD) $(ENABLE_CURSOR_VISIBILITY) $(ENABLE_CUSTOM_SCHEME_HANDLER) $(ENABLE_DASHBOARD_SUPPORT) $(ENABLE_DATA_INTERACTION) $(ENABLE_DATACUE_VALUE) $(ENABLE_DATALIST_ELEMENT) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DRAG_SUPPORT) $(ENABLE_ENCRYPTED_MEDIA) $(ENABLE_EXPERIMENTAL_FEATURES) $(ENABLE_FAST_JIT_PERMISSIONS) $(ENABLE_FILTERS_LEVEL_2) $(ENABLE_FTL_JIT) $(ENABLE_FULLSCREEN_API) $(ENABLE_GAMEPAD) $(ENABLE_GEOLOCATION) $(ENABLE_ICONDATABASE) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INDEXED_DATABASE_IN_WORKERS) $(ENABLE_INPUT_TYPE_COLOR) $(ENABLE_INPUT_TYPE_COLOR_POPOVER) $(ENABLE_INPUT_TYPE_DATE) $(ENABLE_INPUT_TYPE_DATETIME_INCOMPLETE) $(ENABLE_INPUT_TYPE_DATETIMELOCAL) $(ENABLE_INPUT_TYPE_MONTH) $(ENABLE_INPUT_TYPE_TIME) $(ENABLE_INPUT_TYPE_WEEK) $(ENABLE_INTERSECTION_OBSERVER) $(ENABLE_INTL) $(ENABLE_IOS_GESTURE_EVENTS) $(ENABLE_IOS_TOUCH_EVENTS) $(ENABLE_JIT) $(ENABLE_JS_ASYNC_ITERATION) $(ENABLE_KEYBOARD_CODE_ATTRIBUTE) $(ENABLE_KEYBOARD_KEY_ATTRIBUTE) $(ENABLE_LAYOUT_FORMATTING_CONTEXT) $(ENABLE_LEGACY_CSS_VENDOR_PREFIXES) $(ENABLE_LEGACY_CUSTOM_PROTOCOL_MANAGER) $(ENABLE_LEGACY_ENCRYPTED_MEDIA) $(ENABLE_LETTERPRESS) $(ENABLE_MAC_GESTURE_EVENTS) $(ENABLE_MAC_VIDEO_TOOLBOX) $(ENABLE_MATHML) $(ENABLE_MEDIA_CAPTURE) $(ENABLE_MEDIA_CONTROLS_SCRIPT) $(ENABLE_MEDIA_SESSION) $(ENABLE_MEDIA_SOURCE) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_MEDIA_STREAM) $(ENABLE_METER_ELEMENT) $(ENABLE_MHTML) $(ENABLE_MOUSE_CURSOR_SCALE) $(ENABLE_NAVIGATOR_CONTENT_UTILS) $(ENABLE_NAVIGATOR_STANDALONE) $(ENABLE_NOTIFICATIONS) $(ENABLE_PAYMENT_REQUEST) $(ENABLE_PDFKIT_PLUGIN) $(ENABLE_POINTER_LOCK) $(ENABLE_PUBLIC_SUFFIX_LIST) $(ENABLE_QUOTA) $(ENABLE_REMOTE_INSPECTOR) $(ENABLE_RESOLUTION_MEDIA_QUERY) $(ENABLE_RESOURCE_USAGE) $(ENABLE_RUBBER_BANDING) $(ENABLE_SERVICE_CONTROLS) $(ENABLE_SERVICE_WORKER) $(ENABLE_SPEECH_SYNTHESIS) $(ENABLE_STREAMS_API) $(ENABLE_SUBTLE_CRYPTO) $(ENABLE_SVG_FONTS) $(ENABLE_TELEPHONE_NUMBER_DETECTION) $(ENABLE_TEXT_AUTOSIZING) $(ENABLE_TOUCH_EVENTS) $(ENABLE_USER_MESSAGE_HANDLERS) $(ENABLE_USERSELECT_ALL) $(ENABLE_VARIATION_FONTS) $(ENABLE_VIDEO) $(ENABLE_VIDEO_PRESENTATION_MODE) $(ENABLE_VIDEO_TRACK) $(ENABLE_VIDEO_USES_ELEMENT_FULLSCREEN) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_AUTHN) $(ENABLE_WEB_RTC) $(ENABLE_WEBASSEMBLY) $(ENABLE_WEBASSEMBLY_STREAMING_API) $(ENABLE_WEBGL) $(ENABLE_WEBGL2) $(ENABLE_WEBGPU) $(ENABLE_WIRELESS_PLAYBACK_TARGET) $(ENABLE_XSLT); >+FEATURE_DEFINES = $(ENABLE_3D_TRANSFORMS) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_ACCELERATED_OVERFLOW_SCROLLING) $(ENABLE_APPLE_PAY) $(ENABLE_APPLE_PAY_SESSION_V3) $(ENABLE_APPLICATION_MANIFEST) $(ENABLE_ATTACHMENT_ELEMENT) $(ENABLE_AVF_CAPTIONS) $(ENABLE_CACHE_PARTITIONING) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CONTENT_FILTERING) $(ENABLE_CSS3_TEXT) $(ENABLE_CSS_ANIMATIONS_LEVEL_2) $(ENABLE_CSS_BOX_DECORATION_BREAK) $(ENABLE_CSS_COMPOSITING) $(ENABLE_CSS_DEVICE_ADAPTATION) $(ENABLE_CSS_IMAGE_ORIENTATION) $(ENABLE_CSS_IMAGE_RESOLUTION) $(ENABLE_CSS_SCROLL_SNAP) $(ENABLE_CSS_SELECTORS_LEVEL4) $(ENABLE_CSS_TRAILING_WORD) $(ENABLE_CURSOR_VISIBILITY) $(ENABLE_CUSTOM_SCHEME_HANDLER) $(ENABLE_DASHBOARD_SUPPORT) $(ENABLE_DATA_INTERACTION) $(ENABLE_DATACUE_VALUE) $(ENABLE_DATALIST_ELEMENT) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DRAG_SUPPORT) $(ENABLE_ENCRYPTED_MEDIA) $(ENABLE_EXPERIMENTAL_FEATURES) $(ENABLE_FAST_JIT_PERMISSIONS) $(ENABLE_FILTERS_LEVEL_2) $(ENABLE_FTL_JIT) $(ENABLE_FULLSCREEN_API) $(ENABLE_GAMEPAD) $(ENABLE_GEOLOCATION) $(ENABLE_ICONDATABASE) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INDEXED_DATABASE_IN_WORKERS) $(ENABLE_INPUT_TYPE_COLOR) $(ENABLE_INPUT_TYPE_COLOR_POPOVER) $(ENABLE_INPUT_TYPE_DATE) $(ENABLE_INPUT_TYPE_DATETIME_INCOMPLETE) $(ENABLE_INPUT_TYPE_DATETIMELOCAL) $(ENABLE_INPUT_TYPE_MONTH) $(ENABLE_INPUT_TYPE_TIME) $(ENABLE_INPUT_TYPE_WEEK) $(ENABLE_INTERSECTION_OBSERVER) $(ENABLE_INTL) $(ENABLE_IOS_GESTURE_EVENTS) $(ENABLE_IOS_TOUCH_EVENTS) $(ENABLE_JIT) $(ENABLE_JS_ASYNC_ITERATION) $(ENABLE_KEYBOARD_CODE_ATTRIBUTE) $(ENABLE_KEYBOARD_KEY_ATTRIBUTE) $(ENABLE_LAYOUT_FORMATTING_CONTEXT) $(ENABLE_LEGACY_CSS_VENDOR_PREFIXES) $(ENABLE_LEGACY_CUSTOM_PROTOCOL_MANAGER) $(ENABLE_LEGACY_ENCRYPTED_MEDIA) $(ENABLE_LETTERPRESS) $(ENABLE_MAC_GESTURE_EVENTS) $(ENABLE_MAC_VIDEO_TOOLBOX) $(ENABLE_MATHML) $(ENABLE_MEDIA_CAPTURE) $(ENABLE_MEDIA_CONTROLS_SCRIPT) $(ENABLE_MEDIA_SESSION) $(ENABLE_MEDIA_SOURCE) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_MEDIA_STREAM) $(ENABLE_METER_ELEMENT) $(ENABLE_MHTML) $(ENABLE_MOUSE_CURSOR_SCALE) $(ENABLE_NAVIGATOR_CONTENT_UTILS) $(ENABLE_NAVIGATOR_STANDALONE) $(ENABLE_NOTIFICATIONS) $(ENABLE_PAYMENT_REQUEST) $(ENABLE_PDFKIT_PLUGIN) $(ENABLE_POINTER_LOCK) $(ENABLE_PUBLIC_SUFFIX_LIST) $(ENABLE_QUOTA) $(ENABLE_REMOTE_INSPECTOR) $(ENABLE_RESOLUTION_MEDIA_QUERY) $(ENABLE_RESOURCE_USAGE) $(ENABLE_RUBBER_BANDING) $(ENABLE_SERVICE_CONTROLS) $(ENABLE_SERVICE_WORKER) $(ENABLE_SPEECH_SYNTHESIS) $(ENABLE_STREAMS_API) $(ENABLE_SUBTLE_CRYPTO) $(ENABLE_SVG_FONTS) $(ENABLE_TELEPHONE_NUMBER_DETECTION) $(ENABLE_TEXT_AUTOSIZING) $(ENABLE_TOUCH_EVENTS) $(ENABLE_USER_MESSAGE_HANDLERS) $(ENABLE_USERSELECT_ALL) $(ENABLE_VARIATION_FONTS) $(ENABLE_VIDEO) $(ENABLE_VIDEO_PRESENTATION_MODE) $(ENABLE_VIDEO_TRACK) $(ENABLE_VIDEO_USES_ELEMENT_FULLSCREEN) $(ENABLE_WEB_API_STATISTICS) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_AUTHN) $(ENABLE_WEB_RTC) $(ENABLE_WEBASSEMBLY) $(ENABLE_WEBASSEMBLY_STREAMING_API) $(ENABLE_WEBGL) $(ENABLE_WEBGL2) $(ENABLE_WEBGPU) $(ENABLE_WIRELESS_PLAYBACK_TARGET) $(ENABLE_XSLT);
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 187773
:
345263
|
345271
|
345272
|
345274
|
345278
|
345335
|
345578
|
345617
|
345851
|
345865
|
345969
|
346072
|
346089
|
346092
|
346108
|
346115
|
346123
|
346126
|
346127
|
346172
|
347273
|
347277
|
347282
|
348041
|
348057
|
348065
|
348067
|
348068
|
348070
|
348227
|
348230
|
348253
|
348309
|
348323
|
348326
|
348512
|
348523
|
348528
|
348542
|
348653
|
348660
|
348682
|
348693
|
348964
|
348968
|
348976
|
349156
|
349175
|
349193
|
349196
|
349314
|
349328
|
349330
|
349353