| Index: testing/android/proguard_for_test.flags | 
| diff --git a/testing/android/proguard_for_test.flags b/testing/android/proguard_for_test.flags | 
| index a9c5e606dda519d88455d32c4681c2f64cbf7c27..f427ac695781a6861f562fd6aefc3ab8612a96df 100644 | 
| --- a/testing/android/proguard_for_test.flags | 
| +++ b/testing/android/proguard_for_test.flags | 
| @@ -16,3 +16,90 @@ | 
| -keepnames,allowobfuscation class com.google.android.apps.chrome.**,org.chromium.** { | 
| *; | 
| } | 
| + | 
| +# Keeping @VisibleForTesting and its annotated classes + methods | 
| +-keep @interface org.chromium.base.VisibleForTesting | 
| +-keep @org.chromium.base.VisibleForTesting class ** | 
| +-keepclasseswithmembers class * { | 
| +  @org.chromium.base.VisibleForTesting <methods>; | 
| +} | 
| + | 
| +# TODO(aurimas): figure out why we need to keep these classes. | 
| +-keep class org.chromium.base.test.** { | 
| +  *; | 
| +} | 
| + | 
| +# Everything below this is kept because they are referenced by the test APK. | 
| +-keep class android.support.v7.mediarouter.R* { | 
| +  *; | 
| +} | 
| + | 
| +-keep class android.support.v7.media.MediaRouteProvider** { | 
| +  *; | 
| +} | 
| + | 
| +-keep class android.support.v4.app.FragmentManager** { | 
| +  *; | 
| +} | 
| + | 
| +-keep class android.support.v4.app.DialogFragment** { | 
| +  *; | 
| +} | 
| + | 
| +-keep class android.support.v7.app.NotificationCompat** { | 
| +  *; | 
| +} | 
| + | 
| +-keep class android.support.v7.app.AlertDialog** { | 
| +  *; | 
| +} | 
| + | 
| +-keep class com.google.android.gms.cast.CastMediaControlIntent* { | 
| +  *; | 
| +} | 
| + | 
| +-keepnames class com.google.android.gms.gcm.** { | 
| +  *; | 
| +} | 
| + | 
| +-keepclassmembers class com.google.android.gms.gcm.TaskParams { | 
| +  public <init>(java.lang.String); | 
| +} | 
| + | 
| +-keepnames class jp.tomorrowkey.android.gifplayer.** { | 
| +  public *; | 
| +} | 
| + | 
| +# Used in tests. | 
| +-keep class android.support.v4.view.ViewCompat { | 
| +  public static int getLayoutDirection(android.view.View); | 
| +} | 
| + | 
| +# flingViewport is used by Android WebView and a Chrome test. | 
| +-keepclassmembers class org.chromium.content.browser.ContentViewCore { | 
| +  public void flingViewport(long, int, int); | 
| +} | 
| + | 
| +# Needed to compile ChromeTest.apk | 
| +-keep class android.support.customtabs.** { | 
| +  *; | 
| +} | 
| + | 
| +# TODO(yfriedman): Remove when crbug.com/488192 is fixed. | 
| +-dontwarn org.apache.http.conn.scheme.LayeredSocketFactory | 
| + | 
| +# Needed to run ChromeTest.apk | 
| +-keepnames class com.google.android.gms.common.GoogleApiAvailability { | 
| +  *; | 
| +} | 
| + | 
| +# Needed for chrome_sync_shell_test_apk. Note - these do no affect chrome_apk's | 
| +# size. | 
| +-keep class org.chromium.sync.protocol.* { *; } | 
| + | 
| +# These resources are referenced in tests, but not in the real application. | 
| +-keepclassmembers class org.chromium.chrome.R$id { | 
| +  int webapp_splash_space; | 
| +  int mr_chooser_list; | 
| +  int find_toolbar; | 
| +} | 
|  |