WebKit Bugzilla
Attachment 346072 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-20180730111446.patch (text/plain), 86.40 KB, created by
Woodrow Wang
on 2018-07-30 11:14:47 PDT
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Woodrow Wang
Created:
2018-07-30 11:14:47 PDT
Size:
86.40 KB
patch
obsolete
>Subversion Revision: 234371 >diff --git a/Source/JavaScriptCore/ChangeLog b/Source/JavaScriptCore/ChangeLog >index c9ffa59ac12c5b4b5cc33a7f72b7b0e52bf7a4af..7aa00c56e815ae34783220ccb1951c90131f2bc4 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-07-30 Mark Lam <mark.lam@apple.com> > > Add a debugging utility to dump the memory layout of a JSCell. >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index 19d1329363207988fed2e77c6c690d852948b2d5..d2a19758689d66624855dbc28d9057e8fb0102ad 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-07-30 Chris Dumez <cdumez@apple.com> > > Unreviewed internal build fix after r234347. >diff --git a/Source/WebCore/PAL/ChangeLog b/Source/WebCore/PAL/ChangeLog >index fda5775e69e479a3207c0cfc88186f227cdcec07..7a946bb9510c424b5ae987fe963410b1f8372a08 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-07-26 Andy VanWagoner <andy@vanwagoner.family> > > [INTL] Remove INTL sub-feature compile flags >diff --git a/Source/WebKit/ChangeLog b/Source/WebKit/ChangeLog >index 8b477c5adbf85be5bdf37f2463708f96700b2afd..7f238ce69131ecfadbdeeb6bcfebc8b1e20530c9 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-07-30 David Fenton <david_fenton@apple.com> > > Unreviewed, rolling out r234327. >diff --git a/Source/WebKitLegacy/mac/ChangeLog b/Source/WebKitLegacy/mac/ChangeLog >index 04c985d853b073abe48d070481e23a8acf1845bb..763515f7855358541d5b09ab704ad106f37a313c 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-07-28 Darin Adler <darin@apple.com> > > [Cocoa] Update more WebCore Objective-C code to be ARC compatible >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 fc1fa1d2ecf8e035d25482fefb759fcfa1eb5561..daf52ec22b4100950280534154e8e796a7356596 100644 >--- a/Source/WebCore/WebCore.xcodeproj/project.pbxproj >+++ b/Source/WebCore/WebCore.xcodeproj/project.pbxproj >@@ -4793,6 +4793,7 @@ > 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 */; }; >+ EFCC6C8F20FE914400A2321B /* CanvasLog.h in Headers */ = {isa = PBXBuildFile; fileRef = EFCC6C8D20FE914000A2321B /* CanvasLog.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, ); }; }; >@@ -14508,6 +14509,7 @@ > 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; }; >+ EFCC6C8D20FE914000A2321B /* CanvasLog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CanvasLog.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>"; }; >@@ -24251,6 +24253,7 @@ > 93A1EAA20A5634D8006960A0 /* mac */, > 63152D181F9531EE007A5E4B /* ApplicationManifestLoader.cpp */, > 63152D171F9531EE007A5E4B /* ApplicationManifestLoader.h */, >+ EFCC6C8D20FE914000A2321B /* CanvasLog.h */, > A149786C1ABAF33800CEF7E4 /* ContentFilter.cpp */, > A149786D1ABAF33800CEF7E4 /* ContentFilter.h */, > E1424C91164B52C800F32D40 /* CookieJar.cpp */, >@@ -27336,6 +27339,7 @@ > 49484FC2102CF23C00187DD3 /* CanvasGradient.h in Headers */, > 7C193BBD1F5E0EED0088F3E6 /* CanvasLineCap.h in Headers */, > 7C193BBE1F5E0EED0088F3E6 /* CanvasLineJoin.h in Headers */, >+ EFCC6C8F20FE914400A2321B /* CanvasLog.h in Headers */, > 4671E0661D67A59600C6B497 /* CanvasPath.h in Headers */, > 49484FC5102CF23C00187DD3 /* CanvasPattern.h in Headers */, > 49C7B9DD1042D32F0009D447 /* CanvasRenderingContext.h in Headers */, >diff --git a/Source/WebCore/css/CSSFontFace.cpp b/Source/WebCore/css/CSSFontFace.cpp >index 54a40480aaf1f11b604d70ace3d69e07514c390d..83768689b452618fcb01eacad2358ef3c9c792e3 100644 >--- a/Source/WebCore/css/CSSFontFace.cpp >+++ b/Source/WebCore/css/CSSFontFace.cpp >@@ -46,6 +46,10 @@ > #include "StyleProperties.h" > #include "StyleRule.h" > >+#if ENABLE(WEB_API_STATISTICS) >+#include "ResourceLoadObserver.h" >+#endif >+ > namespace WebCore { > > template<typename T> void iterateClients(HashSet<CSSFontFace::Client*>& clients, T callback) >@@ -803,10 +807,20 @@ RefPtr<Font> CSSFontFace::font(const FontDescription& fontDescription, bool synt > Font::Visibility visibility = WebCore::visibility(status(), fontLoadTiming()); > return Font::create(FontCache::singleton().lastResortFallbackFont(fontDescription)->platformData(), Font::Origin::Local, Font::Interstitial::Yes, visibility); > } >- case CSSFontFaceSource::Status::Success: >- if (RefPtr<Font> result = source->font(fontDescription, syntheticBold, syntheticItalic, m_featureSettings, m_variantSettings, m_fontSelectionCapabilities)) >+ case CSSFontFaceSource::Status::Success: { >+#if ENABLE(WEB_API_STATISTICS) >+ if (m_fontSelector && m_fontSelector->document()) >+ ResourceLoadObserver::shared().logFontLoad(*m_fontSelector->document(), source->familyNameOrURI().string(), ResourceLoadObserver::LoadStatus::Attempted); >+#endif >+ RefPtr<Font> result = source->font(fontDescription, syntheticBold, syntheticItalic, m_featureSettings, m_variantSettings, m_fontSelectionCapabilities); >+ if (result) > return result; >+#if ENABLE(WEB_API_STATISTICS) >+ if (m_fontSelector && m_fontSelector->document()) >+ ResourceLoadObserver::shared().logFontLoad(*m_fontSelector->document(), source->familyNameOrURI().string(), ResourceLoadObserver::LoadStatus::Failed); >+#endif > break; >+ } > case CSSFontFaceSource::Status::Failure: > break; > } >diff --git a/Source/WebCore/css/CSSFontFaceSource.cpp b/Source/WebCore/css/CSSFontFaceSource.cpp >index 4d603b5769587cad4cd6669ad2a65ba37baeb8e8..a119054707bf7dafd46a7f5b5e97ce983b8fcd57 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,13 @@ 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 (fontSelector->document()) { >+ ResourceLoadObserver::shared().logFontLoad(*fontSelector->document(), m_familyNameOrURI.string(), ResourceLoadObserver::LoadStatus::Attempted); >+ if (!success) >+ ResourceLoadObserver::shared().logFontLoad(*fontSelector->document(), m_familyNameOrURI.string(), ResourceLoadObserver::LoadStatus::Failed); >+ } >+#endif > } > setStatus(success ? Status::Success : Status::Failure); > } >diff --git a/Source/WebCore/css/CSSFontSelector.cpp b/Source/WebCore/css/CSSFontSelector.cpp >index 9ad88a2a4df62a851786c0f34a9541d0a3cffdcc..17358eeb08c69d939df436ff42c33b9510cb5f45 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; >@@ -298,6 +302,11 @@ FontRanges CSSFontSelector::fontRangesForFamily(const FontDescription& fontDescr > { > // If this ASSERT() fires, it usually means you forgot a document.updateStyleIfNeeded() somewhere. > ASSERT(!m_buildIsUnderway || m_computingRootStyleFontCount); >+ >+#if ENABLE(WEB_API_STATISTICS) >+ if (m_document) >+ ResourceLoadObserver::shared().logFontLoad(*m_document, familyName.string(), ResourceLoadObserver::LoadStatus::Attempted); >+#endif > > // FIXME: The spec (and Firefox) says user specified generic families (sans-serif etc.) should be resolved before the @font-face lookup too. > bool resolveGenericFamilyFirst = familyName == standardFamily; >@@ -307,7 +316,12 @@ FontRanges CSSFontSelector::fontRangesForFamily(const FontDescription& fontDescr > if (!face) { > if (!resolveGenericFamilyFirst) > familyForLookup = resolveGenericFamily(m_document, fontDescription, familyName); >- return FontRanges(FontCache::singleton().fontForFamily(fontDescription, familyForLookup)); >+ auto font = FontCache::singleton().fontForFamily(fontDescription, familyForLookup); >+#if ENABLE(WEB_API_STATISTICS) >+ if (!font && m_document) >+ ResourceLoadObserver::shared().logFontLoad(*m_document, familyName.string(), ResourceLoadObserver::LoadStatus::Failed); >+#endif >+ return FontRanges { WTFMove(font) }; > } > > return face->fontRanges(fontDescription); >@@ -390,8 +404,18 @@ 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(), ResourceLoadObserver::LoadStatus::Attempted); >+ if (!font) >+ ResourceLoadObserver::shared().logFontLoad(*m_document, m_document->settings().pictographFontFamily().string(), ResourceLoadObserver::LoadStatus::Failed); >+ } >+#endif >+ >+ return font; > } > > } >diff --git a/Source/WebCore/html/HTMLCanvasElement.cpp b/Source/WebCore/html/HTMLCanvasElement.cpp >index 6298643a2d96092a4cfee988dd28b6d937c5da73..289f8058874a65f4655357e94f22e376617ca901 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" >@@ -693,6 +697,10 @@ static std::optional<double> qualityFromJSValue(JSC::JSValue qualityValue) > > ExceptionOr<UncachedString> HTMLCanvasElement::toDataURL(const String& mimeType, JSC::JSValue qualityValue) > { >+#if ENABLE(WEB_API_STATISTICS) >+ // Records attempt to read canvas data, regardless of if the read is successful >+ ResourceLoadObserver::shared().logCanvasRead(document(), height(), width()); >+#endif > if (!originClean()) > return Exception { SecurityError }; > >@@ -720,6 +728,9 @@ ExceptionOr<UncachedString> HTMLCanvasElement::toDataURL(const String& mimeType) > > ExceptionOr<void> HTMLCanvasElement::toBlob(ScriptExecutionContext& context, Ref<BlobCallback>&& callback, const String& mimeType, JSC::JSValue qualityValue) > { >+#if ENABLE(WEB_API_STATISTICS) >+ ResourceLoadObserver::shared().logCanvasRead(document(), height(), width()); >+#endif > if (!originClean()) > return Exception { SecurityError }; > >@@ -754,6 +765,10 @@ ExceptionOr<void> HTMLCanvasElement::toBlob(ScriptExecutionContext& context, Ref > > RefPtr<ImageData> HTMLCanvasElement::getImageData() > { >+#if ENABLE(WEB_API_STATISTICS) >+ ResourceLoadObserver::shared().logCanvasRead(document(), height(), width()); >+#endif >+ > #if ENABLE(WEBGL) > if (is<WebGLRenderingContextBase>(m_context.get())) > return downcast<WebGLRenderingContextBase>(*m_context).paintRenderingResultsToImageData(); >@@ -765,6 +780,9 @@ RefPtr<ImageData> HTMLCanvasElement::getImageData() > > RefPtr<MediaSample> HTMLCanvasElement::toMediaSample() > { >+#if ENABLE(WEB_API_STATISTICS) >+ ResourceLoadObserver::shared().logCanvasRead(document(), height(), width()); >+#endif > auto* imageBuffer = buffer(); > if (!imageBuffer) > return nullptr; >@@ -779,6 +797,9 @@ RefPtr<MediaSample> HTMLCanvasElement::toMediaSample() > > ExceptionOr<Ref<MediaStream>> HTMLCanvasElement::captureStream(ScriptExecutionContext& context, std::optional<double>&& frameRequestRate) > { >+#if ENABLE(WEB_API_STATISTICS) >+ ResourceLoadObserver::shared().logCanvasRead(document(), height(), width()); >+#endif > if (!originClean()) > return Exception(SecurityError, "Canvas is tainted"_s); > >diff --git a/Source/WebCore/html/canvas/CanvasRenderingContext2D.cpp b/Source/WebCore/html/canvas/CanvasRenderingContext2D.cpp >index e9ae63c4980d53925222f41959482e98145d77e6..65366379248b226ab69904510bfab38267a4110e 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,11 @@ 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(), canvas.height(), canvas.width(), text); >+#endif >+ > Ref<TextMetrics> metrics = TextMetrics::create(); > > String normalizedText = text; >@@ -451,6 +460,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(), canvas.height(), canvas.width(), text); >+#endif >+ > auto& fontProxy = this->fontProxy(); > const auto& fontMetrics = fontProxy.fontMetrics(); > >diff --git a/Source/WebCore/loader/CanvasLog.h b/Source/WebCore/loader/CanvasLog.h >new file mode 100644 >index 0000000000000000000000000000000000000000..3284ffec4e871f0a1364e4b83a111f87dfd70c73 >--- /dev/null >+++ b/Source/WebCore/loader/CanvasLog.h >@@ -0,0 +1,38 @@ >+/* >+ * 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 CanvasLog { >+ HashSet<String> textWritten; >+ >+ unsigned maxWidth { 0 }; >+ unsigned maxHeight { 0 }; >+ >+ bool canvasDataRead { false }; >+}; >+} >diff --git a/Source/WebCore/loader/ResourceLoadObserver.cpp b/Source/WebCore/loader/ResourceLoadObserver.cpp >index 8b9836e1ce12714bed2b6c2cae26f1fa78c9a856..546e35f6c78a22dd48f9779b5b27043ff8c1d774 100644 >--- a/Source/WebCore/loader/ResourceLoadObserver.cpp >+++ b/Source/WebCore/loader/ResourceLoadObserver.cpp >@@ -283,6 +283,82 @@ void ResourceLoadObserver::requestStorageAccessUnderOpener(const String& domainI > } > #endif > >+#if ENABLE(WEB_API_STATISTICS) >+// Web API stats >+void ResourceLoadObserver::logFontLoad(const Document& document, const String& familyName, LoadStatus loadStatus) >+{ >+ if (!shouldLog(document.page())) >+ return; >+ auto registrableDomain = primaryDomain(document.url()); >+ auto& statistics = ensureResourceStatisticsForPrimaryDomain(registrableDomain); >+ if (loadStatus == LoadStatus::Failed) >+ statistics.fontsFailedToLoad.add(familyName); >+ statistics.fontsLoaded.add(familyName); >+ auto mainFrameRegistrableDomain = primaryDomain(document.frame()->mainFrame().document()->url()); >+ if (statistics.topFrameRegistrableDomains.add(mainFrameRegistrableDomain).isNewEntry) >+ scheduleNotificationIfNeeded(); >+} >+ >+void ResourceLoadObserver::logCanvasRead(const Document& document, unsigned height, unsigned width) >+{ >+ if (!shouldLog(document.page())) >+ return; >+ auto registrableDomain = primaryDomain(document.url()); >+ auto& statistics = ensureResourceStatisticsForPrimaryDomain(registrableDomain); >+ auto mainFrameRegistrableDomain = primaryDomain(document.frame()->mainFrame().document()->url()); >+ statistics.topFrameRegistrableDomains.add(mainFrameRegistrableDomain); >+ statistics.canvasLog.maxHeight = std::max(statistics.canvasLog.maxHeight, height); >+ statistics.canvasLog.maxWidth = std::max(statistics.canvasLog.maxWidth, width); >+ statistics.canvasLog.canvasDataRead = true; >+ if (statistics.topFrameRegistrableDomainsWithCanvases.add(mainFrameRegistrableDomain).isNewEntry) >+ scheduleNotificationIfNeeded(); >+} >+ >+const unsigned canvasTextCapacity = 10; >+void ResourceLoadObserver::logCanvasWriteOrMeasure(const Document& document, unsigned height, unsigned width, 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()); >+ statistics.topFrameRegistrableDomains.add(mainFrameRegistrableDomain); >+ statistics.canvasLog.maxHeight = std::max(statistics.canvasLog.maxHeight, height); >+ statistics.canvasLog.maxWidth = std::max(statistics.canvasLog.maxWidth, width); >+ if (statistics.canvasLog.textWritten.size() < canvasTextCapacity && statistics.canvasLog.textWritten.add(textWritten)) >+ shouldCallNotificationCallback = true; >+ if (statistics.topFrameRegistrableDomainsWithCanvases.add(mainFrameRegistrableDomain).isNewEntry) >+ shouldCallNotificationCallback = true; >+ if (shouldCallNotificationCallback) >+ scheduleNotificationIfNeeded(); >+} >+ >+void ResourceLoadObserver::logNavigatorLoad(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.topFrameRegistrableDomains.add(mainFrameRegistrableDomain).isNewEntry) >+ scheduleNotificationIfNeeded(); >+} >+ >+void ResourceLoadObserver::logScreenLoad(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.topFrameRegistrableDomains.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..6f169adc540acc26325e14a876624099a5032b22 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 "CanvasLog.h" >+#endif >+ > namespace WTF { > class Lock; > class WorkQueue; >@@ -57,6 +61,16 @@ 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) >+ enum class LoadStatus { Failed, Attempted }; >+ // Web API stats collection functions >+ void logFontLoad(const Document&, const String& familyName, LoadStatus); >+ void logCanvasRead(const Document&, unsigned height, unsigned width); >+ void logCanvasWriteOrMeasure(const Document&, unsigned height, unsigned width, const String& textWritten); >+ void logNavigatorLoad(const Document&, const String& functionName); >+ void logScreenLoad(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 96b7eb9b0b40d57b9a36cd92fcbfbe8e959d028b..038c6d5ca96ba5a3f622c6cc3ae328f9d5609df6 100644 >--- a/Source/WebCore/loader/ResourceLoadStatistics.cpp >+++ b/Source/WebCore/loader/ResourceLoadStatistics.cpp >@@ -59,6 +59,20 @@ static void encodeHashSet(KeyedEncoder& encoder, const String& label, const Hash > }); > } > >+#if ENABLE(WEB_API_STATISTICS) >+static void encodeCanvasLog(KeyedEncoder& encoder, const String& label, const CanvasLog& canvasLog) >+{ >+ encoder.encodeObject(label, canvasLog, [] (KeyedEncoder& encoderInner, const CanvasLog& log) { >+ encoderInner.encodeUInt32("maxWidth", log.maxWidth); >+ encoderInner.encodeUInt32("maxHeight", log.maxHeight); >+ encoderInner.encodeBool("canvasDataRead", log.canvasDataRead); >+ encoderInner.encodeObjects("textWritten", log.textWritten.begin(), log.textWritten.end(), [] (KeyedEncoder& encoderInner2, const String& text) { >+ encoderInner2.encodeString("text", text); >+ }); >+ }); >+} >+#endif >+ > void ResourceLoadStatistics::encode(KeyedEncoder& encoder) const > { > encoder.encodeString("PrevalentResourceOrigin", highLevelDomain); >@@ -92,6 +106,17 @@ 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, "topFrameRegistrableDomains", topFrameRegistrableDomains); >+ encodeHashCountedSet(encoder, "topFrameRegistrableDomainsWithCanvases", topFrameRegistrableDomainsWithCanvases); >+ encodeCanvasLog(encoder, "canvasLog", canvasLog); >+ encodeHashSet(encoder, "navigatorFunctionsAccessed", navigatorFunctionsAccessed); >+ encodeHashSet(encoder, "screenFunctionsAccessed", screenFunctionsAccessed); >+#endif > } > > static void decodeHashCountedSet(KeyedDecoder& decoder, const String& label, HashCountedSet<String>& hashCountedSet) >@@ -122,6 +147,28 @@ static void decodeHashSet(KeyedDecoder& decoder, const String& label, HashSet<St > }); > } > >+#if ENABLE(WEB_API_STATISTICS) >+static void decodeCanvasLog(KeyedDecoder& decoder, const String& label, CanvasLog& canvasLog) >+{ >+ decoder.decodeObject(label, canvasLog, [] (KeyedDecoder& decoderInner, CanvasLog& canvasLog) { >+ if (!decoderInner.decodeUInt32("maxHeight", canvasLog.maxHeight)) >+ return false; >+ if (!decoderInner.decodeUInt32("maxWidth", canvasLog.maxWidth)) >+ return false; >+ if (!decoderInner.decodeBool("canvasDataRead", canvasLog.canvasDataRead)) >+ return false; >+ Vector<String> ignore; >+ decoderInner.decodeObjects("textWritten", ignore, [&canvasLog] (KeyedDecoder& decoderInner2, String& text) { >+ if (!decoderInner2.decodeString("text", text)) >+ return false; >+ canvasLog.textWritten.add(text); >+ return true; >+ }); >+ return true; >+ }); >+} >+#endif >+ > bool ResourceLoadStatistics::decode(KeyedDecoder& decoder, unsigned modelVersion) > { > if (!decoder.decodeString("PrevalentResourceOrigin", highLevelDomain)) >@@ -180,6 +227,19 @@ 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, "topFrameRegistrableDomains", topFrameRegistrableDomains); >+ decodeHashCountedSet(decoder, "topFrameRegistrableDomainsWithCanvases", topFrameRegistrableDomainsWithCanvases); >+ decodeCanvasLog(decoder, "canvasLog", canvasLog); >+ decodeHashSet(decoder, "navigatorFunctionsAccessed", navigatorFunctionsAccessed); >+ decodeHashSet(decoder, "screenFunctionsAccessed", screenFunctionsAccessed); >+ } >+#endif >+ > return true; > } > >@@ -269,6 +329,16 @@ String ResourceLoadStatistics::toString() const > appendBoolean(builder, "isMarkedForCookieBlocking", isMarkedForCookieBlocking); > builder.append('\n'); > >+#if ENABLE(WEB_API_STATISTICS) >+ // Web API stats >+ appendHashCountedSet(builder, "fontsFailedToLoad", fontsFailedToLoad); >+ appendHashCountedSet(builder, "fontsLoaded", fontsLoaded); >+ appendHashCountedSet(builder, "topFrameRegistrableDomains", topFrameRegistrableDomains); >+ appendHashCountedSet(builder, "topFrameRegistrableDomainsWithCanvases", topFrameRegistrableDomainsWithCanvases); >+ appendHashSet(builder, "navigatorFunctionsAccessed", navigatorFunctionsAccessed); >+ appendHashSet(builder, "screenFUnctinos", screenFunctionsAccessed); >+#endif >+ > builder.append('\n'); > > return builder.toString(); >@@ -332,6 +402,24 @@ void ResourceLoadStatistics::merge(const ResourceLoadStatistics& other) > // In-memory only > isMarkedForCookiePartitioning |= other.isMarkedForCookiePartitioning; > isMarkedForCookieBlocking |= other.isMarkedForCookieBlocking; >+ >+#if ENABLE(WEB_API_STATISTICS) >+ // Web API stats >+ mergeHashCountedSet(fontsFailedToLoad, other.fontsFailedToLoad); >+ mergeHashCountedSet(fontsLoaded, other.fontsLoaded); >+ mergeHashCountedSet(topFrameRegistrableDomains, other.topFrameRegistrableDomains); >+ mergeHashCountedSet(topFrameRegistrableDomainsWithCanvases, other.topFrameRegistrableDomainsWithCanvases); >+ >+ // Canvas stats >+ auto otherCanvasLog = other.canvasLog; >+ canvasLog.maxHeight = std::max(otherCanvasLog.maxHeight, canvasLog.maxHeight); >+ canvasLog.maxWidth = std::max(otherCanvasLog.maxWidth, canvasLog.maxWidth); >+ canvasLog.textWritten.add(otherCanvasLog.textWritten.begin(), otherCanvasLog.textWritten.end()); >+ canvasLog.canvasDataRead |= otherCanvasLog.canvasDataRead; >+ >+ 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 f047c77cddbff2c62d262b97dbd8ad6b5fc814dd..6145014c69b7a8191e6327ce08ac7b7d0d106e65 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 "CanvasLog.h" >+#endif >+ > namespace WebCore { > > class KeyedDecoder; >@@ -98,6 +102,20 @@ struct ResourceLoadStatistics { > // In-memory only > bool isMarkedForCookiePartitioning { false }; > bool isMarkedForCookieBlocking { false }; >+ >+#if ENABLE(WEB_API_STATISTICS) >+ HashCountedSet<String> fontsFailedToLoad; >+ HashCountedSet<String> fontsLoaded; >+ >+ // Keeps track of registrable domains of top frames under which API are accessed >+ HashCountedSet<String> topFrameRegistrableDomains; >+ // Keeps track of registrable domains of top frames under which canvas API are accessed >+ HashCountedSet<String> topFrameRegistrableDomainsWithCanvases; >+ >+ CanvasLog canvasLog; >+ 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..aa53d3ed701cfc341ae5d496e0289cfffbdc3a3e 100644 >--- a/Source/WebCore/page/Navigator.cpp >+++ b/Source/WebCore/page/Navigator.cpp >@@ -41,6 +41,11 @@ > #include <wtf/Language.h> > #include <wtf/StdLibExtras.h> > >+#if ENABLE(WEB_API_STATISTICS) >+#include "ResourceLoadObserver.h" >+#endif >+ >+ > > namespace WebCore { > using namespace WTF; >@@ -71,6 +76,9 @@ String Navigator::appVersion() const > { > if (!m_frame) > return String(); >+#if ENABLE(WEB_API_STATISTICS) >+ ResourceLoadObserver::shared().logNavigatorLoad(*m_frame->document(), "appVersion"); >+#endif > String appVersion = NavigatorBase::appVersion(); > if (shouldHideFourDot(*m_frame)) > appVersion.replace("4.", "4_"); >@@ -79,7 +87,12 @@ String Navigator::appVersion() const > > const String& Navigator::userAgent() const > { >- if (m_userAgent.isNull() && m_frame && m_frame->page()) >+ if (!m_frame) >+ return m_userAgent; >+#if ENABLE(WEB_API_STATISTICS) >+ ResourceLoadObserver::shared().logNavigatorLoad(*m_frame->document(), "userAgent"); >+#endif >+ if (m_userAgent.isNull() && m_frame->page()) > m_userAgent = m_frame->loader().userAgent(m_frame->document()->url()); > return m_userAgent; > } >@@ -96,6 +109,10 @@ bool Navigator::onLine() const > > DOMPluginArray& Navigator::plugins() > { >+#if ENABLE(WEB_API_STATISTICS) >+ if (m_frame) >+ ResourceLoadObserver::shared().logNavigatorLoad(*m_frame->document(), "plugins"); >+#endif > if (!m_plugins) > m_plugins = DOMPluginArray::create(m_frame); > return *m_plugins; >@@ -103,6 +120,10 @@ DOMPluginArray& Navigator::plugins() > > DOMMimeTypeArray& Navigator::mimeTypes() > { >+#if ENABLE(WEB_API_STATISTICS) >+ if (m_frame) >+ ResourceLoadObserver::shared().logNavigatorLoad(*m_frame->document(), "mimeTypes"); >+#endif > if (!m_mimeTypes) > m_mimeTypes = DOMMimeTypeArray::create(m_frame); > return *m_mimeTypes; >@@ -112,6 +133,10 @@ bool Navigator::cookieEnabled() const > { > if (!m_frame) > return false; >+ >+#if ENABLE(WEB_API_STATISTICS) >+ ResourceLoadObserver::shared().logNavigatorLoad(*m_frame->document(), "cookieEnabled"); >+#endif > > if (m_frame->page() && !m_frame->page()->settings().cookieEnabled()) > return false; >@@ -127,6 +152,10 @@ bool Navigator::javaEnabled() const > { > if (!m_frame) > return false; >+ >+#if ENABLE(WEB_API_STATISTICS) >+ ResourceLoadObserver::shared().logNavigatorLoad(*m_frame->document(), "javaEnabled"); >+#endif > > if (!m_frame->settings().isJavaEnabled()) > return false; >@@ -147,6 +176,7 @@ bool Navigator::standalone() const > > void Navigator::getStorageUpdates() > { >+ > } > > } // namespace WebCore >diff --git a/Source/WebCore/page/Screen.cpp b/Source/WebCore/page/Screen.cpp >index ff487d7cad06c754f00fbbd0244bdaa87ae9d2c0..b7bb8114d2a8f86388e770fa9f4c2172e398f12a 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().logScreenLoad(*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().logScreenLoad(*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().logScreenLoad(*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().logScreenLoad(*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().logScreenLoad(*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().logScreenLoad(*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().logScreenLoad(*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().logScreenLoad(*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..929cc3792e73bc71dfbd14c3344723ce702e3d81 100644 >--- a/Source/WebKit/Shared/WebCoreArgumentCoders.cpp >+++ b/Source/WebKit/Shared/WebCoreArgumentCoders.cpp >@@ -2623,6 +2623,25 @@ void ArgumentCoder<ResourceLoadStatistics>::encode(Encoder& encoder, const WebCo > encoder << statistics.isPrevalentResource; > encoder << statistics.isVeryPrevalentResource; > encoder << statistics.dataRecordsRemoved; >+ >+#if ENABLE(WEB_API_STATISTICS) >+ // Font loading >+ encoder << statistics.fontsFailedToLoad; >+ encoder << statistics.fontsLoaded; >+ encoder << statistics.topFrameRegistrableDomains; >+ >+ // Canvas stats >+ encoder << statistics.canvasLog.canvasDataRead; >+ encoder << statistics.canvasLog.textWritten; >+ encoder << statistics.canvasLog.maxHeight; >+ encoder << statistics.canvasLog.maxWidth; >+ encoder << statistics.topFrameRegistrableDomainsWithCanvases; >+ >+ // Screen and navigation stats >+ encoder << statistics.navigatorFunctionsAccessed; >+ encoder << statistics.screenFunctionsAccessed; >+#endif >+ > } > > std::optional<ResourceLoadStatistics> ArgumentCoder<ResourceLoadStatistics>::decode(Decoder& decoder) >@@ -2682,7 +2701,40 @@ std::optional<ResourceLoadStatistics> ArgumentCoder<ResourceLoadStatistics>::dec > > if (!decoder.decode(statistics.dataRecordsRemoved)) > return std::nullopt; >- >+#if ENABLE(WEB_API_STATISTICS) >+ // Font loading >+ if (!decoder.decode(statistics.fontsFailedToLoad)) >+ return std::nullopt; >+ >+ if (!decoder.decode(statistics.fontsLoaded)) >+ return std::nullopt; >+ >+ if (!decoder.decode(statistics.topFrameRegistrableDomains)) >+ return std::nullopt; >+ >+ // Canvas stats >+ if (!decoder.decode(statistics.canvasLog.canvasDataRead)) >+ return std::nullopt; >+ >+ if (!decoder.decode(statistics.canvasLog.textWritten)) >+ return std::nullopt; >+ >+ if (!decoder.decode(statistics.canvasLog.maxHeight)) >+ return std::nullopt; >+ >+ if (!decoder.decode(statistics.canvasLog.maxWidth)) >+ return std::nullopt; >+ >+ if (!decoder.decode(statistics.topFrameRegistrableDomainsWithCanvases)) >+ 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 9ea40112aa8e5a07e4a4b6e9a70c7965c859d838..c2fafde3c8c9deb7ef35d9181a9cb55fe5528196 100644 >--- a/Source/WebKit/UIProcess/ResourceLoadStatisticsMemoryStore.cpp >+++ b/Source/WebKit/UIProcess/ResourceLoadStatisticsMemoryStore.cpp >@@ -46,7 +46,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 86d449021bfbb1d4dce25ddcf6b696a3ffa58303..4a71da7ebcacf349bc534f7e78468e47eb35876a 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-07-27 Michael Catanzaro <mcatanzaro@igalia.com> > > Unreviewed, fix typo in test expectations and mark another test as timing out >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