[Pkg-mono-svn-commits] [SCM] moon branch, master, updated. upstream/2.3-47-g8f32d36

Jo Shields directhex at apebox.org
Fri Nov 5 00:59:01 UTC 2010


The following commit has been merged in the master branch:
commit 6623ec057bc986b67ce685ba6d2656a111723f9f
Author: Jo Shields <directhex at apebox.org>
Date:   Thu Nov 4 23:47:31 2010 +0000

    Get it building against ff3.6. Untested due to lack of working 3.6 dev environment in Lucid.
    (Historic bzr commit from Wed 2010-02-17 15:13:22 +0000)

diff --git a/debian/changelog b/debian/changelog
index 4b42183..0385392 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -16,7 +16,7 @@ moon (2.1-0ubuntu1~pre~ppa1) UNRELEASED; urgency=low
   * debian/control,
     debian/moonlight-web-devel.install:
     + Create new package for Moonlight SDK
-  * debian/patches/moon_backport_support_for_firefox_3.6_r150505.patch:
+  * debian/patches/moon_backport_support_for_firefox_3.6_r150505_151553.patch:
     + Backport from Moonlight trunk to provide support for Firefox 3.6
       (Xulrunner 1.9.2). Thanks to Andreia Gaita
   * debian/rules:
diff --git a/debian/control b/debian/control
index 3a4e3ab..0428f15 100644
--- a/debian/control
+++ b/debian/control
@@ -9,7 +9,6 @@ Vcs-Browser: http://bazaar.launchpad.net/~moonlight-team/+junk/master/files
 Standards-Version: 3.8.4
 Build-Depends: debhelper (>= 7.0.50~), 
  xulrunner-dev (>= 1.9),
- firefox-dev (>= 3.6),
  libavcodec-dev, 
  cli-common-dev,
  libgtk2.0-dev, 
@@ -17,6 +16,7 @@ Build-Depends: debhelper (>= 7.0.50~),
  chrpath, 
  bison,
  zip,
+ autoconf,
  lsb-release, 
  libpulse-dev, 
  libcairo2-dev (>= 1.8),
