| Index: chrome/android/javatests/src/org/chromium/chrome/browser/precache/PrecacheControllerTest.java
 | 
| diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/precache/PrecacheControllerTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/precache/PrecacheControllerTest.java
 | 
| index bc94723a2084af99756bc43ccfa5769baa17691d..2d37fe68978e6f1b6ec89e56104547aea8c0314a 100644
 | 
| --- a/chrome/android/javatests/src/org/chromium/chrome/browser/precache/PrecacheControllerTest.java
 | 
| +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/precache/PrecacheControllerTest.java
 | 
| @@ -7,28 +7,42 @@ package org.chromium.chrome.browser.precache;
 | 
|  import android.content.Context;
 | 
|  import android.content.Intent;
 | 
|  import android.content.SharedPreferences.Editor;
 | 
| +import android.support.test.InstrumentationRegistry;
 | 
| +import android.support.test.annotation.UiThreadTest;
 | 
|  import android.support.test.filters.SmallTest;
 | 
| -import android.test.InstrumentationTestCase;
 | 
| +import android.support.test.rule.UiThreadTestRule;
 | 
|  
 | 
|  import com.google.android.gms.gcm.GcmNetworkManager;
 | 
|  import com.google.android.gms.gcm.Task;
 | 
|  
 | 
| +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.metrics.RecordHistogram;
 | 
|  import org.chromium.base.test.util.AdvancedMockContext;
 | 
|  import org.chromium.base.test.util.Feature;
 | 
|  import org.chromium.base.test.util.RetryOnFailure;
 | 
| +import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
 | 
|  import org.chromium.components.precache.MockDeviceState;
 | 
|  
 | 
|  /**
 | 
|   * Tests of {@link PrecacheController}.
 | 
|   */
 | 
