| Index: chrome/android/javatests/src/org/chromium/chrome/browser/instantapps/InstantAppsHandlerTest.java
 | 
| diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/instantapps/InstantAppsHandlerTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/instantapps/InstantAppsHandlerTest.java
 | 
| index 1e0d71425f73ec4f265733011765c994116671c5..756b9d7338b95e4c73a04555aa6102c81552a5f0 100644
 | 
| --- a/chrome/android/javatests/src/org/chromium/chrome/browser/instantapps/InstantAppsHandlerTest.java
 | 
| +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/instantapps/InstantAppsHandlerTest.java
 | 
| @@ -12,38 +12,20 @@
 | 
|  import android.net.Uri;
 | 
|  import android.nfc.NfcAdapter;
 | 
|  import android.provider.Browser;
 | 
| -import android.support.test.InstrumentationRegistry;
 | 
|  import android.test.suitebuilder.annotation.SmallTest;
 | 
| -
 | 
| -import org.junit.After;
 | 
| -import org.junit.Assert;
 | 
| -import org.junit.Before;
 | 
| -import org.junit.Rule;
 | 
| -import org.junit.Test;
 | 
| -import org.junit.runner.RunWith;
 | 
|  
 | 
|  import org.chromium.base.ContextUtils;
 | 
|  import org.chromium.base.ThreadUtils;
 | 
| -import org.chromium.base.test.util.CommandLineFlags;
 | 
|  import org.chromium.chrome.browser.ChromeActivity;
 | 
| -import org.chromium.chrome.browser.ChromeSwitches;
 | 
|  import org.chromium.chrome.browser.IntentHandler;
 | 
|  import org.chromium.chrome.browser.ShortcutHelper;
 | 
| -import org.chromium.chrome.test.ChromeActivityTestRule;
 | 
| -import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
 | 
| +import org.chromium.chrome.test.ChromeActivityTestCaseBase;
 | 
|  import org.chromium.content_public.browser.WebContents;
 | 
|  
 | 
|  /**
 | 
|   * Unit tests for {@link InstantAppsHandler}.
 | 
|   */
 | 
| -@RunWith(ChromeJUnit4ClassRunner.class)
 | 
| -@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE,
 | 
| -        ChromeActivityTestRule.DISABLE_NETWORK_PREDICTION_FLAG})
 | 
| -public class InstantAppsHandlerTest {
 | 
| -    @Rule
 | 
| -    public ChromeActivityTestRule<ChromeActivity> mActivityTestRule =
 | 
| -            new ChromeActivityTestRule<>(ChromeActivity.class);
 | 
| -
 | 
| +public class InstantAppsHandlerTest extends ChromeActivityTestCaseBase<ChromeActivity> {
 | 
|      private TestInstantAppsHandler mHandler;
 | 
|      private Context mContext;
 | 
|  
 | 
| @@ -51,15 +33,19 @@
 | 
|      private static final String INSTANT_APP_URL = "http://sampleapp.com/boo";
 | 
|      private static final Uri REFERRER_URI = Uri.parse("http://www.wikipedia.org/");
 | 
|  
 | 
| +    public InstantAppsHandlerTest() {
 | 
| +        super(ChromeActivity.class);
 | 
| +    }
 | 
| +
 | 
|      private Intent createViewIntent() {
 | 
|          return new Intent(Intent.ACTION_VIEW, URI);
 | 
|      }
 | 
|  
 | 
| -    @Before
 | 
| +    @Override
 | 
|      public void setUp() throws Exception {
 | 
| -        mActivityTestRule.startMainActivityOnBlankPage();
 | 
| -
 | 
| -        mContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
 | 
| +        super.setUp();
 | 
| +
 | 
| +        mContext = getInstrumentation().getTargetContext();
 | 
|          mHandler = new TestInstantAppsHandler();
 | 
|  
 | 
|          SharedPreferences prefs = ContextUtils.getAppSharedPreferences();
 | 
| @@ -69,60 +55,56 @@
 | 
|          editor.apply();
 | 
|      }
 | 
|  
 | 
| -    @After
 | 
| +    @Override
 | 
|      public void tearDown() throws Exception {
 | 
|          ContextUtils.getAppSharedPreferences().edit().clear().apply();
 | 
| -    }
 | 
| -
 | 
| -    @Test
 | 
| +        super.tearDown();
 | 
| +    }
 | 
| +
 | 
|      @SmallTest
 | 
|      public void testInstantAppsDisabled_incognito() {
 | 
|          Intent i = createViewIntent();
 | 
|          i.putExtra(IntentHandler.EXTRA_OPEN_NEW_INCOGNITO_TAB, true);
 | 
|  
 | 
| -        Assert.assertFalse(mHandler.handleIncomingIntent(mContext, i, false, true));
 | 
| -    }
 | 
| -
 | 
| -    @Test
 | 
| +        assertFalse(mHandler.handleIncomingIntent(mContext, i, false, true));
 | 
| +    }
 | 
