| // Copyright 2021 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_WEB_APPLICATIONS_WEB_APP_TRANSLATION_MANAGER_H_ | 
 | #define CHROME_BROWSER_WEB_APPLICATIONS_WEB_APP_TRANSLATION_MANAGER_H_ | 
 |  | 
 | #include <map> | 
 |  | 
 | #include "base/containers/flat_map.h" | 
 | #include "base/files/file_path.h" | 
 | #include "base/functional/callback.h" | 
 | #include "base/memory/scoped_refptr.h" | 
 | #include "base/scoped_observation.h" | 
 | #include "chrome/browser/profiles/profile.h" | 
 | #include "chrome/browser/web_applications/file_utils_wrapper.h" | 
 | #include "chrome/browser/web_applications/proto/web_app_translations.pb.h" | 
 | #include "components/webapps/common/web_app_id.h" | 
 | #include "third_party/blink/public/common/manifest/manifest.h" | 
 |  | 
 | namespace web_app { | 
 |  | 
 | class WebAppProvider; | 
 |  | 
 | using Locale = std::string; | 
 |  | 
 | // Handles reading and writing web app translations data to disk and caching | 
 | // the translations for the current browser locale. | 
 | class WebAppTranslationManager { | 
 |  public: | 
 |   using ReadCallback = base::OnceCallback<void( | 
 |       const std::map<webapps::AppId, blink::Manifest::TranslationItem>& cache)>; | 
 |   using WriteCallback = base::OnceCallback<void(bool success)>; | 
 |  | 
 |   explicit WebAppTranslationManager(Profile* profile); | 
 |   WebAppTranslationManager(const WebAppTranslationManager&) = delete; | 
 |   WebAppTranslationManager& operator=(const WebAppTranslationManager&) = delete; | 
 |   ~WebAppTranslationManager(); | 
 |  | 
 |   void SetProvider(base::PassKey<WebAppProvider>, WebAppProvider& provider); | 
 |   void Start(); | 
 |  | 
 |   void WriteTranslations( | 
 |       const webapps::AppId& app_id, | 
 |       const base::flat_map<Locale, blink::Manifest::TranslationItem>& | 
 |           translations, | 
 |       WriteCallback callback); | 
 |   void DeleteTranslations(const webapps::AppId& app_id, WriteCallback callback); | 
 |   void ReadTranslations(ReadCallback callback); | 
 |  | 
 |   // Returns the translated web app name, if available in the browser's locale, | 
 |   // otherwise returns an empty string. | 
 |   std::string GetTranslatedName(const webapps::AppId& app_id); | 
 |  | 
 |   // Returns the translated web app description, if available in the browser's | 
 |   // locale, otherwise returns an empty string. | 
 |   std::string GetTranslatedDescription(const webapps::AppId& app_id); | 
 |  | 
 |   // TODO(crbug.com/40183274): Add a method to get the short_name. | 
 |  | 
 |  private: | 
 |   void OnTranslationsRead(ReadCallback callback, | 
 |                           const proto::AllTranslations& proto); | 
 |  | 
 |   raw_ptr<WebAppProvider> provider_ = nullptr; | 
 |   base::FilePath web_apps_directory_; | 
 |   // Cache of the translations on disk for the current device language. | 
 |   std::map<webapps::AppId, blink::Manifest::TranslationItem> translation_cache_; | 
 |  | 
 |   base::WeakPtrFactory<WebAppTranslationManager> weak_ptr_factory_{this}; | 
 | }; | 
 |  | 
 | }  // namespace web_app | 
 |  | 
 | #endif  // CHROME_BROWSER_WEB_APPLICATIONS_WEB_APP_TRANSLATION_MANAGER_H_ |