Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(238)

Unified Diff: chrome/browser/signin/chrome_signin_client_unittest.cc

Issue 2442843002: Override SigninManager::SignOut if force-signin is enabled. (Closed)
Patch Set: Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/signin/chrome_signin_client_unittest.cc
diff --git a/chrome/browser/signin/chrome_signin_client_unittest.cc b/chrome/browser/signin/chrome_signin_client_unittest.cc
index b9ab35bd6bf1363527c91c8802c853ad81d556c5..e4500de255e843b34a6d905548b88843ed4a3d42 100644
--- a/chrome/browser/signin/chrome_signin_client_unittest.cc
+++ b/chrome/browser/signin/chrome_signin_client_unittest.cc
@@ -4,15 +4,24 @@
#include "chrome/browser/signin/chrome_signin_client.h"
+#include <memory>
+
#include "base/bind.h"
#include "base/message_loop/message_loop.h"
#include "base/run_loop.h"
#include "build/build_config.h"
+#include "chrome/browser/prefs/browser_prefs.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/signin/chrome_signin_client_factory.h"
+#include "chrome/browser/signin/signin_error_controller_factory.h"
+#include "chrome/common/pref_names.h"
+#include "chrome/test/base/browser_with_test_window_test.h"
+#include "chrome/test/base/testing_browser_process.h"
#include "chrome/test/base/testing_profile.h"
+#include "components/prefs/testing_pref_service.h"
#include "content/public/test/test_browser_thread_bundle.h"
#include "net/base/network_change_notifier.h"
+#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
// ChromeOS has its own network delay logic.
@@ -116,4 +125,134 @@ TEST_F(ChromeSigninClientTest, DelayNetworkCallRunsAfterNetworkFound) {
ASSERT_TRUE(tester.WasCalledExactlyOnce());
}
-#endif
+#if !defined(OS_ANDROID)
+
+class MockChromeSigninClient : public ChromeSigninClient {
+ public:
+ MockChromeSigninClient(Profile* profile, SigninErrorController* controller)
+ : ChromeSigninClient(profile, controller) {}
+
+ MOCK_METHOD1(ShowUserManager, void(const base::FilePath&));
+ MOCK_METHOD1(LockProfile, void(const base::FilePath&));
+};
+
+class MockSigninManager : public SigninManager {
+ public:
+ explicit MockSigninManager(SigninClient* client)
+ : SigninManager(client, nullptr, &fake_service_, nullptr) {}
+
+ MOCK_METHOD2(DoSignOut,
+ void(signin_metrics::ProfileSignout,
+ signin_metrics::SignoutDelete));
+
+ AccountTrackerService fake_service_;
+};
+
+class ChromeSigninClientSignoutTest : public BrowserWithTestWindowTest {
+ public:
+ void SetUp() override {
+ BrowserWithTestWindowTest::SetUp();
+
+ prefs_.reset(new TestingPrefServiceSimple());
+ chrome::RegisterLocalState(prefs_->registry());
+ TestingBrowserProcess::GetGlobal()->SetLocalState(prefs_.get());
+ prefs_->SetBoolean(prefs::kForceBrowserSignin, true);
+
+ CreateClient(browser()->profile());
+ manager_.reset(new MockSigninManager(client_.get()));
+ }
+
+ void TearDown() override {
+ BrowserWithTestWindowTest::TearDown();
+ TestingBrowserProcess::GetGlobal()->SetLocalState(nullptr);
+ }
+
+ void CreateClient(Profile* profile) {
+ SigninErrorController* controller = new SigninErrorController();
+ client_.reset(new MockChromeSigninClient(profile, controller));
+ fake_controller_.reset(controller);
+ }
+
+ std::unique_ptr<SigninErrorController> fake_controller_;
+ std::unique_ptr<MockChromeSigninClient> client_;
+ std::unique_ptr<MockSigninManager> manager_;
+ std::unique_ptr<TestingPrefServiceSimple> prefs_;
+};
+
+TEST_F(ChromeSigninClientSignoutTest, SignOut) {
+ signin_metrics::ProfileSignout source_metric =
+ signin_metrics::ProfileSignout::SIGNOUT_TEST;
+ signin_metrics::SignoutDelete delete_metric =
+ signin_metrics::SignoutDelete::IGNORE_METRIC;
+
+ EXPECT_CALL(*client_, ShowUserManager(browser()->profile()->GetPath()))
+ .Times(1);
+ EXPECT_CALL(*client_, LockProfile(browser()->profile()->GetPath())).Times(1);
+ EXPECT_CALL(*manager_, DoSignOut(source_metric, delete_metric)).Times(1);
+
+ manager_->SignOut(source_metric, delete_metric);
+}
+
+TEST_F(ChromeSigninClientSignoutTest, SignOutWithoutManager) {
+ signin_metrics::ProfileSignout source_metric =
+ signin_metrics::ProfileSignout::SIGNOUT_TEST;
+ signin_metrics::SignoutDelete delete_metric =
+ signin_metrics::SignoutDelete::IGNORE_METRIC;
+
+ MockSigninManager other_manager(client_.get());
+ other_manager.CopyCredentialsFrom(*manager_.get());
+
+ EXPECT_CALL(*client_, ShowUserManager(browser()->profile()->GetPath()))
+ .Times(0);
+ EXPECT_CALL(*client_, LockProfile(browser()->profile()->GetPath())).Times(1);
+ EXPECT_CALL(*manager_, DoSignOut(source_metric, delete_metric)).Times(1);
+ manager_->SignOut(source_metric, delete_metric);
+
+ ::testing::Mock::VerifyAndClearExpectations(manager_.get());
+
+ EXPECT_CALL(*client_, ShowUserManager(browser()->profile()->GetPath()))
+ .Times(1);
+ EXPECT_CALL(*client_, LockProfile(browser()->profile()->GetPath())).Times(1);
+ EXPECT_CALL(*manager_, DoSignOut(source_metric, delete_metric)).Times(1);
+ manager_->SignOut(source_metric, delete_metric);
+}
+
+TEST_F(ChromeSigninClientSignoutTest, SignOutWithoutForceSignin) {
+ prefs_->SetBoolean(prefs::kForceBrowserSignin, false);
+ CreateClient(browser()->profile());
+ manager_.reset(new MockSigninManager(client_.get()));
+
+ signin_metrics::ProfileSignout source_metric =
+ signin_metrics::ProfileSignout::SIGNOUT_TEST;
+ signin_metrics::SignoutDelete delete_metric =
+ signin_metrics::SignoutDelete::IGNORE_METRIC;
+
+ EXPECT_CALL(*client_, ShowUserManager(browser()->profile()->GetPath()))
+ .Times(0);
+ EXPECT_CALL(*client_, LockProfile(browser()->profile()->GetPath())).Times(0);
+ EXPECT_CALL(*manager_, DoSignOut(source_metric, delete_metric)).Times(1);
+ manager_->SignOut(source_metric, delete_metric);
+}
+
+TEST_F(ChromeSigninClientSignoutTest, SignOutGuestSession) {
+ TestingProfile::Builder builder;
+ builder.SetGuestSession();
+ std::unique_ptr<TestingProfile> profile = builder.Build();
+
+ CreateClient(profile.get());
+ manager_.reset(new MockSigninManager(client_.get()));
+
+ signin_metrics::ProfileSignout source_metric =
+ signin_metrics::ProfileSignout::SIGNOUT_TEST;
+ signin_metrics::SignoutDelete delete_metric =
+ signin_metrics::SignoutDelete::IGNORE_METRIC;
+
+ EXPECT_CALL(*client_, ShowUserManager(browser()->profile()->GetPath()))
+ .Times(0);
+ EXPECT_CALL(*client_, LockProfile(browser()->profile()->GetPath())).Times(0);
+ EXPECT_CALL(*manager_, DoSignOut(source_metric, delete_metric)).Times(1);
+ manager_->SignOut(source_metric, delete_metric);
+}
+
+#endif // !defined(OS_ANDROID)
+#endif // !defined(OS_CHROMEOS)
« no previous file with comments | « chrome/browser/signin/chrome_signin_client.cc ('k') | chrome/browser/ui/sync/one_click_signin_sync_starter.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698