1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
|
// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/ash/printing/enterprise/print_servers_provider_factory.h"
#include "base/no_destructor.h"
#include "chrome/browser/ash/printing/enterprise/print_servers_provider.h"
#include "chrome/browser/ash/profiles/profile_helper.h"
#include "chrome/browser/profiles/profile.h"
#include "components/account_id/account_id.h"
#include "components/user_manager/user.h"
#include "content/public/browser/browser_thread.h"
namespace ash {
// static
PrintServersProviderFactory* PrintServersProviderFactory::Get() {
static base::NoDestructor<PrintServersProviderFactory> instance;
return instance.get();
}
base::WeakPtr<PrintServersProvider>
PrintServersProviderFactory::GetForAccountId(const AccountId& account_id) {
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
auto found = providers_by_user_.find(account_id);
if (found != providers_by_user_.end()) {
return found->second->AsWeakPtr();
}
providers_by_user_[account_id] = PrintServersProvider::Create();
return providers_by_user_[account_id]->AsWeakPtr();
}
base::WeakPtr<PrintServersProvider> PrintServersProviderFactory::GetForProfile(
Profile* profile) {
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
const user_manager::User* user =
ProfileHelper::Get()->GetUserByProfile(profile);
if (!user)
return nullptr;
return GetForAccountId(user->GetAccountId());
}
base::WeakPtr<PrintServersProvider>
PrintServersProviderFactory::GetForDevice() {
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
if (!device_provider_) {
device_provider_ = PrintServersProvider::Create();
}
return device_provider_->AsWeakPtr();
}
void PrintServersProviderFactory::RemoveForAccountId(
const AccountId& account_id) {
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
providers_by_user_.erase(account_id);
}
void PrintServersProviderFactory::Shutdown() {
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
providers_by_user_.clear();
device_provider_ = nullptr;
}
PrintServersProviderFactory::PrintServersProviderFactory() = default;
PrintServersProviderFactory::~PrintServersProviderFactory() = default;
} // namespace ash
|