Chat+ link previews: a link in a chat shows its page's title, text and picture, YouTube playable in place
X's web chat shows a link as a bare card. An X tab on a chat page may now ask native code (link_preview, x-capture only, chat pages only) for one link's preview. Native code fetches it: https and public hosts only (addresses checked and pinned), never X's hosts, no cookies or referrer, redirects re-checked, page head <= 512 KB, images <= 1.5 MB by magic bytes as data:, 30 fetches a minute, memory-only cache. Only the link leaves the page. On by default (owner, 2026-10-10).
This commit is contained in:
parent
96f909c110
commit
328264bfe1
21 changed files with 1455 additions and 519 deletions
|
|
@ -133,6 +133,8 @@ const DEFAULT_ON = [
|
|||
'logoBrush', 'twitterWording', 'singleSplitNav',
|
||||
'fixLikeFollow', 'fixScrollRestore', 'fixTimelineJump', 'fixHomeTab', 'fixNotificationBadge', 'fixNewPostsPill', 'fixMediaUpload', 'followingChronological', 'fixChatButton', 'composerRestorePrompt',
|
||||
'composerDrafts', 'hidePromotedPosts', 'mediaDownload', 'rememberVideoVolume', 'searchOperators', 'notifications.keywordAlerts',
|
||||
// On by default by the owner's choice (2026-10-10): Chat+ link previews.
|
||||
'chat.linkPreviews',
|
||||
];
|
||||
/** What Advanced adds: the calm features that came with the area plugins (they add something; none hides or changes X). */
|
||||
const ADVANCED_ADDS = [
|
||||
|
|
@ -166,7 +168,7 @@ test('modes: the exact flags of Basic, Advanced and Power User; an existing setu
|
|||
assert.deepEqual(on(defaults), [...DEFAULT_ON].sort());
|
||||
assert.deepEqual(running(null), [...DEFAULT_ON].sort());
|
||||
for (const [flag, value] of Object.entries(FEATURE_DEFAULTS)) assert.equal(defaults[flag], value, flag);
|
||||
for (const feature of X_FEATURES) if (!(feature.id in FEATURE_DEFAULTS) && feature.id !== 'notifications.keywordAlerts' && feature.backing !== 'plugin') assert.equal(defaults[feature.id], false, `${feature.id} is new: off by default`);
|
||||
for (const feature of X_FEATURES) if (!(feature.id in FEATURE_DEFAULTS) && feature.id !== 'notifications.keywordAlerts' && feature.id !== 'chat.linkPreviews' && feature.backing !== 'plugin') assert.equal(defaults[feature.id], false, `${feature.id} is new: off by default`);
|
||||
for (const row of supersededFiles(X_TABLE)) assert.equal(defaults[row.flag], false, `${row.flag}: what came from an opt-in plugin stays off`);
|
||||
|
||||
// Basic: every area off (so everything an area owns is off), no logo or wording; the fixes and split-view navigation stay.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue