# Most of the flags in this file are duplicated to refer to both the pre- and
# post-jarjar remapping versions of the class names. This enables the same
# config file to be used whether jarjar is enabled or not.


# Keep the factory and its public members; it's the main entry point used by the
# framework.
-keep class com.android.webview.chromium.WebViewChromiumFactoryProvider {
    public *;
}

# Keep the native methods bound to plat_support.
-keepclasseswithmembers class com.android.webview.chromium.** {
  native <methods>;
}

# Keep everything related to the org.chromium JNI interface.
-keepclasseswithmembers class com.android.org.chromium.** {
  @**.AccessedByNative <fields>;
}
-keepclasseswithmembers class com.android.org.chromium.** {
  @**.CalledByNative <methods>;
}
-keepclasseswithmembers class com.android.org.chromium.** {
  @**.CalledByNativeUnchecked <methods>;
}
-keepclasseswithmembers class com.android.org.chromium.** {
  native <methods>;
}

# Keep methods which get bound to JS interfaces via reflection.
-keepclasseswithmembers class com.android.org.chromium.** {
  @**.JavascriptInterface <methods>;
}

# Silence notes caused by use of @VisibleForTesting inside guava. This doesn't
# happen when using jarjar because @VisibleForTesting gets renamed as well.
-dontnote com.google.common.annotations.VisibleForTesting

# MediaPlayerBridge uses reflection to access internal metadata.
-dontnote com.android.org.chromium.media.MediaPlayerBridge

# AndroidKeyStore uses reflection to access internal OpenSSL state.
-dontnote com.android.org.chromium.net.AndroidKeyStore

# TraceEvent uses reflection to access internal trace info.
-dontnote com.android.org.chromium.content.common.TraceEvent

# ProxyChangeListener$ProxyReceiver uses reflection to access internal
# android.net.ProxyProperties.
-dontnote com.android.org.chromium.net.ProxyChangeListener$ProxyReceiver

# com.android.org.chromium.content.app.Linker dynamically casts to $TestRunner
# when running tests. We don't run these tests in WebView.
-dontnote com.android.org.chromium.content.app.Linker$TestRunner

# We need to keep these explicitly as they are parameters to methods which
# are entry points via @calledByNative.
-keep class com.android.org.chromium.ui.autofill.AutofillSuggestion
-keep class com.android.org.chromium.content.browser.ContentVideoViewClient
-keep class com.android.org.chromium.ui.ColorSuggestion
-keep class com.android.org.chromium.content.browser.input.DateTimeSuggestion
-keep class com.android.org.chromium.content.browser.ContentViewCore$JavaScriptCallback
-keep class com.android.org.chromium.content_public.browser.NavigationController

# Keep these classes as they are parameters to methods that are native entry points.
-keep class com.android.org.chromium.android_webview.AwBrowserContext
-keep class com.android.org.chromium.base.library_loader.Linker$LibInfo

# Keep this class and members as accessed via reflection
-keep class com.android.webview.chromium.Drp {
  public *;
}

# Keep finalizer stuff from google-common used via reflection
-keepclassmembers class com.android.org.chromium.com.google.common.** {
  *** finalizeReferent();
}
-keepclassmembers class com.android.org.chromium.com.google.common.** {
  *** startFinalizer(java.lang.Class,java.lang.Object);
}

# We need to explicitly keep classes and constructors referenced only in
# layout resources.
-keep class com.android.org.chromium.ui.ColorPickerAdvanced {
  <init>(...);
}

-keep class com.android.org.chromium.ui.ColorPickerSimple {
  <init>(...);
}

-keep class com.android.org.chromium.ui.ColorPickerMoreButton {
  <init>(...);
}
