diff --git a/components/ntp_snippets/remote/remote_suggestions_status_service_impl.h b/components/ntp_snippets/remote/remote_suggestions_status_service_impl.h
index 06aa81e..ed0234bd 100644
--- a/components/ntp_snippets/remote/remote_suggestions_status_service_impl.h
+++ b/components/ntp_snippets/remote/remote_suggestions_status_service_impl.h
@@ -6,7 +6,6 @@
 #define COMPONENTS_NTP_SNIPPETS_REMOTE_REMOTE_SUGGESTIONS_STATUS_SERVICE_IMPL_H_
 
 #include "base/callback.h"
-#include "base/gtest_prod_util.h"
 #include "base/scoped_observer.h"
 #include "components/ntp_snippets/remote/remote_suggestions_status_service.h"
 #include "components/prefs/pref_change_registrar.h"
@@ -32,25 +31,6 @@
   void OnSignInStateChanged(bool has_signed_in) override;
 
  private:
-  // TODO(jkrcal): Rewrite the tests using the public API - observing status
-  // changes instead of calling private GetStatusFromDeps() directly.
-  FRIEND_TEST_ALL_PREFIXES(RemoteSuggestionsStatusServiceImplTest,
-                           SigninNeededIfSpecifiedByParam);
-  FRIEND_TEST_ALL_PREFIXES(RemoteSuggestionsStatusServiceImplTest,
-                           NoSigninNeeded);
-  FRIEND_TEST_ALL_PREFIXES(RemoteSuggestionsStatusServiceImplTest,
-                           DisabledViaPref);
-  FRIEND_TEST_ALL_PREFIXES(RemoteSuggestionsStatusServiceImplTest,
-                           DisabledViaAdditionalPref);
-  FRIEND_TEST_ALL_PREFIXES(RemoteSuggestionsStatusServiceImplTest,
-                           EnabledAfterListFolded);
-  FRIEND_TEST_ALL_PREFIXES(RemoteSuggestionsStatusServiceImplTest,
-                           DisabledWhenListFoldedOnStart);
-  FRIEND_TEST_ALL_PREFIXES(RemoteSuggestionsStatusServiceImplTest,
-                           EnablingAfterFoldedStart);
-  FRIEND_TEST_ALL_PREFIXES(RemoteSuggestionsStatusServiceImplTest,
-                           EnablingAfterFoldedStartSignedIn);
-
   // Callbacks for the PrefChangeRegistrar.
   void OnSnippetsEnabledChanged();
   void OnListVisibilityChanged();
