| Index: chrome/browser/ui/sync/one_click_signin_helper_unittest.cc
|
| diff --git a/chrome/browser/ui/sync/one_click_signin_helper_unittest.cc b/chrome/browser/ui/sync/one_click_signin_helper_unittest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..7622cf2ff0ad5ba29ab990d3ec1bcc566a834f1f
|
| --- /dev/null
|
| +++ b/chrome/browser/ui/sync/one_click_signin_helper_unittest.cc
|
| @@ -0,0 +1,154 @@
|
| +// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "chrome/browser/content_settings/cookie_settings.h"
|
| +#include "chrome/browser/prefs/pref_service.h"
|
| +#include "chrome/browser/profiles/profile.h"
|
| +#include "chrome/browser/profiles/profile_manager.h"
|
| +#include "chrome/browser/signin/signin_manager_factory.h"
|
| +#include "chrome/browser/signin/signin_manager_fake.h"
|
| +#include "chrome/browser/ui/sync/one_click_signin_helper.h"
|
| +#include "chrome/common/pref_names.h"
|
| +#include "chrome/test/base/testing_profile.h"
|
| +#include "content/public/browser/browser_context.h"
|
| +#include "content/public/browser/navigation_controller.h"
|
| +#include "content/public/browser/site_instance.h"
|
| +#include "content/public/browser/web_contents.h"
|
| +#include "content/test/test_browser_context.h"
|
| +#include "content/test/test_browser_thread.h"
|
| +#include "content/test/web_contents_tester.h"
|
| +#include "testing/gmock/include/gmock/gmock-actions.h"
|
| +#include "testing/gmock/include/gmock/gmock.h"
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +
|
| +namespace {
|
| +
|
| +class OneClickSigninHelperTest : public testing::Test {
|
| + public:
|
| + OneClickSigninHelperTest() : signin_manager_(NULL) {
|
| + }
|
| +
|
| + virtual void TearDown() OVERRIDE;
|
| +
|
| + protected:
|
| + // Marks the current thread as the UI thread, so that calls that assume
|
| + // they are called on that thread work.
|
| + void MarkCurrentThreadAsUIThread();
|
| +
|
| + // Creates a mock WebContents for tests. If |use_incognito| is true then
|
| + // a WebContents for an incognito profile is created.
|
| + content::WebContents* CreateMockWebContents(bool use_incognito);
|
| +
|
| + void EnableOneClick(bool enable);
|
| +
|
| + void AllowSigninCookies(bool enable);
|
| +
|
| + // Marks the profile as connected to the given account. If |username| is the
|
| + // empty string, the profile is not connected.
|
| + void ConnectProfileToAccount(const std::string& username);
|
| +
|
| + private:
|
| + // Members to fake that we are on the UI thread.
|
| + MessageLoop message_loop_;
|
| + scoped_ptr<content::TestBrowserThread> ui_thread_;
|
| +
|
| + // Mock objects used during tests. The objects need to be torn down in the
|
| + // correct order, see TearDown().
|
| + scoped_ptr<content::WebContents> web_contents_;
|
| + scoped_ptr<TestingProfile> profile_;
|
| + SigninManager* signin_manager_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(OneClickSigninHelperTest);
|
| +};
|
| +
|
| +void OneClickSigninHelperTest::TearDown() {
|
| + // Destroy things in proper order.
|
| + web_contents_.reset();
|
| + profile_.reset();
|
| + ui_thread_.reset();
|
| +}
|
| +
|
| +void OneClickSigninHelperTest::MarkCurrentThreadAsUIThread() {
|
| + ui_thread_.reset(new content::TestBrowserThread(
|
| + content::BrowserThread::UI, &message_loop_));
|
| +}
|
| +
|
| +content::WebContents* OneClickSigninHelperTest::CreateMockWebContents(
|
| + bool use_incognito) {
|
| + EXPECT_TRUE(web_contents_.get() == NULL);
|
| +
|
| + profile_.reset(new TestingProfile());
|
| + signin_manager_ = static_cast<SigninManager*>(
|
| + SigninManagerFactory::GetInstance()->SetTestingFactoryAndUse(
|
| + profile_.get(), FakeSigninManager::Build));
|
| +
|
| + profile_->set_incognito(use_incognito);
|
| + web_contents_.reset(content::WebContentsTester::CreateTestWebContents(
|
| + profile_.get(), NULL));
|
| + return web_contents_.get();
|
| +}
|
| +
|
| +void OneClickSigninHelperTest::EnableOneClick(bool enable) {
|
| + PrefService* pref_service = profile_->GetPrefs();
|
| + pref_service->SetBoolean(prefs::kReverseAutologinEnabled, enable);
|
| +}
|
| +
|
| +void OneClickSigninHelperTest::AllowSigninCookies(bool enable) {
|
| + CookieSettings* cookie_settings =
|
| + CookieSettings::Factory::GetForProfile(profile_.get());
|
| + cookie_settings->SetDefaultCookieSetting(
|
| + enable ? CONTENT_SETTING_ALLOW : CONTENT_SETTING_BLOCK);
|
| +}
|
| +
|
| +void OneClickSigninHelperTest::ConnectProfileToAccount(
|
| + const std::string& username) {
|
| + signin_manager_->StartSignIn(username, std::string(), std::string(),
|
| + std::string());
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| +TEST_F(OneClickSigninHelperTest, CanOfferNoContents) {
|
| + EXPECT_FALSE(OneClickSigninHelper::CanOffer(NULL, true));
|
| + EXPECT_FALSE(OneClickSigninHelper::CanOffer(NULL, false));
|
| +}
|
| +
|
| +TEST_F(OneClickSigninHelperTest, CanOffer) {
|
| + MarkCurrentThreadAsUIThread();
|
| + content::WebContents* web_contents = CreateMockWebContents(false);
|
| +
|
| + EnableOneClick(true);
|
| + EXPECT_TRUE(OneClickSigninHelper::CanOffer(web_contents, true));
|
| + EXPECT_TRUE(OneClickSigninHelper::CanOffer(web_contents, false));
|
| +
|
| + EnableOneClick(false);
|
| + EXPECT_FALSE(OneClickSigninHelper::CanOffer(web_contents, true));
|
| + EXPECT_FALSE(OneClickSigninHelper::CanOffer(web_contents, false));
|
| +}
|
| +
|
| +TEST_F(OneClickSigninHelperTest, CanOfferProfileConnected) {
|
| + MarkCurrentThreadAsUIThread();
|
| + content::WebContents* web_contents = CreateMockWebContents(false);
|
| + ConnectProfileToAccount("foo@gmail.com");
|
| +
|
| + EXPECT_FALSE(OneClickSigninHelper::CanOffer(web_contents, true));
|
| + EXPECT_TRUE(OneClickSigninHelper::CanOffer(web_contents, false));
|
| +}
|
| +
|
| +TEST_F(OneClickSigninHelperTest, CanOfferIncognito) {
|
| + MarkCurrentThreadAsUIThread();
|
| + content::WebContents* web_contents = CreateMockWebContents(true);
|
| +
|
| + EXPECT_FALSE(OneClickSigninHelper::CanOffer(web_contents, true));
|
| + EXPECT_FALSE(OneClickSigninHelper::CanOffer(web_contents, false));
|
| +}
|
| +
|
| +TEST_F(OneClickSigninHelperTest, CanOfferNoSigninCookies) {
|
| + MarkCurrentThreadAsUIThread();
|
| + content::WebContents* web_contents = CreateMockWebContents(true);
|
| + AllowSigninCookies(false);
|
| +
|
| + EXPECT_FALSE(OneClickSigninHelper::CanOffer(web_contents, true));
|
| + EXPECT_FALSE(OneClickSigninHelper::CanOffer(web_contents, false));
|
| +}
|
|
|