[tor-commits] [meek/master] Look more like a real extension.

dcf at torproject.org dcf at torproject.org
Wed Apr 9 05:56:56 UTC 2014


commit 1794bb4d3ba23410a302639fbe7672fe103a5b95
Author: David Fifield <david at bamsoftware.com>
Date:   Wed Mar 12 21:09:18 2014 -0700

    Look more like a real extension.
    
    The code is now in a component, not a browser overlay. I followed some
    instructions from
    	https://developer.mozilla.org/en-US/docs/How_to_Build_an_XPCOM_Component_in_Javascript
    	https://developer.mozilla.org/en-US/docs/Mozilla/XPCOM/Receiving_startup_notifications
    	https://developer.mozilla.org/en-US/docs/Mozilla/JavaScript_code_modules/XPCOMUtils.jsm
    It now runs just once at startup. (Previously it ran for each new
    browser window.)
---
 firefox/chrome.manifest         |    7 +++--
 firefox/chrome/content/main.js  |   47 -----------------------------
 firefox/chrome/content/main.xul |    5 ----
 firefox/components/main.js      |   63 +++++++++++++++++++++++++++++++++++++++
 4 files changed, 68 insertions(+), 54 deletions(-)

diff --git a/firefox/chrome.manifest b/firefox/chrome.manifest
index 5403d2b..ef6596c 100644
--- a/firefox/chrome.manifest
+++ b/firefox/chrome.manifest
@@ -1,2 +1,5 @@
-content	meek-http-helper	chrome/content/
-overlay	chrome://browser/content/browser.xul	chrome://meek-http-helper/content/main.xul
+# https://developer.mozilla.org/en-US/docs/How_to_Build_an_XPCOM_Component_in_Javascript
+# https://developer.mozilla.org/en-US/docs/Mozilla/XPCOM/Receiving_startup_notifications
+component {e7bc2b9c-f454-49f3-a19f-14848a4d871d} components/main.js
+contract @bamsoftware.com/meek-http-helper;1 {e7bc2b9c-f454-49f3-a19f-14848a4d871d}
+category profile-after-change MeekHTTPHelper @bamsoftware.com/meek-http-helper;1
diff --git a/firefox/chrome/content/main.js b/firefox/chrome/content/main.js
deleted file mode 100644
index 1430a57..0000000
--- a/firefox/chrome/content/main.js
+++ /dev/null
@@ -1,47 +0,0 @@
-var FRONT_URL = "https://www.google.com/";
-var HOST = "meek-reflect.appspot.com";
-
-// Create a "direct" nsIProxyInfo that bypasses the default proxy.
-// https://developer.mozilla.org/en-US/docs/XPCOM_Interface_Reference/nsIProtocolProxyService
-var pps = Components.classes["@mozilla.org/network/protocol-proxy-service;1"]
-	.getService(Components.interfaces.nsIProtocolProxyService);
-// https://developer.mozilla.org/en-US/docs/XPCOM_Interface_Reference/nsIProxyInfo
-var proxy = pps.newProxyInfo("direct", "", 0, 0, 0xffffffff, null);
-
-// https://developer.mozilla.org/en-US/docs/XPCOM_Interface_Reference/nsIIOService
-var ioService = Components.classes["@mozilla.org/network/io-service;1"]
-	.getService(Components.interfaces.nsIIOService);
-var httpProtocolHandler = ioService.getProtocolHandler("http")
-	.QueryInterface(Components.interfaces.nsIHttpProtocolHandler);
-var uri = ioService.newURI(FRONT_URL, null, null);
-// Construct an HTTP channel with the proxy bypass.
-// https://developer.mozilla.org/en-US/docs/XPCOM_Interface_Reference/nsIHttpChannel
-var channel = httpProtocolHandler.newProxiedChannel(uri, proxy, 0, null)
-	.QueryInterface(Components.interfaces.nsIHttpChannel);
-// Set the host we really want.
-channel.setRequestHeader("Host", HOST, false);
-channel.redirectionLimit = 0;
-// https://developer.mozilla.org/en-US/docs/XPCOM_Interface_Reference/nsIUploadChannel
-// channel.requestMethod = "POST";
-
-var listener = new StreamListener();
-channel.asyncOpen(listener, null);
-
-// https://developer.mozilla.org/en-US/docs/Creating_Sandboxed_HTTP_Connections
-function StreamListener() {
-	this.onStartRequest = function(aRequest, aContext) {
-		dump("onStartRequest\n");
-	};
-	this.onStopRequest = function(aRequest, aContext, aStatus) {
-		dump("onStopRequest\n");
-	};
-	this.onDataAvailable = function(aRequest, aContext, aStream, aSourceOffset, aLength) {
-		dump("onDataAvailable\n");
-		var a = new Uint8Array(aLength);
-		var input = Components.classes["@mozilla.org/binaryinputstream;1"]
-			.createInstance(Components.interfaces.nsIBinaryInputStream);
-		input.setInputStream(aStream);
-		input.readByteArray(aLength, a);
-		dump(aLength + ":" + a + "\n");
-	};
-}
diff --git a/firefox/chrome/content/main.xul b/firefox/chrome/content/main.xul
deleted file mode 100644
index c93a89e..0000000
--- a/firefox/chrome/content/main.xul
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0"?>
-
-<overlay id="main" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-	<script src="chrome://meek-http-helper/content/main.js"></script>
-</overlay>
diff --git a/firefox/components/main.js b/firefox/components/main.js
new file mode 100644
index 0000000..0588b4a
--- /dev/null
+++ b/firefox/components/main.js
@@ -0,0 +1,63 @@
+const FRONT_URL = "https://www.google.com/";
+const HOST = "meek-reflect.appspot.com";
+
+// https://developer.mozilla.org/en-US/docs/How_to_Build_an_XPCOM_Component_in_Javascript#Using_XPCOMUtils
+// https://developer.mozilla.org/en-US/docs/Mozilla/JavaScript_code_modules/XPCOMUtils.jsm
+Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
+
+function MeekHTTPHelper() {
+    this.wrappedJSObject = this;
+
+    // Create a "direct" nsIProxyInfo that bypasses the default proxy.
+    // https://developer.mozilla.org/en-US/docs/XPCOM_Interface_Reference/nsIProtocolProxyService
+    var pps = Components.classes["@mozilla.org/network/protocol-proxy-service;1"]
+            .getService(Components.interfaces.nsIProtocolProxyService);
+    // https://developer.mozilla.org/en-US/docs/XPCOM_Interface_Reference/nsIProxyInfo
+    var proxy = pps.newProxyInfo("direct", "", 0, 0, 0xffffffff, null);
+
+    // https://developer.mozilla.org/en-US/docs/XPCOM_Interface_Reference/nsIIOService
+    var ioService = Components.classes["@mozilla.org/network/io-service;1"]
+            .getService(Components.interfaces.nsIIOService);
+    var httpProtocolHandler = ioService.getProtocolHandler("http")
+            .QueryInterface(Components.interfaces.nsIHttpProtocolHandler);
+    var uri = ioService.newURI(FRONT_URL, null, null);
+    // Construct an HTTP channel with the proxy bypass.
+    // https://developer.mozilla.org/en-US/docs/XPCOM_Interface_Reference/nsIHttpChannel
+    var channel = httpProtocolHandler.newProxiedChannel(uri, proxy, 0, null)
+            .QueryInterface(Components.interfaces.nsIHttpChannel);
+    // Set the host we really want.
+    channel.setRequestHeader("Host", HOST, false);
+    channel.redirectionLimit = 0;
+    // https://developer.mozilla.org/en-US/docs/XPCOM_Interface_Reference/nsIUploadChannel
+    // channel.requestMethod = "POST";
+
+    // https://developer.mozilla.org/en-US/docs/Creating_Sandboxed_HTTP_Connections
+    function StreamListener() {
+            this.onStartRequest = function(aRequest, aContext) {
+                    dump("onStartRequest\n");
+            };
+            this.onStopRequest = function(aRequest, aContext, aStatus) {
+                    dump("onStopRequest\n");
+            };
+            this.onDataAvailable = function(aRequest, aContext, aStream, aSourceOffset, aLength) {
+                    dump("onDataAvailable\n");
+                    var a = new Uint8Array(aLength);
+                    var input = Components.classes["@mozilla.org/binaryinputstream;1"]
+                            .createInstance(Components.interfaces.nsIBinaryInputStream);
+                    input.setInputStream(aStream);
+                    input.readByteArray(aLength, a);
+                    dump(aLength + ":" + a + "\n");
+            };
+    }
+
+    var listener = new StreamListener();
+    channel.asyncOpen(listener, null);
+}
+
+MeekHTTPHelper.prototype = {
+    classDescription: "meek HTTP helper component",
+    classID: Components.ID("{e7bc2b9c-f454-49f3-a19f-14848a4d871d}"),
+    contractID: "@bamsoftware.com/meek-http-helper;1",
+};
+
+var NSGetFactory = XPCOMUtils.generateNSGetFactory([MeekHTTPHelper]);





More information about the tor-commits mailing list