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', () => {