Commit 6c91a345 authored by Eric Stevenson's avatar Eric Stevenson Committed by Commit Bot

JNI refactor: @NativeMethods conversion for offlinepages.

This CL was partially created by
//base/android/jni_generator/jni_refactorer.py.

The conversion also required converting unit tests to use the new JNI
mocking approach provided by JniMocker.

Bug: 929661
Change-Id: If9039914b0dec8e99e34f0dffcb095e444433bda
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1815987Reviewed-by: default avatarCarlos Knippschild <carlosk@chromium.org>
Commit-Queue: Eric Stevenson <estevenson@chromium.org>
Cr-Commit-Position: refs/heads/master@{#700869}
parent ba21e030
...@@ -9,6 +9,7 @@ import android.content.Context; ...@@ -9,6 +9,7 @@ import android.content.Context;
import org.chromium.base.VisibleForTesting; import org.chromium.base.VisibleForTesting;
import org.chromium.base.annotations.CalledByNative; import org.chromium.base.annotations.CalledByNative;
import org.chromium.base.annotations.JNINamespace; import org.chromium.base.annotations.JNINamespace;
import org.chromium.base.annotations.NativeMethods;
import org.chromium.chrome.browser.ChromeFeatureList; import org.chromium.chrome.browser.ChromeFeatureList;
import org.chromium.chrome.browser.DeviceConditions; import org.chromium.chrome.browser.DeviceConditions;
import org.chromium.chrome.browser.background_task_scheduler.NativeBackgroundTask; import org.chromium.chrome.browser.background_task_scheduler.NativeBackgroundTask;
...@@ -108,7 +109,7 @@ public class PrefetchBackgroundTask extends NativeBackgroundTask { ...@@ -108,7 +109,7 @@ public class PrefetchBackgroundTask extends NativeBackgroundTask {
return; return;
} }
nativeStartPrefetchTask(); PrefetchBackgroundTaskJni.get().startPrefetchTask(PrefetchBackgroundTask.this);
} }
private boolean isBrowserRunningInReducedMode() { private boolean isBrowserRunningInReducedMode() {
...@@ -127,7 +128,7 @@ public class PrefetchBackgroundTask extends NativeBackgroundTask { ...@@ -127,7 +128,7 @@ public class PrefetchBackgroundTask extends NativeBackgroundTask {
// TaskFinishedCallback, so we need to save the reschedule result. // TaskFinishedCallback, so we need to save the reschedule result.
if (mNativeTask == 0) return mCachedRescheduleResult; if (mNativeTask == 0) return mCachedRescheduleResult;
return nativeOnStopTask(mNativeTask); return PrefetchBackgroundTaskJni.get().onStopTask(mNativeTask, PrefetchBackgroundTask.this);
} }
@Override @Override
...@@ -187,13 +188,15 @@ public class PrefetchBackgroundTask extends NativeBackgroundTask { ...@@ -187,13 +188,15 @@ public class PrefetchBackgroundTask extends NativeBackgroundTask {
@VisibleForTesting @VisibleForTesting
void setTaskReschedulingForTesting(int rescheduleType) { void setTaskReschedulingForTesting(int rescheduleType) {
if (mNativeTask == 0) return; if (mNativeTask == 0) return;
nativeSetTaskReschedulingForTesting(mNativeTask, rescheduleType); PrefetchBackgroundTaskJni.get().setTaskReschedulingForTesting(
mNativeTask, PrefetchBackgroundTask.this, rescheduleType);
} }
@VisibleForTesting @VisibleForTesting
void signalTaskFinishedForTesting() { void signalTaskFinishedForTesting() {
if (mNativeTask == 0) return; if (mNativeTask == 0) return;
nativeSignalTaskFinishedForTesting(mNativeTask); PrefetchBackgroundTaskJni.get().signalTaskFinishedForTesting(
mNativeTask, PrefetchBackgroundTask.this);
} }
@Override @Override
...@@ -205,11 +208,13 @@ public class PrefetchBackgroundTask extends NativeBackgroundTask { ...@@ -205,11 +208,13 @@ public class PrefetchBackgroundTask extends NativeBackgroundTask {
return FeatureUtilities.isServiceManagerForBackgroundPrefetchEnabled(); return FeatureUtilities.isServiceManagerForBackgroundPrefetchEnabled();
} }
@VisibleForTesting @NativeMethods
native boolean nativeStartPrefetchTask(); interface Natives {
@VisibleForTesting boolean startPrefetchTask(PrefetchBackgroundTask caller);
native boolean nativeOnStopTask(long nativePrefetchBackgroundTaskAndroid); boolean onStopTask(long nativePrefetchBackgroundTaskAndroid, PrefetchBackgroundTask caller);
native void nativeSetTaskReschedulingForTesting( void setTaskReschedulingForTesting(long nativePrefetchBackgroundTaskAndroid,
long nativePrefetchBackgroundTaskAndroid, int rescheduleType); PrefetchBackgroundTask caller, int rescheduleType);
native void nativeSignalTaskFinishedForTesting(long nativePrefetchBackgroundTaskAndroid); void signalTaskFinishedForTesting(
long nativePrefetchBackgroundTaskAndroid, PrefetchBackgroundTask caller);
}
} }
...@@ -8,16 +8,19 @@ import static org.junit.Assert.assertEquals; ...@@ -8,16 +8,19 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNotNull;
import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyLong; import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.spy; import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times; import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import org.junit.Before; import org.junit.Before;
import org.junit.Rule;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor; import org.mockito.ArgumentCaptor;
import org.mockito.Captor; import org.mockito.Captor;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations; import org.mockito.MockitoAnnotations;
import org.mockito.invocation.InvocationOnMock; import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer; import org.mockito.stubbing.Answer;
...@@ -27,6 +30,7 @@ import org.robolectric.shadows.multidex.ShadowMultiDex; ...@@ -27,6 +30,7 @@ import org.robolectric.shadows.multidex.ShadowMultiDex;
import org.chromium.base.Callback; import org.chromium.base.Callback;
import org.chromium.base.test.BaseRobolectricTestRunner; import org.chromium.base.test.BaseRobolectricTestRunner;
import org.chromium.base.test.util.Feature; import org.chromium.base.test.util.Feature;
import org.chromium.base.test.util.JniMocker;
import org.chromium.chrome.browser.offlinepages.OfflinePageBridge.OfflinePageModelObserver; import org.chromium.chrome.browser.offlinepages.OfflinePageBridge.OfflinePageModelObserver;
import java.util.ArrayList; import java.util.ArrayList;
...@@ -74,6 +78,12 @@ public class OfflinePageBridgeUnitTest { ...@@ -74,6 +78,12 @@ public class OfflinePageBridgeUnitTest {
@Captor @Captor
ArgumentCaptor<Callback<Integer>> mDeleteCallbackArgument; ArgumentCaptor<Callback<Integer>> mDeleteCallbackArgument;
@Rule
public JniMocker mocker = new JniMocker();
@Mock
OfflinePageBridge.Natives mOfflinePageBridgeJniMock;
/** /**
* Mocks the observer. * Mocks the observer.
*/ */
...@@ -91,6 +101,7 @@ public class OfflinePageBridgeUnitTest { ...@@ -91,6 +101,7 @@ public class OfflinePageBridgeUnitTest {
@Before @Before
public void setUp() throws Exception { public void setUp() throws Exception {
MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this);
mocker.mock(OfflinePageBridgeJni.TEST_HOOKS, mOfflinePageBridgeJniMock);
OfflinePageBridge bridge = new OfflinePageBridge(0); OfflinePageBridge bridge = new OfflinePageBridge(0);
// Using the spy to automatically marshal all the calls to the original methods if they are // Using the spy to automatically marshal all the calls to the original methods if they are
// not mocked explicitly. // not mocked explicitly.
...@@ -310,8 +321,10 @@ public class OfflinePageBridgeUnitTest { ...@@ -310,8 +321,10 @@ public class OfflinePageBridgeUnitTest {
return null; return null;
} }
}; };
doAnswer(answer).when(mBridge).nativeGetAllPages( doAnswer(answer)
anyLong(), mResultArgument.capture(), mCallbackArgument.capture()); .when(mOfflinePageBridgeJniMock)
.getAllPages(anyLong(), eq(mBridge), mResultArgument.capture(),
mCallbackArgument.capture());
} }
private void answerGetPagesByClientIds(final int itemCount) { private void answerGetPagesByClientIds(final int itemCount) {
...@@ -335,9 +348,11 @@ public class OfflinePageBridgeUnitTest { ...@@ -335,9 +348,11 @@ public class OfflinePageBridgeUnitTest {
} }
}; };
doAnswer(answer).when(mBridge).nativeGetPagesByClientId(anyLong(), doAnswer(answer)
mResultArgument.capture(), mNamespacesArgument.capture(), mIdsArgument.capture(), .when(mOfflinePageBridgeJniMock)
mCallbackArgument.capture()); .getPagesByClientId(anyLong(), eq(mBridge), mResultArgument.capture(),
mNamespacesArgument.capture(), mIdsArgument.capture(),
mCallbackArgument.capture());
} }
private void answerDeletePagesByOfflineIds(final int itemCount) { private void answerDeletePagesByOfflineIds(final int itemCount) {
...@@ -357,8 +372,10 @@ public class OfflinePageBridgeUnitTest { ...@@ -357,8 +372,10 @@ public class OfflinePageBridgeUnitTest {
} }
}; };
doAnswer(answer).when(mBridge).nativeDeletePagesByOfflineId( doAnswer(answer)
anyLong(), mOfflineIdsArgument.capture(), mDeleteCallbackArgument.capture()); .when(mOfflinePageBridgeJniMock)
.deletePagesByOfflineId(anyLong(), eq(mBridge), mOfflineIdsArgument.capture(),
mDeleteCallbackArgument.capture());
} }
private void answerDeletePagesByClientIds(final int itemCount) { private void answerDeletePagesByClientIds(final int itemCount) {
...@@ -377,8 +394,9 @@ public class OfflinePageBridgeUnitTest { ...@@ -377,8 +394,9 @@ public class OfflinePageBridgeUnitTest {
} }
}; };
doAnswer(answer).when(mBridge).nativeDeletePagesByClientId(anyLong(), doAnswer(answer)
mNamespacesArgument.capture(), mIdsArgument.capture(), .when(mOfflinePageBridgeJniMock)
mDeleteCallbackArgument.capture()); .deletePagesByClientId(anyLong(), eq(mBridge), mNamespacesArgument.capture(),
mIdsArgument.capture(), mDeleteCallbackArgument.capture());
} }
} }
...@@ -18,6 +18,7 @@ import android.content.Context; ...@@ -18,6 +18,7 @@ import android.content.Context;
import android.os.Bundle; import android.os.Bundle;
import org.junit.Before; import org.junit.Before;
import org.junit.Rule;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor; import org.mockito.ArgumentCaptor;
...@@ -33,6 +34,7 @@ import org.robolectric.shadows.multidex.ShadowMultiDex; ...@@ -33,6 +34,7 @@ import org.robolectric.shadows.multidex.ShadowMultiDex;
import org.chromium.base.library_loader.ProcessInitException; import org.chromium.base.library_loader.ProcessInitException;
import org.chromium.base.test.BaseRobolectricTestRunner; import org.chromium.base.test.BaseRobolectricTestRunner;
import org.chromium.base.test.util.JniMocker;
import org.chromium.chrome.browser.DeviceConditions; import org.chromium.chrome.browser.DeviceConditions;
import org.chromium.chrome.browser.ShadowDeviceConditions; import org.chromium.chrome.browser.ShadowDeviceConditions;
import org.chromium.chrome.browser.background_task_scheduler.NativeBackgroundTask; import org.chromium.chrome.browser.background_task_scheduler.NativeBackgroundTask;
...@@ -92,10 +94,14 @@ public class PrefetchBackgroundTaskUnitTest { ...@@ -92,10 +94,14 @@ public class PrefetchBackgroundTaskUnitTest {
public static final boolean METERED = true; public static final boolean METERED = true;
public static final boolean SCREEN_ON_AND_UNLOCKED = true; public static final boolean SCREEN_ON_AND_UNLOCKED = true;
@Rule
public JniMocker mocker = new JniMocker();
@Spy @Spy
private PrefetchBackgroundTask mPrefetchBackgroundTask = new PrefetchBackgroundTask(); private PrefetchBackgroundTask mPrefetchBackgroundTask = new PrefetchBackgroundTask();
@Mock @Mock
private ChromeBrowserInitializer mChromeBrowserInitializer; private ChromeBrowserInitializer mChromeBrowserInitializer;
@Mock
private PrefetchBackgroundTask.Natives mPrefetchBackgroundTaskJniMock;
@Captor @Captor
ArgumentCaptor<BrowserParts> mBrowserParts; ArgumentCaptor<BrowserParts> mBrowserParts;
private FakeBackgroundTaskScheduler mFakeTaskScheduler; private FakeBackgroundTaskScheduler mFakeTaskScheduler;
...@@ -103,6 +109,7 @@ public class PrefetchBackgroundTaskUnitTest { ...@@ -103,6 +109,7 @@ public class PrefetchBackgroundTaskUnitTest {
@Before @Before
public void setUp() { public void setUp() {
MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this);
mocker.mock(PrefetchBackgroundTaskJni.TEST_HOOKS, mPrefetchBackgroundTaskJniMock);
doNothing().when(mChromeBrowserInitializer).handlePreNativeStartup(any(BrowserParts.class)); doNothing().when(mChromeBrowserInitializer).handlePreNativeStartup(any(BrowserParts.class));
try { try {
doAnswer(new Answer<Void>() { doAnswer(new Answer<Void>() {
...@@ -127,9 +134,10 @@ public class PrefetchBackgroundTaskUnitTest { ...@@ -127,9 +134,10 @@ public class PrefetchBackgroundTaskUnitTest {
return Boolean.TRUE; return Boolean.TRUE;
} }
}) })
.when(mPrefetchBackgroundTask) .when(mPrefetchBackgroundTaskJniMock)
.nativeStartPrefetchTask(); .startPrefetchTask(mPrefetchBackgroundTask);
doReturn(true).when(mPrefetchBackgroundTask).nativeOnStopTask(1);
doReturn(true).when(mPrefetchBackgroundTaskJniMock).onStopTask(1, mPrefetchBackgroundTask);
mFakeTaskScheduler = new FakeBackgroundTaskScheduler(); mFakeTaskScheduler = new FakeBackgroundTaskScheduler();
BackgroundTaskSchedulerFactory.setSchedulerForTesting(mFakeTaskScheduler); BackgroundTaskSchedulerFactory.setSchedulerForTesting(mFakeTaskScheduler);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment