blob: f9bcdbb1b7299bc043e67b0d295af489a3e238d3 [file] [log] [blame]
// Copyright 2018 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.
#ifndef CHROME_CREDENTIAL_PROVIDER_TEST_COM_FAKES_H_
#define CHROME_CREDENTIAL_PROVIDER_TEST_COM_FAKES_H_
#include <atlcomcli.h>
#include <credentialprovider.h>
#include <propkey.h>
#include <vector>
#include "base/strings/string16.h"
#include "chrome/credential_provider/gaiacp/gaia_credential_provider_i.h"
namespace credential_provider {
#define DECLARE_IUNKOWN_NOQI_WITH_REF() \
IFACEMETHODIMP QueryInterface(REFIID riid, void** ppv) override; \
ULONG STDMETHODCALLTYPE AddRef() override; \
ULONG STDMETHODCALLTYPE Release(void) override; \
ULONG ref_count_ = 1;
///////////////////////////////////////////////////////////////////////////////
// Fake the CredentialProviderUserArray COM object.
class FakeCredentialProviderUser : public ICredentialProviderUser {
public:
FakeCredentialProviderUser(const wchar_t* sid, const wchar_t* username);
virtual ~FakeCredentialProviderUser();
private:
// ICredentialProviderUser
DECLARE_IUNKOWN_NOQI_WITH_REF()
HRESULT STDMETHODCALLTYPE GetSid(wchar_t** sid) override;
HRESULT STDMETHODCALLTYPE GetProviderID(GUID* providerID) override;
HRESULT STDMETHODCALLTYPE GetStringValue(REFPROPERTYKEY key,
wchar_t** stringValue) override;
HRESULT STDMETHODCALLTYPE GetValue(REFPROPERTYKEY key,
PROPVARIANT* value) override;
base::string16 sid_;
base::string16 username_;
};
///////////////////////////////////////////////////////////////////////////////
// Fake the CredentialProviderUserArray COM object.
class FakeCredentialProviderUserArray : public ICredentialProviderUserArray {
public:
FakeCredentialProviderUserArray();
virtual ~FakeCredentialProviderUserArray();
void AddUser(const wchar_t* sid, const wchar_t* username) {
users_.emplace_back(sid, username);
}
void SetAccountOptions(CREDENTIAL_PROVIDER_ACCOUNT_OPTIONS cpao) {
cpao_ = cpao;
}
private:
// ICredentialProviderUserArray
DECLARE_IUNKOWN_NOQI_WITH_REF()
IFACEMETHODIMP SetProviderFilter(REFGUID guidProviderToFilterTo) override;
IFACEMETHODIMP GetAccountOptions(
CREDENTIAL_PROVIDER_ACCOUNT_OPTIONS* cpao) override;
IFACEMETHODIMP GetCount(DWORD* userCount) override;
IFACEMETHODIMP GetAt(DWORD index, ICredentialProviderUser** user) override;
std::vector<FakeCredentialProviderUser> users_;
CREDENTIAL_PROVIDER_ACCOUNT_OPTIONS cpao_ = CPAO_NONE;
};
///////////////////////////////////////////////////////////////////////////////
// Fake OS imlpementation of ICredentialProviderEvents.
class FakeCredentialProviderEvents : public ICredentialProviderEvents {
public:
FakeCredentialProviderEvents();
virtual ~FakeCredentialProviderEvents();
// ICredentialProviderEvents
DECLARE_IUNKOWN_NOQI_WITH_REF()
IFACEMETHODIMP CredentialsChanged(UINT_PTR upAdviseContext) override;
bool CredentialsChangedReceived() const { return did_change_; }
void ResetCredentialsChangedReceived() { did_change_ = false; }
private:
bool did_change_ = false;
};
///////////////////////////////////////////////////////////////////////////////
// Fake the GaiaCredentialProvider COM object.
class FakeGaiaCredentialProvider : public IGaiaCredentialProvider {
public:
FakeGaiaCredentialProvider();
virtual ~FakeGaiaCredentialProvider();
const CComBSTR& username() const { return username_; }
const CComBSTR& password() const { return password_; }
const CComBSTR& sid() const { return sid_; }
bool credentials_changed_fired() const { return credentials_changed_fired_; }
void ResetCredentialsChangedFired() { credentials_changed_fired_ = FALSE; }
void SetUsageScenario(CREDENTIAL_PROVIDER_USAGE_SCENARIO cpus) {
cpus_ = cpus;
}
// IGaiaCredentialProvider
IFACEMETHODIMP GetUsageScenario(DWORD* cpus) override;
DECLARE_IUNKOWN_NOQI_WITH_REF()
IFACEMETHODIMP OnUserAuthenticated(IUnknown* credential,
BSTR username,
BSTR password,
BSTR sid,
BOOL fire_credentials_changed) override;
private:
CComBSTR username_;
CComBSTR password_;
CComBSTR sid_;
BOOL credentials_changed_fired_ = FALSE;
CREDENTIAL_PROVIDER_USAGE_SCENARIO cpus_ = CPUS_LOGON;
};
} // namespace credential_provider
#endif // CHROME_CREDENTIAL_PROVIDER_TEST_COM_FAKES_H_