| +
 | 
| +
 | 
|      @SmallTest
 | 
|      public void testInstantAppsDisabled_doNotLaunch() {
 | 
|          Intent i = createViewIntent();
 | 
|          i.putExtra("com.google.android.gms.instantapps.DO_NOT_LAUNCH_INSTANT_APP", true);
 | 
|  
 | 
| -        Assert.assertFalse(mHandler.handleIncomingIntent(mContext, i, false, true));
 | 
| -    }
 | 
| -
 | 
| -    @Test
 | 
| +        assertFalse(mHandler.handleIncomingIntent(mContext, i, false, true));
 | 
| +    }
 | 
| +
 | 
|      @SmallTest
 | 
|      public void testInstantAppsDisabled_mainIntent() {
 | 
|          Intent i = new Intent(Intent.ACTION_MAIN);
 | 
| -        Assert.assertFalse(mHandler.handleIncomingIntent(mContext, i, false, true));
 | 
| -    }
 | 
| -
 | 
| -    @Test
 | 
| +        assertFalse(mHandler.handleIncomingIntent(mContext, i, false, true));
 | 
| +    }
 | 
| +
 | 
|      @SmallTest
 | 
|      public void testInstantAppsDisabled_intentOriginatingFromChrome() {
 | 
|          Intent i = createViewIntent();
 | 
|          i.putExtra(Browser.EXTRA_APPLICATION_ID, mContext.getPackageName());
 | 
|  
 | 
| -        Assert.assertFalse(mHandler.handleIncomingIntent(mContext, i, false, true));
 | 
| +        assertFalse(mHandler.handleIncomingIntent(mContext, i, false, true));
 | 
|  
 | 
|          Intent signedIntent = createViewIntent();
 | 
|          signedIntent.setPackage(mContext.getPackageName());
 | 
|          IntentHandler.addTrustedIntentExtras(signedIntent);
 | 
|  
 | 
| -        Assert.assertFalse(mHandler.handleIncomingIntent(mContext, signedIntent, false, true));
 | 
| -    }
 | 
| -
 | 
| -    @Test
 | 
| +        assertFalse(mHandler.handleIncomingIntent(mContext, signedIntent, false, true));
 | 
| +    }
 | 
| +
 | 
|      @SmallTest
 | 
|      public void testInstantAppsDisabled_launchFromShortcut() {
 | 
|          Intent i = createViewIntent();
 | 
|          i.putExtra(ShortcutHelper.EXTRA_SOURCE, 1);
 | 
| -        Assert.assertFalse(mHandler.handleIncomingIntent(mContext, i, false, true));
 | 
| -    }
 | 
| -
 | 
| -    @Test
 | 
| +        assertFalse(mHandler.handleIncomingIntent(mContext, i, false, true));
 | 
| +    }
 | 
| +
 | 
|      @SmallTest
 | 
|      public void testChromeNotDefault() {
 | 
|          SharedPreferences prefs = ContextUtils.getAppSharedPreferences();
 | 
| @@ -130,91 +112,77 @@
 | 
|          editor.putBoolean("applink.chrome_default_browser", false);
 | 
|          editor.apply();
 | 
|  
 | 
| -        Assert.assertFalse(
 | 
| -                mHandler.handleIncomingIntent(mContext, createViewIntent(), false, true));
 | 
| +        assertFalse(mHandler.handleIncomingIntent(mContext, createViewIntent(), false, true));
 | 
|  
 | 
|          // Even if Chrome is not default, launch Instant Apps for CustomTabs since those never
 | 
|          // show disambiguation dialogs.
 | 
|          Intent cti = createViewIntent()
 | 
|                  .putExtra("android.support.customtabs.extra.EXTRA_ENABLE_INSTANT_APPS", true);
 | 
| -        Assert.assertTrue(mHandler.handleIncomingIntent(mContext, cti, true, true));
 | 
| -    }
 | 
