diff --git a/content/install-hook-openusercss.js b/content/install-hook-openusercss.js new file mode 100644 index 00000000..374a8428 --- /dev/null +++ b/content/install-hook-openusercss.js @@ -0,0 +1,58 @@ +'use strict'; + +(() => { + const manifest = chrome.runtime.getManifest(); + + // Tell the page that we exist and that it should send the handshake + window.postMessage({ + 'type': 'ouc-begin-handshake' + }, '*'); + + // Wait for the handshake + window.addEventListener('message', event => { + if (event.data && event.data.type === 'ouc-handshake-question') { + // This is a representation of features that Stylus is capable of + const implementedFeatures = [ + 'install-usercss', + 'configure-after-install', + 'builtin-editor', + 'create-usercss', + 'edit-usercss', + 'import-moz-export', + 'export-moz-export', + 'update-manual', + 'update-auto', + 'export-json-backups', + 'import-json-backups', + 'manage-local' + ]; + const reportedFeatures = []; + + // The handshake question includes a list of required and optional features + // we match them with features we have implemented, and build a union array. + event.data.featuresList.required.forEach(feature => { + if (implementedFeatures.includes(feature)) { + reportedFeatures.push(feature); + } + }); + + event.data.featuresList.optional.forEach(feature => { + if (implementedFeatures.includes(feature)) { + reportedFeatures.push(feature); + } + }); + + // We send the handshake response, which includes the key we got, plus some + // additional metadata + window.postMessage({ + 'type': 'ouc-handshake-response', + 'key': event.data.key, + 'extension': { + 'name': manifest.name, + 'version': manifest.version, + 'capabilities': reportedFeatures + } + }, '*'); + } + }); +})(); diff --git a/manifest.json b/manifest.json index 66c117e2..baa0a7c9 100644 --- a/manifest.json +++ b/manifest.json @@ -60,6 +60,12 @@ "all_frames": false, "js": ["content/install-hook-userstyles.js"] }, + { + "matches": ["https://openusercss.org/*", "https://openusercss.com/*"], + "run_at": "document_start", + "all_frames": false, + "js": ["content/install-hook-openusercss.js"] + }, { "matches": [""], "include_globs": ["*.user.css", "*.user.styl"],