[tor-commits] [snowflake/master] Add toggle functionality to web extension

cohosh at torproject.org cohosh at torproject.org
Tue Jul 2 14:11:01 UTC 2019


commit 799a13d3853c26b51bb2ed3c05690f6650cebec2
Author: Cecylia Bocovich <cohosh at torproject.org>
Date:   Wed Jun 26 20:21:44 2019 -0400

    Add toggle functionality to web extension
---
 proxy/init-webext.coffee   | 12 ++++++++++++
 proxy/ui.coffee            |  8 ++++++++
 proxy/webext/manifest.json |  3 ++-
 proxy/webext/popup.html    |  4 ++--
 proxy/webext/popup.js      | 13 +++++++++++++
 5 files changed, 37 insertions(+), 3 deletions(-)

diff --git a/proxy/init-webext.coffee b/proxy/init-webext.coffee
index 1ba6391..104384d 100644
--- a/proxy/init-webext.coffee
+++ b/proxy/init-webext.coffee
@@ -4,6 +4,9 @@ Entry point.
 
 debug = false
 snowflake = null
+config = null
+broker = null
+ui = null
 
 # Log to both console and UI if applicable.
 # Requires that the snowflake and UI objects are hooked up in order to
@@ -21,8 +24,17 @@ init = () ->
   snowflake = new Snowflake config, ui, broker
 
   log '== snowflake proxy =='
+
+update = () ->
+  if !ui.enabled
+    # Do not activate the proxy if any number of conditions are true.
+    snowflake.disable()
+    log 'Currently not active.'
+    return
+
   # Otherwise, begin setting up WebRTC and acting as a proxy.
   dbg 'Contacting Broker at ' + broker.url
+  log 'Starting snowflake'
   snowflake.setRelayAddr config.relayAddr
   snowflake.beginWebRTC()
 
diff --git a/proxy/ui.coffee b/proxy/ui.coffee
index 505fa45..fa45823 100644
--- a/proxy/ui.coffee
+++ b/proxy/ui.coffee
@@ -4,6 +4,7 @@ All of Snowflake's DOM manipulation and inputs.
 
 class UI
   active: false
+  enabled: false
 
   setStatus: (msg) ->
 
@@ -74,10 +75,17 @@ class WebExtUI extends UI
       total: @stats.reduce ((t, c) ->
         t + c
       ), 0
+      enabled: @enabled
 
   onConnect: (port) =>
     @port = port
     port.onDisconnect.addListener @onDisconnect
+    port.onMessage.addListener @onMessage
+    @postActive()
+  
+  onMessage: (m) =>
+    @enabled = m.enabled
+    update()
     @postActive()
 
   onDisconnect: (port) =>
diff --git a/proxy/webext/manifest.json b/proxy/webext/manifest.json
index cd7d250..8cf43ae 100644
--- a/proxy/webext/manifest.json
+++ b/proxy/webext/manifest.json
@@ -13,5 +13,6 @@
 		},
 		"default_title": "Snowflake",
 		"default_popup": "popup.html"
-	}
+	},
+        "permissions": ["cookies", "https://snowflake.torproject.org/"]
 }
diff --git a/proxy/webext/popup.html b/proxy/webext/popup.html
index 8149232..c32a5f8 100644
--- a/proxy/webext/popup.html
+++ b/proxy/webext/popup.html
@@ -12,9 +12,9 @@
                         <p></p>
                 </div>
                 <div class="b toggle">
-                        <label>Turn Off</label>
+                        <label id=toggle>Turn On</label>
                         <label class="switch">
-                                <input type="checkbox" checked>
+                                <input id="enabled" type="checkbox"/>
                                 <span class="slider round"></span>
                         </label>
                 </div>
diff --git a/proxy/webext/popup.js b/proxy/webext/popup.js
index 3869a5f..f02bdff 100644
--- a/proxy/webext/popup.js
+++ b/proxy/webext/popup.js
@@ -11,4 +11,17 @@ port.onMessage.addListener((m) => {
 	const clients = active ? 1 : 0;
 	ps[0].innerText = `${clients} client${(clients !== 1) ? 's' : ''} connected.`;
 	ps[1].innerText = `Your snowflake has helped ${m.total} user${(m.total !== 1) ? 's' : ''} circumvent censorship in the last 24 hours.`;
+        const enabled = m.enabled
+        const enabledText = document.getElementById('toggle');
+        if (enabled) {
+            document.getElementById('enabled').checked = true;
+            enabledText.innerText = 'Turn Off';
+        } else {
+            document.getElementById('enabled').checked = false;
+            enabledText.innerText = 'Turn On';
+        }
 });
+
+document.addEventListener('change', (event) => {
+    port.postMessage({enabled: event.target.checked});
+})





More information about the tor-commits mailing list