From 3546d81af875e4ccf8cc4dbeba416d14a0723ff2 Mon Sep 17 00:00:00 2001 From: Craig Russell Date: Wed, 29 May 2024 11:52:32 +0100 Subject: [PATCH 1/5] Add ability to support importing passwords from Google as CSV --- autofill/autofill-impl/build.gradle | 2 + .../autofill/impl/importing/CsvFileReader.kt | 43 +++++ .../impl/importing/CsvPasswordImporter.kt | 75 ++++++++ .../impl/importing/CsvPasswordParser.kt | 138 ++++++++++++++ .../impl/importing/DomainNameNormalizer.kt | 40 +++++ .../ExistingPasswordMatchDetector.kt | 48 +++++ .../importing/ImportedPasswordValidator.kt | 36 ++++ .../DefaultDomainNameNormalizerTest.kt | 74 ++++++++ ...efaultExistingPasswordMatchDetectorTest.kt | 64 +++++++ .../DefaultImportedPasswordValidatorTest.kt | 22 +++ ...glePasswordManagerCsvPasswordParserTest.kt | 168 ++++++++++++++++++ .../autofill/gpm_import_header_row_only.csv | 1 + .../gpm_import_header_row_unknown_field.csv | 1 + .../csv/autofill/gpm_import_missing_notes.csv | 2 + .../autofill/gpm_import_missing_password.csv | 2 + .../csv/autofill/gpm_import_missing_title.csv | 2 + .../autofill/gpm_import_missing_username.csv | 2 + .../gpm_import_one_valid_basic_password.csv | 2 + .../gpm_import_password_has_a_comma.csv | 2 + ...import_password_has_special_characters.csv | 2 + .../gpm_import_two_valid_basic_passwords.csv | 3 + ...m_import_two_valid_identical_passwords.csv | 3 + versions.properties | 2 + 23 files changed, 734 insertions(+) create mode 100644 autofill/autofill-impl/src/main/java/com/duckduckgo/autofill/impl/importing/CsvFileReader.kt create mode 100644 autofill/autofill-impl/src/main/java/com/duckduckgo/autofill/impl/importing/CsvPasswordImporter.kt create mode 100644 autofill/autofill-impl/src/main/java/com/duckduckgo/autofill/impl/importing/CsvPasswordParser.kt create mode 100644 autofill/autofill-impl/src/main/java/com/duckduckgo/autofill/impl/importing/DomainNameNormalizer.kt create mode 100644 autofill/autofill-impl/src/main/java/com/duckduckgo/autofill/impl/importing/ExistingPasswordMatchDetector.kt create mode 100644 autofill/autofill-impl/src/main/java/com/duckduckgo/autofill/impl/importing/ImportedPasswordValidator.kt create mode 100644 autofill/autofill-impl/src/test/java/com/duckduckgo/autofill/impl/importing/DefaultDomainNameNormalizerTest.kt create mode 100644 autofill/autofill-impl/src/test/java/com/duckduckgo/autofill/impl/importing/DefaultExistingPasswordMatchDetectorTest.kt create mode 100644 autofill/autofill-impl/src/test/java/com/duckduckgo/autofill/impl/importing/DefaultImportedPasswordValidatorTest.kt create mode 100644 autofill/autofill-impl/src/test/java/com/duckduckgo/autofill/impl/importing/GooglePasswordManagerCsvPasswordParserTest.kt create mode 100644 autofill/autofill-impl/src/test/resources/csv/autofill/gpm_import_header_row_only.csv create mode 100644 autofill/autofill-impl/src/test/resources/csv/autofill/gpm_import_header_row_unknown_field.csv create mode 100644 autofill/autofill-impl/src/test/resources/csv/autofill/gpm_import_missing_notes.csv create mode 100644 autofill/autofill-impl/src/test/resources/csv/autofill/gpm_import_missing_password.csv create mode 100644 autofill/autofill-impl/src/test/resources/csv/autofill/gpm_import_missing_title.csv create mode 100644 autofill/autofill-impl/src/test/resources/csv/autofill/gpm_import_missing_username.csv create mode 100644 autofill/autofill-impl/src/test/resources/csv/autofill/gpm_import_one_valid_basic_password.csv create mode 100644 autofill/autofill-impl/src/test/resources/csv/autofill/gpm_import_password_has_a_comma.csv create mode 100644 autofill/autofill-impl/src/test/resources/csv/autofill/gpm_import_password_has_special_characters.csv create mode 100644 autofill/autofill-impl/src/test/resources/csv/autofill/gpm_import_two_valid_basic_passwords.csv create mode 100644 autofill/autofill-impl/src/test/resources/csv/autofill/gpm_import_two_valid_identical_passwords.csv diff --git a/autofill/autofill-impl/build.gradle b/autofill/autofill-impl/build.gradle index d455ac29e520..d48819c3ccba 100644 --- a/autofill/autofill-impl/build.gradle +++ b/autofill/autofill-impl/build.gradle @@ -59,6 +59,8 @@ dependencies { implementation "androidx.datastore:datastore-preferences:_" + implementation "de.siegmar:fastcsv:_" + implementation Square.retrofit2.converter.moshi implementation "com.squareup.moshi:moshi-kotlin:_" implementation "com.squareup.moshi:moshi-adapters:_" diff --git a/autofill/autofill-impl/src/main/java/com/duckduckgo/autofill/impl/importing/CsvFileReader.kt b/autofill/autofill-impl/src/main/java/com/duckduckgo/autofill/impl/importing/CsvFileReader.kt new file mode 100644 index 000000000000..c996b80e392e --- /dev/null +++ b/autofill/autofill-impl/src/main/java/com/duckduckgo/autofill/impl/importing/CsvFileReader.kt @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2024 DuckDuckGo + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.duckduckgo.autofill.impl.importing + +import android.content.Context +import android.net.Uri +import com.duckduckgo.di.scopes.AppScope +import com.squareup.anvil.annotations.ContributesBinding +import java.io.BufferedReader +import java.io.InputStreamReader +import javax.inject.Inject + +interface CsvFileReader { + fun readCsvFile(fileUri: Uri): String +} + +@ContributesBinding(AppScope::class) +class ContentResolverFileReader @Inject constructor( + private val context: Context, +) : CsvFileReader { + + override fun readCsvFile(fileUri: Uri): String { + return context.contentResolver.openInputStream(fileUri)?.use { inputStream -> + BufferedReader(InputStreamReader(inputStream)).use { reader -> + reader.readText() + } + } ?: "" + } +} diff --git a/autofill/autofill-impl/src/main/java/com/duckduckgo/autofill/impl/importing/CsvPasswordImporter.kt b/autofill/autofill-impl/src/main/java/com/duckduckgo/autofill/impl/importing/CsvPasswordImporter.kt new file mode 100644 index 000000000000..115f0f233fda --- /dev/null +++ b/autofill/autofill-impl/src/main/java/com/duckduckgo/autofill/impl/importing/CsvPasswordImporter.kt @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2024 DuckDuckGo + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.duckduckgo.autofill.impl.importing + +import android.net.Uri +import com.duckduckgo.autofill.api.domain.app.LoginCredentials +import com.duckduckgo.autofill.impl.store.InternalAutofillStore +import com.duckduckgo.common.utils.DispatcherProvider +import com.duckduckgo.di.scopes.AppScope +import com.squareup.anvil.annotations.ContributesBinding +import javax.inject.Inject +import kotlinx.coroutines.withContext + +interface CsvPasswordImporter { + suspend fun importCsv(fileUri: Uri): List +} + +@ContributesBinding(AppScope::class) +class GooglePasswordManagerCsvPasswordImporter @Inject constructor( + private val parser: CsvPasswordParser, + private val fileReader: CsvFileReader, + private val credentialValidator: ImportedPasswordValidator, + private val existingPasswordMatchDetector: ExistingPasswordMatchDetector, + private val domainNameNormalizer: DomainNameNormalizer, + private val dispatchers: DispatcherProvider, + private val autofillStore: InternalAutofillStore, +) : CsvPasswordImporter { + + override suspend fun importCsv(fileUri: Uri): List { + return kotlin.runCatching { + withContext(dispatchers.io()) { + val csv = fileReader.readCsvFile(fileUri) + val allPasswords = parser.parseCsv(csv) + val dedupedPasswords = allPasswords.distinct() + val validPasswords = filterValidPasswords(dedupedPasswords) + val normalizedDomains = domainNameNormalizer.normalizeDomains(validPasswords) + savePasswords(normalizedDomains) + } + }.getOrElse { emptyList() } + } + + private suspend fun savePasswords(passwords: List): List { + val savedCredentialIds = mutableListOf() + passwords.forEach { + if (!existingPasswordMatchDetector.alreadyExists(it)) { + val insertedId = autofillStore.saveCredentials(it.domain!!, it)?.id + + if (insertedId != null) { + savedCredentialIds.add(insertedId) + } + } + } + return savedCredentialIds + } + + private fun filterValidPasswords(passwords: List): List { + return passwords.filter { it.isValid() } + } + + private fun LoginCredentials.isValid(): Boolean = credentialValidator.isValid(this) +} diff --git a/autofill/autofill-impl/src/main/java/com/duckduckgo/autofill/impl/importing/CsvPasswordParser.kt b/autofill/autofill-impl/src/main/java/com/duckduckgo/autofill/impl/importing/CsvPasswordParser.kt new file mode 100644 index 000000000000..f3ab7664da24 --- /dev/null +++ b/autofill/autofill-impl/src/main/java/com/duckduckgo/autofill/impl/importing/CsvPasswordParser.kt @@ -0,0 +1,138 @@ +/* + * Copyright (c) 2024 DuckDuckGo + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.duckduckgo.autofill.impl.importing + +import com.duckduckgo.autofill.api.domain.app.LoginCredentials +import com.duckduckgo.common.utils.DispatcherProvider +import com.duckduckgo.di.scopes.AppScope +import com.squareup.anvil.annotations.ContributesBinding +import de.siegmar.fastcsv.reader.CsvReader +import de.siegmar.fastcsv.reader.CsvRow +import javax.inject.Inject +import kotlinx.coroutines.withContext +import timber.log.Timber + +interface CsvPasswordParser { + suspend fun parseCsv(csv: String): List +} + +@ContributesBinding(AppScope::class) +class GooglePasswordManagerCsvPasswordParser @Inject constructor( + private val dispatchers: DispatcherProvider, +) : CsvPasswordParser { + +// private val csvFormat by lazy { +// CSVFormat.Builder.create(CSVFormat.DEFAULT).build() +// } + + override suspend fun parseCsv(csv: String): List { + return kotlin.runCatching { + convertToPasswordList(csv).also { + Timber.i("Parsed CSV. Found %d passwords", it.size) + } + }.onFailure { + Timber.e("Failed to parse CSV: %s", it.message) + }.getOrElse { + emptyList() + } + } + + /** + * Format of the Google Password Manager CSV is: + * name | url | username | password | note + */ + private suspend fun convertToPasswordList(csv: String): List { + return withContext(dispatchers.io()) { + val lines = mutableListOf() + val iter = CsvReader.builder().build(csv).spliterator() + iter.forEachRemaining { lines.add(it) } + Timber.d("Found %d lines in the CSV", lines.size) + + lines.firstOrNull().verifyExpectedFormat() + + // drop the header row + val passwordsLines = lines.drop(1) + + Timber.v("About to parse %d passwords", passwordsLines.size) + return@withContext passwordsLines + .mapNotNull { + if (it.fields.size != EXPECTED_HEADERS.size) { + Timber.w("CSV line does not match expected format. Expected ${EXPECTED_HEADERS.size} parts, found ${it.fields.size}") + return@mapNotNull null + } + + parseToCredential( + domainTitle = it.getField(0).blanksToNull(), + domain = it.getField(1).blanksToNull(), + username = it.getField(2).blanksToNull(), + password = it.getField(3).blanksToNull(), + notes = it.getField(4).blanksToNull(), + ) + } + } + } + + private fun parseToCredential( + domainTitle: String?, + domain: String?, + username: String?, + password: String?, + notes: String?, + ): LoginCredentials { + return LoginCredentials( + domainTitle = domainTitle, + domain = domain, + username = username, + password = password, + notes = notes, + ) + } + + private fun String?.blanksToNull(): String? { + return if (isNullOrBlank()) null else this + } + + private fun CsvRow?.verifyExpectedFormat() { + if (this == null) { + throw IllegalArgumentException("File not recognised as a CSV") + } + + val headers = this.fields + + if (headers.size != EXPECTED_HEADERS.size) { + throw IllegalArgumentException( + "CSV header size does not match expected amount. Expected: ${EXPECTED_HEADERS.size}, found: ${headers.size}", + ) + } + + headers.forEachIndexed { index, value -> + if (value != EXPECTED_HEADERS[index]) { + throw IllegalArgumentException("CSV header does not match expected format. Expected: ${EXPECTED_HEADERS[index]}, found: $value") + } + } + } + + companion object { + val EXPECTED_HEADERS = listOf( + "name", + "url", + "username", + "password", + "note", + ) + } +} diff --git a/autofill/autofill-impl/src/main/java/com/duckduckgo/autofill/impl/importing/DomainNameNormalizer.kt b/autofill/autofill-impl/src/main/java/com/duckduckgo/autofill/impl/importing/DomainNameNormalizer.kt new file mode 100644 index 000000000000..f90e89298299 --- /dev/null +++ b/autofill/autofill-impl/src/main/java/com/duckduckgo/autofill/impl/importing/DomainNameNormalizer.kt @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2024 DuckDuckGo + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.duckduckgo.autofill.impl.importing + +import com.duckduckgo.autofill.api.domain.app.LoginCredentials +import com.duckduckgo.autofill.impl.urlmatcher.AutofillUrlMatcher +import com.duckduckgo.di.scopes.AppScope +import com.squareup.anvil.annotations.ContributesBinding +import javax.inject.Inject + +interface DomainNameNormalizer { + suspend fun normalizeDomains(unnormalized: List): List +} + +@ContributesBinding(AppScope::class) +class DefaultDomainNameNormalizer @Inject constructor( + private val urlMatcher: AutofillUrlMatcher, +) : DomainNameNormalizer { + override suspend fun normalizeDomains(unnormalized: List): List { + return unnormalized.map { + val currentDomain = it.domain ?: return@map null + val normalizedDomain = urlMatcher.cleanRawUrl(currentDomain) + it.copy(domain = normalizedDomain) + }.filterNotNull() + } +} diff --git a/autofill/autofill-impl/src/main/java/com/duckduckgo/autofill/impl/importing/ExistingPasswordMatchDetector.kt b/autofill/autofill-impl/src/main/java/com/duckduckgo/autofill/impl/importing/ExistingPasswordMatchDetector.kt new file mode 100644 index 000000000000..e41892226212 --- /dev/null +++ b/autofill/autofill-impl/src/main/java/com/duckduckgo/autofill/impl/importing/ExistingPasswordMatchDetector.kt @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2024 DuckDuckGo + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.duckduckgo.autofill.impl.importing + +import com.duckduckgo.autofill.api.domain.app.LoginCredentials +import com.duckduckgo.autofill.impl.store.InternalAutofillStore +import com.duckduckgo.autofill.impl.urlmatcher.AutofillUrlMatcher +import com.duckduckgo.di.scopes.AppScope +import com.squareup.anvil.annotations.ContributesBinding +import javax.inject.Inject +import kotlinx.coroutines.flow.firstOrNull + +interface ExistingPasswordMatchDetector { + suspend fun alreadyExists(newCredentials: LoginCredentials): Boolean +} + +@ContributesBinding(AppScope::class) +class DefaultExistingPasswordMatchDetector @Inject constructor( + private val urlMatcher: AutofillUrlMatcher, + private val autofillStore: InternalAutofillStore, +) : ExistingPasswordMatchDetector { + + override suspend fun alreadyExists(newCredentials: LoginCredentials): Boolean { + val credentials = autofillStore.getAllCredentials().firstOrNull() ?: return false + + return credentials.any { existing -> + existing.domain == newCredentials.domain && + existing.username == newCredentials.username && + existing.password == newCredentials.password && + existing.domainTitle == newCredentials.domainTitle && + existing.notes == newCredentials.notes + } + } +} diff --git a/autofill/autofill-impl/src/main/java/com/duckduckgo/autofill/impl/importing/ImportedPasswordValidator.kt b/autofill/autofill-impl/src/main/java/com/duckduckgo/autofill/impl/importing/ImportedPasswordValidator.kt new file mode 100644 index 000000000000..bb6f6e56b2b5 --- /dev/null +++ b/autofill/autofill-impl/src/main/java/com/duckduckgo/autofill/impl/importing/ImportedPasswordValidator.kt @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2024 DuckDuckGo + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.duckduckgo.autofill.impl.importing + +import com.duckduckgo.autofill.api.domain.app.LoginCredentials +import com.duckduckgo.di.scopes.AppScope +import com.squareup.anvil.annotations.ContributesBinding +import javax.inject.Inject + +interface ImportedPasswordValidator { + fun isValid(loginCredentials: LoginCredentials): Boolean +} + +@ContributesBinding(AppScope::class) +class DefaultImportedPasswordValidator @Inject constructor() : ImportedPasswordValidator { + + override fun isValid(loginCredentials: LoginCredentials): Boolean { + return with(loginCredentials) { + domain.isNullOrBlank().not() && password.isNullOrBlank().not() + } + } +} diff --git a/autofill/autofill-impl/src/test/java/com/duckduckgo/autofill/impl/importing/DefaultDomainNameNormalizerTest.kt b/autofill/autofill-impl/src/test/java/com/duckduckgo/autofill/impl/importing/DefaultDomainNameNormalizerTest.kt new file mode 100644 index 000000000000..e9d59bb9d15f --- /dev/null +++ b/autofill/autofill-impl/src/test/java/com/duckduckgo/autofill/impl/importing/DefaultDomainNameNormalizerTest.kt @@ -0,0 +1,74 @@ +package com.duckduckgo.autofill.impl.importing + +import androidx.test.ext.junit.runners.AndroidJUnit4 +import com.duckduckgo.autofill.api.domain.app.LoginCredentials +import com.duckduckgo.autofill.impl.encoding.UrlUnicodeNormalizerImpl +import com.duckduckgo.autofill.impl.urlmatcher.AutofillDomainNameUrlMatcher +import kotlinx.coroutines.test.runTest +import org.junit.Assert.assertEquals +import org.junit.Assert.assertTrue +import org.junit.Test +import org.junit.runner.RunWith + +@RunWith(AndroidJUnit4::class) +class DefaultDomainNameNormalizerTest { + + private val testee = DefaultDomainNameNormalizer(AutofillDomainNameUrlMatcher(UrlUnicodeNormalizerImpl())) + + @Test + fun whenEmptyInputThenEmptyOutput() = runTest { + val input = emptyList() + val output = testee.normalizeDomains(input) + assertTrue(output.isEmpty()) + } + + @Test + fun whenInputDomainAlreadyNormalizedThenIncludedInOutput() = runTest { + val input = listOf(creds(domain = "example.com")) + val output = testee.normalizeDomains(input) + assertEquals(1, output.size) + assertEquals(creds(), output.first()) + } + + @Test + fun whenInputDomainNotAlreadyNormalizedThenIncludedInOutput() = runTest { + val input = listOf(creds(domain = "https://example.com/foo/bar")) + val output = testee.normalizeDomains(input) + assertEquals(1, output.size) + assertEquals(creds(), output.first()) + } + + @Test + fun whenInputDomainIsNullThenNotIncludedInOutput() = runTest { + val input = listOf(creds(domain = null)) + val output = testee.normalizeDomains(input) + assertTrue(output.isEmpty()) + } + + @Test + fun whenManyInputsWithOneNullDomainThenOnlyMissingDomainIsNotIncludedInOutput() = runTest { + val input = listOf( + creds(), + creds(domain = null), + creds(), + ) + val output = testee.normalizeDomains(input) + assertEquals(2, output.size) + } + + private fun creds( + domain: String? = "example.com", + username: String? = "username", + password: String? = "password", + notes: String? = "notes", + domainTitle: String? = "example title", + ): LoginCredentials { + return LoginCredentials( + domainTitle = domainTitle, + domain = domain, + username = username, + password = password, + notes = notes, + ) + } +} diff --git a/autofill/autofill-impl/src/test/java/com/duckduckgo/autofill/impl/importing/DefaultExistingPasswordMatchDetectorTest.kt b/autofill/autofill-impl/src/test/java/com/duckduckgo/autofill/impl/importing/DefaultExistingPasswordMatchDetectorTest.kt new file mode 100644 index 000000000000..30512fc2296d --- /dev/null +++ b/autofill/autofill-impl/src/test/java/com/duckduckgo/autofill/impl/importing/DefaultExistingPasswordMatchDetectorTest.kt @@ -0,0 +1,64 @@ +package com.duckduckgo.autofill.impl.importing + +import androidx.test.ext.junit.runners.AndroidJUnit4 +import com.duckduckgo.autofill.api.domain.app.LoginCredentials +import com.duckduckgo.autofill.impl.encoding.UrlUnicodeNormalizerImpl +import com.duckduckgo.autofill.impl.store.InternalAutofillStore +import com.duckduckgo.autofill.impl.urlmatcher.AutofillDomainNameUrlMatcher +import kotlinx.coroutines.flow.flowOf +import kotlinx.coroutines.test.runTest +import org.junit.Assert.assertFalse +import org.junit.Assert.assertTrue +import org.junit.Test +import org.junit.runner.RunWith +import org.mockito.kotlin.mock +import org.mockito.kotlin.whenever + +@RunWith(AndroidJUnit4::class) +class DefaultExistingPasswordMatchDetectorTest { + + private val autofillStore: InternalAutofillStore = mock() + + private val testee = DefaultExistingPasswordMatchDetector( + urlMatcher = AutofillDomainNameUrlMatcher(UrlUnicodeNormalizerImpl()), + autofillStore = autofillStore, + ) + + @Test + fun whenNoStoredPasswordsThenDoesNotAlreadyExist() = runTest { + configureNoStoredPasswords() + val creds = creds() + assertFalse(testee.alreadyExists(creds)) + } + + @Test + fun whenStoredPasswordsIsExactMatchThenAlreadyExists() = runTest { + configureStoredPasswords(listOf(creds())) + val creds = creds() + assertTrue(testee.alreadyExists(creds)) + } + + private suspend fun configureNoStoredPasswords() { + whenever(autofillStore.getAllCredentials()).thenReturn(flowOf(emptyList())) + } + + private suspend fun configureStoredPasswords(credentials: List) { + whenever(autofillStore.getAllCredentials()).thenReturn(flowOf(credentials)) + } + + private fun creds( + domain: String = "example.com", + username: String = "username", + password: String = "password", + notes: String = "notes", + domainTitle: String = "example title", + ): LoginCredentials { + return LoginCredentials( + domainTitle = domainTitle, + domain = domain, + username = username, + password = password, + notes = notes, + ) + } +} diff --git a/autofill/autofill-impl/src/test/java/com/duckduckgo/autofill/impl/importing/DefaultImportedPasswordValidatorTest.kt b/autofill/autofill-impl/src/test/java/com/duckduckgo/autofill/impl/importing/DefaultImportedPasswordValidatorTest.kt new file mode 100644 index 000000000000..42b8c53c5afd --- /dev/null +++ b/autofill/autofill-impl/src/test/java/com/duckduckgo/autofill/impl/importing/DefaultImportedPasswordValidatorTest.kt @@ -0,0 +1,22 @@ +package com.duckduckgo.autofill.impl.importing + +import com.duckduckgo.autofill.api.domain.app.LoginCredentials +import org.junit.Assert.* +import org.junit.Test + +class DefaultImportedPasswordValidatorTest { + private val testee = DefaultImportedPasswordValidator() + + @Test + fun whenThen() { + assertTrue(testee.isValid(validCreds())) + } + + private fun validCreds(): LoginCredentials { + return LoginCredentials( + username = "username", + password = "password", + domain = "example.com", + ) + } +} diff --git a/autofill/autofill-impl/src/test/java/com/duckduckgo/autofill/impl/importing/GooglePasswordManagerCsvPasswordParserTest.kt b/autofill/autofill-impl/src/test/java/com/duckduckgo/autofill/impl/importing/GooglePasswordManagerCsvPasswordParserTest.kt new file mode 100644 index 000000000000..a965cbab10c5 --- /dev/null +++ b/autofill/autofill-impl/src/test/java/com/duckduckgo/autofill/impl/importing/GooglePasswordManagerCsvPasswordParserTest.kt @@ -0,0 +1,168 @@ +package com.duckduckgo.autofill.impl.importing + +import com.duckduckgo.autofill.api.domain.app.LoginCredentials +import com.duckduckgo.common.test.CoroutineTestRule +import com.duckduckgo.common.test.FileUtilities +import kotlinx.coroutines.test.runTest +import org.junit.Assert.assertEquals +import org.junit.Rule +import org.junit.Test + +class GooglePasswordManagerCsvPasswordParserTest { + + @get:Rule + val coroutineTestRule: CoroutineTestRule = CoroutineTestRule() + + private val testee = GooglePasswordManagerCsvPasswordParser( + dispatchers = coroutineTestRule.testDispatcherProvider, + ) + + @Test + fun whenEmptyStringThenNoPasswords() = runTest { + val passwords = testee.parseCsv("") + assertEquals(0, passwords.size) + } + + @Test + fun whenHeaderRowOnlyThenNoPasswords() = runTest { + val csv = "gpm_import_header_row_only".readFile() + val passwords = testee.parseCsv(csv) + assertEquals(0, passwords.size) + } + + @Test + fun whenHeaderRowHasUnknownFieldThenNoPasswords() = runTest { + val csv = "gpm_import_header_row_unknown_field".readFile() + val passwords = testee.parseCsv(csv) + assertEquals(0, passwords.size) + } + + @Test + fun whenHeadersRowAndOnePasswordRowThen1Password() = runTest { + val csv = "gpm_import_one_valid_basic_password".readFile() + val passwords = testee.parseCsv(csv) + assertEquals(1, passwords.size) + passwords.first().verifyMatchesCreds1() + } + + @Test + fun whenHeadersRowAndTwoDifferentPasswordsThen2Passwords() = runTest { + val csv = "gpm_import_two_valid_basic_passwords".readFile() + val passwords = testee.parseCsv(csv) + assertEquals(2, passwords.size) + passwords[0].verifyMatchesCreds1() + passwords[1].verifyMatchesCreds2() + } + + @Test + fun whenTwoIdenticalPasswordsThen2Passwords() = runTest { + val csv = "gpm_import_two_valid_identical_passwords".readFile() + val passwords = testee.parseCsv(csv) + assertEquals(2, passwords.size) + passwords[0].verifyMatchesCreds1() + passwords[1].verifyMatchesCreds1() + } + + @Test + fun whenPasswordContainsACommaThenIsParsedSuccessfully() = runTest { + val csv = "gpm_import_password_has_a_comma".readFile() + val passwords = testee.parseCsv(csv) + + assertEquals(1, passwords.size) + val expected = LoginCredentials( + domain = "https://example.com", + domainTitle = "example.com", + username = "user", + password = "password, a comma it has", + notes = "notes", + ) + passwords.first().verifyMatches(expected) + } + + @Test + fun whenPasswordContainsOtherSpecialCharactersThenIsParsedSuccessfully() = runTest { + val csv = "gpm_import_password_has_special_characters".readFile() + val passwords = testee.parseCsv(csv) + + assertEquals(1, passwords.size) + val expected = creds1.copy(password = "p\$ssw0rd`\"[]'\\") + passwords.first().verifyMatches(expected) + } + + @Test + fun whenNotesIsEmptyThenIsParsedSuccessfully() = runTest { + val csv = "gpm_import_missing_notes".readFile() + val passwords = testee.parseCsv(csv) + + assertEquals(1, passwords.size) + passwords.first().verifyMatches(creds1.copy(notes = null)) + } + + @Test + fun whenUsernameIsEmptyThenIsParsedSuccessfully() = runTest { + val csv = "gpm_import_missing_username".readFile() + val passwords = testee.parseCsv(csv) + + assertEquals(1, passwords.size) + passwords.first().verifyMatches(creds1.copy(username = null)) + } + + @Test + fun whenPasswordIsEmptyThenIsParsedSuccessfully() = runTest { + val csv = "gpm_import_missing_password".readFile() + val passwords = testee.parseCsv(csv) + + assertEquals(1, passwords.size) + passwords.first().verifyMatches(creds1.copy(password = null)) + } + + @Test + fun whenTitleIsEmptyThenIsParsedSuccessfully() = runTest { + val csv = "gpm_import_missing_title".readFile() + val passwords = testee.parseCsv(csv) + + assertEquals(1, passwords.size) + passwords.first().verifyMatches(creds1.copy(domainTitle = null)) + } + + private fun LoginCredentials.verifyMatchesCreds1() = verifyMatches(creds1) + private fun LoginCredentials.verifyMatchesCreds2() = verifyMatches(creds2) + + private fun LoginCredentials.verifyMatches(expected: LoginCredentials) { + assertEquals(expected.domainTitle, domainTitle) + assertEquals(expected.domain, domain) + assertEquals(expected.username, username) + assertEquals(expected.password, password) + assertEquals(expected.notes, notes) + } + + private val creds1 = LoginCredentials( + domain = "https://example.com", + domainTitle = "example.com", + username = "user", + password = "password", + notes = "note", + ) + + private val creds2 = LoginCredentials( + domain = "https://example.net", + domainTitle = "example.net", + username = "user2", + password = "password2", + notes = "note2", + ) + + private fun String.readFile(): String { + val fileContents = kotlin.runCatching { + FileUtilities.loadText( + GooglePasswordManagerCsvPasswordParserTest::class.java.classLoader!!, + "csv/autofill/$this.csv", + ) + }.getOrNull() + + if (fileContents == null) { + throw IllegalArgumentException("Failed to load specified CSV file: $this") + } + return fileContents + } +} diff --git a/autofill/autofill-impl/src/test/resources/csv/autofill/gpm_import_header_row_only.csv b/autofill/autofill-impl/src/test/resources/csv/autofill/gpm_import_header_row_only.csv new file mode 100644 index 000000000000..56ea2b0b131e --- /dev/null +++ b/autofill/autofill-impl/src/test/resources/csv/autofill/gpm_import_header_row_only.csv @@ -0,0 +1 @@ +name,url,username,password,note \ No newline at end of file diff --git a/autofill/autofill-impl/src/test/resources/csv/autofill/gpm_import_header_row_unknown_field.csv b/autofill/autofill-impl/src/test/resources/csv/autofill/gpm_import_header_row_unknown_field.csv new file mode 100644 index 000000000000..1d3982e6b801 --- /dev/null +++ b/autofill/autofill-impl/src/test/resources/csv/autofill/gpm_import_header_row_unknown_field.csv @@ -0,0 +1 @@ +name,url,username,password,note,unknown \ No newline at end of file diff --git a/autofill/autofill-impl/src/test/resources/csv/autofill/gpm_import_missing_notes.csv b/autofill/autofill-impl/src/test/resources/csv/autofill/gpm_import_missing_notes.csv new file mode 100644 index 000000000000..d23607118f6b --- /dev/null +++ b/autofill/autofill-impl/src/test/resources/csv/autofill/gpm_import_missing_notes.csv @@ -0,0 +1,2 @@ +name,url,username,password,note +example.com,https://example.com,user,"password", \ No newline at end of file diff --git a/autofill/autofill-impl/src/test/resources/csv/autofill/gpm_import_missing_password.csv b/autofill/autofill-impl/src/test/resources/csv/autofill/gpm_import_missing_password.csv new file mode 100644 index 000000000000..11d0c635a6c6 --- /dev/null +++ b/autofill/autofill-impl/src/test/resources/csv/autofill/gpm_import_missing_password.csv @@ -0,0 +1,2 @@ +name,url,username,password,note +example.com,https://example.com,user,,note \ No newline at end of file diff --git a/autofill/autofill-impl/src/test/resources/csv/autofill/gpm_import_missing_title.csv b/autofill/autofill-impl/src/test/resources/csv/autofill/gpm_import_missing_title.csv new file mode 100644 index 000000000000..30707aac64fb --- /dev/null +++ b/autofill/autofill-impl/src/test/resources/csv/autofill/gpm_import_missing_title.csv @@ -0,0 +1,2 @@ +name,url,username,password,note +,https://example.com,user,password,note \ No newline at end of file diff --git a/autofill/autofill-impl/src/test/resources/csv/autofill/gpm_import_missing_username.csv b/autofill/autofill-impl/src/test/resources/csv/autofill/gpm_import_missing_username.csv new file mode 100644 index 000000000000..7a8782bb31f9 --- /dev/null +++ b/autofill/autofill-impl/src/test/resources/csv/autofill/gpm_import_missing_username.csv @@ -0,0 +1,2 @@ +name,url,username,password,note +example.com,https://example.com,,password,note \ No newline at end of file diff --git a/autofill/autofill-impl/src/test/resources/csv/autofill/gpm_import_one_valid_basic_password.csv b/autofill/autofill-impl/src/test/resources/csv/autofill/gpm_import_one_valid_basic_password.csv new file mode 100644 index 000000000000..a72dbddaa359 --- /dev/null +++ b/autofill/autofill-impl/src/test/resources/csv/autofill/gpm_import_one_valid_basic_password.csv @@ -0,0 +1,2 @@ +name,url,username,password,note +example.com,https://example.com,user,password,note \ No newline at end of file diff --git a/autofill/autofill-impl/src/test/resources/csv/autofill/gpm_import_password_has_a_comma.csv b/autofill/autofill-impl/src/test/resources/csv/autofill/gpm_import_password_has_a_comma.csv new file mode 100644 index 000000000000..a86c81f1b71a --- /dev/null +++ b/autofill/autofill-impl/src/test/resources/csv/autofill/gpm_import_password_has_a_comma.csv @@ -0,0 +1,2 @@ +name,url,username,password,note +example.com,https://example.com,user,"password, a comma it has",notes \ No newline at end of file diff --git a/autofill/autofill-impl/src/test/resources/csv/autofill/gpm_import_password_has_special_characters.csv b/autofill/autofill-impl/src/test/resources/csv/autofill/gpm_import_password_has_special_characters.csv new file mode 100644 index 000000000000..4e59eadb4927 --- /dev/null +++ b/autofill/autofill-impl/src/test/resources/csv/autofill/gpm_import_password_has_special_characters.csv @@ -0,0 +1,2 @@ +name,url,username,password,note +example.com,https://example.com,user,"p$ssw0rd`""[]'\",note \ No newline at end of file diff --git a/autofill/autofill-impl/src/test/resources/csv/autofill/gpm_import_two_valid_basic_passwords.csv b/autofill/autofill-impl/src/test/resources/csv/autofill/gpm_import_two_valid_basic_passwords.csv new file mode 100644 index 000000000000..b873993e01f3 --- /dev/null +++ b/autofill/autofill-impl/src/test/resources/csv/autofill/gpm_import_two_valid_basic_passwords.csv @@ -0,0 +1,3 @@ +name,url,username,password,note +example.com,https://example.com,user,password,note +example.net,https://example.net,user2,password2,note2 \ No newline at end of file diff --git a/autofill/autofill-impl/src/test/resources/csv/autofill/gpm_import_two_valid_identical_passwords.csv b/autofill/autofill-impl/src/test/resources/csv/autofill/gpm_import_two_valid_identical_passwords.csv new file mode 100644 index 000000000000..513747e4a57c --- /dev/null +++ b/autofill/autofill-impl/src/test/resources/csv/autofill/gpm_import_two_valid_identical_passwords.csv @@ -0,0 +1,3 @@ +name,url,username,password,note +example.com,https://example.com,user,password,note +example.com,https://example.com,user,password,note \ No newline at end of file diff --git a/versions.properties b/versions.properties index 23665f522820..daf3bec03918 100644 --- a/versions.properties +++ b/versions.properties @@ -138,3 +138,5 @@ version.com.journeyapps..zxing-android-embedded=4.3.0 version.com.google.zxing..core=3.5.3 version.android.tools.desugar_jdk_libs=2.1.2 + +version.de.siegmar..fastcsv=2.2.2 \ No newline at end of file From 9272935c625b27a30085107edb4eeec31767f04e Mon Sep 17 00:00:00 2001 From: Craig Russell Date: Wed, 29 May 2024 12:01:10 +0100 Subject: [PATCH 2/5] Add developer settings for importing passwords from Google Password Manager --- .../AutofillInternalSettingsActivity.kt | 47 +++++++++++++++++++ .../activity_autofill_internal_settings.xml | 21 +++++++++ .../src/main/res/values/donottranslate.xml | 4 ++ 3 files changed, 72 insertions(+) diff --git a/autofill/autofill-internal/src/main/java/com/duckduckgo/autofill/internal/AutofillInternalSettingsActivity.kt b/autofill/autofill-internal/src/main/java/com/duckduckgo/autofill/internal/AutofillInternalSettingsActivity.kt index 308f6531e0a5..bb3361967194 100644 --- a/autofill/autofill-internal/src/main/java/com/duckduckgo/autofill/internal/AutofillInternalSettingsActivity.kt +++ b/autofill/autofill-internal/src/main/java/com/duckduckgo/autofill/internal/AutofillInternalSettingsActivity.kt @@ -16,15 +16,19 @@ package com.duckduckgo.autofill.internal +import android.annotation.SuppressLint +import android.app.Activity import android.content.Context import android.content.Intent import android.os.Bundle import android.widget.Toast +import androidx.activity.result.contract.ActivityResultContracts import androidx.lifecycle.Lifecycle import androidx.lifecycle.Lifecycle.State.STARTED import androidx.lifecycle.lifecycleScope import androidx.lifecycle.repeatOnLifecycle import com.duckduckgo.anvil.annotations.InjectWith +import com.duckduckgo.app.tabs.BrowserNav import com.duckduckgo.autofill.api.AutofillFeature import com.duckduckgo.autofill.api.AutofillScreens.AutofillSettingsScreen import com.duckduckgo.autofill.api.AutofillSettingsLaunchSource.InternalDevSettings @@ -33,6 +37,8 @@ import com.duckduckgo.autofill.api.email.EmailManager import com.duckduckgo.autofill.impl.configuration.AutofillJavascriptEnvironmentConfiguration import com.duckduckgo.autofill.impl.email.incontext.store.EmailProtectionInContextDataStore import com.duckduckgo.autofill.impl.engagement.store.AutofillEngagementRepository +import com.duckduckgo.autofill.impl.importing.CsvPasswordImporter +import com.duckduckgo.autofill.impl.importing.CsvPasswordParser import com.duckduckgo.autofill.impl.reporting.AutofillSiteBreakageReportingDataStore import com.duckduckgo.autofill.impl.store.InternalAutofillStore import com.duckduckgo.autofill.impl.store.NeverSavedSiteRepository @@ -75,6 +81,12 @@ class AutofillInternalSettingsActivity : DuckDuckGoActivity() { @Inject lateinit var autofillStore: InternalAutofillStore + @Inject + lateinit var csvPasswordParser: CsvPasswordParser + + @Inject + lateinit var browserNav: BrowserNav + @Inject lateinit var autofillPrefsStore: AutofillPrefsStore @@ -101,6 +113,24 @@ class AutofillInternalSettingsActivity : DuckDuckGoActivity() { @Inject lateinit var reportBreakageDataStore: AutofillSiteBreakageReportingDataStore + @Inject + lateinit var csvPasswordImporter: CsvPasswordImporter + + private val importCsvLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result -> + if (result.resultCode == Activity.RESULT_OK) { + val data: Intent? = result.data + val fileUrl = data?.data + + logcat { "cdr onActivityResult for CSV file request. resultCode=${result.resultCode}. uri=$fileUrl" } + if (fileUrl != null) { + lifecycleScope.launch { + val insertedIds = csvPasswordImporter.importCsv(fileUrl) + Toast.makeText(this@AutofillInternalSettingsActivity, "Imported ${insertedIds.size} passwords", Toast.LENGTH_LONG).show() + } + } + } + } + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(binding.root) @@ -168,6 +198,7 @@ class AutofillInternalSettingsActivity : DuckDuckGoActivity() { configureEngagementEventHandlers() configureReportBreakagesHandlers() configureDeclineCounterHandlers() + configureImportPasswordsEventHandlers() } private fun configureReportBreakagesHandlers() { @@ -179,6 +210,22 @@ class AutofillInternalSettingsActivity : DuckDuckGoActivity() { } } + @SuppressLint("QueryPermissionsNeeded") + private fun configureImportPasswordsEventHandlers() { + binding.importPasswordsLaunchGooglePasswordWebpage.setClickListener { + val googlePasswordsUrl = "https://passwords.google.com/options?ep=1" + startActivity(browserNav.openInNewTab(this, googlePasswordsUrl)) + } + + binding.importPasswordsImportCsv.setClickListener { + val intent = Intent(Intent.ACTION_OPEN_DOCUMENT).apply { + addCategory(Intent.CATEGORY_OPENABLE) + type = "*/*" + } + importCsvLauncher.launch(intent) + } + } + private fun configureEngagementEventHandlers() { binding.engagementClearEngagementHistoryButton.setOnClickListener { lifecycleScope.launch(dispatchers.io()) { diff --git a/autofill/autofill-internal/src/main/res/layout/activity_autofill_internal_settings.xml b/autofill/autofill-internal/src/main/res/layout/activity_autofill_internal_settings.xml index 9018dec4ab59..1646042b7d70 100644 --- a/autofill/autofill-internal/src/main/res/layout/activity_autofill_internal_settings.xml +++ b/autofill/autofill-internal/src/main/res/layout/activity_autofill_internal_settings.xml @@ -85,6 +85,27 @@ android:layout_height="wrap_content" app:primaryText="@string/autofillDevSettingsViewSavedLogins" /> + + + + + + + + diff --git a/autofill/autofill-internal/src/main/res/values/donottranslate.xml b/autofill/autofill-internal/src/main/res/values/donottranslate.xml index 247348c0325d..fc2841729d65 100644 --- a/autofill/autofill-internal/src/main/res/values/donottranslate.xml +++ b/autofill/autofill-internal/src/main/res/values/donottranslate.xml @@ -37,6 +37,10 @@ Number of sites: %1$d Add sample site (fill.dev) + Import Passwords + Launch Google Passwords (normal tab) + Import CSV + Maximum number of days since install OK Cancel From aa0cee0e792eb8fbdee8e13ede91e205961dc954 Mon Sep 17 00:00:00 2001 From: Craig Russell Date: Wed, 18 Sep 2024 17:28:06 +0100 Subject: [PATCH 3/5] Add custom webview for importing via GPM --- .../com/duckduckgo/app/browser/BrowserTabFragment.kt | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/app/src/main/java/com/duckduckgo/app/browser/BrowserTabFragment.kt b/app/src/main/java/com/duckduckgo/app/browser/BrowserTabFragment.kt index 0695e0b53c7c..00c3fac5d897 100644 --- a/app/src/main/java/com/duckduckgo/app/browser/BrowserTabFragment.kt +++ b/app/src/main/java/com/duckduckgo/app/browser/BrowserTabFragment.kt @@ -2615,6 +2615,15 @@ class BrowserTabFragment : } } } + + val script = """ + window.addEventListener('DOMContentLoaded', (event) => { + var exportElement = document.querySelectorAll('c-wiz')[3]; + var listElement = exportElement.children[0]; + listElement.style.background = 'blue'; + }); + """.trimIndent(); + WebViewCompat.addDocumentStartJavaScript(it, script, setOf("*")) } private fun injectAutofillCredentials( From ed5c24b6d6aac6985aee08a412a4242bfdc70ed9 Mon Sep 17 00:00:00 2001 From: Deepankar Bajpeyi Date: Thu, 19 Sep 2024 12:29:26 +0200 Subject: [PATCH 4/5] wip: add some keyframe animation --- .../app/browser/BrowserTabFragment.kt | 38 +++++++++++++++---- 1 file changed, 30 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/com/duckduckgo/app/browser/BrowserTabFragment.kt b/app/src/main/java/com/duckduckgo/app/browser/BrowserTabFragment.kt index 00c3fac5d897..a7e843302f54 100644 --- a/app/src/main/java/com/duckduckgo/app/browser/BrowserTabFragment.kt +++ b/app/src/main/java/com/duckduckgo/app/browser/BrowserTabFragment.kt @@ -2599,6 +2599,7 @@ class BrowserTabFragment : WebViewFeature.isFeatureSupported(WebViewFeature.DOCUMENT_START_SCRIPT) } + @SuppressLint("RequiresFeature") private fun configureWebViewForAutofill(it: DuckDuckGoWebView) { browserAutofill.addJsInterface(it, autofillCallback, this, null, tabId) @@ -2616,14 +2617,35 @@ class BrowserTabFragment : } } - val script = """ - window.addEventListener('DOMContentLoaded', (event) => { - var exportElement = document.querySelectorAll('c-wiz')[3]; - var listElement = exportElement.children[0]; - listElement.style.background = 'blue'; - }); - """.trimIndent(); - WebViewCompat.addDocumentStartJavaScript(it, script, setOf("*")) + val script = """document.addEventListener('DOMContentLoaded', (event) => { + var xpath = "//div[text()='Export passwords']/ancestor::li"; // Should be configurable + var result = document.evaluate(xpath, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null); + var listElement = result.singleNodeValue; + if (listElement) { + listElement.scrollIntoView({ + behavior: 'smooth', + block: 'center', + inline: 'center' + }); // Scroll into view + var keyframes = [ + { backgroundColor: 'transparent' }, + { backgroundColor: 'lightblue' }, + { backgroundColor: 'transparent' }, + ]; + + // Define the animation options + var options = { + duration: 1000, // 1 seconds, should be configurable + iterations: 3 // Max 3 blinks, should be configurable + }; + + // Apply the animation to the element + listElement.animate(keyframes, options); + } + }); + """.trimIndent() + + WebViewCompat.addDocumentStartJavaScript(it, script, setOf("https://passwords.google.com")) } private fun injectAutofillCredentials( From 39fb1826d594209c31661c254677ecfd758e4838 Mon Sep 17 00:00:00 2001 From: Deepankar Bajpeyi Date: Fri, 20 Sep 2024 10:14:09 +0200 Subject: [PATCH 5/5] donotmerge: trying out loading c-s-s --- .../app/browser/BrowserTabFragment.kt | 67 +++-- .../content-scope-scripts-impl/build.gradle | 1 + .../impl/ContentScopeJSReader.kt | 1 + .../build/android/contentScope.js | 72 ++--- .../pages/duckplayer/assets/img/cog.svg | 3 - .../pages/duckplayer/assets/img/dax.svg | 15 - .../pages/duckplayer/assets/img/eyeball.svg | 8 - .../pages/duckplayer/assets/img/info-icon.svg | 12 - .../pages/duckplayer/assets/img/open.svg | 4 - .../pages/duckplayer/assets/img/player-bg.png | Bin 205117 -> 0 bytes .../pages/duckplayer/assets/player.css | 263 ------------------ .../pages/duckplayer/js/messages.example.js | 43 --- .../android/pages/duckplayer/js/messages.js | 150 ---------- package-lock.json | 6 +- package.json | 2 +- 15 files changed, 65 insertions(+), 582 deletions(-) delete mode 100644 node_modules/@duckduckgo/content-scope-scripts/build/android/pages/duckplayer/assets/img/cog.svg delete mode 100644 node_modules/@duckduckgo/content-scope-scripts/build/android/pages/duckplayer/assets/img/dax.svg delete mode 100644 node_modules/@duckduckgo/content-scope-scripts/build/android/pages/duckplayer/assets/img/eyeball.svg delete mode 100644 node_modules/@duckduckgo/content-scope-scripts/build/android/pages/duckplayer/assets/img/info-icon.svg delete mode 100644 node_modules/@duckduckgo/content-scope-scripts/build/android/pages/duckplayer/assets/img/open.svg delete mode 100644 node_modules/@duckduckgo/content-scope-scripts/build/android/pages/duckplayer/assets/img/player-bg.png delete mode 100644 node_modules/@duckduckgo/content-scope-scripts/build/android/pages/duckplayer/assets/player.css delete mode 100644 node_modules/@duckduckgo/content-scope-scripts/build/android/pages/duckplayer/js/messages.example.js delete mode 100644 node_modules/@duckduckgo/content-scope-scripts/build/android/pages/duckplayer/js/messages.js diff --git a/app/src/main/java/com/duckduckgo/app/browser/BrowserTabFragment.kt b/app/src/main/java/com/duckduckgo/app/browser/BrowserTabFragment.kt index a7e843302f54..6b0b988a5659 100644 --- a/app/src/main/java/com/duckduckgo/app/browser/BrowserTabFragment.kt +++ b/app/src/main/java/com/duckduckgo/app/browser/BrowserTabFragment.kt @@ -189,6 +189,7 @@ import com.duckduckgo.app.di.AppCoroutineScope import com.duckduckgo.app.fire.fireproofwebsite.data.FireproofWebsiteEntity import com.duckduckgo.app.fire.fireproofwebsite.data.website import com.duckduckgo.app.global.model.PrivacyShield.UNKNOWN +import com.duckduckgo.app.global.model.Site import com.duckduckgo.app.global.model.orderedTrackerBlockedEntities import com.duckduckgo.app.global.view.NonDismissibleBehavior import com.duckduckgo.app.global.view.TextChangedWatcher @@ -274,6 +275,12 @@ import com.duckduckgo.common.utils.extensions.websiteFromGeoLocationsApiOrigin import com.duckduckgo.common.utils.extractDomain import com.duckduckgo.common.utils.playstore.PlayStoreUtils import com.duckduckgo.common.utils.plugins.PluginPoint +import com.duckduckgo.contentscopescripts.impl.RealContentScopeScripts.Companion.contentScope +import com.duckduckgo.contentscopescripts.impl.RealContentScopeScripts.Companion.emptyJson +import com.duckduckgo.contentscopescripts.impl.RealContentScopeScripts.Companion.emptyJsonList +import com.duckduckgo.contentscopescripts.impl.RealContentScopeScripts.Companion.messagingParameters +import com.duckduckgo.contentscopescripts.impl.RealContentScopeScripts.Companion.userPreferences +import com.duckduckgo.contentscopescripts.impl.RealContentScopeScripts.Companion.userUnprotectedDomains import com.duckduckgo.di.scopes.FragmentScope import com.duckduckgo.downloads.api.DOWNLOAD_SNACKBAR_DELAY import com.duckduckgo.downloads.api.DOWNLOAD_SNACKBAR_LENGTH @@ -286,6 +293,7 @@ import com.duckduckgo.downloads.api.FileDownloader.PendingFileDownload import com.duckduckgo.duckplayer.api.DuckPlayer import com.duckduckgo.duckplayer.api.DuckPlayerSettingsNoParams import com.duckduckgo.experiments.api.loadingbarexperiment.LoadingBarExperimentManager +import com.duckduckgo.feature.toggles.api.FeatureExceptions.FeatureException import com.duckduckgo.js.messaging.api.JsCallbackData import com.duckduckgo.js.messaging.api.JsMessageCallback import com.duckduckgo.js.messaging.api.JsMessaging @@ -319,6 +327,9 @@ import com.google.android.material.bottomsheet.BottomSheetDialogFragment import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.google.android.material.snackbar.BaseTransientBottomBar import com.google.android.material.snackbar.Snackbar +import com.squareup.moshi.JsonAdapter +import com.squareup.moshi.Moshi.Builder +import com.squareup.moshi.Types import java.io.File import javax.inject.Inject import javax.inject.Named @@ -336,6 +347,8 @@ import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import org.json.JSONObject import timber.log.Timber +import java.io.BufferedReader +import java.util.concurrent.CopyOnWriteArrayList @InjectWith(FragmentScope::class) class BrowserTabFragment : @@ -2599,6 +2612,23 @@ class BrowserTabFragment : WebViewFeature.isFeatureSupported(WebViewFeature.DOCUMENT_START_SCRIPT) } + fun loadJs(resourceName: String): String = readResource(resourceName).use { it?.readText() }.orEmpty() + + private fun readResource(resourceName: String): BufferedReader? { + return javaClass.classLoader?.getResource(resourceName)?.openStream()?.bufferedReader() + } + + private fun getUnprotectedTemporaryJson(unprotectedTemporaryExceptions: List): String { + val type = Types.newParameterizedType(MutableList::class.java, FeatureException::class.java) + val moshi = Builder().build() + val jsonAdapter: JsonAdapter> = moshi.adapter(type) + return jsonAdapter.toJson(unprotectedTemporaryExceptions) + } + + private fun getContentScopeJson(config: String, unprotectedTemporaryExceptions: List): String = ( + "{\"features\":{$config},\"unprotectedTemporary\":${getUnprotectedTemporaryJson(unprotectedTemporaryExceptions)}}" + ) + @SuppressLint("RequiresFeature") private fun configureWebViewForAutofill(it: DuckDuckGoWebView) { browserAutofill.addJsInterface(it, autofillCallback, this, null, tabId) @@ -2617,34 +2647,17 @@ class BrowserTabFragment : } } - val script = """document.addEventListener('DOMContentLoaded', (event) => { - var xpath = "//div[text()='Export passwords']/ancestor::li"; // Should be configurable - var result = document.evaluate(xpath, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null); - var listElement = result.singleNodeValue; - if (listElement) { - listElement.scrollIntoView({ - behavior: 'smooth', - block: 'center', - inline: 'center' - }); // Scroll into view - var keyframes = [ - { backgroundColor: 'transparent' }, - { backgroundColor: 'lightblue' }, - { backgroundColor: 'transparent' }, - ]; - - // Define the animation options - var options = { - duration: 1000, // 1 seconds, should be configurable - iterations: 3 // Max 3 blinks, should be configurable - }; - - // Apply the animation to the element - listElement.animate(keyframes, options); - } - }); - """.trimIndent() + + val cachedContentScopeJson: String = getContentScopeJson("", emptyList()) + + val cachedUserUnprotectedDomainsJson: String = emptyJsonList + + val script = loadJs("contentScopeForFrames.js") + .replace(contentScope, cachedContentScopeJson) + .replace(userUnprotectedDomains, cachedUserUnprotectedDomainsJson) + .replace(userPreferences, "") + .replace(messagingParameters, "{}") WebViewCompat.addDocumentStartJavaScript(it, script, setOf("https://passwords.google.com")) } diff --git a/content-scope-scripts/content-scope-scripts-impl/build.gradle b/content-scope-scripts/content-scope-scripts-impl/build.gradle index 5680d5e57ec8..cfb4dd2bc2e1 100644 --- a/content-scope-scripts/content-scope-scripts-impl/build.gradle +++ b/content-scope-scripts/content-scope-scripts-impl/build.gradle @@ -33,6 +33,7 @@ dependencies { implementation project(':browser-api') implementation project(':feature-toggles-api') implementation project(':js-messaging-api') + implementation 'androidx.webkit:webkit:1.12.0' anvil project(':anvil-compiler') implementation project(':anvil-annotations') diff --git a/content-scope-scripts/content-scope-scripts-impl/src/main/java/com/duckduckgo/contentscopescripts/impl/ContentScopeJSReader.kt b/content-scope-scripts/content-scope-scripts-impl/src/main/java/com/duckduckgo/contentscopescripts/impl/ContentScopeJSReader.kt index f8b7875093f3..1089291651f6 100644 --- a/content-scope-scripts/content-scope-scripts-impl/src/main/java/com/duckduckgo/contentscopescripts/impl/ContentScopeJSReader.kt +++ b/content-scope-scripts/content-scope-scripts-impl/src/main/java/com/duckduckgo/contentscopescripts/impl/ContentScopeJSReader.kt @@ -35,6 +35,7 @@ class RealContentScopeJSReader @Inject constructor() : ContentScopeJSReader { if (!this::contentScopeJS.isInitialized) { contentScopeJS = loadJs("contentScope.js") } + return contentScopeJS } diff --git a/node_modules/@duckduckgo/content-scope-scripts/build/android/contentScope.js b/node_modules/@duckduckgo/content-scope-scripts/build/android/contentScope.js index 0a5096884b5f..4c9ba93692ed 100644 --- a/node_modules/@duckduckgo/content-scope-scripts/build/android/contentScope.js +++ b/node_modules/@duckduckgo/content-scope-scripts/build/android/contentScope.js @@ -756,7 +756,8 @@ 'windowsPermissionUsage', 'brokerProtection', 'performanceMetrics', - 'breakageReporting' + 'breakageReporting', + 'googlePasswordImport' ]); /** @typedef {baseFeatures[number]|otherFeatures[number]} FeatureName */ @@ -772,6 +773,9 @@ 'performanceMetrics', 'clickToLoad' ], + 'android-for-frames': [ + 'googlePasswordImport' + ], android: [ ...baseFeatures, 'webCompat', @@ -868,8 +872,8 @@ } function _typeof$1(obj) { "@babel/helpers - typeof"; return _typeof$1 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof$1(obj); } - /** - * Test deep equality of two JSON values, objects, or arrays + /** + * Test deep equality of two JSON values, objects, or arrays */ // TODO: write unit tests function isEqual(a, b) { // FIXME: this function will return false for two objects with the same keys @@ -877,24 +881,24 @@ return JSON.stringify(a) === JSON.stringify(b); } - /** - * Get all but the last items from an array + /** + * Get all but the last items from an array */ // TODO: write unit tests function initial(array) { return array.slice(0, array.length - 1); } - /** - * Get the last item from an array + /** + * Get the last item from an array */ // TODO: write unit tests function last(array) { return array[array.length - 1]; } - /** - * Test whether a value is an Object or an Array (and not a primitive JSON value) + /** + * Test whether a value is an Object or an Array (and not a primitive JSON value) */ // TODO: write unit tests function isObjectOrArray(value) { @@ -12192,9 +12196,7 @@ overlayInteracted: false, privatePlayerMode: { alwaysAsk: {} } }, - ui: { - overlayCopy: this.environment.getOverlayCopyOverride() || 'default' - } + ui: {} }) } return this.messaging.request(MSG_NAME_INITIAL_SETUP) @@ -12677,15 +12679,6 @@ } }; - /** - * Converts occurrences of {newline} in a string to
tags - * @param {string} text - */ - function nl2br (text) { - return html`${text.split('{newline}') - .map((line, i) => i === 0 ? line : html`
${line}`)}` - } - /** * @typedef {ReturnType} Template */ @@ -12700,29 +12693,15 @@ */ /** - * @type {Record} + * @type {Record<'default', OverlayCopyTranslation>} */ const overlayCopyVariants = { default: { - title: i18n.t('videoOverlayTitle'), - subtitle: html`${i18n.t('playText')} ${i18n.t('videoOverlaySubtitle')}`, - buttonOptOut: i18n.t('videoButtonOptOut'), - buttonOpen: i18n.t('videoButtonOpen'), - rememberLabel: i18n.t('rememberLabel') - }, - a1: { title: i18n.t('videoOverlayTitle2'), subtitle: i18n.t('videoOverlaySubtitle2'), buttonOptOut: i18n.t('videoButtonOptOut2'), buttonOpen: i18n.t('videoButtonOpen2'), rememberLabel: i18n.t('rememberLabel') - }, - b1: { - title: nl2br(i18n.t('videoOverlayTitle3')), - subtitle: i18n.t('videoOverlaySubtitle2'), - buttonOptOut: i18n.t('videoButtonOptOut2'), - buttonOpen: i18n.t('videoButtonOpen2'), - rememberLabel: i18n.t('rememberLabel') } }; @@ -13374,7 +13353,7 @@ * @returns {HTMLDivElement} */ createOverlay () { - const overlayCopy = overlayCopyVariants[this.ui?.overlayCopy || 'default']; + const overlayCopy = overlayCopyVariants.default; const overlayElement = document.createElement('div'); overlayElement.classList.add('ddg-video-player-overlay'); const svgIcon = trustedUnsafe(dax); @@ -14280,22 +14259,6 @@ return false } - /** - * @returns {import("../duck-player.js").UISettings['overlayCopy'] | null} - */ - getOverlayCopyOverride () { - if (this.isIntegrationMode()) { - const allowedOverlayCopyOverrides = ['default', 'a1', 'b1']; - - const url = new URLSearchParams(window.location.href); - const override = url.get('overlayCopy'); - if (override && allowedOverlayCopyOverrides.includes(override)) { - return /** @type {import("../duck-player.js").UISettings['overlayCopy']} */ (override) - } - } - return null - } - isIntegrationMode () { return this.debug === true && this.injectName === 'integration' } @@ -14378,7 +14341,6 @@ /** * @typedef UISettings - UI-specific settings - * @property {'default'|'a1'|'b1'} overlayCopy - Overlay copy experiment variant * @property {boolean} [allowFirstVideo] - should the first video be allowed to load/play? * @property {boolean} [playInDuckPlayer] - Forces next video to be played in Duck Player regardless of user setting */ @@ -14586,7 +14548,9 @@ function initCode () { // @ts-expect-error https://app.asana.com/0/1201614831475344/1203979574128023/f + const processedConfig = processConfig($CONTENT_SCOPE$, $USER_UNPROTECTED_DOMAINS$, $USER_PREFERENCES$); + console.log("DEEP processed config", processedConfig) if (isGloballyDisabled(processedConfig)) { return } diff --git a/node_modules/@duckduckgo/content-scope-scripts/build/android/pages/duckplayer/assets/img/cog.svg b/node_modules/@duckduckgo/content-scope-scripts/build/android/pages/duckplayer/assets/img/cog.svg deleted file mode 100644 index c62b1b8e15c1..000000000000 --- a/node_modules/@duckduckgo/content-scope-scripts/build/android/pages/duckplayer/assets/img/cog.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/node_modules/@duckduckgo/content-scope-scripts/build/android/pages/duckplayer/assets/img/dax.svg b/node_modules/@duckduckgo/content-scope-scripts/build/android/pages/duckplayer/assets/img/dax.svg deleted file mode 100644 index faa1f060ef7e..000000000000 --- a/node_modules/@duckduckgo/content-scope-scripts/build/android/pages/duckplayer/assets/img/dax.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/node_modules/@duckduckgo/content-scope-scripts/build/android/pages/duckplayer/assets/img/eyeball.svg b/node_modules/@duckduckgo/content-scope-scripts/build/android/pages/duckplayer/assets/img/eyeball.svg deleted file mode 100644 index da9bd6ee74d5..000000000000 --- a/node_modules/@duckduckgo/content-scope-scripts/build/android/pages/duckplayer/assets/img/eyeball.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/node_modules/@duckduckgo/content-scope-scripts/build/android/pages/duckplayer/assets/img/info-icon.svg b/node_modules/@duckduckgo/content-scope-scripts/build/android/pages/duckplayer/assets/img/info-icon.svg deleted file mode 100644 index dee6a9b256f0..000000000000 --- a/node_modules/@duckduckgo/content-scope-scripts/build/android/pages/duckplayer/assets/img/info-icon.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/node_modules/@duckduckgo/content-scope-scripts/build/android/pages/duckplayer/assets/img/open.svg b/node_modules/@duckduckgo/content-scope-scripts/build/android/pages/duckplayer/assets/img/open.svg deleted file mode 100644 index d5943118d7ae..000000000000 --- a/node_modules/@duckduckgo/content-scope-scripts/build/android/pages/duckplayer/assets/img/open.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/node_modules/@duckduckgo/content-scope-scripts/build/android/pages/duckplayer/assets/img/player-bg.png b/node_modules/@duckduckgo/content-scope-scripts/build/android/pages/duckplayer/assets/img/player-bg.png deleted file mode 100644 index 83a4b8c3394ef665fcdaa6a84a0688f7d79c417c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 205117 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�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 JPDHLkV1huxGX?+v diff --git a/node_modules/@duckduckgo/content-scope-scripts/build/android/pages/duckplayer/assets/player.css b/node_modules/@duckduckgo/content-scope-scripts/build/android/pages/duckplayer/assets/player.css deleted file mode 100644 index b516c95565c3..000000000000 --- a/node_modules/@duckduckgo/content-scope-scripts/build/android/pages/duckplayer/assets/player.css +++ /dev/null @@ -1,263 +0,0 @@ -:root { - --aspect-ratio: calc(9 / 16); - --toolbar-height: 56px; - - /* Set video to take up 80vw width */ - --video-width: 80vw; - - /* Calculate video height based on aspect ratio, but never exceed 80vh - * for the video height, for example when using short, wide screens. - */ - --video-height: min(calc(var(--video-width) * var(--aspect-ratio)), 80vh); -} - -@media screen and (max-width: 1080px) { - :root { - --video-width: 85vw; - } -} - -@media screen and (max-width: 740px) { - :root { - --video-width: 90vw; - } -} - -.bg { - background: url('img/player-bg.png'); -} - -.bg { - position: fixed; - top: 0; - bottom: 0; - left: 0; - right: 0; - background-size: cover; - opacity: 0.6; -} - -.bg::after { - content: ''; - position: absolute; - left: 0; - right: 0; - top: -50%; - height: 100%; - background: linear-gradient(0deg, rgba(0, 0, 0, 0), #101010 70%); - transition: all 1s ease-out; -} - -body.faded .bg::after { - top: 30%; -} - -body { - color: rgba(255, 255, 255, 0.85); - font-family: system-ui; - font-size: 13px; - line-height: 16px; - letter-spacing: -0.08px; - margin: 0; - background: #101010; - - /* Make it feel more like something native */ - -webkit-user-select: none; - cursor: default; -} - -.player-container { - overflow: hidden; - z-index: 10; - position: relative; - background: black; -} - -.player-container, -#player { - width: var(--video-width); - height: var(--video-height); - max-width: 3840px; -} - -.player-error { - text-align: center; - line-height: var(--video-height); - background: #2f2f2f; -} - -.content-hover { - --content-padding: 1px; - padding: var(--content-padding); - width: var(--video-width); - - /* Set margin left to be half of the remaining vw - video width */ - margin-left: calc(((100vw - var(--video-width)) / 2) - var(--content-padding)); - - /* Set margin-top to be half of the remaaining vh - video and toolbar height, but never less than 0px. */ - margin-top: max(0px, calc((100vh - (var(--video-height) + var(--toolbar-height))) / 2)); - position: absolute; -} - -.toolbar { - background: rgba(0, 0, 0, 0.3); - border-radius: 0px 0px 12px 12px; - transition: all 0.5s linear; - opacity: 1; - margin-top: -12px; - padding: 12px; - padding-top: 24px; - height: 32px; - display: flex; -} - -@media (prefers-reduced-motion) { - .toolbar { - transition: none; - } -} - -body.faded .toolbar { - opacity: 0; - margin-top: -80px; -} - -.logo { - font-style: normal; - font-weight: 600; - color: #ffffff; - display: flex; - align-items: center; -} - -.dax-icon { - margin-right: 5px; -} - -.info-icon-container { - position: relative; - display: inline-block; - margin-left: 4px; -} - -.info-icon { - margin-bottom: -4px; -} - -.info-icon:hover path { - fill: rgba(255, 255, 255, 0.8); -} - -.info-icon-tooltip { - position: absolute; - background: linear-gradient(0deg, rgba(48, 48, 48, 0.35), rgba(48, 48, 48, 0.35)), rgba(33, 33, 33, 0.55); - background-blend-mode: normal, luminosity; - box-shadow: inset 0px 0px 1px #ffffff; - filter: drop-shadow(0px 0px 1px #000000) drop-shadow(0px 0px 1px #000000) drop-shadow(0px 0px 1px #000000) - drop-shadow(0px 8px 16px rgba(0, 0, 0, 0.2)); - backdrop-filter: blur(76px); - border-radius: 10px; - width: 300px; - font-weight: normal; - padding: 12px; - left: -162px; - top: 32px; - display: none; -} - -.info-icon-tooltip::after { - content: ''; - width: 15px; - height: 15px; - border: 1px solid #5f5f5f; - display: block; - position: absolute; - top: -8px; - border-right: none; - border-bottom: none; - transform: rotate(45deg); - background: #1d1d1d; - left: 162px; -} - -.info-icon-tooltip.above { - top: -105px; - z-index: 50; -} - -.info-icon-tooltip.above::after { - top: 80px; - transform: rotate(225deg); -} - -.info-icon-tooltip.visible { - display: block; -} - -.options { - margin-left: auto; - display: flex; - align-items: center; -} - -.setting-container { - overflow: hidden; - white-space: nowrap; - margin-right: 0; - width: 299px; -} - -.setting-container.animatable { - transition: 0.3s linear all; -} - -@media (prefers-reduced-motion) { - .setting-container.animatable { - transition: none - } -} - -.setting-container.invisible { - width: 0px; -} - -@media screen and (max-width: 760px) { - .setting-container { - width: calc(var(--video-width) - 370px); - margin-right: 8px; - text-overflow: ellipsis; - } -} - -.settings-label { - cursor: pointer; - display: flex; - align-items: center; -} -.settings-checkbox { - margin-right: 4px; - width: 14px; - height: 14px; -} - -.options-button { - height: 16px; - padding: 8px; - background: rgba(255, 255, 255, 0.18); - border-radius: 8px; - float: left; - color: white; - text-decoration: none; - margin-left: 8px; - font-weight: bold; - text-align: center; -} - -.options-button:hover, -.options-button.active { - background: rgba(255, 255, 255, 0.28); -} - -.play-on-youtube img { - margin-bottom: -3px; -} diff --git a/node_modules/@duckduckgo/content-scope-scripts/build/android/pages/duckplayer/js/messages.example.js b/node_modules/@duckduckgo/content-scope-scripts/build/android/pages/duckplayer/js/messages.example.js deleted file mode 100644 index 1ce11d984b14..000000000000 --- a/node_modules/@duckduckgo/content-scope-scripts/build/android/pages/duckplayer/js/messages.example.js +++ /dev/null @@ -1,43 +0,0 @@ -/** - * The user wishes to enable DuckPlayer - * @satisfies {import("./messages").UserValues} - */ -const enabled = { - privatePlayerMode: { enabled: {} }, - overlayInteracted: false -} - -console.log(enabled) - -/** - * The user wishes to disable DuckPlayer - * @satisfies {import("./messages").UserValues} - */ -const disabled = { - privatePlayerMode: { disabled: {} }, - overlayInteracted: false -} - -console.log(disabled) - -/** - * The user wishes for overlays to always show - * @satisfies {import("./messages").UserValues} - */ -const alwaysAsk = { - privatePlayerMode: { alwaysAsk: {} }, - overlayInteracted: false -} - -console.log(alwaysAsk) - -/** - * The user wishes only for small overlays to show, not the blocking video ones - * @satisfies {import("./messages").UserValues} - */ -const alwaysAskRemembered = { - privatePlayerMode: { alwaysAsk: {} }, - overlayInteracted: true -} - -console.log(alwaysAskRemembered) diff --git a/node_modules/@duckduckgo/content-scope-scripts/build/android/pages/duckplayer/js/messages.js b/node_modules/@duckduckgo/content-scope-scripts/build/android/pages/duckplayer/js/messages.js deleted file mode 100644 index 60b35fcbd077..000000000000 --- a/node_modules/@duckduckgo/content-scope-scripts/build/android/pages/duckplayer/js/messages.js +++ /dev/null @@ -1,150 +0,0 @@ -/** - * @typedef {object} InitialSetup - The initial payload used to communicate render-blocking information - * @property {UserValues} userValues - The state of the user values - * @property {DuckPlayerPageSettings} settings - Additional settings - */ - -/** - * Notifications or requests that the Duck Player Page will - * send to the native side - */ -export class DuckPlayerPageMessages { - /** - * @param {import("@duckduckgo/messaging").Messaging} messaging - * @param {ImportMeta["injectName"]} injectName - * @internal - */ - constructor (messaging, injectName) { - /** - * @internal - */ - this.messaging = messaging - this.injectName = injectName - } - - /** - * This is sent when the user wants to set Duck Player as the default. - * - * @returns {Promise} params - */ - initialSetup () { - if (this.injectName === 'integration') { - return Promise.resolve({ - settings: { - pip: { - state: 'enabled' - } - }, - userValues: new UserValues({ - overlayInteracted: false, - privatePlayerMode: { alwaysAsk: {} } - }) - }) - } - return this.messaging.request('initialSetup') - } - - /** - * This is sent when the user wants to set Duck Player as the default. - * - * @param {UserValues} userValues - */ - setUserValues (userValues) { - return this.messaging.request('setUserValues', userValues) - } - - /** - * This is sent when the user wants to set Duck Player as the default. - * @return {Promise} - */ - getUserValues () { - if (this.injectName === 'integration') { - return Promise.resolve(new UserValues({ - overlayInteracted: false, - privatePlayerMode: { alwaysAsk: {} } - })) - } - return this.messaging.request('getUserValues') - } - - /** - * This is a subscription that we set up when the page loads. - * We use this value to show/hide the checkboxes. - * - * **Integration NOTE**: Native platforms should always send this at least once on initial page load. - * - * - See {@link Messaging.SubscriptionEvent} for details on each value of this message - * - See {@link UserValues} for details on the `params` - * - * ```json - * // the payload that we receive should look like this - * { - * "context": "specialPages", - * "featureName": "duckPlayerPage", - * "subscriptionName": "onUserValuesChanged", - * "params": { - * "overlayInteracted": false, - * "privatePlayerMode": { - * "enabled": {} - * } - * } - * } - * ``` - * - * @param {(value: UserValues) => void} cb - */ - onUserValuesChanged (cb) { - return this.messaging.subscribe('onUserValuesChanged', cb) - } -} - -/** - * This data structure is sent to enable user settings to be updated - * - * ```js - * [[include:packages/special-pages/pages/duckplayer/src/js/messages.example.js]]``` - */ -export class UserValues { - /** - * @param {object} params - * @param {{enabled: {}} | {disabled: {}} | {alwaysAsk: {}}} params.privatePlayerMode - * @param {boolean} params.overlayInteracted - */ - constructor (params) { - /** - * 'enabled' means 'always play in duck player' - * 'disabled' means 'never play in duck player' - * 'alwaysAsk' means 'show overlay prompts for using duck player' - * @type {{enabled: {}}|{disabled: {}}|{alwaysAsk: {}}} - */ - this.privatePlayerMode = params.privatePlayerMode - /** - * `true` when the user has asked to remember a previous choice - * - * `false` if they have never used the checkbox - * @type {boolean} - */ - this.overlayInteracted = params.overlayInteracted - } -} - -/** - * Sent in the initial page load request. Used to provide features toggles - * and other none-user-specific settings. - * - * Note: This will be improved soon with better remote config integration. - */ -export class DuckPlayerPageSettings { - /** - * @param {object} params - * @param {object} params.pip - * @param {"enabled" | "disabled"} params.pip.state - */ - constructor (params) { - /** - * 'enabled' means that the FE should show the PIP button - * 'disabled' means that the FE should never show it - */ - this.pip = params.pip - } -} diff --git a/package-lock.json b/package-lock.json index 087b03dac1b6..904636752804 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "dependencies": { "@duckduckgo/autoconsent": "^10.15.0", "@duckduckgo/autofill": "github:duckduckgo/duckduckgo-autofill#13.1.0", - "@duckduckgo/content-scope-scripts": "github:duckduckgo/content-scope-scripts#6.15.0", + "@duckduckgo/content-scope-scripts": "github:duckduckgo/content-scope-scripts#e1620e3f3ff8c52b46f66cc594300723d7400545", "@duckduckgo/privacy-dashboard": "github:duckduckgo/privacy-dashboard#5.1.0", "@duckduckgo/privacy-reference-tests": "github:duckduckgo/privacy-reference-tests#1724449523" }, @@ -72,8 +72,10 @@ "license": "Apache-2.0" }, "node_modules/@duckduckgo/content-scope-scripts": { - "resolved": "git+ssh://git@github.com/duckduckgo/content-scope-scripts.git#9f3717b3913a12956f1386fe7b657f68545fba83", + "resolved": "git+ssh://git@github.com/duckduckgo/content-scope-scripts.git#e1620e3f3ff8c52b46f66cc594300723d7400545", + "integrity": "sha512-HEUPDMIrNtKHnSbVMp5kXQhEOkxgcI8x4nv14m11kMI5m0zAYAq0Xq5DCEgY/ZWACBMGTp931GVfAgqy7HcHGg==", "hasInstallScript": true, + "license": "Apache-2.0", "workspaces": [ "packages/special-pages", "packages/messaging" diff --git a/package.json b/package.json index eb29823b1d37..b8cdb2a91134 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "dependencies": { "@duckduckgo/autoconsent": "^10.15.0", "@duckduckgo/autofill": "github:duckduckgo/duckduckgo-autofill#13.1.0", - "@duckduckgo/content-scope-scripts": "github:duckduckgo/content-scope-scripts#6.15.0", + "@duckduckgo/content-scope-scripts": "github:duckduckgo/content-scope-scripts#e1620e3f3ff8c52b46f66cc594300723d7400545", "@duckduckgo/privacy-dashboard": "github:duckduckgo/privacy-dashboard#5.1.0", "@duckduckgo/privacy-reference-tests": "github:duckduckgo/privacy-reference-tests#1724449523" }