// Copyright 2017 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_ASH_PRINTING_PRINT_SERVERS_MANAGER_H_
#define CHROME_BROWSER_ASH_PRINTING_PRINT_SERVERS_MANAGER_H_
#include <memory>
#include <string>
#include <vector>
#include "chrome/browser/ash/printing/enterprise/print_servers_policy_provider.h"
#include "chrome/browser/ash/printing/print_server.h"
#include "chrome/browser/ash/printing/printer_detector.h"
#include "chrome/browser/ash/printing/printer_installation_manager.h"
#include "chromeos/printing/printer_configuration.h"
#include "chromeos/printing/uri.h"
#include "components/keyed_service/core/keyed_service.h"
class PrefRegistrySimple;
class Profile;
namespace user_prefs {
class PrefRegistrySyncable;
} // namespace user_prefs
namespace ash {
class PrinterDetector;
class ServerPrintersProvider;
struct PrintServersConfig {
PrintServersConfig();
~PrintServersConfig();
PrintServersConfig(const PrintServersConfig&);
PrintServersConfig& operator=(const PrintServersConfig&);
ServerPrintersFetchingMode fetching_mode;
std::vector<PrintServer> print_servers;
};
// Manager of IPP print servers in ChromeOS.
class PrintServersManager {
public:
class Observer {
public:
virtual void OnPrintServersChanged(const PrintServersConfig& config) {}
virtual void OnServerPrintersChanged(
const std::vector<PrinterDetector::DetectedPrinter>& printers) {}
virtual ~Observer() = default;
};
// Factory function.
static std::unique_ptr<PrintServersManager> Create(Profile* profile);
// Factory function that allows injected dependencies, for testing.
static std::unique_ptr<PrintServersManager> CreateForTesting(
std::unique_ptr<ServerPrintersProvider> server_printers_provider,
std::unique_ptr<PrintServersPolicyProvider> print_servers_provider);
// Register the profile printing preferences with the |registry|.
static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry);
// Register the printing preferences with the |registry|.
static void RegisterLocalStatePrefs(PrefRegistrySimple* registry);
virtual ~PrintServersManager() = default;
// Add or remove observers.
virtual void AddObserver(Observer* observer) = 0;
virtual void RemoveObserver(Observer* observer) = 0;
// Selects print servers from all the available print servers. Returns true
// on successfully selecting the requested print server.
virtual void ChoosePrintServer(
const std::vector<std::string>& selected_print_server_ids) = 0;
// Gets all the print servers available through device or user policy and the
// current fetching mode strategy for print servers.
virtual PrintServersConfig GetPrintServersConfig() const = 0;
};
} // namespace ash
#endif // CHROME_BROWSER_ASH_PRINTING_PRINT_SERVERS_MANAGER_H_