| // Copyright 2022 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/oauth2/client_ids_database.h" | 
 |  | 
 | #include <memory> | 
 | #include <string> | 
 |  | 
 | #include "base/memory/raw_ptr.h" | 
 | #include "base/values.h" | 
 | #include "chrome/browser/ash/printing/oauth2/status_code.h" | 
 | #include "chrome/browser/browser_process.h" | 
 | #include "chrome/common/pref_names.h" | 
 | #include "components/prefs/pref_registry_simple.h" | 
 | #include "components/prefs/pref_service.h" | 
 | #include "url/gurl.h" | 
 |  | 
 | namespace ash::printing::oauth2 { | 
 |  | 
 | class ClientIdsDatabaseImpl : public ClientIdsDatabase { | 
 |  public: | 
 |   ClientIdsDatabaseImpl() | 
 |       : pref_(g_browser_process->local_state()), | 
 |         data_(pref_->GetDict(prefs::kPrintingOAuth2AuthorizationServers) | 
 |                   .Clone()) {} | 
 |  | 
 |   ClientIdsDatabaseImpl(const ClientIdsDatabaseImpl&) = delete; | 
 |   ClientIdsDatabaseImpl& operator=(const ClientIdsDatabaseImpl&) = delete; | 
 |   ~ClientIdsDatabaseImpl() override = default; | 
 |  | 
 |   void FetchId(const GURL& url, StatusCallback callback) override { | 
 |     const std::string* value = data_.FindString(url.spec()); | 
 |     std::move(callback).Run(StatusCode::kOK, (value ? *value : "")); | 
 |   } | 
 |  | 
 |   void StoreId(const GURL& url, const std::string& client_id) override { | 
 |     const std::string key = url.spec(); | 
 |     DCHECK(!data_.FindString(key)); | 
 |     DCHECK(!client_id.empty()); | 
 |     data_.Set(key, client_id); | 
 |     pref_->SetDict(prefs::kPrintingOAuth2AuthorizationServers, data_.Clone()); | 
 |   } | 
 |  | 
 |  private: | 
 |   base::raw_ptr<PrefService> pref_; | 
 |   base::Value::Dict data_; | 
 | }; | 
 |  | 
 | std::unique_ptr<ClientIdsDatabase> ClientIdsDatabase::Create() { | 
 |   return std::make_unique<ClientIdsDatabaseImpl>(); | 
 | } | 
 |  | 
 | void ClientIdsDatabase::RegisterLocalStatePrefs(PrefRegistrySimple* registry) { | 
 |   registry->RegisterDictionaryPref(prefs::kPrintingOAuth2AuthorizationServers); | 
 | } | 
 |  | 
 | }  // namespace ash::printing::oauth2 |