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