Commit 0d3126a4 authored by Gang Wu's avatar Gang Wu Committed by Commit Bot

[Feed] Add Java side storage integration

Enable content and journal storage in FeedProcessScopeFactory.java.
Also fix type mismatch issue in Journal bridge, and handle empty
content mutation case.

Bug: 887116

Change-Id: I9333beb9141aab7a96e87d90baa8bef788b0b5e4
Reviewed-on: https://chromium-review.googlesource.com/1234263Reviewed-by: default avatarFilip Gorski <fgorski@chromium.org>
Commit-Queue: Gang Wu <gangwu@chromium.org>
Cr-Commit-Position: refs/heads/master@{#592950}
parent f507408b
...@@ -15,8 +15,6 @@ import org.chromium.base.VisibleForTesting; ...@@ -15,8 +15,6 @@ import org.chromium.base.VisibleForTesting;
import org.chromium.base.annotations.JNINamespace; import org.chromium.base.annotations.JNINamespace;
import org.chromium.chrome.browser.profiles.Profile; import org.chromium.chrome.browser.profiles.Profile;
import java.util.List;
/** /**
* Provides access to native implementations of journal storage. * Provides access to native implementations of journal storage.
*/ */
...@@ -100,7 +98,7 @@ public class FeedJournalBridge { ...@@ -100,7 +98,7 @@ public class FeedJournalBridge {
/** Asynchronously retrieve a list of all current journals' name. */ /** Asynchronously retrieve a list of all current journals' name. */
public void loadAllJournalKeys( public void loadAllJournalKeys(
Callback<List<String>> successCallback, Callback<Void> failureCallback) { Callback<String[]> successCallback, Callback<Void> failureCallback) {
assert mNativeFeedJournalBridge != 0; assert mNativeFeedJournalBridge != 0;
nativeLoadAllJournalKeys(mNativeFeedJournalBridge, successCallback, failureCallback); nativeLoadAllJournalKeys(mNativeFeedJournalBridge, successCallback, failureCallback);
} }
...@@ -126,7 +124,7 @@ public class FeedJournalBridge { ...@@ -126,7 +124,7 @@ public class FeedJournalBridge {
private native void nativeDoesJournalExist(long nativeFeedJournalBridge, String journalName, private native void nativeDoesJournalExist(long nativeFeedJournalBridge, String journalName,
Callback<Boolean> successCallback, Callback<Void> failureCallback); Callback<Boolean> successCallback, Callback<Void> failureCallback);
private native void nativeLoadAllJournalKeys(long nativeFeedJournalBridge, private native void nativeLoadAllJournalKeys(long nativeFeedJournalBridge,
Callback<List<String>> successCallback, Callback<Void> failureCallback); Callback<String[]> successCallback, Callback<Void> failureCallback);
private native void nativeDeleteAllJournals( private native void nativeDeleteAllJournals(
long nativeFeedJournalBridge, Callback<Boolean> callback); long nativeFeedJournalBridge, Callback<Boolean> callback);
} }
...@@ -14,6 +14,7 @@ import org.chromium.base.VisibleForTesting; ...@@ -14,6 +14,7 @@ import org.chromium.base.VisibleForTesting;
import org.chromium.chrome.browser.profiles.Profile; import org.chromium.chrome.browser.profiles.Profile;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.List; import java.util.List;
/** /**
...@@ -80,8 +81,9 @@ public class FeedJournalStorage implements JournalStorage { ...@@ -80,8 +81,9 @@ public class FeedJournalStorage implements JournalStorage {
@Override @Override
public void getAllJournals(Consumer < Result < List<String>>> consumer) { public void getAllJournals(Consumer < Result < List<String>>> consumer) {
assert mFeedJournalBridge != null; assert mFeedJournalBridge != null;
mFeedJournalBridge.loadAllJournalKeys((List<String> data) mFeedJournalBridge.loadAllJournalKeys(
-> consumer.accept(Result.success(data)), (String[] data)
-> consumer.accept(Result.success(Arrays.asList(data))),
(Void ignored) -> consumer.accept(Result.failure())); (Void ignored) -> consumer.accept(Result.failure()));
} }
......
...@@ -74,12 +74,16 @@ public class FeedProcessScopeFactory { ...@@ -74,12 +74,16 @@ public class FeedProcessScopeFactory {
sFeedScheduler = schedulerBridge; sFeedScheduler = schedulerBridge;
FeedAppLifecycleListener lifecycleListener = FeedAppLifecycleListener lifecycleListener =
new FeedAppLifecycleListener(new ThreadUtils()); new FeedAppLifecycleListener(new ThreadUtils());
FeedContentStorage contentStorage = new FeedContentStorage(profile);
FeedJournalStorage journalStorage = new FeedJournalStorage(profile);
sFeedProcessScope = sFeedProcessScope =
new FeedProcessScope new FeedProcessScope
.Builder(configHostApi, Executors.newSingleThreadExecutor(), .Builder(configHostApi, Executors.newSingleThreadExecutor(),
new LoggingApiImpl(), new FeedNetworkBridge(profile), new LoggingApiImpl(), new FeedNetworkBridge(profile),
schedulerBridge, lifecycleListener, DebugBehavior.SILENT, schedulerBridge, lifecycleListener, DebugBehavior.SILENT,
ContextUtils.getApplicationContext()) ContextUtils.getApplicationContext())
.setContentStorage(contentStorage)
.setJournalStorage(journalStorage)
.build(); .build();
schedulerBridge.initializeFeedDependencies( schedulerBridge.initializeFeedDependencies(
sFeedProcessScope.getRequestManager(), sFeedProcessScope.getSessionManager()); sFeedProcessScope.getRequestManager(), sFeedProcessScope.getSessionManager());
......
...@@ -75,8 +75,6 @@ public class FeedJournalStorageTest { ...@@ -75,8 +75,6 @@ public class FeedJournalStorageTest {
private ArgumentCaptor<String> mStringArgument; private ArgumentCaptor<String> mStringArgument;
@Captor @Captor
private ArgumentCaptor<Callback<Boolean>> mBooleanSuccessCallbackArgument; private ArgumentCaptor<Callback<Boolean>> mBooleanSuccessCallbackArgument;
@Captor
private ArgumentCaptor < Callback < List<String>>> mListOfStringSuccessCallbackArgument;
@Captor @Captor
private ArgumentCaptor<Callback<String[]>> mStringArraySuccessCallbackArgument; private ArgumentCaptor<Callback<String[]>> mStringArraySuccessCallbackArgument;
@Captor @Captor
...@@ -106,16 +104,6 @@ public class FeedJournalStorageTest { ...@@ -106,16 +104,6 @@ public class FeedJournalStorageTest {
}; };
} }
private Answer<Void> createStringListSuccessAnswer(List<String> stringList) {
return new Answer<Void>() {
@Override
public Void answer(InvocationOnMock invocation) {
mListOfStringSuccessCallbackArgument.getValue().onResult(stringList);
return null;
}
};
}
private Answer<Void> createBooleanSuccessAnswer(Boolean bool) { private Answer<Void> createBooleanSuccessAnswer(Boolean bool) {
return new Answer<Void>() { return new Answer<Void>() {
@Override @Override
...@@ -145,13 +133,13 @@ public class FeedJournalStorageTest { ...@@ -145,13 +133,13 @@ public class FeedJournalStorageTest {
} }
private void verifyListOfStringResult( private void verifyListOfStringResult(
List<String> expectedList, boolean expectedSuccess, Result<List<String>> actualResult) { String[] expectedStrings, boolean expectedSuccess, Result<List<String>> actualResult) {
assertEquals(expectedSuccess, actualResult.isSuccessful()); assertEquals(expectedSuccess, actualResult.isSuccessful());
if (!expectedSuccess) return; if (!expectedSuccess) return;
List<String> actualList = actualResult.getValue(); List<String> actualList = actualResult.getValue();
assertEquals(expectedList.size(), actualList.size()); assertEquals(expectedStrings.length, actualList.size());
for (String expectedString : expectedList) { for (String expectedString : expectedStrings) {
assertTrue(actualList.contains(expectedString)); assertTrue(actualList.contains(expectedString));
} }
} }
...@@ -227,14 +215,14 @@ public class FeedJournalStorageTest { ...@@ -227,14 +215,14 @@ public class FeedJournalStorageTest {
@Test @Test
@SmallTest @SmallTest
public void getAllJournalsTest() { public void getAllJournalsTest() {
List<String> answerStrings = Arrays.asList(JOURNAL_KEY1, JOURNAL_KEY2, JOURNAL_KEY3); String[] answerStrings = {JOURNAL_KEY1, JOURNAL_KEY2, JOURNAL_KEY3};
Answer<Void> answer = createStringListSuccessAnswer(answerStrings); Answer<Void> answer = createStringArraySuccessAnswer(answerStrings);
doAnswer(answer).when(mBridge).loadAllJournalKeys( doAnswer(answer).when(mBridge).loadAllJournalKeys(
mListOfStringSuccessCallbackArgument.capture(), mFailureCallbackArgument.capture()); mStringArraySuccessCallbackArgument.capture(), mFailureCallbackArgument.capture());
mJournalStorage.getAllJournals(mListOfStringConsumer); mJournalStorage.getAllJournals(mListOfStringConsumer);
verify(mBridge, times(1)) verify(mBridge, times(1))
.loadAllJournalKeys(mListOfStringSuccessCallbackArgument.capture(), .loadAllJournalKeys(mStringArraySuccessCallbackArgument.capture(),
mFailureCallbackArgument.capture()); mFailureCallbackArgument.capture());
verify(mListOfStringConsumer, times(1)).accept(mListOfStringCaptor.capture()); verify(mListOfStringConsumer, times(1)).accept(mListOfStringCaptor.capture());
verifyListOfStringResult(answerStrings, true, mListOfStringCaptor.getValue()); verifyListOfStringResult(answerStrings, true, mListOfStringCaptor.getValue());
...@@ -246,11 +234,11 @@ public class FeedJournalStorageTest { ...@@ -246,11 +234,11 @@ public class FeedJournalStorageTest {
List<String> answerStrings = new ArrayList<String>(); List<String> answerStrings = new ArrayList<String>();
Answer<Void> answer = createFailureAnswer(); Answer<Void> answer = createFailureAnswer();
doAnswer(answer).when(mBridge).loadAllJournalKeys( doAnswer(answer).when(mBridge).loadAllJournalKeys(
mListOfStringSuccessCallbackArgument.capture(), mFailureCallbackArgument.capture()); mStringArraySuccessCallbackArgument.capture(), mFailureCallbackArgument.capture());
mJournalStorage.getAllJournals(mListOfStringConsumer); mJournalStorage.getAllJournals(mListOfStringConsumer);
verify(mBridge, times(1)) verify(mBridge, times(1))
.loadAllJournalKeys(mListOfStringSuccessCallbackArgument.capture(), .loadAllJournalKeys(mStringArraySuccessCallbackArgument.capture(),
mFailureCallbackArgument.capture()); mFailureCallbackArgument.capture());
verify(mListOfStringConsumer, times(1)).accept(mListOfStringCaptor.capture()); verify(mListOfStringConsumer, times(1)).accept(mListOfStringCaptor.capture());
assertFalse(mListOfStringCaptor.getValue().isSuccessful()); assertFalse(mListOfStringCaptor.getValue().isSuccessful());
......
...@@ -119,6 +119,12 @@ void FeedContentDatabase::CommitContentMutation( ...@@ -119,6 +119,12 @@ void FeedContentDatabase::CommitContentMutation(
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
DCHECK(content_mutation); DCHECK(content_mutation);
if (content_mutation->Empty()) {
base::ThreadTaskRunnerHandle::Get()->PostTask(
FROM_HERE, base::BindOnce(std::move(callback), true));
return;
}
PerformNextOperation(std::move(content_mutation), std::move(callback)); PerformNextOperation(std::move(content_mutation), std::move(callback));
} }
......
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