[Xfce4-commits] <parole:master> Added browser plugin gecko compatible, this plugin handles various media formats and play them embedded in mozilla, but still no play control in this new plugin and mime enable/disable to go with the final Parole release.
Ali Abdallah
noreply at xfce.org
Sun Nov 15 16:54:01 CET 2009
Updating branch refs/heads/master
to 808acb84055afbb9062ffb9fea74fd2445b64e02 (commit)
from eeab30d63eca6e1bd128154b675f7b98801e7144 (commit)
commit 808acb84055afbb9062ffb9fea74fd2445b64e02
Author: Ali Abdallah <ali at ali-xfce.org>
Date: Sun Nov 15 16:19:38 2009 +0100
Added browser plugin gecko compatible, this plugin handles
various media formats and play them embedded in mozilla,
but still no play control in this new plugin and mime
enable/disable to go with the final Parole release.
Makefile.am | 12 +-
browser-plugin/Makefile.am | 45 ++
browser-plugin/media-plugin/Makefile.am | 23 +
browser-plugin/media-plugin/main.c | 116 +++
browser-plugin/media-plugin/parole-gst.c | 408 ++++++++++
.../media-plugin/parole-gst.h | 51 +-
browser-plugin/npapi.h | 807 ++++++++++++++++++++
browser-plugin/npruntime.h | 351 +++++++++
browser-plugin/npupp.h | 719 +++++++++++++++++
browser-plugin/parole-plugin.cpp | 146 ++++
browser-plugin/parole-plugin.h | 67 ++
browser-plugin/plugin.cpp | 300 ++++++++
browser-plugin/plugin.symbols | 4 +
configure.ac.in | 4 +-
data/interfaces/Makefile.am | 6 +-
data/interfaces/browser-plugin-control.ui | 4 +
parole/Makefile.am | 2 +
parole/main.c | 2 +
parole/parole-gst.c | 1 -
parole/parole-gst.h | 1 +
20 files changed, 3034 insertions(+), 35 deletions(-)
diff --git a/Makefile.am b/Makefile.am
index b699693..56530ba 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -2,12 +2,12 @@ if ENABLE_BROWSER_PLUGIN
browser_plugin_dir = browser-plugin
endif
-SUBDIRS = \
- data \
- parole \
- plugins \
- browser-plugin \
- docs \
+SUBDIRS = \
+ data \
+ parole \
+ plugins \
+ $(browser_plugin_dir) \
+ docs \
po
diff --git a/browser-plugin/Makefile.am b/browser-plugin/Makefile.am
new file mode 100644
index 0000000..d058c90
--- /dev/null
+++ b/browser-plugin/Makefile.am
@@ -0,0 +1,45 @@
+SUBDIRS = \
+ media-plugin
+
+INCLUDES = \
+ -fPIC \
+ -I$(top_builddir) \
+ -I$(top_srcdir) \
+ -DPACKAGE_LOCALE_DIR=\"$(localedir)\" \
+ -DG_LOG_DOMAIN=\"parole-browser-plugin\" \
+ -DLIBEXECDIR="\"$(libexecdir)\"" \
+ $(GTK_CFLAGS)
+
+plugindir = $(BROWSER_PLUGIN_DIR)
+
+plugin_LTLIBRARIES = \
+ parole-player.la
+
+PLUGIN_FILES = \
+ npupp.h \
+ npapi.h \
+ npruntime.h
+
+parole_player_la_SOURCES = \
+ $(PLUGIN_FILES) \
+ plugin.cpp \
+ parole-plugin.cpp \
+ parole-plugin.h
+
+
+parole_player_la_CPPFLAGS = \
+ -DXP_UNIX \
+ -DMOZ_X11
+ -I$(top_srcdir)/browser-plugin
+
+parole_player_la_LIBADD = \
+ $(GTK_LIBS)
+
+parole_player_la_LDFLAGS = \
+ -avoid-version \
+ -export-symbols $(srcdir)/plugin.symbols \
+ -module
+
+EXTRA_DIST = \
+ $(PLUGIN_FILES)
+ plugin.symbols
\ No newline at end of file
diff --git a/browser-plugin/media-plugin/Makefile.am b/browser-plugin/media-plugin/Makefile.am
new file mode 100644
index 0000000..1efafbd
--- /dev/null
+++ b/browser-plugin/media-plugin/Makefile.am
@@ -0,0 +1,23 @@
+libexec_PROGRAMS = parole-media-plugin
+
+parole_media_plugin_SOURCES = \
+ main.c \
+ parole-gst.c \
+ parole-gst.h
+
+parole_media_plugin_CFLAGS = \
+ -I$(top_srcdir) \
+ -I$(top_srcdir)/data \
+ -I$(top_srcdir)/data/mime \
+ -DLOCALEDIR=\"$(localedir)\" \
+ -DG_LOG_DOMAIN=\"parole-media-plugin\" \
+ $(GTHREAD_CFLAGS) \
+ $(GTK_CFLAGS) \
+ $(GST_VIDEO_CFLAGS) \
+ $(GST_INTERFACES_CFLAGS)
+
+parole_media_plugin_LDADD = \
+ $(GTHREAD_LIBS) \
+ $(GTK_LIBS) \
+ $(GST_VIDEO_LIBS) \
+ $(GST_INTERFACES_LIBS)
\ No newline at end of file
diff --git a/browser-plugin/media-plugin/main.c b/browser-plugin/media-plugin/main.c
new file mode 100644
index 0000000..f25868f
--- /dev/null
+++ b/browser-plugin/media-plugin/main.c
@@ -0,0 +1,116 @@
+/*
+ * * Copyright (C) 2008-2009 Ali <aliov at xfce.org>
+ *
+ * Licensed under the GNU General Public License Version 2
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * 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 Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <unistd.h>
+#include <signal.h>
+
+#include <gtk/gtk.h>
+#include <glib/gi18n.h>
+
+#include <gst/gst.h>
+
+#include "parole-gst.h"
+
+static gboolean
+parole_terminate (GtkWidget *widget, GdkEvent *ev, ParoleGst *gst)
+{
+ parole_gst_terminate (gst);
+ g_debug ("Terminating");
+ return TRUE;
+}
+
+int main (int argc, char **argv)
+{
+ GdkNativeWindow socket_id = 0;
+ gchar *url = NULL;
+ GOptionContext *ctx;
+ GOptionGroup *gst_option_group;
+ GError *error = NULL;
+
+ GOptionEntry option_entries[] =
+ {
+ { "socket-id", 's', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_INT, &socket_id, N_("socket"), N_("SOCKET ID") },
+ { "url", '\0', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_STRING, &url, N_("url to play"), N_("URL") },
+ { NULL, },
+ };
+
+ if ( !g_thread_supported () )
+ g_thread_init (NULL);
+
+ bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
+
+#ifdef HAVE_BIND_TEXTDOMAIN_CODESET
+ bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
+#endif
+
+ textdomain (GETTEXT_PACKAGE);
+
+ gtk_init (&argc, &argv);
+
+ ctx = g_option_context_new (NULL);
+
+ gst_option_group = gst_init_get_option_group ();
+ g_option_context_add_main_entries (ctx, option_entries, GETTEXT_PACKAGE);
+ g_option_context_set_translation_domain (ctx, GETTEXT_PACKAGE);
+ g_option_context_add_group (ctx, gst_option_group);
+
+ g_option_context_add_group (ctx, gtk_get_option_group (TRUE));
+
+ if ( !g_option_context_parse (ctx, &argc, &argv, &error) )
+ {
+ g_print ("%s\n", error->message);
+ g_print ("Type %s --help to list all available command line options", argv[0]);
+ g_error_free (error);
+ g_option_context_free (ctx);
+ return EXIT_FAILURE;
+ }
+ g_option_context_free (ctx);
+
+ {
+ GtkWidget *plug;
+ GtkWidget *gst;
+ gulong sig_id;
+ plug = gtk_plug_new (socket_id);
+
+ gst = parole_gst_new ();
+
+ gtk_container_add (GTK_CONTAINER (plug), gst);
+
+ sig_id = g_signal_connect (plug, "delete-event",
+ G_CALLBACK (parole_terminate), gst);
+ parole_gst_play_url (PAROLE_GST (gst), url);
+ gtk_widget_show_all (plug);
+ gtk_main ();
+ g_signal_handler_disconnect (plug, sig_id);
+ gtk_widget_destroy (plug);
+ }
+
+ gst_deinit ();
+
+ return EXIT_SUCCESS;
+}
diff --git a/browser-plugin/media-plugin/parole-gst.c b/browser-plugin/media-plugin/parole-gst.c
new file mode 100644
index 0000000..459d6ff
--- /dev/null
+++ b/browser-plugin/media-plugin/parole-gst.c
@@ -0,0 +1,408 @@
+/*
+ * * Copyright (C) 2009 Ali <aliov at xfce.org>
+ *
+ * Licensed under the GNU General Public License Version 2
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * 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 Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <gst/interfaces/xoverlay.h>
+#include <gst/interfaces/navigation.h>
+
+#include <gst/video/video.h>
+
+#include <gdk/gdkx.h>
+
+#include "parole-gst.h"
+
+static void parole_gst_finalize (GObject *object);
+
+#define PAROLE_GST_GET_PRIVATE(o) \
+(G_TYPE_INSTANCE_GET_PRIVATE ((o), PAROLE_TYPE_GST, ParoleGstPrivate))
+
+struct ParoleGstPrivate
+{
+ GstElement *playbin;
+ GstElement *video_sink;
+ GstBus *bus;
+
+ GstState state;
+ GstState target;
+
+ gulong sig1;
+ gulong sig2;
+
+ gboolean terminate;
+
+ gboolean has_video;
+ gboolean buffering;
+};
+
+G_DEFINE_TYPE (ParoleGst, parole_gst, GTK_TYPE_WIDGET)
+
+static void
+parole_gst_evaluate_state (ParoleGst *gst, GstState old, GstState new, GstState pending)
+{
+ gst->priv->state = new;
+
+ switch (gst->priv->state)
+ {
+ case GST_STATE_PLAYING:
+ break;
+ case GST_STATE_PAUSED:
+ break;
+ case GST_STATE_READY:
+ gst->priv->buffering = FALSE;
+ case GST_STATE_NULL:
+ gst->priv->buffering = FALSE;
+ if ( gst->priv->terminate )
+ {
+ g_debug ("Exiting");
+ gtk_main_quit ();
+ }
+ break;
+ default:
+ break;
+ }
+}
+
+static void
+parole_gst_change_state (ParoleGst *gst, GstState new)
+{
+ GstStateChangeReturn ret;
+
+ ret = gst_element_set_state (GST_ELEMENT (gst->priv->playbin), new);
+
+ if ( ret == GST_STATE_CHANGE_SUCCESS )
+ {
+ parole_gst_evaluate_state (gst,
+ GST_STATE_RETURN (gst->priv->playbin),
+ GST_STATE (gst->priv->playbin),
+ GST_STATE_PENDING (gst->priv->playbin));
+ }
+}
+
+static void
+parole_gst_set_x_overlay (ParoleGst *gst)
+{
+ GstElement *video_sink;
+
+ g_object_get (G_OBJECT (gst->priv->playbin),
+ "video-sink", &video_sink,
+ NULL);
+
+ g_assert (video_sink != NULL);
+
+ gst_x_overlay_set_xwindow_id (GST_X_OVERLAY (video_sink),
+ GDK_WINDOW_XWINDOW (GTK_WIDGET (gst)->window));
+
+ gst_object_unref (video_sink);
+}
+
+static void
+parole_gst_element_message_sync (GstBus *bus, GstMessage *message, ParoleGst *gst)
+{
+ if ( !message->structure )
+ goto out;
+
+ if ( gst_structure_has_name (message->structure, "prepare-xwindow-id") )
+ parole_gst_set_x_overlay (gst);
+out:
+ ;
+}
+
+static void
+parole_gst_stream_info_notify_cb (GObject * obj, GParamSpec * pspec, ParoleGst *gst)
+{
+ GstMessage *msg;
+ msg = gst_message_new_application (GST_OBJECT (gst->priv->playbin),
+ gst_structure_new ("notify-streaminfo", NULL));
+ gst_element_post_message (gst->priv->playbin, msg);
+}
+
+static gboolean
+parole_gst_bus_event (GstBus *bus, GstMessage *msg, gpointer data)
+{
+ ParoleGst *gst;
+
+ gst = PAROLE_GST (data);
+
+ switch (GST_MESSAGE_TYPE (msg))
+ {
+ case GST_MESSAGE_EOS:
+ {
+ break;
+ }
+ case GST_MESSAGE_ERROR:
+ {
+ /*
+ GError *error = NULL;
+ gchar *debug;
+
+ gst->priv->target = GST_STATE_NULL;
+ gst->priv->buffering = FALSE;
+ parole_gst_change_state (gst, GST_STATE_NULL);
+ gst_message_parse_error (msg, &error, &debug);
+ TRACE ("*** ERROR %s : %s ***", error->message, debug);
+ g_error_free (error);
+ g_free (debug);
+ gtk_widget_queue_draw (GTK_WIDGET (gst));
+ */
+ break;
+ }
+ case GST_MESSAGE_BUFFERING:
+ {
+ gint per = 0;
+ gst_message_parse_buffering (msg, &per);
+ gst->priv->buffering = per != 100;
+ break;
+ }
+ case GST_MESSAGE_STATE_CHANGED:
+ {
+ /*
+ GstState old, new, pending;
+ gst_message_parse_state_changed (msg, &old, &new, &pending);
+
+ if ( GST_MESSAGE_SRC (msg) == GST_OBJECT (gst->priv->playbin) )
+ parole_gst_evaluate_state (gst, old, new, pending);
+ */
+ break;
+ }
+ case GST_MESSAGE_APPLICATION:
+ // parole_gst_application_message (gst, msg);
+ break;
+ case GST_MESSAGE_DURATION:
+ //parole_gst_query_duration (gst);
+ break;
+ default:
+ break;
+ }
+ return TRUE;
+}
+
+static void
+parole_gst_construct (GObject *object)
+{
+ ParoleGst *gst;
+
+ gst = PAROLE_GST (object);
+
+ gst->priv->playbin = gst_element_factory_make ("playbin", "player");
+
+ if ( G_UNLIKELY (gst->priv->playbin == NULL) )
+ {
+ g_critical ("playbin load failed");
+ return;
+ }
+
+ gst->priv->video_sink = gst_element_factory_make ("xvimagesink", "video");
+
+ if ( G_UNLIKELY (gst->priv->video_sink == NULL) )
+ {
+ g_debug ("xvimagesink not found, trying to load ximagesink");
+ gst->priv->video_sink = gst_element_factory_make ("ximagesink", "video");
+
+ if ( G_UNLIKELY (gst->priv->video_sink == NULL) )
+ {
+ g_critical ("ximagesink load failed");
+ return;
+ }
+ }
+
+ g_object_set (G_OBJECT (gst->priv->playbin),
+ "video-sink", gst->priv->video_sink,
+ NULL);
+
+ /*
+ * Listen to the bus events.
+ */
+ gst->priv->bus = gst_element_get_bus (gst->priv->playbin);
+ gst_bus_add_signal_watch (gst->priv->bus);
+
+ gst->priv->sig1 =
+ g_signal_connect (gst->priv->bus, "message",
+ G_CALLBACK (parole_gst_bus_event), gst);
+
+ /*
+ * Handling 'prepare-xwindow-id' message async causes XSync
+ * error in some occasions So we handle this message synchronously
+ */
+ gst_bus_set_sync_handler (gst->priv->bus, gst_bus_sync_signal_handler, gst);
+ gst->priv->sig2 =
+ g_signal_connect (gst->priv->bus, "sync-message::element",
+ G_CALLBACK (parole_gst_element_message_sync), gst);
+
+ /*
+ * Handle stream info changes, this can happen on live/radio stream.
+ */
+ g_signal_connect (gst->priv->playbin, "notify::stream-info",
+ G_CALLBACK (parole_gst_stream_info_notify_cb), gst);
+}
+
+static gboolean
+parole_gst_expose_event (GtkWidget *widget, GdkEventExpose *ev)
+{
+ ParoleGst *gst;
+
+ if ( ev && ev->count > 0 )
+ return TRUE;
+
+ gst = PAROLE_GST (widget);
+
+ parole_gst_set_x_overlay (gst);
+
+ if ( gst->priv->has_video )
+ {
+ gst_x_overlay_expose (GST_X_OVERLAY (gst->priv->video_sink));
+ }
+
+ return TRUE;
+}
+
+static void
+parole_gst_show (GtkWidget *widget)
+{
+ ParoleGst *gst;
+
+ gst = PAROLE_GST (widget);
+
+ if ( widget->window )
+ gdk_window_show (widget->window);
+
+ if ( GTK_WIDGET_CLASS (parole_gst_parent_class)->show )
+ GTK_WIDGET_CLASS (parole_gst_parent_class)->show (widget);
+}
+
+static void
+parole_gst_realize (GtkWidget *widget)
+{
+ ParoleGst *gst;
+ GdkWindowAttr attr;
+ GdkColor color;
+ gint mask;
+
+ GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED);
+ gst = PAROLE_GST (widget);
+
+ attr.x = widget->allocation.x;
+ attr.y = widget->allocation.y;
+ attr.width = widget->allocation.width;
+ attr.height = widget->allocation.height;
+ attr.visual = gtk_widget_get_visual (widget);
+ attr.colormap = gtk_widget_get_colormap (widget);
+ attr.wclass = GDK_INPUT_OUTPUT;
+ attr.window_type = GDK_WINDOW_CHILD;
+ attr.event_mask = gtk_widget_get_events (widget) |
+ GDK_EXPOSURE_MASK |
+ GDK_BUTTON_PRESS_MASK |
+ GDK_BUTTON_RELEASE_MASK |
+ GDK_POINTER_MOTION_MASK |
+ GDK_KEY_PRESS_MASK;
+
+ mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP;
+
+ widget->window = gdk_window_new (gtk_widget_get_parent_window (widget),
+ &attr, mask);
+
+ gdk_window_set_user_data (widget->window, widget);
+ gdk_color_parse ("black", &color);
+ gdk_colormap_alloc_color (gtk_widget_get_colormap (widget), &color,
+ TRUE, TRUE);
+
+ gdk_window_set_background (widget->window, &color);
+ widget->style = gtk_style_attach (widget->style, widget->window);
+}
+
+static void
+parole_gst_class_init (ParoleGstClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+
+ object_class->finalize = parole_gst_finalize;
+ object_class->constructed = parole_gst_construct;
+
+ widget_class->realize = parole_gst_realize;
+ widget_class->show = parole_gst_show;
+ widget_class->expose_event = parole_gst_expose_event;
+
+ g_type_class_add_private (klass, sizeof (ParoleGstPrivate));
+}
+
+static void
+parole_gst_init (ParoleGst *gst)
+{
+ gst->priv = PAROLE_GST_GET_PRIVATE (gst);
+
+ gst->priv->state = GST_STATE_VOID_PENDING;
+ gst->priv->target = GST_STATE_VOID_PENDING;
+
+ gst->priv->terminate = FALSE;
+
+
+ GTK_WIDGET_SET_FLAGS (GTK_WIDGET (gst), GTK_CAN_FOCUS);
+
+ /*
+ * Disable double buffering on the video output to avoid
+ * flickering when resizing the window.
+ */
+ GTK_WIDGET_UNSET_FLAGS (GTK_WIDGET (gst), GTK_DOUBLE_BUFFERED);
+}
+
+static void
+parole_gst_finalize (GObject *object)
+{
+ ParoleGst *gst;
+
+ gst = PAROLE_GST (object);
+ g_object_unref (gst->priv->playbin);
+
+ G_OBJECT_CLASS (parole_gst_parent_class)->finalize (object);
+}
+
+GtkWidget *
+parole_gst_new (void)
+{
+ GtkWidget *gst = NULL;
+ gst = g_object_new (PAROLE_TYPE_GST, NULL);
+ return gst;
+}
+
+void parole_gst_play_url (ParoleGst *gst, const gchar *url)
+{
+ g_return_if_fail (gst->priv->playbin != NULL);
+
+ g_object_set (G_OBJECT (gst->priv->playbin),
+ "uri", url,
+ NULL);
+ parole_gst_change_state (gst, GST_STATE_PLAYING);
+}
+
+void parole_gst_terminate (ParoleGst *gst)
+{
+ g_return_if_fail (gst->priv->playbin != NULL);
+
+ gst->priv->terminate = TRUE;
+ gst->priv->target = GST_STATE_NULL;
+ parole_gst_change_state (gst, GST_STATE_NULL);
+}
diff --git a/parole/parole-filters.h b/browser-plugin/media-plugin/parole-gst.h
similarity index 52%
copy from parole/parole-filters.h
copy to browser-plugin/media-plugin/parole-gst.h
index 73308dd..72a08b5 100644
--- a/parole/parole-filters.h
+++ b/browser-plugin/media-plugin/parole-gst.h
@@ -18,43 +18,42 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#ifndef __PAROLE_FILTERS_H
-#define __PAROLE_FILTERS_H
+#ifndef __PAROLE_GST_H
+#define __PAROLE_GST_H
#include <gtk/gtk.h>
-#include "parole-file.h"
-
G_BEGIN_DECLS
-typedef enum
-{
- PAROLE_FILE_UNKNOWN,
- PAROLE_FILE_AUDIO,
- PAROLE_FILE_VIDEO,
- PAROLE_FILE_PLAYLIST
-
-} ParoleFileFormat;
-
-GtkFileFilter *parole_get_supported_audio_filter (void);
-
-GtkFileFilter *parole_get_supported_video_filter (void);
+#define PAROLE_TYPE_GST (parole_gst_get_type () )
+#define PAROLE_GST(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), PAROLE_TYPE_GST, ParoleGst))
+#define PAROLE_IS_GST(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), PAROLE_TYPE_GST))
-GtkFileFilter *parole_get_supported_media_filter (void);
+typedef struct ParoleGstPrivate ParoleGstPrivate;
-GtkFileFilter *parole_get_supported_files_filter (void);
+typedef struct
+{
+ GtkWidget parent;
+
+ ParoleGstPrivate *priv;
+
+} ParoleGst;
-GtkFileFilter *parole_get_supported_playlist_filter (void);
+typedef struct
+{
+ GtkWidgetClass parent_class;
+
+} ParoleGstClass;
-gboolean parole_file_filter (GtkFileFilter *filter,
- ParoleFile *file);
+GType parole_gst_get_type (void) G_GNUC_CONST;
-ParoleFileFormat parole_file_guess_format (ParoleFile *file);
+GtkWidget *parole_gst_new (void);
-void parole_get_media_files (GtkFileFilter *filter,
- const gchar *path,
- GSList **list);
+void parole_gst_play_url (ParoleGst *gst,
+ const gchar *url);
+
+void parole_gst_terminate (ParoleGst *gst);
G_END_DECLS
-#endif /* PAROLE_FILTERS_H */
+#endif /* __PAROLE_GST_H */
diff --git a/browser-plugin/npapi.h b/browser-plugin/npapi.h
new file mode 100644
index 0000000..952d357
--- /dev/null
+++ b/browser-plugin/npapi.h
@@ -0,0 +1,807 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is mozilla.org code.
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by the Initial Developer are Copyright (C) 1998
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+
+ /*
+ * Netscape client plug-in API spec
+ */
+
+
+#ifndef _NPAPI_H_
+#define _NPAPI_H_
+
+#ifdef INCLUDE_JAVA
+#include "jri.h" /* Java Runtime Interface */
+#else
+#define jref void *
+#define JRIEnv void
+#endif
+
+#ifdef _WIN32
+# ifndef XP_WIN
+# define XP_WIN 1
+# endif /* XP_WIN */
+#endif /* _WIN32 */
+
+#ifdef __MWERKS__
+# define _declspec __declspec
+# ifdef macintosh
+# ifndef XP_MAC
+# define XP_MAC 1
+# endif /* XP_MAC */
+# endif /* macintosh */
+# ifdef __INTEL__
+# undef NULL
+# ifndef XP_WIN
+# define XP_WIN 1
+# endif /* __INTEL__ */
+# endif /* XP_PC */
+#endif /* __MWERKS__ */
+
+#if defined(__APPLE_CC__) && !defined(__MACOS_CLASSIC__) && !defined(XP_UNIX)
+# define XP_MACOSX
+#endif
+
+#ifdef XP_MAC
+ #include <Quickdraw.h>
+ #include <Events.h>
+#endif
+
+#if defined(XP_MACOSX) && defined(__LP64__)
+#define NP_NO_QUICKDRAW
+#define NP_NO_CARBON
+#endif
+
+#ifdef XP_MACOSX
+ #include <ApplicationServices/ApplicationServices.h>
+ #include <OpenGL/OpenGL.h>
+#ifndef NP_NO_CARBON
+ #include <Carbon/Carbon.h>
+#endif
+#endif
+
+#ifdef XP_UNIX
+ #include <X11/Xlib.h>
+ #include <X11/Xutil.h>
+ #include <stdio.h>
+#endif
+
+#ifdef XP_WIN
+ #include <windows.h>
+#endif
+
+/*----------------------------------------------------------------------*/
+/* Plugin Version Constants */
+/*----------------------------------------------------------------------*/
+
+#define NP_VERSION_MAJOR 0
+#define NP_VERSION_MINOR 20
+
+
+
+/*----------------------------------------------------------------------*/
+/* Definition of Basic Types */
+/*----------------------------------------------------------------------*/
+
+#ifndef _UINT16
+#define _UINT16
+typedef unsigned short uint16;
+#endif
+
+#ifndef _UINT32
+#define _UINT32
+#ifdef __LP64__
+typedef unsigned int uint32;
+#else /* __LP64__ */
+typedef unsigned long uint32;
+#endif /* __LP64__ */
+#endif
+
+#ifndef _INT16
+#define _INT16
+typedef short int16;
+#endif
+
+#ifndef _INT32
+#define _INT32
+#ifdef __LP64__
+typedef int int32;
+#else /* __LP64__ */
+typedef long int32;
+#endif /* __LP64__ */
+#endif
+
+#ifndef FALSE
+#define FALSE (0)
+#endif
+#ifndef TRUE
+#define TRUE (1)
+#endif
+#ifndef NULL
+#define NULL (0L)
+#endif
+
+typedef unsigned char NPBool;
+typedef int16 NPError;
+typedef int16 NPReason;
+typedef char* NPMIMEType;
+
+
+
+/*----------------------------------------------------------------------*/
+/* Structures and definitions */
+/*----------------------------------------------------------------------*/
+
+#if !defined(__LP64__)
+#if defined(XP_MAC) || defined(XP_MACOSX)
+#pragma options align=mac68k
+#endif
+#endif /* __LP64__ */
+
+/*
+ * NPP is a plug-in's opaque instance handle
+ */
+typedef struct _NPP
+{
+ void* pdata; /* plug-in private data */
+ void* ndata; /* netscape private data */
+} NPP_t;
+
+typedef NPP_t* NPP;
+
+
+typedef struct _NPStream
+{
+ void* pdata; /* plug-in private data */
+ void* ndata; /* netscape private data */
+ const char* url;
+ uint32 end;
+ uint32 lastmodified;
+ void* notifyData;
+ const char* headers; /* Response headers from host.
+ * Exists only for >= NPVERS_HAS_RESPONSE_HEADERS.
+ * Used for HTTP only; NULL for non-HTTP.
+ * Available from NPP_NewStream onwards.
+ * Plugin should copy this data before storing it.
+ * Includes HTTP status line and all headers,
+ * preferably verbatim as received from server,
+ * headers formatted as in HTTP ("Header: Value"),
+ * and newlines (\n, NOT \r\n) separating lines.
+ * Terminated by \n\0 (NOT \n\n\0). */
+} NPStream;
+
+
+typedef struct _NPByteRange
+{
+ int32 offset; /* negative offset means from the end */
+ uint32 length;
+ struct _NPByteRange* next;
+} NPByteRange;
+
+
+typedef struct _NPSavedData
+{
+ int32 len;
+ void* buf;
+} NPSavedData;
+
+
+typedef struct _NPRect
+{
+ uint16 top;
+ uint16 left;
+ uint16 bottom;
+ uint16 right;
+} NPRect;
+
+
+#ifdef XP_UNIX
+/*
+ * Unix specific structures and definitions
+ */
+
+/*
+ * Callback Structures.
+ *
+ * These are used to pass additional platform specific information.
+ */
+enum {
+ NP_SETWINDOW = 1,
+ NP_PRINT
+};
+
+typedef struct
+{
+ int32 type;
+} NPAnyCallbackStruct;
+
+typedef struct
+{
+ int32 type;
+ Display* display;
+ Visual* visual;
+ Colormap colormap;
+ unsigned int depth;
+} NPSetWindowCallbackStruct;
+
+typedef struct
+{
+ int32 type;
+ FILE* fp;
+} NPPrintCallbackStruct;
+
+#endif /* XP_UNIX */
+
+/*
+ * The following masks are applied on certain platforms to NPNV and
+ * NPPV selectors that pass around pointers to COM interfaces. Newer
+ * compilers on some platforms may generate vtables that are not
+ * compatible with older compilers. To prevent older plugins from
+ * not understanding a new browser's ABI, these masks change the
+ * values of those selectors on those platforms. To remain backwards
+ * compatible with differenet versions of the browser, plugins can
+ * use these masks to dynamically determine and use the correct C++
+ * ABI that the browser is expecting. This does not apply to Windows
+ * as Microsoft's COM ABI will likely not change.
+ */
+
+#define NP_ABI_GCC3_MASK 0x10000000
+/*
+ * gcc 3.x generated vtables on UNIX and OSX are incompatible with
+ * previous compilers.
+ */
+#if (defined (XP_UNIX) && defined(__GNUC__) && (__GNUC__ >= 3))
+#define _NP_ABI_MIXIN_FOR_GCC3 NP_ABI_GCC3_MASK
+#else
+#define _NP_ABI_MIXIN_FOR_GCC3 0
+#endif
+
+#define NP_ABI_MACHO_MASK 0x01000000
+/*
+ * On OSX, the Mach-O executable format is significantly
+ * different than CFM. In addition to having a different
+ * C++ ABI, it also has has different C calling convention.
+ * You must use glue code when calling between CFM and
+ * Mach-O C functions.
+ */
+#if (defined(TARGET_RT_MAC_MACHO))
+#define _NP_ABI_MIXIN_FOR_MACHO NP_ABI_MACHO_MASK
+#else
+#define _NP_ABI_MIXIN_FOR_MACHO 0
+#endif
+
+
+#define NP_ABI_MASK (_NP_ABI_MIXIN_FOR_GCC3 | _NP_ABI_MIXIN_FOR_MACHO)
+
+/*
+ * List of variable names for which NPP_GetValue shall be implemented
+ */
+typedef enum {
+ NPPVpluginNameString = 1,
+ NPPVpluginDescriptionString,
+ NPPVpluginWindowBool,
+ NPPVpluginTransparentBool,
+
+ NPPVjavaClass, /* Not implemented in WebKit */
+ NPPVpluginWindowSize, /* Not implemented in WebKit */
+ NPPVpluginTimerInterval, /* Not implemented in WebKit */
+
+ NPPVpluginScriptableInstance = (10 | NP_ABI_MASK), /* Not implemented in WebKit */
+ NPPVpluginScriptableIID = 11, /* Not implemented in WebKit */
+
+ /* 12 and over are available on Mozilla builds starting with 0.9.9 */
+ NPPVjavascriptPushCallerBool = 12, /* Not implemented in WebKit */
+ NPPVpluginKeepLibraryInMemory = 13, /* Not implemented in WebKit */
+ NPPVpluginNeedsXEmbed = 14, /* Not implemented in WebKit */
+
+ /* Get the NPObject for scripting the plugin. */
+ NPPVpluginScriptableNPObject = 15,
+
+ /* Get the plugin value (as \0-terminated UTF-8 string data) for
+ * form submission if the plugin is part of a form. Use
+ * NPN_MemAlloc() to allocate memory for the string data.
+ */
+ NPPVformValue = 16, /* Not implemented in WebKit */
+#ifdef XP_MACOSX
+ /* Used for negotiating drawing models */
+ NPPVpluginDrawingModel = 1000,
+ /* Used for negotiating event models */
+ NPPVpluginEventModel = 1001,
+#endif
+} NPPVariable;
+
+/*
+ * List of variable names for which NPN_GetValue is implemented by Mozilla
+ */
+typedef enum {
+ NPNVxDisplay = 1,
+ NPNVxtAppContext,
+ NPNVnetscapeWindow,
+ NPNVjavascriptEnabledBool,
+ NPNVasdEnabledBool,
+ NPNVisOfflineBool,
+
+ /* 10 and over are available on Mozilla builds starting with 0.9.4 */
+ NPNVserviceManager = (10 | NP_ABI_MASK), /* Not implemented in WebKit */
+ NPNVDOMElement = (11 | NP_ABI_MASK), /* Not implemented in WebKit */
+ NPNVDOMWindow = (12 | NP_ABI_MASK), /* Not implemented in WebKit */
+ NPNVToolkit = (13 | NP_ABI_MASK), /* Not implemented in WebKit */
+ NPNVSupportsXEmbedBool = 14, /* Not implemented in WebKit */
+
+ /* Get the NPObject wrapper for the browser window. */
+ NPNVWindowNPObject = 15,
+
+ /* Get the NPObject wrapper for the plugins DOM element. */
+ NPNVPluginElementNPObject
+
+#ifdef XP_MACOSX
+ , NPNVpluginDrawingModel = 1000 /* The NPDrawingModel specified by the plugin */
+
+#ifndef NP_NO_QUICKDRAW
+ , NPNVsupportsQuickDrawBool = 2000 /* TRUE if the browser supports the QuickDraw drawing model */
+#endif
+ , NPNVsupportsCoreGraphicsBool = 2001 /* TRUE if the browser supports the CoreGraphics drawing model */
+ , NPNVsupportsOpenGLBool = 2002 /* TRUE if the browser supports the OpenGL drawing model (CGL on Mac) */
+
+ , NPNVpluginEventModel = 1001 /* The NPEventModel specified by the plugin */
+#ifndef NP_NO_CARBON
+ , NPNVsupportsCarbonBool = 2003 /* TRUE if the browser supports the Carbon event model */
+#endif
+ , NPNVsupportsCocoaBool = 2004 /* TRUE if the browser supports the Cocoa event model */
+#endif /* XP_MACOSX */
+} NPNVariable;
+
+/*
+ * The type of a NPWindow - it specifies the type of the data structure
+ * returned in the window field.
+ */
+typedef enum {
+ NPWindowTypeWindow = 1,
+ NPWindowTypeDrawable
+} NPWindowType;
+
+#ifdef XP_MACOSX
+
+/*
+ * The drawing model for a Mac OS X plugin. These are the possible values for the NPNVpluginDrawingModel variable.
+ */
+
+typedef enum {
+#ifndef NP_NO_QUICKDRAW
+ NPDrawingModelQuickDraw = 0,
+#endif
+ NPDrawingModelCoreGraphics = 1,
+ NPDrawingModelOpenGL = 2
+} NPDrawingModel;
+
+/*
+ * The event model for a Mac OS X plugin. These are the possible values for the NPNVpluginEventModel variable.
+ */
+
+typedef enum {
+#ifndef NP_NO_CARBON
+ NPEventModelCarbon = 0,
+#endif
+ NPEventModelCocoa = 1,
+} NPEventModel;
+
+typedef enum {
+ NPCocoaEventDrawRect = 1,
+ NPCocoaEventMouseDown,
+ NPCocoaEventMouseUp,
+ NPCocoaEventMouseMoved,
+ NPCocoaEventMouseEntered,
+ NPCocoaEventMouseExited,
+ NPCocoaEventMouseDragged,
+ NPCocoaEventKeyDown,
+ NPCocoaEventKeyUp,
+ NPCocoaEventFlagsChanged,
+ NPCocoaEventFocusChanged,
+ NPCocoaEventWindowFocusChanged,
+ NPCocoaEventScrollWheel,
+} NPCocoaEventType;
+
+typedef struct _NPNSString NPNSString;
+typedef struct _NPNSWindow NPNSWindow;
+
+typedef struct _NPCocoaEvent {
+ NPCocoaEventType type;
+ union {
+ struct {
+ uint32 modifierFlags;
+ double pluginX;
+ double pluginY;
+ int32 buttonNumber;
+ int32 clickCount;
+ double deltaX;
+ double deltaY;
+ double deltaZ;
+ } mouse;
+ struct {
+ uint32 modifierFlags;
+ double pluginX;
+ double pluginY;
+ NPNSString *characters;
+ NPNSString *charactersIgnoringModifiers;
+ NPBool isARepeat;
+ uint16 keyCode;
+ } key;
+ struct {
+ double x;
+ double y;
+ double width;
+ double height;
+ } draw;
+ struct {
+ NPBool hasFocus;
+ } focus;
+ };
+} NPCocoaEvent;
+
+#endif
+
+typedef struct _NPWindow
+{
+ void* window; /* Platform specific window handle */
+ int32 x; /* Position of top left corner relative */
+ int32 y; /* to a netscape page. */
+ uint32 width; /* Maximum window size */
+ uint32 height;
+ NPRect clipRect; /* Clipping rectangle in port coordinates */
+ /* Used by MAC only. */
+#ifdef XP_UNIX
+ void * ws_info; /* Platform-dependent additonal data */
+#endif /* XP_UNIX */
+ NPWindowType type; /* Is this a window or a drawable? */
+} NPWindow;
+
+
+typedef struct _NPFullPrint
+{
+ NPBool pluginPrinted; /* Set TRUE if plugin handled fullscreen */
+ /* printing */
+ NPBool printOne; /* TRUE if plugin should print one copy */
+ /* to default printer */
+ void* platformPrint; /* Platform-specific printing info */
+} NPFullPrint;
+
+typedef struct _NPEmbedPrint
+{
+ NPWindow window;
+ void* platformPrint; /* Platform-specific printing info */
+} NPEmbedPrint;
+
+typedef struct _NPPrint
+{
+ uint16 mode; /* NP_FULL or NP_EMBED */
+ union
+ {
+ NPFullPrint fullPrint; /* if mode is NP_FULL */
+ NPEmbedPrint embedPrint; /* if mode is NP_EMBED */
+ } print;
+} NPPrint;
+
+#if defined(XP_MAC) || defined(XP_MACOSX)
+
+#ifndef NP_NO_CARBON
+typedef EventRecord NPEvent;
+#endif
+
+#elif defined(XP_WIN)
+typedef struct _NPEvent
+{
+ uint16 event;
+ uint32 wParam;
+ uint32 lParam;
+} NPEvent;
+#elif defined (XP_UNIX)
+typedef XEvent NPEvent;
+#else
+typedef void* NPEvent;
+#endif /* XP_MAC */
+
+#if defined(XP_MAC)
+typedef RgnHandle NPRegion;
+#elif defined(XP_MACOSX)
+/*
+ * NPRegion's type depends on the drawing model specified by the plugin (see NPNVpluginDrawingModel).
+ * NPQDRegion represents a QuickDraw RgnHandle and is used with the QuickDraw drawing model.
+ * NPCGRegion repesents a graphical region when using any other drawing model.
+ */
+typedef void *NPRegion;
+#ifndef NP_NO_QUICKDRAW
+typedef RgnHandle NPQDRegion;
+#endif
+typedef CGPathRef NPCGRegion;
+#elif defined(XP_WIN)
+typedef HRGN NPRegion;
+#elif defined(XP_UNIX)
+typedef Region NPRegion;
+#else
+typedef void *NPRegion;
+#endif /* XP_MAC */
+
+#ifdef XP_MACOSX
+
+/*
+ * NP_CGContext is the type of the NPWindow's 'window' when the plugin specifies NPDrawingModelCoreGraphics
+ * as its drawing model.
+ */
+
+typedef struct NP_CGContext
+{
+ CGContextRef context;
+#ifdef NP_NO_CARBON
+ NPNSWindow *window;
+#else
+ void *window; // Can be either an NSWindow or a WindowRef depending on the event model
+#endif
+} NP_CGContext;
+
+/*
+ * NP_GLContext is the type of the NPWindow's 'window' when the plugin specifies NPDrawingModelOpenGL as its
+ * drawing model.
+ */
+
+typedef struct NP_GLContext
+{
+ CGLContextObj context;
+#ifdef NP_NO_CARBON
+ NPNSWindow *window;
+#else
+ void *window; // Can be either an NSWindow or a WindowRef depending on the event model
+#endif
+} NP_GLContext;
+
+#endif /* XP_MACOSX */
+
+#if defined(XP_MAC) || defined(XP_MACOSX)
+
+/*
+ * Mac-specific structures and definitions.
+ */
+
+#ifndef NP_NO_QUICKDRAW
+
+/*
+ * NP_Port is the type of the NPWindow's 'window' when the plugin specifies NPDrawingModelQuickDraw as its
+ * drawing model, or the plugin does not specify a drawing model.
+ *
+ * It is not recommended that new plugins use NPDrawingModelQuickDraw or NP_Port, as QuickDraw has been
+ * deprecated in Mac OS X 10.5. CoreGraphics is the preferred drawing API.
+ *
+ * NP_Port is not available in 64-bit.
+ */
+
+typedef struct NP_Port
+{
+ CGrafPtr port; /* Grafport */
+ int32 portx; /* position inside the topmost window */
+ int32 porty;
+} NP_Port;
+
+#endif /* NP_NO_QUICKDRAW */
+
+/*
+ * Non-standard event types that can be passed to HandleEvent
+ */
+#define getFocusEvent (osEvt + 16)
+#define loseFocusEvent (osEvt + 17)
+#define adjustCursorEvent (osEvt + 18)
+
+#endif /* XP_MAC */
+
+
+/*
+ * Values for mode passed to NPP_New:
+ */
+#define NP_EMBED 1
+#define NP_FULL 2
+
+/*
+ * Values for stream type passed to NPP_NewStream:
+ */
+#define NP_NORMAL 1
+#define NP_SEEK 2
+#define NP_ASFILE 3
+#define NP_ASFILEONLY 4
+
+#define NP_MAXREADY (((unsigned)(~0)<<1)>>1)
+
+#if !defined(__LP64__)
+#if defined(XP_MAC) || defined(XP_MACOSX)
+#pragma options align=reset
+#endif
+#endif /* __LP64__ */
+
+
+/*----------------------------------------------------------------------*/
+/* Error and Reason Code definitions */
+/*----------------------------------------------------------------------*/
+
+/*
+ * Values of type NPError:
+ */
+#define NPERR_BASE 0
+#define NPERR_NO_ERROR (NPERR_BASE + 0)
+#define NPERR_GENERIC_ERROR (NPERR_BASE + 1)
+#define NPERR_INVALID_INSTANCE_ERROR (NPERR_BASE + 2)
+#define NPERR_INVALID_FUNCTABLE_ERROR (NPERR_BASE + 3)
+#define NPERR_MODULE_LOAD_FAILED_ERROR (NPERR_BASE + 4)
+#define NPERR_OUT_OF_MEMORY_ERROR (NPERR_BASE + 5)
+#define NPERR_INVALID_PLUGIN_ERROR (NPERR_BASE + 6)
+#define NPERR_INVALID_PLUGIN_DIR_ERROR (NPERR_BASE + 7)
+#define NPERR_INCOMPATIBLE_VERSION_ERROR (NPERR_BASE + 8)
+#define NPERR_INVALID_PARAM (NPERR_BASE + 9)
+#define NPERR_INVALID_URL (NPERR_BASE + 10)
+#define NPERR_FILE_NOT_FOUND (NPERR_BASE + 11)
+#define NPERR_NO_DATA (NPERR_BASE + 12)
+#define NPERR_STREAM_NOT_SEEKABLE (NPERR_BASE + 13)
+
+/*
+ * Values of type NPReason:
+ */
+#define NPRES_BASE 0
+#define NPRES_DONE (NPRES_BASE + 0)
+#define NPRES_NETWORK_ERR (NPRES_BASE + 1)
+#define NPRES_USER_BREAK (NPRES_BASE + 2)
+
+/*
+ * Don't use these obsolete error codes any more.
+ */
+#define NP_NOERR NP_NOERR_is_obsolete_use_NPERR_NO_ERROR
+#define NP_EINVAL NP_EINVAL_is_obsolete_use_NPERR_GENERIC_ERROR
+#define NP_EABORT NP_EABORT_is_obsolete_use_NPRES_USER_BREAK
+
+/*
+ * Version feature information
+ */
+#define NPVERS_HAS_STREAMOUTPUT 8
+#define NPVERS_HAS_NOTIFICATION 9
+#define NPVERS_HAS_LIVECONNECT 9
+#define NPVERS_WIN16_HAS_LIVECONNECT 9
+#define NPVERS_68K_HAS_LIVECONNECT 11
+#define NPVERS_HAS_WINDOWLESS 11
+#define NPVERS_HAS_XPCONNECT_SCRIPTING 13 /* Not implemented in WebKit */
+#define NPVERS_HAS_NPRUNTIME_SCRIPTING 14
+#define NPVERS_HAS_FORM_VALUES 15 /* Not implemented in WebKit; see bug 13061 */
+#define NPVERS_HAS_POPUPS_ENABLED_STATE 16 /* Not implemented in WebKit */
+#define NPVERS_HAS_RESPONSE_HEADERS 17
+#define NPVERS_HAS_NPOBJECT_ENUM 18
+#define NPVERS_HAS_PLUGIN_THREAD_ASYNC_CALL 19
+#define NPVERS_MACOSX_HAS_EVENT_MODELS 20
+
+/*----------------------------------------------------------------------*/
+/* Function Prototypes */
+/*----------------------------------------------------------------------*/
+
+#if defined(_WINDOWS) && !defined(WIN32)
+#define NP_LOADDS _loadds
+#else
+#define NP_LOADDS
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * NPP_* functions are provided by the plugin and called by the navigator.
+ */
+
+#ifdef XP_UNIX
+char* NPP_GetMIMEDescription(void);
+#endif /* XP_UNIX */
+
+NPError NPP_Initialize(void);
+void NPP_Shutdown(void);
+NPError NP_LOADDS NPP_New(NPMIMEType pluginType, NPP instance,
+ uint16 mode, int16 argc, char* argn[],
+ char* argv[], NPSavedData* saved);
+NPError NP_LOADDS NPP_Destroy(NPP instance, NPSavedData** save);
+NPError NP_LOADDS NPP_SetWindow(NPP instance, NPWindow* window);
+NPError NP_LOADDS NPP_NewStream(NPP instance, NPMIMEType type,
+ NPStream* stream, NPBool seekable,
+ uint16* stype);
+NPError NP_LOADDS NPP_DestroyStream(NPP instance, NPStream* stream,
+ NPReason reason);
+int32 NP_LOADDS NPP_WriteReady(NPP instance, NPStream* stream);
+int32 NP_LOADDS NPP_Write(NPP instance, NPStream* stream, int32 offset,
+ int32 len, void* buffer);
+void NP_LOADDS NPP_StreamAsFile(NPP instance, NPStream* stream,
+ const char* fname);
+void NP_LOADDS NPP_Print(NPP instance, NPPrint* platformPrint);
+int16 NPP_HandleEvent(NPP instance, void* event);
+void NP_LOADDS NPP_URLNotify(NPP instance, const char* url,
+ NPReason reason, void* notifyData);
+jref NP_LOADDS NPP_GetJavaClass(void);
+NPError NPP_GetValue(NPP instance, NPPVariable variable,
+ void *value);
+NPError NPP_SetValue(NPP instance, NPNVariable variable,
+ void *value);
+
+/*
+ * NPN_* functions are provided by the navigator and called by the plugin.
+ */
+
+void NPN_Version(int* plugin_major, int* plugin_minor,
+ int* netscape_major, int* netscape_minor);
+NPError NPN_GetURLNotify(NPP instance, const char* url,
+ const char* target, void* notifyData);
+NPError NPN_GetURL(NPP instance, const char* url,
+ const char* target);
+NPError NPN_PostURLNotify(NPP instance, const char* url,
+ const char* target, uint32 len,
+ const char* buf, NPBool file,
+ void* notifyData);
+NPError NPN_PostURL(NPP instance, const char* url,
+ const char* target, uint32 len,
+ const char* buf, NPBool file);
+NPError NPN_RequestRead(NPStream* stream, NPByteRange* rangeList);
+NPError NPN_NewStream(NPP instance, NPMIMEType type,
+ const char* target, NPStream** stream);
+int32 NPN_Write(NPP instance, NPStream* stream, int32 len,
+ void* buffer);
+NPError NPN_DestroyStream(NPP instance, NPStream* stream,
+ NPReason reason);
+void NPN_Status(NPP instance, const char* message);
+const char* NPN_UserAgent(NPP instance);
+void* NPN_MemAlloc(uint32 size);
+void NPN_MemFree(void* ptr);
+uint32 NPN_MemFlush(uint32 size);
+void* NPN_MemDup (const void*, uint32);
+char* NPN_StrDup (const char *);
+void NPN_ReloadPlugins(NPBool reloadPages);
+JRIEnv* NPN_GetJavaEnv(void);
+jref NPN_GetJavaPeer(NPP instance);
+NPError NPN_GetValue(NPP instance, NPNVariable variable,
+ void *value);
+NPError NPN_SetValue(NPP instance, NPPVariable variable,
+ void *value);
+void NPN_InvalidateRect(NPP instance, NPRect *invalidRect);
+void NPN_InvalidateRegion(NPP instance, NPRegion invalidRegion);
+void NPN_ForceRedraw(NPP instance);
+void NPN_PushPopupsEnabledState(NPP instance, NPBool enabled);
+void NPN_PopPopupsEnabledState(NPP instance);
+void NPN_PluginThreadAsyncCall(NPP instance, void (*func) (void *), void *userData);
+uint32 NPN_ScheduleTimer(NPP instance, uint32 interval, NPBool repeat, void (*timerFunc)(NPP npp, uint32 timerID));
+void NPN_UnscheduleTimer(NPP instance, uint32 timerID);
+
+#ifdef __cplusplus
+} /* end extern "C" */
+#endif
+
+#endif /* _NPAPI_H_ */
diff --git a/browser-plugin/npruntime.h b/browser-plugin/npruntime.h
new file mode 100644
index 0000000..5725b72
--- /dev/null
+++ b/browser-plugin/npruntime.h
@@ -0,0 +1,351 @@
+/*
+ * Copyright (C) 2004, Apple Computer, Inc. and The Mozilla Foundation.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the names of Apple Computer, Inc. ("Apple") or The Mozilla
+ * Foundation ("Mozilla") nor the names of their contributors may be used
+ * to endorse or promote products derived from this software without
+ * specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE, MOZILLA AND THEIR CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE, MOZILLA OR
+ * THEIR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Revision 1 (March 4, 2004):
+ * Initial proposal.
+ *
+ * Revision 2 (March 10, 2004):
+ * All calls into script were made asynchronous. Results are
+ * provided via the NPScriptResultFunctionPtr callback.
+ *
+ * Revision 3 (March 10, 2004):
+ * Corrected comments to not refer to class retain/release FunctionPtrs.
+ *
+ * Revision 4 (March 11, 2004):
+ * Added additional convenience NPN_SetExceptionWithUTF8().
+ * Changed NPHasPropertyFunctionPtr and NPHasMethodFunctionPtr to take NPClass
+ * pointers instead of NPObject pointers.
+ * Added NPIsValidIdentifier().
+ *
+ * Revision 5 (March 17, 2004):
+ * Added context parameter to result callbacks from ScriptObject functions.
+ *
+ * Revision 6 (March 29, 2004):
+ * Renamed functions implemented by user agent to NPN_*. Removed _ from
+ * type names.
+ * Renamed "JavaScript" types to "Script".
+ *
+ * Revision 7 (April 21, 2004):
+ * NPIdentifier becomes a void*, was int32_t
+ * Remove NP_IsValidIdentifier, renamed NP_IdentifierFromUTF8 to NP_GetIdentifier
+ * Added NPVariant and modified functions to use this new type.
+ *
+ * Revision 8 (July 9, 2004):
+ * Updated to joint Apple-Mozilla license.
+ *
+ * Revision 9 (August 12, 2004):
+ * Changed NPVariantType enum values to form PVariantType_XXX
+ * Added NPP arguments to NPObject functions.
+ * Replaced NPVariant functions with macros.
+ */
+#ifndef _NP_RUNTIME_H_
+#define _NP_RUNTIME_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <stdint.h>
+#include "npapi.h"
+
+/*
+ This API is used to facilitate binding code written in C to script
+ objects. The API in this header does not assume the presence of a
+ user agent. That is, it can be used to bind C code to scripting
+ environments outside of the context of a user agent.
+
+ However, the normal use of the this API is in the context of a
+ scripting environment running in a browser or other user agent.
+ In particular it is used to support the extended Netscape
+ script-ability API for plugins (NP-SAP). NP-SAP is an extension
+ of the Netscape plugin API. As such we have adopted the use of
+ the "NP" prefix for this API.
+
+ The following NP{N|P}Variables were added to the Netscape plugin
+ API (in npapi.h):
+
+ NPNVWindowNPObject
+ NPNVPluginElementNPObject
+ NPPVpluginScriptableNPObject
+
+ These variables are exposed through NPN_GetValue() and
+ NPP_GetValue() (respectively) and are used to establish the
+ initial binding between the user agent and native code. The DOM
+ objects in the user agent can be examined and manipulated using
+ the NPN_ functions that operate on NPObjects described in this
+ header.
+
+ To the extent possible the assumptions about the scripting
+ language used by the scripting environment have been minimized.
+*/
+
+
+/*
+ Objects (non-primitive data) passed between 'C' and script is
+ always wrapped in an NPObject. The 'interface' of an NPObject is
+ described by an NPClass.
+*/
+typedef struct NPObject NPObject;
+typedef struct NPClass NPClass;
+
+typedef char NPUTF8;
+typedef struct _NPString {
+ const NPUTF8 *UTF8Characters;
+ uint32_t UTF8Length;
+} NPString;
+
+typedef enum {
+ NPVariantType_Void,
+ NPVariantType_Null,
+ NPVariantType_Bool,
+ NPVariantType_Int32,
+ NPVariantType_Double,
+ NPVariantType_String,
+ NPVariantType_Object
+} NPVariantType;
+
+typedef struct _NPVariant {
+ NPVariantType type;
+ union {
+ bool boolValue;
+ int32_t intValue;
+ double doubleValue;
+ NPString stringValue;
+ NPObject *objectValue;
+ } value;
+} NPVariant;
+
+/*
+ NPN_ReleaseVariantValue is called on all 'out' parameters references.
+ Specifically it is called on variants that are resultant out parameters
+ in NPGetPropertyFunctionPtr and NPInvokeFunctionPtr. Resultant variants
+ from these two functions should be initialized using the
+ NPN_InitializeVariantXXX() functions.
+
+ After calling NPReleaseVariantValue, the type of the variant will
+ be set to NPVariantUndefinedType.
+*/
+void NPN_ReleaseVariantValue (NPVariant *variant);
+
+#define NPVARIANT_IS_VOID(_v) ((_v).type == NPVariantType_Void)
+#define NPVARIANT_IS_NULL(_v) ((_v).type == NPVariantType_Null)
+#define NPVARIANT_IS_BOOLEAN(_v) ((_v).type == NPVariantType_Bool)
+#define NPVARIANT_IS_INT32(_v) ((_v).type == NPVariantType_Int32)
+#define NPVARIANT_IS_DOUBLE(_v) ((_v).type == NPVariantType_Double)
+#define NPVARIANT_IS_STRING(_v) ((_v).type == NPVariantType_String)
+#define NPVARIANT_IS_OBJECT(_v) ((_v).type == NPVariantType_Object)
+
+#define NPVARIANT_TO_BOOLEAN(_v) ((_v).value.boolValue)
+#define NPVARIANT_TO_INT32(_v) ((_v).value.intValue)
+#define NPVARIANT_TO_DOUBLE(_v) ((_v).value.doubleValue)
+#define NPVARIANT_TO_STRING(_v) ((_v).value.stringValue)
+#define NPVARIANT_TO_OBJECT(_v) ((_v).value.objectValue)
+
+#define NP_BEGIN_MACRO do {
+#define NP_END_MACRO } while (0)
+
+#define VOID_TO_NPVARIANT(_v) NP_BEGIN_MACRO (_v).type = NPVariantType_Void; (_v).value.objectValue = NULL; NP_END_MACRO
+#define NULL_TO_NPVARIANT(_v) NP_BEGIN_MACRO (_v).type = NPVariantType_Null; (_v).value.objectValue = NULL; NP_END_MACRO
+#define BOOLEAN_TO_NPVARIANT(_val, _v) NP_BEGIN_MACRO (_v).type = NPVariantType_Bool; (_v).value.boolValue = !!(_val); NP_END_MACRO
+#define INT32_TO_NPVARIANT(_val, _v) NP_BEGIN_MACRO (_v).type = NPVariantType_Int32; (_v).value.intValue = _val; NP_END_MACRO
+#define DOUBLE_TO_NPVARIANT(_val, _v) NP_BEGIN_MACRO (_v).type = NPVariantType_Double; (_v).value.doubleValue = _val; NP_END_MACRO
+#define STRINGZ_TO_NPVARIANT(_val, _v) NP_BEGIN_MACRO (_v).type = NPVariantType_String; NPString str = { _val, strlen(_val) }; (_v).value.stringValue = str; NP_END_MACRO
+#define STRINGN_TO_NPVARIANT(_val, _len, _v) NP_BEGIN_MACRO (_v).type = NPVariantType_String; NPString str = { _val, _len }; (_v).value.stringValue = str; NP_END_MACRO
+#define OBJECT_TO_NPVARIANT(_val, _v) NP_BEGIN_MACRO (_v).type = NPVariantType_Object; (_v).value.objectValue = _val; NP_END_MACRO
+
+/*
+ Type mappings (JavaScript types have been used for illustration
+ purposes):
+
+ JavaScript to C (NPVariant with type:)
+ undefined NPVariantType_Void
+ null NPVariantType_Null
+ Boolean NPVariantType_Bool
+ Number NPVariantType_Double or NPVariantType_Int32
+ String NPVariantType_String
+ Object NPVariantType_Object
+
+ C (NPVariant with type:) to JavaScript
+ NPVariantType_Void undefined
+ NPVariantType_Null null
+ NPVariantType_Bool Boolean
+ NPVariantType_Int32 Number
+ NPVariantType_Double Number
+ NPVariantType_String String
+ NPVariantType_Object Object
+*/
+
+typedef void *NPIdentifier;
+
+/*
+ NPObjects have methods and properties. Methods and properties are
+ identified with NPIdentifiers. These identifiers may be reflected
+ in script. NPIdentifiers can be either strings or integers, IOW,
+ methods and properties can be identified by either strings or
+ integers (i.e. foo["bar"] vs foo[1]). NPIdentifiers can be
+ compared using ==. In case of any errors, the requested
+ NPIdentifier(s) will be NULL.
+*/
+NPIdentifier NPN_GetStringIdentifier(const NPUTF8 *name);
+void NPN_GetStringIdentifiers(const NPUTF8 **names, int32_t nameCount, NPIdentifier *identifiers);
+NPIdentifier NPN_GetIntIdentifier(int32_t intid);
+bool NPN_IdentifierIsString(NPIdentifier identifier);
+
+/*
+ The NPUTF8 returned from NPN_UTF8FromIdentifier SHOULD be freed.
+*/
+NPUTF8 *NPN_UTF8FromIdentifier(NPIdentifier identifier);
+
+/*
+ Get the integer represented by identifier. If identifier is not an
+ integer identifier, the behaviour is undefined.
+*/
+int32_t NPN_IntFromIdentifier(NPIdentifier identifier);
+
+/*
+ NPObject behavior is implemented using the following set of
+ callback functions.
+
+ The NPVariant *result argument of these functions (where
+ applicable) should be released using NPN_ReleaseVariantValue().
+*/
+typedef NPObject *(*NPAllocateFunctionPtr)(NPP npp, NPClass *aClass);
+typedef void (*NPDeallocateFunctionPtr)(NPObject *obj);
+typedef void (*NPInvalidateFunctionPtr)(NPObject *obj);
+typedef bool (*NPHasMethodFunctionPtr)(NPObject *obj, NPIdentifier name);
+typedef bool (*NPInvokeFunctionPtr)(NPObject *obj, NPIdentifier name, const NPVariant *args, uint32_t argCount, NPVariant *result);
+typedef bool (*NPInvokeDefaultFunctionPtr)(NPObject *npobj, const NPVariant *args, uint32_t argCount, NPVariant *result);
+typedef bool (*NPHasPropertyFunctionPtr)(NPObject *obj, NPIdentifier name);
+typedef bool (*NPGetPropertyFunctionPtr)(NPObject *obj, NPIdentifier name, NPVariant *result);
+typedef bool (*NPSetPropertyFunctionPtr)(NPObject *obj, NPIdentifier name, const NPVariant *value);
+typedef bool (*NPRemovePropertyFunctionPtr)(NPObject *npobj, NPIdentifier name);
+typedef bool (*NPEnumerationFunctionPtr)(NPObject *npobj, NPIdentifier **value, uint32_t *count);
+
+/*
+ NPObjects returned by create have a reference count of one. It is the caller's responsibility
+ to release the returned object.
+
+ NPInvokeFunctionPtr function may return false to indicate a the method could not be invoked.
+
+ NPGetPropertyFunctionPtr and NPSetPropertyFunctionPtr may return false to indicate a property doesn't
+ exist.
+
+ NPInvalidateFunctionPtr is called by the scripting environment when the native code is
+ shutdown. Any attempt to message a NPObject instance after the invalidate
+ callback has been called will result in undefined behavior, even if the
+ native code is still retaining those NPObject instances.
+ (The runtime will typically return immediately, with 0 or NULL, from an attempt to
+ dispatch to a NPObject, but this behavior should not be depended upon.)
+
+ The NPEnumerationFunctionPtr function may pass an array of
+ NPIdentifiers back to the caller. The callee allocs the memory of
+ the array using NPN_MemAlloc(), and it's the caller's responsibility
+ to release it using NPN_MemFree().
+*/
+struct NPClass
+{
+ uint32_t structVersion;
+ NPAllocateFunctionPtr allocate;
+ NPDeallocateFunctionPtr deallocate;
+ NPInvalidateFunctionPtr invalidate;
+ NPHasMethodFunctionPtr hasMethod;
+ NPInvokeFunctionPtr invoke;
+ NPInvokeDefaultFunctionPtr invokeDefault;
+ NPHasPropertyFunctionPtr hasProperty;
+ NPGetPropertyFunctionPtr getProperty;
+ NPSetPropertyFunctionPtr setProperty;
+ NPRemovePropertyFunctionPtr removeProperty;
+ NPEnumerationFunctionPtr enumerate;
+};
+
+#define NP_CLASS_STRUCT_VERSION 2
+#define NP_CLASS_STRUCT_VERSION_ENUM 2
+#define NP_CLASS_STRUCT_VERSION_HAS_ENUM(npclass) \
+ ((npclass)->structVersion >= NP_CLASS_STRUCT_VERSION_ENUM)
+
+struct NPObject {
+ NPClass *_class;
+ uint32_t referenceCount;
+ // Additional space may be allocated here by types of NPObjects
+};
+
+/*
+ If the class has an allocate function, NPN_CreateObject invokes that function,
+ otherwise a NPObject is allocated and returned. If a class has an allocate
+ function it is the responsibility of that implementation to set the initial retain
+ count to 1.
+*/
+NPObject *NPN_CreateObject(NPP npp, NPClass *aClass);
+
+/*
+ Increment the NPObject's reference count.
+*/
+NPObject *NPN_RetainObject (NPObject *obj);
+
+/*
+ Decremented the NPObject's reference count. If the reference
+ count goes to zero, the class's destroy function is invoke if
+ specified, otherwise the object is freed directly.
+*/
+void NPN_ReleaseObject (NPObject *obj);
+
+/*
+ Functions to access script objects represented by NPObject.
+
+ Calls to script objects are synchronous. If a function returns a
+ value, it will be supplied via the result NPVariant
+ argument. Successful calls will return true, false will be
+ returned in case of an error.
+
+ Calls made from plugin code to script must be made from the thread
+ on which the plugin was initialized.
+*/
+bool NPN_Invoke(NPP npp, NPObject *npobj, NPIdentifier methodName, const NPVariant *args, uint32_t argCount, NPVariant *result);
+bool NPN_InvokeDefault(NPP npp, NPObject *npobj, const NPVariant *args, uint32_t argCount, NPVariant *result);
+bool NPN_Evaluate(NPP npp, NPObject *npobj, NPString *script, NPVariant *result);
+bool NPN_GetProperty(NPP npp, NPObject *npobj, NPIdentifier propertyName, NPVariant *result);
+bool NPN_SetProperty(NPP npp, NPObject *npobj, NPIdentifier propertyName, const NPVariant *value);
+bool NPN_RemoveProperty(NPP npp, NPObject *npobj, NPIdentifier propertyName);
+bool NPN_HasProperty(NPP npp, NPObject *npobj, NPIdentifier propertyName);
+bool NPN_HasMethod(NPP npp, NPObject *npobj, NPIdentifier methodName);
+bool NPN_Enumerate(NPP npp, NPObject *npobj, NPIdentifier **identifier, uint32_t *count);
+bool NPN_Construct(NPP npp, NPObject *npobj, const NPVariant *args, uint32_t argCount, NPVariant *result);
+
+/*
+ NPN_SetException may be called to trigger a script exception upon return
+ from entry points into NPObjects.
+*/
+void NPN_SetException (NPObject *obj, const NPUTF8 *message);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/browser-plugin/npupp.h b/browser-plugin/npupp.h
new file mode 100644
index 0000000..94712da
--- /dev/null
+++ b/browser-plugin/npupp.h
@@ -0,0 +1,719 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is mozilla.org code.
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by the Initial Developer are Copyright (C) 1998
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+
+/*
+ * npupp.h $Revision: 3.26 $
+ * function call mecahnics needed by platform specific glue code.
+ */
+
+
+#ifndef _NPUPP_H_
+#define _NPUPP_H_
+
+#if defined(__OS2__)
+#pragma pack(1)
+#endif
+
+#ifndef GENERATINGCFM
+#define GENERATINGCFM 0
+#endif
+
+#ifndef _NPAPI_H_
+#include "npapi.h"
+#endif
+
+#include "npruntime.h"
+
+#ifdef OJI
+#include "jri.h"
+#else
+typedef void* JRIGlobalRef;
+#endif
+
+
+/******************************************************************************************
+ plug-in function table macros
+ for each function in and out of the plugin API we define
+ typedef NPP_FooUPP
+ #define NewNPP_FooProc
+ #define CallNPP_FooProc
+ *******************************************************************************************/
+
+
+/* NPP_Initialize */
+typedef void (* NP_LOADDS NPP_InitializeUPP)(void);
+#define NewNPP_InitializeProc(FUNC) \
+ ((NPP_InitializeUPP) (FUNC))
+#define CallNPP_InitializeProc(FUNC) \
+ (*(FUNC))()
+
+/* NPP_Shutdown */
+typedef void (* NP_LOADDS NPP_ShutdownUPP)(void);
+#define NewNPP_ShutdownProc(FUNC) \
+ ((NPP_ShutdownUPP) (FUNC))
+#define CallNPP_ShutdownProc(FUNC) \
+ (*(FUNC))()
+
+/* NPP_New */
+typedef NPError (* NP_LOADDS NPP_NewUPP)(NPMIMEType pluginType, NPP instance, uint16 mode, int16 argc, char* argn[], char* argv[], NPSavedData* saved);
+#define NewNPP_NewProc(FUNC) \
+ ((NPP_NewUPP) (FUNC))
+#define CallNPP_NewProc(FUNC, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7) \
+ (*(FUNC))((ARG1), (ARG2), (ARG3), (ARG4), (ARG5), (ARG6), (ARG7))
+
+/* NPP_Destroy */
+typedef NPError (* NP_LOADDS NPP_DestroyUPP)(NPP instance, NPSavedData** save);
+#define NewNPP_DestroyProc(FUNC) \
+ ((NPP_DestroyUPP) (FUNC))
+#define CallNPP_DestroyProc(FUNC, ARG1, ARG2) \
+ (*(FUNC))((ARG1), (ARG2))
+
+/* NPP_SetWindow */
+typedef NPError (* NP_LOADDS NPP_SetWindowUPP)(NPP instance, NPWindow* window);
+#define NewNPP_SetWindowProc(FUNC) \
+ ((NPP_SetWindowUPP) (FUNC))
+#define CallNPP_SetWindowProc(FUNC, ARG1, ARG2) \
+ (*(FUNC))((ARG1), (ARG2))
+
+/* NPP_NewStream */
+typedef NPError (* NP_LOADDS NPP_NewStreamUPP)(NPP instance, NPMIMEType type, NPStream* stream, NPBool seekable, uint16* stype);
+#define NewNPP_NewStreamProc(FUNC) \
+ ((NPP_NewStreamUPP) (FUNC))
+#define CallNPP_NewStreamProc(FUNC, ARG1, ARG2, ARG3, ARG4, ARG5) \
+ (*(FUNC))((ARG1), (ARG2), (ARG3), (ARG4), (ARG5))
+
+/* NPP_DestroyStream */
+typedef NPError (* NP_LOADDS NPP_DestroyStreamUPP)(NPP instance, NPStream* stream, NPReason reason);
+#define NewNPP_DestroyStreamProc(FUNC) \
+ ((NPP_DestroyStreamUPP) (FUNC))
+#define CallNPP_DestroyStreamProc(FUNC, NPParg, NPStreamPtr, NPReasonArg) \
+ (*(FUNC))((NPParg), (NPStreamPtr), (NPReasonArg))
+
+/* NPP_WriteReady */
+typedef int32 (* NP_LOADDS NPP_WriteReadyUPP)(NPP instance, NPStream* stream);
+#define NewNPP_WriteReadyProc(FUNC) \
+ ((NPP_WriteReadyUPP) (FUNC))
+#define CallNPP_WriteReadyProc(FUNC, NPParg, NPStreamPtr) \
+ (*(FUNC))((NPParg), (NPStreamPtr))
+
+/* NPP_Write */
+typedef int32 (* NP_LOADDS NPP_WriteUPP)(NPP instance, NPStream* stream, int32 offset, int32 len, void* buffer);
+#define NewNPP_WriteProc(FUNC) \
+ ((NPP_WriteUPP) (FUNC))
+#define CallNPP_WriteProc(FUNC, NPParg, NPStreamPtr, offsetArg, lenArg, bufferPtr) \
+ (*(FUNC))((NPParg), (NPStreamPtr), (offsetArg), (lenArg), (bufferPtr))
+
+/* NPP_StreamAsFile */
+typedef void (* NP_LOADDS NPP_StreamAsFileUPP)(NPP instance, NPStream* stream, const char* fname);
+#define NewNPP_StreamAsFileProc(FUNC) \
+ ((NPP_StreamAsFileUPP) (FUNC))
+#define CallNPP_StreamAsFileProc(FUNC, ARG1, ARG2, ARG3) \
+ (*(FUNC))((ARG1), (ARG2), (ARG3))
+
+/* NPP_Print */
+typedef void (* NP_LOADDS NPP_PrintUPP)(NPP instance, NPPrint* platformPrint);
+#define NewNPP_PrintProc(FUNC) \
+ ((NPP_PrintUPP) (FUNC))
+#define CallNPP_PrintProc(FUNC, NPParg, NPPrintArg) \
+ (*(FUNC))((NPParg), (NPPrintArg))
+
+/* NPP_HandleEvent */
+typedef int16 (* NP_LOADDS NPP_HandleEventUPP)(NPP instance, void* event);
+#define NewNPP_HandleEventProc(FUNC) \
+ ((NPP_HandleEventUPP) (FUNC))
+#define CallNPP_HandleEventProc(FUNC, NPParg, voidPtr) \
+ (*(FUNC))((NPParg), (voidPtr))
+
+/* NPP_URLNotify */
+typedef void (* NP_LOADDS NPP_URLNotifyUPP)(NPP instance, const char* url, NPReason reason, void* notifyData);
+#define NewNPP_URLNotifyProc(FUNC) \
+ ((NPP_URLNotifyUPP) (FUNC))
+#define CallNPP_URLNotifyProc(FUNC, ARG1, ARG2, ARG3, ARG4) \
+ (*(FUNC))((ARG1), (ARG2), (ARG3), (ARG4))
+
+/* NPP_GetValue */
+typedef NPError (* NP_LOADDS NPP_GetValueUPP)(NPP instance, NPPVariable variable, void *ret_alue);
+#define NewNPP_GetValueProc(FUNC) \
+ ((NPP_GetValueUPP) (FUNC))
+#define CallNPP_GetValueProc(FUNC, ARG1, ARG2, ARG3) \
+ (*(FUNC))((ARG1), (ARG2), (ARG3))
+
+/* NPP_SetValue */
+typedef NPError (* NP_LOADDS NPP_SetValueUPP)(NPP instance, NPNVariable variable, void *ret_alue);
+#define NewNPP_SetValueProc(FUNC) \
+ ((NPP_SetValueUPP) (FUNC))
+#define CallNPP_SetValueProc(FUNC, ARG1, ARG2, ARG3) \
+ (*(FUNC))((ARG1), (ARG2), (ARG3))
+
+/*
+ * Netscape entry points
+ */
+
+
+/* NPN_GetValue */
+typedef NPError (* NP_LOADDS NPN_GetValueUPP)(NPP instance, NPNVariable variable, void *ret_alue);
+#define NewNPN_GetValueProc(FUNC) \
+ ((NPN_GetValueUPP) (FUNC))
+#define CallNPN_GetValueProc(FUNC, ARG1, ARG2, ARG3) \
+ (*(FUNC))((ARG1), (ARG2), (ARG3))
+
+/* NPN_SetValue */
+typedef NPError (* NP_LOADDS NPN_SetValueUPP)(NPP instance, NPPVariable variable, void *ret_alue);
+#define NewNPN_SetValueProc(FUNC) \
+ ((NPN_SetValueUPP) (FUNC))
+#define CallNPN_SetValueProc(FUNC, ARG1, ARG2, ARG3) \
+ (*(FUNC))((ARG1), (ARG2), (ARG3))
+
+/* NPN_GetUrlNotify */
+typedef NPError (* NP_LOADDS NPN_GetURLNotifyUPP)(NPP instance, const char* url, const char* window, void* notifyData);
+#define NewNPN_GetURLNotifyProc(FUNC) \
+ ((NPN_GetURLNotifyUPP) (FUNC))
+#define CallNPN_GetURLNotifyProc(FUNC, ARG1, ARG2, ARG3, ARG4) \
+ (*(FUNC))((ARG1), (ARG2), (ARG3), (ARG4))
+
+/* NPN_PostUrlNotify */
+typedef NPError (* NP_LOADDS NPN_PostURLNotifyUPP)(NPP instance, const char* url, const char* window, uint32 len, const char* buf, NPBool file, void* notifyData);
+#define NewNPN_PostURLNotifyProc(FUNC) \
+ ((NPN_PostURLNotifyUPP) (FUNC))
+#define CallNPN_PostURLNotifyProc(FUNC, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7) \
+ (*(FUNC))((ARG1), (ARG2), (ARG3), (ARG4), (ARG5), (ARG6), (ARG7))
+
+/* NPN_GetUrl */
+typedef NPError (* NP_LOADDS NPN_GetURLUPP)(NPP instance, const char* url, const char* window);
+#define NewNPN_GetURLProc(FUNC) \
+ ((NPN_GetURLUPP) (FUNC))
+#define CallNPN_GetURLProc(FUNC, ARG1, ARG2, ARG3) \
+ (*(FUNC))((ARG1), (ARG2), (ARG3))
+
+/* NPN_PostUrl */
+typedef NPError (* NP_LOADDS NPN_PostURLUPP)(NPP instance, const char* url, const char* window, uint32 len, const char* buf, NPBool file);
+#define NewNPN_PostURLProc(FUNC) \
+ ((NPN_PostURLUPP) (FUNC))
+#define CallNPN_PostURLProc(FUNC, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6) \
+ (*(FUNC))((ARG1), (ARG2), (ARG3), (ARG4), (ARG5), (ARG6))
+
+/* NPN_RequestRead */
+typedef NPError (* NP_LOADDS NPN_RequestReadUPP)(NPStream* stream, NPByteRange* rangeList);
+#define NewNPN_RequestReadProc(FUNC) \
+ ((NPN_RequestReadUPP) (FUNC))
+#define CallNPN_RequestReadProc(FUNC, stream, range) \
+ (*(FUNC))((stream), (range))
+
+/* NPN_NewStream */
+typedef NPError (* NP_LOADDS NPN_NewStreamUPP)(NPP instance, NPMIMEType type, const char* window, NPStream** stream);
+#define NewNPN_NewStreamProc(FUNC) \
+ ((NPN_NewStreamUPP) (FUNC))
+#define CallNPN_NewStreamProc(FUNC, npp, type, window, stream) \
+ (*(FUNC))((npp), (type), (window), (stream))
+
+/* NPN_Write */
+typedef int32 (* NP_LOADDS NPN_WriteUPP)(NPP instance, NPStream* stream, int32 len, void* buffer);
+#define NewNPN_WriteProc(FUNC) \
+ ((NPN_WriteUPP) (FUNC))
+#define CallNPN_WriteProc(FUNC, npp, stream, len, buffer) \
+ (*(FUNC))((npp), (stream), (len), (buffer))
+
+/* NPN_DestroyStream */
+typedef NPError (* NP_LOADDS NPN_DestroyStreamUPP)(NPP instance, NPStream* stream, NPReason reason);
+#define NewNPN_DestroyStreamProc(FUNC) \
+ ((NPN_DestroyStreamUPP) (FUNC))
+#define CallNPN_DestroyStreamProc(FUNC, npp, stream, reason) \
+ (*(FUNC))((npp), (stream), (reason))
+
+/* NPN_Status */
+typedef void (* NP_LOADDS NPN_StatusUPP)(NPP instance, const char* message);
+#define NewNPN_StatusProc(FUNC) \
+ ((NPN_StatusUPP) (FUNC))
+#define CallNPN_StatusProc(FUNC, npp, msg) \
+ (*(FUNC))((npp), (msg))
+
+/* NPN_UserAgent */
+typedef const char* (* NP_LOADDS NPN_UserAgentUPP)(NPP instance);
+#define NewNPN_UserAgentProc(FUNC) \
+ ((NPN_UserAgentUPP) (FUNC))
+#define CallNPN_UserAgentProc(FUNC, ARG1) \
+ (*(FUNC))((ARG1))
+
+/* NPN_MemAlloc */
+typedef void* (* NP_LOADDS NPN_MemAllocUPP)(uint32 size);
+#define NewNPN_MemAllocProc(FUNC) \
+ ((NPN_MemAllocUPP) (FUNC))
+#define CallNPN_MemAllocProc(FUNC, ARG1) \
+ (*(FUNC))((ARG1))
+
+/* NPN__MemFree */
+typedef void (* NP_LOADDS NPN_MemFreeUPP)(void* ptr);
+#define NewNPN_MemFreeProc(FUNC) \
+ ((NPN_MemFreeUPP) (FUNC))
+#define CallNPN_MemFreeProc(FUNC, ARG1) \
+ (*(FUNC))((ARG1))
+
+/* NPN_MemFlush */
+typedef uint32 (* NP_LOADDS NPN_MemFlushUPP)(uint32 size);
+#define NewNPN_MemFlushProc(FUNC) \
+ ((NPN_MemFlushUPP) (FUNC))
+#define CallNPN_MemFlushProc(FUNC, ARG1) \
+ (*(FUNC))((ARG1))
+
+/* NPN_ReloadPlugins */
+typedef void (* NP_LOADDS NPN_ReloadPluginsUPP)(NPBool reloadPages);
+#define NewNPN_ReloadPluginsProc(FUNC) \
+ ((NPN_ReloadPluginsUPP) (FUNC))
+#define CallNPN_ReloadPluginsProc(FUNC, ARG1) \
+ (*(FUNC))((ARG1))
+
+/* NPN_GetJavaEnv */
+typedef JRIEnv* (* NP_LOADDS NPN_GetJavaEnvUPP)(void);
+#define NewNPN_GetJavaEnvProc(FUNC) \
+ ((NPN_GetJavaEnvUPP) (FUNC))
+#define CallNPN_GetJavaEnvProc(FUNC) \
+ (*(FUNC))()
+
+/* NPN_GetJavaPeer */
+typedef jref (* NP_LOADDS NPN_GetJavaPeerUPP)(NPP instance);
+#define NewNPN_GetJavaPeerProc(FUNC) \
+ ((NPN_GetJavaPeerUPP) (FUNC))
+#define CallNPN_GetJavaPeerProc(FUNC, ARG1) \
+ (*(FUNC))((ARG1))
+
+/* NPN_InvalidateRect */
+typedef void (* NP_LOADDS NPN_InvalidateRectUPP)(NPP instance, NPRect *rect);
+#define NewNPN_InvalidateRectProc(FUNC) \
+ ((NPN_InvalidateRectUPP) (FUNC))
+#define CallNPN_InvalidateRectProc(FUNC, ARG1, ARG2) \
+ (*(FUNC))((ARG1), (ARG2))
+
+/* NPN_InvalidateRegion */
+typedef void (* NP_LOADDS NPN_InvalidateRegionUPP)(NPP instance, NPRegion region);
+#define NewNPN_InvalidateRegionProc(FUNC) \
+ ((NPN_InvalidateRegionUPP) (FUNC))
+#define CallNPN_InvalidateRegionProc(FUNC, ARG1, ARG2) \
+ (*(FUNC))((ARG1), (ARG2))
+
+/* NPN_ForceRedraw */
+typedef void (* NP_LOADDS NPN_ForceRedrawUPP)(NPP instance);
+#define NewNPN_ForceRedrawProc(FUNC) \
+ ((NPN_ForceRedrawUPP) (FUNC))
+#define CallNPN_ForceRedrawProc(FUNC, ARG1) \
+ (*(FUNC))((ARG1))
+
+/* NPN_GetStringIdentifier */
+typedef NPIdentifier (* NP_LOADDS NPN_GetStringIdentifierUPP)(const NPUTF8* name);
+#define NewNPN_GetStringIdentifierProc(FUNC) \
+ ((NPN_GetStringIdentifierUPP) (FUNC))
+#define CallNPN_GetStringIdentifierProc(FUNC, ARG1) \
+ (*(FUNC))((ARG1))
+
+/* NPN_GetStringIdentifiers */
+typedef void (* NP_LOADDS NPN_GetStringIdentifiersUPP)(const NPUTF8** names,
+ int32_t nameCount,
+ NPIdentifier* identifiers);
+#define NewNPN_GetStringIdentifiersProc(FUNC) \
+ ((NPN_GetStringIdentifiersUPP) (FUNC))
+#define CallNPN_GetStringIdentifiersProc(FUNC, ARG1, ARG2, ARG3) \
+ (*(FUNC))((ARG1), (ARG2), (ARG3))
+
+/* NPN_GetIntIdentifier */
+typedef NPIdentifier (* NP_LOADDS NPN_GetIntIdentifierUPP)(int32_t intid);
+#define NewNPN_GetIntIdentifierProc(FUNC) \
+ ((NPN_GetIntIdentifierUPP) (FUNC))
+#define CallNPN_GetIntIdentifierProc(FUNC, ARG1) \
+ (*(FUNC))((ARG1))
+
+/* NPN_IdentifierIsString */
+typedef bool (* NP_LOADDS NPN_IdentifierIsStringUPP)(NPIdentifier identifier);
+#define NewNPN_IdentifierIsStringProc(FUNC) \
+ ((NPN_IdentifierIsStringUPP) (FUNC))
+#define CallNPN_IdentifierIsStringProc(FUNC, ARG1) \
+ (*(FUNC))((ARG1))
+
+/* NPN_UTF8FromIdentifier */
+typedef NPUTF8* (* NP_LOADDS NPN_UTF8FromIdentifierUPP)(NPIdentifier identifier);
+#define NewNPN_UTF8FromIdentifierProc(FUNC) \
+ ((NPN_UTF8FromIdentifierUPP) (FUNC))
+#define CallNPN_UTF8FromIdentifierProc(FUNC, ARG1) \
+ (*(FUNC))((ARG1))
+
+/* NPN_IntFromIdentifier */
+typedef int32_t (* NP_LOADDS NPN_IntFromIdentifierUPP)(NPIdentifier identifier);
+#define NewNPN_IntFromIdentifierProc(FUNC) \
+ ((NPN_IntFromIdentifierUPP) (FUNC))
+#define CallNPN_IntFromIdentifierProc(FUNC, ARG1) \
+ (*(FUNC))((ARG1))
+
+/* NPN_CreateObject */
+typedef NPObject* (* NP_LOADDS NPN_CreateObjectUPP)(NPP npp, NPClass *aClass);
+#define NewNPN_CreateObjectProc(FUNC) \
+ ((NPN_CreateObjectUPP) (FUNC))
+#define CallNPN_CreateObjectProc(FUNC, ARG1, ARG2) \
+ (*(FUNC))((ARG1), (ARG2))
+
+/* NPN_RetainObject */
+typedef NPObject* (* NP_LOADDS NPN_RetainObjectUPP)(NPObject *obj);
+#define NewNPN_RetainObjectProc(FUNC) \
+ ((NPN_RetainObjectUPP) (FUNC))
+#define CallNPN_RetainObjectProc(FUNC, ARG1) \
+ (*(FUNC))((ARG1))
+
+/* NPN_ReleaseObject */
+typedef void (* NP_LOADDS NPN_ReleaseObjectUPP)(NPObject *obj);
+#define NewNPN_ReleaseObjectProc(FUNC) \
+ ((NPN_ReleaseObjectUPP) (FUNC))
+#define CallNPN_ReleaseObjectProc(FUNC, ARG1) \
+ (*(FUNC))((ARG1))
+
+/* NPN_Invoke */
+typedef bool (* NP_LOADDS NPN_InvokeUPP)(NPP npp, NPObject* obj, NPIdentifier methodName, const NPVariant *args, uint32_t argCount, NPVariant *result);
+#define NewNPN_InvokeProc(FUNC) \
+ ((NPN_InvokeUPP) (FUNC))
+#define CallNPN_InvokeProc(FUNC, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6) \
+ (*(FUNC))((ARG1), (ARG2), (ARG3), (ARG4), (ARG5), (ARG6))
+
+/* NPN_InvokeDefault */
+typedef bool (* NP_LOADDS NPN_InvokeDefaultUPP)(NPP npp, NPObject* obj, const NPVariant *args, uint32_t argCount, NPVariant *result);
+#define NewNPN_InvokeDefaultProc(FUNC) \
+ ((NPN_InvokeDefaultUPP) (FUNC))
+#define CallNPN_InvokeDefaultProc(FUNC, ARG1, ARG2, ARG3, ARG4, ARG5) \
+ (*(FUNC))((ARG1), (ARG2), (ARG3), (ARG4), (ARG5))
+
+/* NPN_Evaluate */
+typedef bool (* NP_LOADDS NPN_EvaluateUPP)(NPP npp, NPObject *obj, NPString *script, NPVariant *result);
+#define NewNPN_EvaluateProc(FUNC) \
+ ((NPN_EvaluateUPP) (FUNC))
+#define CallNPN_EvaluateProc(FUNC, ARG1, ARG2, ARG3, ARG4) \
+ (*(FUNC))((ARG1), (ARG2), (ARG3), (ARG4))
+
+/* NPN_GetProperty */
+typedef bool (* NP_LOADDS NPN_GetPropertyUPP)(NPP npp, NPObject *obj, NPIdentifier propertyName, NPVariant *result);
+#define NewNPN_GetPropertyProc(FUNC) \
+ ((NPN_GetPropertyUPP) (FUNC))
+#define CallNPN_GetPropertyProc(FUNC, ARG1, ARG2, ARG3, ARG4) \
+ (*(FUNC))((ARG1), (ARG2), (ARG3), (ARG4))
+
+/* NPN_SetProperty */
+typedef bool (* NP_LOADDS NPN_SetPropertyUPP)(NPP npp, NPObject *obj, NPIdentifier propertyName, const NPVariant *value);
+#define NewNPN_SetPropertyProc(FUNC) \
+ ((NPN_SetPropertyUPP) (FUNC))
+#define CallNPN_SetPropertyProc(FUNC, ARG1, ARG2, ARG3, ARG4) \
+ (*(FUNC))((ARG1), (ARG2), (ARG3), (ARG4))
+
+/* NPN_RemoveProperty */
+typedef bool (* NP_LOADDS NPN_RemovePropertyUPP)(NPP npp, NPObject *obj, NPIdentifier propertyName);
+#define NewNPN_RemovePropertyProc(FUNC) \
+ ((NPN_RemovePropertyUPP) (FUNC))
+#define CallNPN_RemovePropertyProc(FUNC, ARG1, ARG2, ARG3) \
+ (*(FUNC))((ARG1), (ARG2), (ARG3))
+
+/* NPN_HasProperty */
+typedef bool (* NP_LOADDS NPN_HasPropertyUPP)(NPP npp, NPObject *obj, NPIdentifier propertyName);
+#define NewNPN_HasPropertyProc(FUNC) \
+ ((NPN_HasPropertyUPP) (FUNC))
+#define CallNPN_HasPropertyProc(FUNC, ARG1, ARG2, ARG3) \
+ (*(FUNC))((ARG1), (ARG2), (ARG3))
+
+/* NPN_HasMethod */
+typedef bool (* NP_LOADDS NPN_HasMethodUPP)(NPP npp, NPObject *obj, NPIdentifier propertyName);
+#define NewNPN_HasMethodProc(FUNC) \
+ ((NPN_HasMethodUPP) (FUNC))
+#define CallNPN_HasMethodProc(FUNC, ARG1, ARG2, ARG3) \
+ (*(FUNC))((ARG1), (ARG2), (ARG3))
+
+/* NPN_ReleaseVariantValue */
+typedef void (* NP_LOADDS NPN_ReleaseVariantValueUPP)(NPVariant *variant);
+#define NewNPN_ReleaseVariantValueProc(FUNC) \
+ ((NPN_ReleaseVariantValueUPP) (FUNC))
+#define CallNPN_ReleaseVariantValueProc(FUNC, ARG1) \
+ (*(FUNC))((ARG1))
+
+/* NPN_SetException */
+typedef void (* NP_LOADDS NPN_SetExceptionUPP)(NPObject *obj, const NPUTF8 *message);
+#define NewNPN_SetExceptionProc(FUNC) \
+ ((NPN_SetExceptionUPP) (FUNC))
+#define CallNPN_SetExceptionProc(FUNC, ARG1, ARG2) \
+ (*(FUNC))((ARG1), (ARG2))
+
+/* NPN_PushPopupsEnabledStateUPP */
+typedef bool (* NP_LOADDS NPN_PushPopupsEnabledStateUPP)(NPP npp, NPBool enabled);
+#define NewNPN_PushPopupsEnabledStateProc(FUNC) \
+ ((NPN_PushPopupsEnabledStateUPP) (FUNC))
+#define CallNPN_PushPopupsEnabledStateProc(FUNC, ARG1, ARG2) \
+ (*(FUNC))((ARG1), (ARG2))
+
+/* NPN_PopPopupsEnabledState */
+typedef bool (* NP_LOADDS NPN_PopPopupsEnabledStateUPP)(NPP npp);
+#define NewNPN_PopPopupsEnabledStateProc(FUNC) \
+ ((NPN_PopPopupsEnabledStateUPP) (FUNC))
+#define CallNPN_PopPopupsEnabledStateProc(FUNC, ARG1) \
+ (*(FUNC))((ARG1))
+
+/* NPN_Enumerate */
+typedef bool (* NP_LOADDS NPN_EnumerateUPP)(NPP npp, NPObject *obj, NPIdentifier **identifier, uint32_t *count);
+#define NewNPN_EnumerateProc(FUNC) \
+ ((NPN_EnumerateUPP) (FUNC))
+#define CallNPN_EnumerateProc(FUNC, ARG1, ARG2, ARG3, ARG4) \
+ (*(FUNC))((ARG1), (ARG2), (ARG3), (ARG4))
+
+/* NPN_PluginThreadAsyncCall */
+typedef void (* NP_LOADDS NPN_PluginThreadAsyncCallUPP)(NPP instance, void (*func)(void *), void *userData);
+#define NewNPN_PluginThreadAsyncCallProc(FUNC) \
+ ((NPN_PluginThreadAsyncCallUPP) (FUNC))
+#define CallNPN_PluginThreadAsyncCallProc(FUNC, ARG1, ARG2, ARG3) \
+ (*(FUNC))((ARG1), (ARG2), (ARG3))
+
+/* NPN_Construct */
+typedef bool (* NP_LOADDS NPN_ConstructUPP)(NPP npp, NPObject* obj, const NPVariant *args, uint32_t argCount, NPVariant *result);
+#define NewNPN_ConstructProc(FUNC) \
+ ((NPN_ConstructUPP) (FUNC))
+#define CallNPN_ConstructProc(FUNC, ARG1, ARG2, ARG3, ARG4, ARG5) \
+ (*(FUNC))((ARG1), (ARG2), (ARG3), (ARG4), (ARG5))
+
+
+
+/******************************************************************************************
+ * The actual plugin function table definitions
+ *******************************************************************************************/
+
+typedef struct _NPPluginFuncs {
+ uint16 size;
+ uint16 version;
+ NPP_NewUPP newp;
+ NPP_DestroyUPP destroy;
+ NPP_SetWindowUPP setwindow;
+ NPP_NewStreamUPP newstream;
+ NPP_DestroyStreamUPP destroystream;
+ NPP_StreamAsFileUPP asfile;
+ NPP_WriteReadyUPP writeready;
+ NPP_WriteUPP write;
+ NPP_PrintUPP print;
+ NPP_HandleEventUPP event;
+ NPP_URLNotifyUPP urlnotify;
+ JRIGlobalRef javaClass;
+ NPP_GetValueUPP getvalue;
+ NPP_SetValueUPP setvalue;
+} NPPluginFuncs;
+
+typedef struct _NPNetscapeFuncs {
+ uint16 size;
+ uint16 version;
+ NPN_GetURLUPP geturl;
+ NPN_PostURLUPP posturl;
+ NPN_RequestReadUPP requestread;
+ NPN_NewStreamUPP newstream;
+ NPN_WriteUPP write;
+ NPN_DestroyStreamUPP destroystream;
+ NPN_StatusUPP status;
+ NPN_UserAgentUPP uagent;
+ NPN_MemAllocUPP memalloc;
+ NPN_MemFreeUPP memfree;
+ NPN_MemFlushUPP memflush;
+ NPN_ReloadPluginsUPP reloadplugins;
+ NPN_GetJavaEnvUPP getJavaEnv;
+ NPN_GetJavaPeerUPP getJavaPeer;
+ NPN_GetURLNotifyUPP geturlnotify;
+ NPN_PostURLNotifyUPP posturlnotify;
+ NPN_GetValueUPP getvalue;
+ NPN_SetValueUPP setvalue;
+ NPN_InvalidateRectUPP invalidaterect;
+ NPN_InvalidateRegionUPP invalidateregion;
+ NPN_ForceRedrawUPP forceredraw;
+ NPN_GetStringIdentifierUPP getstringidentifier;
+ NPN_GetStringIdentifiersUPP getstringidentifiers;
+ NPN_GetIntIdentifierUPP getintidentifier;
+ NPN_IdentifierIsStringUPP identifierisstring;
+ NPN_UTF8FromIdentifierUPP utf8fromidentifier;
+ NPN_IntFromIdentifierUPP intfromidentifier;
+ NPN_CreateObjectUPP createobject;
+ NPN_RetainObjectUPP retainobject;
+ NPN_ReleaseObjectUPP releaseobject;
+ NPN_InvokeUPP invoke;
+ NPN_InvokeDefaultUPP invokeDefault;
+ NPN_EvaluateUPP evaluate;
+ NPN_GetPropertyUPP getproperty;
+ NPN_SetPropertyUPP setproperty;
+ NPN_RemovePropertyUPP removeproperty;
+ NPN_HasPropertyUPP hasproperty;
+ NPN_HasMethodUPP hasmethod;
+ NPN_ReleaseVariantValueUPP releasevariantvalue;
+ NPN_SetExceptionUPP setexception;
+ NPN_PushPopupsEnabledStateUPP pushpopupsenabledstate;
+ NPN_PopPopupsEnabledStateUPP poppopupsenabledstate;
+ NPN_EnumerateUPP enumerate;
+ NPN_PluginThreadAsyncCallUPP pluginthreadasynccall;
+ NPN_ConstructUPP construct;
+} NPNetscapeFuncs;
+
+
+#ifdef XP_MACOSX
+/******************************************************************************************
+ * Mac platform-specific plugin glue stuff
+ *******************************************************************************************/
+
+/*
+ * Main entry point of the plugin.
+ * This routine will be called when the plugin is loaded. The function
+ * tables are passed in and the plugin fills in the NPPluginFuncs table
+ * and NPPShutdownUPP for Netscape's use.
+ */
+typedef NPError (* NP_LOADDS NPP_MainEntryUPP)(NPNetscapeFuncs*, NPPluginFuncs*, NPP_ShutdownUPP*);
+#define NewNPP_MainEntryProc(FUNC) \
+ ((NPP_MainEntryUPP) (FUNC))
+#define CallNPP_MainEntryProc(FUNC, netscapeFunc, pluginFunc, shutdownUPP) \
+ (*(FUNC))((netscapeFunc), (pluginFunc), (shutdownUPP))
+
+/*
+ * Mac OS X version(s) of NP_GetMIMEDescription(const char *)
+ * These can be called to retreive MIME information from the plugin dynamically
+ *
+ * Note: For compatibility with Quicktime, BPSupportedMIMEtypes is another way
+ * to get mime info from the plugin only on OSX and may not be supported
+ * in furture version -- use NP_GetMIMEDescription instead
+ */
+
+enum
+{
+ kBPSupportedMIMETypesStructVers_1 = 1
+};
+
+typedef struct _BPSupportedMIMETypes
+{
+ SInt32 structVersion; /* struct version */
+ Handle typeStrings; /* STR# formated handle, allocated by plug-in */
+ Handle infoStrings; /* STR# formated handle, allocated by plug-in */
+} BPSupportedMIMETypes;
+OSErr BP_GetSupportedMIMETypes(BPSupportedMIMETypes *mimeInfo, UInt32 flags);
+
+ /* NP_GetMIMEDescription */
+#define NP_GETMIMEDESCRIPTION_NAME "NP_GetMIMEDescription"
+typedef const char* (* NP_LOADDS NP_GetMIMEDescriptionUPP)();
+#define NewNP_GetMIMEDescEntryProc(FUNC) \
+ ((NP_GetMIMEDescriptionUPP) (FUNC))
+#define CallNP_GetMIMEDescEntryProc(FUNC) \
+ (*(FUNC))()
+
+/* BP_GetSupportedMIMETypes */
+typedef OSErr (* NP_LOADDS BP_GetSupportedMIMETypesUPP)(BPSupportedMIMETypes*, UInt32);
+#define NewBP_GetSupportedMIMETypesEntryProc(FUNC) \
+ ((BP_GetSupportedMIMETypesUPP) (FUNC))
+#define CallBP_GetMIMEDescEntryProc(FUNC, mimeInfo, flags) \
+ (*(FUNC))((mimeInfo), (flags))
+
+#endif /* XP_MACOSX */
+
+#if defined(_WINDOWS)
+#define OSCALL WINAPI
+#else
+#if defined(__OS2__)
+#define OSCALL _System
+#else
+#define OSCALL
+#endif
+#endif
+
+#if defined(XP_UNIX)
+/* GCC 3.3 and later support the visibility attribute. */
+#if defined(__GNUC__) && \
+ ((__GNUC__ >= 4) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3))
+#define NP_VISIBILITY_DEFAULT __attribute__((visibility("default")))
+#else
+#define NP_VISIBILITY_DEFAULT
+#endif
+
+#define NP_EXPORT(__type) NP_VISIBILITY_DEFAULT __type
+#endif
+
+#if defined( _WINDOWS ) || defined (__OS2__)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* plugin meta member functions */
+#if defined(__OS2__)
+
+typedef struct _NPPluginData { /* Alternate OS2 Plugin interface */
+ char *pMimeTypes;
+ char *pFileExtents;
+ char *pFileOpenTemplate;
+ char *pProductName;
+ char *pProductDescription;
+ unsigned long dwProductVersionMS;
+ unsigned long dwProductVersionLS;
+} NPPluginData;
+
+NPError OSCALL NP_GetPluginData(NPPluginData * pPluginData);
+
+#endif
+
+NPError OSCALL NP_GetEntryPoints(NPPluginFuncs* pFuncs);
+
+NPError OSCALL NP_Initialize(NPNetscapeFuncs* pFuncs);
+
+NPError OSCALL NP_Shutdown();
+
+char* NP_GetMIMEDescription();
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _WINDOWS || __OS2__ */
+
+#if defined(__OS2__)
+#pragma pack()
+#endif
+
+#ifdef XP_UNIX
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* plugin meta member functions */
+
+NP_EXPORT(char*) NP_GetMIMEDescription(void);
+NP_EXPORT(NPError) NP_Initialize(NPNetscapeFuncs*, NPPluginFuncs*);
+NP_EXPORT(NPError) NP_Shutdown(void);
+NP_EXPORT(NPError) NP_GetValue(void *future, NPPVariable aVariable, void *aValue);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* XP_UNIX */
+
+#endif /* _NPUPP_H_ */
diff --git a/browser-plugin/parole-plugin.cpp b/browser-plugin/parole-plugin.cpp
new file mode 100644
index 0000000..4441380
--- /dev/null
+++ b/browser-plugin/parole-plugin.cpp
@@ -0,0 +1,146 @@
+/*
+ * Modified version of totemPluginGlue
+ *
+ * Totem Mozilla plugin
+ *
+ * Copyright © 2004-2006 Bastien Nocera <hadess at hadess.net>
+ * Copyright © 2002 David A. Schleef <ds at schleef.org>
+ * Copyright © 2006, 2008 Christian Persch
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdio.h>
+
+#include <glib.h>
+
+#include "parole-plugin.h"
+
+NPError ParolePlugin::Init (NPMIMEType mimetype,
+ uint16_t mode,
+ int16_t argc,
+ char *argn[],
+ char *argv[],
+ NPSavedData *saved)
+{
+ g_debug ("Init");
+
+ for (int i = 0; i < argc; i++)
+ {
+ g_print ("argv[%d] %s %s\n", i, argn[i], argv[i] ? argv[i] : "");
+ }
+
+ return NPERR_NO_ERROR;
+}
+
+NPError ParolePlugin::Shutdown (void)
+{
+ return NPERR_NO_ERROR;
+}
+
+NPError ParolePlugin::Initialize (void)
+{
+ return NPERR_NO_ERROR;
+}
+
+NPError ParolePlugin::NewStream (NPMIMEType type, NPStream *stream,
+ NPBool seekable, uint16 *stype)
+{
+ g_debug ("New stream callback %s", stream->url);
+
+ if ( !url )
+ {
+ gchar *command[6];
+ gchar *socket;
+ gchar *app;
+ GError *error = NULL;
+
+ url = g_strdup (stream->url);
+
+ socket = g_strdup_printf ("%ld", window);
+
+ //app = g_build_filename (LIBEXECDIR, "parole-media-plugin", NULL);
+ app = g_strdup ("media-plugin/parole-media-plugin");
+ command[0] = app;
+ command[1] = (gchar *)"--socket-id";
+ command[2] = socket;
+ command[3] = (gchar *)"--url";
+ command[4] = url;
+ command[5] = NULL;
+
+ if ( !g_spawn_async (NULL,
+ command,
+ NULL,
+ (GSpawnFlags) 0,
+ NULL, NULL,
+ NULL,
+ &error) )
+ {
+ g_critical ("Failed to spawn command : %s", error->message);
+ g_error_free (error);
+ }
+
+ g_free (socket);
+ g_free (app);
+ }
+
+ return NPERR_NO_ERROR;
+}
+
+ParolePlugin::ParolePlugin (NPP pNPInstance)
+{
+ g_debug ("Constructor");
+ window_set = FALSE;
+ url = NULL;
+}
+
+ParolePlugin::~ParolePlugin ()
+{
+ if ( url )
+ g_free (url);
+ g_debug ("Destructor");
+}
+
+char *ParolePlugin::PluginName (void)
+{
+ return (char*)"Parole media player plugin-in";
+}
+
+char *ParolePlugin::PluginDescription (void)
+{
+ return (char*)"Media player browser plugin for various media format";
+}
+
+NPError ParolePlugin::SetWindow (NPWindow* aWindow)
+{
+ g_debug ("SetWindow");
+
+ if ( aWindow == NULL )
+ return FALSE;
+
+ if ( !window_set )
+ {
+ window = (Window) aWindow->window;
+
+ window_set = TRUE;
+ }
+
+ return NPERR_NO_ERROR;
+}
diff --git a/browser-plugin/parole-plugin.h b/browser-plugin/parole-plugin.h
new file mode 100644
index 0000000..82664de
--- /dev/null
+++ b/browser-plugin/parole-plugin.h
@@ -0,0 +1,67 @@
+/*
+ * Modified version of totemPluginGlue
+ *
+ * Totem Mozilla plugin
+ *
+ * Copyright © 2004-2006 Bastien Nocera <hadess at hadess.net>
+ * Copyright © 2002 David A. Schleef <ds at schleef.org>
+ * Copyright © 2006, 2008 Christian Persch
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA.
+ */
+
+
+#ifndef __PAROLE_PLUGIN_H__
+#define __PAROLE_PLUGIN_H__
+
+#include <npapi.h>
+#include <npruntime.h>
+#include <npupp.h>
+
+#include <gtk/gtk.h>
+
+class ParolePlugin
+{
+public:
+ ParolePlugin (NPP pNPInstance);
+
+ ~ParolePlugin (void);
+
+ static NPError Initialize (void);
+ static NPError Shutdown (void);
+
+ NPError Init (NPMIMEType mimetype,
+ uint16_t mode,
+ int16_t argc,
+ char *argn[],
+ char *argv[],
+ NPSavedData *saved);
+
+ NPError SetWindow (NPWindow* aWindow);
+
+ NPError NewStream (NPMIMEType type, NPStream *stream,
+ NPBool seekable, uint16 *stype);
+
+ static char *PluginName (void);
+ static char *PluginDescription(void);
+
+private:
+ gboolean window_set;
+ gchar *url;
+ Window window;
+};
+
+#endif // __PAROLE_PLUGIN_H__
diff --git a/browser-plugin/plugin.cpp b/browser-plugin/plugin.cpp
new file mode 100644
index 0000000..4b78bd7
--- /dev/null
+++ b/browser-plugin/plugin.cpp
@@ -0,0 +1,300 @@
+/*
+ * Taken from totemPluginGlue modified to fit our needs.
+ *
+ * Totem Mozilla plugin
+ *
+ * Copyright © 2004-2006 Bastien Nocera <hadess at hadess.net>
+ * Copyright © 2002 David A. Schleef <ds at schleef.org>
+ * Copyright © 2006, 2008 Christian Persch
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdio.h>
+#include <string.h>
+
+#include <glib.h>
+
+#include "parole-plugin.h"
+
+NPNetscapeFuncs NPNFuncs; /* used in npn_gate.cpp */
+static gchar *mime_types = NULL;
+
+static NPError
+parole_plugin_new_instance (NPMIMEType mimetype,
+ NPP instance,
+ uint16_t mode,
+ int16_t argc,
+ char *argn[],
+ char *argv[],
+ NPSavedData *savedData)
+{
+ if (!instance)
+ return NPERR_INVALID_INSTANCE_ERROR;
+
+ ParolePlugin *plugin = new ParolePlugin (instance);
+
+ if (!plugin)
+ return NPERR_OUT_OF_MEMORY_ERROR;
+
+ instance->pdata = reinterpret_cast<void*> (plugin);
+
+ NPError rv = plugin->Init (mimetype, mode, argc, argn, argv, savedData);
+
+ if (rv != NPERR_NO_ERROR)
+ {
+ delete plugin;
+ instance->pdata = 0;
+ }
+
+ return rv;
+}
+
+static NPError
+parole_plugin_destroy_instance (NPP instance,
+ NPSavedData **save)
+{
+ if (!instance)
+ return NPERR_INVALID_INSTANCE_ERROR;
+
+ ParolePlugin *plugin = reinterpret_cast<ParolePlugin*> (instance->pdata);
+
+ if (!plugin)
+ return NPERR_NO_ERROR;
+
+ delete plugin;
+
+ instance->pdata = 0;
+
+ return NPERR_NO_ERROR;
+}
+
+static NPError
+parole_plugin_set_window (NPP instance,
+ NPWindow* window)
+{
+ if (!instance)
+ return NPERR_INVALID_INSTANCE_ERROR;
+
+ ParolePlugin *plugin = reinterpret_cast<ParolePlugin*> (instance->pdata);
+
+ if (!plugin)
+ return NPERR_INVALID_INSTANCE_ERROR;
+
+ return plugin->SetWindow (window);
+}
+
+static NPError
+parole_plugin_new_stream (NPP instance,
+ NPMIMEType type,
+ NPStream* stream_ptr,
+ NPBool seekable,
+ uint16* stype)
+{
+ if (!instance)
+ return NPERR_INVALID_INSTANCE_ERROR;
+
+ ParolePlugin *plugin = reinterpret_cast<ParolePlugin*> (instance->pdata);
+
+ if (!plugin)
+ return NPERR_INVALID_INSTANCE_ERROR;
+
+ return plugin->NewStream (type, stream_ptr, seekable, stype);
+}
+
+static NPError
+parole_plugin_get_value (NPP instance,
+ NPPVariable variable,
+ void *value)
+{
+ ParolePlugin *plugin = 0;
+
+ NPError err = NPERR_NO_ERROR;
+
+ if (instance)
+ {
+ plugin = reinterpret_cast<ParolePlugin*> (instance->pdata);
+ }
+
+ /* See NPPVariable in npapi.h */
+ switch (variable)
+ {
+ case NPPVpluginNameString:
+ *((char **)value) = ParolePlugin::PluginName ();
+ break;
+ case NPPVpluginDescriptionString:
+ *((char **)value) = ParolePlugin::PluginDescription ();
+ break;
+ case NPPVpluginNeedsXEmbed:
+ // FIXMEchpe fix webkit which passes a (unsigned int*) here...
+ *((NPBool *)value) = TRUE;
+ break;
+ case NPPVpluginScriptableIID:
+ case NPPVpluginScriptableInstance:
+ /* XPCOM scripting, obsolete */
+ err = NPERR_GENERIC_ERROR;
+ break;
+ default:
+ err = NPERR_INVALID_PARAM;
+ break;
+ }
+
+ return err;
+}
+
+static NPError
+parole_plugin_set_value (NPP instance,
+ NPNVariable variable,
+ void *value)
+{
+ return NPERR_NO_ERROR;
+}
+
+NPError NP_Initialize (NPNetscapeFuncs *aMozillaVTable, NPPluginFuncs *aPluginVTable)
+{
+ g_debug ("Initialize");
+
+ if (aMozillaVTable == NULL || aPluginVTable == NULL)
+ return NPERR_INVALID_FUNCTABLE_ERROR;
+
+ if ((aMozillaVTable->version >> 8) > NP_VERSION_MAJOR)
+ return NPERR_INCOMPATIBLE_VERSION_ERROR;
+
+ if (aMozillaVTable->size < sizeof (NPNetscapeFuncs))
+ return NPERR_INVALID_FUNCTABLE_ERROR;
+
+ if (aPluginVTable->size < sizeof (NPPluginFuncs))
+ return NPERR_INVALID_FUNCTABLE_ERROR;
+
+ /* Copy the function table. We can use memcpy here since we've already
+ * established that the aMozillaVTable is at least as big as the compile-
+ * time NPNetscapeFuncs.
+ */
+ memcpy (&NPNFuncs, aMozillaVTable, sizeof (NPNetscapeFuncs));
+ NPNFuncs.size = sizeof (NPNetscapeFuncs);
+
+
+ aPluginVTable->size = sizeof (NPPluginFuncs);
+ aPluginVTable->version = (NP_VERSION_MAJOR << 8) + NP_VERSION_MINOR;
+ aPluginVTable->newp = NewNPP_NewProc (parole_plugin_new_instance);
+ aPluginVTable->destroy = NewNPP_DestroyProc (parole_plugin_destroy_instance);
+ aPluginVTable->setwindow = NewNPP_SetWindowProc (parole_plugin_set_window);
+ aPluginVTable->newstream = NewNPP_NewStreamProc (parole_plugin_new_stream);
+
+ aPluginVTable->javaClass = NULL;
+ aPluginVTable->getvalue = NewNPP_GetValueProc (parole_plugin_get_value);
+ aPluginVTable->setvalue = NewNPP_SetValueProc (parole_plugin_set_value);
+
+ return ParolePlugin::Initialize ();
+}
+
+NPError NP_Shutdown (void)
+{
+ if ( mime_types )
+ g_free (mime_types);
+
+ return ParolePlugin::Shutdown ();
+}
+
+NPError NP_GetValue (void *future, NPPVariable var, void *value)
+{
+ return parole_plugin_get_value (NULL, var, value);
+}
+
+char *NP_GetMIMEDescription ()
+{
+ if ( mime_types != NULL )
+ return mime_types;
+
+ const gchar *mime_types_list = /* Wmp mime types */
+ "application/asx:*:Media Files;"
+ "video/x-ms-asf-plugin:*:Media Files;"
+ "video/x-msvideo:avi,*:AVI;"
+ "video/msvideo:avi,*:AVI;"
+ "application/x-mplayer2:*:Media Files;"
+ "application/x-ms-wmv:wmv,*:Microsoft WMV video;"
+ "video/x-ms-asf:asf,asx,*:Media Files;"
+ "video/x-ms-wm:wm,*:Media Files;"
+ "video/x-ms-wmv:wmv,*:Microsoft WMV video;"
+ "audio/x-ms-wmv:wmv,*:Windows Media;"
+ "video/x-ms-wmp:wmp,*:Windows Media;"
+ "application/x-ms-wmp:wmp,*:Windows Media;"
+ "video/x-ms-wvx:wvx,*:Windows Media;"
+ "audio/x-ms-wax:wax,*:Windows Media;"
+ "audio/x-ms-wma:wma,*:Windows Media;"
+ "application/x-drm-v2:asx,*:Windows Media;"
+ "audio/wav:wav,*:Microsoft wave file;"
+ "audio/x-wav:wav,*:Microsoft wave file;"
+ /* Standard mime types */
+ "audio/x-mpegurl:m3u:MPEG Playlist;"
+ "video/mpeg:mpg,mpeg:MPEG;"
+ "audio/mpeg:mpg,mpeg:MPEG;"
+ "video/x-mpeg:mpg,mpeg:MPEG;"
+ "video/x-mpeg2:mpv2,mp2ve:MPEG2;"
+ "audio/mpeg:mpg,mpeg:MPEG;"
+ "audio/x-mpeg:mpg,mpeg:MPEG;"
+ "audio/mpeg2:mp2:MPEG audio;"
+ "audio/x-mpeg2:mp2:MPEG audio;"
+ "audio/mp4:mp4:MPEG 4 audio;"
+ "audio/x-mp4:mp4:MPEG 4 audio;"
+ "video/mp4:mp4:MPEG 4 Video;"
+ "video/x-m4v:m4v:MPEG 4 Video;"
+ "video/3gpp:mp4,3gp:MPEG 4 Video;"
+ "application/x-ogg:ogg:Ogg Vorbis Media;"
+ "audio/flac:ogg:FLAC Lossless Audio;"
+ "audio/x-flac:ogg:FLAC Lossless Audio;"
+ "audio/ogg:ogg:Ogg Vorbis Audio;"
+ "audio/ogg:x-ogg:Ogg Vorbis Audio;"
+ "application/ogg:ogg:Ogg Vorbis / Ogg Theora;"
+ "video/ogg:ogg:Ogg Vorbis Video;"
+ "video/ogg:x-ogg:Ogg Vorbis Video;"
+ /* Real audio */
+ "audio/x-pn-realaudio:ram,rm:RealAudio;"
+ "application/vnd.rn-realmedia:rm:RealMedia;"
+ "application/vnd.rn-realaudio:ra,ram:RealAudio;"
+ "video/vnd.rn-realvideo:rv:RealVideo;"
+ "audio/x-realaudio:ra:RealAudio;"
+ "audio/x-pn-realaudio-plugin:rpm:RealAudio;"
+ "application/smil:smil:SMIL;"
+ /* DivX Mime type */
+ "video/divx:divx:DivX Media Format;"
+ "video/vnd.divx:divx:DivX Media Format;"
+ /*Quick time */
+ "video/quicktime:mov:Quicktime;"
+ "video/x-quicktime:mov:Quicktime;"
+ "image/x-quicktime:mov:Quicktime;"
+ "video/quicktime:mp4:Quicktime;"
+ "video/quicktime:sdp:Quicktime - Session Description Protocol;"
+ "application/x-quicktimeplayer:mov:Quicktime;";
+
+ g_debug ("GetMimeDescription");
+
+ mime_types = g_strdup (mime_types_list);
+
+ return mime_types;
+}
+
+NPError NPP_NewStream (NPP instance, NPMIMEType type, NPStream *stream,
+ NPBool seekable, uint16 *stype)
+{
+ g_debug ("New stream callback %s", stream->url);
+
+ return NPERR_NO_ERROR;
+}
diff --git a/browser-plugin/plugin.symbols b/browser-plugin/plugin.symbols
new file mode 100644
index 0000000..c13252c
--- /dev/null
+++ b/browser-plugin/plugin.symbols
@@ -0,0 +1,4 @@
+NP_GetMIMEDescription
+NP_GetValue
+NP_Initialize
+NP_Shutdown
diff --git a/configure.ac.in b/configure.ac.in
index c987568..fe02ad7 100644
--- a/configure.ac.in
+++ b/configure.ac.in
@@ -33,6 +33,7 @@ AC_PROG_INTLTOOL([intltool_minimum_version], [no-xml])
# ===================================================== #
AC_DISABLE_STATIC()
AC_PROG_LIBTOOL()
+m4_ifdef([LT_OUTPUT], [LT_OUTPUT])
# ===================================================== #
# Version information #
@@ -194,9 +195,9 @@ AC_MSG_CHECKING([whether to build the browser plugin])
AM_CONDITIONAL([ENABLE_BROWSER_PLUGIN], [test x"$ac_browser_plugin" = x"yes"])
AC_MSG_RESULT([$ac_browser_plugin])
if test x"$ac_browser_plugin" = x"yes"; then
- XDT_CHECK_PACKAGE([GECKO], [libxul], [])
BROWSER_PLUGIN_DIR="${BROWSER_PLUGIN_DIR:-"\${libdir}/mozilla/plugins"}"
AC_ARG_VAR([BROWSER_PLUGIN_DIR],[Where to install the browser plugin])
+ AC_DEFINE(BUILD_BROWSER_PLUGIN, 1, [whether to build with browser plugin support])
fi
#=======================================================#
@@ -226,6 +227,7 @@ plugins/properties/Makefile
plugins/tray/Makefile
plugins/window-title/Makefile
browser-plugin/Makefile
+browser-plugin/media-plugin/Makefile
docs/Makefile
docs/plugin-api/version.xml
docs/plugin-api/Makefile
diff --git a/data/interfaces/Makefile.am b/data/interfaces/Makefile.am
index dbb3922..e8851b7 100644
--- a/data/interfaces/Makefile.am
+++ b/data/interfaces/Makefile.am
@@ -4,7 +4,8 @@ interfaces = \
playlist.ui \
mediachooser.ui \
save-playlist.ui \
- plugins.ui
+ plugins.ui \
+ browser-plugin-control.ui
interfaces_h = \
$(interfaces:.ui=_ui.h)
@@ -30,6 +31,9 @@ save-playlist_ui.h: save-playlist.ui
plugins_ui.h: plugins.ui
exo-csource --static --strip-comments --strip-content --name=plugins_ui $< > $@
+browser-plugin-control_ui.h: browser-plugin-control.ui
+ exo-csource --static --strip-comments --strip-content --name=browser_plugin_control_ui $< > $@
+
endif
CLEANFILES = \
diff --git a/data/interfaces/browser-plugin-control.ui b/data/interfaces/browser-plugin-control.ui
new file mode 100644
index 0000000..8fc2c38
--- /dev/null
+++ b/data/interfaces/browser-plugin-control.ui
@@ -0,0 +1,4 @@
+<?xml version="1.0"?>
+<interface>
+ <!-- interface-naming-policy project-wide -->
+</interface>
diff --git a/parole/Makefile.am b/parole/Makefile.am
index f99ace4..5129d92 100644
--- a/parole/Makefile.am
+++ b/parole/Makefile.am
@@ -135,6 +135,8 @@ parole_glib_enum_headers = \
parole-stream.h \
parole-conf.h
+# Parole Browser Player plugin
+
if MAINTAINER_MODE
BUILT_SOURCES = \
diff --git a/parole/main.c b/parole/main.c
index 80ee5b7..eb52f74 100644
--- a/parole/main.c
+++ b/parole/main.c
@@ -204,6 +204,8 @@ int main (int argc, char **argv)
xfce_textdomain (GETTEXT_PACKAGE, LOCALEDIR, "UTF-8");
+ g_set_application_name (PACKAGE_NAME);
+
gtk_init (&argc, &argv);
ctx = g_option_context_new (NULL);
diff --git a/parole/parole-gst.c b/parole/parole-gst.c
index 57dd8af..5a177e8 100644
--- a/parole/parole-gst.c
+++ b/parole/parole-gst.c
@@ -41,7 +41,6 @@
#include "parole-gst.h"
#include "parole-utils.h"
#include "parole-conf.h"
-#include "parole-utils.h"
#include "parole-debug.h"
#include "enum-gtypes.h"
#include "gmarshal.h"
diff --git a/parole/parole-gst.h b/parole/parole-gst.h
index a51be66..08265d6 100644
--- a/parole/parole-gst.h
+++ b/parole/parole-gst.h
@@ -135,6 +135,7 @@ gdouble parole_gst_get_stream_position (ParoleGst *gst);
gboolean parole_gst_get_is_xvimage_sink (ParoleGst *gst);
+
G_END_DECLS
#endif /* __PAROLE_GST_H */
More information about the Xfce4-commits
mailing list