Bug 1967821 - Adding temporary logs for distribution ID checker r=android-reviewers,rebecatudor273
Differential Revision: https://phabricator.services.mozilla.com/D250498
This commit is contained in:
committed by
joberhauser@mozilla.com
parent
6dedde3821
commit
e3a4c6903b
@@ -8,6 +8,7 @@ import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.database.Cursor
|
||||
import androidx.core.net.toUri
|
||||
import mozilla.components.support.base.log.logger.Logger
|
||||
import org.json.JSONException
|
||||
import org.json.JSONObject
|
||||
|
||||
@@ -30,13 +31,152 @@ interface DistributionProviderChecker {
|
||||
fun queryProvider(): String?
|
||||
}
|
||||
|
||||
private val logger = Logger(DistributionProviderChecker::class.simpleName)
|
||||
|
||||
/**
|
||||
* Default implementation for DistributionProviderChecker
|
||||
*
|
||||
* @param context application context used to get the packageManager and contentResolver
|
||||
*/
|
||||
class DefaultDistributionProviderChecker(private val context: Context) : DistributionProviderChecker {
|
||||
|
||||
override fun queryProvider(): String? {
|
||||
logger.info("1 - Starting check...")
|
||||
val adjustProviderIntent = Intent(ADJUST_CONTENT_PROVIDER_INTENT_ACTION)
|
||||
val contentProviders = context.packageManager.queryIntentContentProviders(adjustProviderIntent, 0)
|
||||
val contentResolver = context.contentResolver
|
||||
|
||||
for (resolveInfo in contentProviders) {
|
||||
val authority = resolveInfo.providerInfo.authority
|
||||
val uri = "content://$authority/trackers".toUri()
|
||||
|
||||
if (!authority.contains("google")) {
|
||||
logger.info("1 - Authority found: $authority")
|
||||
}
|
||||
|
||||
val projection = arrayOf(PACKAGE_NAME_COLUMN, ENCRYPTED_DATA_COLUMN)
|
||||
|
||||
val contentResolverCursor = contentResolver.query(
|
||||
uri,
|
||||
projection,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
)
|
||||
|
||||
contentResolverCursor?.use { cursor ->
|
||||
cursor.getProvider()?.let { return it }
|
||||
}
|
||||
}
|
||||
|
||||
return null
|
||||
}
|
||||
|
||||
private fun Cursor.getProvider(): String? {
|
||||
logger.info("1 - Cursor available")
|
||||
while (moveToNext()) {
|
||||
logger.info("1 - Checking next cursor...")
|
||||
val packageNameColumnIndex = getColumnIndex(PACKAGE_NAME_COLUMN)
|
||||
val dataColumnIndex = getColumnIndex(ENCRYPTED_DATA_COLUMN)
|
||||
|
||||
// Check if columns exist
|
||||
if (packageNameColumnIndex == -1 || dataColumnIndex == -1) {
|
||||
logger.info("1 - missing columns, packageName: $packageNameColumnIndex; data: $dataColumnIndex")
|
||||
break
|
||||
}
|
||||
|
||||
logger.info("1 - packageName: ${getString(packageNameColumnIndex)}")
|
||||
|
||||
val packageName = getString(packageNameColumnIndex) ?: break
|
||||
|
||||
if (packageName == FIREFOX_PACKAGE_NAME ||
|
||||
packageName == FIREFOX_BETA_PACKAGE_NAME ||
|
||||
packageName == FIREFOX_NIGHTLY_PACKAGE_NAME
|
||||
) {
|
||||
logger.info("1 - data: ${getString(dataColumnIndex)}")
|
||||
val data = getString(dataColumnIndex) ?: break
|
||||
try {
|
||||
val jsonObject = JSONObject(data)
|
||||
val provider = jsonObject.getString("provider")
|
||||
logger.info("1 - provider found: $provider")
|
||||
return provider
|
||||
} catch (e: JSONException) {
|
||||
logger.info("1 - JSON expection: $e")
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
return null
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Second implementation for DistributionProviderChecker
|
||||
*
|
||||
* @param context application context used to get the packageManager and contentResolver
|
||||
*/
|
||||
class SecondaryDistributionProviderChecker(private val context: Context) : DistributionProviderChecker {
|
||||
override fun queryProvider(): String? {
|
||||
logger.info("2 - Starting check...")
|
||||
val adjustProviderIntent = Intent(ADJUST_CONTENT_PROVIDER_INTENT_ACTION)
|
||||
val contentProviders = context.packageManager.queryIntentContentProviders(adjustProviderIntent, 0)
|
||||
val contentResolver = context.contentResolver
|
||||
|
||||
for (resolveInfo in contentProviders) {
|
||||
val authority = resolveInfo.providerInfo.authority
|
||||
val uri = "content://$authority/trackers".toUri()
|
||||
|
||||
val projection = arrayOf(ENCRYPTED_DATA_COLUMN)
|
||||
|
||||
val contentResolverCursor = contentResolver.query(
|
||||
uri,
|
||||
projection,
|
||||
"package_name=?",
|
||||
arrayOf(context.packageName),
|
||||
null,
|
||||
)
|
||||
|
||||
contentResolverCursor?.use { cursor ->
|
||||
cursor.getProvider()?.let { return it }
|
||||
}
|
||||
}
|
||||
|
||||
return null
|
||||
}
|
||||
|
||||
private fun Cursor.getProvider(): String? {
|
||||
logger.info("2 - Cursor available")
|
||||
while (moveToNext()) {
|
||||
val dataColumnIndex = getColumnIndex(ENCRYPTED_DATA_COLUMN)
|
||||
|
||||
// Check if columns exist
|
||||
if (dataColumnIndex == -1) {
|
||||
break
|
||||
}
|
||||
|
||||
val data = getString(dataColumnIndex) ?: break
|
||||
try {
|
||||
val jsonObject = JSONObject(data)
|
||||
val provider = jsonObject.getString("provider")
|
||||
logger.info("2 - Provider found: $provider")
|
||||
return provider
|
||||
} catch (e: JSONException) {
|
||||
logger.info("2 - JSON expection: $e")
|
||||
break
|
||||
}
|
||||
}
|
||||
return null
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Third implementation for DistributionProviderChecker
|
||||
*
|
||||
* @param context application context used to get the packageManager and contentResolver
|
||||
*/
|
||||
class ThirdDistributionProviderChecker(private val context: Context) : DistributionProviderChecker {
|
||||
override fun queryProvider(): String? {
|
||||
logger.info("3 - Starting check...")
|
||||
val adjustProviderIntent = Intent(ADJUST_CONTENT_PROVIDER_INTENT_ACTION)
|
||||
val contentProviders = context.packageManager.queryIntentContentProviders(adjustProviderIntent, 0)
|
||||
val contentResolver = context.contentResolver
|
||||
@@ -64,29 +204,34 @@ class DefaultDistributionProviderChecker(private val context: Context) : Distrib
|
||||
}
|
||||
|
||||
private fun Cursor.getProvider(): String? {
|
||||
logger.info("3 - Cursor available")
|
||||
while (moveToNext()) {
|
||||
val packageNameColumnIndex = getColumnIndex(PACKAGE_NAME_COLUMN)
|
||||
val dataColumnIndex = getColumnIndex(ENCRYPTED_DATA_COLUMN)
|
||||
|
||||
// Check if columns exist
|
||||
if (packageNameColumnIndex == -1 || dataColumnIndex == -1) {
|
||||
if (dataColumnIndex == -1) {
|
||||
break
|
||||
}
|
||||
|
||||
val packageName = getString(packageNameColumnIndex) ?: break
|
||||
val data = getString(dataColumnIndex) ?: break
|
||||
try {
|
||||
val jsonObject = JSONObject(data)
|
||||
val provider = jsonObject.getString("provider")
|
||||
|
||||
if (packageName == FIREFOX_PACKAGE_NAME ||
|
||||
packageName == FIREFOX_BETA_PACKAGE_NAME ||
|
||||
packageName == FIREFOX_NIGHTLY_PACKAGE_NAME
|
||||
) {
|
||||
val data = getString(dataColumnIndex) ?: break
|
||||
try {
|
||||
val jsonObject = JSONObject(data)
|
||||
val provider = jsonObject.getString("provider")
|
||||
logger.info("3 - data: $data")
|
||||
|
||||
val packageNameColumnIndex = getColumnIndex(PACKAGE_NAME_COLUMN)
|
||||
|
||||
if (packageNameColumnIndex == -1) {
|
||||
logger.info("3 - no package name column")
|
||||
return provider
|
||||
} catch (e: JSONException) {
|
||||
break
|
||||
}
|
||||
logger.info("3 - package name: ${getString(packageNameColumnIndex)}")
|
||||
|
||||
return provider
|
||||
} catch (e: JSONException) {
|
||||
logger.info("3 - JSON exception: $e")
|
||||
break
|
||||
}
|
||||
}
|
||||
return null
|
||||
|
||||
@@ -10,6 +10,7 @@ import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.material.Button
|
||||
import androidx.compose.material.Text
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.getValue
|
||||
@@ -17,6 +18,7 @@ import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.platform.ComposeView
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.fragment.app.Fragment
|
||||
@@ -24,6 +26,9 @@ import mozilla.components.browser.state.search.RegionState
|
||||
import mozilla.components.lib.state.ext.observeAsState
|
||||
import org.mozilla.fenix.R
|
||||
import org.mozilla.fenix.components.components
|
||||
import org.mozilla.fenix.distributions.DefaultDistributionProviderChecker
|
||||
import org.mozilla.fenix.distributions.SecondaryDistributionProviderChecker
|
||||
import org.mozilla.fenix.distributions.ThirdDistributionProviderChecker
|
||||
import org.mozilla.fenix.ext.showToolbar
|
||||
import org.mozilla.fenix.theme.FirefoxTheme
|
||||
|
||||
@@ -139,5 +144,20 @@ private fun DebugInfo(
|
||||
color = FirefoxTheme.colors.textPrimary,
|
||||
modifier = Modifier.padding(4.dp),
|
||||
)
|
||||
|
||||
val context = LocalContext.current
|
||||
|
||||
Button(
|
||||
onClick = {
|
||||
SecondaryDistributionProviderChecker(context).queryProvider()
|
||||
ThirdDistributionProviderChecker(context).queryProvider()
|
||||
DefaultDistributionProviderChecker(context).queryProvider()
|
||||
},
|
||||
) {
|
||||
Text(
|
||||
text = stringResource(R.string.debug_info_run_query_provider_test),
|
||||
color = FirefoxTheme.colors.textOnColorPrimary,
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -127,6 +127,7 @@
|
||||
<string name="debug_info_region_current" translatable="false">Current region</string>
|
||||
<string name="debug_info_distribution_id" translatable="false">Distribution ID</string>
|
||||
<string name="debug_info_play_referrer" translatable="false">Play install referrer</string>
|
||||
<string name="debug_info_run_query_provider_test" translatable="false">Run query provider test</string>
|
||||
|
||||
<!-- Profiler settings -->
|
||||
<string name="preferences_start_profiler">Start Profiler</string>
|
||||
|
||||
Reference in New Issue
Block a user