From c61c10a2cee9e754e2f9495fdcd52e6f2d71820a Mon Sep 17 00:00:00 2001 From: Mirko Brodesser Date: Mon, 4 Oct 2021 12:16:00 +0000 Subject: [PATCH] Bug 1731994: part 8) Rename `nsIContentPermissionRequest`'s `isHandlingUserInput` to `hasValidTransientUserGestureActivation`. r=edgar It's more accurate. Differential Revision: https://phabricator.services.mozilla.com/D126916 --- browser/components/BrowserGlue.jsm | 5 ++- browser/modules/PermissionUI.jsm | 7 ++- dom/base/nsContentPermissionHelper.cpp | 43 +++++++++++-------- dom/base/nsContentPermissionHelper.h | 7 +-- dom/base/test/chrome/chrome.ini | 2 +- ...ion_hasValidTransientUserActivation.xhtml} | 10 ++--- .../base/nsIContentPermissionPrompt.idl | 2 +- dom/notification/Notification.cpp | 4 +- dom/push/Push.jsm | 16 +++++-- .../geckoview/GeckoViewPermission.jsm | 2 +- tools/lint/rejected-words.yml | 2 +- 11 files changed, 61 insertions(+), 39 deletions(-) rename dom/base/test/chrome/{test_permission_isHandlingUserInput.xhtml => test_permission_hasValidTransientUserActivation.xhtml} (85%) diff --git a/browser/components/BrowserGlue.jsm b/browser/components/BrowserGlue.jsm index f09356c9d393..eb8384cc7728 100644 --- a/browser/components/BrowserGlue.jsm +++ b/browser/components/BrowserGlue.jsm @@ -4895,7 +4895,10 @@ ContentPermissionPrompt.prototype = { let userInputHistogram = Services.telemetry.getKeyedHistogramById( "PERMISSION_REQUEST_HANDLING_USER_INPUT" ); - userInputHistogram.add(type, request.isHandlingUserInput); + userInputHistogram.add( + type, + request.hasValidTransientUserGestureActivation + ); }, }; diff --git a/browser/modules/PermissionUI.jsm b/browser/modules/PermissionUI.jsm index 9f2b394b2243..abae7437e0ef 100644 --- a/browser/modules/PermissionUI.jsm +++ b/browser/modules/PermissionUI.jsm @@ -193,7 +193,7 @@ var PermissionPromptPrototype = { /** * If true, the prompt will be cancelled automatically unless - * request.isHandlingUserInput is true. + * request.hasValidTransientUserGestureActivation is true. */ get requiresUserInput() { return false; @@ -415,7 +415,10 @@ var PermissionPromptPrototype = { } } - if (this.requiresUserInput && !this.request.isHandlingUserInput) { + if ( + this.requiresUserInput && + !this.request.hasValidTransientUserGestureActivation + ) { if (this.postPromptEnabled) { this.postPrompt(); } diff --git a/dom/base/nsContentPermissionHelper.cpp b/dom/base/nsContentPermissionHelper.cpp index ca7eaeb19654..65bce65ae4eb 100644 --- a/dom/base/nsContentPermissionHelper.cpp +++ b/dom/base/nsContentPermissionHelper.cpp @@ -45,7 +45,7 @@ class ContentPermissionRequestParent : public PContentPermissionRequestParent { ContentPermissionRequestParent( const nsTArray& aRequests, Element* aElement, nsIPrincipal* aPrincipal, nsIPrincipal* aTopLevelPrincipal, - const bool aIsHandlingUserInput, + const bool aHasValidTransientUserGestureActivation, const bool aIsRequestDelegatedToUnsafeThirdParty); virtual ~ContentPermissionRequestParent(); @@ -54,7 +54,7 @@ class ContentPermissionRequestParent : public PContentPermissionRequestParent { nsCOMPtr mPrincipal; nsCOMPtr mTopLevelPrincipal; nsCOMPtr mElement; - bool mIsHandlingUserInput; + bool mHasValidTransientUserGestureActivation; // See nsIPermissionDelegateHandler.maybeUnsafePermissionDelegate. bool mIsRequestDelegatedToUnsafeThirdParty; @@ -73,7 +73,7 @@ class ContentPermissionRequestParent : public PContentPermissionRequestParent { ContentPermissionRequestParent::ContentPermissionRequestParent( const nsTArray& aRequests, Element* aElement, nsIPrincipal* aPrincipal, nsIPrincipal* aTopLevelPrincipal, - const bool aIsHandlingUserInput, + const bool aHasValidTransientUserGestureActivation, const bool aIsRequestDelegatedToUnsafeThirdParty) { MOZ_COUNT_CTOR(ContentPermissionRequestParent); @@ -81,7 +81,8 @@ ContentPermissionRequestParent::ContentPermissionRequestParent( mTopLevelPrincipal = aTopLevelPrincipal; mElement = aElement; mRequests = aRequests.Clone(); - mIsHandlingUserInput = aIsHandlingUserInput; + mHasValidTransientUserGestureActivation = + aHasValidTransientUserGestureActivation; mIsRequestDelegatedToUnsafeThirdParty = aIsRequestDelegatedToUnsafeThirdParty; } @@ -239,10 +240,11 @@ PContentPermissionRequestParent* nsContentPermissionUtils::CreateContentPermissionRequestParent( const nsTArray& aRequests, Element* aElement, nsIPrincipal* aPrincipal, nsIPrincipal* aTopLevelPrincipal, - const bool aIsHandlingUserInput, + const bool aHasValidTransientUserGestureActivation, const bool aIsRequestDelegatedToUnsafeThirdParty, const TabId& aTabId) { PContentPermissionRequestParent* parent = new ContentPermissionRequestParent( - aRequests, aElement, aPrincipal, aTopLevelPrincipal, aIsHandlingUserInput, + aRequests, aElement, aPrincipal, aTopLevelPrincipal, + aHasValidTransientUserGestureActivation, aIsRequestDelegatedToUnsafeThirdParty); ContentPermissionRequestParentMap()[parent] = aTabId; @@ -279,8 +281,9 @@ nsresult nsContentPermissionUtils::AskPermission( rv = aRequest->GetTopLevelPrincipal(getter_AddRefs(topLevelPrincipal)); NS_ENSURE_SUCCESS(rv, rv); - bool isHandlingUserInput; - rv = aRequest->GetIsHandlingUserInput(&isHandlingUserInput); + bool hasValidTransientUserGestureActivation; + rv = aRequest->GetHasValidTransientUserGestureActivation( + &hasValidTransientUserGestureActivation); NS_ENSURE_SUCCESS(rv, rv); bool isRequestDelegatedToUnsafeThirdParty; @@ -294,7 +297,8 @@ nsresult nsContentPermissionUtils::AskPermission( req->IPDLAddRef(); ContentChild::GetSingleton()->SendPContentPermissionRequestConstructor( req, permArray, IPC::Principal(principal), - IPC::Principal(topLevelPrincipal), isHandlingUserInput, + IPC::Principal(topLevelPrincipal), + hasValidTransientUserGestureActivation, isRequestDelegatedToUnsafeThirdParty, child->GetTabId()); ContentPermissionRequestChildMap()[req.get()] = child->GetTabId(); @@ -397,7 +401,7 @@ ContentPermissionRequestBase::ContentPermissionRequestBase( mWindow(aWindow), mPrefName(aPrefName), mType(aType), - mIsHandlingUserInput(false), + mHasValidTransientUserGestureActivation(false), mIsRequestDelegatedToUnsafeThirdParty(false) { if (!aWindow) { return; @@ -408,7 +412,8 @@ ContentPermissionRequestBase::ContentPermissionRequestBase( return; } - mIsHandlingUserInput = doc->HasValidTransientUserGestureActivation(); + mHasValidTransientUserGestureActivation = + doc->HasValidTransientUserGestureActivation(); mPermissionHandler = doc->GetPermissionDelegateHandler(); if (mPermissionHandler) { @@ -467,9 +472,10 @@ ContentPermissionRequestBase::GetElement(Element** aElement) { } NS_IMETHODIMP -ContentPermissionRequestBase::GetIsHandlingUserInput( - bool* aIsHandlingUserInput) { - *aIsHandlingUserInput = mIsHandlingUserInput; +ContentPermissionRequestBase::GetHasValidTransientUserGestureActivation( + bool* aHasValidTransientUserGestureActivation) { + *aHasValidTransientUserGestureActivation = + mHasValidTransientUserGestureActivation; return NS_OK; } @@ -735,13 +741,14 @@ nsContentPermissionRequestProxy::GetElement(Element** aRequestingElement) { } NS_IMETHODIMP -nsContentPermissionRequestProxy::GetIsHandlingUserInput( - bool* aIsHandlingUserInput) { - NS_ENSURE_ARG_POINTER(aIsHandlingUserInput); +nsContentPermissionRequestProxy::GetHasValidTransientUserGestureActivation( + bool* aHasValidTransientUserGestureActivation) { + NS_ENSURE_ARG_POINTER(aHasValidTransientUserGestureActivation); if (mParent == nullptr) { return NS_ERROR_FAILURE; } - *aIsHandlingUserInput = mParent->mIsHandlingUserInput; + *aHasValidTransientUserGestureActivation = + mParent->mHasValidTransientUserGestureActivation; return NS_OK; } diff --git a/dom/base/nsContentPermissionHelper.h b/dom/base/nsContentPermissionHelper.h index a476ab4e3259..cbe145d8800d 100644 --- a/dom/base/nsContentPermissionHelper.h +++ b/dom/base/nsContentPermissionHelper.h @@ -76,7 +76,7 @@ class nsContentPermissionUtils { static PContentPermissionRequestParent* CreateContentPermissionRequestParent( const nsTArray& aRequests, Element* aElement, nsIPrincipal* aPrincipal, nsIPrincipal* aTopLevelPrincipal, - const bool aIsHandlingUserInput, + const bool aHasValidTransientUserGestureActivation, const bool aIsRequestDelegatedToUnsafeThirdParty, const TabId& aTabId); static nsresult AskPermission(nsIContentPermissionRequest* aRequest, @@ -112,7 +112,8 @@ class ContentPermissionRequestBase : public nsIContentPermissionRequest { NS_IMETHOD GetTopLevelPrincipal(nsIPrincipal** aTopLevelPrincipal) override; NS_IMETHOD GetWindow(mozIDOMWindow** aWindow) override; NS_IMETHOD GetElement(mozilla::dom::Element** aElement) override; - NS_IMETHOD GetIsHandlingUserInput(bool* aIsHandlingUserInput) override; + NS_IMETHOD GetHasValidTransientUserGestureActivation( + bool* aHasValidTransientUserGestureActivation) override; NS_IMETHOD GetIsRequestDelegatedToUnsafeThirdParty( bool* aIsRequestDelegatedToUnsafeThirdParty) override; // Overrides for Allow() and Cancel() aren't provided by this class. @@ -162,7 +163,7 @@ class ContentPermissionRequestBase : public nsIContentPermissionRequest { // The type of the request, such as "autoplay-media-audible". const nsCString mType; - bool mIsHandlingUserInput; + bool mHasValidTransientUserGestureActivation; // See nsIPermissionDelegateHandler.maybeUnsafePermissionDelegate`. bool mIsRequestDelegatedToUnsafeThirdParty; diff --git a/dom/base/test/chrome/chrome.ini b/dom/base/test/chrome/chrome.ini index 65ed82fe4377..5867ab4a9bf7 100644 --- a/dom/base/test/chrome/chrome.ini +++ b/dom/base/test/chrome/chrome.ini @@ -73,7 +73,7 @@ support-files = [test_fileconstructor.xhtml] [test_input_value_set_preserve_undo.xhtml] [test_nsITextInputProcessor.xhtml] -[test_permission_isHandlingUserInput.xhtml] +[test_permission_hasValidTransientUserActivation.xhtml] support-files = ../dummy.html [test_range_getClientRectsAndTexts.html] [test_title.xhtml] diff --git a/dom/base/test/chrome/test_permission_isHandlingUserInput.xhtml b/dom/base/test/chrome/test_permission_hasValidTransientUserActivation.xhtml similarity index 85% rename from dom/base/test/chrome/test_permission_isHandlingUserInput.xhtml rename to dom/base/test/chrome/test_permission_hasValidTransientUserActivation.xhtml index 9b0e6dd34c71..06675a90ad58 100644 --- a/dom/base/test/chrome/test_permission_isHandlingUserInput.xhtml +++ b/dom/base/test/chrome/test_permission_hasValidTransientUserActivation.xhtml @@ -2,9 +2,9 @@ - + @@ -20,14 +20,14 @@ let frame = document.getElementById("frame"); - function checkPermissionRequest(permission, isHandlingUserInput) { + function checkPermissionRequest(permission, hasValidTransientUserGestureActivation) { return new Promise(function(resolve) { let TestIntegration = (base) => ({ __proto__: base, createPermissionPrompt(type, request) { is(type, permission, `Has correct permission type ${permission}.`); - is(request.isHandlingUserInput, isHandlingUserInput, - "The isHandlingUserInput attribute is set correctly."); + is(request.hasValidTransientUserGestureActivation, hasValidTransientUserGestureActivation, + "The hasValidTransientUserGestureActivation attribute is set correctly."); Integration.contentPermission.unregister(TestIntegration); resolve(); return { prompt() {} }; diff --git a/dom/interfaces/base/nsIContentPermissionPrompt.idl b/dom/interfaces/base/nsIContentPermissionPrompt.idl index 856671fc9556..9b6d3d1a129f 100644 --- a/dom/interfaces/base/nsIContentPermissionPrompt.idl +++ b/dom/interfaces/base/nsIContentPermissionPrompt.idl @@ -59,7 +59,7 @@ interface nsIContentPermissionRequest : nsISupports { readonly attribute mozIDOMWindow window; readonly attribute Element element; - readonly attribute boolean isHandlingUserInput; + readonly attribute boolean hasValidTransientUserGestureActivation; /** * See nsIPermissionDelegateHandler.maybeUnsafePermissionDelegate. diff --git a/dom/notification/Notification.cpp b/dom/notification/Notification.cpp index 821bf287273d..2cd255d17205 100644 --- a/dom/notification/Notification.cpp +++ b/dom/notification/Notification.cpp @@ -510,7 +510,7 @@ NotificationPermissionRequest::Run() { break; } - if (!mIsHandlingUserInput && + if (!mHasValidTransientUserGestureActivation && !StaticPrefs::dom_webnotifications_requireuserinteraction()) { nsCOMPtr doc = mWindow->GetExtantDoc(); if (doc) { @@ -578,7 +578,7 @@ nsresult NotificationPermissionRequest::ResolvePromise() { // automatically and we are not handling user input, then log a // warning in the current document that this happened because // Notifications require a user gesture. - if (!mIsHandlingUserInput && + if (!mHasValidTransientUserGestureActivation && StaticPrefs::dom_webnotifications_requireuserinteraction()) { nsCOMPtr doc = mWindow->GetExtantDoc(); if (doc) { diff --git a/dom/push/Push.jsm b/dom/push/Push.jsm index 48d6b7ea0831..7ceba3ee8659 100644 --- a/dom/push/Push.jsm +++ b/dom/push/Push.jsm @@ -75,7 +75,7 @@ Push.prototype = { askPermission() { console.debug("askPermission()"); - let isHandlingUserInput = this._window.document + let hasValidTransientUserGestureActivation = this._window.document .hasValidTransientUserGestureActivation; return this.createPromise((resolve, reject) => { @@ -95,7 +95,11 @@ Push.prototype = { return; } - this._requestPermission(isHandlingUserInput, resolve, permissionDenied); + this._requestPermission( + hasValidTransientUserGestureActivation, + resolve, + permissionDenied + ); }); }, @@ -199,7 +203,11 @@ Push.prototype = { return permission; }, - _requestPermission(isHandlingUserInput, allowCallback, cancelCallback) { + _requestPermission( + hasValidTransientUserGestureActivation, + allowCallback, + cancelCallback + ) { // Create an array with a single nsIContentPermissionType element. let type = { type: "desktop-notification", @@ -216,7 +224,7 @@ Push.prototype = { QueryInterface: ChromeUtils.generateQI(["nsIContentPermissionRequest"]), types: typeArray, principal: this._principal, - isHandlingUserInput, + hasValidTransientUserGestureActivation, topLevelPrincipal: this._topLevelPrincipal, allow: allowCallback, cancel: cancelCallback, diff --git a/mobile/android/components/geckoview/GeckoViewPermission.jsm b/mobile/android/components/geckoview/GeckoViewPermission.jsm index 3dc072fbeb26..f96ee659fd55 100644 --- a/mobile/android/components/geckoview/GeckoViewPermission.jsm +++ b/mobile/android/components/geckoview/GeckoViewPermission.jsm @@ -228,7 +228,7 @@ class GeckoViewPermission { const perm = types.queryElementAt(0, Ci.nsIContentPermissionType); if ( perm.type === "desktop-notification" && - !aRequest.isHandlingUserInput && + !aRequest.hasValidTransientUserGestureActivation && Services.prefs.getBoolPref( "dom.webnotifications.requireuserinteraction", true diff --git a/tools/lint/rejected-words.yml b/tools/lint/rejected-words.yml index aea4a6c97949..08b2be5f76d6 100644 --- a/tools/lint/rejected-words.yml +++ b/tools/lint/rejected-words.yml @@ -99,7 +99,7 @@ avoid-blacklist-and-whitelist: - dom/base/nsTreeSanitizer.h - dom/base/test/browser_multiple_popups.js - dom/base/test/browser_timeout_throttling_with_audio_playback.js - - dom/base/test/chrome/test_permission_isHandlingUserInput.xhtml + - dom/base/test/chrome/test_permission_hasValidTransientUserActivation.xhtml - dom/bindings/Codegen.py - dom/bindings/parser/WebIDL.py - dom/bindings/RemoteObjectProxy.cpp