// Copyright 2018 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "android_webview/common/aw_features.h"
#include "base/feature_list.h"
#include "base/metrics/field_trial_params.h"

namespace android_webview {
namespace features {

// Alphabetical:

// Enables package name logging for the most popular WebView embedders that are
// on a dynamically generated allowlist.
// The filtering for package names will be done on the server side using this
// flag
BASE_FEATURE(kWebViewAppsPackageNamesServerSideAllowlist,
             "WebViewAppsPackageNamesServerSideAllowlist",
             base::FEATURE_DISABLED_BY_DEFAULT);

// Enable brotli compression support in WebView.
BASE_FEATURE(kWebViewBrotliSupport,
             "WebViewBrotliSupport",
             base::FEATURE_DISABLED_BY_DEFAULT);

// Check layer_tree_frame_sink_id when return resources to compositor.
BASE_FEATURE(kWebViewCheckReturnResources,
             "WebViewCheckReturnResources",
             base::FEATURE_ENABLED_BY_DEFAULT);

// Server side sampling switch.
BASE_FEATURE(kWebViewServerSideSampling,
             "WebViewServerSideSampling",
             base::FEATURE_DISABLED_BY_DEFAULT);

// Use the SafeBrowsingApiHandlerBridge which uses the connectionless GMS APIs.
// This Feature is checked and used in downstream internal code.
BASE_FEATURE(kWebViewConnectionlessSafeBrowsing,
             "WebViewConnectionlessSafeBrowsing",
             base::FEATURE_DISABLED_BY_DEFAULT);

// Cache origins which have camera/mic permissions approved to allow subsequent
// calls to enumerate devices to return device labels.
BASE_FEATURE(kWebViewEnumerateDevicesCache,
             "WebViewEnumerateDevicesCache",
             base::FEATURE_ENABLED_BY_DEFAULT);

// Enable WebView to automatically darken the page in FORCE_DARK_AUTO mode if
// the app's theme is dark.
BASE_FEATURE(kWebViewForceDarkModeMatchTheme,
             "WebViewForceDarkModeMatchTheme",
             base::FEATURE_DISABLED_BY_DEFAULT);

BASE_FEATURE(kWebViewHitTestInBlinkOnTouchStart,
             "WebViewHitTestInBlinkOnTouchStart",
             base::FEATURE_ENABLED_BY_DEFAULT);

// Enable display cutout support for Android P and above.
BASE_FEATURE(kWebViewDisplayCutout,
             "WebViewDisplayCutout",
             base::FEATURE_ENABLED_BY_DEFAULT);

// Fake empty component to measure component updater performance impact on
// WebView clients.
BASE_FEATURE(kWebViewEmptyComponentLoaderPolicy,
             "WebViewEmptyComponentLoaderPolicy",
             base::FEATURE_DISABLED_BY_DEFAULT);

// When enabled, passive mixed content (Audio/Video/Image subresources loaded
// over HTTP on HTTPS sites) will be autoupgraded to HTTPS, and the load will be
// blocked if the resource fails to load over HTTPS. This only affects apps that
// set the mixed content mode to MIXED_CONTENT_COMPATIBILITY_MODE, autoupgrades
// are always disabled for MIXED_CONTENT_NEVER_ALLOW and
// MIXED_CONTENT_ALWAYS_ALLOW modes.
BASE_FEATURE(kWebViewMixedContentAutoupgrades,
             "WebViewMixedContentAutoupgrades",
             base::FEATURE_DISABLED_BY_DEFAULT);

// Only allow extra headers added via loadUrl() to be sent to the original
// origin; strip them from the request if a cross-origin redirect occurs.
BASE_FEATURE(kWebViewExtraHeadersSameOriginOnly,
             "WebViewExtraHeadersSameOriginOnly",
             base::FEATURE_DISABLED_BY_DEFAULT);

// Enable the new Java/JS Bridge code path with mojo implementation.
BASE_FEATURE(kWebViewJavaJsBridgeMojo,
             "WebViewJavaJsBridgeMojo",
             base::FEATURE_DISABLED_BY_DEFAULT);

// Field trial feature for controlling support of Origin Trials on WebView.
BASE_FEATURE(kWebViewOriginTrials,
             "WebViewOriginTrials",
             base::FEATURE_ENABLED_BY_DEFAULT);

// Whether to record size of the embedding app's data directory to the UMA
// histogram Android.WebView.AppDataDirectorySize.
BASE_FEATURE(kWebViewRecordAppDataDirectorySize,
             "WebViewRecordAppDataDirectorySize",
             base::FEATURE_DISABLED_BY_DEFAULT);

// Flag to restrict main frame Web Content to verified web content. Verification
// happens via Digital Asset Links.
BASE_FEATURE(kWebViewRestrictSensitiveContent,
             "WebViewRestrictSensitiveContent",
             base::FEATURE_DISABLED_BY_DEFAULT);

// Enable doing a JNI call to check safe browsing safe mode status before doing
// a safe browsing check.
BASE_FEATURE(kWebViewSafeBrowsingSafeMode,
             "WebViewSafeBrowsingSafeMode",
             base::FEATURE_DISABLED_BY_DEFAULT);

// Disallows window.{alert, prompt, confirm} if triggered inside a subframe that
// is not same origin with the main frame.
BASE_FEATURE(kWebViewSuppressDifferentOriginSubframeJSDialogs,
             "WebViewSuppressDifferentOriginSubframeJSDialogs",
             base::FEATURE_DISABLED_BY_DEFAULT);

// A Feature used for WebView variations tests. Not used in production.
BASE_FEATURE(kWebViewTestFeature,
             "WebViewTestFeature",
             base::FEATURE_DISABLED_BY_DEFAULT);

// Use WebView's nonembedded MetricsUploadService to upload UMA metrics instead
// of sending it directly to GMS-core.
BASE_FEATURE(kWebViewUseMetricsUploadService,
             "WebViewUseMetricsUploadService",
             base::FEATURE_DISABLED_BY_DEFAULT);

// Enable raster in wide color gamut for apps that use webview in a wide color
// gamut activity.
BASE_FEATURE(kWebViewWideColorGamutSupport,
             "WebViewWideColorGamutSupport",
             base::FEATURE_ENABLED_BY_DEFAULT);

// Control the default behaviour for the XRequestedWith header
BASE_FEATURE(kWebViewXRequestedWithHeaderControl,
             "WebViewXRequestedWithHeaderControl",
             base::FEATURE_DISABLED_BY_DEFAULT);

// Default value of the XRequestedWith header mode when
// WebViewXRequestedWithHeaderControl is enabled. Defaults to
// |AwSettings::RequestedWithHeaderMode::NO_HEADER| Must be value declared in in
// |AwSettings::RequestedWithHeaderMode|
const base::FeatureParam<int> kWebViewXRequestedWithHeaderMode{
    &kWebViewXRequestedWithHeaderControl, "WebViewXRequestedWithHeaderMode", 0};

// Control whether WebView will attempt to read the XRW header allow-list from
// the manifest.
BASE_FEATURE(kWebViewXRequestedWithHeaderManifestAllowList,
             "WebViewXRequestedWithHeaderManifestAllowList",
             base::FEATURE_DISABLED_BY_DEFAULT);

// This enables image drage out for Webview.
BASE_FEATURE(kWebViewImageDrag,
             "WebViewImageDrag",
             base::FEATURE_ENABLED_BY_DEFAULT);

// This enables uploading UMA data with a higher frequency.
// This Feature is checked and used in downstream internal code.
BASE_FEATURE(kWebViewUmaUploadQualityOfServiceSetToDefault,
             "WebViewUmaUploadQualityOfServiceSetToDefault",
             base::FEATURE_DISABLED_BY_DEFAULT);

// This enables zoom keyboard shortcuts for zoom-in, zoom-out and zoom reset.
BASE_FEATURE(kWebViewZoomKeyboardShortcuts,
             "WebViewZoomKeyboardShortcuts",
             base::FEATURE_DISABLED_BY_DEFAULT);

}  // namespace features
}  // namespace android_webview