1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145
|
// Copyright 2014 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef COMPONENTS_SESSIONS_CORE_SESSION_SERVICE_COMMANDS_H_
#define COMPONENTS_SESSIONS_CORE_SESSION_SERVICE_COMMANDS_H_
#include <map>
#include <memory>
#include <optional>
#include <set>
#include <string>
#include "components/sessions/core/command_storage_manager.h"
#include "components/sessions/core/session_command.h"
#include "components/sessions/core/session_types.h"
#include "components/sessions/core/sessions_export.h"
#include "components/tab_groups/tab_group_id.h"
#include "components/tab_groups/tab_group_visual_data.h"
#include "ui/base/mojom/window_show_state.mojom-forward.h"
#include "ui/base/ui_base_types.h"
namespace sessions {
class SessionCommand;
// The following functions create sequentialized change commands which are
// used to reconstruct the current/previous session state.
SESSIONS_EXPORT std::unique_ptr<SessionCommand>
CreateSetSelectedTabInWindowCommand(SessionID window_id, int index);
SESSIONS_EXPORT std::unique_ptr<SessionCommand> CreateSetTabWindowCommand(
SessionID window_id,
SessionID tab_id);
SESSIONS_EXPORT std::unique_ptr<SessionCommand> CreateSetWindowBoundsCommand(
SessionID window_id,
const gfx::Rect& bounds,
ui::mojom::WindowShowState show_state);
SESSIONS_EXPORT std::unique_ptr<SessionCommand>
CreateSetTabIndexInWindowCommand(SessionID tab_id, int new_index);
SESSIONS_EXPORT std::unique_ptr<SessionCommand> CreateTabClosedCommand(
SessionID tab_id);
SESSIONS_EXPORT std::unique_ptr<SessionCommand> CreateWindowClosedCommand(
SessionID tab_id);
SESSIONS_EXPORT std::unique_ptr<SessionCommand>
CreateSetSelectedNavigationIndexCommand(SessionID tab_id, int index);
SESSIONS_EXPORT std::unique_ptr<SessionCommand> CreateSetWindowTypeCommand(
SessionID window_id,
SessionWindow::WindowType type);
SESSIONS_EXPORT std::unique_ptr<SessionCommand> CreateTabGroupCommand(
SessionID tab_id,
std::optional<tab_groups::TabGroupId> group);
SESSIONS_EXPORT std::unique_ptr<SessionCommand>
CreateTabGroupMetadataUpdateCommand(
const tab_groups::TabGroupId group,
const tab_groups::TabGroupVisualData* visual_data,
const std::optional<std::string> saved_guid = std::nullopt);
SESSIONS_EXPORT std::unique_ptr<SessionCommand> CreatePinnedStateCommand(
SessionID tab_id,
bool is_pinned);
SESSIONS_EXPORT std::unique_ptr<SessionCommand>
CreateSessionStorageAssociatedCommand(
SessionID tab_id,
const std::string& session_storage_persistent_id);
SESSIONS_EXPORT std::unique_ptr<SessionCommand> CreateSetActiveWindowCommand(
SessionID window_id);
SESSIONS_EXPORT std::unique_ptr<SessionCommand>
CreateTabNavigationPathPrunedCommand(SessionID tab_id, int index, int count);
SESSIONS_EXPORT std::unique_ptr<SessionCommand>
CreateUpdateTabNavigationCommand(
SessionID tab_id,
const sessions::SerializedNavigationEntry& navigation);
SESSIONS_EXPORT std::unique_ptr<SessionCommand>
CreateSetTabExtensionAppIDCommand(SessionID tab_id,
const std::string& extension_id);
SESSIONS_EXPORT std::unique_ptr<SessionCommand>
CreateSetTabUserAgentOverrideCommand(
SessionID tab_id,
const SerializedUserAgentOverride& user_agent_override);
SESSIONS_EXPORT std::unique_ptr<SessionCommand> CreateSetWindowAppNameCommand(
SessionID window_id,
const std::string& app_name);
SESSIONS_EXPORT std::unique_ptr<SessionCommand> CreateSetWindowUserTitleCommand(
SessionID window_id,
const std::string& user_title);
SESSIONS_EXPORT std::unique_ptr<SessionCommand> CreateLastActiveTimeCommand(
SessionID tab_id,
base::Time last_active_time);
SESSIONS_EXPORT std::unique_ptr<SessionCommand> CreateSetWindowWorkspaceCommand(
SessionID window_id,
const std::string& workspace);
SESSIONS_EXPORT std::unique_ptr<SessionCommand>
CreateSetWindowVisibleOnAllWorkspacesCommand(SessionID window_id,
bool visible_on_all_workspaces);
SESSIONS_EXPORT std::unique_ptr<SessionCommand> CreateSetTabGuidCommand(
SessionID tab_id,
const std::string& guid);
SESSIONS_EXPORT std::unique_ptr<SessionCommand> CreateSetTabDataCommand(
SessionID tab_id,
const std::map<std::string, std::string>& data);
SESSIONS_EXPORT std::unique_ptr<SessionCommand> CreateAddTabExtraDataCommand(
SessionID tab_id,
const std::string& key,
const std::string& data);
SESSIONS_EXPORT std::unique_ptr<SessionCommand> CreateAddWindowExtraDataCommand(
SessionID window_id,
const std::string& key,
const std::string& data);
SESSIONS_EXPORT std::unique_ptr<SessionCommand>
CreateSetPlatformSessionIdCommand(const std::string& platform_session_id);
// Searches for a pending command using |command_storage_manager| that can be
// replaced with |command|. If one is found, pending command is removed, the
// command is added to the pending commands (taken ownership) and true is
// returned.
SESSIONS_EXPORT bool ReplacePendingCommand(
CommandStorageManager* command_storage_manager,
std::unique_ptr<SessionCommand>* command);
// Returns true if provided |command| either closes a window or a tab.
SESSIONS_EXPORT bool IsClosingCommand(SessionCommand* command);
// Converts a list of commands into SessionWindows. On return any valid
// windows are added to `valid_windows`. `active_window_id` will be set with the
// id of the last active window, but it's only valid when this id corresponds
// to the id of one of the windows in `valid_windows`. Discarded
// windows, eg: the ones with no tab or previously closed are inserted
// into `discarded_window_ids`. If present, `platform_session_id` is set with
// the window system level session id, on platforms that support it.
SESSIONS_EXPORT void RestoreSessionFromCommands(
const std::vector<std::unique_ptr<SessionCommand>>& commands,
std::vector<std::unique_ptr<SessionWindow>>* valid_windows,
SessionID* active_window_id,
std::string* platform_session_id,
std::set<SessionID>* discarded_window_ids);
} // namespace sessions
#endif // COMPONENTS_SESSIONS_CORE_SESSION_SERVICE_COMMANDS_H_
|