plugins: Remove support for MozJS engine
diff --git a/.gitignore b/.gitignore
index 0c77974..29b8741 100644
--- a/.gitignore
+++ b/.gitignore
@@ -31,6 +31,5 @@
 libproxy/libproxy-1.0.pc
 tools/proxy
 tools/manual-proxy-test
-unit/test-mozjs
 unit/test-pacrunner
 unit/suite/*.xml
diff --git a/Makefile.am b/Makefile.am
index 6b2bc6d..819abab 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -28,15 +28,6 @@
 builtin_libadd += @CURL_LIBS@
 endif
 
-if MOZJS
-js_sources = src/js_funcs.c
-builtin_modules += mozjs
-builtin_libadd += plugins/libmozjsplugin.a @MOZJS_LIBS@ -lstdc++
-noinst_LIBRARIES += plugins/libmozjsplugin.a
-plugins_libmozjsplugin_a_SOURCES = plugins/mozjs.cc
-plugins_libmozjsplugin_a_CXXFLAGS = $(AM_CFLAGS) @MOZJS_CFLAGS@ @DBUS_CFLAGS@ @GLIB_CFLAGS@
-endif
-
 if DUKTAPE
 js_sources = src/js_funcs.c
 builtin_modules += duktape
@@ -122,20 +113,6 @@
 
 endif
 
-if MOZJS
-unit_test_pacrunner_SOURCES += plugins/mozjs.cc
-unit_test_pacrunner_CXXFLAGS = $(AM_CFLAGS)  @MOZJS_CFLAGS@
-unit_test_pacrunner_LDADD += @MOZJS_LIBS@ @PTHREAD_LIBS@
-
-noinst_PROGRAMS += unit/test-mozjs
-
-unit_test_mozjs_SOURCES = unit/test-mozjs.c src/pacrunner.h \
-			src/proxy.c src/manual.c src/download.c \
-				src/js.c plugins/mozjs.cc $(js_sources)
-unit_test_mozjs_CXXFLAGS = $(AM_CFLAGS)  @MOZJS_CFLAGS@
-unit_test_mozjs_LDADD = @MOZJS_LIBS@ @GLIB_LIBS@ @PTHREAD_LIBS@
-endif
-
 if DUKTAPE
 unit_test_pacrunner_SOURCES += plugins/duktape.c
 
diff --git a/bootstrap-configure b/bootstrap-configure
index 661675c..cb8613d 100755
--- a/bootstrap-configure
+++ b/bootstrap-configure
@@ -11,7 +11,6 @@
 		--mandir=/usr/share/man \
 		--disable-datafiles \
 		--enable-libproxy \
-		--enable-curl \
-		--enable-mozjs \
 		--enable-duktape \
+		--enable-curl \
 		--enable-unit $*
diff --git a/configure.ac b/configure.ac
index e979e58..aa3da42 100644
--- a/configure.ac
+++ b/configure.ac
@@ -73,16 +73,6 @@
 		[enable Duktape Javascript plugin support]))
 AM_CONDITIONAL(DUKTAPE, test "${enable_duktape}" = "yes")
 
-AC_ARG_ENABLE(mozjs, AC_HELP_STRING([--enable-mozjs],
-		[enable Mozilla Javascript plugin support]))
-if (test "${enable_mozjs}" = "yes"); then
-	PKG_CHECK_MODULES(MOZJS,  mozjs-38, dummy=yes,
-			AC_MSG_ERROR(Mozilla Javascript version 38 is required))
-	AC_SUBST(MOZJS_CFLAGS)
-	AC_SUBST(MOZJS_LIBS)
-fi
-AM_CONDITIONAL(MOZJS, test "${enable_mozjs}" = "yes")
-
 PKG_CHECK_MODULES(GLIB, glib-2.0 >= 2.16, dummy=yes,
 				AC_MSG_ERROR(GLib >= 2.16 is required))
 AC_SUBST(GLIB_CFLAGS)
diff --git a/plugins/mozjs.cc b/plugins/mozjs.cc
deleted file mode 100644
index e10b297..0000000
--- a/plugins/mozjs.cc
+++ /dev/null
@@ -1,253 +0,0 @@
-/*
- *
- *  PACrunner - Proxy configuration daemon
- *
- *  Copyright (C) 2010-2011  Intel Corporation. All rights reserved.
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License version 2 as
- *  published by the Free Software Foundation.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <errno.h>
-#include <unistd.h>
-#include <string.h>
-#include <pthread.h>
-
-#include <netdb.h>
-
-#pragma GCC diagnostic ignored "-Wredundant-decls"
-#pragma GCC diagnostic ignored "-Winvalid-offsetof"
-#include <jsapi.h>
-#pragma GCC diagnostic error "-Wredundant-decls"
-#pragma GCC diagnostic error "-Winvalid-offsetof"
-
-extern "C" {
-#include "pacrunner.h"
-#include "js.h"
-}
-
-static pthread_mutex_t mozjs_mutex = PTHREAD_MUTEX_INITIALIZER;
-
-struct pacrunner_mozjs {
-	struct pacrunner_proxy *proxy;
-	JSContext *jsctx;
-	JSObject *jsobj;
-	JSAutoCompartment *jsac;
-};
-
-static bool myipaddress(JSContext *jsctx, unsigned argc, jsval *vp)
-{
-	struct pacrunner_mozjs *ctx = (pacrunner_mozjs *)JS_GetContextPrivate(jsctx);
-	char address[NI_MAXHOST];
-
-	DBG("");
-
-	JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
-
-	args.rval().setNull();
-
-	if (!ctx)
-		return true;
-
-	if (__pacrunner_js_getipaddr(ctx->proxy, address, sizeof(address)) < 0)
-		return true;
-
-	DBG("address %s", address);
-
-	args.rval().setString(JS_NewStringCopyZ(jsctx,address));
-
-	return true;
-}
-
-static bool dnsresolve(JSContext *jsctx, unsigned argc, jsval *vp)
-{
-	struct pacrunner_mozjs *ctx = (pacrunner_mozjs *)JS_GetContextPrivate(jsctx);
-	char address[NI_MAXHOST];
-	JS::CallArgs args = JS::CallArgsFromVp(argc,vp);
-	char * host = JS_EncodeString(jsctx, args[0].toString());
-
-	DBG("host %s", host);
-
-	if (!ctx)
-		goto out;
-
-	if (__pacrunner_js_resolve(ctx->proxy, host, address, sizeof(address)) < 0)
-		goto out;
-
-	DBG("address %s", address);
-
-	args.rval().setString(JS_NewStringCopyZ(jsctx,address));
-
- out:
-	JS_free(jsctx, host);
-	return true;
-
-}
-
-static JSClass jscls = {
-	"global", JSCLASS_GLOBAL_FLAGS,
-};
-
-static JSRuntime *jsrun;
-
-static int create_object(struct pacrunner_proxy *proxy)
-{
-	struct pacrunner_mozjs *ctx;
-	const char *script;
-
-	script = pacrunner_proxy_get_script(proxy);
-	if (!script)
-		return 0;
-
-	ctx = (pacrunner_mozjs *)g_malloc0(sizeof(struct pacrunner_mozjs));
-
-	ctx->proxy = proxy;
-	ctx->jsctx = JS_NewContext(jsrun, 8 * 1024);
-	if (!ctx->jsctx) {
-		g_free(ctx);
-		return -ENOMEM;
-	}
-	JS_SetContextPrivate(ctx->jsctx, ctx);
-	__pacrunner_proxy_set_jsctx(proxy, ctx);
-
-	JS::CompartmentOptions compart_opts;
-	compart_opts.setVersion(JSVERSION_LATEST);
-	ctx->jsobj = JS_NewGlobalObject(ctx->jsctx, &jscls, nullptr,
-					JS::DontFireOnNewGlobalHook, compart_opts);
-	JS::RootedObject jsobj(ctx->jsctx,ctx->jsobj);
-
-	ctx->jsac = new JSAutoCompartment(ctx->jsctx, jsobj);
-
-	if (!JS_InitStandardClasses(ctx->jsctx, jsobj))
-		pacrunner_error("Failed to init JS standard classes");
-
-	JS_DefineFunction(ctx->jsctx, jsobj, "myIpAddress", myipaddress, 0, 0);
-	JS_DefineFunction(ctx->jsctx, jsobj, "dnsResolve", dnsresolve, 1, 0);
-
-	JS::RootedValue rval(ctx->jsctx);
-	JS::CompileOptions opts(ctx->jsctx);
-	opts.setIntroductionType("pacrunner")
-	    .setUTF8(true)
-	    .setCompileAndGo(true);
-
-	JS::Evaluate(ctx->jsctx, JS::HandleObject(jsobj), opts,
-		     __pacrunner_js_routines, strlen(__pacrunner_js_routines)
-		     , &rval);
-
-	JS::Evaluate(ctx->jsctx, jsobj, opts, script, strlen(script), &rval);
-
-	return 0;
-}
-
-static int mozjs_clear_proxy(struct pacrunner_proxy *proxy)
-{
-	struct pacrunner_mozjs *ctx = (pacrunner_mozjs *)__pacrunner_proxy_get_jsctx(proxy);
-
-	DBG("proxy %p ctx %p", proxy, ctx);
-
-	if (!ctx)
-		return -EINVAL;
-
-	delete ctx->jsac;
-	JS_DestroyContext(ctx->jsctx);
-	__pacrunner_proxy_set_jsctx(proxy, NULL);
-	g_free(ctx);
-
-	return 0;
-}
-
-static int mozjs_set_proxy(struct pacrunner_proxy *proxy)
-{
-	DBG("proxy %p", proxy);
-	if (!proxy)
-		return 0;
-
-	mozjs_clear_proxy(proxy);
-
-	return create_object(proxy);
-}
-
-static char * mozjs_execute(struct pacrunner_proxy *proxy, const char *url,
-			    const char *host)
-{
-	struct pacrunner_mozjs *ctx = (pacrunner_mozjs *)__pacrunner_proxy_get_jsctx(proxy);
-	bool result;
-	char *answer, *g_answer;
-	DBG("proxy %p ctx %p url %s host %s", proxy, ctx, url, host);
-
-	if (!ctx)
-		return NULL;
-
-	pthread_mutex_lock(&mozjs_mutex);
-
-	JS_BeginRequest(ctx->jsctx);
-	JS::RootedValue rval(ctx->jsctx);
-	JS::AutoValueArray<2> args(ctx->jsctx);
-
-	args[0].setString(JS_NewStringCopyZ(ctx->jsctx, url));
-	args[1].setString(JS_NewStringCopyZ(ctx->jsctx, host));
-
-
-	JS::RootedObject jsobj(ctx->jsctx,ctx->jsobj);
-
-	result = JS_CallFunctionName(ctx->jsctx, jsobj, "FindProxyForURL", args , &rval);
-
-	JS_EndRequest(ctx->jsctx);
-
-	JS_MaybeGC(ctx->jsctx);
-
-	pthread_mutex_unlock(&mozjs_mutex);
-
-	if (result) {
-		answer = JS_EncodeString(ctx->jsctx, rval.toString());
-		g_answer = g_strdup(answer);
-		JS_free(ctx->jsctx, answer);
-		return g_answer;
-	}
-
-	return NULL;
-}
-
-static struct pacrunner_js_driver mozjs_driver = {
-	.name		= "mozjs",
-	.priority	= PACRUNNER_JS_PRIORITY_DEFAULT,
-	.set_proxy	= mozjs_set_proxy,
-	.clear_proxy	= mozjs_clear_proxy,
-	.execute	= mozjs_execute,
-};
-
-static int mozjs_init(void)
-{
-	DBG("");
-	JS_Init();
-	jsrun = JS_NewRuntime(JS::DefaultHeapMaxBytes, 8 * 1024 * 1024 );
-
-	return pacrunner_js_driver_register(&mozjs_driver);
-}
-
-static void mozjs_exit(void)
-{
-	DBG("");
-
-	pacrunner_js_driver_unregister(&mozjs_driver);
-
-	JS_DestroyRuntime(jsrun);
-	JS_ShutDown();
-}
-
-PACRUNNER_PLUGIN_DEFINE(mozjs, mozjs_init, mozjs_exit)
diff --git a/src/pacrunner.h b/src/pacrunner.h
index e31d7ef..a112271 100644
--- a/src/pacrunner.h
+++ b/src/pacrunner.h
@@ -105,11 +105,6 @@
 char *__pacrunner_manual_execute(const char *url, const char *host,
 				 GList **servers, GList **excludes);
 
-int __pacrunner_mozjs_init(void);
-void __pacrunner_mozjs_cleanup(void);
-int __pacrunner_mozjs_set_proxy(struct pacrunner_proxy *proxy);
-char *__pacrunner_mozjs_execute(const char *url, const char *host);
-
 int __pacrunner_js_init(void);
 void __pacrunner_js_cleanup(void);
 int __pacrunner_js_set_proxy(struct pacrunner_proxy *proxy);
diff --git a/unit/test-mozjs.c b/unit/test-mozjs.c
deleted file mode 100644
index 25c8634..0000000
--- a/unit/test-mozjs.c
+++ /dev/null
@@ -1,225 +0,0 @@
-/*
- *
- *  PACrunner - Proxy configuration daemon
- *
- *  Copyright (C) 2010-2011  Intel Corporation. All rights reserved.
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License version 2 as
- *  published by the Free Software Foundation.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdlib.h>
-
-#include <glib.h>
-
-#include "pacrunner.h"
-
-extern struct pacrunner_plugin_desc __pacrunner_builtin_mozjs;
-
-static int mozjs_init(void) {
-	return __pacrunner_builtin_mozjs.init();
-}
-
-static void mozjs_exit(void) {
-	__pacrunner_builtin_mozjs.exit();
-}
-
-
-void pacrunner_error(const char *format, ...)
-{
-}
-
-void pacrunner_debug(const char *format, ...)
-{
-}
-
-#define MULTIPLE_COUNT	500
-#define MASSIVE_COUNT	MULTIPLE_COUNT * 100
-
-#define EXAMPLE_URL	"http://www.example.com/site/test.html"
-#define EXAMPLE_HOST	"www.example.com"
-
-#define DIRECT_PAC	"function FindProxyForURL(url, host)\n"		\
-			"{\n"						\
-			"	return \"DIRECT\";"			\
-			"}\n"
-
-#define EXAMPLE_PAC \
-	"function FindProxyForURL(url, host)\n"				\
-	"{\n"								\
-	"  var me = myIpAddress();\n"					\
-	"  var resolved_ip = dnsResolve(host);\n"			\
-	"  if (me == \"127.0.0.1\") { return \"DIRECT\"; }\n"		\
-	"  if (host == \"127.0.0.1\") { return \"DIRECT\"; }\n"		\
-	"  if (host == \"localhost\") { return \"DIRECT\"; }\n"		\
-	"  if (isPlainHostName(host)) { return \"DIRECT\"; }\n"		\
-	"  return \"PROXY proxy.example.com\";\n"			\
-	"}\n"
-
-static struct pacrunner_proxy *proxy;
-
-static void test_single_init(void)
-{
-	g_assert(mozjs_init() == 0);
-
-	mozjs_exit();
-}
-
-static void test_multiple_init(void)
-{
-	int i;
-
-	for (i = 0; i < MULTIPLE_COUNT; i++) {
-		g_assert(mozjs_init() == 0);
-
-		mozjs_exit();
-	}
-}
-
-static void test_single_execute_without_pac(void)
-{
-	char *result;
-
-	g_assert(mozjs_init() == 0);
-
-	result = __pacrunner_js_execute(proxy, EXAMPLE_URL, EXAMPLE_HOST);
-	g_test_message("result: %s", result);
-	g_free(result);
-	mozjs_exit();
-}
-
-static void test_multiple_execute_without_pac(void)
-{
-	char *result;
-	int i;
-
-	g_assert(mozjs_init() == 0);
-
-	for (i = 0; i < MULTIPLE_COUNT; i++) {
-		result = __pacrunner_js_execute(proxy, EXAMPLE_URL,
-						EXAMPLE_HOST);
-		g_test_message("result %d: %s", i, result);
-		g_free(result);
-	}
-
-	mozjs_exit();
-}
-
-static void test_single_execute_with_direct_pac(void)
-{
-	char *result;
-
-	g_assert(mozjs_init() == 0);
-
-	g_assert(pacrunner_proxy_set_auto(proxy, NULL, DIRECT_PAC) == 0);
-
-	result = __pacrunner_js_execute(proxy, EXAMPLE_URL, EXAMPLE_HOST);
-	g_test_message("result: %s", result);
-	g_free(result);
-
-	pacrunner_proxy_disable(proxy);
-
-	mozjs_exit();
-}
-
-static void test_multiple_execute_with_direct_pac(void)
-{
-	char *result;
-	int i;
-
-	mozjs_init();
-
-	g_assert(pacrunner_proxy_set_auto(proxy, NULL, DIRECT_PAC) == 0);
-
-	for (i = 0; i < MULTIPLE_COUNT; i++) {
-		result = __pacrunner_js_execute(proxy, EXAMPLE_URL,
-						EXAMPLE_HOST);
-		g_test_message("result %d: %s", i, result);
-		g_free(result);
-	}
-
-	pacrunner_proxy_disable(proxy);
-
-	mozjs_exit();
-}
-
-static void test_massive_execute_with_direct_pac(void)
-{
-	char *result;
-	int i;
-
-	mozjs_init();
-
-	g_assert(pacrunner_proxy_set_auto(proxy, NULL, DIRECT_PAC) == 0);
-
-	for (i = 0; i < MASSIVE_COUNT; i++) {
-		result = __pacrunner_js_execute(proxy, EXAMPLE_URL,
-						EXAMPLE_HOST);
-		g_test_message("result %d: %s", i, result);
-		g_free(result);
-	}
-
-	pacrunner_proxy_disable(proxy);
-
-	mozjs_exit();
-}
-
-static void test_multiple_execute_with_example_pac(void)
-{
-	char *result;
-	int i;
-
-	mozjs_init();
-
-	g_assert(pacrunner_proxy_set_auto(proxy, NULL, EXAMPLE_PAC) == 0);
-
-	for (i = 0; i < MULTIPLE_COUNT; i++) {
-		result = __pacrunner_js_execute(proxy, EXAMPLE_URL,
-						EXAMPLE_HOST);
-		g_test_message("result %d: %s", i, result);
-		g_free(result);
-	}
-
-	pacrunner_proxy_disable(proxy);
-
-	mozjs_exit();
-}
-
-int main(int argc, char **argv)
-{
-	g_test_init(&argc, &argv, NULL);
-
-	proxy = pacrunner_proxy_create("eth0");
-
-	g_test_add_func("/mozjs/single-init", test_single_init);
-	g_test_add_func("/mozjs/multiple-init", test_multiple_init);
-	g_test_add_func("/mozjs/single-execute-without-pac",
-				test_single_execute_without_pac);
-	g_test_add_func("/mozjs/multiple-execute-without-pac",
-				test_multiple_execute_without_pac);
-	g_test_add_func("/mozjs/single-execute-with-direct-pac",
-				test_single_execute_with_direct_pac);
-	g_test_add_func("/mozjs/multiple-execute-with-direct-pac",
-				test_multiple_execute_with_direct_pac);
-	g_test_add_func("/mozjs/massive-execute-with-direct-pac",
-				test_massive_execute_with_direct_pac);
-	g_test_add_func("/mozjs/multiple-execute-with-example-pac",
-				test_multiple_execute_with_example_pac);
-
-	return g_test_run();
-}