chromium/chrome/browser/ash/printing/enterprise/print_servers_provider_factory.cc

// 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