123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- // Copyright 2022 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 COMPONENTS_APP_RESTORE_LACROS_READ_HANDLER_H_
- #define COMPONENTS_APP_RESTORE_LACROS_READ_HANDLER_H_
- #include <map>
- #include <set>
- #include "base/component_export.h"
- #include "base/files/file_path.h"
- namespace aura {
- class Window;
- }
- namespace app_restore {
- // LacrosSaveHandler is a helper class for FullRestoreReadHandler to restore
- // Lacros windows.
- //
- // For Lacros browser window, the restored browser session id is used as the
- // restore window id. So only when the restored browser session id is received
- // via mojom calls, the window can be restored. OnLacrosBrowserWindowAdded is
- // called when both `window` is initialized, and the restored browser session id
- // is received. So there could be 2 scenarios:
- //
- // 1. `window` is initialized first, then `window` is added to the hidden
- // container, and OnWindowAddedToRootWindow is called to save `window` in
- // `window_candidates_` to wait for the restored browser session id. When
- // OnLacrosBrowserWindowAdded is called, call UpdateWindow to apply the restore
- // window properties, and remove `window` from the hidden container.
- //
- // 2. The restored browser session id is received first, then
- // OnLacrosBrowserWindowAdded is called when `window` is initialized. We have to
- // wait for the OnWindowAddedToRootWindow callback, because `window`'s root is
- // not set yet in the OnWindowInitialized/OnLacrosBrowserWindowAdded callback,
- // and we can't remove `window` from the hidden container. When
- // OnWindowAddedToRootWindow is called, `window` can be restored and removed
- // from the hidden container.
- //
- // TODO(crbug.com/1239984): Restore Lacros windows.
- class COMPONENT_EXPORT(APP_RESTORE) LacrosReadHandler {
- public:
- LacrosReadHandler(const base::FilePath& profile_path);
- LacrosReadHandler(const LacrosReadHandler&) = delete;
- LacrosReadHandler& operator=(const LacrosReadHandler&) = delete;
- ~LacrosReadHandler();
- // Invoked when `window` is initialized.
- void OnWindowInitialized(aura::Window* window);
- // Sets `app_id` and `window_id` to `restore_window_id_to_app_id_` to record
- // that there is a restore data for `app_id` and `window_id`.
- void AddRestoreData(const std::string& app_id, int32_t window_id);
- // Invoked when an Chrome app Lacros window is created. `app_id` is the
- // AppService id, and `window_id` is the wayland app_id property for the
- // window.
- void OnAppWindowAdded(const std::string& app_id,
- const std::string& lacros_window_id);
- // Invoked when an Chrome app Lacros window is removed. `app_id` is the
- // AppService id, and `window_id` is the wayland app_id property for the
- // window.
- void OnAppWindowRemoved(const std::string& app_id,
- const std::string& lacros_window_id);
- // Invoked when `window` is added to the root window.
- void OnWindowAddedToRootWindow(aura::Window* window);
- // Invoked when `window` is destroyed.
- void OnWindowDestroyed(aura::Window* window);
- // Returns the restore window id for the Lacros window with
- // `lacros_window_id`.
- int32_t GetLacrosRestoreWindowId(const std::string& lacros_window_id) const;
- private:
- struct WindowData {
- std::string app_id;
- int32_t restore_window_id = -1;
- };
- // Sets `app_id` and `restore_window_id` for `window` in
- // `window_to_window_data_`. If there is no restore data for
- // `restore_window_id`, `app_id` won't be set to skip setting the restore data
- // for `window`.
- void SetWindowData(aura::Window* const window,
- const std::string& app_id,
- int32_t restore_window_id);
- // Sets `kRestoreWindowIdKey` and `kWindowInfoKey` to restore and remove
- // `window from the hidden container`.
- void UpdateWindow(aura::Window* const window);
- // The user profile path for Lacros windows.
- base::FilePath profile_path_;
- // The map from the restore window id to the app id for Lacros windows.
- std::map<int32_t, std::string> restore_window_id_to_app_id_;
- // The map from the window to the app id and the restore window id.
- std::map<aura::Window*, WindowData> window_to_window_data_;
- // The mojom call to forward the restore window id could be received later
- // than the OnWindowAddedToRootWindow callback. So add windows to
- // `window_candidates_` to record window candidates. Once the restore window
- // id is received, the window can be restored and removed from the hidden
- // container.
- std::set<aura::Window*> window_candidates_;
- // The map from the lacros window id to the app id for Chrome app windows.
- std::map<std::string, std::string> lacros_window_id_to_app_id_;
- };
- } // namespace app_restore
- #endif // COMPONENTS_APP_RESTORE_LACROS_READ_HANDLER_H_
|