You are not logged in.
Hi!
Not exactly an arch-specific question but maybe someone around here still has a clue:
Is is possible to share Sessions/Tabs between chromium-based browsers (edge, vivaldi, ...)?
After all the file format in
~/.config/chromium/Default/Sessions/seems to be pretty much identical.
Simply copying the directory over doesn't work, though.
thx
tcn
Offline
After all the file format in
~/.config/chromium/Default/Sessions/seems to be pretty much identical.
Or does it...
I used the dated https://github.com/JRBANCEL/Chromagnon/ … SNS-Format in order to dump the SNSS files.
Turns out that Chromagnon silently ignores unknown dictionary keys (as defined in sessionParse.py: 0-14).
These are the ignored keys in edge (95)
15
16
19
20
21
23
25
34
35
132
255Chromium (94):
15
19
20
21
23
25
32
255Dictionary key 19 somewhat resembles an UUID, which appears to be identical between chromium sessions, differs between edge sessions, though.
Huh, that sucks...
EDIT: some update to Chromagnon's document, stuff has moved from chrome/browser/sessions/session_backend.cc to
# rg 'id_type k' chromium-master/components/sessions/
chromium-master/components/sessions/core/tab_restore_service_impl.cc
107:const SessionCommand::id_type kCommandUpdateTabNavigation = 1;
108:const SessionCommand::id_type kCommandRestoredEntry = 2;
109:const SessionCommand::id_type kCommandWindowDeprecated = 3;
110:const SessionCommand::id_type kCommandSelectedNavigationInTab = 4;
111:const SessionCommand::id_type kCommandPinnedState = 5;
112:const SessionCommand::id_type kCommandSetExtensionAppID = 6;
113:const SessionCommand::id_type kCommandSetWindowAppName = 7;
115:const SessionCommand::id_type kCommandSetTabUserAgentOverride = 8;
116:const SessionCommand::id_type kCommandWindow = 9;
117:const SessionCommand::id_type kCommandSetTabGroupData = 10;
118:const SessionCommand::id_type kCommandSetTabUserAgentOverride2 = 11;
119:const SessionCommand::id_type kCommandSetWindowUserTitle = 12;
120:const SessionCommand::id_type kCommandCreateGroup = 13;
chromium-master/components/sessions/core/session_service_commands.cc
25:static const SessionCommand::id_type kCommandSetTabWindow = 0;
27:// static const SessionCommand::id_type kCommandSetWindowBounds = 1;
28:static const SessionCommand::id_type kCommandSetTabIndexInWindow = 2;
35:static const SessionCommand::id_type kCommandUpdateTabNavigation = 6;
36:static const SessionCommand::id_type kCommandSetSelectedNavigationIndex = 7;
37:static const SessionCommand::id_type kCommandSetSelectedTabInIndex = 8;
38:static const SessionCommand::id_type kCommandSetWindowType = 9;
40:// static const SessionCommand::id_type kCommandSetWindowBounds2 = 10;
47:static const SessionCommand::id_type kCommandSetPinnedState = 12;
48:static const SessionCommand::id_type kCommandSetExtensionAppID = 13;
49:static const SessionCommand::id_type kCommandSetWindowBounds3 = 14;
50:static const SessionCommand::id_type kCommandSetWindowAppName = 15;
51:static const SessionCommand::id_type kCommandTabClosed = 16;
52:static const SessionCommand::id_type kCommandWindowClosed = 17;
54:static const SessionCommand::id_type kCommandSetTabUserAgentOverride = 18;
55:static const SessionCommand::id_type kCommandSessionStorageAssociated = 19;
56:static const SessionCommand::id_type kCommandSetActiveWindow = 20;
57:static const SessionCommand::id_type kCommandLastActiveTime = 21;
59:// static const SessionCommand::id_type kCommandSetWindowWorkspace = 22;
60:static const SessionCommand::id_type kCommandSetWindowWorkspace2 = 23;
61:static const SessionCommand::id_type kCommandTabNavigationPathPruned = 24;
62:static const SessionCommand::id_type kCommandSetTabGroup = 25;
64:// static const SessionCommand::id_type kCommandSetTabGroupMetadata = 26;
65:static const SessionCommand::id_type kCommandSetTabGroupMetadata2 = 27;
66:static const SessionCommand::id_type kCommandSetTabGuid = 28;
67:static const SessionCommand::id_type kCommandSetTabUserAgentOverride2 = 29;
68:static const SessionCommand::id_type kCommandSetTabData = 30;
69:static const SessionCommand::id_type kCommandSetWindowUserTitle = 31;
70:static const SessionCommand::id_type kCommandSetWindowVisibleOnAllWorkspaces =
450: const SessionCommand::id_type kCommandSetWindowBounds2 = 10;
chromium-master/components/sessions/core/command_storage_backend.cc
55:const SessionCommand::id_type kInitialStateMarkerCommandId = 255;So, examples for MS edge's 34, 35 and 132 are: '\n'... In one instance 132 looks like chromium's 19 (that UUID sort of thing).
Looks like chromium is preparing encrypted sessions, BTW....
EDIT 2: at first glance it looks like session restore fails-fast silently as soon as it comes across an unknown command/dictionary key, even though the comment reasonably tells otherwise.
core/session_service_commands.cc
439 │ bool CreateTabsAndWindows(
445 │ // If the file is corrupt (command with wrong size, or unknown command), we
446 │ // still return true and attempt to restore what we we can.
850 │ default:
851 │ DVLOG(1) << "Failed reading an unknown command " << command->id();
852 │ return true;So, I'm guessing, removing foreign kv pairs from the SSNS files is a promising approach -.-
Last edited by tcn (2021-09-30 17:12:25)
Offline