Skip to content
Permalink
Browse files
Start conversion of prefs to a WebExtension
  • Loading branch information
Standard8 committed Nov 21, 2017
1 parent 3b76f27 commit bed5b4ad7fc968d3115fcccf5a1ab4cfeaf1cae5
Showing with 123 additions and 8 deletions.
  1. +68 −5 bootstrap.js
  2. +2 −3 install.rdf
  3. +14 −0 webextension/manifest.json
  4. +15 −0 webextension/options.html
  5. +24 −0 webextension/options.js
@@ -44,6 +44,11 @@ const Cr = Components.results;
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
Cu.import("resource://gre/modules/Services.jsm");
const {fixIterator} = Cu.import("resource:///modules/iteratorUtils.jsm", {});
Cu.import("resource:///modules/iteratorUtils.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "LegacyExtensionsUtils",
"resource://gre/modules/LegacyExtensionsUtils.jsm");

const kExtensionID = "gconversation@xulforum.org";

let global = this;
let Log;
@@ -168,6 +173,28 @@ let windowObserver = {
}
};

let addonResourceURI;
let appStartupDone;
let appStartupPromise = new Promise((resolve, reject) => {
appStartupDone = resolve;
});
let startupReason;

const appStartupObserver = {
register() {
Services.obs.addObserver(this, "final-ui-startup");
},

unregister() {
Services.obs.removeObserver(this, "final-ui-startup");
},

observe() {
appStartupDone();
this.unregister();
}
};

function startup(aData, aReason) {
ResourceRegister.init(aData.installPath, "conversations");
/* import-globals-from modules/log.js */
@@ -180,6 +207,16 @@ function startup(aData, aReason) {
Log = setupLogging("Conversations.MonkeyPatch");
Log.debug("startup, aReason=", aReason);

startupReason = aReason;
if (aReason === BOOTSTRAP_REASONS.APP_STARTUP) {
appStartupObserver.register();
} else {
appStartupDone();
}

addonResourceURI = aData.resourceURI;
appStartupPromise = appStartupPromise.then(handleStartup);

try {
// Patch all existing windows when the UI is built; all locales should have been loaded here
Services.obs.addObserver({
@@ -214,16 +251,16 @@ function startup(aData, aReason) {
Services.obs.addObserver({
observe: function(aSubject, aTopic, aData) {
if (aTopic == "addon-options-displayed" && aData == "gconversation@xulforum.org") {
loadImports();
CustomizeKeys.enable(aSubject); // aSubject is the options document
//loadImports();
//CustomizeKeys.enable(aSubject); // aSubject is the options document
}
}
}, "addon-options-displayed", false);
Services.obs.addObserver({
observe: function(aSubject, aTopic, aData) {
if (aTopic == "addon-options-hidden" && aData == "gconversation@xulforum.org") {
loadImports();
CustomizeKeys.disable(aSubject); // aSubject is the options document
//loadImports();
//CustomizeKeys.disable(aSubject); // aSubject is the options document
}
}
}, "addon-options-hidden", false);
@@ -233,11 +270,37 @@ function startup(aData, aReason) {
}
}

function handleStartup() {
const webExtension = LegacyExtensionsUtils.getEmbeddedExtensionFor({
id: kExtensionID,
resourceURI: addonResourceURI,
});
webExtension.startup(startupReason).then(api => {
Log.info("extension started");
return Promise.resolve();
}).catch(err => {
console.error(`WE Follow-On Search startup failed: ${err}`);
});
}


function shutdown(aData, aReason) {
// No need to do extra work here
Log.debug("shutdown, aReason=", aReason);
if (aReason == BOOTSTRAP_REASONS.APP_SHUTDOWN)

const webExtension = LegacyExtensionsUtils.getEmbeddedExtensionFor({
id: kExtensionID,
resourceURI: addonResourceURI,
});

if (aReason == BOOTSTRAP_REASONS.APP_SHUTDOWN) {
webExtension.shutdown(aReason)
return;
}

appStartupPromise = appStartupPromise.then(() => {
return webExtension.shutdown(aReason)
});

Services.ww.unregisterNotification(windowObserver);

@@ -14,18 +14,17 @@
<Description>
<em:id>{3550f703-e582-4d05-9a08-453d09bdfdc6}</em:id>
<em:minVersion>45.0</em:minVersion>
<em:maxVersion>51.0b1</em:maxVersion>
<em:maxVersion>59.0</em:maxVersion>
</Description>
</em:targetApplication>

<!-- Front End MetaData -->
<em:name>Thunderbird Conversations</em:name>
<em:description>Brings a conversation view to a Thunderbird near you!</em:description>
<em:creator>Jonathan Protzenko</em:creator>
<em:optionsURL>chrome://conversations/content/options.xul</em:optionsURL>
<em:optionsType>2</em:optionsType>
<em:homepageURL>http://github.com/protz/thunderbird-conversations/wiki</em:homepageURL>
<em:bootstrap>true</em:bootstrap>
<em:hasEmbeddedWebExtension>true</em:hasEmbeddedWebExtension>
<em:type>2</em:type>

<em:localized>
@@ -0,0 +1,14 @@
{
"applications": {
"gecko": {
"id": "test@example.com"
}
},
"manifest_version": 2,
"name": "Thunderbird Conversations Tester",
"version": "2.13.3",
"options_ui": {
"page": "options.html"
},
"permissions": ["storage"]
}
@@ -0,0 +1,15 @@
<!DOCTYPE html>

<html>
<head>
<meta charset="utf-8">
</head>

<body>
<form>
<label>Border color<input type="text" id="color" ></label>
<button type="submit">Save</button>
</form>
<script src="options.js"></script>
</body>
</html>
@@ -0,0 +1,24 @@
function saveOptions(e) {
e.preventDefault();
browser.storage.local.set({
color: document.querySelector("#color").value
});
}

function restoreOptions() {

function setCurrentChoice(result) {
document.querySelector("#color").value = result.color || "blue";
}

function onError(error) {
console.log(`Error: ${error}`);
}

var getting = browser.storage.local.get("color");
getting.then(setCurrentChoice, onError);
}
console.log("yay");

document.addEventListener("DOMContentLoaded", restoreOptions);
document.querySelector("form").addEventListener("submit", saveOptions);

0 comments on commit bed5b4a

Please sign in to comment.