Commit 9ce5a84b authored by Sky Malice's avatar Sky Malice Committed by Commit Bot

[Feed] Guard against calls from Feed after destroy().

Bug: 901414
Change-Id: I7e20f3ed819d61e207d4072486bfbd0022a50b7a
Reviewed-on: https://chromium-review.googlesource.com/c/1345422Reviewed-by: default avatarFilip Gorski <fgorski@chromium.org>
Commit-Queue: Sky Malice <skym@chromium.org>
Cr-Commit-Position: refs/heads/master@{#610883}
parent 715f5589
......@@ -51,7 +51,10 @@ public class FeedContentStorage implements ContentStorage {
@Override
public void get(List<String> keys, Consumer < Result < Map<String, byte[]>>> consumer) {
assert mFeedContentBridge != null;
// Bridge could have been destroyed for policy when this is called.
// See https://crbug.com/901414.
if (mFeedContentBridge == null) return;
mFeedContentBridge.loadContent(keys,
(Map<String, byte[]> data)
-> consumer.accept(Result.success(data)),
......@@ -60,7 +63,10 @@ public class FeedContentStorage implements ContentStorage {
@Override
public void getAll(String prefix, Consumer < Result < Map<String, byte[]>>> consumer) {
assert mFeedContentBridge != null;
// Bridge could have been destroyed for policy when this is called.
// See https://crbug.com/901414.
if (mFeedContentBridge == null) return;
mFeedContentBridge.loadContentByPrefix(prefix,
(Map<String, byte[]> data)
-> consumer.accept(Result.success(data)),
......@@ -69,7 +75,10 @@ public class FeedContentStorage implements ContentStorage {
@Override
public void commit(ContentMutation mutation, Consumer<CommitResult> consumer) {
assert mFeedContentBridge != null;
// Bridge could have been destroyed for policy when this is called.
// See https://crbug.com/901414.
if (mFeedContentBridge == null) return;
mFeedContentBridge.commitContentMutation(mutation,
(Boolean result)
-> consumer.accept(result ? CommitResult.SUCCESS : CommitResult.FAILURE));
......@@ -77,7 +86,10 @@ public class FeedContentStorage implements ContentStorage {
@Override
public void getAllKeys(Consumer < Result < List<String>>> consumer) {
assert mFeedContentBridge != null;
// Bridge could have been destroyed for policy when this is called.
// See https://crbug.com/901414.
if (mFeedContentBridge == null) return;
mFeedContentBridge.loadAllContentKeys(
(String[] keys)
-> consumer.accept(Result.success(Arrays.asList(keys))),
......
......@@ -50,7 +50,10 @@ public class FeedJournalStorage implements JournalStorage {
@Override
public void read(String journalName, Consumer < Result < List<byte[]>>> consumer) {
assert mFeedJournalBridge != null;
// Bridge could have been destroyed for policy when this is called.
// See https://crbug.com/901414.
if (mFeedJournalBridge == null) return;
mFeedJournalBridge.loadJournal(journalName, (byte[][] entries) -> {
List<byte[]> journal = Arrays.asList(entries);
consumer.accept(Result.success(journal));
......@@ -59,7 +62,10 @@ public class FeedJournalStorage implements JournalStorage {
@Override
public void commit(JournalMutation mutation, Consumer<CommitResult> consumer) {
assert mFeedJournalBridge != null;
// Bridge could have been destroyed for policy when this is called.
// See https://crbug.com/901414.
if (mFeedJournalBridge == null) return;
mFeedJournalBridge.commitJournalMutation(mutation,
(Boolean result)
-> consumer.accept(result ? CommitResult.SUCCESS : CommitResult.FAILURE));
......@@ -67,7 +73,10 @@ public class FeedJournalStorage implements JournalStorage {
@Override
public void exists(String journalName, Consumer<Result<Boolean>> consumer) {
assert mFeedJournalBridge != null;
// Bridge could have been destroyed for policy when this is called.
// See https://crbug.com/901414.
if (mFeedJournalBridge == null) return;
mFeedJournalBridge.doesJournalExist(journalName,
(Boolean exist)
-> consumer.accept(Result.success(exist)),
......@@ -76,7 +85,10 @@ public class FeedJournalStorage implements JournalStorage {
@Override
public void getAllJournals(Consumer < Result < List<String>>> consumer) {
assert mFeedJournalBridge != null;
// Bridge could have been destroyed for policy when this is called.
// See https://crbug.com/901414.
if (mFeedJournalBridge == null) return;
mFeedJournalBridge.loadAllJournalKeys(
(String[] data)
-> consumer.accept(Result.success(Arrays.asList(data))),
......@@ -85,7 +97,10 @@ public class FeedJournalStorage implements JournalStorage {
@Override
public void deleteAll(Consumer<CommitResult> consumer) {
assert mFeedJournalBridge != null;
// Bridge could have been destroyed for policy when this is called.
// See https://crbug.com/901414.
if (mFeedJournalBridge == null) return;
mFeedJournalBridge.deleteAllJournals(
(Boolean result)
-> consumer.accept(result ? CommitResult.SUCCESS : CommitResult.FAILURE));
......
......@@ -42,14 +42,20 @@ public class FeedNetworkBridge implements NetworkClient {
@Override
public void send(HttpRequest request, Consumer<HttpResponse> responseConsumer) {
assert mNativeBridge != 0;
// Bridge could have been destroyed for policy when this is called.
// See https://crbug.com/901414.
if (mNativeBridge == 0) return;
nativeSendNetworkRequest(mNativeBridge, request.getUri().toString(), request.getMethod(),
request.getBody(), result -> responseConsumer.accept(result));
}
@Override
public void close() {
assert mNativeBridge != 0;
// Bridge could have been destroyed for policy when this is called.
// See https://crbug.com/901414.
if (mNativeBridge == 0) return;
nativeCancelRequests(mNativeBridge);
}
......
......@@ -57,13 +57,20 @@ public class FeedOfflineBridge
@Override
public Long getOfflineIdIfPageIsOfflined(String url) {
// Bridge could have been destroyed for policy when this is called.
// See https://crbug.com/901414.
if (mNativeBridge == 0) return 0L;
return (Long) nativeGetOfflineId(mNativeBridge, url);
}
@Override
public void getOfflineStatus(
List<String> urlsToRetrieve, Consumer<List<String>> urlListConsumer) {
assert mNativeBridge != 0;
// Bridge could have been destroyed for policy when this is called.
// See https://crbug.com/901414.
if (mNativeBridge == 0) return;
String[] urlsArray = urlsToRetrieve.toArray(new String[urlsToRetrieve.size()]);
nativeGetOfflineStatus(mNativeBridge, urlsArray,
(String[] urlsAsArray) -> urlListConsumer.accept(Arrays.asList(urlsAsArray)));
......@@ -71,13 +78,19 @@ public class FeedOfflineBridge
@Override
public void addOfflineStatusListener(OfflineStatusListener offlineStatusListener) {
assert mNativeBridge != 0;
// Bridge could have been destroyed for policy when this is called.
// See https://crbug.com/901414.
if (mNativeBridge == 0) return;
mListeners.add(offlineStatusListener);
}
@Override
public void removeOfflineStatusListener(OfflineStatusListener offlineStatusListener) {
assert mNativeBridge != 0;
// Bridge could have been destroyed for policy when this is called.
// See https://crbug.com/901414.
if (mNativeBridge == 0) return;
mListeners.remove(offlineStatusListener);
if (mListeners.isEmpty()) {
nativeOnNoListeners(mNativeBridge);
......@@ -86,6 +99,10 @@ public class FeedOfflineBridge
@Override
public void onContentRemoved(List<ContentRemoval> contentRemoved) {
// Bridge could have been destroyed for policy when this is called.
// See https://crbug.com/901414.
if (mNativeBridge == 0) return;
List<String> userDrivenRemovals = takeUserDriveRemovalsOnly(contentRemoved);
if (!userDrivenRemovals.isEmpty()) {
nativeOnContentRemoved(mNativeBridge,
......@@ -95,6 +112,10 @@ public class FeedOfflineBridge
@Override
public void onNewContentReceived(boolean isNewRefresh, long contentCreationDateTimeMs) {
// Bridge could have been destroyed for policy when this is called.
// See https://crbug.com/901414.
if (mNativeBridge == 0) return;
nativeOnNewContentReceived(mNativeBridge);
}
......@@ -124,6 +145,10 @@ public class FeedOfflineBridge
@CalledByNative
private void getKnownContent() {
mKnownContentApi.getKnownContent((List<ContentMetadata> metadataList) -> {
// Bridge could have been destroyed for policy when this is called.
// See https://crbug.com/901414.
if (mNativeBridge == 0) return;
for (ContentMetadata metadata : metadataList) {
long time_published_ms = TimeUnit.SECONDS.toMillis(metadata.getTimePublished());
nativeAppendContentMetadata(mNativeBridge, metadata.getUrl(), metadata.getTitle(),
......
......@@ -95,13 +95,19 @@ public class FeedSchedulerBridge implements FeedScheduler {
@Override
public void onReceiveNewContent(long contentCreationDateTimeMs) {
assert mNativeBridge != 0;
// Bridge could have been destroyed for policy when this is called.
// See https://crbug.com/901414.
if (mNativeBridge != 0) return;
nativeOnReceiveNewContent(mNativeBridge, contentCreationDateTimeMs);
}
@Override
public void onRequestError(int networkResponseCode) {
assert mNativeBridge != 0;
// Bridge could have been destroyed for policy when this is called.
// See https://crbug.com/901414.
if (mNativeBridge != 0) return;
nativeOnRequestError(mNativeBridge, networkResponseCode);
}
......
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