diff --git a/js/modules/link_previews.js b/js/modules/link_previews.js index 828d46ac5..ba9b8020e 100644 --- a/js/modules/link_previews.js +++ b/js/modules/link_previews.js @@ -31,9 +31,14 @@ const SUPPORTED_DOMAINS = [ 'imgur.com', 'www.imgur.com', 'm.imgur.com', + 'i.imgur.com', 'instagram.com', 'www.instagram.com', 'm.instagram.com', + 'tenor.com', + 'gph.is', + 'giphy.com', + 'media.giphy.com', ]; function isLinkInWhitelist(link) { try { @@ -58,7 +63,7 @@ function isLinkInWhitelist(link) { } } -const SUPPORTED_MEDIA_DOMAINS = /^([^.]+\.)*(ytimg.com|cdninstagram.com|redd.it|imgur.com|fbcdn.net)$/i; +const SUPPORTED_MEDIA_DOMAINS = /^([^.]+\.)*(ytimg.com|cdninstagram.com|redd.it|imgur.com|fbcdn.net|giphy.com|tenor.com)$/i; function isMediaLinkInWhitelist(link) { try { const url = new URL(link); @@ -81,8 +86,8 @@ function isMediaLinkInWhitelist(link) { } } -const META_TITLE = //im; -const META_IMAGE = //im; +const META_TITLE = //im; +const META_IMAGE = //im; function _getMetaTag(html, regularExpression) { const match = regularExpression.exec(html); if (match && match[1]) { @@ -96,7 +101,8 @@ function getTitleMetaTag(html) { return _getMetaTag(html, META_TITLE); } function getImageMetaTag(html) { - return _getMetaTag(html, META_IMAGE); + const tag = _getMetaTag(html, META_IMAGE); + return typeof tag === 'string' ? tag.replace('http://', 'https://') : tag; } function findLinks(text, caretLocation) { diff --git a/test/modules/link_previews_test.js b/test/modules/link_previews_test.js index 0cae46b93..f88c371e6 100644 --- a/test/modules/link_previews_test.js +++ b/test/modules/link_previews_test.js @@ -192,7 +192,7 @@ describe('Link previews', () => { ); }); - it('returns html-decoded tag contents from Instagram', () => { + it('returns html-decoded tag contents from Imgur', () => { const imgur = ` @@ -211,6 +211,50 @@ describe('Link previews', () => { ); }); + it('returns html-decoded tag contents from Giphy', () => { + const giphy = ` + + + + + + + + + `; + + assert.strictEqual( + 'I Cant Hear You Kobe Bryant GIF - Find & Share on GIPHY', + getTitleMetaTag(giphy) + ); + assert.strictEqual( + 'https://media.giphy.com/media/3o7qE8mq5bT9FQj7j2/giphy.gif', + getImageMetaTag(giphy) + ); + }); + + it('returns html-decoded tag contents from Tenor', () => { + const tenor = ` + + + + + + + + + `; + + assert.strictEqual( + 'Hopping Jumping GIF - Hopping Jumping Bird - Discover & Share GIFs', + getTitleMetaTag(tenor) + ); + assert.strictEqual( + 'https://media1.tenor.com/images/3772949a5b042e626d259f313fd1e9b8/tenor.gif?itemid=14834517', + getImageMetaTag(tenor) + ); + }); + it('returns only the first tag', () => { const html = ` @@ -229,6 +273,17 @@ describe('Link previews', () => { getTitleMetaTag(html) ); }); + + it('converts image url protocol http to https', () => { + const html = ` + + `; + + assert.strictEqual( + 'https://giphygifs.s3.amazonaws.com/media/APcFiiTrG0x2/200.gif', + getImageMetaTag(html) + ); + }); }); describe('#findLinks', () => {