15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 59ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "base/message_loop/message_loop.h" 65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/observer_list.h" 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/testing_pref_service.h" 8868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 97dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/chrome_notification_types.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile_info_cache.h" 115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/signin/fake_signin_manager.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/signin/signin_names_io_thread.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/testing_browser_process.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/testing_profile.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/testing_profile_manager.h" 16e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "components/signin/core/browser/signin_manager.h" 17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/public/browser/notification_service.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/test/test_browser_thread.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SigninNamesOnIOThreadTest : public testing::Test { 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SigninNamesOnIOThreadTest(); 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUp() OVERRIDE; 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void TearDown() OVERRIDE; 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 28a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void SimulateSignin(const base::string16& email); 29a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void AddNewProfile(const base::string16& name, const base::string16& email); 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::MessageLoop message_loop_; 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::TestBrowserThread ui_thread_; 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::TestBrowserThread io_thread_; 345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<TestingProfile> profile_; 355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) FakeSigninManager* signin_manager_; 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestingProfileManager testing_profile_manager_; 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SigninNamesOnIOThread signin_names_; 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SigninNamesOnIOThreadTest::SigninNamesOnIOThreadTest() 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : ui_thread_(content::BrowserThread::UI, &message_loop_), 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) io_thread_(content::BrowserThread::IO, &message_loop_), 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) testing_profile_manager_( 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestingBrowserProcess::GetGlobal()) { 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SigninNamesOnIOThreadTest::SetUp() { 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(testing_profile_manager_.SetUp()); 495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) TestingProfile::Builder builder; 505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) builder.AddTestingFactory(SigninManagerFactory::GetInstance(), 515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) FakeSigninManagerBase::Build); 525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) profile_ = builder.Build(); 535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) signin_manager_ = static_cast<FakeSigninManager*>( 545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) SigninManagerFactory::GetForProfile(profile_.get())); 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SigninNamesOnIOThreadTest::TearDown() { 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) signin_names_.ReleaseResourcesOnUIThread(); 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 61a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)void SigninNamesOnIOThreadTest::SimulateSignin(const base::string16& email) { 625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) signin_manager_->SignIn(base::UTF16ToUTF8(email), "password"); 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 65a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)void SigninNamesOnIOThreadTest::AddNewProfile(const base::string16& name, 66a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& email) { 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileInfoCache* cache = testing_profile_manager_.profile_info_cache(); 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& user_data_dir = cache->GetUserDataDir(); 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_POSIX) 705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::FilePath profile_dir = 715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) user_data_dir.Append(base::UTF16ToUTF8(name)); 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath profile_dir = user_data_dir.Append(name); 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 752385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch cache->AddProfileToCache(profile_dir, name, email, 0, std::string()); 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SigninNamesOnIOThreadTest, Basic) { 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(0u, signin_names_.GetEmails().size()); 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SigninNamesOnIOThreadTest, Signin) { 835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::string16 email = base::UTF8ToUTF16("foo@gmail.com"); 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SimulateSignin(email); 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const SigninNamesOnIOThread::EmailSet& emails = signin_names_.GetEmails(); 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1u, emails.size()); 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1u, emails.count(email)); 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SigninNamesOnIOThreadTest, Signout) { 925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::string16 email = base::UTF8ToUTF16("foo@gmail.com"); 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SimulateSignin(email); 94116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch signin_manager_->SignOut(signin_metrics::SIGNOUT_TEST); 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const SigninNamesOnIOThread::EmailSet& emails = signin_names_.GetEmails(); 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(0u, emails.size()); 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SigninNamesOnIOThreadTest, StartWithConnectedProfiles) { 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Setup a couple of connected profiles, and one unconnected. 1025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::string16 email1 = base::UTF8ToUTF16("foo@gmail.com"); 1035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::string16 email2 = base::UTF8ToUTF16("bar@gmail.com"); 1045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) AddNewProfile(base::UTF8ToUTF16("foo"), email1); 1055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) AddNewProfile(base::UTF8ToUTF16("bar"), email2); 1065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) AddNewProfile(base::UTF8ToUTF16("toto"), base::string16()); 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SigninNamesOnIOThread signin_names; 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const SigninNamesOnIOThread::EmailSet& emails = signin_names.GetEmails(); 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2u, emails.size()); 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1u, emails.count(email1)); 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1u, emails.count(email2)); 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) signin_names.ReleaseResourcesOnUIThread(); 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 117