Move methods not used by client to new internal RequestManager

PiperOrigin-RevId: 243994362
Change-Id: I2e2732709294f5fc1024e1ed75f7040a7350761b
diff --git a/src/main/java/com/google/android/libraries/feed/api/requestmanager/RequestManager.java b/src/main/java/com/google/android/libraries/feed/api/requestmanager/RequestManager.java
index ab0e5f9..eed5265 100644
--- a/src/main/java/com/google/android/libraries/feed/api/requestmanager/RequestManager.java
+++ b/src/main/java/com/google/android/libraries/feed/api/requestmanager/RequestManager.java
@@ -16,26 +16,18 @@
 
 import com.google.android.libraries.feed.common.Result;
 import com.google.android.libraries.feed.common.functional.Consumer;
-import com.google.android.libraries.feed.common.functional.Supplier;
 import com.google.android.libraries.feed.host.logging.RequestReason;
 import com.google.search.now.feed.client.StreamDataProto.StreamDataOperation;
-import com.google.search.now.feed.client.StreamDataProto.StreamToken;
-import com.google.search.now.wire.feed.ConsistencyTokenProto.ConsistencyToken;
 import java.util.List;
 
 /** Creates and issues requests to the server. */
 public interface RequestManager {
-
   /**
-   * Issues a request for the next page of data. The {@code streamToken} described to the server
-   * what the next page means. The{@code token} is used by the server for consistent data across
-   * requests. The response will be sent to a {@link Consumer} a set of {@link StreamDataOperation}
-   * created by the ProtocolAdapter.
+   * Issues a request to refresh the entire feed.
+   *
+   * @param reason The reason for this refresh.
    */
-  void loadMore(
-      StreamToken streamToken,
-      ConsistencyToken token,
-      Consumer<Result<List<StreamDataOperation>>> consumer);
+  void triggerRefresh(@RequestReason int reason);
 
   /**
    * Issues a request to refresh the entire feed, with the consumer being called back with the
@@ -45,32 +37,4 @@
    */
   void triggerRefresh(
       @RequestReason int reason, Consumer<Result<List<StreamDataOperation>>> consumer);
-
-  /**
-   * Issues a request to refresh the entire feed, with the consumer being called back with the
-   * resulting {@link StreamDataOperation}s.
-   *
-   * @param reason The reason for this refresh.
-   * @param token Used by the server for consistent data across requests.
-   * @param consumer The consumer called after the refresh is performed.
-   */
-  void triggerRefresh(
-      @RequestReason int reason,
-      ConsistencyToken token,
-      Consumer<Result<List<StreamDataOperation>>> consumer);
-  /**
-   * Issues a request to refresh the entire feed.
-   *
-   * @param reason The reason for this refresh.
-   * @throws IllegalStateException if {@link #setDefaultTriggerRefreshConsumerSupplier} has not been
-   *     called.
-   */
-  void triggerRefresh(@RequestReason int reason);
-
-  /**
-   * Sets a supplier that will generate a consumer to be used for the {@link
-   * #triggerRefresh(RequestReason)} method call
-   */
-  void setDefaultTriggerRefreshConsumerSupplier(
-      Supplier<Consumer<Result<List<StreamDataOperation>>>> consumer);
 }
diff --git a/src/main/java/com/google/android/libraries/feed/api/scope/BUILD b/src/main/java/com/google/android/libraries/feed/api/scope/BUILD
index a98da82..058c818 100644
--- a/src/main/java/com/google/android/libraries/feed/api/scope/BUILD
+++ b/src/main/java/com/google/android/libraries/feed/api/scope/BUILD
@@ -46,6 +46,7 @@
         "//src/main/java/com/google/android/libraries/feed/internalapi/actionparser",
         "//src/main/java/com/google/android/libraries/feed/internalapi/modelprovider",
         "//src/main/java/com/google/android/libraries/feed/internalapi/protocoladapter",
+        "//src/main/java/com/google/android/libraries/feed/internalapi/requestmanager",
         "//src/main/java/com/google/android/libraries/feed/internalapi/store",
         "//src/main/java/com/google/android/libraries/feed/piet/host",
         "//src/main/proto/com/google/android/libraries/feed/internalapi/proto:client_feed_java_proto_lite",
diff --git a/src/main/java/com/google/android/libraries/feed/api/scope/FeedProcessScope.java b/src/main/java/com/google/android/libraries/feed/api/scope/FeedProcessScope.java
index a7f9b3b..c435ac6 100644
--- a/src/main/java/com/google/android/libraries/feed/api/scope/FeedProcessScope.java
+++ b/src/main/java/com/google/android/libraries/feed/api/scope/FeedProcessScope.java
@@ -39,7 +39,8 @@
 import com.google.android.libraries.feed.feedknowncontent.FeedKnownContentApi;
 import com.google.android.libraries.feed.feedprotocoladapter.FeedProtocolAdapter;
 import com.google.android.libraries.feed.feedrequestmanager.FeedActionUploadRequestManager;
-import com.google.android.libraries.feed.feedrequestmanager.FeedRequestManager;
+import com.google.android.libraries.feed.feedrequestmanager.FeedRequestManagerImpl;
+import com.google.android.libraries.feed.feedrequestmanager.RequestManagerImpl;
 import com.google.android.libraries.feed.feedsessionmanager.FeedSessionManagerFactory;
 import com.google.android.libraries.feed.feedstore.ContentStorageDirectImpl;
 import com.google.android.libraries.feed.feedstore.FeedStore;
@@ -71,6 +72,7 @@
 import com.google.android.libraries.feed.internalapi.actionmanager.ActionManager;
 import com.google.android.libraries.feed.internalapi.actionmanager.ActionReader;
 import com.google.android.libraries.feed.internalapi.protocoladapter.ProtocolAdapter;
+import com.google.android.libraries.feed.internalapi.requestmanager.FeedRequestManager;
 import com.google.android.libraries.feed.internalapi.store.Store;
 import java.util.ArrayList;
 import java.util.concurrent.ExecutorService;
@@ -281,7 +283,7 @@
     private final ApplicationInfo applicationInfo;
 
     // Optional fields - if they are not provided, we will use default implementations.
-    /*@MonotonicNonNull*/ private RequestManager requestManager = null;
+    /*@MonotonicNonNull*/ private FeedRequestManager feedRequestManager = null;
     /*@MonotonicNonNull*/ private ActionUploadRequestManager actionUploadRequestManager = null;
     /*@MonotonicNonNull*/ private SessionManager sessionManager = null;
     /*@MonotonicNonNull*/ private ProtocolAdapter protocolAdapter = null;
@@ -324,8 +326,8 @@
       return this;
     }
 
-    public Builder setRequestManager(RequestManager requestManager) {
-      this.requestManager = requestManager;
+    public Builder setFeedRequestManager(FeedRequestManager feedRequestManager) {
+      this.feedRequestManager = feedRequestManager;
       return this;
     }
 
@@ -480,9 +482,9 @@
       }
       ActionReader actionReader =
           new FeedActionReader(store, clock, protocolAdapter, taskQueue, configuration);
