Commit 5ecabc8e authored by Vincent Boisselle's avatar Vincent Boisselle Committed by Commit Bot

Reload the cond upload bit on sign-in/out and back/fore-groudind

Change-Id: Ia01b8458da01d15fdf15beefbfa75c5b01a6fc12
Bug: 1138000
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2469517
Commit-Queue: Vincent Boisselle <vincb@google.com>
Reviewed-by: default avatarDan H <harringtond@chromium.org>
Cr-Commit-Position: refs/heads/master@{#818968}
parent b1fa07f8
...@@ -25,6 +25,12 @@ public interface AppLifecycleListener { ...@@ -25,6 +25,12 @@ public interface AppLifecycleListener {
/** Called to clear all data then initiate a refresh. */ /** Called to clear all data then initiate a refresh. */
void onClearAllWithRefresh(); void onClearAllWithRefresh();
/** Called when user signs in. */
void onSignedIn();
/** Called when user signs out. */
void onSignedOut();
/** /**
* Called when the host wants the Feed to perform any heavyweight initialization it might need * Called when the host wants the Feed to perform any heavyweight initialization it might need
* to do. This is the only trigger for the initialization process; if it’s not called, the host * to do. This is the only trigger for the initialization process; if it’s not called, the host
......
...@@ -223,7 +223,7 @@ public final class ProcessScopeBuilder { ...@@ -223,7 +223,7 @@ public final class ProcessScopeBuilder {
FeedSessionManagerFactory fsmFactory = new FeedSessionManagerFactory(taskQueue, store, FeedSessionManagerFactory fsmFactory = new FeedSessionManagerFactory(taskQueue, store,
timingUtils, threadUtils, protocolAdapter, feedRequestManager, timingUtils, threadUtils, protocolAdapter, feedRequestManager,
actionUploadRequestManager, schedulerApi, mConfiguration, mClock, lifecycleListener, actionUploadRequestManager, schedulerApi, mConfiguration, mClock, lifecycleListener,
mainThreadRunner, mBasicLoggingApi); mainThreadRunner, mBasicLoggingApi, actionManager);
FeedSessionManager feedSessionManager = fsmFactory.create(); FeedSessionManager feedSessionManager = fsmFactory.create();
actionManager.initialize(feedSessionManager); actionManager.initialize(feedSessionManager);
RequestManagerImpl clientRequestManager = RequestManagerImpl clientRequestManager =
......
...@@ -4,6 +4,8 @@ ...@@ -4,6 +4,8 @@
package org.chromium.chrome.browser.feed.library.common.testing; package org.chromium.chrome.browser.feed.library.common.testing;
import static org.mockito.Mockito.mock;
import com.google.protobuf.GeneratedMessageLite.GeneratedExtension; import com.google.protobuf.GeneratedMessageLite.GeneratedExtension;
import org.chromium.chrome.browser.feed.library.api.client.lifecycle.AppLifecycleListener; import org.chromium.chrome.browser.feed.library.api.client.lifecycle.AppLifecycleListener;
...@@ -14,6 +16,7 @@ import org.chromium.chrome.browser.feed.library.api.host.proto.ProtoExtensionPro ...@@ -14,6 +16,7 @@ import org.chromium.chrome.browser.feed.library.api.host.proto.ProtoExtensionPro
import org.chromium.chrome.browser.feed.library.api.host.scheduler.SchedulerApi; import org.chromium.chrome.browser.feed.library.api.host.scheduler.SchedulerApi;
import org.chromium.chrome.browser.feed.library.api.host.storage.ContentStorageDirect; import org.chromium.chrome.browser.feed.library.api.host.storage.ContentStorageDirect;
import org.chromium.chrome.browser.feed.library.api.host.storage.JournalStorageDirect; import org.chromium.chrome.browser.feed.library.api.host.storage.JournalStorageDirect;
import org.chromium.chrome.browser.feed.library.api.internal.actionmanager.ActionManager;
import org.chromium.chrome.browser.feed.library.api.internal.modelprovider.ModelProviderFactory; import org.chromium.chrome.browser.feed.library.api.internal.modelprovider.ModelProviderFactory;
import org.chromium.chrome.browser.feed.library.api.internal.protocoladapter.ProtocolAdapter; import org.chromium.chrome.browser.feed.library.api.internal.protocoladapter.ProtocolAdapter;
import org.chromium.chrome.browser.feed.library.api.internal.scope.ClearAllListener; import org.chromium.chrome.browser.feed.library.api.internal.scope.ClearAllListener;
...@@ -106,10 +109,11 @@ public class InfraIntegrationScope { ...@@ -106,10 +109,11 @@ public class InfraIntegrationScope {
FakeActionUploadRequestManager fakeActionUploadRequestManager = FakeActionUploadRequestManager fakeActionUploadRequestManager =
new FakeActionUploadRequestManager(mStore, new FakeViewActionManager(mStore), new FakeActionUploadRequestManager(mStore, new FakeViewActionManager(mStore),
FakeThreadUtils.withThreadChecks()); FakeThreadUtils.withThreadChecks());
ActionManager actionManager = mock(ActionManager.class);
mFeedSessionManager = new FeedSessionManagerFactory(mTaskQueue, mStore, timingUtils, mFeedSessionManager = new FeedSessionManagerFactory(mTaskQueue, mStore, timingUtils,
fakeThreadUtils, mFeedProtocolAdapter, mFakeFeedRequestManager, fakeThreadUtils, mFeedProtocolAdapter, mFakeFeedRequestManager,
fakeActionUploadRequestManager, schedulerApi, configuration, fakeClock, fakeActionUploadRequestManager, schedulerApi, configuration, fakeClock,
mAppLifecycleListener, fakeMainThreadRunner, fakeBasicLoggingApi) mAppLifecycleListener, fakeMainThreadRunner, fakeBasicLoggingApi, actionManager)
.create(); .create();
new ClearAllListener( new ClearAllListener(
mTaskQueue, mFeedSessionManager, mStore, fakeThreadUtils, mAppLifecycleListener); mTaskQueue, mFeedSessionManager, mStore, fakeThreadUtils, mAppLifecycleListener);
......
...@@ -49,6 +49,18 @@ public final class FeedAppLifecycleListener ...@@ -49,6 +49,18 @@ public final class FeedAppLifecycleListener
dispatchLifecycleEvent(LifecycleEvent.CLEAR_ALL_WITH_REFRESH); dispatchLifecycleEvent(LifecycleEvent.CLEAR_ALL_WITH_REFRESH);
} }
@Override
public void onSignedIn() {
mThreadUtils.checkMainThread();
dispatchLifecycleEvent(LifecycleEvent.SIGNED_IN);
}
@Override
public void onSignedOut() {
mThreadUtils.checkMainThread();
dispatchLifecycleEvent(LifecycleEvent.SIGNED_OUT);
}
@Override @Override
public void initialize() { public void initialize() {
mThreadUtils.checkMainThread(); mThreadUtils.checkMainThread();
......
...@@ -14,13 +14,15 @@ public interface FeedLifecycleListener { ...@@ -14,13 +14,15 @@ public interface FeedLifecycleListener {
/** The types of lifecycle events. */ /** The types of lifecycle events. */
@StringDef({LifecycleEvent.ENTER_FOREGROUND, LifecycleEvent.ENTER_BACKGROUND, @StringDef({LifecycleEvent.ENTER_FOREGROUND, LifecycleEvent.ENTER_BACKGROUND,
LifecycleEvent.CLEAR_ALL, LifecycleEvent.CLEAR_ALL_WITH_REFRESH, LifecycleEvent.CLEAR_ALL, LifecycleEvent.CLEAR_ALL_WITH_REFRESH,
LifecycleEvent.INITIALIZE}) LifecycleEvent.INITIALIZE, LifecycleEvent.SIGNED_IN, LifecycleEvent.SIGNED_OUT})
@interface LifecycleEvent { @interface LifecycleEvent {
String ENTER_FOREGROUND = "foreground"; String ENTER_FOREGROUND = "foreground";
String ENTER_BACKGROUND = "background"; String ENTER_BACKGROUND = "background";
String CLEAR_ALL = "clearAll"; String CLEAR_ALL = "clearAll";
String CLEAR_ALL_WITH_REFRESH = "clearAllWithRefresh"; String CLEAR_ALL_WITH_REFRESH = "clearAllWithRefresh";
String INITIALIZE = "initialize"; String INITIALIZE = "initialize";
String SIGNED_IN = "signedIn";
String SIGNED_OUT = "signedOut";
} }
void onLifecycleEvent(@LifecycleEvent String event); void onLifecycleEvent(@LifecycleEvent String event);
......
...@@ -8,6 +8,7 @@ import org.chromium.chrome.browser.feed.library.api.host.config.Configuration; ...@@ -8,6 +8,7 @@ import org.chromium.chrome.browser.feed.library.api.host.config.Configuration;
import org.chromium.chrome.browser.feed.library.api.host.config.Configuration.ConfigKey; import org.chromium.chrome.browser.feed.library.api.host.config.Configuration.ConfigKey;
import org.chromium.chrome.browser.feed.library.api.host.logging.BasicLoggingApi; import org.chromium.chrome.browser.feed.library.api.host.logging.BasicLoggingApi;
import org.chromium.chrome.browser.feed.library.api.host.scheduler.SchedulerApi; import org.chromium.chrome.browser.feed.library.api.host.scheduler.SchedulerApi;
import org.chromium.chrome.browser.feed.library.api.internal.actionmanager.ActionManager;
import org.chromium.chrome.browser.feed.library.api.internal.common.ThreadUtils; import org.chromium.chrome.browser.feed.library.api.internal.common.ThreadUtils;
import org.chromium.chrome.browser.feed.library.api.internal.protocoladapter.ProtocolAdapter; import org.chromium.chrome.browser.feed.library.api.internal.protocoladapter.ProtocolAdapter;
import org.chromium.chrome.browser.feed.library.api.internal.requestmanager.ActionUploadRequestManager; import org.chromium.chrome.browser.feed.library.api.internal.requestmanager.ActionUploadRequestManager;
...@@ -48,6 +49,7 @@ public final class FeedSessionManagerFactory { ...@@ -48,6 +49,7 @@ public final class FeedSessionManagerFactory {
private final FeedObservable<FeedLifecycleListener> mLifecycleListenerObservable; private final FeedObservable<FeedLifecycleListener> mLifecycleListenerObservable;
private final MainThreadRunner mMainThreadRunner; private final MainThreadRunner mMainThreadRunner;
private final BasicLoggingApi mBasicLoggingApi; private final BasicLoggingApi mBasicLoggingApi;
private final ActionManager mActionManager;
public FeedSessionManagerFactory(TaskQueue taskQueue, Store store, TimingUtils timingUtils, public FeedSessionManagerFactory(TaskQueue taskQueue, Store store, TimingUtils timingUtils,
ThreadUtils threadUtils, ProtocolAdapter protocolAdapter, ThreadUtils threadUtils, ProtocolAdapter protocolAdapter,
...@@ -55,7 +57,8 @@ public final class FeedSessionManagerFactory { ...@@ -55,7 +57,8 @@ public final class FeedSessionManagerFactory {
ActionUploadRequestManager actionUploadRequestManager, SchedulerApi schedulerApi, ActionUploadRequestManager actionUploadRequestManager, SchedulerApi schedulerApi,
Configuration configuration, Clock clock, Configuration configuration, Clock clock,
FeedObservable<FeedLifecycleListener> lifecycleListenerObservable, FeedObservable<FeedLifecycleListener> lifecycleListenerObservable,
MainThreadRunner mainThreadRunner, BasicLoggingApi basicLoggingApi) { MainThreadRunner mainThreadRunner, BasicLoggingApi basicLoggingApi,
ActionManager actionManager) {
this.mTaskQueue = taskQueue; this.mTaskQueue = taskQueue;
this.mStore = store; this.mStore = store;
this.mTimingUtils = timingUtils; this.mTimingUtils = timingUtils;
...@@ -69,6 +72,7 @@ public final class FeedSessionManagerFactory { ...@@ -69,6 +72,7 @@ public final class FeedSessionManagerFactory {
this.mLifecycleListenerObservable = lifecycleListenerObservable; this.mLifecycleListenerObservable = lifecycleListenerObservable;
this.mMainThreadRunner = mainThreadRunner; this.mMainThreadRunner = mainThreadRunner;
this.mBasicLoggingApi = basicLoggingApi; this.mBasicLoggingApi = basicLoggingApi;
this.mActionManager = actionManager;
} }
/** Creates a new FeedSessionManager and initializes it */ /** Creates a new FeedSessionManager and initializes it */
...@@ -88,6 +92,6 @@ public final class FeedSessionManagerFactory { ...@@ -88,6 +92,6 @@ public final class FeedSessionManagerFactory {
sessionManagerMutation, contentCache, mStore, mTimingUtils, mThreadUtils, sessionManagerMutation, contentCache, mStore, mTimingUtils, mThreadUtils,
mProtocolAdapter, mFeedRequestManager, mActionUploadRequestManager, mSchedulerApi, mProtocolAdapter, mFeedRequestManager, mActionUploadRequestManager, mSchedulerApi,
mConfiguration, mClock, mLifecycleListenerObservable, mMainThreadRunner, mConfiguration, mClock, mLifecycleListenerObservable, mMainThreadRunner,
mBasicLoggingApi); mBasicLoggingApi, mActionManager);
} }
} }
...@@ -21,6 +21,7 @@ import org.chromium.chrome.browser.feed.library.api.host.logging.Task; ...@@ -21,6 +21,7 @@ import org.chromium.chrome.browser.feed.library.api.host.logging.Task;
import org.chromium.chrome.browser.feed.library.api.host.scheduler.SchedulerApi; import org.chromium.chrome.browser.feed.library.api.host.scheduler.SchedulerApi;
import org.chromium.chrome.browser.feed.library.api.host.scheduler.SchedulerApi.RequestBehavior; import org.chromium.chrome.browser.feed.library.api.host.scheduler.SchedulerApi.RequestBehavior;
import org.chromium.chrome.browser.feed.library.api.host.scheduler.SchedulerApi.SessionState; import org.chromium.chrome.browser.feed.library.api.host.scheduler.SchedulerApi.SessionState;
import org.chromium.chrome.browser.feed.library.api.internal.actionmanager.ActionManager;
import org.chromium.chrome.browser.feed.library.api.internal.common.Model; import org.chromium.chrome.browser.feed.library.api.internal.common.Model;
import org.chromium.chrome.browser.feed.library.api.internal.common.PayloadWithId; import org.chromium.chrome.browser.feed.library.api.internal.common.PayloadWithId;
import org.chromium.chrome.browser.feed.library.api.internal.common.ThreadUtils; import org.chromium.chrome.browser.feed.library.api.internal.common.ThreadUtils;
...@@ -60,6 +61,9 @@ import org.chromium.chrome.browser.feed.library.feedsessionmanager.internal.Sess ...@@ -60,6 +61,9 @@ import org.chromium.chrome.browser.feed.library.feedsessionmanager.internal.Sess
import org.chromium.chrome.browser.feed.library.feedsessionmanager.internal.SessionCache; import org.chromium.chrome.browser.feed.library.feedsessionmanager.internal.SessionCache;
import org.chromium.chrome.browser.feed.library.feedsessionmanager.internal.SessionFactory; import org.chromium.chrome.browser.feed.library.feedsessionmanager.internal.SessionFactory;
import org.chromium.chrome.browser.feed.library.feedsessionmanager.internal.SessionManagerMutation; import org.chromium.chrome.browser.feed.library.feedsessionmanager.internal.SessionManagerMutation;
import org.chromium.chrome.browser.flags.ChromeFeatureList;
import org.chromium.chrome.browser.preferences.Pref;
import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.components.feed.core.proto.libraries.api.internal.StreamDataProto.StreamDataOperation; import org.chromium.components.feed.core.proto.libraries.api.internal.StreamDataProto.StreamDataOperation;
import org.chromium.components.feed.core.proto.libraries.api.internal.StreamDataProto.StreamPayload; import org.chromium.components.feed.core.proto.libraries.api.internal.StreamDataProto.StreamPayload;
import org.chromium.components.feed.core.proto.libraries.api.internal.StreamDataProto.StreamSharedState; import org.chromium.components.feed.core.proto.libraries.api.internal.StreamDataProto.StreamSharedState;
...@@ -71,6 +75,7 @@ import org.chromium.components.feed.core.proto.libraries.api.internal.StreamData ...@@ -71,6 +75,7 @@ import org.chromium.components.feed.core.proto.libraries.api.internal.StreamData
import org.chromium.components.feed.core.proto.wire.ConsistencyTokenProto.ConsistencyToken; import org.chromium.components.feed.core.proto.wire.ConsistencyTokenProto.ConsistencyToken;
import org.chromium.components.feed.core.proto.wire.ContentIdProto.ContentId; import org.chromium.components.feed.core.proto.wire.ContentIdProto.ContentId;
import org.chromium.components.feed.core.proto.wire.PietSharedStateItemProto.PietSharedStateItem; import org.chromium.components.feed.core.proto.wire.PietSharedStateItemProto.PietSharedStateItem;
import org.chromium.components.user_prefs.UserPrefs;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
...@@ -136,6 +141,7 @@ public final class FeedSessionManagerImpl ...@@ -136,6 +141,7 @@ public final class FeedSessionManagerImpl
private final Configuration mConfiguration; private final Configuration mConfiguration;
private final MainThreadRunner mMainThreadRunner; private final MainThreadRunner mMainThreadRunner;
private final BasicLoggingApi mBasicLoggingApi; private final BasicLoggingApi mBasicLoggingApi;
private final ActionManager mActionManager;
private final long mSessionPopulationTimeoutMs; private final long mSessionPopulationTimeoutMs;
private final boolean mUploadingActionsEnabled; private final boolean mUploadingActionsEnabled;
...@@ -157,7 +163,8 @@ public final class FeedSessionManagerImpl ...@@ -157,7 +163,8 @@ public final class FeedSessionManagerImpl
ActionUploadRequestManager actionUploadRequestManager, SchedulerApi schedulerApi, ActionUploadRequestManager actionUploadRequestManager, SchedulerApi schedulerApi,
Configuration configuration, Clock clock, Configuration configuration, Clock clock,
FeedObservable<FeedLifecycleListener> lifecycleListenerObservable, FeedObservable<FeedLifecycleListener> lifecycleListenerObservable,
MainThreadRunner mainThreadRunner, BasicLoggingApi basicLoggingApi) { MainThreadRunner mainThreadRunner, BasicLoggingApi basicLoggingApi,
ActionManager actionManager) {
this.mTaskQueue = taskQueue; this.mTaskQueue = taskQueue;
this.mSessionFactory = sessionFactory; this.mSessionFactory = sessionFactory;
this.mSessionCache = sessionCache; this.mSessionCache = sessionCache;
...@@ -175,6 +182,7 @@ public final class FeedSessionManagerImpl ...@@ -175,6 +182,7 @@ public final class FeedSessionManagerImpl
this.mConfiguration = configuration; this.mConfiguration = configuration;
this.mMainThreadRunner = mainThreadRunner; this.mMainThreadRunner = mainThreadRunner;
this.mBasicLoggingApi = basicLoggingApi; this.mBasicLoggingApi = basicLoggingApi;
this.mActionManager = actionManager;
mUploadingActionsEnabled = mUploadingActionsEnabled =
configuration.getValueOrDefault(ConfigKey.UNDOABLE_ACTIONS_ENABLED, false); configuration.getValueOrDefault(ConfigKey.UNDOABLE_ACTIONS_ENABLED, false);
mSessionPopulationTimeoutMs = mSessionPopulationTimeoutMs =
...@@ -793,10 +801,32 @@ public final class FeedSessionManagerImpl ...@@ -793,10 +801,32 @@ public final class FeedSessionManagerImpl
mOutstandingMutations.size()); mOutstandingMutations.size());
mOutstandingMutations.clear(); mOutstandingMutations.clear();
break; break;
case LifecycleEvent.ENTER_FOREGROUND:
mActionManager.setCanUploadClicksAndViewsWhenNoticeCardIsPresent(canUpload());
break;
case LifecycleEvent.ENTER_BACKGROUND:
mActionManager.setCanUploadClicksAndViewsWhenNoticeCardIsPresent(canUpload());
break;
case LifecycleEvent.SIGNED_IN:
mActionManager.setCanUploadClicksAndViewsWhenNoticeCardIsPresent(canUpload());
break;
case LifecycleEvent.SIGNED_OUT:
mActionManager.setCanUploadClicksAndViewsWhenNoticeCardIsPresent(canUpload());
break;
default: default:
// Do nothing // Do nothing
} }
} }
private boolean canUpload() {
if (ChromeFeatureList.isEnabled(
ChromeFeatureList.INTEREST_FEEDV1_CLICKS_AND_VIEWS_CONDITIONAL_UPLOAD)) {
return UserPrefs.get(Profile.getLastUsedRegularProfile())
.getBoolean(Pref.HAS_REACHED_CLICK_AND_VIEW_ACTIONS_UPLOAD_CONDITIONS);
}
return true;
}
// TODO: implement longer term fix for reading/saving the consistency token // TODO: implement longer term fix for reading/saving the consistency token
@Override @Override
public void triggerUploadActions(Set<StreamUploadableAction> actions) { public void triggerUploadActions(Set<StreamUploadableAction> actions) {
......
...@@ -58,6 +58,18 @@ public class FeedAppLifecycleListenerTest { ...@@ -58,6 +58,18 @@ public class FeedAppLifecycleListenerTest {
verify(mLifecycleListener).onLifecycleEvent(LifecycleEvent.CLEAR_ALL_WITH_REFRESH); verify(mLifecycleListener).onLifecycleEvent(LifecycleEvent.CLEAR_ALL_WITH_REFRESH);
} }
@Test
public void onSignedIn() {
mAppLifecycleListener.onSignedIn();
verify(mLifecycleListener).onLifecycleEvent(LifecycleEvent.SIGNED_IN);
}
@Test
public void onSignedOut() {
mAppLifecycleListener.onSignedOut();
verify(mLifecycleListener).onLifecycleEvent(LifecycleEvent.SIGNED_OUT);
}
@Test @Test
public void onInitialize() { public void onInitialize() {
mAppLifecycleListener.initialize(); mAppLifecycleListener.initialize();
......
...@@ -8,6 +8,7 @@ import static com.google.common.truth.Truth.assertThat; ...@@ -8,6 +8,7 @@ import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.mock; import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
import static org.mockito.MockitoAnnotations.initMocks; import static org.mockito.MockitoAnnotations.initMocks;
...@@ -19,7 +20,9 @@ import com.google.common.collect.ImmutableSet; ...@@ -19,7 +20,9 @@ import com.google.common.collect.ImmutableSet;
import com.google.protobuf.ByteString; import com.google.protobuf.ByteString;
import org.junit.Before; import org.junit.Before;
import org.junit.Rule;
import org.junit.Test; import org.junit.Test;
import org.junit.rules.TestRule;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.mockito.Mock; import org.mockito.Mock;
import org.robolectric.ParameterizedRobolectricTestRunner; import org.robolectric.ParameterizedRobolectricTestRunner;
...@@ -28,6 +31,7 @@ import org.robolectric.ParameterizedRobolectricTestRunner.Parameters; ...@@ -28,6 +31,7 @@ import org.robolectric.ParameterizedRobolectricTestRunner.Parameters;
import org.robolectric.annotation.Config; import org.robolectric.annotation.Config;
import org.chromium.base.Consumer; import org.chromium.base.Consumer;
import org.chromium.base.test.util.JniMocker;
import org.chromium.chrome.browser.feed.library.api.common.MutationContext; import org.chromium.chrome.browser.feed.library.api.common.MutationContext;
import org.chromium.chrome.browser.feed.library.api.host.config.Configuration; import org.chromium.chrome.browser.feed.library.api.host.config.Configuration;
import org.chromium.chrome.browser.feed.library.api.host.config.Configuration.ConfigKey; import org.chromium.chrome.browser.feed.library.api.host.config.Configuration.ConfigKey;
...@@ -36,6 +40,7 @@ import org.chromium.chrome.browser.feed.library.api.host.logging.RequestReason; ...@@ -36,6 +40,7 @@ import org.chromium.chrome.browser.feed.library.api.host.logging.RequestReason;
import org.chromium.chrome.browser.feed.library.api.host.scheduler.SchedulerApi; import org.chromium.chrome.browser.feed.library.api.host.scheduler.SchedulerApi;
import org.chromium.chrome.browser.feed.library.api.host.scheduler.SchedulerApi.RequestBehavior; import org.chromium.chrome.browser.feed.library.api.host.scheduler.SchedulerApi.RequestBehavior;
import org.chromium.chrome.browser.feed.library.api.host.scheduler.SchedulerApi.SessionState; import org.chromium.chrome.browser.feed.library.api.host.scheduler.SchedulerApi.SessionState;
import org.chromium.chrome.browser.feed.library.api.internal.actionmanager.ActionManager;
import org.chromium.chrome.browser.feed.library.api.internal.common.Model; import org.chromium.chrome.browser.feed.library.api.internal.common.Model;
import org.chromium.chrome.browser.feed.library.api.internal.common.SemanticPropertiesWithId; import org.chromium.chrome.browser.feed.library.api.internal.common.SemanticPropertiesWithId;
import org.chromium.chrome.browser.feed.library.api.internal.common.testing.ContentIdGenerators; import org.chromium.chrome.browser.feed.library.api.internal.common.testing.ContentIdGenerators;
...@@ -68,6 +73,10 @@ import org.chromium.chrome.browser.feed.library.testing.protocoladapter.FakeProt ...@@ -68,6 +73,10 @@ import org.chromium.chrome.browser.feed.library.testing.protocoladapter.FakeProt
import org.chromium.chrome.browser.feed.library.testing.requestmanager.FakeActionUploadRequestManager; import org.chromium.chrome.browser.feed.library.testing.requestmanager.FakeActionUploadRequestManager;
import org.chromium.chrome.browser.feed.library.testing.requestmanager.FakeFeedRequestManager; import org.chromium.chrome.browser.feed.library.testing.requestmanager.FakeFeedRequestManager;
import org.chromium.chrome.browser.feed.library.testing.store.FakeStore; import org.chromium.chrome.browser.feed.library.testing.store.FakeStore;
import org.chromium.chrome.browser.flags.ChromeFeatureList;
import org.chromium.chrome.browser.preferences.Pref;
import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.chrome.test.util.browser.Features;
import org.chromium.components.feed.core.proto.libraries.api.internal.StreamDataProto.StreamDataOperation; import org.chromium.components.feed.core.proto.libraries.api.internal.StreamDataProto.StreamDataOperation;
import org.chromium.components.feed.core.proto.libraries.api.internal.StreamDataProto.StreamPayload; import org.chromium.components.feed.core.proto.libraries.api.internal.StreamDataProto.StreamPayload;
import org.chromium.components.feed.core.proto.libraries.api.internal.StreamDataProto.StreamSharedState; import org.chromium.components.feed.core.proto.libraries.api.internal.StreamDataProto.StreamSharedState;
...@@ -84,6 +93,9 @@ import org.chromium.components.feed.core.proto.wire.ConsistencyTokenProto.Consis ...@@ -84,6 +93,9 @@ import org.chromium.components.feed.core.proto.wire.ConsistencyTokenProto.Consis
import org.chromium.components.feed.core.proto.wire.ContentIdProto.ContentId; import org.chromium.components.feed.core.proto.wire.ContentIdProto.ContentId;
import org.chromium.components.feed.core.proto.wire.PietSharedStateItemProto.PietSharedStateItem; import org.chromium.components.feed.core.proto.wire.PietSharedStateItemProto.PietSharedStateItem;
import org.chromium.components.feed.core.proto.wire.ResponseProto.Response; import org.chromium.components.feed.core.proto.wire.ResponseProto.Response;
import org.chromium.components.prefs.PrefService;
import org.chromium.components.user_prefs.UserPrefs;
import org.chromium.components.user_prefs.UserPrefsJni;
import org.chromium.testing.local.LocalRobolectricTestRunner; import org.chromium.testing.local.LocalRobolectricTestRunner;
import java.nio.charset.Charset; import java.nio.charset.Charset;
...@@ -119,8 +131,23 @@ public class FeedSessionManagerImplTest { ...@@ -119,8 +131,23 @@ public class FeedSessionManagerImplTest {
private FakeTaskQueue mFakeTaskQueue; private FakeTaskQueue mFakeTaskQueue;
private FakeThreadUtils mFakeThreadUtils; private FakeThreadUtils mFakeThreadUtils;
private FeedAppLifecycleListener mAppLifecycleListener; private FeedAppLifecycleListener mAppLifecycleListener;
@Rule
public TestRule mFeaturesProcessorRule = new Features.JUnitProcessor();
@Rule
public JniMocker mocker = new JniMocker();
@Mock @Mock
private SchedulerApi mSchedulerApi; private SchedulerApi mSchedulerApi;
@Mock
private UserPrefs.Natives mUserPrefsJniMock;
@Mock
private Profile mProfile;
@Mock
private PrefService mPrefService;
@Mock
private ActionManager mActionManager;
@Parameters @Parameters
public static List<Object[]> data() { public static List<Object[]> data() {
...@@ -133,6 +160,11 @@ public class FeedSessionManagerImplTest { ...@@ -133,6 +160,11 @@ public class FeedSessionManagerImplTest {
@Before @Before
public void setUp() { public void setUp() {
initMocks(this); initMocks(this);
mocker.mock(UserPrefsJni.TEST_HOOKS, mUserPrefsJniMock);
Profile.setLastUsedProfileForTesting(mProfile);
when(mUserPrefsJniMock.get(mProfile)).thenReturn(mPrefService);
mConfiguration = new Configuration.Builder() mConfiguration = new Configuration.Builder()
.put(ConfigKey.UNDOABLE_ACTIONS_ENABLED, mUploadingActionsEnabled) .put(ConfigKey.UNDOABLE_ACTIONS_ENABLED, mUploadingActionsEnabled)
.put(ConfigKey.STORAGE_MISS_THRESHOLD, STORAGE_MISS_THRESHOLD) .put(ConfigKey.STORAGE_MISS_THRESHOLD, STORAGE_MISS_THRESHOLD)
...@@ -742,6 +774,38 @@ public class FeedSessionManagerImplTest { ...@@ -742,6 +774,38 @@ public class FeedSessionManagerImplTest {
verify(modelProviderObserver).onSessionStart(uiContext); verify(modelProviderObserver).onSessionStart(uiContext);
} }
@Test
@Features.EnableFeatures(ChromeFeatureList.INTEREST_FEEDV1_CLICKS_AND_VIEWS_CONDITIONAL_UPLOAD)
public void testLifecycleEventsWhenConditionalUploadFeatureEnabled() {
when(mPrefService.getBoolean(Pref.HAS_REACHED_CLICK_AND_VIEW_ACTIONS_UPLOAD_CONDITIONS))
.thenReturn(false);
FeedSessionManagerImpl sessionManager = createFeedSessionManager(mConfiguration);
sessionManager.onLifecycleEvent(LifecycleEvent.ENTER_FOREGROUND);
sessionManager.onLifecycleEvent(LifecycleEvent.ENTER_BACKGROUND);
sessionManager.onLifecycleEvent(LifecycleEvent.SIGNED_IN);
sessionManager.onLifecycleEvent(LifecycleEvent.SIGNED_OUT);
verify(mActionManager, times(4)).setCanUploadClicksAndViewsWhenNoticeCardIsPresent(false);
}
@Test
@Features.DisableFeatures(ChromeFeatureList.INTEREST_FEEDV1_CLICKS_AND_VIEWS_CONDITIONAL_UPLOAD)
public void testLifecycleEventsWhenConditionalUploadFeatureDisabled() {
when(mPrefService.getBoolean(Pref.HAS_REACHED_CLICK_AND_VIEW_ACTIONS_UPLOAD_CONDITIONS))
.thenReturn(false);
FeedSessionManagerImpl sessionManager = createFeedSessionManager(mConfiguration);
sessionManager.onLifecycleEvent(LifecycleEvent.ENTER_FOREGROUND);
sessionManager.onLifecycleEvent(LifecycleEvent.ENTER_BACKGROUND);
sessionManager.onLifecycleEvent(LifecycleEvent.SIGNED_IN);
sessionManager.onLifecycleEvent(LifecycleEvent.SIGNED_OUT);
verify(mActionManager, times(4)).setCanUploadClicksAndViewsWhenNoticeCardIsPresent(true);
}
private int populateSession(FeedSessionManagerImpl sessionManager, int featureCnt, int idStart, private int populateSession(FeedSessionManagerImpl sessionManager, int featureCnt, int idStart,
boolean reset, boolean reset,
/*@Nullable*/ String sharedStateId) { /*@Nullable*/ String sharedStateId) {
...@@ -806,7 +870,7 @@ public class FeedSessionManagerImplTest { ...@@ -806,7 +870,7 @@ public class FeedSessionManagerImplTest {
return new FeedSessionManagerFactory(mFakeTaskQueue, mFakeStore, mTimingUtils, return new FeedSessionManagerFactory(mFakeTaskQueue, mFakeStore, mTimingUtils,
mFakeThreadUtils, mFakeProtocolAdapter, mFakeRequestManager, mFakeThreadUtils, mFakeProtocolAdapter, mFakeRequestManager,
mFakeActionUploadRequestManager, mSchedulerApi, configuration, mFakeClock, mFakeActionUploadRequestManager, mSchedulerApi, configuration, mFakeClock,
mAppLifecycleListener, mFakeMainThreadRunner, mFakeBasicLoggingApi) mAppLifecycleListener, mFakeMainThreadRunner, mFakeBasicLoggingApi, mActionManager)
.create(); .create();
} }
} }
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