Skip to content

Commit

Permalink
Add support for extensions in the Microsoft Edge Addons Store
Browse files Browse the repository at this point in the history
  • Loading branch information
utkarshspat committed Dec 10, 2020
1 parent e150056 commit dbc8a54
Show file tree
Hide file tree
Showing 5 changed files with 30 additions and 14 deletions.
11 changes: 6 additions & 5 deletions src/background.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */

/* globals chrome, cws_match_pattern, ows_match_pattern, amo_match_patterns,
/* globals chrome, cws_match_pattern, mea_match_pattern, ows_match_pattern, amo_match_patterns,
amo_file_version_match_patterns,
cws_pattern, ows_pattern, amo_pattern, amo_file_version_pattern,
cws_pattern, mea_pattern, ows_pattern, amo_pattern, amo_file_version_pattern,
get_crx_url, get_zip_name, console,
*/
/* globals encodeQueryString */
Expand All @@ -28,7 +28,7 @@ function togglePageAction(isEnabled) {
browser.tabs.onUpdated.addListener(tabsOnUpdatedCheckPageAction);
}
browser.tabs.query({
url: [cws_match_pattern, ows_match_pattern].concat(amo_match_patterns, amo_file_version_match_patterns),
url: [cws_match_pattern, mea_match_pattern, ows_match_pattern].concat(amo_match_patterns, amo_file_version_match_patterns),
}).then(function(tabs) {
if (isEnabled) {
tabs.forEach(showPageActionIfNeeded);
Expand Down Expand Up @@ -128,6 +128,7 @@ chrome.runtime.onInstalled.addListener(function() {
chrome.tabs.query({
url: [
cws_match_pattern,
mea_match_pattern,
ows_match_pattern,
].concat(amo_match_patterns, amo_file_version_match_patterns),
}, function(tabs) {
Expand Down Expand Up @@ -226,6 +227,6 @@ function showPageActionIfNeeded(details_or_tab) {
}
}
function isPageActionNeededForUrl(url) {
return cws_pattern.test(url) || ows_pattern.test(url) || amo_pattern.test(url) ||
amo_file_version_pattern.test(url);
return cws_pattern.test(url) || mea_pattern.test(url) || ows_pattern.test(url) ||
amo_pattern.test(url) || amo_file_version_pattern.test(url);
}
4 changes: 3 additions & 1 deletion src/bg-contextmenu.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */

/* jshint browser:true, devel:true */
/* globals chrome, cws_match_pattern, ows_match_pattern, amo_match_patterns, amo_file_version_match_patterns, get_crx_url */
/* globals chrome, cws_match_pattern, mea_match_pattern, ows_match_pattern, amo_match_patterns, amo_file_version_match_patterns, get_crx_url */
/* globals encodeQueryString */

'use strict';
Expand All @@ -30,6 +30,7 @@
'*://*/*.XPI*',
'*://*/*.xpi*',
cws_match_pattern,
mea_match_pattern,
ows_match_pattern,
].concat(amo_file_version_match_patterns);

Expand Down Expand Up @@ -180,6 +181,7 @@
contexts: ['all'],
documentUrlPatterns: [
cws_match_pattern,
mea_match_pattern,
ows_match_pattern,
].concat(amo_file_version_match_patterns),
});
Expand Down
2 changes: 1 addition & 1 deletion src/crxviewer.html
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@
<div id="advanced-open">
<form id="advanced-open-form">
Enter the URL of a Chrome Extension, Firefox addon, zip file,
or the page in the Chrome Web Store, Firefox addon gallery or Opera addon gallery.
or the page in the Chrome Web Store, Firefox addon gallery, Edge Addons Store or Opera addon gallery.
<input type="url" placeholder="URL of Chrome extension, Firefox addon or zip file">
<input type="submit" value="Open in this viewer">
or select a local file &rarr;
Expand Down
2 changes: 1 addition & 1 deletion src/crxviewer.js
Original file line number Diff line number Diff line change
Expand Up @@ -1574,7 +1574,7 @@ function initialize() {
// the get_crx_url method only takes the extension ID and generates the other
// parameters based on the current platform.
if (!is_crx_download_url(crx_url)) {
if (cws_pattern.test(crx_url)) {
if (cws_pattern.test(crx_url) || mea_pattern.test(crx_url)) {
// Prefer given URL because its slug contains an extra human-readable short name.
webstore_url = crx_url;
}
Expand Down
25 changes: 19 additions & 6 deletions src/cws_pattern.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */

/* globals location, getPlatformInfo, navigator */
/* exported cws_match_pattern, ows_match_pattern, amo_match_patterns, amo_file_version_match_patterns */
/* exported cws_pattern, ows_pattern, amo_pattern, amo_file_version_pattern */
/* exported cws_match_pattern, mea_match_pattern, ows_match_pattern, amo_match_patterns, amo_file_version_match_patterns */
/* exported cws_pattern, mea_pattern, ows_pattern, amo_pattern, amo_file_version_pattern */
/* exported get_crx_url, get_webstore_url, get_zip_name, is_crx_url, is_not_crx_url, getParam */
/* exported is_crx_download_url */
/* exported get_amo_domain, get_amo_slug */
Expand All @@ -20,6 +20,11 @@ var cws_download_pattern = /^https?:\/\/clients2\.google\.com\/service\/update2\
// match pattern per Chrome spec
var cws_match_pattern = '*://chrome.google.com/webstore/detail/*';

// Microsoft Edge Addons Store
var mea_pattern = /^https?:\/\/microsoftedge.microsoft.com\/addons\/.+?\/([a-z]{32})(?=[\/#?]|$)/;
var mea_download_pattern = /^https?:\/\/edge\.microsoft\.com\/extensionwebstorebase\/v1\/crx\b.*?%3D([a-z]{32})%26uc/;
var mea_match_pattern = '*://microsoftedge.microsoft.com/addons/detail/*';

// Opera add-on gallery
var ows_pattern = /^https?:\/\/addons.opera.com\/.*?extensions\/(?:details|download)\/([^\/?#]+)/i;
var ows_match_pattern = '*://addons.opera.com/*extensions/details/*';
Expand Down Expand Up @@ -83,7 +88,7 @@ function get_xpi_url(amoDomain, addonSlug) {
}

// Returns location of CRX file for a given extensionID or CWS url or Opera add-on URL
// or Firefox addon URL.
// or Firefox addon URL or Microsoft Edge addon URL.
function get_crx_url(extensionID_or_url) {
var url;
var match = ows_pattern.exec(extensionID_or_url);
Expand All @@ -101,6 +106,10 @@ function get_crx_url(extensionID_or_url) {
if (match) {
return 'https://' + match[1] + '/firefox/downloads/file/' + match[2] + (match[3] || '/addon.xpi');
}
match = mea_pattern.exec(url) || mea_download_pattern.exec(url);
if (match) {
return 'https://edge.microsoft.com/extensionwebstorebase/v1/crx?response=redirect&x=id%3D' + match[1] + '%26installsource%3Dondemand%26uc';
}
// Chrome Web Store
match = get_extensionID(extensionID_or_url);
var extensionID = match ? match : extensionID_or_url;
Expand Down Expand Up @@ -159,6 +168,10 @@ function get_webstore_url(url) {
if (cws) {
return 'https://chrome.google.com/webstore/detail/' + cws[1];
}
var mea = mea_pattern.exec(url) || mea_download_pattern.exec(url);
if (mea) {
return 'https://microsoftedge.microsoft.com/addons/detail/' + mea[1];
}
var ows = ows_pattern.exec(url);
if (ows) {
return 'https://addons.opera.com/extensions/details/' + ows[1];
Expand Down Expand Up @@ -248,12 +261,12 @@ function get_equivalent_download_url(url) {
}

function is_crx_url(url) {
return cws_pattern.test(url) || ows_pattern.test(url) || /\.(crx|nex)\b/.test(url);
return cws_pattern.test(url) || mea_pattern.test(url) || ows_pattern.test(url) || /\.(crx|nex)\b/.test(url);
}

// Whether the given URL is not a CRX file, with certainty.
function is_not_crx_url(url) {
if (is_crx_url(url) || cws_download_pattern.test(url))
if (is_crx_url(url) || cws_download_pattern.test(url) || mea_download_pattern.test(url))
return false;
return amo_pattern.test(url) ||
amo_download_pattern.test(url) ||
Expand All @@ -262,7 +275,7 @@ function is_not_crx_url(url) {
}

function is_crx_download_url(url) {
return cws_download_pattern.test(url) || amo_download_pattern.test(url);
return cws_download_pattern.test(url) || mea_download_pattern.test(url) || amo_download_pattern.test(url);
}

// |name| should not contain special RegExp characters, except possibly maybe a '[]' at the end.
Expand Down

0 comments on commit dbc8a54

Please sign in to comment.