blob: 9b8ccc6b27ad57c90207eed0c9c318d3c379d1e5 [file] [log] [blame]
// Copyright 2020 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_CROSAPI_BROWSER_MANAGER_H_
#define CHROME_BROWSER_ASH_CROSAPI_BROWSER_MANAGER_H_
#include "base/memory/weak_ptr.h"
#include "components/session_manager/core/session_manager_observer.h"
namespace crosapi {
// Manages the lifetime of lacros-chrome, and its loading status. Observes the
// component updater for future updates. This class is a part of ash-chrome.
class BrowserManager : public session_manager::SessionManagerObserver {
public:
// Static getter of BrowserManager instance. In real use cases,
// BrowserManager instance should be unique in the process.
static BrowserManager* Get();
BrowserManager();
BrowserManager(const BrowserManager&) = delete;
BrowserManager& operator=(const BrowserManager&) = delete;
~BrowserManager() override;
// Initialize resources and start Lacros.
//
// NOTE: If InitializeAndStartIfNeeded finds Lacros disabled, it deletes the
// user data directory.
virtual void InitializeAndStartIfNeeded();
protected:
// NOTE: You may have to update tests if you make changes to State, as state_
// is exposed via autotest_private.
enum class State {
// Lacros is not initialized yet.
// Lacros-chrome loading depends on user type, so it needs to wait
// for user session.
NOT_INITIALIZED,
// Lacros-chrome is unavailable. I.e., failed to load for some reason
// or disabled.
UNAVAILABLE,
};
// Changes |state| value.
void SetState(State state);
private:
// session_manager::SessionManagerObserver:
void OnSessionStateChanged() override;
// Start a sequence to clear Lacros related data. It posts a task to remove
// Lacros user data directory and if that is successful, calls
// `OnLacrosUserDataDirRemoved()` to clear some prefs set by Lacros in Ash.
// Call if Lacros is disabled and not running.
void ClearLacrosData();
// Called as a callback to `RemoveLacrosUserDataDir()`. `cleared` is set to
// true if the directory existed and was removed successfully.
void OnLacrosUserDataDirRemoved(bool cleared);
// NOTE: The state is exposed to tests via autotest_private.
State state_ = State::NOT_INITIALIZED;
base::WeakPtrFactory<BrowserManager> weak_factory_{this};
};
} // namespace crosapi
#endif // CHROME_BROWSER_ASH_CROSAPI_BROWSER_MANAGER_H_