-      if (requestManager == null) {
-        requestManager =
-            new FeedRequestManager(
+      if (feedRequestManager == null) {
+        feedRequestManager =
+            new FeedRequestManagerImpl(
                 configuration,
                 networkClient,
                 protocolAdapter,
@@ -519,7 +521,7 @@
                 timingUtils,
                 threadUtils,
                 protocolAdapter,
-                requestManager,
+                feedRequestManager,
                 actionUploadRequestManager,
                 schedulerApi,
                 configuration,
@@ -527,8 +529,8 @@
                 lifecycleListener);
         sessionManager = fsmFactory.create();
       }
-      requestManager.setDefaultTriggerRefreshConsumerSupplier(
-          sessionManager.getTriggerRefreshConsumer());
+      RequestManagerImpl clientRequestManager =
+          new RequestManagerImpl(feedRequestManager, sessionManager);
       ActionManager actionManager =
           new FeedActionManagerImpl(
               sessionManager, store, threadUtils, taskQueue, getOrCreateMainThreadRunner());
@@ -544,7 +546,7 @@
           basicLoggingApi,
           networkClient,
           Validators.checkNotNull(protocolAdapter),
-          Validators.checkNotNull(requestManager),
+          Validators.checkNotNull(clientRequestManager),
           Validators.checkNotNull(actionUploadRequestManager),
           Validators.checkNotNull(sessionManager),
           store,
diff --git a/src/main/java/com/google/android/libraries/feed/api/sessionmanager/SessionManager.java b/src/main/java/com/google/android/libraries/feed/api/sessionmanager/SessionManager.java
index fb0229c..470bfe1 100644
--- a/src/main/java/com/google/android/libraries/feed/api/sessionmanager/SessionManager.java
+++ b/src/main/java/com/google/android/libraries/feed/api/sessionmanager/SessionManager.java
@@ -21,7 +21,6 @@
 import com.google.android.libraries.feed.common.Result;
 import com.google.android.libraries.feed.common.functional.Consumer;
 import com.google.android.libraries.feed.common.functional.Function;
-import com.google.android.libraries.feed.common.functional.Supplier;
 import com.google.android.libraries.feed.host.logging.RequestReason;
 import com.google.android.libraries.feed.internalapi.modelprovider.ModelProvider;
 import com.google.android.libraries.feed.internalapi.modelprovider.ModelProvider.ViewDepthProvider;
@@ -114,12 +113,6 @@
   Consumer<Result<List<StreamDataOperation>>> getUpdateConsumer(MutationContext mutationContext);
 
   /**
-   * Returns a consumer that can be used as the default consumer for doing a TriggerRefresh on the
-   * {@link com.google.android.libraries.feed.api.requestmanager.RequestManager}.
-   */
-  Supplier<Consumer<Result<List<StreamDataOperation>>>> getTriggerRefreshConsumer();
-
-  /**
    * Create a filtered {@link List} of {@code T} objects and return it through the {@link Consumer}.
    * The {@code filterPredicate} function will be applied to each node in the structured tree
    * defined by $HEAD. The method acts as both a transformer to create type {@code T} and as a
diff --git a/src/main/java/com/google/android/libraries/feed/common/testing/InfraIntegrationScope.java b/src/main/java/com/google/android/libraries/feed/common/testing/InfraIntegrationScope.java
index b5d606f..51ae620 100644
--- a/src/main/java/com/google/android/libraries/feed/common/testing/InfraIntegrationScope.java
+++ b/src/main/java/com/google/android/libraries/feed/common/testing/InfraIntegrationScope.java
@@ -43,7 +43,7 @@
 import com.google.android.libraries.feed.testing.host.logging.FakeBasicLoggingApi;
 import com.google.android.libraries.feed.testing.host.scheduler.FakeSchedulerApi;
 import com.google.android.libraries.feed.testing.requestmanager.FakeActionUploadRequestManager;
-import com.google.android.libraries.feed.testing.requestmanager.FakeRequestManager;
+import com.google.android.libraries.feed.testing.requestmanager.FakeFeedRequestManager;
 import com.google.protobuf.GeneratedMessageLite.GeneratedExtension;
 import java.util.ArrayList;
 import java.util.List;
@@ -68,7 +68,7 @@
   private final Executor executor;
   private final FakeClock fakeClock;
   private final FakeMainThreadRunner fakeMainThreadRunner;
-  private final FakeRequestManager fakeRequestManager;
+  private final FakeFeedRequestManager fakeFeedRequestManager;
   private final FakeThreadUtils fakeThreadUtils;
   private final FeedAppLifecycleListener appLifecycleListener;
   private final FeedModelProviderFactory modelProviderFactory;
@@ -114,8 +114,8 @@
             fakeBasicLoggingApi,
             fakeMainThreadRunner);
     feedProtocolAdapter = new FeedProtocolAdapter(timingUtils);
-    fakeRequestManager =
-        new FakeRequestManager(
+    fakeFeedRequestManager =
+        new FakeFeedRequestManager(
             fakeThreadUtils, fakeMainThreadRunner, feedProtocolAdapter, taskQueue);
     FakeActionUploadRequestManager fakeActionUploadRequestManager =
         new FakeActionUploadRequestManager(FakeThreadUtils.withThreadChecks());
@@ -126,7 +126,7 @@
                 timingUtils,
                 fakeThreadUtils,
                 feedProtocolAdapter,
-                fakeRequestManager,
+                fakeFeedRequestManager,
                 fakeActionUploadRequestManager,
                 schedulerApi,
                 configuration,
@@ -178,8 +178,8 @@
     return taskQueue;
   }
 
-  public FakeRequestManager getRequestManager() {
-    return fakeRequestManager;
+  public FakeFeedRequestManager getFakeFeedRequestManager() {
+    return fakeFeedRequestManager;
   }
 
   public AppLifecycleListener getAppLifecycleListener() {
diff --git a/src/main/java/com/google/android/libraries/feed/common/testing/SessionTestUtils.java b/src/main/java/com/google/android/libraries/feed/common/testing/SessionTestUtils.java
index 15bf30d..11ddb67 100644
--- a/src/main/java/com/google/android/libraries/feed/common/testing/SessionTestUtils.java
+++ b/src/main/java/com/google/android/libraries/feed/common/testing/SessionTestUtils.java
@@ -84,7 +84,7 @@
   /** Populates HEAD with data. */
   public void populateHead() {
     scope
-        .getRequestManager()
+        .getFakeFeedRequestManager()
         .queueResponse(ResponseBuilder.forClearAllWithCards(REQUEST_1).build())
         .triggerRefresh(
             RequestReason.OPEN_WITHOUT_CONTENT,
@@ -93,14 +93,14 @@
 
   /** Enqueues an error response and returns the delay in milliseconds. */
   public long queueError() {
-    scope.getRequestManager().queueError(currentDelay);
+    scope.getFakeFeedRequestManager().queueError(currentDelay);
     return currentDelay;
   }
 
   /** Enqueues a response and returns the delay in milliseconds. */
   public long queueRequest() {
     scope
-        .getRequestManager()
+        .getFakeFeedRequestManager()
         .queueResponse(ResponseBuilder.forClearAllWithCards(REQUEST_2).build(), currentDelay);
     return currentDelay;
   }
@@ -109,7 +109,7 @@
   public long startOutstandingRequestWithError() {
     long delayMs = queueError();
     scope
-        .getRequestManager()
+        .getFakeFeedRequestManager()
         .triggerRefresh(
             RequestReason.OPEN_WITHOUT_CONTENT,
             scope.getSessionManager().getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
@@ -120,7 +120,7 @@
   public long startOutstandingRequest() {
     long delayMs = queueRequest();
     scope
-        .getRequestManager()
+        .getFakeFeedRequestManager()
         .triggerRefresh(
             RequestReason.OPEN_WITHOUT_CONTENT,
             scope.getSessionManager().getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
diff --git a/src/main/java/com/google/android/libraries/feed/feedrequestmanager/BUILD b/src/main/java/com/google/android/libraries/feed/feedrequestmanager/BUILD
index 13e2836..39b4361 100644
--- a/src/main/java/com/google/android/libraries/feed/feedrequestmanager/BUILD
+++ b/src/main/java/com/google/android/libraries/feed/feedrequestmanager/BUILD
@@ -8,6 +8,7 @@
     deps = [
         "//src/main/java/com/google/android/libraries/feed/api/common",
         "//src/main/java/com/google/android/libraries/feed/api/requestmanager",
+        "//src/main/java/com/google/android/libraries/feed/api/sessionmanager",
         "//src/main/java/com/google/android/libraries/feed/common",
         "//src/main/java/com/google/android/libraries/feed/common/concurrent",
         "//src/main/java/com/google/android/libraries/feed/common/functional",
@@ -24,6 +25,7 @@
         "//src/main/java/com/google/android/libraries/feed/host/stream",
         "//src/main/java/com/google/android/libraries/feed/internalapi/actionmanager",
         "//src/main/java/com/google/android/libraries/feed/internalapi/protocoladapter",
+        "//src/main/java/com/google/android/libraries/feed/internalapi/requestmanager",
         "//src/main/java/com/google/android/libraries/feed/internalapi/store",
         "//src/main/proto/com/google/android/libraries/feed/internalapi/proto:client_feed_java_proto_lite",
         "//src/main/proto/search/now/wire/feed:feed_java_proto_lite",
diff --git a/src/main/java/com/google/android/libraries/feed/feedrequestmanager/FeedRequestManager.java b/src/main/java/com/google/android/libraries/feed/feedrequestmanager/FeedRequestManagerImpl.java
similarity index 94%
rename from src/main/java/com/google/android/libraries/feed/feedrequestmanager/FeedRequestManager.java
rename to src/main/java/com/google/android/libraries/feed/feedrequestmanager/FeedRequestManagerImpl.java
index ef76f0a..366084a 100644
--- a/src/main/java/com/google/android/libraries/feed/feedrequestmanager/FeedRequestManager.java
+++ b/src/main/java/com/google/android/libraries/feed/feedrequestmanager/FeedRequestManagerImpl.java
@@ -19,13 +19,11 @@
 import android.util.DisplayMetrics;
 import com.google.android.libraries.feed.api.common.DismissActionWithSemanticProperties;
 import com.google.android.libraries.feed.api.common.ThreadUtils;
-import com.google.android.libraries.feed.api.requestmanager.RequestManager;
 import com.google.android.libraries.feed.common.Result;
 import com.google.android.libraries.feed.common.concurrent.MainThreadRunner;
 import com.google.android.libraries.feed.common.concurrent.TaskQueue;
 import com.google.android.libraries.feed.common.concurrent.TaskQueue.TaskType;
 import com.google.android.libraries.feed.common.functional.Consumer;
-import com.google.android.libraries.feed.common.functional.Supplier;
 import com.google.android.libraries.feed.common.locale.LocaleUtils;
 import com.google.android.libraries.feed.common.logging.Logger;
 import com.google.android.libraries.feed.common.protoextensions.FeedExtensionRegistry;
@@ -46,6 +44,7 @@
 import com.google.android.libraries.feed.host.stream.TooltipSupportedApi;
 import com.google.android.libraries.feed.internalapi.actionmanager.ActionReader;
 import com.google.android.libraries.feed.internalapi.protocoladapter.ProtocolAdapter;
+import com.google.android.libraries.feed.internalapi.requestmanager.FeedRequestManager;
 import com.google.android.libraries.feed.internalapi.store.LocalActionMutation.ActionType;
 import com.google.protobuf.ByteString;
 import com.google.search.now.feed.client.StreamDataProto.StreamDataOperation;
@@ -77,9 +76,9 @@
 import java.util.List;
 import java.util.Map;
 
-/** Default implementation of RequestManager. */
-public final class FeedRequestManager implements RequestManager {
-  private static final String TAG = "FeedRequestManager";
+/** Default implementation of FeedRequestManager. */
+public final class FeedRequestManagerImpl implements FeedRequestManager {
+  private static final String TAG = "FeedRequestManagerImpl";
 
   private final Configuration configuration;
   private final NetworkClient networkClient;
@@ -96,11 +95,7 @@
   private final TooltipSupportedApi tooltipSupportedApi;
   private final ApplicationInfo applicationInfo;
 
-  /*@Nullable*/
-  private Supplier<Consumer<Result<List<StreamDataOperation>>>>
-      defaultTriggerRefreshConsumerSupplier;
-
-  public FeedRequestManager(
+  public FeedRequestManagerImpl(
       Configuration configuration,
       NetworkClient networkClient,
       ProtocolAdapter protocolAdapter,
@@ -138,7 +133,7 @@
       Consumer<Result<List<StreamDataOperation>>> consumer) {
     threadUtils.checkNotMainThread();
 
-    Logger.i(TAG, "Task: FeedRequestManager LoadMore");
+    Logger.i(TAG, "Task: FeedRequestManagerImpl LoadMore");
     ElapsedTimeTracker timeTracker = timingUtils.getElapsedTimeTracker(TAG);
     RequestBuilder request =
         newDefaultRequest(RequestReason.MANUAL_CONTINUATION)
@@ -146,7 +141,7 @@
             .setConsistencyToken(token);
     executeRequest(request, consumer);
     timeTracker.stop(
-        "task", "FeedRequestManager LoadMore", "token", streamToken.getNextPageToken());
+        "task", "FeedRequestManagerImpl LoadMore", "token", streamToken.getNextPageToken());
   }
 
   @Override
@@ -175,22 +170,6 @@
     }
   }
 
-  @Override
-  public void triggerRefresh(@RequestReason int reason) {
-    if (defaultTriggerRefreshConsumerSupplier == null) {
-      throw new IllegalStateException(
-          "Must set defaultTriggerRefreshConsumerSupplier before calling "
-              + "triggerRefresh(RequestReason).");
-    }
-    triggerRefresh(reason, defaultTriggerRefreshConsumerSupplier.get());
-  }
-
-  @Override
-  public void setDefaultTriggerRefreshConsumerSupplier(
-      Supplier<Consumer<Result<List<StreamDataOperation>>>> consumerSupplier) {
-    this.defaultTriggerRefreshConsumerSupplier = consumerSupplier;
-  }
-
   private RequestBuilder newDefaultRequest(@RequestReason int requestReason) {
     return new RequestBuilder(context, applicationInfo, configuration, requestReason);
   }
@@ -327,7 +306,7 @@
             contextResult = Result.failure();
           }
           mainThreadRunner.execute(
-              "FeedRequestManager consumer", () -> consumer.accept(contextResult));
+              "FeedRequestManagerImpl consumer", () -> consumer.accept(contextResult));
         });
   }
 
diff --git a/src/main/java/com/google/android/libraries/feed/feedrequestmanager/RequestManagerImpl.java b/src/main/java/com/google/android/libraries/feed/feedrequestmanager/RequestManagerImpl.java
new file mode 100644
index 0000000..2615dab
--- /dev/null
+++ b/src/main/java/com/google/android/libraries/feed/feedrequestmanager/RequestManagerImpl.java
@@ -0,0 +1,50 @@
+// Copyright 2019 The Feed Authors.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package com.google.android.libraries.feed.feedrequestmanager;
+
+import com.google.android.libraries.feed.api.common.MutationContext;
+import com.google.android.libraries.feed.api.requestmanager.RequestManager;
+import com.google.android.libraries.feed.api.sessionmanager.SessionManager;
+import com.google.android.libraries.feed.common.Result;
+import com.google.android.libraries.feed.common.functional.Consumer;
+import com.google.android.libraries.feed.host.logging.RequestReason;
+import com.google.android.libraries.feed.internalapi.requestmanager.FeedRequestManager;
+import com.google.search.now.feed.client.StreamDataProto.StreamDataOperation;
+import java.util.List;
+
+/** Implementation of Client-visible RequestManagerApi. */
+public final class RequestManagerImpl implements RequestManager {
+  private static final String TAG = "RequestManagerImpl";
+
+  private final FeedRequestManager feedRequestManager;
+  private final SessionManager sessionManager;
+
+  public RequestManagerImpl(FeedRequestManager feedRequestManager, SessionManager sessionManager) {
+    this.feedRequestManager = feedRequestManager;
+    this.sessionManager = sessionManager;
+  }
+
+  @Override
+  public void triggerRefresh(
+      @RequestReason int reason, Consumer<Result<List<StreamDataOperation>>> consumer) {
+    feedRequestManager.triggerRefresh(reason, consumer);
+  }
+
+  @Override
+  public void triggerRefresh(@RequestReason int reason) {
+    feedRequestManager.triggerRefresh(
+        reason, sessionManager.getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
+  }
+}
diff --git a/src/main/java/com/google/android/libraries/feed/feedsessionmanager/BUILD b/src/main/java/com/google/android/libraries/feed/feedsessionmanager/BUILD
index 46180b8..1ab9108 100644
--- a/src/main/java/com/google/android/libraries/feed/feedsessionmanager/BUILD
+++ b/src/main/java/com/google/android/libraries/feed/feedsessionmanager/BUILD
@@ -24,6 +24,7 @@
         "//src/main/java/com/google/android/libraries/feed/host/scheduler",
         "//src/main/java/com/google/android/libraries/feed/internalapi/modelprovider",
         "//src/main/java/com/google/android/libraries/feed/internalapi/protocoladapter",
+        "//src/main/java/com/google/android/libraries/feed/internalapi/requestmanager",
         "//src/main/java/com/google/android/libraries/feed/internalapi/store",
         "//src/main/proto/com/google/android/libraries/feed/internalapi/proto:client_feed_java_proto_lite",
         "//src/main/proto/search/now/wire/feed:feed_java_proto_lite",
diff --git a/src/main/java/com/google/android/libraries/feed/feedsessionmanager/FeedSessionManager.java b/src/main/java/com/google/android/libraries/feed/feedsessionmanager/FeedSessionManager.java
index 82eac31..88302e4 100644
--- a/src/main/java/com/google/android/libraries/feed/feedsessionmanager/FeedSessionManager.java
+++ b/src/main/java/com/google/android/libraries/feed/feedsessionmanager/FeedSessionManager.java
@@ -20,7 +20,6 @@
 import com.google.android.libraries.feed.api.common.ThreadUtils;
 import com.google.android.libraries.feed.api.knowncontent.KnownContentApi.KnownContentListener;
 import com.google.android.libraries.feed.api.requestmanager.ActionUploadRequestManager;
-import com.google.android.libraries.feed.api.requestmanager.RequestManager;
 import com.google.android.libraries.feed.api.sessionmanager.SessionManager;
 import com.google.android.libraries.feed.common.Result;
 import com.google.android.libraries.feed.common.Validators;
@@ -29,7 +28,6 @@
 import com.google.android.libraries.feed.common.feedobservable.FeedObservable;
 import com.google.android.libraries.feed.common.functional.Consumer;
 import com.google.android.libraries.feed.common.functional.Function;
-import com.google.android.libraries.feed.common.functional.Supplier;
 import com.google.android.libraries.feed.common.intern.HashPoolInterner;
 import com.google.android.libraries.feed.common.intern.InternedMap;
 import com.google.android.libraries.feed.common.intern.Interner;
@@ -62,6 +60,7 @@
 import com.google.android.libraries.feed.internalapi.modelprovider.ModelProvider;
 import com.google.android.libraries.feed.internalapi.modelprovider.ModelProvider.ViewDepthProvider;
 import com.google.android.libraries.feed.internalapi.protocoladapter.ProtocolAdapter;
+import com.google.android.libraries.feed.internalapi.requestmanager.FeedRequestManager;
 import com.google.android.libraries.feed.internalapi.store.Store;
 import com.google.android.libraries.feed.internalapi.store.StoreListener;
 import com.google.search.now.feed.client.StreamDataProto.StreamDataOperation;
@@ -129,7 +128,7 @@
   private final ThreadUtils threadUtils;
   private final TimingUtils timingUtils;
   private final ProtocolAdapter protocolAdapter;
-  private final RequestManager requestManager;
+  private final FeedRequestManager feedRequestManager;
   private final ActionUploadRequestManager actionUploadRequestManager;
   private final SchedulerApi schedulerApi;
   private final TaskQueue taskQueue;
@@ -156,7 +155,7 @@
       TimingUtils timingUtils,
       ThreadUtils threadUtils,
       ProtocolAdapter protocolAdapter,
-      RequestManager requestManager,
+      FeedRequestManager feedRequestManager,
       ActionUploadRequestManager actionUploadRequestManager,
       SchedulerApi schedulerApi,
       Configuration configuration,
@@ -172,7 +171,7 @@
     this.timingUtils = timingUtils;
     this.threadUtils = threadUtils;
     this.protocolAdapter = protocolAdapter;
-    this.requestManager = requestManager;
+    this.feedRequestManager = feedRequestManager;
     this.actionUploadRequestManager = actionUploadRequestManager;
     this.schedulerApi = schedulerApi;
     this.clock = clock;
@@ -200,11 +199,6 @@
     taskQueue.initialize(this::initializationTask);
   }
 
-  @Override
-  public Supplier<Consumer<Result<List<StreamDataOperation>>>> getTriggerRefreshConsumer() {
-    return () -> getCommitter("triggerRefresh", MutationContext.EMPTY_CONTEXT);
-  }
-
   // Task which initializes the Session Manager.  This must be the first task run on the
   // Session Manager thread so it's complete before we create any sessions.
   private void initializationTask() {
@@ -522,7 +516,7 @@
               getConsistencyToken(),
               result -> {
                 ConsistencyToken token = handleUpdateConsistencyToken(result);
-                requestManager.loadMore(
+                feedRequestManager.loadMore(
                     streamToken, token, getCommitter("handleToken", mutationContext));
               });
         });
@@ -574,7 +568,7 @@
         getConsistencyToken(),
         result -> {
           ConsistencyToken consistencyToken = handleUpdateConsistencyToken(result);
-          requestManager.triggerRefresh(
+          feedRequestManager.triggerRefresh(
               requestReason,
               consistencyToken,
               getCommitter(
diff --git a/src/main/java/com/google/android/libraries/feed/feedsessionmanager/FeedSessionManagerFactory.java b/src/main/java/com/google/android/libraries/feed/feedsessionmanager/FeedSessionManagerFactory.java
index c826997..828274b 100644
--- a/src/main/java/com/google/android/libraries/feed/feedsessionmanager/FeedSessionManagerFactory.java
+++ b/src/main/java/com/google/android/libraries/feed/feedsessionmanager/FeedSessionManagerFactory.java
@@ -16,7 +16,6 @@
 
 import com.google.android.libraries.feed.api.common.ThreadUtils;
 import com.google.android.libraries.feed.api.requestmanager.ActionUploadRequestManager;
-import com.google.android.libraries.feed.api.requestmanager.RequestManager;
 import com.google.android.libraries.feed.common.concurrent.TaskQueue;
 import com.google.android.libraries.feed.common.feedobservable.FeedObservable;
 import com.google.android.libraries.feed.common.time.Clock;
@@ -30,6 +29,7 @@
 import com.google.android.libraries.feed.host.config.Configuration.ConfigKey;
 import com.google.android.libraries.feed.host.scheduler.SchedulerApi;
 import com.google.android.libraries.feed.internalapi.protocoladapter.ProtocolAdapter;
+import com.google.android.libraries.feed.internalapi.requestmanager.FeedRequestManager;
 import com.google.android.libraries.feed.internalapi.store.Store;
 import java.util.concurrent.TimeUnit;
 
@@ -46,7 +46,7 @@
   private final TimingUtils timingUtils;
   private final ThreadUtils threadUtils;
   private final ProtocolAdapter protocolAdapter;
-  private final RequestManager requestManager;
+  private final FeedRequestManager feedRequestManager;
   private final ActionUploadRequestManager actionUploadRequestManager;
   private final SchedulerApi schedulerApi;
   private final Configuration configuration;
@@ -59,7 +59,7 @@
       TimingUtils timingUtils,
       ThreadUtils threadUtils,
       ProtocolAdapter protocolAdapter,
-      RequestManager requestManager,
+      FeedRequestManager feedRequestManager,
       ActionUploadRequestManager actionUploadRequestManager,
       SchedulerApi schedulerApi,
       Configuration configuration,
@@ -70,7 +70,7 @@
     this.timingUtils = timingUtils;
     this.threadUtils = threadUtils;
     this.protocolAdapter = protocolAdapter;
-    this.requestManager = requestManager;
+    this.feedRequestManager = feedRequestManager;
     this.actionUploadRequestManager = actionUploadRequestManager;
     this.schedulerApi = schedulerApi;
     this.configuration = configuration;
@@ -109,7 +109,7 @@
         timingUtils,
         threadUtils,
         protocolAdapter,
-        requestManager,
+        feedRequestManager,
         actionUploadRequestManager,
         schedulerApi,
         configuration,
diff --git a/src/main/java/com/google/android/libraries/feed/internalapi/requestmanager/BUILD b/src/main/java/com/google/android/libraries/feed/internalapi/requestmanager/BUILD
new file mode 100644
index 0000000..550548c
--- /dev/null
+++ b/src/main/java/com/google/android/libraries/feed/internalapi/requestmanager/BUILD
@@ -0,0 +1,15 @@
+package(default_visibility = ["//visibility:public"])
+
+licenses(["notice"])  # Apache 2
+
+java_library(
+    name = "requestmanager",
+    srcs = glob(["*.java"]),
+    deps = [
+        "//src/main/java/com/google/android/libraries/feed/common",
+        "//src/main/java/com/google/android/libraries/feed/common/functional",
+        "//src/main/java/com/google/android/libraries/feed/host/logging",
+        "//src/main/proto/com/google/android/libraries/feed/internalapi/proto:client_feed_java_proto_lite",
+        "//src/main/proto/search/now/wire/feed:feed_java_proto_lite",
+    ],
+)
diff --git a/src/main/java/com/google/android/libraries/feed/internalapi/requestmanager/FeedRequestManager.java b/src/main/java/com/google/android/libraries/feed/internalapi/requestmanager/FeedRequestManager.java
new file mode 100644
index 0000000..8384793
--- /dev/null
+++ b/src/main/java/com/google/android/libraries/feed/internalapi/requestmanager/FeedRequestManager.java
@@ -0,0 +1,64 @@
+// Copyright 2018 The Feed Authors.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package com.google.android.libraries.feed.internalapi.requestmanager;
+
+import com.google.android.libraries.feed.common.Result;
+import com.google.android.libraries.feed.common.functional.Consumer;
+import com.google.android.libraries.feed.host.logging.RequestReason;
+import com.google.search.now.feed.client.StreamDataProto.StreamDataOperation;
+import com.google.search.now.feed.client.StreamDataProto.StreamToken;
+import com.google.search.now.wire.feed.ConsistencyTokenProto.ConsistencyToken;
+import java.util.List;
+
+/**
+ * Creates and issues requests to the server.
+ *
+ * <p>Note: this is the internal version of FeedRequestManager. See {@link RequestManager} for the
+ * client version.
+ */
+public interface FeedRequestManager {
+  /**
+   * Issues a request for the next page of data. The {@code streamToken} described to the server
+   * what the next page means. The{@code token} is used by the server for consistent data across
+   * requests. The response will be sent to a {@link Consumer} a set of {@link StreamDataOperation}
+   * created by the ProtocolAdapter.
+   */
+  void loadMore(
+      StreamToken streamToken,
+      ConsistencyToken token,
+      Consumer<Result<List<StreamDataOperation>>> consumer);
+
+  /**
+   * Issues a request to refresh the entire feed, with the consumer being called back with the
+   * resulting {@link StreamDataOperation}s.
+   *
+   * @param reason The reason for this refresh.
+   */
+  void triggerRefresh(
+      @RequestReason int reason, Consumer<Result<List<StreamDataOperation>>> consumer);
+
+  /**
+   * Issues a request to refresh the entire feed, with the consumer being called back with the
+   * resulting {@link StreamDataOperation}s.
+   *
+   * @param reason The reason for this refresh.
+   * @param token Used by the server for consistent data across requests.
+   * @param consumer The consumer called after the refresh is performed.
+   */
+  void triggerRefresh(
+      @RequestReason int reason,
+      ConsistencyToken token,
+      Consumer<Result<List<StreamDataOperation>>> consumer);
+}
diff --git a/src/main/java/com/google/android/libraries/feed/testing/requestmanager/BUILD b/src/main/java/com/google/android/libraries/feed/testing/requestmanager/BUILD
index a5af09f..aaa3bb5 100644
--- a/src/main/java/com/google/android/libraries/feed/testing/requestmanager/BUILD
+++ b/src/main/java/com/google/android/libraries/feed/testing/requestmanager/BUILD
@@ -14,6 +14,7 @@
         "//src/main/java/com/google/android/libraries/feed/common/functional",
         "//src/main/java/com/google/android/libraries/feed/host/logging",
         "//src/main/java/com/google/android/libraries/feed/internalapi/protocoladapter",
+        "//src/main/java/com/google/android/libraries/feed/internalapi/requestmanager",
         "//src/main/proto/com/google/android/libraries/feed/internalapi/proto:client_feed_java_proto_lite",
         "//src/main/proto/search/now/wire/feed:feed_java_proto_lite",
         "@com_google_code_findbugs_jsr305//jar",
diff --git a/src/main/java/com/google/android/libraries/feed/testing/requestmanager/FakeRequestManager.java b/src/main/java/com/google/android/libraries/feed/testing/requestmanager/FakeFeedRequestManager.java
similarity index 80%
rename from src/main/java/com/google/android/libraries/feed/testing/requestmanager/FakeRequestManager.java
rename to src/main/java/com/google/android/libraries/feed/testing/requestmanager/FakeFeedRequestManager.java
index 86e67bfc..fa2ad82 100644
--- a/src/main/java/com/google/android/libraries/feed/testing/requestmanager/FakeRequestManager.java
+++ b/src/main/java/com/google/android/libraries/feed/testing/requestmanager/FakeFeedRequestManager.java
@@ -14,17 +14,16 @@
 
 package com.google.android.libraries.feed.testing.requestmanager;
 
-import com.google.android.libraries.feed.api.requestmanager.RequestManager;
 import com.google.android.libraries.feed.common.Result;
 import com.google.android.libraries.feed.common.concurrent.MainThreadRunner;
 import com.google.android.libraries.feed.common.concurrent.TaskQueue;
 import com.google.android.libraries.feed.common.concurrent.TaskQueue.TaskType;
 import com.google.android.libraries.feed.common.concurrent.testing.FakeThreadUtils;
 import com.google.android.libraries.feed.common.functional.Consumer;
-import com.google.android.libraries.feed.common.functional.Supplier;
 import com.google.android.libraries.feed.host.logging.RequestReason;
 import com.google.android.libraries.feed.host.logging.Task;
 import com.google.android.libraries.feed.internalapi.protocoladapter.ProtocolAdapter;
+import com.google.android.libraries.feed.internalapi.requestmanager.FeedRequestManager;
 import com.google.search.now.feed.client.StreamDataProto.StreamDataOperation;
 import com.google.search.now.feed.client.StreamDataProto.StreamToken;
 import com.google.search.now.wire.feed.ConsistencyTokenProto.ConsistencyToken;
@@ -34,11 +33,11 @@
 import java.util.Queue;
 
 /**
- * Fake implementation of a {@link RequestManager}. This acts a Queue of responses which will be
+ * Fake implementation of a {@link FeedRequestManager}. This acts a Queue of responses which will be
  * sent through the {@link ProtocolAdapter} to create the {@code List<StreamDataOperation>} which is
  * then returned as a {@link Result} to the {@link Consumer}.
  */
-public class FakeRequestManager implements RequestManager {
+public class FakeFeedRequestManager implements FeedRequestManager {
   private final FakeThreadUtils fakeThreadUtils;
   private final MainThreadRunner mainThreadRunner;
   private final ProtocolAdapter protocolAdapter;
@@ -47,11 +46,7 @@
   /*@Nullable*/ private StreamToken latestStreamToken = null;
   @RequestReason private int latestRequestReason = RequestReason.UNKNOWN;
 
-  /*@Nullable*/
-  private Supplier<Consumer<Result<List<StreamDataOperation>>>>
-      defaultTriggerRefreshConsumerSupplier;
-
-  public FakeRequestManager(
+  public FakeFeedRequestManager(
       FakeThreadUtils fakeThreadUtils,
       MainThreadRunner mainThreadRunner,
       ProtocolAdapter protocolAdapter,
@@ -64,23 +59,23 @@
 
   // TODO: queue responses for action uploads
   /** Adds a Response to the queue. */
-  public FakeRequestManager queueResponse(Response response) {
+  public FakeFeedRequestManager queueResponse(Response response) {
     return queueResponse(response, /* delayMs= */ 0);
   }
 
   /** Adds a Response to the queue with a delay. */
-  public FakeRequestManager queueResponse(Response response, long delayMs) {
+  public FakeFeedRequestManager queueResponse(Response response, long delayMs) {
     responses.add(new ResponseWithDelay(response, delayMs));
     return this;
   }
 
   /** Adds an error to the queue. */
-  public FakeRequestManager queueError() {
+  public FakeFeedRequestManager queueError() {
     return queueError(/* delayMs= */ 0);
   }
 
   /** Adds an error to the queue with a delay. */
-  public FakeRequestManager queueError(long delayMs) {
+  public FakeFeedRequestManager queueError(long delayMs) {
     responses.add(new ResponseWithDelay(delayMs));
     return this;
   }
@@ -120,7 +115,7 @@
       ResponseWithDelay responseWithDelay, Consumer<Result<List<StreamDataOperation>>> consumer) {
     if (responseWithDelay.delayMs > 0) {
       mainThreadRunner.executeWithDelay(
-          "FakeRequestManager#consumer",
+          "FakeFeedRequestManager#consumer",
           () -> {
             invokeConsumer(responseWithDelay, consumer);
           },
@@ -141,30 +136,14 @@
     fakeThreadUtils.enforceMainThread(policy);
   }
 
-  @Override
-  public void triggerRefresh(@RequestReason int reason) {
-    if (defaultTriggerRefreshConsumerSupplier == null) {
-      throw new IllegalStateException(
-          "Must set defaultTriggerRefreshConsumerSupplier before calling"
-              + " triggerRefresh(RequestReason).");
-    }
-    triggerRefresh(reason, defaultTriggerRefreshConsumerSupplier.get());
-  }
-
-  @Override
-  public void setDefaultTriggerRefreshConsumerSupplier(
-      Supplier<Consumer<Result<List<StreamDataOperation>>>> consumerSupplier) {
-    this.defaultTriggerRefreshConsumerSupplier = consumerSupplier;
-  }
-
-  /** Returns the latest {@link StreamToken} passed in to the {@link RequestManager}. */
+  /** Returns the latest {@link StreamToken} passed in to the {@link FeedRequestManager}. */
   /*@Nullable*/
   public StreamToken getLatestStreamToken() {
     return latestStreamToken;
   }
 
   /**
-   * Returns the latest {@link RequestReason} passed in to the {@link RequestManager}. Returns
+   * Returns the latest {@link RequestReason} passed in to the {@link FeedRequestManager}. Returns
    * {@literal RequestReason.UNKNOWN} if the request manager has not been invoked.
    */
   @RequestReason
diff --git a/src/test/java/com/google/android/libraries/feed/api/scope/BUILD b/src/test/java/com/google/android/libraries/feed/api/scope/BUILD
index 4f770a1..3f8e839 100644
--- a/src/test/java/com/google/android/libraries/feed/api/scope/BUILD
+++ b/src/test/java/com/google/android/libraries/feed/api/scope/BUILD
@@ -35,7 +35,6 @@
     manifest_values = DEFAULT_ANDROID_LOCAL_TEST_MANIFEST,
     deps = [
         "//src/main/java/com/google/android/libraries/feed/api/common",
-        "//src/main/java/com/google/android/libraries/feed/api/requestmanager",
         "//src/main/java/com/google/android/libraries/feed/api/scope",
         "//src/main/java/com/google/android/libraries/feed/api/sessionmanager",
         "//src/main/java/com/google/android/libraries/feed/common/time/testing",
@@ -47,6 +46,7 @@
         "//src/main/java/com/google/android/libraries/feed/host/storage",
         "//src/main/java/com/google/android/libraries/feed/host/stream",
         "//src/main/java/com/google/android/libraries/feed/internalapi/protocoladapter",
+        "//src/main/java/com/google/android/libraries/feed/internalapi/requestmanager",
         "//third_party:robolectric",
         "@com_google_protobuf_javalite//:protobuf_java_lite",
         "@maven//:com_google_guava_guava",
diff --git a/src/test/java/com/google/android/libraries/feed/api/scope/FeedProcessScopeTest.java b/src/test/java/com/google/android/libraries/feed/api/scope/FeedProcessScopeTest.java
index 5819352..6357be6 100644
--- a/src/test/java/com/google/android/libraries/feed/api/scope/FeedProcessScopeTest.java
+++ b/src/test/java/com/google/android/libraries/feed/api/scope/FeedProcessScopeTest.java
@@ -23,7 +23,6 @@
 import android.app.Activity;
 import android.content.Context;
 import com.google.android.libraries.feed.api.common.ThreadUtils;
-import com.google.android.libraries.feed.api.requestmanager.RequestManager;
 import com.google.android.libraries.feed.api.scope.FeedProcessScope.Builder;
 import com.google.android.libraries.feed.api.sessionmanager.SessionManager;
 import com.google.android.libraries.feed.common.time.testing.FakeClock;
@@ -41,6 +40,7 @@
 import com.google.android.libraries.feed.host.storage.JournalStorageDirect;
 import com.google.android.libraries.feed.host.stream.TooltipSupportedApi;
 import com.google.android.libraries.feed.internalapi.protocoladapter.ProtocolAdapter;
+import com.google.android.libraries.feed.internalapi.requestmanager.FeedRequestManager;
 import com.google.common.util.concurrent.MoreExecutors;
 import java.util.ArrayList;
 import org.junit.Before;
@@ -63,7 +63,7 @@
 
   // Mocks for optional fields
   @Mock private ProtocolAdapter protocolAdapter;
-  @Mock private RequestManager requestManager;
+  @Mock private FeedRequestManager feedRequestManager;
   @Mock private SessionManager sessionManager;
   @Mock private ThreadUtils threadUtils;
 
@@ -125,14 +125,14 @@
                 applicationInfo,
                 tooltipSupportedApi)
             .setProtocolAdapter(protocolAdapter)
-            .setRequestManager(requestManager)
+            .setFeedRequestManager(feedRequestManager)
             .setSessionManager(sessionManager)
             .setProtoExtensionProvider(protoExtensionProvider)
             .setClock(fakeClock)
             .build();
 
     assertThat(processScope.getProtocolAdapter()).isEqualTo(protocolAdapter);
-    assertThat(processScope.getRequestManager()).isEqualTo(requestManager);
+    assertThat(processScope.getRequestManager()).isNotNull();
     assertThat(processScope.getSessionManager()).isEqualTo(sessionManager);
     assertThat(processScope.getClock()).isEqualTo(fakeClock);
     assertThat(processScope.getAppLifecycleListener()).isNotNull();
diff --git a/src/test/java/com/google/android/libraries/feed/feedrequestmanager/BUILD b/src/test/java/com/google/android/libraries/feed/feedrequestmanager/BUILD
index cdfc7c9..e25b279 100644
--- a/src/test/java/com/google/android/libraries/feed/feedrequestmanager/BUILD
+++ b/src/test/java/com/google/android/libraries/feed/feedrequestmanager/BUILD
@@ -34,10 +34,33 @@
 )
 
 android_local_test(
-    name = "FeedRequestManagerTest",
+    name = "RequestManagerImplTest",
     size = "small",
     timeout = "moderate",
-    srcs = ["FeedRequestManagerTest.java"],
+    srcs = ["RequestManagerImplTest.java"],
+    aapt_version = "aapt2",
+    manifest_values = DEFAULT_ANDROID_LOCAL_TEST_MANIFEST,
+    deps = [
+        "//src/main/java/com/google/android/libraries/feed/api/common",
+        "//src/main/java/com/google/android/libraries/feed/api/sessionmanager",
+        "//src/main/java/com/google/android/libraries/feed/common",
+        "//src/main/java/com/google/android/libraries/feed/common/functional",
+        "//src/main/java/com/google/android/libraries/feed/feedrequestmanager",
+        "//src/main/java/com/google/android/libraries/feed/host/logging",
+        "//src/main/java/com/google/android/libraries/feed/internalapi/requestmanager",
+        "//src/main/proto/com/google/android/libraries/feed/internalapi/proto:client_feed_java_proto_lite",
+        "//third_party:robolectric",
+        "@com_google_protobuf_javalite//:protobuf_java_lite",
+        "@maven//:org_mockito_mockito_core",
+        "@robolectric//bazel:android-all",
+    ],
+)
+
+android_local_test(
+    name = "FeedRequestManagerImplTest",
+    size = "small",
+    timeout = "moderate",
+    srcs = ["FeedRequestManagerImplTest.java"],
     aapt_version = "aapt2",
     manifest_values = DEFAULT_ANDROID_LOCAL_TEST_MANIFEST,
     deps = [
diff --git a/src/test/java/com/google/android/libraries/feed/feedrequestmanager/FeedRequestManagerTest.java b/src/test/java/com/google/android/libraries/feed/feedrequestmanager/FeedRequestManagerImplTest.java
similarity index 96%
rename from src/test/java/com/google/android/libraries/feed/feedrequestmanager/FeedRequestManagerTest.java
rename to src/test/java/com/google/android/libraries/feed/feedrequestmanager/FeedRequestManagerImplTest.java
index 21ae5ec..a9bf9ce 100644
--- a/src/test/java/com/google/android/libraries/feed/feedrequestmanager/FeedRequestManagerTest.java
+++ b/src/test/java/com/google/android/libraries/feed/feedrequestmanager/FeedRequestManagerImplTest.java
@@ -94,9 +94,9 @@
 import org.robolectric.annotation.Config;
 import org.robolectric.util.ReflectionHelpers;
 
-/** Test of the {@link FeedRequestManager} class. */
+/** Test of the {@link FeedRequestManagerImpl} class. */
 @RunWith(RobolectricTestRunner.class)
-public class FeedRequestManagerTest {
+public class FeedRequestManagerImplTest {
 
   private static final int NOT_FOUND = 404;
   private static final String TABLE = "table";
@@ -116,7 +116,7 @@
 
   private Context context;
   private ExtensionRegistryLite registry;
-  private FeedRequestManager requestManager;
+  private FeedRequestManagerImpl requestManager;
   private FakeActionReader fakeActionReader;
   private FakeMainThreadRunner fakeMainThreadRunner;
   private FakeProtocolAdapter fakeProtocolAdapter;
@@ -165,7 +165,7 @@
     when(applicationInfo.getBuildType()).thenReturn(ApplicationInfo.BuildType.DEV);
     when(applicationInfo.getVersionString()).thenReturn(APP_VERSION_STRING);
     requestManager =
-        new FeedRequestManager(
+        new FeedRequestManagerImpl(
             configuration,
             fakeNetworkClient,
             fakeProtocolAdapter,
@@ -247,32 +247,6 @@
   }
 
   @Test
-  public void testTriggerRefresh_defaultConsumer() throws Exception {
-    RequiredConsumer<Result<List<StreamDataOperation>>> consumer =
-        new RequiredConsumer<>(input -> {});
-    requestManager.setDefaultTriggerRefreshConsumerSupplier(() -> consumer);
-    requestManager.triggerRefresh(RequestReason.HOST_REQUESTED);
-
-    HttpRequest httpRequest = fakeNetworkClient.getLatestRequest();
-    assertHttpRequestFormattedCorrectly(httpRequest, context);
-
-    Request request = getRequestFromHttpRequest(httpRequest);
-    Request expectedRequest =
-        Request.newBuilder()
-            .setRequestVersion(RequestVersion.FEED_QUERY)
-            .setExtension(
-                FeedRequest.feedRequest,
-                getTestFeedRequestBuilder()
-                    .setFeedQuery(
-                        FeedQuery.newBuilder().setReason(FeedQuery.RequestReason.SCHEDULED_REFRESH))
-                    .addClientCapability(Capability.BASE_UI)
-                    .build())
-            .build();
-    assertThat(request).isEqualTo(expectedRequest);
-    assertThat(consumer.isCalled()).isTrue();
-  }
-
-  @Test
   public void testActionData_simpleDismiss() throws Exception {
     fakeActionReader.addDismissActionsWithSemanticProperties(
         buildDismissAction(ID, CONTENT_DOMAIN, TABLE, null));
@@ -877,7 +851,7 @@
   private void testCapabilityAdded(String configKey, Capability capability) throws Exception {
     Configuration configuration = new Configuration.Builder().put(configKey, true).build();
     requestManager =
-        new FeedRequestManager(
+        new FeedRequestManagerImpl(
             configuration,
             fakeNetworkClient,
             fakeProtocolAdapter,
diff --git a/src/test/java/com/google/android/libraries/feed/feedrequestmanager/RequestManagerImplTest.java b/src/test/java/com/google/android/libraries/feed/feedrequestmanager/RequestManagerImplTest.java
new file mode 100644
index 0000000..2800148
--- /dev/null
+++ b/src/test/java/com/google/android/libraries/feed/feedrequestmanager/RequestManagerImplTest.java
@@ -0,0 +1,70 @@
+// Copyright 2019 The Feed Authors.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package com.google.android.libraries.feed.feedrequestmanager;
+
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+import static org.mockito.MockitoAnnotations.initMocks;
+
+import com.google.android.libraries.feed.api.common.MutationContext;
+import com.google.android.libraries.feed.api.sessionmanager.SessionManager;
+import com.google.android.libraries.feed.common.Result;
+import com.google.android.libraries.feed.common.functional.Consumer;
+import com.google.android.libraries.feed.host.logging.RequestReason;
+import com.google.android.libraries.feed.internalapi.requestmanager.FeedRequestManager;
+import com.google.search.now.feed.client.StreamDataProto.StreamDataOperation;
+import java.util.List;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.robolectric.RobolectricTestRunner;
+
+/** Test of the {@link RequestManagerImpl} class. */
+@RunWith(RobolectricTestRunner.class)
+public final class RequestManagerImplTest {
+
+  @Mock private FeedRequestManager feedRequestManager;
+  @Mock private SessionManager sessionManager;
+  @Mock private Consumer<Result<List<StreamDataOperation>>> updateConsumer;
+
+  private RequestManagerImpl clientRequestManager;
+
+  @Before
+  public void createRequestManager() {
+    initMocks(this);
+    clientRequestManager = new RequestManagerImpl(feedRequestManager, sessionManager);
+  }
+
+  @Test
+  public void testTriggerRefresh_requestReason() {
+    when(sessionManager.getUpdateConsumer(MutationContext.EMPTY_CONTEXT))
+        .thenReturn(updateConsumer);
+    @RequestReason int reason = RequestReason.HOST_REQUESTED;
+
+    clientRequestManager.triggerRefresh(reason);
+
+    verify(feedRequestManager).triggerRefresh(reason, updateConsumer);
+  }
+
+  @Test
+  public void testTriggerRefresh_requestReasonAndConsumer() {
+    @RequestReason int reason = RequestReason.HOST_REQUESTED;
+
+    clientRequestManager.triggerRefresh(reason, updateConsumer);
+
+    verify(feedRequestManager).triggerRefresh(reason, updateConsumer);
+  }
+}
diff --git a/src/test/java/com/google/android/libraries/feed/feedsessionmanager/FeedSessionManagerTest.java b/src/test/java/com/google/android/libraries/feed/feedsessionmanager/FeedSessionManagerTest.java
index e297da3..ecda686 100644
--- a/src/test/java/com/google/android/libraries/feed/feedsessionmanager/FeedSessionManagerTest.java
+++ b/src/test/java/com/google/android/libraries/feed/feedsessionmanager/FeedSessionManagerTest.java
@@ -58,7 +58,7 @@
 import com.google.android.libraries.feed.testing.proto.UiContextForTestProto.UiContextForTest;
 import com.google.android.libraries.feed.testing.protocoladapter.FakeProtocolAdapter;
 import com.google.android.libraries.feed.testing.requestmanager.FakeActionUploadRequestManager;
-import com.google.android.libraries.feed.testing.requestmanager.FakeRequestManager;
+import com.google.android.libraries.feed.testing.requestmanager.FakeFeedRequestManager;
 import com.google.android.libraries.feed.testing.store.FakeStore;
 import com.google.protobuf.ByteString;
 import com.google.search.now.feed.client.StreamDataProto.StreamDataOperation;
@@ -115,7 +115,7 @@
   private FakeActionUploadRequestManager fakeActionUploadRequestManager;
   private FakeMainThreadRunner fakeMainThreadRunner;
   private FakeProtocolAdapter fakeProtocolAdapter;
-  private FakeRequestManager fakeRequestManager;
+  private FakeFeedRequestManager fakeFeedRequestManager;
   private FakeStore fakeStore;
   private FakeTaskQueue fakeTaskQueue;
   private FakeThreadUtils fakeThreadUtils;
@@ -133,10 +133,10 @@
     fakeActionUploadRequestManager = new FakeActionUploadRequestManager(fakeThreadUtils);
     fakeStore = new FakeStore(fakeThreadUtils, fakeTaskQueue, fakeClock);
     fakeProtocolAdapter = new FakeProtocolAdapter();
-    fakeRequestManager =
-        new FakeRequestManager(
+    fakeFeedRequestManager =
+        new FakeFeedRequestManager(
             fakeThreadUtils, fakeMainThreadRunner, fakeProtocolAdapter, fakeTaskQueue);
-    fakeRequestManager.queueResponse(Response.getDefaultInstance());
+    fakeFeedRequestManager.queueResponse(Response.getDefaultInstance());
     when(schedulerApi.shouldSessionRequestData(any(SessionManagerState.class)))
         .thenReturn(RequestBehavior.NO_REQUEST_WITH_CONTENT);
   }
@@ -162,7 +162,7 @@
                 timingUtils,
                 fakeThreadUtils,
                 fakeProtocolAdapter,
-                fakeRequestManager,
+                fakeFeedRequestManager,
                 fakeActionUploadRequestManager,
                 schedulerApi,
                 configuration,
@@ -234,7 +234,7 @@
                 timingUtils,
                 fakeThreadUtils,
                 fakeProtocolAdapter,
-                fakeRequestManager,
+                fakeFeedRequestManager,
                 fakeActionUploadRequestManager,
                 schedulerApi,
                 configuration,
@@ -267,7 +267,7 @@
                 timingUtils,
                 fakeThreadUtils,
                 fakeProtocolAdapter,
-                fakeRequestManager,
+                fakeFeedRequestManager,
                 fakeActionUploadRequestManager,
                 schedulerApi,
                 configuration,
@@ -448,7 +448,7 @@
     FeedSessionManager sessionManager = getInitializedSessionManager();
     sessionManager.handleToken(SESSION_ID, streamToken);
 
-    assertThat(fakeRequestManager.getLatestStreamToken()).isEqualTo(streamToken);
+    assertThat(fakeFeedRequestManager.getLatestStreamToken()).isEqualTo(streamToken);
   }
 
   @Test
@@ -457,7 +457,7 @@
     sessionManager.triggerRefresh(
         SESSION_ID, RequestReason.ZERO_STATE, UiContext.getDefaultInstance());
 
-    assertThat(fakeRequestManager.getLatestRequestReason()).isEqualTo(RequestReason.ZERO_STATE);
+    assertThat(fakeFeedRequestManager.getLatestRequestReason()).isEqualTo(RequestReason.ZERO_STATE);
   }
 
   @Test
@@ -466,7 +466,8 @@
     sessionManager.triggerRefresh(
         SESSION_ID, RequestReason.HOST_REQUESTED, UiContext.getDefaultInstance());
 
-    assertThat(fakeRequestManager.getLatestRequestReason()).isEqualTo(RequestReason.HOST_REQUESTED);
+    assertThat(fakeFeedRequestManager.getLatestRequestReason())
+        .isEqualTo(RequestReason.HOST_REQUESTED);
   }
 
   @Test
@@ -544,7 +545,7 @@
                 timingUtils,
                 fakeThreadUtils,
                 fakeProtocolAdapter,
-                fakeRequestManager,
+                fakeFeedRequestManager,
                 fakeActionUploadRequestManager,
                 schedulerApi,
                 configuration,
@@ -586,7 +587,7 @@
                 timingUtils,
                 fakeThreadUtils,
                 fakeProtocolAdapter,
-                fakeRequestManager,
+                fakeFeedRequestManager,
                 fakeActionUploadRequestManager,
                 schedulerApi,
                 configuration,
@@ -883,7 +884,7 @@
                 timingUtils,
                 fakeThreadUtils,
                 fakeProtocolAdapter,
-                fakeRequestManager,
+                fakeFeedRequestManager,
                 fakeActionUploadRequestManager,
                 schedulerApi,
                 config,
@@ -901,7 +902,7 @@
             timingUtils,
             fakeThreadUtils,
             fakeProtocolAdapter,
-            fakeRequestManager,
+            fakeFeedRequestManager,
             fakeActionUploadRequestManager,
             schedulerApi,
             configuration,
diff --git a/src/test/java/com/google/android/libraries/feed/infraintegration/ClearAllTest.java b/src/test/java/com/google/android/libraries/feed/infraintegration/ClearAllTest.java
index e5e3ff1..09c0f7b 100644
--- a/src/test/java/com/google/android/libraries/feed/infraintegration/ClearAllTest.java
+++ b/src/test/java/com/google/android/libraries/feed/infraintegration/ClearAllTest.java
@@ -29,7 +29,7 @@
 import com.google.android.libraries.feed.internalapi.modelprovider.ModelProvider;
 import com.google.android.libraries.feed.internalapi.modelprovider.ModelProvider.State;
 import com.google.android.libraries.feed.internalapi.modelprovider.ModelProviderFactory;
-import com.google.android.libraries.feed.testing.requestmanager.FakeRequestManager;
+import com.google.android.libraries.feed.testing.requestmanager.FakeFeedRequestManager;
 import com.google.search.now.feed.client.StreamDataProto.UiContext;
 import com.google.search.now.wire.feed.ContentIdProto.ContentId;
 import org.junit.Before;
@@ -40,7 +40,7 @@
 /** This will test the behavior of clear all. */
 @RunWith(RobolectricTestRunner.class)
 public class ClearAllTest {
-  private FakeRequestManager requestManager;
+  private FakeFeedRequestManager fakeFeedRequestManager;
   private SessionManager sessionManager;
   private ModelProviderFactory modelProviderFactory;
   private ModelProviderValidator modelValidator;
@@ -53,7 +53,7 @@
         new Configuration.Builder().put(ConfigKey.LIMIT_PAGE_UPDATES, false).build();
     InfraIntegrationScope scope =
         new InfraIntegrationScope.Builder().setConfiguration(configuration).build();
-    requestManager = scope.getRequestManager();
+    fakeFeedRequestManager = scope.getFakeFeedRequestManager();
     sessionManager = scope.getSessionManager();
     modelProviderFactory = scope.getModelProviderFactory();
     appLifecycleListener = scope.getAppLifecycleListener();
@@ -72,8 +72,8 @@
           ResponseBuilder.createFeatureContentId(2),
           ResponseBuilder.createFeatureContentId(3)
         };
-    requestManager.queueResponse(ResponseBuilder.forClearAllWithCards(cards).build());
-    requestManager.triggerRefresh(
+    fakeFeedRequestManager.queueResponse(ResponseBuilder.forClearAllWithCards(cards).build());
+    fakeFeedRequestManager.triggerRefresh(
         RequestReason.OPEN_WITHOUT_CONTENT,
         sessionManager.getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
     ModelProvider modelProvider1 =
@@ -101,8 +101,8 @@
           ResponseBuilder.createFeatureContentId(2),
           ResponseBuilder.createFeatureContentId(3)
         };
-    requestManager.queueResponse(ResponseBuilder.forClearAllWithCards(cards).build());
-    requestManager.triggerRefresh(
+    fakeFeedRequestManager.queueResponse(ResponseBuilder.forClearAllWithCards(cards).build());
+    fakeFeedRequestManager.triggerRefresh(
         RequestReason.OPEN_WITHOUT_CONTENT,
         sessionManager.getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
     ModelProvider modelProvider =
diff --git a/src/test/java/com/google/android/libraries/feed/infraintegration/ContentRemoveTest.java b/src/test/java/com/google/android/libraries/feed/infraintegration/ContentRemoveTest.java
index 77dc1f7..03fa8cc 100644
--- a/src/test/java/com/google/android/libraries/feed/infraintegration/ContentRemoveTest.java
+++ b/src/test/java/com/google/android/libraries/feed/infraintegration/ContentRemoveTest.java
@@ -32,7 +32,7 @@
 import com.google.android.libraries.feed.internalapi.modelprovider.ModelFeature;
 import com.google.android.libraries.feed.internalapi.modelprovider.ModelProvider;
 import com.google.android.libraries.feed.internalapi.modelprovider.ModelProviderFactory;
-import com.google.android.libraries.feed.testing.requestmanager.FakeRequestManager;
+import com.google.android.libraries.feed.testing.requestmanager.FakeFeedRequestManager;
 import com.google.search.now.feed.client.StreamDataProto.StreamToken;
 import com.google.search.now.feed.client.StreamDataProto.UiContext;
 import com.google.search.now.wire.feed.ConsistencyTokenProto.ConsistencyToken;
@@ -47,7 +47,7 @@
 @RunWith(RobolectricTestRunner.class)
 public class ContentRemoveTest {
   private final InfraIntegrationScope scope = new InfraIntegrationScope.Builder().build();
-  private final FakeRequestManager requestManager = scope.getRequestManager();
+  private final FakeFeedRequestManager fakeFeedRequestManager = scope.getFakeFeedRequestManager();
   private final FakeThreadUtils fakeThreadUtils = scope.getFakeThreadUtils();
   private final SessionManager sessionManager = scope.getSessionManager();
   private final ModelProviderFactory modelProviderFactory = scope.getModelProviderFactory();
@@ -64,8 +64,8 @@
           ResponseBuilder.createFeatureContentId(3),
           ResponseBuilder.createFeatureContentId(4)
         };
-    requestManager.queueResponse(ResponseBuilder.forClearAllWithCards(cards).build());
-    requestManager.triggerRefresh(
+    fakeFeedRequestManager.queueResponse(ResponseBuilder.forClearAllWithCards(cards).build());
+    fakeFeedRequestManager.triggerRefresh(
         RequestReason.OPEN_WITHOUT_CONTENT,
         sessionManager.getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
 
@@ -84,11 +84,11 @@
     ModelCursor advancedCursor3 = advanceCursor(rootFeature.getCursor(), 3);
     ModelCursor advancedCursor4 = advanceCursor(rootFeature.getCursor(), 4);
 
-    requestManager.queueResponse(
+    fakeFeedRequestManager.queueResponse(
         ResponseBuilder.builder().removeFeature(cards[1], ROOT_CONTENT_ID).build());
     // TODO: sessions reject removes without a CLEAR_ALL or paging with a different token.
     fakeThreadUtils.enforceMainThread(false);
-    requestManager.loadMore(
+    fakeFeedRequestManager.loadMore(
         StreamToken.getDefaultInstance(),
         ConsistencyToken.getDefaultInstance(),
         sessionManager.getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
diff --git a/src/test/java/com/google/android/libraries/feed/infraintegration/ContentUpdateTest.java b/src/test/java/com/google/android/libraries/feed/infraintegration/ContentUpdateTest.java
index e4e8867..274d391 100644
--- a/src/test/java/com/google/android/libraries/feed/infraintegration/ContentUpdateTest.java
+++ b/src/test/java/com/google/android/libraries/feed/infraintegration/ContentUpdateTest.java
@@ -33,7 +33,7 @@
 import com.google.android.libraries.feed.internalapi.modelprovider.ModelProvider;
 import com.google.android.libraries.feed.internalapi.modelprovider.ModelProviderFactory;
 import com.google.android.libraries.feed.internalapi.protocoladapter.ProtocolAdapter;
-import com.google.android.libraries.feed.testing.requestmanager.FakeRequestManager;
+import com.google.android.libraries.feed.testing.requestmanager.FakeFeedRequestManager;
 import com.google.search.now.feed.client.StreamDataProto.StreamToken;
 import com.google.search.now.feed.client.StreamDataProto.UiContext;
 import com.google.search.now.wire.feed.ConsistencyTokenProto.ConsistencyToken;
@@ -49,7 +49,7 @@
 @RunWith(RobolectricTestRunner.class)
 public class ContentUpdateTest {
   private final InfraIntegrationScope scope = new InfraIntegrationScope.Builder().build();
-  private final FakeRequestManager requestManager = scope.getRequestManager();
+  private final FakeFeedRequestManager fakeFeedRequestManager = scope.getFakeFeedRequestManager();
   private final FakeThreadUtils fakeThreadUtils = scope.getFakeThreadUtils();
   private final ModelProviderFactory modelProviderFactory = scope.getModelProviderFactory();
   private final ModelProviderValidator modelValidator =
@@ -64,8 +64,8 @@
         new ContentId[] {
           ResponseBuilder.createFeatureContentId(1), ResponseBuilder.createFeatureContentId(2)
         };
-    requestManager.queueResponse(ResponseBuilder.forClearAllWithCards(cards).build());
-    requestManager.triggerRefresh(
+    fakeFeedRequestManager.queueResponse(ResponseBuilder.forClearAllWithCards(cards).build());
+    fakeFeedRequestManager.triggerRefresh(
         RequestReason.OPEN_WITHOUT_CONTENT,
         sessionManager.getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
     ModelProvider modelProvider =
@@ -99,10 +99,10 @@
     assertThat(cursor.isAtEnd()).isTrue();
 
     // Create an update response for the two content items
-    requestManager.queueResponse(ResponseBuilder.builder().addCardsToRoot(cards).build());
+    fakeFeedRequestManager.queueResponse(ResponseBuilder.builder().addCardsToRoot(cards).build());
     // TODO: sessions reject updates without a CLEAR_ALL or paging with a different token.
     fakeThreadUtils.enforceMainThread(false);
-    requestManager.loadMore(
+    fakeFeedRequestManager.loadMore(
         StreamToken.getDefaultInstance(),
         ConsistencyToken.getDefaultInstance(),
         sessionManager.getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
diff --git a/src/test/java/com/google/android/libraries/feed/infraintegration/DetachSessionTest.java b/src/test/java/com/google/android/libraries/feed/infraintegration/DetachSessionTest.java
index 23b2177..e0e8433 100644
--- a/src/test/java/com/google/android/libraries/feed/infraintegration/DetachSessionTest.java
+++ b/src/test/java/com/google/android/libraries/feed/infraintegration/DetachSessionTest.java
@@ -29,7 +29,7 @@
 import com.google.android.libraries.feed.internalapi.modelprovider.ModelChild;
 import com.google.android.libraries.feed.internalapi.modelprovider.ModelProvider;
 import com.google.android.libraries.feed.internalapi.modelprovider.ModelProviderFactory;
-import com.google.android.libraries.feed.testing.requestmanager.FakeRequestManager;
+import com.google.android.libraries.feed.testing.requestmanager.FakeFeedRequestManager;
 import com.google.search.now.feed.client.StreamDataProto.UiContext;
 import com.google.search.now.wire.feed.ContentIdProto.ContentId;
 import org.junit.Before;
@@ -54,7 +54,7 @@
         ResponseBuilder.createFeatureContentId(6)
       };
 
-  private FakeRequestManager requestManager;
+  private FakeFeedRequestManager fakeFeedRequestManager;
   private SessionManager sessionManager;
   private ModelProviderFactory modelProviderFactory;
   private ModelProviderValidator modelValidator;
@@ -68,7 +68,7 @@
         new Configuration.Builder().put(ConfigKey.LIMIT_PAGE_UPDATES, false).build();
     InfraIntegrationScope scope =
         new InfraIntegrationScope.Builder().setConfiguration(configuration).build();
-    requestManager = scope.getRequestManager();
+    fakeFeedRequestManager = scope.getFakeFeedRequestManager();
     sessionManager = scope.getSessionManager();
     modelProviderFactory = scope.getModelProviderFactory();
     modelValidator = new ModelProviderValidator(scope.getProtocolAdapter());
@@ -90,8 +90,8 @@
   public void testPagingDetachedSession() {
     PagingState s1State = new PagingState(PAGE_1, PAGE_2, 1, contentIdGenerators);
 
-    requestManager.queueResponse(s1State.initialResponse);
-    requestManager.triggerRefresh(
+    fakeFeedRequestManager.queueResponse(s1State.initialResponse);
+    fakeFeedRequestManager.triggerRefresh(
         RequestReason.OPEN_WITHOUT_CONTENT,
         sessionManager.getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
 
@@ -113,7 +113,7 @@
     modelValidator.assertCursorContentsWithToken(existingSession, PAGE_1);
 
     // page the sessionTwo
-    requestManager.queueResponse(s1State.pageResponse);
+    fakeFeedRequestManager.queueResponse(s1State.pageResponse);
     sessionTwo.handleToken(tokenChild.getModelToken());
 
     // verify that existingSession and sessionTwo match
@@ -140,8 +140,8 @@
   public void testPagingDetachedSession_pageWhileDetached() {
     PagingState s1State = new PagingState(PAGE_1, PAGE_2, 1, contentIdGenerators);
 
-    requestManager.queueResponse(s1State.initialResponse);
-    requestManager.triggerRefresh(
+    fakeFeedRequestManager.queueResponse(s1State.initialResponse);
+    fakeFeedRequestManager.triggerRefresh(
         RequestReason.OPEN_WITHOUT_CONTENT,
         sessionManager.getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
 
@@ -158,7 +158,7 @@
     sessionOne.detachModelProvider();
 
     // page the sessionTwo
-    requestManager.queueResponse(s1State.pageResponse);
+    fakeFeedRequestManager.queueResponse(s1State.pageResponse);
     sessionTwo.handleToken(tokenChild.getModelToken());
 
     // recreate sessionOne as existingSession
diff --git a/src/test/java/com/google/android/libraries/feed/infraintegration/EmptyStreamTest.java b/src/test/java/com/google/android/libraries/feed/infraintegration/EmptyStreamTest.java
index bb16890..adcc424 100644
--- a/src/test/java/com/google/android/libraries/feed/infraintegration/EmptyStreamTest.java
+++ b/src/test/java/com/google/android/libraries/feed/infraintegration/EmptyStreamTest.java
@@ -33,7 +33,7 @@
 import com.google.android.libraries.feed.internalapi.modelprovider.ModelProviderFactory;
 import com.google.android.libraries.feed.internalapi.modelprovider.ModelProviderObserver;
 import com.google.android.libraries.feed.testing.proto.UiContextForTestProto.UiContextForTest;
-import com.google.android.libraries.feed.testing.requestmanager.FakeRequestManager;
+import com.google.android.libraries.feed.testing.requestmanager.FakeFeedRequestManager;
 import com.google.search.now.feed.client.StreamDataProto.UiContext;
 import org.junit.Before;
 import org.junit.Test;
@@ -45,7 +45,7 @@
 public class EmptyStreamTest {
 
   private FakeClock fakeClock;
-  private FakeRequestManager requestManager;
+  private FakeFeedRequestManager fakeFeedRequestManager;
   private SessionManager sessionManager;
   private ModelProviderFactory modelProviderFactory;
 
@@ -54,7 +54,7 @@
     initMocks(this);
     InfraIntegrationScope scope = new InfraIntegrationScope.Builder().build();
     fakeClock = scope.getFakeClock();
-    requestManager = scope.getRequestManager();
+    fakeFeedRequestManager = scope.getFakeFeedRequestManager();
     sessionManager = scope.getSessionManager();
     modelProviderFactory = scope.getModelProviderFactory();
   }
@@ -119,8 +119,8 @@
   public void emptyStream_emptyResponse() {
     // Create an empty stream through a response
     ResponseBuilder responseBuilder = new ResponseBuilder();
-    requestManager.queueResponse(responseBuilder.build());
-    requestManager.triggerRefresh(
+    fakeFeedRequestManager.queueResponse(responseBuilder.build());
+    fakeFeedRequestManager.triggerRefresh(
         RequestReason.OPEN_WITHOUT_CONTENT,
         sessionManager.getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
 
diff --git a/src/test/java/com/google/android/libraries/feed/infraintegration/ExistingSessionTest.java b/src/test/java/com/google/android/libraries/feed/infraintegration/ExistingSessionTest.java
index 954f8e8..c09f149 100644
--- a/src/test/java/com/google/android/libraries/feed/infraintegration/ExistingSessionTest.java
+++ b/src/test/java/com/google/android/libraries/feed/infraintegration/ExistingSessionTest.java
@@ -53,7 +53,7 @@
   public void setUp() {
     // Create a simple stream with a root and three features
     scope
-        .getRequestManager()
+        .getFakeFeedRequestManager()
         .queueResponse(ResponseBuilder.forClearAllWithCards(CARDS).build())
         .triggerRefresh(
             RequestReason.OPEN_WITHOUT_CONTENT,
@@ -117,7 +117,7 @@
 
     // Start a request.
     scope
-        .getRequestManager()
+        .getFakeFeedRequestManager()
         .queueResponse(ResponseBuilder.forClearAllWithCards(CARDS).build(), /* delayMs= */ 100)
         .triggerRefresh(
             RequestReason.OPEN_WITHOUT_CONTENT,
diff --git a/src/test/java/com/google/android/libraries/feed/infraintegration/FilterHeadTest.java b/src/test/java/com/google/android/libraries/feed/infraintegration/FilterHeadTest.java
index 1fd929b..6d4159e 100644
--- a/src/test/java/com/google/android/libraries/feed/infraintegration/FilterHeadTest.java
+++ b/src/test/java/com/google/android/libraries/feed/infraintegration/FilterHeadTest.java
@@ -24,7 +24,7 @@
 import com.google.android.libraries.feed.common.testing.InfraIntegrationScope;
 import com.google.android.libraries.feed.common.testing.ResponseBuilder;
 import com.google.android.libraries.feed.host.logging.RequestReason;
-import com.google.android.libraries.feed.testing.requestmanager.FakeRequestManager;
+import com.google.android.libraries.feed.testing.requestmanager.FakeFeedRequestManager;
 import com.google.search.now.feed.client.StreamDataProto.StreamFeature;
 import com.google.search.now.feed.client.StreamDataProto.StreamPayload;
 import com.google.search.now.wire.feed.ContentIdProto.ContentId;
@@ -36,14 +36,14 @@
 /** Tests of the {@link SessionManager#getStreamFeaturesFromHead(Function, Consumer)} method. */
 @RunWith(RobolectricTestRunner.class)
 public class FilterHeadTest {
-  private FakeRequestManager requestManager;
+  private FakeFeedRequestManager fakeFeedRequestManager;
   private SessionManager sessionManager;
 
   @Before
   public void setUp() {
     initMocks(this);
     InfraIntegrationScope scope = new InfraIntegrationScope.Builder().build();
-    requestManager = scope.getRequestManager();
+    fakeFeedRequestManager = scope.getFakeFeedRequestManager();
     sessionManager = scope.getSessionManager();
   }
 
@@ -58,8 +58,8 @@
           ResponseBuilder.createFeatureContentId(5),
         };
 
-    requestManager.queueResponse(ResponseBuilder.forClearAllWithCards(cards).build());
-    requestManager.triggerRefresh(
+    fakeFeedRequestManager.queueResponse(ResponseBuilder.forClearAllWithCards(cards).build());
+    fakeFeedRequestManager.triggerRefresh(
         RequestReason.OPEN_WITHOUT_CONTENT,
         sessionManager.getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
 
diff --git a/src/test/java/com/google/android/libraries/feed/infraintegration/GcTest.java b/src/test/java/com/google/android/libraries/feed/infraintegration/GcTest.java
index 3a244ea..e328d2c 100644
--- a/src/test/java/com/google/android/libraries/feed/infraintegration/GcTest.java
+++ b/src/test/java/com/google/android/libraries/feed/infraintegration/GcTest.java
@@ -57,7 +57,7 @@
   @Test
   public void testGc_contentInLiveSessionRetained() {
     scope
-        .getRequestManager()
+        .getFakeFeedRequestManager()
         .queueResponse(createResponse(REQUEST_1))
         .triggerRefresh(
             RequestReason.OPEN_WITHOUT_CONTENT,
@@ -72,7 +72,7 @@
 
     // Populate HEAD with new data.
     scope
-        .getRequestManager()
+        .getFakeFeedRequestManager()
         .queueResponse(createResponse(REQUEST_2))
         .triggerRefresh(
             RequestReason.OPEN_WITHOUT_CONTENT,
@@ -88,7 +88,7 @@
   @Test
   public void testGc_contentInExpiredSessionDeleted() {
     scope
-        .getRequestManager()
+        .getFakeFeedRequestManager()
         .queueResponse(createResponse(REQUEST_1))
         .triggerRefresh(
             RequestReason.OPEN_WITHOUT_CONTENT,
@@ -103,7 +103,7 @@
 
     // Populate HEAD with new data.
     scope
-        .getRequestManager()
+        .getFakeFeedRequestManager()
         .queueResponse(createResponse(REQUEST_2))
         .triggerRefresh(
             RequestReason.OPEN_WITHOUT_CONTENT,
diff --git a/src/test/java/com/google/android/libraries/feed/infraintegration/LimitedPagingTest.java b/src/test/java/com/google/android/libraries/feed/infraintegration/LimitedPagingTest.java
index 1ac940a..8c96f13 100644
--- a/src/test/java/com/google/android/libraries/feed/infraintegration/LimitedPagingTest.java
+++ b/src/test/java/com/google/android/libraries/feed/infraintegration/LimitedPagingTest.java
@@ -27,7 +27,7 @@
 import com.google.android.libraries.feed.internalapi.modelprovider.ModelChild;
 import com.google.android.libraries.feed.internalapi.modelprovider.ModelProvider;
 import com.google.android.libraries.feed.internalapi.modelprovider.ModelProviderFactory;
-import com.google.android.libraries.feed.testing.requestmanager.FakeRequestManager;
+import com.google.android.libraries.feed.testing.requestmanager.FakeFeedRequestManager;
 import com.google.search.now.feed.client.StreamDataProto.UiContext;
 import com.google.search.now.wire.feed.ContentIdProto.ContentId;
 import org.junit.Before;
@@ -52,7 +52,7 @@
         ResponseBuilder.createFeatureContentId(6)
       };
 
-  private FakeRequestManager requestManager;
+  private FakeFeedRequestManager fakeFeedRequestManager;
   private SessionManager sessionManager;
   private ModelProviderFactory modelProviderFactory;
   private ModelProviderValidator modelValidator;
@@ -63,7 +63,7 @@
   public void setUp() {
     initMocks(this);
     InfraIntegrationScope scope = new InfraIntegrationScope.Builder().build();
-    requestManager = scope.getRequestManager();
+    fakeFeedRequestManager = scope.getFakeFeedRequestManager();
     sessionManager = scope.getSessionManager();
     modelProviderFactory = scope.getModelProviderFactory();
     modelValidator = new ModelProviderValidator(scope.getProtocolAdapter());
@@ -72,8 +72,8 @@
   @Test
   public void testPagingDetachedSession() {
     PagingState s1State = new PagingState(PAGE_1, PAGE_2, 1, contentIdGenerators);
-    requestManager.queueResponse(s1State.initialResponse);
-    requestManager.triggerRefresh(
+    fakeFeedRequestManager.queueResponse(s1State.initialResponse);
+    fakeFeedRequestManager.triggerRefresh(
         RequestReason.OPEN_WITHOUT_CONTENT,
         sessionManager.getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
 
@@ -87,7 +87,7 @@
 
     // Now Page session one and verify both session are as expected, only session one will contain
     // the paged content
-    requestManager.queueResponse(s1State.pageResponse);
+    fakeFeedRequestManager.queueResponse(s1State.pageResponse);
     sessionOne.handleToken(tokenChild.getModelToken());
 
     // Create the sessionOne from page1 and a token
@@ -102,7 +102,7 @@
         sessionThree, PAGE_1[0], PAGE_1[1], PAGE_1[2], PAGE_2[0], PAGE_2[1], PAGE_2[2]);
 
     // Page session two, this should not change anything else
-    requestManager.queueResponse(s1State.pageResponse);
+    fakeFeedRequestManager.queueResponse(s1State.pageResponse);
     sessionTwo.handleToken(tokenChild.getModelToken());
     modelValidator.assertCursorContents(
         sessionOne, PAGE_1[0], PAGE_1[1], PAGE_1[2], PAGE_2[0], PAGE_2[1], PAGE_2[2]);
diff --git a/src/test/java/com/google/android/libraries/feed/infraintegration/MultiSessionPagingTest.java b/src/test/java/com/google/android/libraries/feed/infraintegration/MultiSessionPagingTest.java
index 09c31a2..443f8e1 100644
--- a/src/test/java/com/google/android/libraries/feed/infraintegration/MultiSessionPagingTest.java
+++ b/src/test/java/com/google/android/libraries/feed/infraintegration/MultiSessionPagingTest.java
@@ -30,7 +30,7 @@
 import com.google.android.libraries.feed.internalapi.modelprovider.ModelProvider;
 import com.google.android.libraries.feed.internalapi.modelprovider.ModelProvider.State;
 import com.google.android.libraries.feed.internalapi.modelprovider.ModelProviderFactory;
-import com.google.android.libraries.feed.testing.requestmanager.FakeRequestManager;
+import com.google.android.libraries.feed.testing.requestmanager.FakeFeedRequestManager;
 import com.google.protobuf.ByteString;
 import com.google.search.now.feed.client.StreamDataProto.UiContext;
 import com.google.search.now.wire.feed.ContentIdProto.ContentId;
@@ -61,7 +61,7 @@
  */
 @RunWith(RobolectricTestRunner.class)
 public class MultiSessionPagingTest {
-  private FakeRequestManager requestManager;
+  private FakeFeedRequestManager fakeFeedRequestManager;
   private SessionManager sessionManager;
   private ModelProviderFactory modelProviderFactory;
   private ModelProviderValidator modelValidator;
@@ -71,7 +71,7 @@
   public void setUp() {
     initMocks(this);
     InfraIntegrationScope scope = new InfraIntegrationScope.Builder().build();
-    requestManager = scope.getRequestManager();
+    fakeFeedRequestManager = scope.getFakeFeedRequestManager();
     sessionManager = scope.getSessionManager();
     modelProviderFactory = scope.getModelProviderFactory();
     modelValidator = new ModelProviderValidator(scope.getProtocolAdapter());
@@ -104,8 +104,8 @@
     PagingState s2State = new PagingState(s2Cards, s2PageCards, 2, contentIdGenerators);
 
     // Create an initial S1 $HEAD session
-    requestManager.queueResponse(s1State.initialResponse);
-    requestManager.triggerRefresh(
+    fakeFeedRequestManager.queueResponse(s1State.initialResponse);
+    fakeFeedRequestManager.triggerRefresh(
         RequestReason.OPEN_WITHOUT_CONTENT,
         sessionManager.getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
 
@@ -122,8 +122,8 @@
     modelValidator.assertCursorContentsWithToken(mp2, s1Cards);
 
     // Refresh the Stream with the S2 initial response
-    requestManager.queueResponse(s2State.initialResponse);
-    requestManager.triggerRefresh(
+    fakeFeedRequestManager.queueResponse(s2State.initialResponse);
+    fakeFeedRequestManager.triggerRefresh(
         RequestReason.OPEN_WITHOUT_CONTENT,
         sessionManager.getUpdateConsumer(
             new MutationContext.Builder().setRequestingSessionId(mp2.getSessionId()).build()));
@@ -143,14 +143,14 @@
     assertThat(mp1.getCurrentState()).isEqualTo(State.READY);
 
     // now page S1
-    requestManager.queueResponse(s1State.pageResponse);
+    fakeFeedRequestManager.queueResponse(s1State.pageResponse);
     mp1.handleToken(mp1Token.getModelToken());
     modelValidator.assertCursorContents(
         mp1, s1Cards[0], s1Cards[1], s1PageCards[0], s1PageCards[1]);
     modelValidator.assertCursorContentsWithToken(mp2, s2Cards);
 
     // now page S2
-    requestManager.queueResponse(s2State.pageResponse);
+    fakeFeedRequestManager.queueResponse(s2State.pageResponse);
     mp2.handleToken(mp2Token.getModelToken());
     modelValidator.assertCursorContents(
         mp1, s1Cards[0], s1Cards[1], s1PageCards[0], s1PageCards[1]);
diff --git a/src/test/java/com/google/android/libraries/feed/infraintegration/RemoveTrackingBehaviorTest.java b/src/test/java/com/google/android/libraries/feed/infraintegration/RemoveTrackingBehaviorTest.java
index 8cf420e..6ee20d3 100644
--- a/src/test/java/com/google/android/libraries/feed/infraintegration/RemoveTrackingBehaviorTest.java
+++ b/src/test/java/com/google/android/libraries/feed/infraintegration/RemoveTrackingBehaviorTest.java
@@ -31,7 +31,7 @@
 import com.google.android.libraries.feed.internalapi.modelprovider.ModelProviderFactory;
 import com.google.android.libraries.feed.internalapi.modelprovider.RemoveTracking;
 import com.google.android.libraries.feed.internalapi.protocoladapter.ProtocolAdapter;
-import com.google.android.libraries.feed.testing.requestmanager.FakeRequestManager;
+import com.google.android.libraries.feed.testing.requestmanager.FakeFeedRequestManager;
 import com.google.search.now.feed.client.StreamDataProto.StreamDataOperation;
 import com.google.search.now.feed.client.StreamDataProto.StreamFeature;
 import com.google.search.now.feed.client.StreamDataProto.UiContext;
@@ -56,7 +56,7 @@
         ResponseBuilder.createFeatureContentId(5),
       };
 
-  private FakeRequestManager requestManager;
+  private FakeFeedRequestManager fakeFeedRequestManager;
   private SessionManager sessionManager;
   private ModelProviderFactory modelProviderFactory;
   private ProtocolAdapter protocolAdapter;
@@ -65,7 +65,7 @@
   public void setUp() {
     initMocks(this);
     InfraIntegrationScope scope = new InfraIntegrationScope.Builder().build();
-    requestManager = scope.getRequestManager();
+    fakeFeedRequestManager = scope.getFakeFeedRequestManager();
     sessionManager = scope.getSessionManager();
     modelProviderFactory = scope.getModelProviderFactory();
     protocolAdapter = scope.getProtocolAdapter();
@@ -185,8 +185,8 @@
   }
 
   private void loadInitialData() {
-    requestManager.queueResponse(ResponseBuilder.forClearAllWithCards(CARDS).build());
-    requestManager.triggerRefresh(
+    fakeFeedRequestManager.queueResponse(ResponseBuilder.forClearAllWithCards(CARDS).build());
+    fakeFeedRequestManager.triggerRefresh(
         RequestReason.OPEN_WITHOUT_CONTENT,
         sessionManager.getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
   }
diff --git a/src/test/java/com/google/android/libraries/feed/infraintegration/RootOnlyTest.java b/src/test/java/com/google/android/libraries/feed/infraintegration/RootOnlyTest.java
index b74abbd..6cc9c6c 100644
--- a/src/test/java/com/google/android/libraries/feed/infraintegration/RootOnlyTest.java
+++ b/src/test/java/com/google/android/libraries/feed/infraintegration/RootOnlyTest.java
@@ -32,7 +32,7 @@
 import com.google.android.libraries.feed.internalapi.modelprovider.ModelProvider.State;
 import com.google.android.libraries.feed.internalapi.modelprovider.ModelProviderFactory;
 import com.google.android.libraries.feed.internalapi.modelprovider.ModelProviderObserver;
-import com.google.android.libraries.feed.testing.requestmanager.FakeRequestManager;
+import com.google.android.libraries.feed.testing.requestmanager.FakeFeedRequestManager;
 import com.google.search.now.feed.client.StreamDataProto.StreamToken;
 import com.google.search.now.feed.client.StreamDataProto.UiContext;
 import com.google.search.now.wire.feed.ConsistencyTokenProto.ConsistencyToken;
@@ -45,7 +45,7 @@
 @RunWith(RobolectricTestRunner.class)
 public class RootOnlyTest {
   private final InfraIntegrationScope scope = new InfraIntegrationScope.Builder().build();
-  private final FakeRequestManager requestManager = scope.getRequestManager();
+  private final FakeFeedRequestManager fakeFeedRequestManager = scope.getFakeFeedRequestManager();
   private final FakeThreadUtils fakeThreadUtils = scope.getFakeThreadUtils();
   private final ModelProviderFactory modelProviderFactory = scope.getModelProviderFactory();
   private final ModelProviderValidator modelValidator =
@@ -56,8 +56,8 @@
   public void rootOnlyResponse_beforeSessionWithLifecycle() {
     // ModelProvider is created from $HEAD containing content
     ResponseBuilder responseBuilder = new ResponseBuilder().addClearOperation().addRootFeature();
-    requestManager.queueResponse(responseBuilder.build());
-    requestManager.triggerRefresh(
+    fakeFeedRequestManager.queueResponse(responseBuilder.build());
+    fakeFeedRequestManager.triggerRefresh(
         RequestReason.OPEN_WITHOUT_CONTENT,
         sessionManager.getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
     ModelProvider modelProvider =
@@ -93,10 +93,10 @@
     verify(changeObserver, never()).onSessionFinished(any(UiContext.class));
 
     ResponseBuilder responseBuilder = new ResponseBuilder().addRootFeature();
-    requestManager.queueResponse(responseBuilder.build());
+    fakeFeedRequestManager.queueResponse(responseBuilder.build());
     // TODO: sessions reject updates without a CLEAR_ALL or paging with a different token.
     fakeThreadUtils.enforceMainThread(false);
-    requestManager.loadMore(
+    fakeFeedRequestManager.loadMore(
         StreamToken.getDefaultInstance(),
         ConsistencyToken.getDefaultInstance(),
         sessionManager.getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
@@ -121,8 +121,8 @@
     // and the root is replaced
     ModelProviderObserver changeObserver = mock(ModelProviderObserver.class);
     ResponseBuilder responseBuilder = new ResponseBuilder().addClearOperation().addRootFeature();
-    requestManager.queueResponse(responseBuilder.build());
-    requestManager.triggerRefresh(
+    fakeFeedRequestManager.queueResponse(responseBuilder.build());
+    fakeFeedRequestManager.triggerRefresh(
         RequestReason.OPEN_WITHOUT_CONTENT,
         sessionManager.getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
     ModelProvider modelProvider =
@@ -137,10 +137,10 @@
             .setTable("feature")
             .build();
     responseBuilder = new ResponseBuilder().addRootFeature(anotherRoot);
-    requestManager.queueResponse(responseBuilder.build());
+    fakeFeedRequestManager.queueResponse(responseBuilder.build());
     // TODO: sessions reject updates without a CLEAR_ALL or paging with a different token.
     fakeThreadUtils.enforceMainThread(false);
-    requestManager.loadMore(
+    fakeFeedRequestManager.loadMore(
         StreamToken.getDefaultInstance(),
         ConsistencyToken.getDefaultInstance(),
         sessionManager.getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
diff --git a/src/test/java/com/google/android/libraries/feed/infraintegration/SemanticPropertiesTest.java b/src/test/java/com/google/android/libraries/feed/infraintegration/SemanticPropertiesTest.java
index 5c59a27..ffe663d 100644
--- a/src/test/java/com/google/android/libraries/feed/infraintegration/SemanticPropertiesTest.java
+++ b/src/test/java/com/google/android/libraries/feed/infraintegration/SemanticPropertiesTest.java
@@ -25,7 +25,7 @@
 import com.google.android.libraries.feed.common.testing.ResponseBuilder;
 import com.google.android.libraries.feed.host.logging.RequestReason;
 import com.google.android.libraries.feed.internalapi.store.Store;
-import com.google.android.libraries.feed.testing.requestmanager.FakeRequestManager;
+import com.google.android.libraries.feed.testing.requestmanager.FakeFeedRequestManager;
 import com.google.protobuf.ByteString;
 import com.google.search.now.wire.feed.ContentIdProto.ContentId;
 import com.google.search.now.wire.feed.ResponseProto.Response;
@@ -39,7 +39,7 @@
 @RunWith(RobolectricTestRunner.class)
 public class SemanticPropertiesTest {
   private final InfraIntegrationScope scope = new InfraIntegrationScope.Builder().build();
-  private final FakeRequestManager requestManager = scope.getRequestManager();
+  private final FakeFeedRequestManager fakeFeedRequestManager = scope.getFakeFeedRequestManager();
   private final SessionManager sessionManager = scope.getSessionManager();
   private final Store store = scope.getStore();
 
@@ -53,8 +53,8 @@
             .addClearOperation()
             .addCardWithSemanticData(contentId, semanticData)
             .build();
-    requestManager.queueResponse(response);
-    requestManager.triggerRefresh(
+    fakeFeedRequestManager.queueResponse(response);
+    fakeFeedRequestManager.triggerRefresh(
         RequestReason.OPEN_WITHOUT_CONTENT,
         sessionManager.getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
 
diff --git a/src/test/java/com/google/android/libraries/feed/infraintegration/SharedStateTest.java b/src/test/java/com/google/android/libraries/feed/infraintegration/SharedStateTest.java
index 920194b..31c52d5 100644
--- a/src/test/java/com/google/android/libraries/feed/infraintegration/SharedStateTest.java
+++ b/src/test/java/com/google/android/libraries/feed/infraintegration/SharedStateTest.java
@@ -26,7 +26,7 @@
 import com.google.android.libraries.feed.internalapi.modelprovider.ModelProvider;
 import com.google.android.libraries.feed.internalapi.modelprovider.ModelProviderFactory;
 import com.google.android.libraries.feed.internalapi.protocoladapter.ProtocolAdapter;
-import com.google.android.libraries.feed.testing.requestmanager.FakeRequestManager;
+import com.google.android.libraries.feed.testing.requestmanager.FakeFeedRequestManager;
 import com.google.search.now.feed.client.StreamDataProto.StreamSharedState;
 import com.google.search.now.feed.client.StreamDataProto.UiContext;
 import org.junit.Before;
@@ -37,7 +37,7 @@
 /** Tests of accessing shared state. */
 @RunWith(RobolectricTestRunner.class)
 public class SharedStateTest {
-  private FakeRequestManager requestManager;
+  private FakeFeedRequestManager fakeFeedRequestManager;
   private SessionManager sessionManager;
   private ProtocolAdapter protocolAdapter;
   private ModelProviderFactory modelProviderFactory;
@@ -47,7 +47,7 @@
   public void setUp() {
     initMocks(this);
     InfraIntegrationScope scope = new InfraIntegrationScope.Builder().build();
-    requestManager = scope.getRequestManager();
+    fakeFeedRequestManager = scope.getFakeFeedRequestManager();
     sessionManager = scope.getSessionManager();
     modelProviderFactory = scope.getModelProviderFactory();
     protocolAdapter = scope.getProtocolAdapter();
@@ -59,8 +59,8 @@
     // ModelProvider is created from $HEAD containing content, simple shared state added
     ResponseBuilder responseBuilder =
         new ResponseBuilder().addClearOperation().addPietSharedState().addRootFeature();
-    requestManager.queueResponse(responseBuilder.build());
-    requestManager.triggerRefresh(
+    fakeFeedRequestManager.queueResponse(responseBuilder.build());
+    fakeFeedRequestManager.triggerRefresh(
         RequestReason.OPEN_WITHOUT_CONTENT,
         sessionManager.getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
 
@@ -83,8 +83,8 @@
 
     ResponseBuilder responseBuilder =
         new ResponseBuilder().addClearOperation().addPietSharedState().addRootFeature();
-    requestManager.queueResponse(responseBuilder.build());
-    requestManager.triggerRefresh(
+    fakeFeedRequestManager.queueResponse(responseBuilder.build());
+    fakeFeedRequestManager.triggerRefresh(
         RequestReason.OPEN_WITHOUT_CONTENT,
         sessionManager.getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
 
diff --git a/src/test/java/com/google/android/libraries/feed/infraintegration/SimpleStreamTest.java b/src/test/java/com/google/android/libraries/feed/infraintegration/SimpleStreamTest.java
index 1f9ec39..07bbd75 100644
--- a/src/test/java/com/google/android/libraries/feed/infraintegration/SimpleStreamTest.java
+++ b/src/test/java/com/google/android/libraries/feed/infraintegration/SimpleStreamTest.java
@@ -30,7 +30,7 @@
 import com.google.android.libraries.feed.internalapi.modelprovider.ModelProvider;
 import com.google.android.libraries.feed.internalapi.modelprovider.ModelProviderFactory;
 import com.google.android.libraries.feed.internalapi.protocoladapter.ProtocolAdapter;
-import com.google.android.libraries.feed.testing.requestmanager.FakeRequestManager;
+import com.google.android.libraries.feed.testing.requestmanager.FakeFeedRequestManager;
 import com.google.search.now.feed.client.StreamDataProto.UiContext;
 import com.google.search.now.wire.feed.ContentIdProto.ContentId;
 import org.junit.Before;
@@ -41,7 +41,7 @@
 /** Simple tests of a stream with multiple cards. */
 @RunWith(RobolectricTestRunner.class)
 public class SimpleStreamTest {
-  private FakeRequestManager requestManager;
+  private FakeFeedRequestManager fakeFeedRequestManager;
   private SessionManager sessionManager;
   private ModelProviderFactory modelProviderFactory;
   private ModelProviderValidator modelValidator;
@@ -51,7 +51,7 @@
   public void setUp() {
     initMocks(this);
     InfraIntegrationScope scope = new InfraIntegrationScope.Builder().build();
-    requestManager = scope.getRequestManager();
+    fakeFeedRequestManager = scope.getFakeFeedRequestManager();
     sessionManager = scope.getSessionManager();
     modelProviderFactory = scope.getModelProviderFactory();
     protocolAdapter = scope.getProtocolAdapter();
@@ -65,8 +65,8 @@
     ResponseBuilder responseBuilder =
         ResponseBuilder.forClearAllWithCards(
             new ContentId[] {ResponseBuilder.createFeatureContentId(1)});
-    requestManager.queueResponse(responseBuilder.build());
-    requestManager.triggerRefresh(
+    fakeFeedRequestManager.queueResponse(responseBuilder.build());
+    fakeFeedRequestManager.triggerRefresh(
         RequestReason.OPEN_WITHOUT_CONTENT,
         sessionManager.getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
     ModelProvider modelProvider =
@@ -103,8 +103,8 @@
           ResponseBuilder.createFeatureContentId(1), ResponseBuilder.createFeatureContentId(2)
         };
     ResponseBuilder responseBuilder = ResponseBuilder.forClearAllWithCards(cards);
-    requestManager.queueResponse(responseBuilder.build());
-    requestManager.triggerRefresh(
+    fakeFeedRequestManager.queueResponse(responseBuilder.build());
+    fakeFeedRequestManager.triggerRefresh(
         RequestReason.OPEN_WITHOUT_CONTENT,
         sessionManager.getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
     ModelProvider modelProvider =
diff --git a/src/test/java/com/google/android/libraries/feed/infraintegration/StreamPagingTest.java b/src/test/java/com/google/android/libraries/feed/infraintegration/StreamPagingTest.java
index aad2de2..90dd50d 100644
--- a/src/test/java/com/google/android/libraries/feed/infraintegration/StreamPagingTest.java
+++ b/src/test/java/com/google/android/libraries/feed/infraintegration/StreamPagingTest.java
@@ -35,7 +35,7 @@
 import com.google.android.libraries.feed.internalapi.modelprovider.ModelToken;
 import com.google.android.libraries.feed.internalapi.modelprovider.TokenCompleted;
 import com.google.android.libraries.feed.internalapi.modelprovider.TokenCompletedObserver;
-import com.google.android.libraries.feed.testing.requestmanager.FakeRequestManager;
+import com.google.android.libraries.feed.testing.requestmanager.FakeFeedRequestManager;
 import com.google.search.now.feed.client.StreamDataProto.UiContext;
 import com.google.search.now.wire.feed.ContentIdProto.ContentId;
 import org.junit.Before;
@@ -47,7 +47,7 @@
 /** Test of handling paging operations within the Stream. */
 @RunWith(RobolectricTestRunner.class)
 public class StreamPagingTest {
-  private FakeRequestManager requestManager;
+  private FakeFeedRequestManager fakeFeedRequestManager;
   private SessionManager sessionManager;
   private ModelProviderFactory modelProviderFactory;
   private ModelProviderValidator modelValidator;
@@ -57,7 +57,7 @@
   public void setUp() {
     initMocks(this);
     InfraIntegrationScope scope = new InfraIntegrationScope.Builder().build();
-    requestManager = scope.getRequestManager();
+    fakeFeedRequestManager = scope.getFakeFeedRequestManager();
     sessionManager = scope.getSessionManager();
     modelProviderFactory = scope.getModelProviderFactory();
     modelValidator = new ModelProviderValidator(scope.getProtocolAdapter());
@@ -68,7 +68,7 @@
    *
    * <ol>
    *   <li>Setup the initial response and the paged response
-   *   <li>Setup the paging handling for the RequestManager
+   *   <li>Setup the paging handling for the FeedRequestManager
    *   <li>Create the Initial $HEAD from the initial response
    *   <li>Create a Session/ModelProvider
    *   <li>Setup the MutationContext and the ModelToken observer
@@ -88,11 +88,11 @@
           ResponseBuilder.createFeatureContentId(3), ResponseBuilder.createFeatureContentId(4)
         };
     PagingState state = new PagingState(cards, pageCards, 1, contentIdGenerators);
-    requestManager.queueResponse(state.initialResponse);
-    requestManager.queueResponse(state.pageResponse);
+    fakeFeedRequestManager.queueResponse(state.initialResponse);
+    fakeFeedRequestManager.queueResponse(state.pageResponse);
 
     // Create an initial model
-    requestManager.triggerRefresh(
+    fakeFeedRequestManager.triggerRefresh(
         RequestReason.OPEN_WITHOUT_CONTENT,
         sessionManager.getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
     ModelProvider modelProvider =
@@ -134,7 +134,7 @@
    *
    * <ul>
    *   <li>Setup the initial response and the paged response
-   *   <li>Setup the paging handling for the RequestManager
+   *   <li>Setup the paging handling for the FeedRequestManager
    *   <li>Create the Initial $HEAD from the initial response
    *   <li>Create a Session/ModelProvider
    *   <li>Page the Session/ModelProvider
@@ -153,11 +153,11 @@
           ResponseBuilder.createFeatureContentId(3), ResponseBuilder.createFeatureContentId(4)
         };
     PagingState state = new PagingState(cards, pageCards, 1, contentIdGenerators);
-    requestManager.queueResponse(state.initialResponse);
-    requestManager.queueResponse(state.pageResponse);
+    fakeFeedRequestManager.queueResponse(state.initialResponse);
+    fakeFeedRequestManager.queueResponse(state.pageResponse);
 
     // Create an initial model
-    requestManager.triggerRefresh(
+    fakeFeedRequestManager.triggerRefresh(
         RequestReason.OPEN_WITHOUT_CONTENT,
         sessionManager.getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
     ModelProvider modelProvider =
diff --git a/src/test/java/com/google/android/libraries/feed/infraintegration/StructureUpdateTest.java b/src/test/java/com/google/android/libraries/feed/infraintegration/StructureUpdateTest.java
index e6a3d50..61395ef 100644
--- a/src/test/java/com/google/android/libraries/feed/infraintegration/StructureUpdateTest.java
+++ b/src/test/java/com/google/android/libraries/feed/infraintegration/StructureUpdateTest.java
@@ -33,7 +33,7 @@
 import com.google.android.libraries.feed.internalapi.modelprovider.ModelProvider;
 import com.google.android.libraries.feed.internalapi.modelprovider.ModelProviderFactory;
 import com.google.android.libraries.feed.internalapi.protocoladapter.ProtocolAdapter;
-import com.google.android.libraries.feed.testing.requestmanager.FakeRequestManager;
+import com.google.android.libraries.feed.testing.requestmanager.FakeFeedRequestManager;
 import com.google.search.now.feed.client.StreamDataProto.StreamToken;
 import com.google.search.now.feed.client.StreamDataProto.UiContext;
 import com.google.search.now.wire.feed.ConsistencyTokenProto.ConsistencyToken;
@@ -48,7 +48,7 @@
 @RunWith(RobolectricTestRunner.class)
 public class StructureUpdateTest {
   private final InfraIntegrationScope scope = new InfraIntegrationScope.Builder().build();
-  private final FakeRequestManager requestManager = scope.getRequestManager();
+  private final FakeFeedRequestManager fakeFeedRequestManager = scope.getFakeFeedRequestManager();
   private final FakeThreadUtils fakeThreadUtils = scope.getFakeThreadUtils();
   private final ModelProviderFactory modelProviderFactory = scope.getModelProviderFactory();
   private final ModelProviderValidator modelValidator =
@@ -69,8 +69,9 @@
           ResponseBuilder.createFeatureContentId(3), ResponseBuilder.createFeatureContentId(4)
         };
 
-    requestManager.queueResponse(ResponseBuilder.forClearAllWithCards(startingCards).build());
-    requestManager.triggerRefresh(
+    fakeFeedRequestManager.queueResponse(
+        ResponseBuilder.forClearAllWithCards(startingCards).build());
+    fakeFeedRequestManager.triggerRefresh(
         RequestReason.OPEN_WITHOUT_CONTENT,
         sessionManager.getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
     ModelProvider modelProvider =
@@ -83,10 +84,11 @@
     modelValidator.assertCursorSize(root.getCursor(), startingCards.length);
 
     // Append new children to root
-    requestManager.queueResponse(ResponseBuilder.builder().addCardsToRoot(appendedCards).build());
+    fakeFeedRequestManager.queueResponse(
+        ResponseBuilder.builder().addCardsToRoot(appendedCards).build());
     // TODO: sessions reject updates without a CLEAR_ALL or paging with a different token.
     fakeThreadUtils.enforceMainThread(false);
-    requestManager.loadMore(
+    fakeFeedRequestManager.loadMore(
         StreamToken.getDefaultInstance(),
         ConsistencyToken.getDefaultInstance(),
         sessionManager.getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
@@ -122,8 +124,9 @@
           ResponseBuilder.createFeatureContentId(3), ResponseBuilder.createFeatureContentId(4)
         };
 
-    requestManager.queueResponse(ResponseBuilder.forClearAllWithCards(startingCards).build());
-    requestManager.triggerRefresh(
+    fakeFeedRequestManager.queueResponse(
+        ResponseBuilder.forClearAllWithCards(startingCards).build());
+    fakeFeedRequestManager.triggerRefresh(
         RequestReason.OPEN_WITHOUT_CONTENT,
         sessionManager.getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
     ModelProvider modelProvider =
@@ -137,10 +140,11 @@
     cursor.getNextItem();
 
     // Now append additional children to the stream (and cursor)
-    requestManager.queueResponse(ResponseBuilder.builder().addCardsToRoot(appendedCards).build());
+    fakeFeedRequestManager.queueResponse(
+        ResponseBuilder.builder().addCardsToRoot(appendedCards).build());
     // TODO: sessions reject updates without a CLEAR_ALL or paging with a different token.
     fakeThreadUtils.enforceMainThread(false);
-    requestManager.loadMore(
+    fakeFeedRequestManager.loadMore(
         StreamToken.getDefaultInstance(),
         ConsistencyToken.getDefaultInstance(),
         sessionManager.getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
diff --git a/src/test/java/com/google/android/libraries/feed/infraintegration/SyntheticTokensTest.java b/src/test/java/com/google/android/libraries/feed/infraintegration/SyntheticTokensTest.java
index df4f566..c70c9f5 100644
--- a/src/test/java/com/google/android/libraries/feed/infraintegration/SyntheticTokensTest.java
+++ b/src/test/java/com/google/android/libraries/feed/infraintegration/SyntheticTokensTest.java
@@ -44,7 +44,7 @@
 import com.google.android.libraries.feed.internalapi.modelprovider.TokenCompleted;
 import com.google.android.libraries.feed.internalapi.modelprovider.TokenCompletedObserver;
 import com.google.android.libraries.feed.internalapi.protocoladapter.ProtocolAdapter;
-import com.google.android.libraries.feed.testing.requestmanager.FakeRequestManager;
+import com.google.android.libraries.feed.testing.requestmanager.FakeFeedRequestManager;
 import com.google.search.now.feed.client.StreamDataProto.StreamDataOperation;
 import com.google.search.now.feed.client.StreamDataProto.UiContext;
 import com.google.search.now.wire.feed.ContentIdProto.ContentId;
@@ -64,7 +64,7 @@
   private static final int MIN_PAGE_SIZE = 2;
 
   private FakeClock fakeClock;
-  private FakeRequestManager requestManager;
+  private FakeFeedRequestManager fakeFeedRequestManager;
   private SessionManager sessionManager;
   private ModelProviderFactory modelProviderFactory;
   private ModelProviderValidator modelValidator;
@@ -83,7 +83,7 @@
     InfraIntegrationScope scope =
         new InfraIntegrationScope.Builder().setConfiguration(configuration).build();
     fakeClock = scope.getFakeClock();
-    requestManager = scope.getRequestManager();
+    fakeFeedRequestManager = scope.getFakeFeedRequestManager();
     sessionManager = scope.getSessionManager();
     modelProviderFactory = scope.getModelProviderFactory();
     protocolAdapter = scope.getProtocolAdapter();
@@ -124,8 +124,8 @@
 
     // Create 13 cards (initial page size + page size + page size and slope of 1)
     // Initial model will have all the cards
-    requestManager.queueResponse(ResponseBuilder.forClearAllWithCards(cards).build());
-    requestManager.triggerRefresh(
+    fakeFeedRequestManager.queueResponse(ResponseBuilder.forClearAllWithCards(cards).build());
+    fakeFeedRequestManager.triggerRefresh(
         RequestReason.OPEN_WITHOUT_CONTENT,
         sessionManager.getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
     ModelProvider modelProvider =
@@ -221,8 +221,8 @@
 
     // Create 13 cards (initial page size + page size + page size and slope of 1)
     // Initial model will have all the cards
-    requestManager.queueResponse(ResponseBuilder.forClearAllWithCards(cards).build());
-    requestManager.triggerRefresh(
+    fakeFeedRequestManager.queueResponse(ResponseBuilder.forClearAllWithCards(cards).build());
+    fakeFeedRequestManager.triggerRefresh(
         RequestReason.OPEN_WITHOUT_CONTENT,
         sessionManager.getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
     ModelProvider modelProvider =
@@ -315,9 +315,9 @@
         };
 
     PagingState state = new PagingState(cards, pageCards, 1, contentIdGenerators);
-    requestManager.queueResponse(state.initialResponse);
-    requestManager.queueResponse(state.pageResponse);
-    requestManager.triggerRefresh(
+    fakeFeedRequestManager.queueResponse(state.initialResponse);
+    fakeFeedRequestManager.queueResponse(state.pageResponse);
+    fakeFeedRequestManager.triggerRefresh(
         RequestReason.OPEN_WITHOUT_CONTENT,
         sessionManager.getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
     ModelProvider modelProvider =
@@ -385,9 +385,9 @@
         };
 
     PagingState state = new PagingState(cards, pageCards, 1, contentIdGenerators);
-    requestManager.queueResponse(state.initialResponse);
-    requestManager.queueResponse(state.pageResponse);
-    requestManager.triggerRefresh(
+    fakeFeedRequestManager.queueResponse(state.initialResponse);
+    fakeFeedRequestManager.queueResponse(state.pageResponse);
+    fakeFeedRequestManager.triggerRefresh(
         RequestReason.OPEN_WITHOUT_CONTENT,
         sessionManager.getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
     ModelProvider modelProvider =
@@ -461,8 +461,8 @@
         };
 
     // Create an initial root with a single item in it.
-    requestManager.queueResponse(ResponseBuilder.forClearAllWithCards(cards).build());
-    requestManager.triggerRefresh(
+    fakeFeedRequestManager.queueResponse(ResponseBuilder.forClearAllWithCards(cards).build());
+    fakeFeedRequestManager.triggerRefresh(
         RequestReason.OPEN_WITHOUT_CONTENT,
         sessionManager.getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
     ModelProvider modelProvider =
@@ -519,8 +519,8 @@
   private void clearSessionManagerContentCache() {
     // This is a bit of hack, which will clear the content cache and indicate to the
     // FeedSessionManager that we are in the non-cached mode.
-    requestManager.queueResponse(new ResponseBuilder().build());
-    requestManager.triggerRefresh(
+    fakeFeedRequestManager.queueResponse(new ResponseBuilder().build());
+    fakeFeedRequestManager.triggerRefresh(
         RequestReason.OPEN_WITHOUT_CONTENT,
         sessionManager.getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
     fakeClock.advance(TaskQueue.STARVATION_TIMEOUT_MS);
diff --git a/src/test/java/com/google/android/libraries/feed/infraintegration/TimeoutSessionBaseTest.java b/src/test/java/com/google/android/libraries/feed/infraintegration/TimeoutSessionBaseTest.java
index a4e865e..e97a7bd 100644
--- a/src/test/java/com/google/android/libraries/feed/infraintegration/TimeoutSessionBaseTest.java
+++ b/src/test/java/com/google/android/libraries/feed/infraintegration/TimeoutSessionBaseTest.java
@@ -30,7 +30,7 @@
 import com.google.android.libraries.feed.internalapi.modelprovider.ModelProviderFactory;
 import com.google.android.libraries.feed.internalapi.modelprovider.ModelProviderObserver;
 import com.google.android.libraries.feed.testing.host.scheduler.FakeSchedulerApi;
-import com.google.android.libraries.feed.testing.requestmanager.FakeRequestManager;
+import com.google.android.libraries.feed.testing.requestmanager.FakeFeedRequestManager;
 import com.google.search.now.feed.client.StreamDataProto.UiContext;
 import com.google.search.now.wire.feed.ContentIdProto.ContentId;
 import java.util.concurrent.TimeoutException;
@@ -56,7 +56,7 @@
       new FakeSchedulerApi(FakeThreadUtils.withoutThreadChecks());
 
   private FakeClock fakeClock;
-  private FakeRequestManager requestManager;
+  private FakeFeedRequestManager fakeFeedRequestManager;
   private SessionManager sessionManager;
   private ModelProviderFactory modelProviderFactory;
   private ModelProviderValidator modelValidator;
@@ -71,7 +71,7 @@
             .withTimeoutSessionConfiguration(2L)
             .build();
     fakeClock = scope.getFakeClock();
-    requestManager = scope.getRequestManager();
+    fakeFeedRequestManager = scope.getFakeFeedRequestManager();
     sessionManager = scope.getSessionManager();
     modelProviderFactory = scope.getModelProviderFactory();
     modelValidator = new ModelProviderValidator(scope.getProtocolAdapter());
@@ -97,7 +97,7 @@
         };
 
     // Load up the initial request
-    requestManager.queueResponse(
+    fakeFeedRequestManager.queueResponse(
         ResponseBuilder.forClearAllWithCards(requestOne).build(), /* delayMs= */ 100);
 
     // Wait for the request to complete (REQUEST_WITH_WAIT).  This will trigger the request and wait
diff --git a/src/test/java/com/google/android/libraries/feed/infraintegration/TimeoutSessionWithContentTest.java b/src/test/java/com/google/android/libraries/feed/infraintegration/TimeoutSessionWithContentTest.java
index 2914003..34cd2a8 100644
--- a/src/test/java/com/google/android/libraries/feed/infraintegration/TimeoutSessionWithContentTest.java
+++ b/src/test/java/com/google/android/libraries/feed/infraintegration/TimeoutSessionWithContentTest.java
@@ -32,7 +32,7 @@
 import com.google.android.libraries.feed.internalapi.modelprovider.ModelProviderObserver;
 import com.google.android.libraries.feed.internalapi.protocoladapter.ProtocolAdapter;
 import com.google.android.libraries.feed.testing.host.scheduler.FakeSchedulerApi;
-import com.google.android.libraries.feed.testing.requestmanager.FakeRequestManager;
+import com.google.android.libraries.feed.testing.requestmanager.FakeFeedRequestManager;
 import com.google.search.now.feed.client.StreamDataProto.UiContext;
 import com.google.search.now.wire.feed.ContentIdProto.ContentId;
 import java.util.concurrent.TimeoutException;
@@ -70,7 +70,7 @@
       new FakeSchedulerApi(FakeThreadUtils.withoutThreadChecks());
 
   private FakeClock fakeClock;
-  private FakeRequestManager requestManager;
+  private FakeFeedRequestManager fakeFeedRequestManager;
   private ModelProviderFactory modelProviderFactory;
   private ProtocolAdapter protocolAdapter;
   private ModelProviderValidator modelValidator;
@@ -85,7 +85,7 @@
             .withTimeoutSessionConfiguration(2L)
             .build();
     fakeClock = scope.getFakeClock();
-    requestManager = scope.getRequestManager();
+    fakeFeedRequestManager = scope.getFakeFeedRequestManager();
     modelProviderFactory = scope.getModelProviderFactory();
     protocolAdapter = scope.getProtocolAdapter();
     modelValidator = new ModelProviderValidator(scope.getProtocolAdapter());
@@ -97,7 +97,7 @@
    * <ol>
    *   <li>Create the initial ModelProvider from $HEAD with a REQUEST_WITH_WAIT which makes the
    *       request before the session is populated.
-   *   <li>Load the second request into the RequestManager
+   *   <li>Load the second request into the FeedRequestManager
    *   <li>Create a second ModelProvider using REQUEST_WITH_CONTENT which displays the initial $HEAD
    *       but makes a request. The second request will be appended to and update the ModelProvider.
    * </ol>
@@ -106,7 +106,7 @@
   public void testRequestWithWait() throws TimeoutException {
 
     // Load up the initial request
-    requestManager.queueResponse(
+    fakeFeedRequestManager.queueResponse(
         ResponseBuilder.forClearAllWithCards(REQUEST_ONE).build(), /* delayMs= */ 100);
 
     // Wait for the request to complete (REQUEST_WITH_CONTENT).  This will trigger the request and
@@ -129,7 +129,7 @@
     assertThat(fakeClock.currentTimeMillis() - startTimeMs).isAtLeast(100L);
 
     // Create a new ModelProvider from HEAD (REQUEST_WITH_CONTENT)
-    requestManager.queueResponse(
+    fakeFeedRequestManager.queueResponse(
         ResponseBuilder.forClearAllWithCards(REQUEST_TWO).build(), /* delayMs= */ 100);
     fakeSchedulerApi.setRequestBehavior(RequestBehavior.REQUEST_WITH_CONTENT);
     // This will wait for the session to be created and validate the root cursor
diff --git a/src/test/java/com/google/android/libraries/feed/infraintegration/ViewDepthProviderTests.java b/src/test/java/com/google/android/libraries/feed/infraintegration/ViewDepthProviderTests.java
index bbb4690..17a2ded 100644
--- a/src/test/java/com/google/android/libraries/feed/infraintegration/ViewDepthProviderTests.java
+++ b/src/test/java/com/google/android/libraries/feed/infraintegration/ViewDepthProviderTests.java
@@ -33,7 +33,7 @@
 import com.google.android.libraries.feed.internalapi.modelprovider.ModelProviderFactory;
 import com.google.android.libraries.feed.internalapi.protocoladapter.ProtocolAdapter;
 import com.google.android.libraries.feed.testing.modelprovider.FakeViewDepthProvider;
-import com.google.android.libraries.feed.testing.requestmanager.FakeRequestManager;
+import com.google.android.libraries.feed.testing.requestmanager.FakeFeedRequestManager;
 import com.google.search.now.feed.client.StreamDataProto.StreamToken;
 import com.google.search.now.feed.client.StreamDataProto.UiContext;
 import com.google.search.now.wire.feed.ConsistencyTokenProto.ConsistencyToken;
@@ -79,7 +79,7 @@
 
   @Mock private SchedulerApi schedulerApi;
 
-  private FakeRequestManager requestManager;
+  private FakeFeedRequestManager fakeFeedRequestManager;
   private FakeThreadUtils fakeThreadUtils;
   private ModelProviderFactory modelProviderFactory;
   private ProtocolAdapter protocolAdapter;
@@ -96,7 +96,7 @@
             .withTimeoutSessionConfiguration(2L)
             .build();
     fakeThreadUtils = scope.getFakeThreadUtils();
-    requestManager = scope.getRequestManager();
+    fakeFeedRequestManager = scope.getFakeFeedRequestManager();
     modelProviderFactory = scope.getModelProviderFactory();
     protocolAdapter = scope.getProtocolAdapter();
     modelValidator = new ModelProviderValidator(scope.getProtocolAdapter());
@@ -110,11 +110,11 @@
   public void baseDepthProviderTest() {
 
     // Load up the initial request
-    requestManager.queueResponse(ResponseBuilder.forClearAllWithCards(REQUEST_ONE).build());
+    fakeFeedRequestManager.queueResponse(ResponseBuilder.forClearAllWithCards(REQUEST_ONE).build());
 
     // The REQUEST_ONE content will be added to head, this is then used to create the initial
     // session.
-    requestManager.triggerRefresh(
+    fakeFeedRequestManager.triggerRefresh(
         RequestReason.OPEN_WITHOUT_CONTENT,
         sessionManager.getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
 
@@ -122,7 +122,7 @@
     // REQUEST_WITH_CONTENT
     when(schedulerApi.shouldSessionRequestData(any(SessionManagerState.class)))
         .thenReturn(RequestBehavior.REQUEST_WITH_CONTENT);
-    requestManager.queueResponse(ResponseBuilder.forClearAllWithCards(REQUEST_TWO).build());
+    fakeFeedRequestManager.queueResponse(ResponseBuilder.forClearAllWithCards(REQUEST_TWO).build());
     ModelProvider modelProvider =
         modelProviderFactory.createNew(viewDepthProvider, UiContext.getDefaultInstance());
 
@@ -140,11 +140,11 @@
   @Test
   public void testDuplicateEntries() {
     // Load up the initial request
-    requestManager.queueResponse(ResponseBuilder.forClearAllWithCards(REQUEST_ONE).build());
+    fakeFeedRequestManager.queueResponse(ResponseBuilder.forClearAllWithCards(REQUEST_ONE).build());
 
     // The REQUEST_ONE content will be added to head, this is then used to create the initial
     // session.
-    requestManager.triggerRefresh(
+    fakeFeedRequestManager.triggerRefresh(
         RequestReason.OPEN_WITHOUT_CONTENT,
         sessionManager.getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
 
@@ -152,7 +152,7 @@
     // REQUEST_WITH_CONTENT
     when(schedulerApi.shouldSessionRequestData(any(SessionManagerState.class)))
         .thenReturn(RequestBehavior.REQUEST_WITH_CONTENT);
-    requestManager.queueResponse(
+    fakeFeedRequestManager.queueResponse(
         ResponseBuilder.forClearAllWithCards(REQUEST_TWO_WITH_DUPLICATES).build());
     ModelProvider modelProvider =
         modelProviderFactory.createNew(viewDepthProvider, UiContext.getDefaultInstance());
@@ -168,11 +168,11 @@
         REQUEST_TWO_WITH_DUPLICATES[2]);
 
     // Now page in the same content, this should all be updates
-    requestManager.queueResponse(
+    fakeFeedRequestManager.queueResponse(
         ResponseBuilder.builder().addCardsToRoot(REQUEST_TWO_WITH_DUPLICATES_PAGE).build());
     // TODO: sessions reject updates without a CLEAR_ALL or paging with a different token.
     fakeThreadUtils.enforceMainThread(false);
-    requestManager.loadMore(
+    fakeFeedRequestManager.loadMore(
         StreamToken.getDefaultInstance(),
         ConsistencyToken.getDefaultInstance(),
         sessionManager.getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
diff --git a/src/test/java/com/google/android/libraries/feed/mocknetworkclient/MockServerNetworkClientTest.java b/src/test/java/com/google/android/libraries/feed/mocknetworkclient/MockServerNetworkClientTest.java
index 9d6edeb..346592b 100644
--- a/src/test/java/com/google/android/libraries/feed/mocknetworkclient/MockServerNetworkClientTest.java
+++ b/src/test/java/com/google/android/libraries/feed/mocknetworkclient/MockServerNetworkClientTest.java
@@ -32,7 +32,7 @@
 import com.google.android.libraries.feed.common.protoextensions.FeedExtensionRegistry;
 import com.google.android.libraries.feed.common.time.TimingUtils;
 import com.google.android.libraries.feed.common.time.testing.FakeClock;
-import com.google.android.libraries.feed.feedrequestmanager.FeedRequestManager;
+import com.google.android.libraries.feed.feedrequestmanager.FeedRequestManagerImpl;
 import com.google.android.libraries.feed.host.config.ApplicationInfo;
 import com.google.android.libraries.feed.host.config.Configuration;
 import com.google.android.libraries.feed.host.network.HttpRequest;
@@ -169,8 +169,8 @@
     MockServerNetworkClient networkClient =
         new MockServerNetworkClient(
             context, mockServerBuilder.build(), /* responseDelayMillis= */ 0L);
-    FeedRequestManager feedRequestManager =
-        new FeedRequestManager(
+    FeedRequestManagerImpl feedRequestManager =
+        new FeedRequestManagerImpl(
             configuration,
             networkClient,
             protocolAdapter,
@@ -213,8 +213,8 @@
     MockServerNetworkClient networkClient =
         new MockServerNetworkClient(
             context, mockServerBuilder.build(), /* responseDelayMillis= */ 0L);
-    FeedRequestManager feedRequestManager =
-        new FeedRequestManager(
+    FeedRequestManagerImpl feedRequestManager =
+        new FeedRequestManagerImpl(
             configuration,
             networkClient,
             protocolAdapter,