[tbb-commits] [Git][tpo/applications/firefox-android][firefox-android-115.2.1-13.5-1] Bug 1836786 - Improve prompts a=dmeehan - BP, tor-browser#42693
ma1 (@ma1)
git at gitlab.torproject.org
Tue Jul 9 13:03:09 UTC 2024
ma1 pushed to branch firefox-android-115.2.1-13.5-1 at The Tor Project / Applications / firefox-android
Commits:
6271d708 by hackademix at 2024-07-09T14:38:08+02:00
Bug 1836786 - Improve prompts a=dmeehan - BP, tor-browser#42693
Note (ma1): backporting needed to
update feature-sitepermissions dependency,
relocate the PromptAbuserDetector import,
de-internalize the class and patch its constructor,
because of the refactorings happened in Bug 1903828.
- - - - -
4 changed files:
- android-components/.buildconfig.yml
- android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/dialog/PromptAbuserDetector.kt
- android-components/components/feature/sitepermissions/build.gradle
- android-components/components/feature/sitepermissions/src/main/java/mozilla/components/feature/sitepermissions/SitePermissionsDialogFragment.kt
Changes:
=====================================
android-components/.buildconfig.yml
=====================================
@@ -1150,6 +1150,7 @@ projects:
- concept-tabstray
- concept-toolbar
- feature-session
+ - feature-prompts
- feature-tabs
- lib-publicsuffixlist
- lib-state
=====================================
android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/dialog/PromptAbuserDetector.kt
=====================================
@@ -9,7 +9,7 @@ import java.util.Date
/**
* Helper class to identify if a website has shown many dialogs.
*/
-internal class PromptAbuserDetector {
+class PromptAbuserDetector(private val maxSuccessiveDialogSecondsLimit: Int = MAX_SUCCESSIVE_DIALOG_SECONDS_LIMIT) {
internal var jsAlertCount = 0
internal var lastDialogShownAt = Date()
@@ -43,7 +43,7 @@ internal class PromptAbuserDetector {
} else {
val now = Date()
val diffInSeconds = (now.time - lastDialogShownAt.time) / SECOND_MS
- diffInSeconds < MAX_SUCCESSIVE_DIALOG_SECONDS_LIMIT
+ diffInSeconds < maxSuccessiveDialogSecondsLimit
}
}
=====================================
android-components/components/feature/sitepermissions/build.gradle
=====================================
@@ -58,6 +58,7 @@ dependencies {
implementation project(':concept-engine')
implementation project(':ui-icons')
implementation project(':support-ktx')
+ implementation project(':feature-prompts')
implementation project(':feature-tabs')
implementation ComponentsDependencies.kotlin_coroutines
=====================================
android-components/components/feature/sitepermissions/src/main/java/mozilla/components/feature/sitepermissions/SitePermissionsDialogFragment.kt
=====================================
@@ -20,8 +20,10 @@ import android.widget.CheckBox
import android.widget.ImageView
import android.widget.LinearLayout.LayoutParams
import android.widget.TextView
+import androidx.annotation.VisibleForTesting
import androidx.appcompat.app.AppCompatDialogFragment
import androidx.core.content.ContextCompat
+import mozilla.components.feature.prompts.dialog.PromptAbuserDetector
internal const val KEY_SESSION_ID = "KEY_SESSION_ID"
internal const val KEY_TITLE = "KEY_TITLE"
@@ -41,6 +43,9 @@ private const val KEY_PERMISSION_ID = "KEY_PERMISSION_ID"
internal open class SitePermissionsDialogFragment : AppCompatDialogFragment() {
+ @VisibleForTesting
+ internal var promptAbuserDetector =
+ PromptAbuserDetector(maxSuccessiveDialogSecondsLimit = TIME_SHOWN_OFFSET_SECONDS)
// Safe Arguments
private val safeArguments get() = requireNotNull(arguments)
@@ -106,6 +111,8 @@ internal open class SitePermissionsDialogFragment : AppCompatDialogFragment() {
}
}
+ promptAbuserDetector.updateJSDialogAbusedState()
+
return sheetDialog
}
@@ -159,8 +166,16 @@ internal open class SitePermissionsDialogFragment : AppCompatDialogFragment() {
val negativeButton = rootView.findViewById<Button>(R.id.deny_button)
positiveButton.setOnClickListener {
- feature?.onPositiveButtonPress(permissionRequestId, sessionId, userSelectionCheckBox)
- dismiss()
+ if (promptAbuserDetector.areDialogsBeingAbused()) {
+ promptAbuserDetector.updateJSDialogAbusedState()
+ } else {
+ feature?.onPositiveButtonPress(
+ permissionRequestId,
+ sessionId,
+ userSelectionCheckBox,
+ )
+ dismiss()
+ }
}
if (positiveButtonBackgroundColor != DEFAULT_VALUE) {
@@ -255,5 +270,7 @@ internal open class SitePermissionsDialogFragment : AppCompatDialogFragment() {
fragment.arguments = arguments
return fragment
}
+
+ private const val TIME_SHOWN_OFFSET_SECONDS = 1
}
}
View it on GitLab: https://gitlab.torproject.org/tpo/applications/firefox-android/-/commit/6271d70897cd1cd4fba39a75d63e3bd1869bcccc
--
View it on GitLab: https://gitlab.torproject.org/tpo/applications/firefox-android/-/commit/6271d70897cd1cd4fba39a75d63e3bd1869bcccc
You're receiving this email because of your account on gitlab.torproject.org.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.torproject.org/pipermail/tbb-commits/attachments/20240709/db4b6452/attachment-0001.htm>
More information about the tbb-commits
mailing list