| -
 | 
| -    @Test
 | 
| +        assertTrue(mHandler.handleIncomingIntent(mContext, cti, true, true));
 | 
| +    }
 | 
| +
 | 
|      @SmallTest
 | 
|      public void testInstantAppsEnabled() {
 | 
|          Intent i = createViewIntent();
 | 
| -        Assert.assertTrue(mHandler.handleIncomingIntent(
 | 
| -                InstrumentationRegistry.getInstrumentation().getContext(), i, false, true));
 | 
| +        assertTrue(mHandler.handleIncomingIntent(getInstrumentation().getContext(), i, false,
 | 
| +                true));
 | 
|  
 | 
|          // Check that identical intent wouldn't be enabled for CustomTab flow.
 | 
| -        Assert.assertFalse(mHandler.handleIncomingIntent(
 | 
| -                InstrumentationRegistry.getInstrumentation().getContext(), i, true, true));
 | 
| +        assertFalse(mHandler.handleIncomingIntent(getInstrumentation().getContext(), i, true,
 | 
| +                true));
 | 
|  
 | 
|          // Add CustomTab specific extra and check it's now enabled.
 | 
|          i.putExtra("android.support.customtabs.extra.EXTRA_ENABLE_INSTANT_APPS", true);
 | 
| -        Assert.assertTrue(mHandler.handleIncomingIntent(
 | 
| -                InstrumentationRegistry.getInstrumentation().getContext(), i, true, true));
 | 
| -    }
 | 
| -
 | 
| -    @Test
 | 
| +        assertTrue(mHandler.handleIncomingIntent(getInstrumentation().getContext(), i, true,
 | 
| +                true));
 | 
| +    }
 | 
| +
 | 
|      @SmallTest
 | 
|      public void testNfcIntent() {
 | 
|          Intent i = new Intent(NfcAdapter.ACTION_NDEF_DISCOVERED);
 | 
|          i.setData(Uri.parse("http://instantapp.com/"));
 | 
| -        Assert.assertTrue(mHandler.handleIncomingIntent(
 | 
| -                InstrumentationRegistry.getInstrumentation().getContext(), i, false, true));
 | 
| -    }
 | 
| -
 | 
| -    @Test
 | 
| +        assertTrue(mHandler.handleIncomingIntent(getInstrumentation().getContext(), i, false,
 | 
| +                true));
 | 
| +    }
 | 
| +
 | 
|      @SmallTest
 | 
|      public void testHandleNavigation_startAsyncCheck() {
 | 
|          ThreadUtils.runOnUiThreadBlocking(new Runnable() {
 | 
|              @Override
 | 
|              public void run() {
 | 
| -                Assert.assertFalse(
 | 
| -                        mHandler.handleNavigation(mContext, INSTANT_APP_URL, REFERRER_URI,
 | 
| -                                mActivityTestRule.getActivity()
 | 
| -                                        .getTabModelSelector()
 | 
| -                                        .getCurrentTab()
 | 
| -                                        .getWebContents()));
 | 
| +                assertFalse(mHandler.handleNavigation(mContext, INSTANT_APP_URL, REFERRER_URI,
 | 
| +                        getActivity().getTabModelSelector().getCurrentTab().getWebContents()));
 | 
|              }
 | 
|          });
 | 
| -        Assert.assertFalse(mHandler.mLaunchInstantApp);
 | 
| -        Assert.assertTrue(mHandler.mStartedAsyncCall);
 | 
| -    }
 | 
| -
 | 
| -    @Test
 | 
| +        assertFalse(mHandler.mLaunchInstantApp);
 | 
| +        assertTrue(mHandler.mStartedAsyncCall);
 | 
| +    }
 | 
| +
 | 
|      @SmallTest
 | 
