Chromium Code Reviews| Index: chrome/browser/chromeos/lock_screen_apps/app_manager_impl.h |
| diff --git a/chrome/browser/chromeos/lock_screen_apps/app_manager_impl.h b/chrome/browser/chromeos/lock_screen_apps/app_manager_impl.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..b55f0673c832d3fb86d1942b463404a8fa521b1c |
| --- /dev/null |
| +++ b/chrome/browser/chromeos/lock_screen_apps/app_manager_impl.h |
| @@ -0,0 +1,93 @@ |
| +// Copyright 2017 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#ifndef CHROME_BROWSER_CHROMEOS_LOCK_SCREEN_APPS_APP_MANAGER_IMPL_H_ |
| +#define CHROME_BROWSER_CHROMEOS_LOCK_SCREEN_APPS_APP_MANAGER_IMPL_H_ |
| + |
| +#include <string> |
| + |
| +#include "base/callback.h" |
| +#include "base/macros.h" |
| +#include "base/observer_list.h" |
| +#include "base/scoped_observer.h" |
| +#include "chrome/browser/chromeos/lock_screen_apps/app_manager.h" |
| +#include "components/prefs/pref_change_registrar.h" |
| +#include "extensions/browser/extension_registry_observer.h" |
| + |
| +class Profile; |
| + |
| +namespace extensions { |
| +class Extension; |
| +class ExtensionRegistry; |
| +} |
| +namespace lock_screen_apps { |
| + |
| +// The default implementation of lock_screen_apps::AppManager. |
| +class AppManagerImpl : public AppManager, |
| + public extensions::ExtensionRegistryObserver { |
| + public: |
| + AppManagerImpl(); |
| + ~AppManagerImpl() override; |
| + |
| + // AppManager implementation: |
| + void Initialize(Profile* primary_profile, |
| + Profile* lock_screen_profile) override; |
| + void Start(AppManager::Observer* observer) override; |
| + void Stop() override; |
| + bool LaunchNoteTaking() override; |
| + bool IsNoteTakingAppAvailable() const override; |
| + std::string GetNoteTakingAppId() const override; |
| + |
| + // extensions::ExtensionRegistryObserver implementation: |
| + void OnExtensionLoaded(content::BrowserContext* browser_context, |
| + const extensions::Extension* extension) override; |
| + void OnExtensionUnloaded(content::BrowserContext* browser_context, |
| + const extensions::Extension* extension, |
| + extensions::UnloadedExtensionReason reason) override; |
| + |
| + private: |
| + enum class State { |
| + // The manager has not yet been initialized. |
| + kNotInitialized, |
| + // The manager is initialized, but not started. The note taking app is |
| + // considered unset at this point, and cannot be launched. |
| + kIdle, |
|
jdufault
2017/05/26 19:15:53
kInitializing?
Idle implies that this class activ
tbarzic
2017/05/26 19:34:14
Changed name to kInactive
|
| + // The manager is started. Lock screen note taking app, if set, is loaded |
| + // and ready to be launched. |
| + kStarted, |
| + }; |
| + |
| + // Called when note taking related prefs change. |
| + void OnNoteTakingExtensionChanged(); |
| + |
| + // Gets the currently enabled lock screen note taking app, is one is selected. |
| + // If no such app exists, returns an empty string. |
| + std::string FindLockScreenNoteTakingApp() const; |
| + |
| + // Loads and enables the lock screen note taking app to the lock screen |
| + // profile. |
| + bool AddAppToLockScreenProfile(const std::string& app_id); |
| + |
| + // Unloads lock screen note taking app from the lock screen profile. |
| + void UnloadLockApp(const std::string& app_id); |
| + |
| + Profile* primary_profile_ = nullptr; |
| + Profile* lock_screen_profile_ = nullptr; |
| + |
| + State state_ = State::kNotInitialized; |
| + std::string lock_screen_app_id_; |
| + |
| + PrefChangeRegistrar pref_change_registrar_; |
| + ScopedObserver<extensions::ExtensionRegistry, |
| + extensions::ExtensionRegistryObserver> |
| + extensions_observer_; |
| + |
| + AppManager::Observer* observer_ = nullptr; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(AppManagerImpl); |
| +}; |
| + |
| +} // namespace lock_screen_apps |
| + |
| +#endif // CHROME_BROWSER_CHROMEOS_LOCK_SCREEN_APPS_APP_MANAGER_IMPL_H_ |