[tor-commits] [pluggable-transports/snowflake-webext] 04/04: Change long timers to alarms

gitolite role git at cupani.torproject.org
Tue Nov 1 20:17:44 UTC 2022


This is an automated email from the git hooks/post-receive script.

cohosh pushed a commit to branch i29
in repository pluggable-transports/snowflake-webext.

commit cb68d6ee34c93727b7afbf1b81821a81a6a13807
Author: Cecylia Bocovich <cohosh at torproject.org>
AuthorDate: Tue Nov 1 14:21:24 2022 -0400

    Change long timers to alarms
    
    With manifest v3, our background page is not persistent. Longer timers
    set with setTimeout and setInterval are replaced with alarms and an
    alarm listener.
---
 config.js                 |  4 ++--
 init-badge.js             | 19 +++++++++++++++++++
 init-webext.js            | 21 ++++++++++++++++++++-
 package-lock.json         |  2 +-
 package.json              |  2 +-
 snowflake.js              |  7 +++----
 ui.js                     |  6 +-----
 webext/manifest_base.json |  8 +++++---
 8 files changed, 52 insertions(+), 17 deletions(-)

diff --git a/config.js b/config.js
index 8f42176..3eaaf63 100644
--- a/config.js
+++ b/config.js
@@ -29,8 +29,8 @@ Config.prototype.slowestBrokerPollInterval = 6 * 60 * 60.0 * 1000; //1 poll ever
 Config.prototype.pollAdjustment = 100.0 * 1000;
 Config.prototype.fastBrokerPollInterval = 30 * 1000; //1 poll every 30 seconds
 
-// Recheck our NAT type once every 2 days
-Config.prototype.natCheckInterval = 2 * 24 * 60 * 60 * 1000;
+// Recheck our NAT type once every 2 days (note: this value is given in minutes)
+Config.prototype.natCheckInterval = 2 * 24 * 60;
 
 // Timeout after sending answer before datachannel is opened
 Config.prototype.datachannelTimeout = 20 * 1000;
diff --git a/init-badge.js b/init-badge.js
index a4305a2..9f9d46c 100644
--- a/init-badge.js
+++ b/init-badge.js
@@ -149,6 +149,25 @@ var
   /** @type {() => void} */
   tryProbe;
 
+// Listeners for alarms
+browser.alarms.onAlarm.addListener((alarmInfo) => {
+  switch(alarmInfo.name){
+    case "poll":
+      snowflake.beginWebRTC();
+      break;
+    case "NAT":
+      ui.checkNAT();
+      break;
+    case "stats":
+      ui.stats.unshift(0);
+      ui.stats.splice(24);
+      ui.postActive();
+      break;
+    default:
+      console.log("Unknown alarm name: ", alarmInfo.name);
+  }
+});
+
 (function() {
 
   snowflake = null;
diff --git a/init-webext.js b/init-webext.js
index a1126eb..9e0bfbd 100644
--- a/init-webext.js
+++ b/init-webext.js
@@ -65,7 +65,7 @@ class WebExtUI extends UI {
   initNATType() {
     this.natType = "unknown";
     this.checkNAT();
-    setInterval(() => {this.checkNAT();}, config.natCheckInterval);
+    browser.alarms.create("NAT", { "periodInMinutes": config.natCheckInterval } );
   }
 
   tryProbe() {
@@ -235,6 +235,25 @@ var
   /** @type {boolean} */
   silenceNotifications;
 
+// Listeners for alarms
+browser.alarms.onAlarm.addListener((alarmInfo) => {
+  switch(alarmInfo.name){
+    case "poll":
+      snowflake.beginWebRTC();
+      break;
+    case "NAT":
+      ui.checkNAT();
+      break;
+    case "stats":
+      ui.stats.unshift(0);
+      ui.stats.splice(24);
+      ui.postActive();
+      break;
+    default:
+      console.log("Unknown alarm name: ", alarmInfo.name);
+  }
+});
+
 (function () {
 
   silenceNotifications = false;
diff --git a/package-lock.json b/package-lock.json
index e90c7f0..fb4aa4f 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,6 +1,6 @@
 {
   "name": "snowflake-pt",
-  "version": "0.6.0",
+  "version": "0.6.3",
   "lockfileVersion": 1,
   "requires": true,
   "dependencies": {
diff --git a/package.json b/package.json
index fda82f9..1cfe3d9 100644
--- a/package.json
+++ b/package.json
@@ -33,4 +33,4 @@
     "ws": "^5.2.3",
     "xmlhttprequest": "^1.8.0"
   }
-}
\ No newline at end of file
+}
diff --git a/snowflake.js b/snowflake.js
index abb4c11..ed11c32 100644
--- a/snowflake.js
+++ b/snowflake.js
@@ -53,10 +53,9 @@ class Snowflake {
    * process. `pollBroker` automatically arranges signalling.
    */
   beginWebRTC() {
+    console.log("polling broker..");
     this.pollBroker();
-    this.pollTimeoutId = setTimeout((() => {
-      this.beginWebRTC();
-    }), this.pollInterval);
+    browser.alarms.create("poll", {"when": Date.now()+this.pollInterval } );
   }
 
   /**
@@ -205,7 +204,7 @@ class Snowflake {
   /** Stop all proxypairs. */
   disable() {
     log('Disabling Snowflake.');
-    clearTimeout(this.pollTimeoutId);
+    browser.alarms.clear("pollTimeout");
     while (this.proxyPairs.length > 0) {
       this.proxyPairs.pop().close();
     }
diff --git a/ui.js b/ui.js
index 1af9b38..0f7e67e 100644
--- a/ui.js
+++ b/ui.js
@@ -10,11 +10,7 @@ class UI {
 
   initStats() {
     this.stats = [0];
-    setInterval((() => {
-      this.stats.unshift(0);
-      this.stats.splice(24);
-      this.postActive();
-    }), 60 * 60 * 1000);
+    browser.alarms.create("stats", { "periodInMinutes" : 60 });
   }
 
   setStatus() {}
diff --git a/webext/manifest_base.json b/webext/manifest_base.json
index d9080fb..2b7d258 100644
--- a/webext/manifest_base.json
+++ b/webext/manifest_base.json
@@ -11,7 +11,8 @@
   "background": {
     "scripts": [
       "snowflake.js"
-    ]
+    ],
+    "persistent": false
   },
   "action": {
     "default_icon": {
@@ -22,6 +23,7 @@
     "default_popup": "embed.html"
   },
   "permissions": [
-    "storage"
+    "storage",
+    "alarms"
   ]
-}
\ No newline at end of file
+}

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the tor-commits mailing list