diff --git a/components/ntp_snippets/remote/remote_suggestions_status_service_impl_unittest.cc b/components/ntp_snippets/remote/remote_suggestions_status_service_impl_unittest.cc
index eedf9fb..9294376 100644
--- a/components/ntp_snippets/remote/remote_suggestions_status_service_impl_unittest.cc
+++ b/components/ntp_snippets/remote/remote_suggestions_status_service_impl_unittest.cc
@@ -22,14 +22,12 @@
 namespace {
 const char kTestPrefName[] = "search_suggestions.test_name";
 
-void OnStatusChange(RemoteSuggestionsStatus old_status,
-                    RemoteSuggestionsStatus new_status) {}
-
 }  // namespace
 
 class RemoteSuggestionsStatusServiceImplTest : public ::testing::Test {
  public:
-  RemoteSuggestionsStatusServiceImplTest() {
+  RemoteSuggestionsStatusServiceImplTest()
+      : last_status_(RemoteSuggestionsStatus::ENABLED_AND_SIGNED_IN) {
     RemoteSuggestionsStatusServiceImpl::RegisterProfilePrefs(
         utils_.pref_service()->registry());
 
@@ -45,11 +43,21 @@
     auto service = std::make_unique<RemoteSuggestionsStatusServiceImpl>(
         false, utils_.pref_service(),
         list_hiding_enabled ? std::string() : kTestPrefName);
-    service->Init(base::BindRepeating(&OnStatusChange));
+    service->Init(base::BindRepeating(
+        &RemoteSuggestionsStatusServiceImplTest::OnStatusChange,
+        base::Unretained(this)));
     return service;
   }
 
+  RemoteSuggestionsStatus last_status() const { return last_status_; }
+
  protected:
+  void OnStatusChange(RemoteSuggestionsStatus old_status,
+                      RemoteSuggestionsStatus new_status) {
+    last_status_ = new_status;
+  }
+
+  RemoteSuggestionsStatus last_status_;
   test::RemoteSuggestionsTestUtils utils_;
   variations::testing::VariationParamsManager params_manager_;
 };
@@ -58,49 +66,41 @@
   auto service = MakeService(/*list_hiding_enabled=*/false);
 
   // By default, no signin is required.
-  EXPECT_EQ(RemoteSuggestionsStatus::ENABLED_AND_SIGNED_OUT,
-            service->GetStatusFromDeps());
+  EXPECT_EQ(RemoteSuggestionsStatus::ENABLED_AND_SIGNED_OUT, last_status());
 
   // Signin should cause a state change.
   service->OnSignInStateChanged(/*has_signed_in=*/true);
-  EXPECT_EQ(RemoteSuggestionsStatus::ENABLED_AND_SIGNED_IN,
-            service->GetStatusFromDeps());
+  EXPECT_EQ(RemoteSuggestionsStatus::ENABLED_AND_SIGNED_IN, last_status());
 }
 
 TEST_F(RemoteSuggestionsStatusServiceImplTest, DisabledViaPref) {
   auto service = MakeService(/*list_hiding_enabled=*/false);
 
   // The default test setup is signed out. The service is enabled.
-  ASSERT_EQ(RemoteSuggestionsStatus::ENABLED_AND_SIGNED_OUT,
-            service->GetStatusFromDeps());
+  ASSERT_EQ(RemoteSuggestionsStatus::ENABLED_AND_SIGNED_OUT, last_status());
 
   // Once the enabled pref is set to false, we should be disabled.
   utils_.pref_service()->SetBoolean(prefs::kEnableSnippets, false);
-  EXPECT_EQ(RemoteSuggestionsStatus::EXPLICITLY_DISABLED,
-            service->GetStatusFromDeps());
+  EXPECT_EQ(RemoteSuggestionsStatus::EXPLICITLY_DISABLED, last_status());
 
   // The state should not change, even though a signin has occurred.
   service->OnSignInStateChanged(/*has_signed_in=*/true);
-  EXPECT_EQ(RemoteSuggestionsStatus::EXPLICITLY_DISABLED,
-            service->GetStatusFromDeps());
+  EXPECT_EQ(RemoteSuggestionsStatus::EXPLICITLY_DISABLED, last_status());
 }
 
 TEST_F(RemoteSuggestionsStatusServiceImplTest, DisabledViaAdditionalPref) {
   auto service = MakeService(/*list_hiding_enabled=*/false);
 
   // The default test setup is signed out. The service is enabled.
-  ASSERT_EQ(RemoteSuggestionsStatus::ENABLED_AND_SIGNED_OUT,
-            service->GetStatusFromDeps());
+  ASSERT_EQ(RemoteSuggestionsStatus::ENABLED_AND_SIGNED_OUT, last_status());
 
   // Once the additional pref is set to false, we should be disabled.
   utils_.pref_service()->SetBoolean(kTestPrefName, false);
-  EXPECT_EQ(RemoteSuggestionsStatus::EXPLICITLY_DISABLED,
-            service->GetStatusFromDeps());
+  EXPECT_EQ(RemoteSuggestionsStatus::EXPLICITLY_DISABLED, last_status());
 
   // The state should not change, even though a signin has occurred.
   service->OnSignInStateChanged(/*has_signed_in=*/true);
-  EXPECT_EQ(RemoteSuggestionsStatus::EXPLICITLY_DISABLED,
-            service->GetStatusFromDeps());
+  EXPECT_EQ(RemoteSuggestionsStatus::EXPLICITLY_DISABLED, last_status());
 }
 
 TEST_F(RemoteSuggestionsStatusServiceImplTest, EnabledAfterListFolded) {
@@ -109,19 +109,16 @@
   EXPECT_TRUE(utils_.pref_service()->GetBoolean(prefs::kArticlesListVisible));
 
   // The default test setup is signed out. The service is enabled.
-  ASSERT_EQ(RemoteSuggestionsStatus::ENABLED_AND_SIGNED_OUT,
-            service->GetStatusFromDeps());
+  ASSERT_EQ(RemoteSuggestionsStatus::ENABLED_AND_SIGNED_OUT, last_status());
 
   // When the user toggles the visibility of articles list in UI off the service
   // should still be enabled until the end of the session.
   utils_.pref_service()->SetBoolean(prefs::kArticlesListVisible, false);
-  EXPECT_EQ(RemoteSuggestionsStatus::ENABLED_AND_SIGNED_OUT,
-            service->GetStatusFromDeps());
+  EXPECT_EQ(RemoteSuggestionsStatus::ENABLED_AND_SIGNED_OUT, last_status());
 
   // Signin should cause a state change.
   service->OnSignInStateChanged(/*has_signed_in=*/true);
-  EXPECT_EQ(RemoteSuggestionsStatus::ENABLED_AND_SIGNED_IN,
-            service->GetStatusFromDeps());
+  EXPECT_EQ(RemoteSuggestionsStatus::ENABLED_AND_SIGNED_IN, last_status());
 }
 
 TEST_F(RemoteSuggestionsStatusServiceImplTest, DisabledWhenListFoldedOnStart) {
@@ -129,13 +126,11 @@
   auto service = MakeService(/*list_hiding_enabled="*/ true);
 
   // The state should be disabled when starting with no list shown.
-  EXPECT_EQ(RemoteSuggestionsStatus::EXPLICITLY_DISABLED,
-            service->GetStatusFromDeps());
+  EXPECT_EQ(RemoteSuggestionsStatus::EXPLICITLY_DISABLED, last_status());
 
   // The state should not change, even though a signin has occurred.
   service->OnSignInStateChanged(/*has_signed_in=*/true);
-  EXPECT_EQ(RemoteSuggestionsStatus::EXPLICITLY_DISABLED,
-            service->GetStatusFromDeps());
+  EXPECT_EQ(RemoteSuggestionsStatus::EXPLICITLY_DISABLED, last_status());
 }
 
 TEST_F(RemoteSuggestionsStatusServiceImplTest, EnablingAfterFoldedStart) {
@@ -143,19 +138,16 @@
   auto service = MakeService(/*list_hiding_enabled="*/ true);
 
   // The state should be disabled when starting with no list shown.
-  EXPECT_EQ(RemoteSuggestionsStatus::EXPLICITLY_DISABLED,
-            service->GetStatusFromDeps());
+  EXPECT_EQ(RemoteSuggestionsStatus::EXPLICITLY_DISABLED, last_status());
 
   // When the user toggles the visibility of articles list in UI on, the service
   // should get enabled.
   utils_.pref_service()->SetBoolean(prefs::kArticlesListVisible, true);
-  EXPECT_EQ(RemoteSuggestionsStatus::ENABLED_AND_SIGNED_OUT,
-            service->GetStatusFromDeps());
+  EXPECT_EQ(RemoteSuggestionsStatus::ENABLED_AND_SIGNED_OUT, last_status());
 
   // Signin should cause a state change.
   service->OnSignInStateChanged(/*has_signed_in=*/true);
-  EXPECT_EQ(RemoteSuggestionsStatus::ENABLED_AND_SIGNED_IN,
-            service->GetStatusFromDeps());
+  EXPECT_EQ(RemoteSuggestionsStatus::ENABLED_AND_SIGNED_IN, last_status());
 }
 
 TEST_F(RemoteSuggestionsStatusServiceImplTest,
@@ -165,14 +157,12 @@
 
   // Signin should not cause a state change, because UI is not visible.
   service->OnSignInStateChanged(/*has_signed_in=*/true);
-  EXPECT_EQ(RemoteSuggestionsStatus::EXPLICITLY_DISABLED,
-            service->GetStatusFromDeps());
+  EXPECT_EQ(RemoteSuggestionsStatus::EXPLICITLY_DISABLED, last_status());
 
   // When the user toggles the visibility of articles list in UI on, the service
   // should get enabled.
   utils_.pref_service()->SetBoolean(prefs::kArticlesListVisible, true);
-  EXPECT_EQ(RemoteSuggestionsStatus::ENABLED_AND_SIGNED_IN,
-            service->GetStatusFromDeps());
+  EXPECT_EQ(RemoteSuggestionsStatus::ENABLED_AND_SIGNED_IN, last_status());
 }
 
 }  // namespace ntp_snippets
