You are not logged in.

#1 2021-09-29 08:39:44

tcn
Member
Registered: 2011-09-30
Posts: 86

Sharing Sessions/Tabs between chromium-based browsers

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

#2 2021-09-30 09:50:55

tcn
Member
Registered: 2011-09-30
Posts: 86

Re: Sharing Sessions/Tabs between chromium-based browsers

tcn wrote:

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

255

Chromium (94):

15
19
20
21
23
25

32

255

Dictionary 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

Board footer

Powered by FluxBB