| -public class PrecacheControllerTest extends InstrumentationTestCase {
 | 
| +@RunWith(ChromeJUnit4ClassRunner.class)
 | 
| +public class PrecacheControllerTest {
 | 
|      private Context mContext;
 | 
|      private MockPrecacheLauncher mPrecacheLauncher;
 | 
|      private MockPrecacheController mPrecacheController;
 | 
|      private MockPrecacheTaskScheduler mPrecacheTaskScheduler;
 | 
|  
 | 
| +    @Rule
 | 
| +    public UiThreadTestRule mRule = new UiThreadTestRule();
 | 
| +
 | 
|      /**
 | 
|       * Mock of the {@link PrecacheLauncher}.
 | 
|       */
 | 
| @@ -98,10 +112,10 @@ public class PrecacheControllerTest extends InstrumentationTestCase {
 | 
|          }
 | 
|      }
 | 
|  
 | 
| -    @Override
 | 
| -    protected void setUp() throws Exception {
 | 
| -        super.setUp();
 | 
| -        mContext = new AdvancedMockContext(getInstrumentation().getTargetContext());
 | 
| +    @Before
 | 
| +    public void setUp() throws Exception {
 | 
| +        mContext = new AdvancedMockContext(
 | 
| +                InstrumentationRegistry.getInstrumentation().getTargetContext());
 | 
|          mPrecacheLauncher = new MockPrecacheLauncher();
 | 
|          mPrecacheController = new MockPrecacheController(mContext);
 | 
|          mPrecacheTaskScheduler = new MockPrecacheTaskScheduler();
 | 
| @@ -114,9 +128,8 @@ public class PrecacheControllerTest extends InstrumentationTestCase {
 | 
|          editor.apply();
 | 
|      }
 | 
|  
 | 
| -    @Override
 | 
| +    @After
 | 
|      public void tearDown() throws Exception {
 | 
| -        super.tearDown();
 | 
|          RecordHistogram.setDisabledForTests(false);
 | 
|      }
 | 
|  
 | 
| @@ -127,149 +140,169 @@ public class PrecacheControllerTest extends InstrumentationTestCase {
 | 
|              expectedPeriodicScheduled = 0;
 | 
|              expectedContinuationScheduled = 0;
 | 
|          }
 | 
| -        assertEquals(expectedPeriodicScheduled, mPrecacheTaskScheduler.schedulePeriodicCnt);
 | 
| -        assertEquals(expectedContinuationScheduled, mPrecacheTaskScheduler.scheduleContinuationCnt);
 | 
| -        assertEquals(expectedPeriodicCanceled, mPrecacheTaskScheduler.cancelPeriodicCnt);
 | 
| -        assertEquals(expectedContinuationCanceled, mPrecacheTaskScheduler.cancelContinuationCnt);
 | 
| +        Assert.assertEquals(expectedPeriodicScheduled, mPrecacheTaskScheduler.schedulePeriodicCnt);
 | 
| +        Assert.assertEquals(
 | 
| +                expectedContinuationScheduled, mPrecacheTaskScheduler.scheduleContinuationCnt);
 | 
| +        Assert.assertEquals(expectedPeriodicCanceled, mPrecacheTaskScheduler.cancelPeriodicCnt);
 | 
| +        Assert.assertEquals(
 | 
| +                expectedContinuationCanceled, mPrecacheTaskScheduler.cancelContinuationCnt);
 | 
|      }
 | 
|  
 | 
|      protected void verifyLockCounts(int expectedAcquired, int expectedReleased) {
 | 
| -        assertEquals(expectedAcquired, mPrecacheController.acquiredLockCnt);
 | 
| -        assertEquals(expectedReleased, mPrecacheController.releasedLockCnt);
 | 
| +        Assert.assertEquals(expectedAcquired, mPrecacheController.acquiredLockCnt);
 | 
| +        Assert.assertEquals(expectedReleased, mPrecacheController.releasedLockCnt);
 | 
|      }
 | 
|  
 | 
|      protected void verifyBeginPrecaching() {
 | 
|          PrecacheController.setIsPrecachingEnabled(mContext, true);
 | 
| -        assertEquals(GcmNetworkManager.RESULT_SUCCESS,
 | 
| +        Assert.assertEquals(GcmNetworkManager.RESULT_SUCCESS,
 | 
|                  mPrecacheController.precache(PrecacheController.PERIODIC_TASK_TAG));
 | 
| -        assertTrue(mPrecacheController.isPrecaching());
 | 
| +        Assert.assertTrue(mPrecacheController.isPrecaching());
 | 
|          verifyLockCounts(1, 0);
 | 
|          // Any existing completion tasks are canceled.
 | 
|          verifyScheduledAndCanceledCounts(1, 0, 0, 1);
 | 
| -        assertEquals(1, mPrecacheLauncher.startCnt);
 | 
| +        Assert.assertEquals(1, mPrecacheLauncher.startCnt);
 | 
|      }
 | 
|  
 | 
|      protected void verifyContinuationGetsPreemptedByPeriodicTask() {
 | 
|          PrecacheController.setIsPrecachingEnabled(mContext, true);
 | 
| -        assertEquals(GcmNetworkManager.RESULT_SUCCESS,
 | 
| +        Assert.assertEquals(GcmNetworkManager.RESULT_SUCCESS,
 | 
|                  mPrecacheController.precache(PrecacheController.CONTINUATION_TASK_TAG));
 | 
| -        assertTrue(mPrecacheController.isPrecaching());
 | 
| +        Assert.assertTrue(mPrecacheController.isPrecaching());
 | 
|          verifyLockCounts(1, 0);
 | 
|          // Any existing completion tasks are canceled.
 | 
|          verifyScheduledAndCanceledCounts(1, 0, 0, 1);
 | 
| -        assertEquals(1, mPrecacheLauncher.startCnt);
 | 
| +        Assert.assertEquals(1, mPrecacheLauncher.startCnt);
 | 
|      }
 | 
|  
 | 
| +    @Test
 | 
|      @SmallTest
 | 
|      @Feature({"Precache"})
 | 
| +    @UiThreadTest
 | 
|      public void testStartPrecachingNotEnabled() {
 | 
|          PrecacheController.setIsPrecachingEnabled(mContext, false);
 | 
|          verifyScheduledAndCanceledCounts(0, 0, 0, 0);
 | 
| -        assertEquals(0, mPrecacheLauncher.startCnt);
 | 
| -        assertTrue(mPrecacheController.precache(PrecacheController.PERIODIC_TASK_TAG)
 | 
| -                        == GcmNetworkManager.RESULT_SUCCESS);
 | 
| -        assertFalse(mPrecacheController.isPrecaching());
 | 
| +        Assert.assertEquals(0, mPrecacheLauncher.startCnt);
 | 
| +        Assert.assertTrue(mPrecacheController.precache(PrecacheController.PERIODIC_TASK_TAG)
 | 
| +                == GcmNetworkManager.RESULT_SUCCESS);
 | 
| +        Assert.assertFalse(mPrecacheController.isPrecaching());
 | 
|          verifyLockCounts(0, 0);
 | 
|          // All tasks are canceled.
 | 
|          verifyScheduledAndCanceledCounts(0, 0, 1, 1);
 | 
| -        assertEquals(0, mPrecacheLauncher.startCnt);
 | 
| +        Assert.assertEquals(0, mPrecacheLauncher.startCnt);
 | 
|      }
 | 
|  
 | 
| +    @Test
 | 
|      @SmallTest
 | 
|      @Feature({"Precache"})
 | 
| +    @UiThreadTest
 | 
|      public void testStartPrecachingEnabled() {
 | 
|          verifyBeginPrecaching();
 | 
|  
 | 
|          mPrecacheLauncher.onPrecacheCompleted(true);
 | 
| -        assertFalse(mPrecacheController.isPrecaching());
 | 
| +        Assert.assertFalse(mPrecacheController.isPrecaching());
 | 
|          // A continuation task is scheduled.
 | 
|          verifyScheduledAndCanceledCounts(1, 1, 0, 1);
 | 
|          verifyLockCounts(1, 1);
 | 
|      }
 | 
|  
 | 
| +    @Test
 | 
|      @SmallTest
 | 
|      @Feature({"Precache"})
 | 
| +    @UiThreadTest
 | 
|      @RetryOnFailure
 | 
|      public void testStartWhenAlreadyStarted() {
 | 
|          verifyBeginPrecaching();
 | 
|  
 | 
| -        assertEquals(GcmNetworkManager.RESULT_FAILURE,
 | 
| +        Assert.assertEquals(GcmNetworkManager.RESULT_FAILURE,
 | 
|                  mPrecacheController.precache(PrecacheController.PERIODIC_TASK_TAG));
 | 
| -        assertTrue(mPrecacheController.isPrecaching());
 | 
| +        Assert.assertTrue(mPrecacheController.isPrecaching());
 | 
|          // No additional tasks are scheduled or canceled.
 | 
|          verifyScheduledAndCanceledCounts(1, 0, 0, 1);
 | 
|          verifyLockCounts(1, 0);
 | 
|      }
 | 
|  
 | 
| +    @Test
 | 
|      @SmallTest
 | 
|      @Feature({"Precache"})
 | 
| +    @UiThreadTest
 | 
|      @RetryOnFailure
 | 
|      public void testDeviceStateChangeCancels() {
 | 
|          verifyBeginPrecaching();
 | 
|  
 | 
|          mPrecacheController.setDeviceState(new MockDeviceState(0, true, false));
 | 
|          mPrecacheController.getDeviceStateReceiver().onReceive(mContext, new Intent());
 | 
| -        assertFalse(mPrecacheController.isPrecaching());
 | 
| +        Assert.assertFalse(mPrecacheController.isPrecaching());
 | 
|          // A continuation task is scheduled.
 | 
|          verifyScheduledAndCanceledCounts(1, 1, 0, 1);
 | 
|          verifyLockCounts(1, 1);
 | 
|      }
 | 
|  
 | 
| +    @Test
 | 
|      @SmallTest
 | 
|      @Feature({"Precache"})
 | 
| +    @UiThreadTest
 | 
|      public void testDeviceStateChangeDoesNotCancel() {
 | 
|          verifyBeginPrecaching();
 | 
|  
 | 
|          mPrecacheController.setDeviceState(new MockDeviceState(0, true, true));
 | 
|          mPrecacheController.getDeviceStateReceiver().onReceive(mContext, new Intent());
 | 
| -        assertTrue(mPrecacheController.isPrecaching());
 | 
| +        Assert.assertTrue(mPrecacheController.isPrecaching());
 | 
|          // No additional tasks are scheduled or canceled.
 | 
|          verifyScheduledAndCanceledCounts(1, 0, 0, 1);
 | 
|          verifyLockCounts(1, 0);
 | 
|      }
 | 
|  
 | 
| +    @Test
 | 
|      @SmallTest
 | 
|      @Feature({"Precache"})
 | 
| +    @UiThreadTest
 | 
|      @RetryOnFailure
 | 
|      public void testDeviceStateChangeWhenNotPrecaching() {
 | 
| -        assertFalse(mPrecacheController.isPrecaching());
 | 
| +        Assert.assertFalse(mPrecacheController.isPrecaching());
 | 
|          mPrecacheController.setDeviceState(new MockDeviceState(0, false, true));
 | 
|          mPrecacheController.getDeviceStateReceiver().onReceive(mContext, new Intent());
 | 
| -        assertFalse(mPrecacheController.isPrecaching());
 | 
| +        Assert.assertFalse(mPrecacheController.isPrecaching());
 | 
|          // No tasks are scheduled or canceled.
 | 
|          verifyScheduledAndCanceledCounts(0, 0, 0, 0);
 | 
|          verifyLockCounts(0, 0);
 | 
|          // device state change when not running has no effect (maybe unregisters)
 | 
|      }
 | 
|  
 | 
| +    @Test
 | 
|      @SmallTest
 | 
|      @Feature({"Precache"})
 | 
| +    @UiThreadTest
 | 
|      @RetryOnFailure
 | 
|      public void testTimeoutCancelsPrecaching() {
 | 
|          verifyBeginPrecaching();
 | 
|  
 | 
|          mPrecacheController.getTimeoutRunnable().run();
 | 
| -        assertFalse(mPrecacheController.isPrecaching());
 | 
| +        Assert.assertFalse(mPrecacheController.isPrecaching());
 | 
|          // A continuation task is scheduled.
 | 
|          verifyScheduledAndCanceledCounts(1, 1, 0, 1);
 | 
|          verifyLockCounts(1, 1);
 | 
|      }
 | 
|  
 | 
| +    @Test
 | 
|      @SmallTest
 | 
|      @Feature({"Precache"})
 | 
| +    @UiThreadTest
 | 
|      @RetryOnFailure
 | 
|      public void testTimeoutDoesNotCancelIfNotPrecaching() {
 | 
| -        assertFalse(mPrecacheController.isPrecaching());
 | 
| +        Assert.assertFalse(mPrecacheController.isPrecaching());
 | 
|  
 | 
|          mPrecacheController.getTimeoutRunnable().run();
 | 
| -        assertFalse(mPrecacheController.isPrecaching());
 | 
| +        Assert.assertFalse(mPrecacheController.isPrecaching());
 | 
|          // No tasks are scheduled or canceled.
 | 
|          verifyScheduledAndCanceledCounts(0, 0, 0, 0);
 | 
|          verifyLockCounts(0, 0);
 | 
|      }
 | 
|  
 | 
| +    @Test
 | 
|      @SmallTest
 | 
|      @Feature({"Precache"})
 | 
| +    @UiThreadTest
 | 
|      @RetryOnFailure
 | 
|      public void testPrecachingEnabledPreferences() {
 | 
|          // Initial enable will schedule a periodic task.
 | 
| 
 |