Commit be623810 authored by Javier Ernesto Flores Robles's avatar Javier Ernesto Flores Robles Committed by Commit Bot

[iOS][Credential-Provider] Create service and factory

This adds an skeleton for the credential provider service, which will be
in charge of listening to the changes in the password store and keep
Credential Provider data in sync.

Bug: 1066803
Change-Id: Iedec647ff9a18f5aae013bd318d095019af65be1
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2133928
Commit-Queue: Javier Ernesto Flores Robles <javierrobles@chromium.org>
Reviewed-by: default avatarSylvain Defresne <sdefresne@chromium.org>
Cr-Commit-Position: refs/heads/master@{#756286}
parent fd6e6ffb
...@@ -94,6 +94,7 @@ source_set("browser_state_impl") { ...@@ -94,6 +94,7 @@ source_set("browser_state_impl") {
"//ios/chrome/browser/browsing_data", "//ios/chrome/browser/browsing_data",
"//ios/chrome/browser/content_settings", "//ios/chrome/browser/content_settings",
"//ios/chrome/browser/crash_report/breadcrumbs", "//ios/chrome/browser/crash_report/breadcrumbs",
"//ios/chrome/browser/credential_provider",
"//ios/chrome/browser/device_sharing", "//ios/chrome/browser/device_sharing",
"//ios/chrome/browser/dom_distiller", "//ios/chrome/browser/dom_distiller",
"//ios/chrome/browser/download", "//ios/chrome/browser/download",
......
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
#include "ios/chrome/browser/content_settings/cookie_settings_factory.h" #include "ios/chrome/browser/content_settings/cookie_settings_factory.h"
#include "ios/chrome/browser/crash_report/breadcrumbs/breadcrumb_manager_keyed_service_factory.h" #include "ios/chrome/browser/crash_report/breadcrumbs/breadcrumb_manager_keyed_service_factory.h"
#include "ios/chrome/browser/crash_report/breadcrumbs/breadcrumb_persistent_storage_keyed_service_factory.h" #include "ios/chrome/browser/crash_report/breadcrumbs/breadcrumb_persistent_storage_keyed_service_factory.h"
#include "ios/chrome/browser/credential_provider/credential_provider_service_factory.h"
#import "ios/chrome/browser/device_sharing/device_sharing_manager_factory.h" #import "ios/chrome/browser/device_sharing/device_sharing_manager_factory.h"
#include "ios/chrome/browser/dom_distiller/dom_distiller_service_factory.h" #include "ios/chrome/browser/dom_distiller/dom_distiller_service_factory.h"
#include "ios/chrome/browser/download/browser_download_service_factory.h" #include "ios/chrome/browser/download/browser_download_service_factory.h"
...@@ -101,6 +102,7 @@ void EnsureBrowserStateKeyedServiceFactoriesBuilt() { ...@@ -101,6 +102,7 @@ void EnsureBrowserStateKeyedServiceFactoriesBuilt() {
BrowserDownloadServiceFactory::GetInstance(); BrowserDownloadServiceFactory::GetInstance();
BrowsingDataRemoverFactory::GetInstance(); BrowsingDataRemoverFactory::GetInstance();
ConsentAuditorFactory::GetInstance(); ConsentAuditorFactory::GetInstance();
CredentialProviderServiceFactory::GetInstance();
DeviceSharingManagerFactory::GetInstance(); DeviceSharingManagerFactory::GetInstance();
GoogleLogoServiceFactory::GetInstance(); GoogleLogoServiceFactory::GetInstance();
IdentityManagerFactory::GetInstance(); IdentityManagerFactory::GetInstance();
......
...@@ -28,6 +28,8 @@ ...@@ -28,6 +28,8 @@
#include "ios/chrome/browser/browser_state_metrics/browser_state_metrics.h" #include "ios/chrome/browser/browser_state_metrics/browser_state_metrics.h"
#include "ios/chrome/browser/chrome_constants.h" #include "ios/chrome/browser/chrome_constants.h"
#include "ios/chrome/browser/chrome_paths.h" #include "ios/chrome/browser/chrome_paths.h"
#include "ios/chrome/browser/credential_provider/credential_provider_service_factory.h"
#include "ios/chrome/browser/credential_provider/credential_provider_support.h"
#include "ios/chrome/browser/pref_names.h" #include "ios/chrome/browser/pref_names.h"
#include "ios/chrome/browser/signin/account_consistency_service_factory.h" #include "ios/chrome/browser/signin/account_consistency_service_factory.h"
#include "ios/chrome/browser/signin/account_reconcilor_factory.h" #include "ios/chrome/browser/signin/account_reconcilor_factory.h"
...@@ -210,6 +212,10 @@ void ChromeBrowserStateManagerImpl::DoFinalInitForServices( ...@@ -210,6 +212,10 @@ void ChromeBrowserStateManagerImpl::DoFinalInitForServices(
// Initialization needs to happen after the browser context is available // Initialization needs to happen after the browser context is available
// because UnifiedConsentService's dependencies needs the URL context getter. // because UnifiedConsentService's dependencies needs the URL context getter.
UnifiedConsentServiceFactory::GetForBrowserState(browser_state); UnifiedConsentServiceFactory::GetForBrowserState(browser_state);
if (IsCredentialProviderExtensionSupported()) {
CredentialProviderServiceFactory::GetForBrowserState(browser_state);
}
} }
void ChromeBrowserStateManagerImpl::AddBrowserStateToCache( void ChromeBrowserStateManagerImpl::AddBrowserStateToCache(
......
...@@ -9,12 +9,21 @@ import("//ios/build/chrome_build.gni") ...@@ -9,12 +9,21 @@ import("//ios/build/chrome_build.gni")
source_set("credential_provider") { source_set("credential_provider") {
configs += [ "//build/config/compiler:enable_arc" ] configs += [ "//build/config/compiler:enable_arc" ]
sources = [ sources = [
"credential_provider_service.cc",
"credential_provider_service.h",
"credential_provider_service_factory.cc",
"credential_provider_service_factory.h",
"credential_provider_support.cc", "credential_provider_support.cc",
"credential_provider_support.h", "credential_provider_support.h",
] ]
deps = [ deps = [
":buildflags", ":buildflags",
"//base", "//base",
"//components/keyed_service/core",
"//components/keyed_service/ios",
"//components/password_manager/core/browser",
"//ios/chrome/browser/browser_state",
"//ios/chrome/browser/passwords",
] ]
} }
...@@ -29,10 +38,11 @@ buildflag_header("buildflags") { ...@@ -29,10 +38,11 @@ buildflag_header("buildflags") {
source_set("unit_tests") { source_set("unit_tests") {
configs += [ "//build/config/compiler:enable_arc" ] configs += [ "//build/config/compiler:enable_arc" ]
testonly = true testonly = true
sources = [] sources = [ "credential_provider_service_unittest.cc" ]
deps = [ deps = [
":credential_provider", ":credential_provider",
"//base/test:test_support", "//base/test:test_support",
"//components/password_manager/core/browser:test_support",
"//testing/gtest", "//testing/gtest",
] ]
} }
// Copyright 2020 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 "ios/chrome/browser/credential_provider/credential_provider_service.h"
#include "base/logging.h"
#include "base/scoped_observer.h"
#include "base/threading/sequenced_task_runner_handle.h"
#include "build/build_config.h"
CredentialProviderService::CredentialProviderService(
scoped_refptr<password_manager::PasswordStore> password_store)
: password_store_(password_store) {}
CredentialProviderService::~CredentialProviderService() {}
void CredentialProviderService::Shutdown() {}
// Copyright 2020 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 IOS_CHROME_BROWSER_CREDENTIAL_PROVIDER_CREDENTIAL_PROVIDER_SERVICE_H_
#define IOS_CHROME_BROWSER_CREDENTIAL_PROVIDER_CREDENTIAL_PROVIDER_SERVICE_H_
#include "base/memory/ref_counted.h"
#include "components/keyed_service/core/keyed_service.h"
#include "components/password_manager/core/browser/password_store.h"
// A browser-context keyed service that is used to keep the Credential Provider
// Extension data up to date.
class CredentialProviderService : public KeyedService {
public:
// Initializes the service.
CredentialProviderService(
scoped_refptr<password_manager::PasswordStore> password_store);
~CredentialProviderService() override;
// KeyedService:
void Shutdown() override;
private:
friend class CredentialProviderServiceTest;
// The interface for getting and manipulating a user's saved passwords.
scoped_refptr<password_manager::PasswordStore> password_store_;
DISALLOW_COPY_AND_ASSIGN(CredentialProviderService);
};
#endif // IOS_CHROME_BROWSER_CREDENTIAL_PROVIDER_CREDENTIAL_PROVIDER_SERVICE_H_
// Copyright 2020 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 "ios/chrome/browser/credential_provider/credential_provider_service_factory.h"
#include "components/keyed_service/core/service_access_type.h"
#include "components/keyed_service/ios/browser_state_dependency_manager.h"
#include "ios/chrome/browser/browser_state/chrome_browser_state.h"
#include "ios/chrome/browser/credential_provider/credential_provider_service.h"
#include "ios/chrome/browser/passwords/ios_chrome_password_store_factory.h"
// static
CredentialProviderService* CredentialProviderServiceFactory::GetForBrowserState(
ChromeBrowserState* browser_state) {
return static_cast<CredentialProviderService*>(
GetInstance()->GetServiceForBrowserState(browser_state, true));
}
// static
CredentialProviderServiceFactory*
CredentialProviderServiceFactory::GetInstance() {
static base::NoDestructor<CredentialProviderServiceFactory> instance;
return instance.get();
}
CredentialProviderServiceFactory::CredentialProviderServiceFactory()
: BrowserStateKeyedServiceFactory(
"CredentialProviderService",
BrowserStateDependencyManager::GetInstance()) {
DependsOn(IOSChromePasswordStoreFactory::GetInstance());
}
CredentialProviderServiceFactory::~CredentialProviderServiceFactory() = default;
std::unique_ptr<KeyedService>
CredentialProviderServiceFactory::BuildServiceInstanceFor(
web::BrowserState* context) const {
ChromeBrowserState* browser_state =
ChromeBrowserState::FromBrowserState(context);
scoped_refptr<password_manager::PasswordStore> password_store =
IOSChromePasswordStoreFactory::GetForBrowserState(
browser_state, ServiceAccessType::IMPLICIT_ACCESS);
return std::make_unique<CredentialProviderService>(password_store);
}
// Copyright 2020 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 IOS_CHROME_BROWSER_CREDENTIAL_PROVIDER_CREDENTIAL_PROVIDER_SERVICE_FACTORY_H_
#define IOS_CHROME_BROWSER_CREDENTIAL_PROVIDER_CREDENTIAL_PROVIDER_SERVICE_FACTORY_H_
#include "base/macros.h"
#include "base/no_destructor.h"
#include "components/keyed_service/ios/browser_state_keyed_service_factory.h"
class ChromeBrowserState;
class CredentialProviderService;
// Singleton that owns all CredentialProviderServices and associates them with
// ChromeBrowserState.
class CredentialProviderServiceFactory
: public BrowserStateKeyedServiceFactory {
public:
static CredentialProviderService* GetForBrowserState(
ChromeBrowserState* browser_state);
static CredentialProviderServiceFactory* GetInstance();
private:
friend class base::NoDestructor<CredentialProviderServiceFactory>;
CredentialProviderServiceFactory();
~CredentialProviderServiceFactory() override;
// BrowserStateKeyedServiceFactory implementation.
std::unique_ptr<KeyedService> BuildServiceInstanceFor(
web::BrowserState* context) const override;
DISALLOW_COPY_AND_ASSIGN(CredentialProviderServiceFactory);
};
#endif // IOS_CHROME_BROWSER_CREDENTIAL_PROVIDER_CREDENTIAL_PROVIDER_SERVICE_FACTORY_H_
// Copyright 2020 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 "ios/chrome/browser/credential_provider/credential_provider_service.h"
#include "components/password_manager/core/browser/test_password_store.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace {
using password_manager::TestPasswordStore;
class CredentialProviderServiceTest : public testing::Test {
public:
CredentialProviderServiceTest() {}
~CredentialProviderServiceTest() override {
if (credential_provider_service_) {
credential_provider_service_->Shutdown();
password_store_->ShutdownOnUIThread();
}
}
void CreateConsentService() {
password_store_ = base::MakeRefCounted<TestPasswordStore>();
credential_provider_service_ =
std::make_unique<CredentialProviderService>(password_store_);
}
protected:
std::unique_ptr<CredentialProviderService> credential_provider_service_;
scoped_refptr<TestPasswordStore> password_store_;
DISALLOW_COPY_AND_ASSIGN(CredentialProviderServiceTest);
};
TEST_F(CredentialProviderServiceTest, Create) {
CreateConsentService();
EXPECT_TRUE(credential_provider_service_);
}
} // namespace
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment