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