blob: 9b9735eb50d993ec95d66f7e49f0b97267c3e429 [file] [log] [blame]
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/page_load_metrics/browser/observers/use_counter_page_load_metrics_observer.h"
#include "base/no_destructor.h"
// This file defines a list of UseCounter WebFeature measured in the
// UKM-based UseCounter. Features must all satisfy UKM privacy requirements
// (see go/ukm). In addition, features should only be added if it's shown
// (or highly likely be) rare, e.g. <1% of page views as measured by UMA.
//
// UKM-based UseCounter should be used to cover the case when UMA UseCounter
// data shows a behaviour that is rare but too common to bindly change.
// UKM-based UseCounter would allow use to find specific pages to reason about
// either a breaking change is acceptable or not.
using WebFeature = blink::mojom::WebFeature;
// UKM-based UseCounter features (WebFeature) should be defined in
// opt_in_features list.
const UseCounterPageLoadMetricsObserver::UkmFeatureList&
UseCounterPageLoadMetricsObserver::GetAllowedUkmFeatures() {
static base::NoDestructor<UseCounterPageLoadMetricsObserver::UkmFeatureList>
// We explicitly use an std::initializer_list below to work around GCC
// bug 84849, which causes having a base::NoDestructor<T<U>> and passing
// an initializer list of Us does not work.
opt_in_features(std::initializer_list<WebFeature>({
WebFeature::kNavigatorVibrate,
WebFeature::kNavigatorVibrateSubFrame,
WebFeature::kTouchEventPreventedNoTouchAction,
WebFeature::kTouchEventPreventedForcedDocumentPassiveNoTouchAction,
WebFeature::kApplicationCacheInstalledButNoManifest,
WebFeature::kApplicationCacheManifestSelectInsecureOrigin,
WebFeature::kApplicationCacheManifestSelectSecureOrigin,
WebFeature::kMixedContentAudio,
WebFeature::kMixedContentImage,
WebFeature::kMixedContentVideo,
WebFeature::kMixedContentPlugin,
WebFeature::kOpenerNavigationWithoutGesture,
WebFeature::kUsbRequestDevice,
WebFeature::kXMLHttpRequestSynchronous,
WebFeature::kXMLHttpRequestSynchronousInMainFrame,
WebFeature::kXMLHttpRequestSynchronousInCrossOriginSubframe,
WebFeature::kXMLHttpRequestSynchronousInSameOriginSubframe,
WebFeature::kXMLHttpRequestSynchronousInWorker,
WebFeature::kPaymentHandler,
WebFeature::kPaymentRequestShowWithoutGesture,
WebFeature::kHTMLImports,
WebFeature::kHTMLImportsHasStyleSheets,
WebFeature::kHTMLImportsOnReverseOriginTrials,
WebFeature::kElementCreateShadowRoot,
WebFeature::kElementCreateShadowRootOnReverseOriginTrials,
WebFeature::kDocumentRegisterElement,
WebFeature::kDocumentRegisterElementOnReverseOriginTrials,
WebFeature::kCredentialManagerCreatePublicKeyCredential,
WebFeature::kCredentialManagerGetPublicKeyCredential,
WebFeature::kCredentialManagerMakePublicKeyCredentialSuccess,
WebFeature::kCredentialManagerGetPublicKeyCredentialSuccess,
WebFeature::kV8AudioContext_Constructor,
WebFeature::kElementAttachShadow,
WebFeature::kElementAttachShadowOpen,
WebFeature::kElementAttachShadowClosed,
WebFeature::kCustomElementRegistryDefine,
WebFeature::kTextToSpeech_Speak,
WebFeature::kTextToSpeech_SpeakDisallowedByAutoplay,
WebFeature::kCSSEnvironmentVariable,
WebFeature::kCSSEnvironmentVariable_SafeAreaInsetTop,
WebFeature::kCSSEnvironmentVariable_SafeAreaInsetLeft,
WebFeature::kCSSEnvironmentVariable_SafeAreaInsetRight,
WebFeature::kCSSEnvironmentVariable_SafeAreaInsetBottom,
WebFeature::kMediaControlsDisplayCutoutGesture,
WebFeature::kPolymerV1Detected,
WebFeature::kPolymerV2Detected,
WebFeature::kFullscreenSecureOrigin,
WebFeature::kFullscreenInsecureOrigin,
WebFeature::kPrefixedVideoEnterFullscreen,
WebFeature::kPrefixedVideoExitFullscreen,
WebFeature::kPrefixedVideoEnterFullScreen,
WebFeature::kPrefixedVideoExitFullScreen,
WebFeature::kDocumentLevelPassiveDefaultEventListenerPreventedWheel,
WebFeature::kDocumentDomainBlockedCrossOriginAccess,
WebFeature::kDocumentDomainEnabledCrossOriginAccess,
WebFeature::kCursorImageGT32x32,
WebFeature::kCursorImageLE32x32,
WebFeature::kHistoryPushState,
WebFeature::kHistoryReplaceState,
WebFeature::kCursorImageGT64x64,
WebFeature::kAdClick,
WebFeature::kUpdateWithoutShippingOptionOnShippingAddressChange,
WebFeature::kUpdateWithoutShippingOptionOnShippingOptionChange,
WebFeature::kSignedExchangeInnerResponseInMainFrame,
WebFeature::kSignedExchangeInnerResponseInSubFrame,
WebFeature::kWebShareShare,
WebFeature::kDownloadInAdFrameWithoutUserGesture,
WebFeature::kOpenWebDatabase,
WebFeature::kV8MediaCapabilities_DecodingInfo_Method,
WebFeature::kOpenerNavigationDownloadCrossOrigin,
WebFeature::kLinkRelPrerender,
WebFeature::kAdClickNavigation,
WebFeature::kDownloadInSandboxWithoutUserGesture,
WebFeature::kV8HTMLVideoElement_RequestPictureInPicture_Method,
WebFeature::kMediaCapabilitiesDecodingInfoWithKeySystemConfig,
WebFeature::kTextFragmentAnchor,
WebFeature::kTextFragmentAnchorMatchFound,
WebFeature::kCookieNoSameSite,
WebFeature::kCookieInsecureAndSameSiteNone,
WebFeature::kDeviceOrientationSecureOrigin,
WebFeature::kDeviceOrientationAbsoluteSecureOrigin,
WebFeature::kDeviceMotionSecureOrigin,
WebFeature::kRelativeOrientationSensorConstructor,
WebFeature::kAbsoluteOrientationSensorConstructor,
WebFeature::kLinearAccelerationSensorConstructor,
WebFeature::kAccelerometerConstructor,
WebFeature::kGyroscopeConstructor,
WebFeature::kServiceWorkerInterceptedRequestFromOriginDirtyStyleSheet,
WebFeature::kDownloadPrePolicyCheck,
WebFeature::kDownloadPostPolicyCheck,
WebFeature::kDownloadInAdFrame,
WebFeature::kDownloadInSandbox,
WebFeature::kDownloadWithoutUserGesture,
WebFeature::kLazyLoadFrameLoadingAttributeLazy,
WebFeature::kLazyLoadFrameLoadingAttributeEager,
WebFeature::kLazyLoadImageLoadingAttributeLazy,
WebFeature::kLazyLoadImageLoadingAttributeEager,
WebFeature::kRequestedFileSystemTemporary,
WebFeature::kRequestedFileSystemPersistent,
WebFeature::kSMSReceiverStart,
WebFeature::kRequestFileSystem,
WebFeature::kMediaCapabilitiesFramerateRatio,
WebFeature::kBaseElement,
WebFeature::kBaseWithCrossOriginHref,
WebFeature::kWakeLockAcquireScreenLock,
WebFeature::kWakeLockAcquireSystemLock,
WebFeature::kThirdPartyServiceWorker,
WebFeature::kThirdPartySharedWorker,
WebFeature::kThirdPartyBroadcastChannel,
WebFeature::kHeavyAdIntervention,
WebFeature::kGetGamepadsFromCrossOriginSubframe,
WebFeature::kGetGamepadsFromInsecureContext,
}));
return *opt_in_features;
}