# Don't rename anything, it makes stack traces unintelligible. We only allow the
# obfuscation pass to run so that we can discard attributes like local variable
# tables. However, we don't want to lose out on optimizations, so although they
# can occasionally make the stack trace a bit stranger with inlining, it won't
# make a big difference for the users seeing the stacktraces. We can always use
# build/android/stacktrace/java_deobfuscate.py to fix the stacktrace up for us.
-keepnames,allowoptimization class *** { *; }

-keepclassmembers class org.chromium.android_webview.AwPdfExporter {
    android.view.ViewGroup mContainerView;
}

# 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 class com.android.webview.chromium.WebViewChromiumFactoryProviderFor* {
    public *;
}

-keep class com.android.webview.chromium.WebViewDatabaseAdapter {
  public *;
}

# This is the main entry point for APIs. It is kept to make developing with
# unreleased Android easier.
-keep class com.android.webview.chromium.WebViewChromium {
  public *;
}

# Linker dynamically casts to $TestRunner when running tests. We don't run these
# tests in WebView.
-dontnote org.chromium.base.library_loader.Linker$TestRunner

# Don't note about the API 21 compatibility code which references various
# hidden APIs via reflection.
-dontnote com.android.webview.chromium.WebViewDelegateFactory$Api21CompatibilityDelegate

# DefaultAndroidKeyStore uses reflection to access internal OpenSSL state.
-dontnote org.chromium.net.DefaultAndroidKeyStore

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

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

# Silence warnings about reflection used to check for onShow/HideCustomView.
# This class is not really kept since it's in a library jar.
-keep class android.webkit.WebChromeClient {
  void onShowCustomView(...);
  void onHideCustomView();
}

-keep class org.chromium.android_webview.AwBrowserProcess {
    java.nio.channels.FileLock sExclusiveFileLock;
}

# Accessed via reflection but not present in all builds
-keep class com.android.webview.chromium.PlatformServiceBridgeGoogle {
  void setMetricsSettingListener(...);
  PlatformServiceBridgeGoogle(...);
}
-dontnote com.android.webview.chromium.PlatformServiceBridgeGoogle
-keep class com.android.webview.chromium.AwSafeBrowsingApiHandler {
  AwSafeBrowsingApiHandler(...);
}
-dontnote com.android.webview.chromium.AwSafeBrowsingApiHandler

# We strip some unused resources when preprocessing the GMS client libs.
-dontwarn com.google.android.gms.R**
