From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Sun, 27 Jun 2021 17:35:39 +0200 Subject: Add flag to disable vibration License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html --- chrome/browser/about_flags.cc | 4 ++++ chrome/browser/flag_descriptions.cc | 3 +++ chrome/browser/flag_descriptions.h | 2 ++ content/child/runtime_features.cc | 1 + content/public/common/content_features.cc | 5 +++++ content/public/common/content_features.h | 2 ++ third_party/blink/public/platform/web_runtime_features.h | 1 + .../blink/renderer/modules/vibration/vibration_controller.cc | 3 +++ .../blink/renderer/platform/exported/web_runtime_features.cc | 4 ++++ .../blink/renderer/platform/runtime_enabled_features.json5 | 4 ++++ 10 files changed, 29 insertions(+) diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc @@ -8430,6 +8430,10 @@ const FeatureEntry kFeatureEntries[] = { FEATURE_VALUE_TYPE(features::kNewMacNotificationAPI)}, #endif + {"enable-vibration", flag_descriptions::kEnableVibrationName, + flag_descriptions::kEnableVibrationDescription, kOsAll, + FEATURE_VALUE_TYPE(features::kVibration)}, + #if BUILDFLAG(IS_CHROMEOS_ASH) {"exo-consumed-by-ime-by-flag", flag_descriptions::kExoConsumedByImeByFlagName, diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc @@ -7343,6 +7343,9 @@ const char kLacrosMergeIcuDataFileDescription[] = "Enables sharing common areas of icudtl.dat between Ash and Lacros."; #endif // #if BUILDFLAG(IS_CHROMEOS_LACROS) +const char kEnableVibrationName[] = "Vibration"; +const char kEnableVibrationDescription[] = "Enable vibration API; an user gesture will still be needed."; + #if BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_LINUX) const char kGetAllScreensMediaName[] = "GetAllScreensMedia API"; const char kGetAllScreensMediaDescription[] = diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h @@ -4466,6 +4466,8 @@ extern const char kWebUITabStripContextMenuAfterTapName[]; extern const char kWebUITabStripContextMenuAfterTapDescription[]; #endif // BUILDFLAG(ENABLE_WEBUI_TAB_STRIP) +extern const char kEnableVibrationName[]; +extern const char kEnableVibrationDescription[]; #if defined(TOOLKIT_VIEWS) || BUILDFLAG(IS_ANDROID) extern const char kAutofillCreditCardUploadName[]; diff --git a/content/child/runtime_features.cc b/content/child/runtime_features.cc --- a/content/child/runtime_features.cc +++ b/content/child/runtime_features.cc @@ -103,6 +103,7 @@ void SetRuntimeFeatureDefaultsForPlatform( if (command_line.HasSwitch(switches::kDisableMediaSessionAPI)) { WebRuntimeFeatures::EnableMediaSession(false); } + WebRuntimeFeatures::EnableVibration(base::FeatureList::IsEnabled(features::kVibration)); #endif #if BUILDFLAG(IS_ANDROID) diff --git a/content/public/common/content_features.cc b/content/public/common/content_features.cc --- a/content/public/common/content_features.cc +++ b/content/public/common/content_features.cc @@ -106,6 +106,11 @@ BASE_FEATURE(kBackForwardCacheMemoryControls, #endif ); +// Enables vibration; an user gesture will still be required if enabled. +BASE_FEATURE(kVibration, + "VibrationEnabled", + base::FEATURE_DISABLED_BY_DEFAULT); + // When this feature is enabled, private network requests initiated from // non-secure contexts in the `public` address space are blocked. // diff --git a/content/public/common/content_features.h b/content/public/common/content_features.h --- a/content/public/common/content_features.h +++ b/content/public/common/content_features.h @@ -311,6 +311,8 @@ CONTENT_EXPORT BASE_DECLARE_FEATURE(kForceOffTextAutosizing); CONTENT_EXPORT BASE_DECLARE_FEATURE(kUserMediaScreenCapturing); CONTENT_EXPORT BASE_DECLARE_FEATURE(kWebNfc); #endif // BUILDFLAG(IS_ANDROID) +CONTENT_EXPORT BASE_DECLARE_FEATURE(kVibration); + #if BUILDFLAG(IS_MAC) CONTENT_EXPORT BASE_DECLARE_FEATURE(kMacAllowBackgroundingRenderProcesses); diff --git a/third_party/blink/public/platform/web_runtime_features.h b/third_party/blink/public/platform/web_runtime_features.h --- a/third_party/blink/public/platform/web_runtime_features.h +++ b/third_party/blink/public/platform/web_runtime_features.h @@ -70,6 +70,7 @@ class BLINK_PLATFORM_EXPORT WebRuntimeFeatures : public WebRuntimeFeaturesBase { static void EnableFingerprintingCanvasMeasureTextNoise(bool); static void EnableFingerprintingCanvasImageDataNoise(bool); static void EnableFluentScrollbars(bool); + static void EnableVibration(bool); WebRuntimeFeatures() = delete; }; diff --git a/third_party/blink/renderer/modules/vibration/vibration_controller.cc b/third_party/blink/renderer/modules/vibration/vibration_controller.cc --- a/third_party/blink/renderer/modules/vibration/vibration_controller.cc +++ b/third_party/blink/renderer/modules/vibration/vibration_controller.cc @@ -29,6 +29,7 @@ #include "third_party/blink/renderer/core/frame/local_frame.h" #include "third_party/blink/renderer/core/frame/navigator.h" #include "third_party/blink/renderer/core/page/page.h" +#include "third_party/blink/renderer/platform/runtime_enabled_features.h" // Maximum number of entries in a vibration pattern. const unsigned kVibrationPatternLengthMax = 99; @@ -152,6 +153,8 @@ bool VibrationController::vibrate(Navigator& navigator, // reference to |window| or |navigator| was retained in another window. if (!navigator.DomWindow()) return false; + if (!RuntimeEnabledFeatures::VibrationEnabled()) + return false; return From(navigator).Vibrate(pattern); } diff --git a/third_party/blink/renderer/platform/exported/web_runtime_features.cc b/third_party/blink/renderer/platform/exported/web_runtime_features.cc --- a/third_party/blink/renderer/platform/exported/web_runtime_features.cc +++ b/third_party/blink/renderer/platform/exported/web_runtime_features.cc @@ -52,6 +52,10 @@ void WebRuntimeFeatures::EnableTestOnlyFeatures(bool enable) { RuntimeEnabledFeatures::SetTestFeaturesEnabled(enable); } +void WebRuntimeFeatures::EnableVibration(bool enable) { + RuntimeEnabledFeatures::SetVibrationEnabled(enable); +} + void WebRuntimeFeatures::EnableOriginTrialControlledFeatures(bool enable) { RuntimeEnabledFeatures::SetOriginTrialControlledFeaturesEnabled(enable); } diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5 --- a/third_party/blink/renderer/platform/runtime_enabled_features.json5 +++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5 @@ -2638,6 +2638,10 @@ status: {"Android": "stable"}, base_feature: "none", }, + { + name: "Vibration", + status: "stable", + }, { name: "OriginIsolationHeader", status: "stable", -- 2.25.1