diff --git a/debian/patches/moon_backport_support_for_firefox_3.6_r150505_r151553.patch b/debian/patches/moon_backport_support_for_firefox_3.6_r150505_r151553.patch
new file mode 100644
index 0000000..f10935e
--- /dev/null
+++ b/debian/patches/moon_backport_support_for_firefox_3.6_r150505_r151553.patch
@@ -0,0 +1,1560 @@
+Index: moonlight-2.1/m4/mozilla.m4
+===================================================================
+--- moonlight-2.1.orig/m4/mozilla.m4	2010-02-17 12:55:35.000000000 +0000
++++ moonlight-2.1/m4/mozilla.m4	2010-02-17 12:56:14.000000000 +0000
+@@ -1,10 +1,36 @@
+ AC_DEFUN([MOONLIGHT_CHECK_MOZILLA],
+ [
+ 	with_mozilla=no
++	with_ff36=$browser_support
+ 	with_ff3=$browser_support
+ 	with_ff2=$browser_support
+ 
+ 	dnl
++	dnl Firefox 3.6
++	dnl
++
++	AC_ARG_WITH(ff36, AC_HELP_STRING([--with-ff36=no|yes],
++		[If you want to enable the xulrunner 1.9.2+ (Firefox 3.6) bridge]),
++		[], [with_ff36=yes])
++
++	if test x$with_ff36 = xyes -a x$browser_support = xyes; then
++		FF36_MODULES="libxul mozilla-plugin mozilla-js"
++
++		PKG_CHECK_EXISTS($FF36_MODULES,
++			[with_ff36=yes],
++			[with_ff36=no ff36_reason="(reason: missing FF36 development packages)"])
++
++		if test x$with_ff36 = xyes; then
++			AC_DEFINE([HAVE_GECKO_1_9_2], [1], [Gecko 1.9.2+ support])
++			PKG_CHECK_MODULES(FF36, [$FF36_MODULES glib-2.0])
++			dnl Strip out problem libraries (should already be in process space)
++			FF36_LIBS="$(echo $FF36_LIBS | sed -e 's/-lmozjs\|-lplds4\|-lplc4\|-lnspr4//g')"
++		fi
++	fi
++
++	AM_CONDITIONAL(HAVE_GECKO_1_9_2,test x$with_ff36 = xyes)
++
++	dnl
+ 	dnl Firefox 3
+ 	dnl
+ 
+@@ -76,8 +102,10 @@
+ 		fi
+ 	elif test x$with_ff3 = xyes; then
+    		with_mozilla=yes
++	elif test x$with_ff36 = xyes; then
++		with_mozilla=yes
+     	MIN_FIREFOX_VERSION="2.9.*"
+-    	MAX_FIREFOX_VERSION="3.5.*"
++	MAX_FIREFOX_VERSION="3.6.*"
+   	fi
+ 
+ 	AC_SUBST([MIN_FIREFOX_VERSION])
+Index: moonlight-2.1/plugin/plugin.cpp
+===================================================================
+--- moonlight-2.1.orig/plugin/plugin.cpp	2010-02-17 12:55:35.000000000 +0000
++++ moonlight-2.1/plugin/plugin.cpp	2010-02-17 12:56:14.000000000 +0000
+@@ -34,6 +34,7 @@
+ #include "deployment.h"
+ #include "uri.h"
+ #include "timemanager.h"
++#include "plugin-domevents.h"
+ 
+ #define Visual _XxVisual
+ #define Region _XxRegion
+@@ -853,7 +854,7 @@
+         // grovel around in the useragent and try to figure out which
+         // browser bridge we should use.
+         const char *useragent = MOON_NPN_UserAgent (instance);
+-
++	printf ("%s\n", useragent);
+ 	if (strstr (useragent, "Opera")) {
+ 		// opera based
+ 		TryLoadBridge ("opera");
+@@ -863,10 +864,13 @@
+ 		TryLoadBridge ("webkit");
+ 	}
+         else if (strstr (useragent, "Gecko")) {
+-		// gecko based, let's look for 'rv:1.8' vs 'rv:1.9'
++		// gecko based, let's look for 'rv:1.8' vs 'rv:1.9.2' vs 'rv:1.9'
+ 		if (strstr (useragent, "rv:1.8")) {
+ 			TryLoadBridge ("ff2");
+ 		}
++		else if (strstr (useragent, "rv:1.9.2")) {
++			TryLoadBridge ("ff36");
++		}
+ 		else if (strstr (useragent, "rv:1.9")) {
+ 			TryLoadBridge ("ff3");
+ 		}
+@@ -2389,3 +2393,21 @@
+ {
+ 	return g_slist_length (plugin_instances);
+ }
++
++gpointer
++PluginInstance::HtmlObjectAttachEvent (NPP npp, NPObject *npobj, const char *name, callback_dom_event cb, gpointer context)
++{
++	DomEventListener *listener = DomEventListener::Create (npp, this, name, cb, context, npobj);
++	listener->Attach ();
++	MOON_NPN_RetainObject (listener);
++	return listener;
++
++}
++
++void
++PluginInstance::HtmlObjectDetachEvent (NPP instance, const char *name, gpointer listener_ptr)
++{
++	DomEventListener *listener = (DomEventListener *) listener_ptr;
++	listener->Detach ();
++	MOON_NPN_ReleaseObject (listener);
++}
+Index: moonlight-2.1/plugin/plugin-domevents.cpp
+===================================================================
+--- /dev/null	1970-01-01 00:00:00.000000000 +0000
++++ moonlight-2.1/plugin/plugin-domevents.cpp	2010-02-17 12:56:14.000000000 +0000
+@@ -0,0 +1,297 @@
++/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
++/*
++ * ff36-dom.cpp: Firefox 3.6.x DOM wrapper
++ *
++ * Contact:
++ *   Moonlight List (moonlight-list at lists.ximian.com)
++ *
++ * Copyright 2010 Novell, Inc. (http://www.novell.com)
++ *
++ * See the LICENSE file included with the distribution for details.
++ *
++ */
++
++#include "plugin-domevents.h"
++
++#ifdef DEBUG
++#define d(x) x
++#else
++#define d(x)
++#endif
++
++#define STR_FROM_VARIANT(v) ((char *) NPVARIANT_TO_STRING (v).utf8characters)
++
++NPClass DomEventListener::DomEventClass = {
++	0,
++	DomEventListener::Allocate,
++	DomEventListener::_Deallocate, //Deallocate
++	NULL, //Invalidate
++	DomEventListener::_HasMethod, //HasMethod
++	DomEventListener::_Invoke, //Invoke
++	NULL, //DomEventListener::_InvokeDefault, //InvokeDefault
++	DomEventListener::_HasProperty, //hasProperty
++	DomEventListener::_GetProperty, //getProperty
++	NULL, //setProperty
++	NULL, //removeProperty
++	NULL, //enumerate
++	NULL, //construct
++};
++
++DomEventListener*
++DomEventListener::Create(NPP npp, PluginInstance *plugin, const char *name, callback_dom_event* cb, gpointer ctx, NPObject *npobj) {
++	DomEventListener *listener = reinterpret_cast<DomEventListener *> (MOON_NPN_CreateObject(npp, &DomEventClass));
++	listener->parent = plugin;
++	listener->callback = cb;
++	listener->context = ctx;
++	listener->target = npobj;
++	listener->name = name;
++	return listener;
++}
++
++void
++DomEventListener::Attach ()
++{
++	NPVariant args[3];
++	string_to_npvariant(name, &args[0]);
++	OBJECT_TO_NPVARIANT(this, args[1]);
++	BOOLEAN_TO_NPVARIANT(false, args[2]);
++
++	NPVariant result;
++	if (!MOON_NPN_Invoke(npp, target, NPID("addEventListener"), args, 3, &result))
++		d(printf ("Error attaching event\n"));
++}
++
++void
++DomEventListener::Detach ()
++{
++	NPVariant args[3];
++	string_to_npvariant(name, &args[0]);
++	OBJECT_TO_NPVARIANT(this, args[1]);
++	BOOLEAN_TO_NPVARIANT(true, args[2]);
++	NPVariant result;
++	if (!MOON_NPN_Invoke(npp, target, NPID("removeEventListener"), args, 3, &result))
++		d(printf ("Error detaching event\n"));
++
++	callback = NULL;
++	if (eventTarget)
++		MOON_NPN_ReleaseObject (eventTarget);
++	eventTarget = NULL;
++}
++
++
++NPObject*
++DomEventListener::Allocate(NPP npp, NPClass *klass) {
++	return new DomEventListener (npp);
++}
++
++void
++DomEventListener::_Deallocate(NPObject *obj) {
++	delete ((DomEventListener*)obj);
++}
++
++bool
++DomEventListener::_HasMethod(NPObject *obj, NPIdentifier name) {
++	return ((DomEventListener*)obj)->HasMethod (name);
++}
++
++bool
++DomEventListener::_Invoke(NPObject *obj, NPIdentifier name, const NPVariant *args, uint32_t argCount, NPVariant *result) {
++	return ((DomEventListener*)obj)->Invoke (name, args, argCount, result);
++}
++
++bool
++DomEventListener::_HasProperty(NPObject * obj, NPIdentifier name) {
++	return ((DomEventListener*)obj)->HasProperty (name);
++}
++
++bool
++DomEventListener::_GetProperty(NPObject *obj, NPIdentifier name, NPVariant *result) {
++	return ((DomEventListener*)obj)->GetProperty (name, result);
++}
++
++
++int
++DomEventListener::GetScreenX () {
++	NPVariant res;
++	MOON_NPN_GetProperty (npp, eventObj, NPID("screenX"), &res);
++	int x = NPVARIANT_TO_INT32 (res);
++	MOON_NPN_ReleaseVariantValue (&res);
++	return x;
++}
++
++int
++DomEventListener::GetScreenY () {
++	NPVariant res;
++	MOON_NPN_GetProperty (npp, eventObj, NPID("screenY"), &res);
++	int x = NPVARIANT_TO_INT32 (res);
++	MOON_NPN_ReleaseVariantValue (&res);
++	return x;
++}
++
++int
++DomEventListener::GetClientX () {
++	NPVariant res;
++	MOON_NPN_GetProperty (npp, eventObj, NPID("clientX"), &res);
++	int x = NPVARIANT_TO_INT32 (res);
++	MOON_NPN_ReleaseVariantValue (&res);
++	return x;
++}
++
++int
++DomEventListener::GetClientY () {
++	NPVariant res;
++	MOON_NPN_GetProperty (npp, eventObj, NPID("clientY"), &res);
++	int x = NPVARIANT_TO_INT32 (res);
++	MOON_NPN_ReleaseVariantValue (&res);
++	return x;
++}
++
++bool
++DomEventListener::GetAltKey () {
++	NPVariant res;
++	MOON_NPN_GetProperty (npp, eventObj, NPID("altKey"), &res);
++	bool x = NPVARIANT_TO_BOOLEAN (res);
++	MOON_NPN_ReleaseVariantValue (&res);
++	return x;
++}
++
++bool
++DomEventListener::GetCtrlKey () {
++	NPVariant res;
++	MOON_NPN_GetProperty (npp, eventObj, NPID("ctrlKey"), &res);
++	bool x = NPVARIANT_TO_BOOLEAN (res);
++	MOON_NPN_ReleaseVariantValue (&res);
++	return x;
++}
++
++bool
++DomEventListener::GetShiftKey () {
++	NPVariant res;
++	MOON_NPN_GetProperty (npp, eventObj, NPID("shiftKey"), &res);
++	bool x = NPVARIANT_TO_BOOLEAN (res);
++	MOON_NPN_ReleaseVariantValue (&res);
++	return x;
++}
++
++int
++DomEventListener::GetButton () {
++	NPVariant res;
++	MOON_NPN_GetProperty (npp, eventObj, NPID("button"), &res);
++	int x = NPVARIANT_TO_INT32 (res);
++	MOON_NPN_ReleaseVariantValue (&res);
++	return x;
++}
++
++int
++DomEventListener::GetKeyCode () {
++	NPVariant res;
++	MOON_NPN_GetProperty (npp, eventObj, NPID("keyCode"), &res);
++	int x = NPVARIANT_TO_INT32 (res);
++	MOON_NPN_ReleaseVariantValue (&res);
++	return x;
++}
++
++int
++DomEventListener::GetCharCode () {
++	NPVariant res;
++	MOON_NPN_GetProperty (npp, eventObj, NPID("charCode"), &res);
++	int x = NPVARIANT_TO_INT32 (res);
++	MOON_NPN_ReleaseVariantValue (&res);
++	return x;
++}
++
++int
++DomEventListener::GetType () {
++	NPVariant res;
++	MOON_NPN_GetProperty (npp, eventObj, NPID("type"), &res);
++
++	int x = Other;
++	char* type = STR_FROM_VARIANT (res);
++	if (!strncmp (type, "click", strlen("click")) ||
++	    !strncmp (type, "dblclick", strlen("dblclick")) ||
++	    !strncmp (type, "mouse", strlen("mouse")))
++		x = Mouse;
++	else if (!strncmp (type, "key", strlen("key")))
++		x = Key;
++	MOON_NPN_ReleaseVariantValue (&res);
++	return x;
++}
++
++bool
++DomEventListener::HasMethod (NPIdentifier name) {
++	if (name == NPID ("handleEvent"))
++		return true;
++	return false;
++}
++
++bool
++DomEventListener::HasProperty (NPIdentifier name) {
++	return false;
++}
++
++bool
++DomEventListener::GetProperty (NPIdentifier name, NPVariant *result) {
++	return false;
++}
++
++bool
++DomEventListener::Invoke (NPIdentifier name,
++			const NPVariant *args,
++			guint32 argCount,
++			NPVariant *result)
++{
++	if (name != NPID ("handleEvent"))
++		return false;
++
++	if (callback == NULL)
++		return true;
++
++	NPVariant res;
++
++	eventObj = NPVARIANT_TO_OBJECT(args[0]);
++	MOON_NPN_RetainObject (eventObj);
++
++	MOON_NPN_GetProperty (npp, eventObj, NPID("target"), &res);
++	eventTarget = NPVARIANT_TO_OBJECT (res);
++	MOON_NPN_RetainObject (eventTarget);
++	MOON_NPN_ReleaseVariantValue (&res);
++
++	int client_x, client_y, offset_x, offset_y, mouse_button, key_code, char_code;
++	gboolean alt_key, ctrl_key, shift_key;
++	client_x = client_y = offset_x = offset_y = mouse_button = 0;
++	alt_key = ctrl_key = shift_key = FALSE;
++	key_code = char_code = 0;
++
++	int type = GetType ();
++
++	if (type == Mouse) {
++		client_x = GetClientX ();
++		client_y = GetClientY ();
++		offset_x = GetScreenX ();
++		offset_y = GetScreenY ();
++		offset_x -= client_x;
++		offset_y -= client_y;
++		mouse_button = GetButton ();
++		alt_key = GetAltKey ();
++		ctrl_key = GetCtrlKey ();
++		shift_key = GetShiftKey ();
++	} else if (type == Key) {
++		key_code = GetKeyCode ();
++		char_code = GetCharCode ();
++		if (char_code == 0 && key_code != 0)
++			char_code = key_code;
++		alt_key = GetAltKey ();
++		ctrl_key = GetCtrlKey ();
++		shift_key = GetShiftKey ();
++	}
++
++	MOON_NPN_GetProperty (npp, eventObj, NPID("type"), &res);
++	char *t = STRDUP_FROM_VARIANT(res);
++	MOON_NPN_ReleaseVariantValue (&res);
++
++	callback (context, t, client_x, client_y, offset_x, offset_y,
++		alt_key, ctrl_key, shift_key, mouse_button, key_code, char_code, eventTarget);
++
++
++	return true;
++}
+Index: moonlight-2.1/plugin/plugin-class.cpp
+===================================================================
+--- moonlight-2.1.orig/plugin/plugin-class.cpp	2010-02-17 12:55:35.000000000 +0000
++++ moonlight-2.1/plugin/plugin-class.cpp	2010-02-17 12:56:14.000000000 +0000
+@@ -17,7 +17,6 @@
+ 
+ #include "plugin-class.h"
+ #include "plugin-accessibility.h"
+-#include "browser-bridge.h"
+ #include "plugin.h"
+ #include "deployment.h"
+ #include "bitmapimage.h"
+@@ -5196,28 +5195,16 @@
+ 	return ret;
+ }
+ 
+-const char *
+-html_get_element_text (PluginInstance *plugin, const char *element_id)
+-{
+-        if (!plugin->GetBridge())
+-                return NULL;
+-        return plugin->GetBridge()->HtmlElementGetText(plugin->GetInstance(), element_id);
+-}
+-
+ gpointer
+ html_object_attach_event (PluginInstance *plugin, NPObject *npobj, char *name, callback_dom_event *cb, gpointer context)
+ {
+-        if (!plugin->GetBridge())
+-                return NULL;
+-        return plugin->GetBridge()->HtmlObjectAttachEvent (plugin->GetInstance(), npobj, name, cb, context);
++	return plugin->HtmlObjectAttachEvent (plugin->GetInstance(), npobj, name, cb, context);
+ }
+ 
+ void
+ html_object_detach_event (PluginInstance *plugin, const char *name, gpointer listener_ptr)
+ {
+-        if (!plugin->GetBridge())
+-                return;
+-        plugin->GetBridge()->HtmlObjectDetachEvent (plugin->GetInstance(), name, listener_ptr);
++	return plugin->HtmlObjectDetachEvent (plugin->GetInstance(), name, listener_ptr);
+ }
+ 
+ struct release_data {
+Index: moonlight-2.1/plugin/firefox/ff36/ff36-bridge.cpp
+===================================================================
+--- /dev/null	1970-01-01 00:00:00.000000000 +0000
++++ moonlight-2.1/plugin/firefox/ff36/ff36-bridge.cpp	2010-02-17 12:56:14.000000000 +0000
+@@ -0,0 +1,25 @@
++/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
++/*
++ * ff36-bridge.cpp: Firefox 3.6.x bridge
++ *
++ * Contact:
++ *   Moonlight List (moonlight-list at lists.ximian.com)
++ *
++ * Copyright 2010 Novell, Inc. (http://www.novell.com)
++ *
++ * See the LICENSE file included with the distribution for details.
++ *
++ */
++
++#include "plugin.h"
++
++#include "ff36-bridge.h"
++
++FF36BrowserBridge::FF36BrowserBridge ()
++{
++}
++
++BrowserBridge* CreateBrowserBridge ()
++{
++	return new FF36BrowserBridge ();
++}
+Index: moonlight-2.1/plugin/firefox/ff36/ff36-http.cpp
+===================================================================
+--- /dev/null	1970-01-01 00:00:00.000000000 +0000
++++ moonlight-2.1/plugin/firefox/ff36/ff36-http.cpp	2010-02-17 12:56:14.000000000 +0000
+@@ -0,0 +1,30 @@
++/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
++/*
++ * ff36-http.cpp: Firefox 3.6.x bridge
++ *
++ * Contact:
++ *   Moonlight List (moonlight-list at lists.ximian.com)
++ *
++ * Copyright 2010 Novell, Inc. (http://www.novell.com)
++ *
++ * See the LICENSE file included with the distribution for details.
++ *
++ */
++
++// define this here so that protypes.h isn't included (and doesn't
++// muck with our npapi.h)
++#define NO_NSPR_10_SUPPORT
++
++#include "plugin.h"
++
++#include "ff36-bridge.h"
++
++#define CONCAT(x,y) x##y
++#define GECKO_SYM(x) CONCAT(FF36,x)
++#include "../browser-http.inc"
++
++DownloaderRequest*
++FF36BrowserBridge::CreateDownloaderRequest (const char *method, const char *uri, bool disable_cache)
++{
++	return new FF36DownloaderRequest (method, uri, disable_cache);
++}
+Index: moonlight-2.1/plugin/firefox/ff36/ff36-bridge.h
+===================================================================
+--- /dev/null	1970-01-01 00:00:00.000000000 +0000
++++ moonlight-2.1/plugin/firefox/ff36/ff36-bridge.h	2010-02-17 12:56:14.000000000 +0000
+@@ -0,0 +1,26 @@
++/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
++/*
++ * ff36-bridge.h: Firefox 3.6.x bridge
++ *
++ * Contact:
++ *   Moonlight List (moonlight-list at lists.ximian.com)
++ *
++ * Copyright 2010 Novell, Inc. (http://www.novell.com)
++ *
++ * See the LICENSE file included with the distribution for details.
++ *
++ */
++
++#ifndef FF3_BRIDGE
++#define FF3_BRIDGE
++
++#include "browser-bridge.h"
++
++class FF36BrowserBridge : public BrowserBridge {
++ public:
++	FF36BrowserBridge ();
++
++	virtual DownloaderRequest* CreateDownloaderRequest (const char *method, const char *uri, bool disable_cache);
++};
++
++#endif // FF3_BRIDGE
+Index: moonlight-2.1/plugin/firefox/ff36/Makefile.am
+===================================================================
+--- /dev/null	1970-01-01 00:00:00.000000000 +0000
++++ moonlight-2.1/plugin/firefox/ff36/Makefile.am	2010-02-17 12:56:14.000000000 +0000
+@@ -0,0 +1,29 @@
++
++INCLUDES = \
++	-I$(top_srcdir)/src \
++	-I$(top_srcdir)/src/asf \
++	-I$(top_srcdir)/src/pal \
++	-I$(top_srcdir)/plugin \
++	-I$(top_srcdir)/plugin/moz-sdk \
++	-I/usr/include/X11 \
++	$(FF36_CFLAGS) \
++	$(MOON_CFLAGS) \
++	-DWITH_LIBXUL_UNSTABLE \
++	-Wall
++
++pluginlibdir=$(pkglibdir)/plugin
++pluginlib_LTLIBRARIES = libmoonplugin-ff36bridge.la
++noinst_LTLIBRARIES = libmoonpluginxpi-ff36bridge.la
++
++
++libmoonplugin_ff36bridge_la_SOURCES=	ff36-bridge.cpp \
++					ff36-bridge.h \
++					ff36-http.cpp \
++					../ff-common.h
++
++libmoonplugin_ff36bridge_la_LDFLAGS=-module -avoid-version
++libmoonplugin_ff36bridge_la_LIBADD=$(FF36_LIBS) ../../libmoonplugin.la ../../../src/libmoon.la
++
++libmoonpluginxpi_ff36bridge_la_SOURCES = $(libmoonplugin_ff36bridge_la_SOURCES)
++libmoonpluginxpi_ff36bridge_la_LDFLAGS = $(libmoonplugin_ff36bridge_la_LDFLAGS) -rpath /nowhere
++libmoonpluginxpi_ff36bridge_la_LIBADD = $(FF36_LIBS) ../../libmoonpluginxpi.la
+Index: moonlight-2.1/plugin/firefox/Makefile.am
+===================================================================
+--- moonlight-2.1.orig/plugin/firefox/Makefile.am	2010-02-17 12:55:35.000000000 +0000
++++ moonlight-2.1/plugin/firefox/Makefile.am	2010-02-17 12:56:14.000000000 +0000
+@@ -5,5 +5,8 @@
+ if HAVE_GECKO_1_9
+ SUBDIRS += ff3
+ endif
++if HAVE_GECKO_1_9_2
++SUBDIRS += ff36
++endif
+ 
+ EXTRA_DIST = browser-http.inc ff-common.h
+Index: moonlight-2.1/plugin/firefox/ff2/ff2-dom.cpp
+===================================================================
+--- moonlight-2.1.orig/plugin/firefox/ff2/ff2-dom.cpp	2010-02-17 12:55:35.000000000 +0000
++++ /dev/null	1970-01-01 00:00:00.000000000 +0000
+@@ -1,327 +0,0 @@
+-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+-/*
+- * ff2-dom.cpp: Firefox 2.x DOM wrapper
+- *
+- * Contact:
+- *   Moonlight List (moonlight-list at lists.ximian.com)
+- *
+- * Copyright 2007 Novell, Inc. (http://www.novell.com)
+- *
+- * See the LICENSE file included with the distribution for details.
+- *
+- */
+-
+-#include "../ff-common.h"
+-#include "plugin.h"
+-
+-#include "ff2-bridge.h"
+-
+-// this is the only one that differs between ff2 and ff3
+-#include <dom/nsIDOMKeyEvent.h>
+-
+-class FF2DomEventWrapper : public nsIDOMEventListener {
+-
+-	NS_DECL_ISUPPORTS
+-	NS_DECL_NSIDOMEVENTLISTENER
+-
+- public:
+-
+-	FF2DomEventWrapper () {
+-		callback = NULL;
+-
+-		NS_INIT_ISUPPORTS ();
+-	}
+-
+-	callback_dom_event *callback;
+-	nsCOMPtr<nsIDOMEventTarget> target;
+-	gpointer context;
+-	NPP npp;
+-};
+-
+-NS_IMPL_ISUPPORTS1(FF2DomEventWrapper, nsIDOMEventListener)
+-
+-NS_IMETHODIMP
+-FF2DomEventWrapper::HandleEvent (nsIDOMEvent *aDOMEvent)
+-{
+-	int client_x, client_y, offset_x, offset_y, mouse_button, key_code, char_code;
+-	gboolean alt_key, ctrl_key, shift_key;
+-	nsString str_event;
+-
+-	if (callback == NULL)
+-		return NS_OK;
+-
+-	aDOMEvent->GetType (str_event);
+-
+-	client_x = client_y = offset_x = offset_y = mouse_button = 0;
+-	alt_key = ctrl_key = shift_key = FALSE;
+-	key_code = char_code = 0;
+-
+-	FFDomEvent *obj = (FFDomEvent *) MOON_NPN_CreateObject (npp, FFDomEventClass);
+-	obj->event = aDOMEvent;
+-
+-	nsCOMPtr<nsIDOMMouseEvent> mouse_event = do_QueryInterface (aDOMEvent);
+-	if (mouse_event != nsnull) {
+-		int screen_x, screen_y;
+-
+-		mouse_event->GetScreenX (&screen_x);
+-		mouse_event->GetScreenY (&screen_y);
+-
+-		mouse_event->GetClientX (&client_x);
+-		mouse_event->GetClientY (&client_y);
+-
+-		offset_x = screen_x - client_x;
+-		offset_y = screen_y - client_y;
+-
+-		mouse_event->GetAltKey (&alt_key);
+-		mouse_event->GetCtrlKey (&ctrl_key);
+-		mouse_event->GetShiftKey (&shift_key);
+-
+-		PRUint16 umouse_button;
+-		mouse_event->GetButton (&umouse_button);
+-		mouse_button = umouse_button;
+-	}
+-
+-	nsCOMPtr<nsIDOMKeyEvent> key_event = do_QueryInterface (aDOMEvent);
+-	if (key_event != nsnull) {
+-		PRUint32 ukey_code, uchar_code;
+-
+-		key_event->GetKeyCode (&ukey_code);
+-		key_event->GetCharCode (&uchar_code);
+-
+-		key_code = ukey_code;
+-		char_code = uchar_code;
+-
+-		if (char_code == 0 && key_code != 0)
+-			char_code = key_code;
+-
+-		key_event->GetAltKey (&alt_key);
+-		key_event->GetCtrlKey (&ctrl_key);
+-		key_event->GetShiftKey (&shift_key);
+-	}
+-
+-	callback (context, strdup (NS_ConvertUTF16toUTF8 (str_event).get ()), client_x, client_y, offset_x, offset_y,
+-			alt_key, ctrl_key, shift_key, mouse_button, key_code, char_code, obj);
+-
+-	return NS_OK;
+-}
+-
+-static nsCOMPtr<nsIDOMDocument>
+-ff2_get_dom_document (NPP npp)
+-{
+-	nsCOMPtr<nsIDOMWindow> dom_window;
+-	MOON_NPN_GetValue (npp, NPNVDOMWindow, NS_STATIC_CAST(nsIDOMWindow **, getter_AddRefs(dom_window)));
+-	if (!dom_window) {
+-		d(printf("No DOM window available\n"));
+-		return NULL;
+-	}
+-
+-	nsCOMPtr<nsIDOMDocument> dom_document;
+-	dom_window->GetDocument (getter_AddRefs (dom_document));
+-	if (dom_document == nsnull) {
+-		d(printf ("No DOM document available\n"));
+-		return NULL;
+-	}
+-
+-	return dom_document;
+-}
+-
+-FF2BrowserBridge::FF2BrowserBridge ()
+-{
+-	FFDomEventClass = new FFDomEventType ();
+-}
+-
+-const char*
+-FF2BrowserBridge::HtmlElementGetText (NPP npp, const char *element_id)
+-{
+-	nsresult rv = NS_OK;
+-
+-	nsCOMPtr<nsIDOMDocument> document;
+-	document = ff2_get_dom_document (npp);
+-	if (!document)
+-		return NULL;
+-
+-	nsString ns_id = NS_ConvertUTF8toUTF16 (element_id, strlen (element_id));
+-	nsCOMPtr<nsIDOMElement> element;
+-	rv = document->GetElementById (ns_id, getter_AddRefs (element));
+-	if (NS_FAILED (rv) || element == NULL)
+-		return NULL;
+-
+-	nsCOMPtr<nsIDOMDocument> owner;
+-	element->GetOwnerDocument (getter_AddRefs (owner));
+-	
+-	nsCOMPtr<nsIDOMDocumentRange> doc_range = do_QueryInterface (owner);
+-	if (!doc_range)
+-		return NULL;
+-
+-	nsCOMPtr<nsIDOMRange> range;
+-	doc_range->CreateRange (getter_AddRefs (range));
+-	if (!range)
+-		return NULL;
+-
+-	range->SelectNodeContents (element);
+-
+-	nsString text;
+-	range->ToString (text);
+-	return g_strdup (NS_ConvertUTF16toUTF8 (text).get ());
+-}
+-
+-gpointer
+-FF2BrowserBridge::HtmlObjectAttachEvent (NPP npp, NPObject *npobj, const char *name, callback_dom_event cb, gpointer context)
+-{
+-	nsresult rv;
+-	NPVariant npresult;
+-	NPIdentifier id_identifier = MOON_NPN_GetStringIdentifier ("id");
+-	nsCOMPtr<nsISupports> item;
+-
+-	MOON_NPN_GetProperty (npp, npobj, id_identifier, &npresult);
+-
+-	if (NPVARIANT_IS_STRING (npresult) && strlen (STR_FROM_VARIANT (npresult)) > 0) {
+-		NPString np_id = NPVARIANT_TO_STRING (npresult);
+-
+-		nsString ns_id = NS_ConvertUTF8toUTF16 (np_id.utf8characters, strlen (np_id.utf8characters));
+-		nsCOMPtr<nsIDOMDocument> dom_document = ff2_get_dom_document (npp);
+-		if (dom_document == nsnull) {
+-			// we can get a NULL value when we navigate away from a page
+-			return NULL;
+-		}
+-
+-		nsCOMPtr<nsIDOMElement> element;
+-		rv = dom_document->GetElementById (ns_id, getter_AddRefs (element));
+-		if (NS_FAILED (rv) || element == nsnull) {
+-			return NULL;
+-		}
+-
+-		item = element;
+-	} else {
+-		NPObject *window = NULL;
+-		MOON_NPN_GetValue (npp, NPNVWindowNPObject, &window);
+-
+-		if (window && npobj->_class == window->_class) {
+-			MOON_NPN_GetValue (npp, NPNVDOMWindow, NS_STATIC_CAST (nsISupports **, getter_AddRefs (item)));
+-		} else {
+-			NPVariant docresult;
+-			NPIdentifier document_identifier = MOON_NPN_GetStringIdentifier ("document");
+-
+-			MOON_NPN_GetProperty (npp, window, document_identifier, &docresult);
+-
+-			if (npobj == NPVARIANT_TO_OBJECT (docresult)) {
+-				item = ff2_get_dom_document (npp);
+-			} else {
+-				const char *temp_id = "__moonlight_temp_id";
+-				NPVariant npvalue;
+-
+-				string_to_npvariant (temp_id, &npvalue);
+-				MOON_NPN_SetProperty (npp, npobj, id_identifier, &npvalue);
+-				MOON_NPN_ReleaseVariantValue (&npvalue);
+-
+-				nsString ns_id = NS_ConvertUTF8toUTF16 (temp_id, strlen (temp_id));
+-				nsCOMPtr<nsIDOMDocument> dom_document = ff2_get_dom_document (npp);
+-				if (dom_document == nsnull) {
+-					// we can get a NULL value when we navigate away from a page
+-					return NULL;
+-				}
+-
+-				nsCOMPtr<nsIDOMElement> element;
+-				dom_document->GetElementById (ns_id, getter_AddRefs (element));
+-				if (element == nsnull) {
+-					d(printf ("Unable to find temp_id element\n"));
+-					return NULL;
+-				}
+-
+-				item = element;
+-
+-				// reset to it's original empty value
+-				MOON_NPN_SetProperty (npp, npobj, id_identifier, &npresult);
+-			}
+-		}
+-	}
+-
+-	nsCOMPtr<nsIDOMEventTarget> target = do_QueryInterface (item);
+-
+-	FF2DomEventWrapper *wrapper = new FF2DomEventWrapper ();
+-	wrapper->callback = cb;
+-	wrapper->target = target;
+-	wrapper->context = context;
+-	wrapper->npp = npp;
+-
+-	rv = target->AddEventListener (NS_ConvertUTF8toUTF16 (name, strlen (name)), wrapper, PR_TRUE);
+-
+-	return wrapper;
+-}
+-
+-void
+-FF2BrowserBridge::HtmlObjectDetachEvent (NPP npp, const char *name, gpointer listener_ptr)
+-{
+-	FF2DomEventWrapper *wrapper = (FF2DomEventWrapper *) listener_ptr;
+-
+-	wrapper->target->RemoveEventListener (NS_ConvertUTF8toUTF16 (name, strlen (name)), wrapper, PR_TRUE);
+-	wrapper->callback = NULL;
+-}
+-
+-static NPObject *
+-dom_event_allocate (NPP instance, NPClass *klass)
+-{
+-	return new FFDomEvent (instance);
+-}
+-
+-FFDomEventType::FFDomEventType ()
+-{
+-	allocate = dom_event_allocate;
+-	AddMapping (dom_event_mapping, G_N_ELEMENTS (dom_event_mapping));
+-}
+-
+-FFDomEventType *FFDomEventClass;
+-
+-
+-bool
+-FFDomEvent::GetProperty (int id, NPIdentifier name, NPVariant *result)
+-{
+-	NULL_TO_NPVARIANT (*result);
+-
+-#if ds(!)0
+-	NPUTF8 *strname = MOON_NPN_UTF8FromIdentifier (name);
+-	printf ("getting event property %s\n", strname);
+-	MOON_NPN_MemFree (strname);
+-#endif
+-
+-	switch (id) {
+-		case MoonId_Detail: {
+-			nsCOMPtr<nsIDOMUIEvent> uievent = do_QueryInterface (event);
+-			if (uievent) {
+-				int detail;
+-				uievent->GetDetail (&detail);
+-				INT32_TO_NPVARIANT (detail, *result);
+-			}
+-			return true;
+-		}
+-	}
+-
+-	return false;
+-}
+-
+-bool
+-FFDomEvent::Invoke (int id, NPIdentifier name,
+-			     const NPVariant *args, uint32_t argCount, NPVariant *result)
+-{
+-	NULL_TO_NPVARIANT (*result);
+-	ds(printf("FFDomEvent::Invoke\n"));
+-	switch (id) {
+-		case MoonId_StopPropagation: {
+-			if (event) {
+-				ds(printf("FFDomEvent::StopPropagation\n"));
+-				event->StopPropagation ();
+-			}
+-			return true;
+-		}
+-		case MoonId_PreventDefault: {
+-			if (event) {
+-				ds(printf("FFDomEvent::PreventDefault\n"));
+-				event->PreventDefault ();
+-			}
+-			return true;
+-		}
+-		default: {
+-			return MoonlightObject::Invoke (id, name, args, argCount, result);
+-		}
+-	}
+-}
+Index: moonlight-2.1/plugin/firefox/ff2/ff2-bridge.cpp
+===================================================================
+--- moonlight-2.1.orig/plugin/firefox/ff2/ff2-bridge.cpp	2010-02-17 12:55:35.000000000 +0000
++++ moonlight-2.1/plugin/firefox/ff2/ff2-bridge.cpp	2010-02-17 12:56:14.000000000 +0000
+@@ -15,6 +15,10 @@
+ 
+ #include "ff2-bridge.h"
+ 
++FF2BrowserBridge::FF2BrowserBridge ()
++{
++}
++
+ BrowserBridge* CreateBrowserBridge ()
+ {
+ 	return new FF2BrowserBridge ();
+Index: moonlight-2.1/plugin/firefox/ff2/Makefile.am
+===================================================================
+--- moonlight-2.1.orig/plugin/firefox/ff2/Makefile.am	2010-02-17 12:55:35.000000000 +0000
++++ moonlight-2.1/plugin/firefox/ff2/Makefile.am	2010-02-17 12:56:14.000000000 +0000
+@@ -15,7 +15,6 @@
+ 
+ libmoonplugin_ff2bridge_la_SOURCES=	ff2-bridge.cpp \
+ 					ff2-bridge.h \
+-					ff2-dom.cpp \
+ 					ff2-http.cpp \
+ 					../ff-common.h
+ 
+Index: moonlight-2.1/plugin/firefox/ff2/ff2-bridge.h
+===================================================================
+--- moonlight-2.1.orig/plugin/firefox/ff2/ff2-bridge.h	2010-02-17 12:55:35.000000000 +0000
++++ moonlight-2.1/plugin/firefox/ff2/ff2-bridge.h	2010-02-17 12:56:14.000000000 +0000
+@@ -21,10 +21,6 @@
+  public:
+ 	FF2BrowserBridge ();
+ 
+-	virtual const char *HtmlElementGetText (NPP npp, const char *element_id);
+-	virtual gpointer HtmlObjectAttachEvent (NPP npp, NPObject *npobj, const char *name, callback_dom_event cb, gpointer context);
+-	virtual void     HtmlObjectDetachEvent (NPP npp, const char *name, gpointer listener_ptr);
+-
+ 	virtual DownloaderRequest* CreateDownloaderRequest (const char *method, const char *uri, bool disable_cache);
+ };
+ 
+Index: moonlight-2.1/plugin/firefox/ff3/ff3-dom.cpp
+===================================================================
+--- moonlight-2.1.orig/plugin/firefox/ff3/ff3-dom.cpp	2010-02-17 12:55:35.000000000 +0000
++++ /dev/null	1970-01-01 00:00:00.000000000 +0000
+@@ -1,327 +0,0 @@
+-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+-/*
+- * ff3-dom.cpp: Firefox 3.x DOM wrapper
+- *
+- * Contact:
+- *   Moonlight List (moonlight-list at lists.ximian.com)
+- *
+- * Copyright 2007 Novell, Inc. (http://www.novell.com)
+- *
+- * See the LICENSE file included with the distribution for details.
+- *
+- */
+-
+-#include "../ff-common.h"
+-#include "plugin.h"
+-
+-#include "ff3-bridge.h"
+-
+-// this is the only one that differs between ff2 and ff3
+-#include <nsIDOMKeyEvent.h>
+-
+-class FF3DomEventWrapper : public nsIDOMEventListener {
+-
+-	NS_DECL_ISUPPORTS
+-	NS_DECL_NSIDOMEVENTLISTENER
+-
+- public:
+-
+-	FF3DomEventWrapper () {
+-		callback = NULL;
+-
+-		NS_INIT_ISUPPORTS ();
+-	}
+-
+-	callback_dom_event *callback;
+-	nsCOMPtr<nsIDOMEventTarget> target;
+-	gpointer context;
+-	NPP npp;
+-};
+-
+-NS_IMPL_ISUPPORTS1(FF3DomEventWrapper, nsIDOMEventListener)
+-
+-NS_IMETHODIMP
+-FF3DomEventWrapper::HandleEvent (nsIDOMEvent *aDOMEvent)
+-{
+-	int client_x, client_y, offset_x, offset_y, mouse_button, key_code, char_code;
+-	gboolean alt_key, ctrl_key, shift_key;
+-	nsString str_event;
+-
+-	if (callback == NULL)
+-		return NS_OK;
+-
+-	aDOMEvent->GetType (str_event);
+-
+-	client_x = client_y = offset_x = offset_y = mouse_button = 0;
+-	alt_key = ctrl_key = shift_key = FALSE;
+-	key_code = char_code = 0;
+-
+-	FFDomEvent *obj = (FFDomEvent *) MOON_NPN_CreateObject (npp, FFDomEventClass);
+-	obj->event = aDOMEvent;
+-
+-	nsCOMPtr<nsIDOMMouseEvent> mouse_event = do_QueryInterface (aDOMEvent);
+-	if (mouse_event != nsnull) {
+-		int screen_x, screen_y;
+-
+-		mouse_event->GetScreenX (&screen_x);
+-		mouse_event->GetScreenY (&screen_y);
+-
+-		mouse_event->GetClientX (&client_x);
+-		mouse_event->GetClientY (&client_y);
+-
+-		offset_x = screen_x - client_x;
+-		offset_y = screen_y - client_y;
+-
+-		mouse_event->GetAltKey (&alt_key);
+-		mouse_event->GetCtrlKey (&ctrl_key);
+-		mouse_event->GetShiftKey (&shift_key);
+-
+-		PRUint16 umouse_button;
+-		mouse_event->GetButton (&umouse_button);
+-		mouse_button = umouse_button;
+-	}
+-
+-	nsCOMPtr<nsIDOMKeyEvent> key_event = do_QueryInterface (aDOMEvent);
+-	if (key_event != nsnull) {
+-		PRUint32 ukey_code, uchar_code;
+-
+-		key_event->GetKeyCode (&ukey_code);
+-		key_event->GetCharCode (&uchar_code);
+-
+-		key_code = ukey_code;
+-		char_code = uchar_code;
+-
+-		if (char_code == 0 && key_code != 0)
+-			char_code = key_code;
+-
+-		key_event->GetAltKey (&alt_key);
+-		key_event->GetCtrlKey (&ctrl_key);
+-		key_event->GetShiftKey (&shift_key);
+-	}
+-
+-	callback (context, strdup (NS_ConvertUTF16toUTF8 (str_event).get ()), client_x, client_y, offset_x, offset_y,
+-			alt_key, ctrl_key, shift_key, mouse_button, key_code, char_code, obj);
+-
+-	return NS_OK;
+-}
+-
+-static nsCOMPtr<nsIDOMDocument>
+-ff3_get_dom_document (NPP npp)
+-{
+-	nsCOMPtr<nsIDOMWindow> dom_window;
+-	MOON_NPN_GetValue (npp, NPNVDOMWindow, static_cast<nsIDOMWindow **>(getter_AddRefs(dom_window)));
+-	if (!dom_window) {
+-		d (printf ("No DOM window available\n"));
+-		return NULL;
+-	}
+-
+-	nsCOMPtr<nsIDOMDocument> dom_document;
+-	dom_window->GetDocument (getter_AddRefs (dom_document));
+-	if (dom_document == nsnull) {
+-		d(printf ("No DOM document available\n"));
+-		return NULL;
+-	}
+-
+-	return dom_document;
+-}
+-
+-FF3BrowserBridge::FF3BrowserBridge ()
+-{
+-	FFDomEventClass = new FFDomEventType ();
+-}
+-
+-const char*
+-FF3BrowserBridge::HtmlElementGetText (NPP npp, const char *element_id)
+-{
+-	nsresult rv = NS_OK;
+-
+-	nsCOMPtr<nsIDOMDocument> document;
+-	document = ff3_get_dom_document (npp);
+-	if (!document)
+-		return NULL;
+-
+-	nsString ns_id = NS_ConvertUTF8toUTF16 (element_id, strlen (element_id));
+-	nsCOMPtr<nsIDOMElement> element;
+-	rv = document->GetElementById (ns_id, getter_AddRefs (element));
+-	if (NS_FAILED (rv) || element == NULL)
+-		return NULL;
+-
+-	nsCOMPtr<nsIDOMDocument> owner;
+-	element->GetOwnerDocument (getter_AddRefs (owner));
+-	
+-	nsCOMPtr<nsIDOMDocumentRange> doc_range = do_QueryInterface (owner);
+-	if (!doc_range)
+-		return NULL;
+-
+-	nsCOMPtr<nsIDOMRange> range;
+-	doc_range->CreateRange (getter_AddRefs (range));
+-	if (!range)
+-		return NULL;
+-
+-	range->SelectNodeContents (element);
+-
+-	nsString text;
+-	range->ToString (text);
+-	return g_strdup (NS_ConvertUTF16toUTF8 (text).get ());
+-}
+-
+-gpointer
+-FF3BrowserBridge::HtmlObjectAttachEvent (NPP npp, NPObject *npobj, const char *name, callback_dom_event cb, gpointer context)
+-{
+-	nsresult rv;
+-	NPVariant npresult;
+-	NPIdentifier id_identifier = MOON_NPN_GetStringIdentifier ("id");
+-	nsCOMPtr<nsISupports> item;
+-
+-	MOON_NPN_GetProperty (npp, npobj, id_identifier, &npresult);
+-
+-	if (NPVARIANT_IS_STRING (npresult) && strlen (STR_FROM_VARIANT (npresult)) > 0) {
+-		NPString np_id = NPVARIANT_TO_STRING (npresult);
+-
+-		nsString ns_id = NS_ConvertUTF8toUTF16 (np_id.utf8characters, strlen (np_id.utf8characters));
+-		nsCOMPtr<nsIDOMDocument> dom_document = ff3_get_dom_document (npp);
+-		if (dom_document == nsnull) {
+-			// we can get a NULL value when we navigate away from a page
+-			return NULL;
+-		}
+-
+-		nsCOMPtr<nsIDOMElement> element;
+-		rv = dom_document->GetElementById (ns_id, getter_AddRefs (element));
+-		if (NS_FAILED (rv) || element == nsnull) {
+-			return NULL;
+-		}
+-
+-		item = element;
+-	} else {
+-		NPObject *window = NULL;
+-		MOON_NPN_GetValue (npp, NPNVWindowNPObject, &window);
+-
+-		if (window && npobj->_class == window->_class) {
+-			MOON_NPN_GetValue (npp, NPNVDOMWindow, static_cast<nsISupports **>(getter_AddRefs (item)));
+-		} else {
+-			NPVariant docresult;
+-			NPIdentifier document_identifier = MOON_NPN_GetStringIdentifier ("document");
+-
+-			MOON_NPN_GetProperty (npp, window, document_identifier, &docresult);
+-
+-			if (npobj == NPVARIANT_TO_OBJECT (docresult)) {
+-				item = ff3_get_dom_document (npp);
+-			} else {
+-				const char *temp_id = "__moonlight_temp_id";
+-				NPVariant npvalue;
+-
+-				string_to_npvariant (temp_id, &npvalue);
+-				MOON_NPN_SetProperty (npp, npobj, id_identifier, &npvalue);
+-				MOON_NPN_ReleaseVariantValue (&npvalue);
+-
+-				nsString ns_id = NS_ConvertUTF8toUTF16 (temp_id, strlen (temp_id));
+-				nsCOMPtr<nsIDOMDocument> dom_document = ff3_get_dom_document (npp);
+-				if (dom_document == nsnull) {
+-					// we can get a NULL value when we navigate away from a page
+-					return NULL;
+-				}
+-
+-				nsCOMPtr<nsIDOMElement> element;
+-				dom_document->GetElementById (ns_id, getter_AddRefs (element));
+-				if (element == nsnull) {
+-					d(printf ("Unable to find temp_id element\n"));
+-					return NULL;
+-				}
+-
+-				item = element;
+-
+-				// reset to it's original empty value
+-				MOON_NPN_SetProperty (npp, npobj, id_identifier, &npresult);
+-			}
+-		}
+-	}
+-
+-	nsCOMPtr<nsIDOMEventTarget> target = do_QueryInterface (item);
+-
+-	FF3DomEventWrapper *wrapper = new FF3DomEventWrapper ();
+-	wrapper->callback = cb;
+-	wrapper->target = target;
+-	wrapper->context = context;
+-	wrapper->npp = npp;
+-
+-	rv = target->AddEventListener (NS_ConvertUTF8toUTF16 (name, strlen (name)), wrapper, PR_TRUE);
+-
+-	return wrapper;
+-}
+-
+-void
+-FF3BrowserBridge::HtmlObjectDetachEvent (NPP instance, const char *name, gpointer listener_ptr)
+-{
+-	FF3DomEventWrapper *wrapper = (FF3DomEventWrapper *) listener_ptr;
+-
+-	wrapper->target->RemoveEventListener (NS_ConvertUTF8toUTF16 (name, strlen (name)), wrapper, PR_TRUE);
+-	wrapper->callback = NULL;
+-}
+-
+-static NPObject *
+-dom_event_allocate (NPP instance, NPClass *klass)
+-{
+-	return new FFDomEvent (instance);
+-}
+-
+-FFDomEventType::FFDomEventType ()
+-{
+-	allocate = dom_event_allocate;
+-	AddMapping (dom_event_mapping, G_N_ELEMENTS (dom_event_mapping));
+-}
+-
+-FFDomEventType *FFDomEventClass;
+-
+-
+-bool
+-FFDomEvent::GetProperty (int id, NPIdentifier name, NPVariant *result)
+-{
+-	NULL_TO_NPVARIANT (*result);
+-
+-#if ds(!)0
+-	NPUTF8 *strname = MOON_NPN_UTF8FromIdentifier (name);
+-	printf ("getting event property %s\n", strname);
+-	MOON_NPN_MemFree (strname);
+-#endif
+-
+-	switch (id) {
+-		case MoonId_Detail: {
+-			nsCOMPtr<nsIDOMUIEvent> uievent = do_QueryInterface (event);
+-			if (uievent) {
+-				int detail;
+-				uievent->GetDetail (&detail);
+-				INT32_TO_NPVARIANT (detail, *result);
+-			}
+-			return true;
+-		}
+-	}
+-
+-	return false;
+-}
+-
+-bool
+-FFDomEvent::Invoke (int id, NPIdentifier name,
+-			     const NPVariant *args, uint32_t argCount, NPVariant *result)
+-{
+-	NULL_TO_NPVARIANT (*result);
+-	ds(printf("FFDomEvent::Invoke\n"));
+-	switch (id) {
+-		case MoonId_StopPropagation: {
+-			if (event) {
+-				ds(printf("FFDomEvent::StopPropagation\n"));
+-				event->StopPropagation ();
+-			}
+-			return true;
+-		}
+-		case MoonId_PreventDefault: {
+-			if (event) {
+-				ds(printf("FFDomEvent::PreventDefault\n"));
+-				event->PreventDefault ();
+-			}
+-			return true;
+-		}
+-		default: {
+-			return MoonlightObject::Invoke (id, name, args, argCount, result);
+-		}
+-	}
+-}
+Index: moonlight-2.1/plugin/firefox/ff3/Makefile.am
+===================================================================
+--- moonlight-2.1.orig/plugin/firefox/ff3/Makefile.am	2010-02-17 12:55:35.000000000 +0000
++++ moonlight-2.1/plugin/firefox/ff3/Makefile.am	2010-02-17 12:56:14.000000000 +0000
+@@ -17,7 +17,6 @@
+ 
+ libmoonplugin_ff3bridge_la_SOURCES=	ff3-bridge.cpp \
+ 					ff3-bridge.h \
+-					ff3-dom.cpp \
+ 					ff3-http.cpp \
+ 					../ff-common.h
+ 
+Index: moonlight-2.1/plugin/firefox/ff3/ff3-bridge.cpp
+===================================================================
+--- moonlight-2.1.orig/plugin/firefox/ff3/ff3-bridge.cpp	2010-02-17 12:55:35.000000000 +0000
++++ moonlight-2.1/plugin/firefox/ff3/ff3-bridge.cpp	2010-02-17 12:56:14.000000000 +0000
+@@ -15,6 +15,10 @@
+ 
+ #include "ff3-bridge.h"
+ 
++FF3BrowserBridge::FF3BrowserBridge ()
++{
++}
++
+ BrowserBridge* CreateBrowserBridge ()
+ {
+ 	return new FF3BrowserBridge ();
+Index: moonlight-2.1/plugin/firefox/ff3/ff3-bridge.h
+===================================================================
+--- moonlight-2.1.orig/plugin/firefox/ff3/ff3-bridge.h	2010-02-17 12:55:35.000000000 +0000
++++ moonlight-2.1/plugin/firefox/ff3/ff3-bridge.h	2010-02-17 12:56:14.000000000 +0000
+@@ -20,10 +20,6 @@
+  public:
+ 	FF3BrowserBridge ();
+ 
+-	virtual const char *HtmlElementGetText (NPP npp, const char *element_id);
+-	virtual gpointer HtmlObjectAttachEvent (NPP npp, NPObject *npobj, const char *name, callback_dom_event cb, gpointer context);
+-	virtual void     HtmlObjectDetachEvent (NPP npp, const char *name, gpointer listener_ptr);
+-
+ 	virtual DownloaderRequest* CreateDownloaderRequest (const char *method, const char *uri, bool disable_cache);
+ };
+ 
+Index: moonlight-2.1/plugin/plugin.h
+===================================================================
+--- moonlight-2.1.orig/plugin/plugin.h	2010-02-17 12:55:35.000000000 +0000
++++ moonlight-2.1/plugin/plugin.h	2010-02-17 12:56:14.000000000 +0000
+@@ -25,6 +25,10 @@
+ #endif
+ 
+ char *NPN_strdup (const char *val);
++typedef void callback_dom_event (gpointer context, char *name, int client_x, int client_y, int offset_x, int offset_y, gboolean alt_key,
++				 gboolean ctrl_key, gboolean shift_key, int mouse_button,
++				 int key_code, int char_code,
++				 gpointer domEvent);
+ 
+ class PluginInstance
+ {
+@@ -146,7 +150,10 @@
+ 
+ 	gpointer ManagedCreateXamlLoaderForFile (XamlLoader* loader, const char *resourceBase, const char *file);
+ 	gpointer ManagedCreateXamlLoaderForString (XamlLoader* loader, const char *resourceBase, const char *str);
+-	
++
++	gpointer HtmlObjectAttachEvent (NPP npp, NPObject *npobj, const char *name, callback_dom_event cb, gpointer context);
++	void HtmlObjectDetachEvent (NPP instance, const char *name, gpointer listener_ptr);
++
+  private:
+ #if DEBUG
+ 	List *moon_sources;
+Index: moonlight-2.1/plugin/plugin-domevents.h
+===================================================================
+--- /dev/null	1970-01-01 00:00:00.000000000 +0000
++++ moonlight-2.1/plugin/plugin-domevents.h	2010-02-17 12:56:14.000000000 +0000
+@@ -0,0 +1,87 @@
++/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
++/*
++ * ff36-dom.cpp: Firefox 3.6.x DOM wrapper
++ *
++ * Contact:
++ *   Moonlight List (moonlight-list at lists.ximian.com)
++ *
++ * Copyright 2010 Novell, Inc. (http://www.novell.com)
++ *
++ * See the LICENSE file included with the distribution for details.
++ *
++ */
++
++#ifndef __DOM_EVENTS_H__
++#define __DOM_EVENTS_H__
++
++#include "plugin-class.h"
++
++typedef void callback_dom_event (gpointer context, char *name, int client_x, int client_y, int offset_x, int offset_y, gboolean alt_key,
++				 gboolean ctrl_key, gboolean shift_key, int mouse_button,
++				 int key_code, int char_code,
++				 gpointer domEvent);
++
++
++enum EventType {
++	Mouse,
++	Key,
++	Other,
++};
++
++class DomEventListener : public NPObject {
++
++ public:
++	static NPClass DomEventClass;
++	static DomEventListener *Create(NPP npp, PluginInstance *plugin, const char *name, callback_dom_event* cb, gpointer ctx, NPObject *npobj);
++	static NPObject *Allocate(NPP npp, NPClass *klass);
++	static void _Deallocate(NPObject *obj);
++	static bool _HasMethod(NPObject *obj, NPIdentifier name);
++	static bool _Invoke(NPObject *obj, NPIdentifier name, const NPVariant *args, uint32_t argCount, NPVariant *result);
++	static bool _HasProperty(NPObject * obj, NPIdentifier name);
++	static bool _GetProperty(NPObject *obj, NPIdentifier name, NPVariant *result);
++
++	DomEventListener () : callback (0) {}
++
++	DomEventListener (NPP instance) : npp (instance),
++		parent(0), callback(0), context(0),
++		target(0), eventObj(0), name(0) {}
++
++
++	~DomEventListener () {}
++
++	void Attach ();
++	void Detach ();
++
++	bool HasMethod (NPIdentifier unmapped);
++	bool Invoke (NPIdentifier name,
++		const NPVariant *args,
++		guint32 argCount,
++		NPVariant *result);
++	bool HasProperty (NPIdentifier name);
++	bool GetProperty (NPIdentifier name, NPVariant *result);
++
++
++	int GetScreenX ();
++	int GetScreenY ();
++	int GetClientX ();
++	int GetClientY ();
++	bool GetAltKey ();
++	bool GetCtrlKey ();
++	bool GetShiftKey ();
++	int GetButton ();
++	int GetKeyCode ();
++	int GetCharCode ();
++	int GetType ();
++	NPObject* GetTarget ();
++
++	NPP npp;
++	PluginInstance *parent;
++	callback_dom_event *callback;
++	gpointer context;
++	NPObject *target;
++	NPObject *eventObj;
++	NPObject *eventTarget;
++	const char *name;
++};
++
++#endif
+\ No newline at end of file
+Index: moonlight-2.1/plugin/plugin-class.h
+===================================================================
+--- moonlight-2.1.orig/plugin/plugin-class.h	2010-02-17 12:55:35.000000000 +0000
++++ moonlight-2.1/plugin/plugin-class.h	2010-02-17 12:56:14.000000000 +0000
+@@ -1205,15 +1205,6 @@
+ 
+ /*** HtmlObject ***************************************************/
+ 
+-// int clientX, int clientY,
+-
+-typedef void callback_dom_event (gpointer context, char *name, int client_x, int client_y, int offset_x, int offset_y, gboolean alt_key,
+-				 gboolean ctrl_key, gboolean shift_key, int mouse_button,
+-				 int key_code, int char_code,
+-				 gpointer domEvent);
+-
+-const char *html_get_element_text (PluginInstance *plugin, const char *element_id);
+-
+ // These are meant to be called by System.Silverlight.dll
+ /* @GeneratePInvoke */
+ bool html_object_has_property (PluginInstance *plugin, NPObject *npobj, char *name);
+Index: moonlight-2.1/plugin/browser-bridge.h
+===================================================================
+--- moonlight-2.1.orig/plugin/browser-bridge.h	2010-02-17 12:55:35.000000000 +0000
++++ moonlight-2.1/plugin/browser-bridge.h	2010-02-17 12:56:14.000000000 +0000
+@@ -28,11 +28,6 @@
+ 
+ class BrowserBridge {
+  public:
+-	// HtmlObject
+-	virtual const char *HtmlElementGetText (NPP npp, const char *element_id) = 0;
+-	virtual gpointer HtmlObjectAttachEvent (NPP npp, NPObject *npobj, const char *name, callback_dom_event cb, gpointer context) = 0;
+-	virtual void     HtmlObjectDetachEvent (NPP npp, const char *name, gpointer listener_ptr) = 0;
+-
+ 	virtual DownloaderRequest* CreateDownloaderRequest (const char *method, const char *uri, bool disable_cache) = 0;
+ };
+ 
+Index: moonlight-2.1/plugin/Makefile.am
+===================================================================
+--- moonlight-2.1.orig/plugin/Makefile.am	2010-02-17 12:55:35.000000000 +0000
++++ moonlight-2.1/plugin/Makefile.am	2010-02-17 12:56:14.000000000 +0000
+@@ -51,6 +51,8 @@
+ 	plugin.h			\
+ 	plugin-accessibility.cpp	\
+ 	plugin-accessibility.h		\
++	plugin-domevents.cpp		\
++	plugin-domevents.h		\
+ 	plugin-downloader.cpp		\
+ 	plugin-downloader.h		\
+ 	plugin-entry.cpp 		\
+Index: moonlight-2.1/configure.ac
+===================================================================
+--- moonlight-2.1.orig/configure.ac	2010-02-17 12:55:35.000000000 +0000
++++ moonlight-2.1/configure.ac	2010-02-17 12:56:14.000000000 +0000
+@@ -134,7 +134,9 @@
+ 
+ DOCDIR=$(pkg-config --variable=sourcesdir monodoc)
+ 
+-if test x$with_ff3 = xyes; then
++if test x$with_ff36 = xyes; then
++   MOZILLA_CFLAGS=$FF36_CFLAGS
++elif test x$with_ff3 = xyes; then
+    MOZILLA_CFLAGS=$FF3_CFLAGS
+ else
+    MOZILLA_CFLAGS=$FF2_CFLAGS
+@@ -211,6 +213,7 @@
+ plugin/firefox/Makefile
+ plugin/firefox/ff2/Makefile
+ plugin/firefox/ff3/Makefile
++plugin/firefox/ff36/Makefile
+ plugin/install/Makefile
+ plugin/install/install.rdf
+ plugin/test/Makefile
+@@ -282,6 +285,7 @@
+           Plugin Installer (.xpi): $user_plugin
+           Gecko 1.8 (Firefox 2): $with_ff2 $ff2_reason
+           Gecko 1.9 (Firefox 3): $with_ff3 $ff3_reason
++          Gecko 1.9.2 (Firefox 3.6): $with_ff36 $ff36_reason
+ EOF
+ fi
+ 
+--- moon/plugin/install/Makefile.am	2010/02/10 03:59:19	151183
++++ moon/plugin/install/Makefile.am	2010/02/11 21:42:20	151553
+@@ -77,6 +77,10 @@
+ # Rename the bridges to the original names
+ 	cp -L ../firefox/ff2/.libs/libmoonpluginxpi-ff2bridge.so .xpinstall/plugins/moonlight/libmoonplugin-ff2bridge.so
+ endif HAVE_GECKO_1_8
++if HAVE_GECKO_1_9_2
++# Rename the bridges to the original names
++	cp -L ../firefox/ff36/.libs/libmoonpluginxpi-ff36bridge.so .xpinstall/plugins/moonlight/libmoonplugin-ff36bridge.so
++endif HAVE_GECKO_1_9_2
+ if HAVE_GECKO_1_9
+ # Rename the bridges to the original names
+ 	cp -L ../firefox/ff3/.libs/libmoonpluginxpi-ff3bridge.so .xpinstall/plugins/moonlight/libmoonplugin-ff3bridge.so
diff --git a/debian/patches/series b/debian/patches/series
index b44dac6..c442146 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1,2 +1,2 @@
 use_bundled_mono_runtime_for_smcs.patch
-moon_backport_support_for_firefox_3.6_r150505.patch
+moon_backport_support_for_firefox_3.6_r150505_r151553.patch
diff --git a/debian/rules b/debian/rules
index 1c67868..e915e95 100644
--- a/debian/rules
+++ b/debian/rules
@@ -35,6 +35,7 @@ clean:
 	rm -f mono-2-6/mcs/class/System.Web.Mvc/System.Web.Mvc/Resources/MvcResources.resources
 	rm -f mono-2-6/mcs/class/Managed.Windows.Forms/resources/keyboards.resources
 	rm -f mono-2-6/mcs/class/Mono.Data.Sqlite/resources/SR.resources
+	rm -f mono-basic-2-6/vbnc/vbnc/vbnc.vbnc.rsp
 	rm -f mono-2-6/mcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap.Utilclass/ResultCodeMessages.resources
 	rm -f mono-2-6/mcs/class/System.Web/resources/TranslationResources.resources
 	rm -f mono-2-6/mcs/class/Commons.Xml.Relaxng/Commons.Xml.Relaxng.Rnc/RncParser.cs
@@ -104,7 +105,7 @@ moonlight-build-stamp: moonlight-configure-stamp
 	touch moonlight-build-stamp	
 
 moonlight-configure-stamp: mono-install-stamp
-	PKG_CONFIG_PATH=$(MONO_SHARED_DIR)/monoprefix/lib/pkgconfig ./configure --with-mcspath=$(MONO_SHARED_DIR)/mono-2-6/mcs --with-mono-basic-path=$(MONO_SHARED_DIR)/mono-basic-2-6 --with-cairo=system --prefix=/usr
+	autoreconf && PKG_CONFIG_PATH=$(MONO_SHARED_DIR)/monoprefix/lib/pkgconfig ./configure --with-mcspath=$(MONO_SHARED_DIR)/mono-2-6/mcs --with-mono-basic-path=$(MONO_SHARED_DIR)/mono-basic-2-6 --with-cairo=system --prefix=/usr
 	touch moonlight-configure-stamp
 
 get-orig-source:

-- 
moon



More information about the Pkg-mono-svn-commits mailing list