1f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 2f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// found in the LICENSE file. 4f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 5f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/strings/utf_string_conversions.h" 65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/password_manager/mock_password_store_service.h" 7f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/password_manager/password_store_factory.h" 8f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/ui/passwords/password_manager_presenter.h" 9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/ui/passwords/password_ui_view.h" 10f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/test/base/testing_profile.h" 115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "components/password_manager/core/browser/mock_password_store.h" 12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h" 13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using base::ASCIIToUTF16; 16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using testing::Eq; 17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using testing::Property; 18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class MockPasswordUIView : public PasswordUIView { 20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) public: 21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) explicit MockPasswordUIView(Profile* profile) 22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) : profile_(profile), password_manager_presenter_(this) { 23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) password_manager_presenter_.Initialize(); 24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual ~MockPasswordUIView() {} 26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual Profile* GetProfile() OVERRIDE; 27a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if !defined(OS_ANDROID) 28a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual gfx::NativeWindow GetNativeWindow() OVERRIDE; 29a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif 30a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) MOCK_METHOD2(ShowPassword, void(size_t, const base::string16&)); 31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) MOCK_METHOD2(SetPasswordList, 32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void(const ScopedVector<autofill::PasswordForm>&, bool)); 33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) MOCK_METHOD1(SetPasswordExceptionList, 34f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void(const ScopedVector<autofill::PasswordForm>&)); 35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) PasswordManagerPresenter* GetPasswordManagerPresenter() { 36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return &password_manager_presenter_; 37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) private: 40f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Profile* profile_; 41f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) PasswordManagerPresenter password_manager_presenter_; 42f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(MockPasswordUIView); 44f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}; 45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 46a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if !defined(OS_ANDROID) 47a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)gfx::NativeWindow MockPasswordUIView::GetNativeWindow() { return NULL; } 48a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif 49f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)Profile* MockPasswordUIView::GetProfile() { return profile_; } 50f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 51f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class PasswordManagerPresenterTest : public testing::Test { 52f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) protected: 53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) PasswordManagerPresenterTest() {} 54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual ~PasswordManagerPresenterTest() {} 56f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void SetUp() OVERRIDE { 575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) PasswordStoreFactory::GetInstance()->SetTestingFactory( 585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) &profile_, MockPasswordStoreService::Build); 59f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) mock_controller_.reset(new MockPasswordUIView(&profile_)); 60f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 61f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void AddPasswordEntry(const GURL& origin, 62f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const std::string& user_name, 63f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const std::string& password); 64f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void AddPasswordException(const GURL& origin); 65f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void UpdateLists(); 66f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) MockPasswordUIView* GetUIController() { return mock_controller_.get(); } 67f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 68f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) private: 69f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) TestingProfile profile_; 70f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_ptr<MockPasswordUIView> mock_controller_; 71f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 72f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(PasswordManagerPresenterTest); 73f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}; 74f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 75f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void PasswordManagerPresenterTest::AddPasswordEntry( 76f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const GURL& origin, 77f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const std::string& user_name, 78f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const std::string& password) { 79f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) autofill::PasswordForm* form = new autofill::PasswordForm(); 80f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) form->origin = origin; 815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) form->username_element = base::ASCIIToUTF16("Email"); 825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) form->username_value = base::ASCIIToUTF16(user_name); 835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) form->password_element = base::ASCIIToUTF16("Passwd"); 845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) form->password_value = base::ASCIIToUTF16(password); 85f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) mock_controller_->GetPasswordManagerPresenter()->password_list_ 86f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) .push_back(form); 87f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 88f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 89f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void PasswordManagerPresenterTest::AddPasswordException(const GURL& origin) { 90f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) autofill::PasswordForm* form = new autofill::PasswordForm(); 91f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) form->origin = origin; 92f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) mock_controller_->GetPasswordManagerPresenter()->password_exception_list_ 93f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) .push_back(form); 94f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 95f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 96f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void PasswordManagerPresenterTest::UpdateLists() { 97f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) mock_controller_->GetPasswordManagerPresenter()->SetPasswordList(); 98f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) mock_controller_->GetPasswordManagerPresenter()->SetPasswordExceptionList(); 99f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 100f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 101f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace { 102f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 103f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(PasswordManagerPresenterTest, UIControllerIsCalled) { 104f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL( 105f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *GetUIController(), 106f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SetPasswordList( 107a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) Property(&ScopedVector<autofill::PasswordForm>::size, Eq(0u)), 108a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) testing::_)); 109f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*GetUIController(), 110f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SetPasswordExceptionList(Property( 111f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) &ScopedVector<autofill::PasswordForm>::size, Eq(0u)))); 112f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) UpdateLists(); 113f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GURL pass_origin("http://abc1.com"); 114f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddPasswordEntry(pass_origin, "test@gmail.com", "test"); 115f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL( 116f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *GetUIController(), 117f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SetPasswordList( 118a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) Property(&ScopedVector<autofill::PasswordForm>::size, Eq(1u)), 119a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) testing::_)); 120f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*GetUIController(), 121f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SetPasswordExceptionList(Property( 122f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) &ScopedVector<autofill::PasswordForm>::size, Eq(0u)))); 123f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) UpdateLists(); 124f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GURL except_origin("http://abc2.com"); 125f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddPasswordException(except_origin); 126f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL( 127f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *GetUIController(), 128f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SetPasswordList( 129a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) Property(&ScopedVector<autofill::PasswordForm>::size, Eq(1u)), 130a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) testing::_)); 131f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*GetUIController(), 132f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SetPasswordExceptionList(Property( 133f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) &ScopedVector<autofill::PasswordForm>::size, Eq(1u)))); 134f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) UpdateLists(); 135f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GURL pass_origin2("http://example.com"); 136f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddPasswordEntry(pass_origin2, "test@gmail.com", "test"); 137f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL( 138f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *GetUIController(), 139f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SetPasswordList( 140a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) Property(&ScopedVector<autofill::PasswordForm>::size, Eq(2u)), 141a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) testing::_)); 142f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*GetUIController(), 143f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SetPasswordExceptionList(Property( 144f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) &ScopedVector<autofill::PasswordForm>::size, Eq(1u)))); 145f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) UpdateLists(); 146f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 147f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 148f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} // namespace 149