|      public void testLaunchFromBanner() {
 | 
|          // Intent to supervisor
 | 
|          final Intent i = new Intent(Intent.ACTION_MAIN);
 | 
|          i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
 | 
|  
 | 
| -        Instrumentation.ActivityMonitor monitor =
 | 
| -                InstrumentationRegistry.getInstrumentation().addMonitor(
 | 
| -                        new IntentFilter(Intent.ACTION_MAIN), null, true);
 | 
| +        Instrumentation.ActivityMonitor monitor = getInstrumentation().addMonitor(
 | 
| +                new IntentFilter(Intent.ACTION_MAIN), null, true);
 | 
|  
 | 
|          ThreadUtils.runOnUiThreadBlocking(new Runnable() {
 | 
|              @Override
 | 
|              public void run() {
 | 
| -                mHandler.launchFromBanner(new InstantAppsBannerData("App", null, INSTANT_APP_URL,
 | 
| -                        REFERRER_URI, i, "Launch",
 | 
| -                        mActivityTestRule.getActivity()
 | 
| -                                .getTabModelSelector()
 | 
| -                                .getCurrentTab()
 | 
| -                                .getWebContents()));
 | 
| +                mHandler.launchFromBanner(new InstantAppsBannerData(
 | 
| +                        "App", null, INSTANT_APP_URL, REFERRER_URI, i, "Launch",
 | 
| +                        getActivity().getTabModelSelector().getCurrentTab().getWebContents()));
 | 
|              }
 | 
|          });
 | 
|  
 | 
|          // Started instant apps intent
 | 
| -        Assert.assertEquals(1, monitor.getHits());
 | 
| -
 | 
| -        Assert.assertEquals(REFERRER_URI, i.getParcelableExtra(Intent.EXTRA_REFERRER));
 | 
| -        Assert.assertTrue(i.getBooleanExtra(InstantAppsHandler.IS_REFERRER_TRUSTED_EXTRA, false));
 | 
| -        Assert.assertTrue(
 | 
| -                i.getBooleanExtra(InstantAppsHandler.IS_USER_CONFIRMED_LAUNCH_EXTRA, false));
 | 
| -        Assert.assertEquals(mContext.getPackageName(),
 | 
| +        assertEquals(1, monitor.getHits());
 | 
| +
 | 
| +        assertEquals(REFERRER_URI, i.getParcelableExtra(Intent.EXTRA_REFERRER));
 | 
| +        assertTrue(i.getBooleanExtra(InstantAppsHandler.IS_REFERRER_TRUSTED_EXTRA, false));
 | 
| +        assertTrue(i.getBooleanExtra(InstantAppsHandler.IS_USER_CONFIRMED_LAUNCH_EXTRA, false));
 | 
| +        assertEquals(mContext.getPackageName(),
 | 
|                  i.getStringExtra(InstantAppsHandler.TRUSTED_REFERRER_PKG_EXTRA));
 | 
|  
 | 
|          // After a banner launch, test that the next launch happens automatically
 | 
| @@ -222,15 +190,17 @@
 | 
|          ThreadUtils.runOnUiThreadBlocking(new Runnable() {
 | 
|              @Override
 | 
|              public void run() {
 | 
| -                Assert.assertTrue(mHandler.handleNavigation(mContext, INSTANT_APP_URL, REFERRER_URI,
 | 
| -                        mActivityTestRule.getActivity()
 | 
| -                                .getTabModelSelector()
 | 
| -                                .getCurrentTab()
 | 
| -                                .getWebContents()));
 | 
| +                assertTrue(mHandler.handleNavigation(mContext, INSTANT_APP_URL, REFERRER_URI,
 | 
| +                        getActivity().getTabModelSelector().getCurrentTab().getWebContents()));
 | 
|              }
 | 
|          });
 | 
| -        Assert.assertFalse(mHandler.mStartedAsyncCall);
 | 
| -        Assert.assertTrue(mHandler.mLaunchInstantApp);
 | 
| +        assertFalse(mHandler.mStartedAsyncCall);
 | 
| +        assertTrue(mHandler.mLaunchInstantApp);
 | 
| +    }
 | 
| +
 | 
| +    @Override
 | 
| +    public void startMainActivity() throws InterruptedException {
 | 
| +        startMainActivityOnBlankPage();
 | 
|      }
 | 
|  
 | 
|      static class TestInstantAppsHandler extends InstantAppsHandler {
 | 
| 
 |