blob: 4bd6ffa06c3eeebb1f3bc3178e29851600cf23c2 [file] [log] [blame]
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.components.strictmode;
import static org.chromium.components.strictmode.Violation.DETECT_DISK_IO;
import static org.chromium.components.strictmode.Violation.DETECT_DISK_READ;
import static org.chromium.components.strictmode.Violation.DETECT_DISK_WRITE;
import static org.chromium.components.strictmode.Violation.DETECT_RESOURCE_MISMATCH;
import android.os.Build;
import java.util.Locale;
/**
* Collection of known unfixable StrictMode violations. This list should stay in sync with the
* list for other apps (http://go/chrome-known-violations-upstream). Add Chrome-specific exemptions
* to {@link ChromeStrictMode}.
*/
public final class KnownViolations {
public static ThreadStrictModeInterceptor.Builder addExemptions(
ThreadStrictModeInterceptor.Builder builder) {
applyManufacturer(builder);
applyVendor(builder);
applyPlatform(builder);
return builder;
}
private static void applyManufacturer(ThreadStrictModeInterceptor.Builder exemptions) {
String manufacturer = Build.MANUFACTURER.toLowerCase(Locale.US);
String model = Build.MODEL.toLowerCase(Locale.US);
switch (manufacturer) {
case "samsung":
exemptions.ignoreExternalMethod(DETECT_DISK_READ | DETECT_DISK_WRITE,
"android.util.GeneralUtil#isSupportedGloveModeInternal");
exemptions.ignoreExternalMethod(
DETECT_DISK_READ, "android.graphics.Typeface#SetAppTypeFace");
exemptions.ignoreExternalMethod(
DETECT_DISK_READ, "android.graphics.Typeface#setAppTypeFace");
exemptions.ignoreExternalMethod(DETECT_DISK_READ,
"android.app.ApplicationPackageManager#queryIntentActivities");
exemptions.ignoreExternalMethod(
DETECT_DISK_READ, "android.app.ActivityThread#parseCSCAppResource");
exemptions.ignoreExternalMethod(
DETECT_DISK_READ, "android.app.ActivityThread#performLaunchActivity");
exemptions.ignoreExternalMethod(DETECT_DISK_READ,
"com.samsung.android.knox.custom.ProKioskManager#getProKioskState");
if (model.equals("sm-g9350")) {
exemptions.ignoreExternalMethod(
DETECT_DISK_WRITE, "android.content.res.Resources#loadDrawable");
}
if (model.equals("sm-j700f") && Build.VERSION.SDK_INT == 23) {
exemptions.ignoreExternalMethod(
DETECT_DISK_IO, "android.content.res.Resources#loadDrawable");
exemptions.ignoreExternalMethod(
DETECT_DISK_WRITE, "android.app.ActivityThread#performLaunchActivity");
}
break;
case "oneplus":
exemptions.ignoreExternalMethod(DETECT_DISK_READ | DETECT_DISK_WRITE,
"com.android.server.am.ActivityManagerService#checkProcessExist");
break;
case "vivo":
exemptions.ignoreExternalMethod(
DETECT_DISK_READ, "android.content.res.VivoResources#loadThemeValues");
break;
case "xiaomi":
exemptions.ignoreExternalMethod(
DETECT_DISK_READ, "com.android.internal.policy.PhoneWindow#getDecorView");
exemptions.ignoreExternalMethod(
DETECT_DISK_WRITE, "miui.content.res.ThemeResourcesSystem#checkUpdate");
exemptions.ignoreExternalMethod(
DETECT_DISK_READ, "android.util.BoostFramework#<init>");
break;
default:
// fall through
}
}
private static void applyVendor(ThreadStrictModeInterceptor.Builder exemptions) {
exemptions.ignoreExternalMethod(DETECT_DISK_READ, "com.qualcomm.qti.Performance#<clinit>");
}
private static void applyPlatform(ThreadStrictModeInterceptor.Builder exemptions) {
exemptions.ignoreExternalMethod(
DETECT_DISK_READ, "com.android.messageformat.MessageFormat#formatNamedArgs");
exemptions.ignoreExternalMethod(
DETECT_RESOURCE_MISMATCH, "com.android.internal.widget.SwipeDismissLayout#init");
exemptions.ignoreExternalMethod(DETECT_DISK_IO, "java.lang.ThreadGroup#uncaughtException");
exemptions.ignoreExternalMethod(DETECT_DISK_IO, "android.widget.VideoView#openVideo");
exemptions.ignoreExternalMethod(DETECT_DISK_IO,
"com.android.server.inputmethod.InputMethodManagerService#startInputOrWindowGainedFocus");
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
exemptions.ignoreExternalMethod(DETECT_DISK_WRITE,
"com.android.server.clipboard.HostClipboardMonitor#setHostClipboard");
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
exemptions.ignoreExternalMethod(
DETECT_DISK_WRITE, "android.content.ClipboardManager#setPrimaryClip");
}
}
private KnownViolations() {}
}