summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Persch <chpe@src.gnome.org>2008-05-30 17:35:08 +0000
committerChristian Persch <chpe@src.gnome.org>2008-05-30 17:35:08 +0000
commitc61c1858d3fda33b8e78322b878ca207e6e9e20d (patch)
tree2777c9a2595083ccbe6497b83d8bad1a062eca6a
parentf6b476584c44a5efc3ae34d1ca5a8de0aff943f7 (diff)
Bug 520629 – deCOMtaminate plugins
svn path=/trunk/; revision=5441
-rw-r--r--.gitignore55
-rw-r--r--bindings/python/totem.override1
-rw-r--r--browser-plugin/Makefile.am285
-rw-r--r--browser-plugin/idl/Makefile.am126
-rw-r--r--browser-plugin/marshal.list (renamed from browser-plugin/totempluginviewer-marshal.list)0
-rw-r--r--browser-plugin/npapi.h807
-rw-r--r--browser-plugin/npruntime.h351
-rw-r--r--browser-plugin/npupp.h719
-rw-r--r--browser-plugin/test-glow-button.c2
-rw-r--r--browser-plugin/totem-glow-button.c6
-rw-r--r--browser-plugin/totem-glow-button.h6
-rw-r--r--browser-plugin/totem-plugin-viewer.c53
-rw-r--r--browser-plugin/totemBasicPlugin.cpp137
-rw-r--r--browser-plugin/totemBasicPlugin.h42
-rw-r--r--browser-plugin/totemClassInfo.h114
-rw-r--r--browser-plugin/totemComplexPlayer.cpp310
-rw-r--r--browser-plugin/totemComplexPlayer.h165
-rw-r--r--browser-plugin/totemComplexPlugin.cpp27
-rw-r--r--browser-plugin/totemComplexPlugin.h7
-rw-r--r--browser-plugin/totemCone.cpp118
-rw-r--r--browser-plugin/totemCone.h59
-rw-r--r--browser-plugin/totemConeAudio.cpp139
-rw-r--r--browser-plugin/totemConeAudio.h58
-rw-r--r--browser-plugin/totemConeInput.cpp121
-rw-r--r--browser-plugin/totemConeInput.h53
-rw-r--r--browser-plugin/totemConePlaylist.cpp131
-rw-r--r--browser-plugin/totemConePlaylist.h60
-rw-r--r--browser-plugin/totemConePlaylistItems.cpp95
-rw-r--r--browser-plugin/totemConePlaylistItems.h52
-rw-r--r--browser-plugin/totemConePlugin.cpp627
-rw-r--r--browser-plugin/totemConePlugin.h72
-rw-r--r--browser-plugin/totemConeVideo.cpp136
-rw-r--r--browser-plugin/totemConeVideo.h61
-rw-r--r--browser-plugin/totemDebug.h46
-rw-r--r--browser-plugin/totemGMPControls.cpp200
-rw-r--r--browser-plugin/totemGMPControls.h71
-rw-r--r--browser-plugin/totemGMPError.cpp200
-rw-r--r--browser-plugin/totemGMPError.h50
-rw-r--r--browser-plugin/totemGMPErrorItem.cpp89
-rw-r--r--browser-plugin/totemGMPErrorItem.h51
-rw-r--r--browser-plugin/totemGMPNetwork.cpp171
-rw-r--r--browser-plugin/totemGMPNetwork.h81
-rw-r--r--browser-plugin/totemGMPPlayer.cpp314
-rw-r--r--browser-plugin/totemGMPPlayer.h82
-rw-r--r--browser-plugin/totemGMPPlaylist.cpp276
-rw-r--r--browser-plugin/totemGMPPlaylist.h61
-rw-r--r--browser-plugin/totemGMPPlugin.cpp739
-rw-r--r--browser-plugin/totemGMPPlugin.h70
-rw-r--r--browser-plugin/totemGMPSettings.cpp470
-rw-r--r--browser-plugin/totemGMPSettings.h60
-rw-r--r--browser-plugin/totemMullYPlugin.cpp647
-rw-r--r--browser-plugin/totemMullYPlugin.h101
-rw-r--r--browser-plugin/totemNPClass.cpp207
-rw-r--r--browser-plugin/totemNPClass.h156
-rw-r--r--browser-plugin/totemNPNGlue.cpp303
-rw-r--r--browser-plugin/totemNPObject.cpp584
-rw-r--r--browser-plugin/totemNPObject.h201
-rw-r--r--browser-plugin/totemNPObjectWrapper.h124
-rw-r--r--browser-plugin/totemNPVariantWrapper.h112
-rw-r--r--browser-plugin/totemNarrowSpacePlugin.cpp1464
-rw-r--r--browser-plugin/totemNarrowSpacePlugin.h141
-rw-r--r--browser-plugin/totemPlugin.cpp1397
-rw-r--r--browser-plugin/totemPlugin.h376
-rw-r--r--browser-plugin/totemPluginGlue.cpp245
-rw-r--r--browser-plugin/totemPluginGlue.h42
-rw-r--r--browser-plugin/totemStringGlue.h58
-rw-r--r--configure.in206
-rw-r--r--src/plugins/bemused/totem-bemused.c1
68 files changed, 8922 insertions, 5469 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 00000000..9089f280
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,55 @@
+INSTALL
+Makefile.in
+aclocal.m4
+autom4te.cache
+bindings/Makefile.in
+bindings/python/Makefile.in
+bindings/vala/Makefile.in
+browser-plugin/Makefile.in
+compile
+config.guess
+config.h.in
+config.sub
+configure
+data/Makefile.in
+data/icons/16x16/Makefile.in
+data/icons/22x22/Makefile.in
+data/icons/24x24/Makefile.in
+data/icons/32x32/Makefile.in
+data/icons/48x48/Makefile.in
+data/icons/Makefile.in
+data/icons/scalable/Makefile.in
+depcomp
+gnome-doc-utils.make
+help/Makefile.in
+help/bg/Makefile.in
+install-sh
+intltool-extract.in
+intltool-merge.in
+intltool-update.in
+lib/Makefile.in
+ltmain.sh
+missing
+mkinstalldirs
+po/Makefile.in.in
+src/Makefile.in
+src/backend/Makefile.in
+src/plugins/Makefile.in
+src/plugins/bemused/Makefile.in
+src/plugins/galago/Makefile.in
+src/plugins/gromit/Makefile.in
+src/plugins/lirc/Makefile.in
+src/plugins/media-player-keys/Makefile.in
+src/plugins/mythtv/Makefile.in
+src/plugins/ontop/Makefile.in
+src/plugins/properties/Makefile.in
+src/plugins/publish/Makefile.in
+src/plugins/sample-python/Makefile.in
+src/plugins/sample-vala/Makefile.in
+src/plugins/screensaver/Makefile.in
+src/plugins/sidebar-test/Makefile.in
+src/plugins/skipto/Makefile.in
+src/plugins/thumbnail/Makefile.in
+src/plugins/totem/Makefile.in
+src/plugins/tracker/Makefile.in
+src/plugins/youtube/Makefile.in
diff --git a/bindings/python/totem.override b/bindings/python/totem.override
index 23660a75..05987b03 100644
--- a/bindings/python/totem.override
+++ b/bindings/python/totem.override
@@ -9,6 +9,7 @@ headers
#include "override_common.h"
#include "totem.h"
+#include "totem-interface.h"
#include "totem-cell-renderer-video.h"
#include "totem-video-list.h"
#include "totem-disc.h"
diff --git a/browser-plugin/Makefile.am b/browser-plugin/Makefile.am
index 001bdb56..4327b044 100644
--- a/browser-plugin/Makefile.am
+++ b/browser-plugin/Makefile.am
@@ -1,67 +1,60 @@
-SUBDIRS = idl
-
-plugindir = $(MOZILLA_PLUGINDIR)
+plugindir = $(BROWSER_PLUGIN_DIR)
plugin_LTLIBRARIES =
-BUILT_SOURCES =
-
EXTRA_DIST = \
plugin.symbols \
+ marshal.list \
TODO \
README.browser-plugin
-CLEANFILES = $(BUILT_SOURCES)
+BUILT_SOURCES =
-gecko_include_subdirs = \
- . \
- docshell \
- dom \
- necko \
- xpcom
+CLEANFILES = $(BUILT_SOURCES)
# Marshaller
-MARSHALFILES = totempluginviewer-marshal.h totempluginviewer-marshal.c
-BUILT_SOURCES += $(MARSHALFILES)
+BUILT_SOURCES += \
+ marshal.h \
+ marshal.c \
+ $(NULL)
-totempluginviewer-marshal.h: totempluginviewer-marshal.list
- $(GLIB_GENMARSHAL) --prefix=totempluginviewer_marshal --header $< > $@
-totempluginviewer-marshal.c: totempluginviewer-marshal.list
- $(GLIB_GENMARSHAL) --prefix=totempluginviewer_marshal --body --header $< > $@
+marshal.h: marshal.list
+ $(GLIB_GENMARSHAL) --prefix=totempluginviewer_marshal --internal --header $< > $@
+marshal.c: marshal.list
+ $(GLIB_GENMARSHAL) --prefix=totempluginviewer_marshal --internal --body --header $< > $@
-noinst_LTLIBRARIES = libtotempluginviewer_helper.la
+noinst_LTLIBRARIES = libtotembrowserplugin_helper.la
-libtotempluginviewer_helper_la_SOURCES = \
- totempluginviewer-marshal.h \
- totempluginviewer-marshal.c \
- totem-glow-button.c \
- totem-glow-button.h
+libtotembrowserplugin_helper_la_SOURCES = \
+ marshal.h \
+ marshal.c \
+ $(NULL)
-libtotempluginviewer_helper_la_CPPFLAGS = \
+libtotembrowserplugin_helper_la_CPPFLAGS = \
$(DISABLE_DEPRECATED) \
$(AM_CPPFLAGS)
-libtotempluginviewer_helper_la_CFLAGS = \
+libtotembrowserplugin_helper_la_CFLAGS = \
$(EXTRA_GNOME_CFLAGS) \
$(WARN_CFLAGS) \
$(AM_CFLAGS)
-libtotempluginviewer_helper_la_LIBADD = \
+libtotembrowserplugin_helper_la_LIBADD = \
$(EXTRA_GNOME_CFLAGS) \
$(WARN_CFLAGS) \
$(AM_CFLAGS)
-EXTRA_DIST += \
- totempluginviewer-marshal.list
-
# The Glow button test program
noinst_PROGRAMS = test-glow-button
-test_glow_button_SOURCES = test-glow-button.c
+test_glow_button_SOURCES = \
+ totem-glow-button.c \
+ totem-glow-button.h \
+ test-glow-button.c
-test_glow_button_LDADD = \
- libtotempluginviewer_helper.la \
+test_glow_button_LDADD = \
+ libtotembrowserplugin_helper.la \
$(EXTRA_GNOME_LIBS)
test_glow_button_CFLAGS = \
@@ -78,10 +71,13 @@ test_glow_button_CPPFLAGS = \
libexec_PROGRAMS = totem-plugin-viewer
totem_plugin_viewer_SOURCES = \
+ totem-glow-button.c \
+ totem-glow-button.h \
totem-plugin-viewer.c \
totem-plugin-viewer-interface.h \
totem-plugin-viewer-constants.h \
- totem-plugin-viewer-options.h
+ totem-plugin-viewer-options.h \
+ $(NULL)
totem_plugin_viewer_CPPFLAGS = \
-D_REENTRANT \
@@ -96,7 +92,6 @@ totem_plugin_viewer_CPPFLAGS = \
-DGCONF_PREFIX="\"/apps/totem\"" \
-DDATADIR="\"$(datadir)\"" \
-DLIBEXECDIR="\"$(libexecdir)\"" \
- -DBINDIR="\"$(bindir)\"" \
-DSHAREDIR="\"$(pkgdatadir)\"" \
-DLOGO_NAME="\"totem_logo.png\"" \
-DG_LOG_DOMAIN=\""TotemEmbedded\"" \
@@ -115,7 +110,7 @@ totem_plugin_viewer_LDADD = \
$(top_builddir)/src/backend/libbaconvideowidget.la \
$(top_builddir)/src/libtotem_player.la \
$(top_builddir)/lib/libtotemscrsaver.la \
- libtotempluginviewer_helper.la \
+ libtotembrowserplugin_helper.la \
$(EXTRA_GNOME_LIBS) \
$(SN_LIBS) \
$(XVIDMODE_LIBS) \
@@ -140,15 +135,21 @@ if ENABLE_BASIC_PLUGIN
plugin_LTLIBRARIES += libtotem-basic-plugin.la
libtotem_basic_plugin_la_SOURCES = \
- totemDebug.h \
+ npapi.h \
+ npruntime.h \
+ npupp.h \
+ totemNPNGlue.cpp \
+ totemNPClass.cpp \
+ totemNPClass.h \
+ totemNPObject.cpp \
+ totemNPObject.h \
+ totemNPObjectWrapper.h \
+ totemNPVariantWrapper.h \
totemPluginGlue.cpp \
- totemPluginGlue.h \
totemPlugin.cpp \
totemPlugin.h \
- totemStringGlue.h \
totemBasicPlugin.cpp \
totemBasicPlugin.h \
- totemClassInfo.h \
totem-plugin-viewer-constants.h
libtotem_basic_plugin_la_CPPFLAGS = \
@@ -156,34 +157,28 @@ libtotem_basic_plugin_la_CPPFLAGS = \
-I$(top_srcdir)/src/backend \
-I$(top_builddir)/src \
-I$(top_builddir)/src/backend \
- -Iidl \
- $(addprefix -I$(MOZILLA_INCLUDE_ROOT)/,$(gecko_include_subdirs)) \
+ -DXP_UNIX \
+ -DMOZ_X11 \
-DTOTEM_BASIC_PLUGIN \
-DTOTEM_PL_PARSER_MINI \
-D_REENTRANT \
-DDBUS_API_SUBJECT_TO_CHANGE \
- -DGNOMELOCALEDIR="\"$(datadir)/locale\"" \
- -DGCONF_PREFIX="\"/apps/totem\"" \
-DSYSCONFDIR="\"$(sysconfdir)\"" \
- -DDATADIR="\"$(pkgdatadir)\"" \
-DLIBEXECDIR="\"$(libexecdir)\"" \
- -DBINDIR="\"$(bindir)\"" \
$(DISABLE_DEPRECATED) \
$(AM_CPPFLAGS)
libtotem_basic_plugin_la_CXXFLAGS = \
$(BROWSER_PLUGIN_CFLAGS) \
- $(MOZILLA_XPCOM_CFLAGS) \
$(DBUS_CFLAGS) \
$(WARN_CXXFLAGS) \
$(PLUGIN_EXTRA_WARN_CXXFLAGS) \
$(AM_CXXFLAGS)
-libtotem_basic_plugin_la_LIBADD = \
- libtotempluginviewer_helper.la \
- $(DBUS_LIBS) \
- $(BROWSER_PLUGIN_LIBS) \
- $(LIBXPCOMGLUE_S)
+libtotem_basic_plugin_la_LIBADD = \
+ libtotembrowserplugin_helper.la \
+ $(DBUS_LIBS) \
+ $(BROWSER_PLUGIN_LIBS)
libtotem_basic_plugin_la_LDFLAGS = \
-avoid-version \
@@ -200,21 +195,30 @@ if ENABLE_GMP_PLUGIN
plugin_LTLIBRARIES += libtotem-gmp-plugin.la
libtotem_gmp_plugin_la_SOURCES = \
- totemDebug.h \
+ npapi.h \
+ npruntime.h \
+ npupp.h \
+ totemNPNGlue.cpp \
+ totemNPClass.cpp \
+ totemNPClass.h \
+ totemNPObject.cpp \
+ totemNPObject.h \
+ totemNPObjectWrapper.h \
+ totemGMPControls.cpp \
+ totemGMPControls.h \
totemGMPError.cpp \
totemGMPError.h \
+ totemGMPNetwork.cpp \
+ totemGMPNetwork.h \
+ totemGMPPlayer.cpp \
+ totemGMPPlayer.h \
totemGMPPlaylist.cpp \
totemGMPPlaylist.h \
totemGMPSettings.cpp \
totemGMPSettings.h \
totemPluginGlue.cpp \
- totemPluginGlue.h \
totemPlugin.cpp \
totemPlugin.h \
- totemStringGlue.h \
- totemGMPPlugin.cpp \
- totemGMPPlugin.h \
- totemClassInfo.h \
totem-plugin-viewer-constants.h
libtotem_gmp_plugin_la_CPPFLAGS = \
@@ -222,34 +226,28 @@ libtotem_gmp_plugin_la_CPPFLAGS = \
-I$(top_srcdir)/src/backend \
-I$(top_builddir)/src \
-I$(top_builddir)/src/backend \
- -Iidl \
- $(addprefix -I$(MOZILLA_INCLUDE_ROOT)/,$(gecko_include_subdirs)) \
+ -DXP_UNIX \
+ -DMOZ_X11 \
-DTOTEM_GMP_PLUGIN \
-DTOTEM_PL_PARSER_MINI \
-D_REENTRANT \
-DDBUS_API_SUBJECT_TO_CHANGE \
- -DGNOMELOCALEDIR="\"$(datadir)/locale\"" \
- -DGCONF_PREFIX="\"/apps/totem\"" \
-DSYSCONFDIR="\"$(sysconfdir)\"" \
- -DDATADIR="\"$(pkgdatadir)\"" \
-DLIBEXECDIR="\"$(libexecdir)\"" \
- -DBINDIR="\"$(bindir)\"" \
$(DISABLE_DEPRECATED) \
$(AM_CPPFLAGS)
libtotem_gmp_plugin_la_CXXFLAGS = \
$(BROWSER_PLUGIN_CFLAGS) \
- $(MOZILLA_XPCOM_CFLAGS) \
$(DBUS_CFLAGS) \
$(WARN_CXXFLAGS) \
$(PLUGIN_EXTRA_WARN_CXXFLAGS) \
$(AM_CXXFLAGS)
-libtotem_gmp_plugin_la_LIBADD = \
- libtotempluginviewer_helper.la \
- $(DBUS_LIBS) \
- $(BROWSER_PLUGIN_LIBS) \
- $(LIBXPCOMGLUE_S)
+libtotem_gmp_plugin_la_LIBADD = \
+ libtotembrowserplugin_helper.la \
+ $(DBUS_LIBS) \
+ $(BROWSER_PLUGIN_LIBS)
libtotem_gmp_plugin_la_LDFLAGS = \
-avoid-version \
@@ -266,15 +264,21 @@ if ENABLE_COMPLEX_PLUGIN
plugin_LTLIBRARIES += libtotem-complex-plugin.la
libtotem_complex_plugin_la_SOURCES = \
- totemDebug.h \
+ npapi.h \
+ npruntime.h \
+ npupp.h \
+ totemNPNGlue.cpp \
+ totemNPClass.cpp \
+ totemNPClass.h \
+ totemNPObject.cpp \
+ totemNPObject.h \
+ totemNPObjectWrapper.h \
+ totemNPVariantWrapper.h \
totemPluginGlue.cpp \
- totemPluginGlue.h \
totemPlugin.cpp \
totemPlugin.h \
- totemStringGlue.h \
- totemComplexPlugin.cpp \
- totemComplexPlugin.h \
- totemClassInfo.h \
+ totemComplexPlayer.cpp \
+ totemComplexPlayer.h \
totem-plugin-viewer-constants.h
libtotem_complex_plugin_la_CPPFLAGS = \
@@ -282,34 +286,28 @@ libtotem_complex_plugin_la_CPPFLAGS = \
-I$(top_srcdir)/src/backend \
-I$(top_builddir)/src \
-I$(top_builddir)/src/backend \
- -Iidl \
- $(addprefix -I$(MOZILLA_INCLUDE_ROOT)/,$(gecko_include_subdirs)) \
+ -DXP_UNIX \
+ -DMOZ_X11 \
-DTOTEM_COMPLEX_PLUGIN \
-DTOTEM_PL_PARSER_MINI \
-D_REENTRANT \
-DDBUS_API_SUBJECT_TO_CHANGE \
- -DGNOMELOCALEDIR="\"$(datadir)/locale\"" \
- -DGCONF_PREFIX="\"/apps/totem\"" \
-DSYSCONFDIR="\"$(sysconfdir)\"" \
- -DDATADIR="\"$(pkgdatadir)\"" \
-DLIBEXECDIR="\"$(libexecdir)\"" \
- -DBINDIR="\"$(bindir)\"" \
$(DISABLE_DEPRECATED) \
$(AM_CPPFLAGS)
libtotem_complex_plugin_la_CXXFLAGS = \
$(BROWSER_PLUGIN_CFLAGS) \
- $(MOZILLA_XPCOM_CFLAGS) \
$(DBUS_CFLAGS) \
$(WARN_CXXFLAGS) \
$(PLUGIN_EXTRA_WARN_CXXFLAGS) \
$(AM_CXXFLAGS)
-libtotem_complex_plugin_la_LIBADD = \
- libtotempluginviewer_helper.la \
- $(DBUS_LIBS) \
- $(BROWSER_PLUGIN_LIBS) \
- $(LIBXPCOMGLUE_S)
+libtotem_complex_plugin_la_LIBADD = \
+ libtotembrowserplugin_helper.la \
+ $(DBUS_LIBS) \
+ $(BROWSER_PLUGIN_LIBS)
libtotem_complex_plugin_la_LDFLAGS = \
-avoid-version \
@@ -326,15 +324,21 @@ if ENABLE_NARROWSPACE_PLUGIN
plugin_LTLIBRARIES += libtotem-narrowspace-plugin.la
libtotem_narrowspace_plugin_la_SOURCES = \
- totemDebug.h \
+ npapi.h \
+ npruntime.h \
+ npupp.h \
+ totemNPNGlue.cpp \
+ totemNPClass.cpp \
+ totemNPClass.h \
+ totemNPObject.cpp \
+ totemNPObject.h \
+ totemNPObjectWrapper.h \
+ totemNPVariantWrapper.h \
totemPluginGlue.cpp \
- totemPluginGlue.h \
totemPlugin.cpp \
totemPlugin.h \
- totemStringGlue.h \
totemNarrowSpacePlugin.cpp \
totemNarrowSpacePlugin.h \
- totemClassInfo.h \
totem-plugin-viewer-constants.h
libtotem_narrowspace_plugin_la_CPPFLAGS = \
@@ -342,34 +346,28 @@ libtotem_narrowspace_plugin_la_CPPFLAGS = \
-I$(top_srcdir)/src/backend \
-I$(top_builddir)/src \
-I$(top_builddir)/src/backend \
- -Iidl \
- $(addprefix -I$(MOZILLA_INCLUDE_ROOT)/,$(gecko_include_subdirs)) \
+ -DXP_UNIX \
+ -DMOZ_X11 \
-DTOTEM_NARROWSPACE_PLUGIN \
-DTOTEM_PL_PARSER_MINI \
-D_REENTRANT \
-DDBUS_API_SUBJECT_TO_CHANGE \
- -DGNOMELOCALEDIR="\"$(datadir)/locale\"" \
- -DGCONF_PREFIX="\"/apps/totem\"" \
-DSYSCONFDIR="\"$(sysconfdir)\"" \
- -DDATADIR="\"$(pkgdatadir)\"" \
-DLIBEXECDIR="\"$(libexecdir)\"" \
- -DBINDIR="\"$(bindir)\"" \
$(DISABLE_DEPRECATED) \
$(AM_CPPFLAGS)
libtotem_narrowspace_plugin_la_CXXFLAGS = \
$(BROWSER_PLUGIN_CFLAGS) \
- $(MOZILLA_XPCOM_CFLAGS) \
$(DBUS_CFLAGS) \
$(WARN_CXXFLAGS) \
$(PLUGIN_EXTRA_WARN_CXXFLAGS) \
$(AM_CXXFLAGS)
-libtotem_narrowspace_plugin_la_LIBADD = \
- libtotempluginviewer_helper.la \
- $(DBUS_LIBS) \
- $(BROWSER_PLUGIN_LIBS) \
- $(LIBXPCOMGLUE_S)
+libtotem_narrowspace_plugin_la_LIBADD = \
+ libtotembrowserplugin_helper.la \
+ $(DBUS_LIBS) \
+ $(BROWSER_PLUGIN_LIBS)
libtotem_narrowspace_plugin_la_LDFLAGS = \
-avoid-version \
@@ -386,15 +384,21 @@ if ENABLE_MULLY_PLUGIN
plugin_LTLIBRARIES += libtotem-mully-plugin.la
libtotem_mully_plugin_la_SOURCES = \
- totemDebug.h \
+ npapi.h \
+ npruntime.h \
+ npupp.h \
+ totemNPNGlue.cpp \
+ totemNPClass.cpp \
+ totemNPClass.h \
+ totemNPObject.cpp \
+ totemNPObject.h \
+ totemNPObjectWrapper.h \
+ totemNPVariantWrapper.h \
totemPluginGlue.cpp \
- totemPluginGlue.h \
totemPlugin.cpp \
totemPlugin.h \
- totemStringGlue.h \
totemMullYPlugin.cpp \
totemMullYPlugin.h \
- totemClassInfo.h \
totem-plugin-viewer-constants.h
libtotem_mully_plugin_la_CPPFLAGS = \
@@ -402,34 +406,28 @@ libtotem_mully_plugin_la_CPPFLAGS = \
-I$(top_srcdir)/src/backend \
-I$(top_builddir)/src \
-I$(top_builddir)/src/backend \
- -Iidl \
- $(addprefix -I$(MOZILLA_INCLUDE_ROOT)/,$(gecko_include_subdirs)) \
+ -DXP_UNIX \
+ -DMOZ_X11 \
-DTOTEM_MULLY_PLUGIN \
-DTOTEM_PL_PARSER_MINI \
-D_REENTRANT \
-DDBUS_API_SUBJECT_TO_CHANGE \
- -DGNOMELOCALEDIR="\"$(datadir)/locale\"" \
- -DGCONF_PREFIX="\"/apps/totem\"" \
-DSYSCONFDIR="\"$(sysconfdir)\"" \
- -DDATADIR="\"$(pkgdatadir)\"" \
-DLIBEXECDIR="\"$(libexecdir)\"" \
- -DBINDIR="\"$(bindir)\"" \
$(DISABLE_DEPRECATED) \
$(AM_CPPFLAGS)
libtotem_mully_plugin_la_CXXFLAGS = \
$(BROWSER_PLUGIN_CFLAGS) \
- $(MOZILLA_XPCOM_CFLAGS) \
$(DBUS_CFLAGS) \
$(WARN_CXXFLAGS) \
$(PLUGIN_EXTRA_WARN_CXXFLAGS) \
$(AM_CXXFLAGS)
-libtotem_mully_plugin_la_LIBADD = \
- libtotempluginviewer_helper.la \
- $(DBUS_LIBS) \
- $(BROWSER_PLUGIN_LIBS) \
- $(LIBXPCOMGLUE_S)
+libtotem_mully_plugin_la_LIBADD = \
+ libtotembrowserplugin_helper.la \
+ $(DBUS_LIBS) \
+ $(BROWSER_PLUGIN_LIBS)
libtotem_mully_plugin_la_LDFLAGS = \
-avoid-version \
@@ -446,15 +444,31 @@ if ENABLE_CONE_PLUGIN
plugin_LTLIBRARIES += libtotem-cone-plugin.la
libtotem_cone_plugin_la_SOURCES = \
- totemDebug.h \
+ npapi.h \
+ npruntime.h \
+ npupp.h \
+ totemNPNGlue.cpp \
+ totemNPClass.cpp \
+ totemNPClass.h \
+ totemNPObject.cpp \
+ totemNPObject.h \
+ totemNPObjectWrapper.h \
+ totemNPVariantWrapper.h \
+ totemConeAudio.cpp \
+ totemConeAudio.h \
+ totemCone.cpp \
+ totemCone.h \
+ totemConeInput.cpp \
+ totemConeInput.h \
+ totemConePlaylist.cpp \
+ totemConePlaylist.h \
+ totemConePlaylistItems.cpp \
+ totemConePlaylistItems.h \
+ totemConeVideo.cpp \
+ totemConeVideo.h \
totemPluginGlue.cpp \
- totemPluginGlue.h \
totemPlugin.cpp \
totemPlugin.h \
- totemStringGlue.h \
- totemConePlugin.cpp \
- totemConePlugin.h \
- totemClassInfo.h \
totem-plugin-viewer-constants.h
libtotem_cone_plugin_la_CPPFLAGS = \
@@ -462,34 +476,28 @@ libtotem_cone_plugin_la_CPPFLAGS = \
-I$(top_srcdir)/src/backend \
-I$(top_builddir)/src \
-I$(top_builddir)/src/backend \
- -Iidl \
- $(addprefix -I$(MOZILLA_INCLUDE_ROOT)/,$(gecko_include_subdirs)) \
+ -DXP_UNIX \
+ -DMOZ_X11 \
-DTOTEM_CONE_PLUGIN \
-DTOTEM_PL_PARSER_MINI \
-D_REENTRANT \
-DDBUS_API_SUBJECT_TO_CHANGE \
- -DGNOMELOCALEDIR="\"$(datadir)/locale\"" \
- -DGCONF_PREFIX="\"/apps/totem\"" \
-DSYSCONFDIR="\"$(sysconfdir)\"" \
- -DDATADIR="\"$(pkgdatadir)\"" \
-DLIBEXECDIR="\"$(libexecdir)\"" \
- -DBINDIR="\"$(bindir)\"" \
$(DISABLE_DEPRECATED) \
$(AM_CPPFLAGS)
libtotem_cone_plugin_la_CXXFLAGS = \
$(BROWSER_PLUGIN_CFLAGS) \
- $(MOZILLA_XPCOM_CFLAGS) \
$(DBUS_CFLAGS) \
$(WARN_CXXFLAGS) \
$(PLUGIN_EXTRA_WARN_CXXFLAGS) \
$(AM_CXXFLAGS)
-libtotem_cone_plugin_la_LIBADD = \
- libtotempluginviewer_helper.la \
- $(DBUS_LIBS) \
- $(BROWSER_PLUGIN_LIBS) \
- $(LIBXPCOMGLUE_S)
+libtotem_cone_plugin_la_LIBADD = \
+ libtotembrowserplugin_helper.la \
+ $(DBUS_LIBS) \
+ $(BROWSER_PLUGIN_LIBS)
libtotem_cone_plugin_la_LDFLAGS = \
-avoid-version \
@@ -498,4 +506,3 @@ libtotem_cone_plugin_la_LDFLAGS = \
$(AM_LDFLAGS)
endif
-
diff --git a/browser-plugin/idl/Makefile.am b/browser-plugin/idl/Makefile.am
deleted file mode 100644
index ba902f43..00000000
--- a/browser-plugin/idl/Makefile.am
+++ /dev/null
@@ -1,126 +0,0 @@
-NULL =
-
-BASIC_IDLS = \
- totemIBasicPlayer.idl
-
-COMPLEX_IDLS = \
- totemIComplexPlayer.idl
-
-GMP_IDLS = \
- totemIGMPCdromCollection.idl \
- totemIGMPClosedCaption.idl \
- totemIGMPControls.idl \
- totemIGMPDVD.idl \
- totemIGMPError.idl \
- totemIGMPErrorItem.idl \
- totemIGMPMediaCollection.idl \
- totemIGMPMedia.idl \
- totemIGMPNetwork.idl \
- totemIGMPPlayerApplication.idl \
- totemIGMPPlayer.idl \
- totemIGMPPlaylistArray.idl \
- totemIGMPPlaylistCollection.idl \
- totemIGMPPlaylist.idl \
- totemIGMPSettings.idl \
- $(NULL)
-
-NARROWSPACE_IDLS = \
- totemINarrowSpacePlayer.idl
-
-MULLY_IDLS = \
- totemIMullYPlayer.idl
-
-CONE_IDLS = \
- totemICone.idl \
- totemIConeAudio.idl \
- totemIConeInput.idl \
- totemIConePlaylist.idl \
- totemIConePlaylistItems.idl \
- totemIConeVideo.idl
-
-xptdir = $(MOZILLA_PLUGINDIR)
-xpt_DATA =
-
-ALL_IDLS =
-
-if ENABLE_BASIC_PLUGIN
-ALL_IDLS += $(BASIC_IDLS)
-xpt_DATA += libtotem-basic-plugin.xpt
-endif
-
-if ENABLE_GMP_PLUGIN
-ALL_IDLS += $(GMP_IDLS)
-xpt_DATA += libtotem-gmp-plugin.xpt
-endif
-
-if ENABLE_COMPLEX_PLUGIN
-ALL_IDLS += $(COMPLEX_IDLS)
-xpt_DATA += libtotem-complex-plugin.xpt
-endif
-
-if ENABLE_NARROWSPACE_PLUGIN
-ALL_IDLS += $(NARROWSPACE_IDLS)
-xpt_DATA += libtotem-narrowspace-plugin.xpt
-endif
-
-if ENABLE_MULLY_PLUGIN
-ALL_IDLS += $(MULLY_IDLS)
-xpt_DATA += libtotem-mully-plugin.xpt
-endif
-
-if ENABLE_CONE_PLUGIN
-ALL_IDLS += $(CONE_IDLS)
-xpt_DATA += libtotem-cone-plugin.xpt
-endif
-
-noinst_DATA = \
- $(ALL_IDLS:.idl=.xpt) \
- $(ALL_IDLS:.idl=.h)
-
-docdir = $(pkgdatadir)/doc
-doc_DATA = $(ALL_IDLS:.idl=.html)
-
-CLEANFILES = \
- $(noinst_HEADERS) \
- $(noinst_DATA) \
- $(xpt_DATA) \
- $(doc_DATA)
-
-EXTRA_DIST = \
- $(BASIC_IDLS) \
- $(GMP_IDLS) \
- $(COMPLEX_IDLS) \
- $(NARROWSPACE_IDLS) \
- $(MULLY_IDLS) \
- $(CONE_IDLS)
-
-%.h: %.idl
- $(MOZILLA_XPIDL) -w -m header -I $(MOZILLA_IDLDIR) -I $(srcdir) $<
-
-%.html: %.idl
- $(MOZILLA_XPIDL) -w -m doc -I $(MOZILLA_IDLDIR) -I $(srcdir) $<
-
-%.java: %.idl
- $(MOZILLA_XPIDL) -w -m java -I $(MOZILLA_IDLDIR) -I $(srcdir) $<
-
-%.xpt: %.idl
- $(MOZILLA_XPIDL) -w -m typelib -I $(MOZILLA_IDLDIR) -I $(srcdir) $<
-
-libtotem-basic-plugin.xpt: $(BASIC_IDLS:.idl=.xpt)
- $(MOZILLA_XPT_LINK) $@ $^
-
-libtotem-complex-plugin.xpt: $(COMPLEX_IDLS:.idl=.xpt)
- $(MOZILLA_XPT_LINK) $@ $^
-
-libtotem-gmp-plugin.xpt: $(GMP_IDLS:.idl=.xpt)
- $(MOZILLA_XPT_LINK) $@ $^
-
-libtotem-narrowspace-plugin.xpt: $(NARROWSPACE_IDLS:.idl=.xpt)
- $(MOZILLA_XPT_LINK) $@ $^
-
-libtotem-mully-plugin.xpt: $(MULLY_IDLS:.idl=.xpt)
- $(MOZILLA_XPT_LINK) $@ $^
-
-libtotem-cone-plugin.xpt: $(CONE_IDLS:.idl=.xpt)
- $(MOZILLA_XPT_LINK) $@ $^
-
diff --git a/browser-plugin/totempluginviewer-marshal.list b/browser-plugin/marshal.list
index 35b4fa7f..35b4fa7f 100644
--- a/browser-plugin/totempluginviewer-marshal.list
+++ b/browser-plugin/marshal.list
diff --git a/browser-plugin/npapi.h b/browser-plugin/npapi.h
new file mode 100644
index 00000000..952d3578
--- /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 00000000..5725b726
--- /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 00000000..94712da9
--- /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/test-glow-button.c b/browser-plugin/test-glow-button.c
index 9548164d..f7193cdb 100644
--- a/browser-plugin/test-glow-button.c
+++ b/browser-plugin/test-glow-button.c
@@ -2,7 +2,7 @@
#include <gtk/gtk.h>
#include "totem-glow-button.h"
-#if 1
+#if 0
static gboolean
idle_cb (gpointer data)
{
diff --git a/browser-plugin/totem-glow-button.c b/browser-plugin/totem-glow-button.c
index 7d35b0c0..0ff03179 100644
--- a/browser-plugin/totem-glow-button.c
+++ b/browser-plugin/totem-glow-button.c
@@ -2,9 +2,9 @@
* (C) Copyright 2007 Bastien Nocera <hadess@hadess.net>
*
* Glow code from libwnck/libwnck/tasklist.c:
- * Copyright (C) 2001 Havoc Pennington
- * Copyright (C) 2003 Kim Woelders
- * Copyright (C) 2003 Red Hat, Inc.
+ * Copyright © 2001 Havoc Pennington
+ * Copyright © 2003 Kim Woelders
+ * Copyright © 2003 Red Hat, Inc.
*
*
* This library is free software; you can redistribute it and/or
diff --git a/browser-plugin/totem-glow-button.h b/browser-plugin/totem-glow-button.h
index 993edadb..fdc96aa6 100644
--- a/browser-plugin/totem-glow-button.h
+++ b/browser-plugin/totem-glow-button.h
@@ -2,9 +2,9 @@
* (C) Copyright 2007 Bastien Nocera <hadess@hadess.net>
*
* Glow code from libwnck/libwnck/tasklist.c:
- * Copyright (C) 2001 Havoc Pennington
- * Copyright (C) 2003 Kim Woelders
- * Copyright (C) 2003 Red Hat, Inc.
+ * Copyright © 2001 Havoc Pennington
+ * Copyright © 2003 Kim Woelders
+ * Copyright © 2003 Red Hat, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
diff --git a/browser-plugin/totem-plugin-viewer.c b/browser-plugin/totem-plugin-viewer.c
index f1aa5af7..983b0284 100644
--- a/browser-plugin/totem-plugin-viewer.c
+++ b/browser-plugin/totem-plugin-viewer.c
@@ -52,7 +52,7 @@
#include "totem-plugin-viewer-constants.h"
#include "totem-plugin-viewer-options.h"
-#include "totempluginviewer-marshal.h"
+#include "marshal.h"
GtkWidget *totem_statusbar_create (void);
GtkWidget *totem_volume_create (void);
@@ -665,6 +665,48 @@ totem_embedded_launch_player (TotemEmbedded *embedded,
return result;
}
+static char *
+resolve_uri (const char *base_uri,
+ const char *relative_uri)
+{
+ char *uri, *scheme;
+ GFile *base_gfile, *base_parent_gfile, *resolved_gfile;
+
+ if (!relative_uri)
+ return g_strdup (base_uri);
+
+ if (!base_uri)
+ return g_strdup (relative_uri);
+
+ /* If |relative_uri| has a scheme, it's a full URI, just return it */
+ scheme = g_uri_parse_scheme (relative_uri);
+ if (scheme) {
+ g_free (scheme);
+ return g_strdup (relative_uri);
+ }
+
+ base_gfile = g_file_new_for_uri (base_uri);
+ base_parent_gfile = g_file_get_parent (base_gfile);
+ if (!base_parent_gfile) {
+ g_print ("Base URI %s has no parent!\n", base_uri);
+ g_object_unref (base_gfile);
+ return NULL;
+ }
+ g_object_unref (base_gfile);
+
+ resolved_gfile = g_file_resolve_relative_path (base_parent_gfile, relative_uri);
+ g_object_unref (base_parent_gfile);
+ if (!resolved_gfile) {
+ g_warning ("Failed to resolve relative URI '%s' against base '%s'\n", relative_uri, base_uri);
+ return NULL;
+ }
+
+ uri = g_file_get_uri (resolved_gfile);
+ g_object_unref (resolved_gfile);
+
+ return uri;
+}
+
static void
totem_embedded_set_uri (TotemEmbedded *emb,
const char *uri,
@@ -677,11 +719,13 @@ totem_embedded_set_uri (TotemEmbedded *emb,
old_base = emb->base_uri;
old_href = emb->href_uri;
- emb->current_uri = g_strdup (uri);
emb->base_uri = g_strdup (base_uri);
+ emb->current_uri = resolve_uri (base_uri, uri);
emb->is_browser_stream = (is_browser_stream != FALSE);
emb->href_uri = NULL;
+ g_print ("totem_embedded_set_uri uri %s base %s => resolved %s\n", uri, base_uri, emb->current_uri);
+
g_free (old_uri);
g_free (old_base);
g_free (old_href);
@@ -1086,9 +1130,10 @@ on_about1_activate (GtkButton *button, TotemEmbedded *emb)
license = totem_interface_get_license ();
emb->about = g_object_new (GTK_TYPE_ABOUT_DIALOG,
- "name", _("Totem Browser Plugin"),
+ "program-name", _("Totem Browser Plugin"),
"version", VERSION,
- "copyright", _("Copyright \xc2\xa9 2002-2007 Bastien Nocera"),
+ "copyright", "Copyright © 2002-2007 Bastien Nocera\n"
+ "Copyright © 2006, 2007, 2008 Christian Persch",
"comments", description,
"authors", authors,
"translator-credits", _("translator-credits"),
diff --git a/browser-plugin/totemBasicPlugin.cpp b/browser-plugin/totemBasicPlugin.cpp
index be44db5e..b4b7d775 100644
--- a/browser-plugin/totemBasicPlugin.cpp
+++ b/browser-plugin/totemBasicPlugin.cpp
@@ -1,8 +1,8 @@
/* Totem Basic Plugin
*
- * Copyright (C) 2004 Bastien Nocera <hadess@hadess.net>
- * Copyright (C) 2002 David A. Schleef <ds@schleef.org>
- * Copyright (C) 2006 Christian Persch
+ * Copyright © 2004 Bastien Nocera <hadess@hadess.net>
+ * Copyright © 2002 David A. Schleef <ds@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
@@ -18,123 +18,62 @@
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
- *
- * $Id$
*/
-#include <mozilla-config.h>
-#include "config.h"
+#include <config.h>
#include <glib.h>
-#include <nsISupportsImpl.h>
-#include <nsMemory.h>
-#include <nsXPCOM.h>
-#include <nsIProgrammingLanguage.h>
-
-#define GNOME_ENABLE_DEBUG 1
-/* define GNOME_ENABLE_DEBUG for more debug spew */
-#include "debug.h"
-
-#include "totemClassInfo.h"
-
+#include "totemPlugin.h"
#include "totemBasicPlugin.h"
-/* 11ef8fce-9eb4-494e-804e-d56eae788625 */
-static const nsCID kClassID =
- { 0x11ef8fce, 0x9eb4, 0x494e,
- { 0x80, 0x4e, 0xd5, 0x6e, 0xae, 0x78, 0x86, 0x25 } };
-
-static const char kClassDescription[] = "totemBasicPlugin";
-static const char kPluginDescription[] = "Totem Web Browser Plugin " VERSION;
-
-static const totemPluginMimeEntry kMimeTypes[] = {
- { "application/x-ogg","ogg",NULL },
- { "application/ogg", "ogg", NULL },
- { "audio/ogg", "oga", NULL },
- { "audio/x-ogg", "ogg", NULL },
- { "video/ogg", "ogv", NULL },
- { "video/x-ogg", "ogg", NULL },
- { "application/annodex", "anx", NULL },
- { "audio/annodex", "axa", NULL },
- { "video/annodex", "axv", NULL },
- { "video/mpeg", "mpg, mpeg, mpe", NULL },
- { "audio/wav", "wav", NULL },
- { "audio/x-wav", "wav", NULL },
- { "audio/mpeg", "mp3", NULL },
- { "application/x-nsv-vp3-mp3", "nsv", "video/x-nsv" },
- { "video/flv", "flv", "application/x-flash-video" },
- { "application/x-totem-plugin", "", "application/octet-stream" },
+static const char *methodNames[] = {
+ "Play",
+ "Rewind",
+ "Stop"
};
-totemScriptablePlugin::totemScriptablePlugin (totemPlugin *aPlugin)
- : mPlugin(aPlugin)
-{
- D ("%s ctor [%p]", kClassDescription, (void*) this);
-}
-
-totemScriptablePlugin::~totemScriptablePlugin ()
-{
- D ("%s dtor [%p]", kClassDescription, (void*) this);
-}
-
-/* static */ char *
-totemScriptablePlugin::PluginDescription ()
+totemBasicPlayer::totemBasicPlayer (NPP aNPP)
+ : totemNPObject (aNPP)
{
- return (char*) kPluginDescription;
+ TOTEM_LOG_CTOR ();
}
-/* static */ char *
-totemScriptablePlugin::PluginLongDescription ()
+totemBasicPlayer::~totemBasicPlayer ()
{
- return (char*) totem_plugin_get_long_description();
+ TOTEM_LOG_DTOR ();
}
-/* static */ void
-totemScriptablePlugin::PluginMimeTypes (const totemPluginMimeEntry **_entries,
- PRUint32 *_count)
+bool
+totemBasicPlayer::InvokeByIndex (int aIndex,
+ const NPVariant *argv,
+ uint32_t argc,
+ NPVariant *_result)
{
- *_entries = kMimeTypes;
- *_count = G_N_ELEMENTS (kMimeTypes);
-}
-
-/* Interface implementations */
+ TOTEM_LOG_INVOKE (aIndex, totemBasicPlayer);
-NS_IMPL_ISUPPORTS2 (totemScriptablePlugin,
- totemIBasicPlayer,
- nsIClassInfo)
+ VOID_TO_NPVARIANT (*_result);
-/* nsIClassInfo */
+ switch (Methods (aIndex)) {
+ case ePlay:
+ Plugin()->Command (TOTEM_COMMAND_PLAY);
+ return VoidVariant (_result);
-TOTEM_CLASSINFO_BEGIN (totemScriptablePlugin,
- 1,
- kClassID,
- kClassDescription)
- TOTEM_CLASSINFO_ENTRY (0, totemIBasicPlayer)
-TOTEM_CLASSINFO_END
+ case eRewind:
+ Plugin()->Command (TOTEM_COMMAND_PAUSE);
+ return VoidVariant (_result);
-/* totemIBasicPlayer */
+ case eStop:
+ Plugin()->Command (TOTEM_COMMAND_STOP);
+ return VoidVariant (_result);
+ }
-NS_IMETHODIMP
-totemScriptablePlugin::Play ()
-{
- NS_ENSURE_STATE (IsValid ());
-
- return mPlugin->DoCommand (TOTEM_COMMAND_PLAY);
+ return false;
}
-NS_IMETHODIMP
-totemScriptablePlugin::Rewind ()
-{
- NS_ENSURE_STATE (IsValid ());
+/* totemBasicPlayerNPClass */
- return mPlugin->DoCommand (TOTEM_COMMAND_PAUSE);
-}
-
-NS_IMETHODIMP
-totemScriptablePlugin::Stop ()
-{
- NS_ENSURE_STATE (IsValid ());
-
- return mPlugin->DoCommand (TOTEM_COMMAND_STOP);
-}
+TOTEM_IMPLEMENT_NPCLASS (totemBasicPlayer,
+ NULL, 0,
+ methodNames, G_N_ELEMENTS (methodNames),
+ NULL)
diff --git a/browser-plugin/totemBasicPlugin.h b/browser-plugin/totemBasicPlugin.h
index f9f8935b..33974008 100644
--- a/browser-plugin/totemBasicPlugin.h
+++ b/browser-plugin/totemBasicPlugin.h
@@ -1,7 +1,8 @@
/* Totem Basic Plugin
*
- * Copyright (C) 2004 Bastien Nocera <hadess@hadess.net>
- * Copyright (C) 2002 David A. Schleef <ds@schleef.org>
+ * Copyright © 2004 Bastien Nocera <hadess@hadess.net>
+ * Copyright © 2002 David A. Schleef <ds@schleef.org>
+ * Copyright © 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
@@ -17,38 +18,31 @@
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
- *
- * $Id$
*/
#ifndef __BASIC_PLUGIN_H__
#define __BASIC_PLUGIN_H__
-#include <nsIClassInfo.h>
-
-#include "totemIBasicPlayer.h"
-#include "totemPlugin.h"
+#include "totemNPClass.h"
+#include "totemNPObject.h"
-class totemScriptablePlugin : public totemIBasicPlayer,
- public nsIClassInfo
+class totemBasicPlayer : public totemNPObject
{
public:
- NS_DECL_ISUPPORTS
- NS_DECL_TOTEMIBASICPLAYER
- NS_DECL_NSICLASSINFO
-
- totemScriptablePlugin (totemPlugin *aPlugin);
+ totemBasicPlayer (NPP);
+ virtual ~totemBasicPlayer ();
- PRBool IsValid () { return mPlugin != nsnull; }
- void SetPlugin (totemPlugin *aPlugin) { mPlugin = aPlugin; }
-
- static char *PluginDescription ();
- static char *PluginLongDescription();
- static void PluginMimeTypes (const totemPluginMimeEntry **, PRUint32 *);
private:
- ~totemScriptablePlugin ();
-
- totemPlugin *mPlugin;
+
+ enum Methods {
+ ePlay,
+ eRewind,
+ eStop
+ };
+
+ virtual bool InvokeByIndex (int aIndex, const NPVariant *argv, uint32_t argc, NPVariant *_result);
};
+TOTEM_DEFINE_NPCLASS (totemBasicPlayer);
+
#endif /* __BASIC_PLUGIN_H__ */
diff --git a/browser-plugin/totemClassInfo.h b/browser-plugin/totemClassInfo.h
deleted file mode 100644
index e1d440ef..00000000
--- a/browser-plugin/totemClassInfo.h
+++ /dev/null
@@ -1,114 +0,0 @@
-/* Totem browser plugin
- *
- * Copyright © 2007 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.
- *
- * $Id: totemNarrowSpacePlugin.cpp 3922 2007-01-19 14:32:48Z hadess $
- */
-
-#ifndef __TOTEM_CLASSINFO_H__
-#define __TOTEM_CLASSINFO_H__
-
-#include <nsIProgrammingLanguage.h>
-#include <nsISupportsImpl.h>
-#include <nsMemory.h>
-#include <nsXPCOM.h>
-
-#define TOTEM_CLASSINFO_BEGIN(_class,_count,_cid,_description)\
-/* nsISupports getHelperForLanguage (in PRUint32 language); */\
-NS_IMETHODIMP _class::GetHelperForLanguage(PRUint32 language, nsISupports **_retval)\
-{\
- *_retval = nsnull;\
- return NS_OK;\
-}\
-\
-/* readonly attribute string contractID; */\
-NS_IMETHODIMP _class::GetContractID(char * *aContractID)\
-{\
- *aContractID = nsnull;\
- return NS_OK;\
-}\
-\
-/* readonly attribute string classDescription; */\
-NS_IMETHODIMP _class::GetClassDescription(char * *aClassDescription)\
-{\
- *aClassDescription = static_cast<char*>(\
- nsMemory::Clone (_description,\
- sizeof (_description)));\
- if (!*aClassDescription)\
- return NS_ERROR_OUT_OF_MEMORY;\
-\
- return NS_OK;\
-}\
-\
-/* readonly attribute nsCIDPtr classID; */\
-NS_IMETHODIMP _class::GetClassID(nsCID * *aClassID)\
-{\
- *aClassID = static_cast<nsCID*>(\
- nsMemory::Clone (&_cid,\
- sizeof (nsCID*)));\
- if (!*aClassID)\
- return NS_ERROR_OUT_OF_MEMORY;\
-\
- return NS_OK;\
-}\
-\
-/* readonly attribute PRUint32 implementationLanguage; */\
-NS_IMETHODIMP _class::GetImplementationLanguage(PRUint32 *aImplementationLanguage)\
-{\
- *aImplementationLanguage = nsIProgrammingLanguage::CPLUSPLUS;\
- return NS_OK;\
-}\
-\
-/* readonly attribute PRUint32 flags; */\
-NS_IMETHODIMP _class::GetFlags(PRUint32 *aFlags)\
-{\
- *aFlags = nsIClassInfo::PLUGIN_OBJECT | nsIClassInfo::DOM_OBJECT;\
- return NS_OK;\
-}\
-\
-/* [notxpcom] readonly attribute nsCID classIDNoAlloc; */\
-NS_IMETHODIMP _class::GetClassIDNoAlloc(nsCID *aClassIDNoAlloc)\
-{\
- /* We don't really need to implement this since we're not implementing nsISerializable */\
- *aClassIDNoAlloc = _cid;\
- return NS_OK;\
-}\
-\
-NS_IMETHODIMP _class::GetInterfaces (PRUint32 *count, nsIID * **array)\
-{\
- *array = static_cast<nsIID**>(nsMemory::Alloc (sizeof (nsIID) * _count));\
- if (!*array)\
- return NS_ERROR_OUT_OF_MEMORY;\
-\
- *count = _count;
-
-#define TOTEM_CLASSINFO_ENTRY(_i, _interface)\
- (*array)[_i] = static_cast<nsIID*>(\
- nsMemory::Clone(&NS_GET_IID(_interface),\
- sizeof(nsIID)));\
- if (!(*array)[_i]) {\
- NS_FREE_XPCOM_ALLOCATED_POINTER_ARRAY (_i, *array);\
- return NS_ERROR_OUT_OF_MEMORY;\
- }
-
-
-#define TOTEM_CLASSINFO_END \
- return NS_OK;\
-}
-
-#endif /* !__TOTEM_CLASSINFO_H__ */
diff --git a/browser-plugin/totemComplexPlayer.cpp b/browser-plugin/totemComplexPlayer.cpp
new file mode 100644
index 00000000..a38891ac
--- /dev/null
+++ b/browser-plugin/totemComplexPlayer.cpp
@@ -0,0 +1,310 @@
+/* Totem Complex plugin
+ *
+ * Copyright © 2004 Bastien Nocera <hadess@hadess.net>
+ * Copyright © 2002 David A. Schleef <ds@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.
+ */
+
+#include <config.h>
+
+#include <string.h>
+
+#include <glib.h>
+
+#include "npupp.h"
+
+#include "totemPlugin.h"
+#include "totemComplexPlayer.h"
+
+
+static const char *methodNames[] = {
+ "CanPause",
+ "CanPlay",
+ "CanStop",
+ "DoGotoURL",
+ "DoNextEntry",
+ "DoPause",
+ "DoPlay",
+ "DoPrevEntry",
+ "DoStop",
+ "GetAuthor",
+ "GetAutoGoToURL",
+ "GetAutoStart",
+ "GetBackgroundColor",
+ "GetBandwidthAverage",
+ "GetBandwidthCurrent",
+ "GetBufferingTimeElapsed",
+ "GetBufferingTimeRemaining",
+ "GetCanSeek",
+ "GetCenter",
+ "GetClipHeight",
+ "GetClipWidth",
+ "GetConnectionBandwidth",
+ "GetConsole",
+ "GetConsoleEvents",
+ "GetControls",
+ "GetCopyright",
+ "GetCurrentEntry",
+ "GetDoubleSize",
+ "GetDRMInfo",
+ "GetEnableContextMenu",
+ "GetEnableDoubleSize",
+ "GetEnableFullScreen",
+ "GetEnableOriginalSize",
+ "GetEntryAbstract",
+ "GetEntryAuthor",
+ "GetEntryCopyright",
+ "GetEntryTitle",
+ "GetFullScreen",
+ "GetImageStatus",
+ "GetIsPlus",
+ "GetLastErrorMoreInfoURL",
+ "GetLastErrorRMACode",
+ "GetLastErrorSeverity",
+ "GetLastErrorUserCode",
+ "GetLastErrorUserString",
+ "GetLastMessage",
+ "GetLastStatus",
+ "GetLength",
+ "GetLiveState",
+ "GetLoop",
+ "GetMaintainAspect",
+ "GetMute",
+ "GetNoLogo",
+ "GetNumEntries",
+ "GetNumLoop",
+ "GetNumSources",
+ "GetOriginalSize",
+ "GetPacketsEarly",
+ "GetPacketsLate",
+ "GetPacketsMissing",
+ "GetPacketsOutOfOrder",
+ "GetPacketsReceived",
+ "GetPacketsTotal",
+ "GetPlayState",
+ "GetPosition",
+ "GetPreferedLanguageID",
+ "GetPreferedLanguageString",
+ "GetPreferredLanguageID",
+ "GetPreferredLanguageString",
+ "GetPreFetch",
+ "GetShowAbout",
+ "GetShowPreferences",
+ "GetShowStatistics",
+ "GetShuffle",
+ "GetSource",
+ "GetSourceTransport",
+ "GetStereoState",
+ "GetTitle",
+ "GetUserCountryID",
+ "GetVersionInfo",
+ "GetVolume",
+ "GetWantErrors",
+ "GetWantKeyboardEvents",
+ "GetWantMouseEvents",
+ "HasNextEntry",
+ "HasPrevEntry",
+ "SetAuthor",
+ "SetAutoGoToURL",
+ "SetAutoStart",
+ "SetBackgroundColor",
+ "SetCanSeek",
+ "SetCenter",
+ "SetConsole",
+ "SetConsoleEvents",
+ "SetControls",
+ "SetCopyright",
+ "SetDoubleSize",
+ "SetEnableContextMenu",
+ "SetEnableDoubleSize",
+ "SetEnableFullScreen",
+ "SetEnableOriginalSize",
+ "SetFullScreen",
+ "SetImageStatus",
+ "SetLoop",
+ "SetMaintainAspect",
+ "SetMute",
+ "SetNoLogo",
+ "SetNumLoop",
+ "SetOriginalSize",
+ "SetPosition",
+ "SetPreFetch",
+ "SetShowAbout",
+ "SetShowPreferences",
+ "SetShowStatistics",
+ "SetShuffle",
+ "SetSource",
+ "SetTitle",
+ "SetVolume",
+ "SetWantErrors",
+ "SetWantKeyboardEvents",
+ "SetWantMouseEvents"
+};
+
+TOTEM_IMPLEMENT_NPCLASS (totemComplexPlayer,
+ propertyNames, G_N_ELEMENTS (propertyNames),
+ methodNames, G_N_ELEMENTS (methodNames),
+ NULL);
+
+totemComplexPlayer::totemComplexPlayer (NPP aNPP)
+ : totemNPObject (aNPP)
+{
+ TOTEM_LOG_CTOR ();
+}
+
+totemComplexPlayer::~totemComplexPlayer ()
+{
+ TOTEM_LOG_DTOR ();
+}
+
+bool
+totemComplexPlayer::InvokeByIndex (int aIndex,
+ const NPVariant *argv,
+ uint32_t argc,
+ NPVariant *_result)
+{
+ TOTEM_LOG_INVOKE (aIndex, totemComplexPlayer);
+
+ switch (Methods (aIndex)) {
+ case eCanPause:
+ case eCanPlay:
+ case eCanStop:
+ case eDoGotoURL:
+ case eDoNextEntry:
+ case eDoPause:
+ case eDoPlay:
+ case eDoPrevEntry:
+ case eDoStop:
+ case eGetAuthor:
+ case eGetAutoGoToURL:
+ case eGetAutoStart:
+ case eGetBackgroundColor:
+ case eGetBandwidthAverage:
+ case eGetBandwidthCurrent:
+ case eGetBufferingTimeElapsed:
+ case eGetBufferingTimeRemaining:
+ case eGetCanSeek:
+ case eGetCenter:
+ case eGetClipHeight:
+ case eGetClipWidth:
+ case eGetConnectionBandwidth:
+ case eGetConsole:
+ case eGetConsoleEvents:
+ case eGetControls:
+ case eGetCopyright:
+ case eGetCurrentEntry:
+ case eGetDoubleSize:
+ case eGetDRMInfo:
+ case eGetEnableContextMenu:
+ case eGetEnableDoubleSize:
+ case eGetEnableFullScreen:
+ case eGetEnableOriginalSize:
+ case eGetEntryAbstract:
+ case eGetEntryAuthor:
+ case eGetEntryCopyright:
+ case eGetEntryTitle:
+ case eGetFullScreen:
+ case eGetImageStatus:
+ case eGetIsPlus:
+ case eGetLastErrorMoreInfoURL:
+ case eGetLastErrorRMACode:
+ case eGetLastErrorSeverity:
+ case eGetLastErrorUserCode:
+ case eGetLastErrorUserString:
+ case eGetLastMessage:
+ case eGetLastStatus:
+ case eGetLength:
+ case eGetLiveState:
+ case eGetLoop:
+ case eGetMaintainAspect:
+ case eGetMute:
+ case eGetNoLogo:
+ case eGetNumEntries:
+ case eGetNumLoop:
+ case eGetNumSources:
+ case eGetOriginalSize:
+ case eGetPacketsEarly:
+ case eGetPacketsLate:
+ case eGetPacketsMissing:
+ case eGetPacketsOutOfOrder:
+ case eGetPacketsReceived:
+ case eGetPacketsTotal:
+ case eGetPlayState:
+ case eGetPosition:
+ case eGetPreferedLanguageID:
+ case eGetPreferedLanguageString:
+ case eGetPreferredLanguageID:
+ case eGetPreferredLanguageString:
+ case eGetPreFetch:
+ case eGetShowAbout:
+ case eGetShowPreferences:
+ case eGetShowStatistics:
+ case eGetShuffle:
+ case eGetSource:
+ case eGetSourceTransport:
+ case eGetStereoState:
+ case eGetTitle:
+ case eGetUserCountryID:
+ case eGetVersionInfo:
+ case eGetVolume:
+ case eGetWantErrors:
+ case eGetWantKeyboardEvents:
+ case eGetWantMouseEvents:
+ case eHasNextEntry:
+ case eHasPrevEntry:
+ case eSetAuthor:
+ case eSetAutoGoToURL:
+ case eSetAutoStart:
+ case eSetBackgroundColor:
+ case eSetCanSeek:
+ case eSetCenter:
+ case eSetConsole:
+ case eSetConsoleEvents:
+ case eSetControls:
+ case eSetCopyright:
+ case eSetDoubleSize:
+ case eSetEnableContextMenu:
+ case eSetEnableDoubleSize:
+ case eSetEnableFullScreen:
+ case eSetEnableOriginalSize:
+ case eSetFullScreen:
+ case eSetImageStatus:
+ case eSetLoop:
+ case eSetMaintainAspect:
+ case eSetMute:
+ case eSetNoLogo:
+ case eSetNumLoop:
+ case eSetOriginalSize:
+ case eSetPosition:
+ case eSetPreFetch:
+ case eSetShowAbout:
+ case eSetShowPreferences:
+ case eSetShowStatistics:
+ case eSetShuffle:
+ case eSetSource:
+ case eSetTitle:
+ case eSetVolume:
+ case eSetWantErrors:
+ case eSetWantKeyboardEvents:
+ case eSetWantMouseEvents:
+ TOTEM_WARN_INVOKE_UNIMPLEMENTED (aIndex, totemComplexPlayer);
+ return BoolVariant (_result, true);
+ }
+
+ return false;
+}
diff --git a/browser-plugin/totemComplexPlayer.h b/browser-plugin/totemComplexPlayer.h
new file mode 100644
index 00000000..f11591a4
--- /dev/null
+++ b/browser-plugin/totemComplexPlayer.h
@@ -0,0 +1,165 @@
+/* Totem Complex plugin
+ *
+ * Copyright © 2004 Bastien Nocera <hadess@hadess.net>
+ * Copyright © 2002 David A. Schleef <ds@schleef.org>
+ * Copyright © 2006, 2007, 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 __TOTEM_COMPLEX_PLAYER_H__
+#define __TOTEM_COMPLEX_PLAYER_H__
+
+#include "totemNPClass.h"
+#include "totemNPObject.h"
+
+class totemComplexPlayer : public totemNPObject
+{
+ public:
+ totemComplexPlayer (NPP);
+ virtual ~totemComplexPlayer ();
+
+ private:
+ enum Methods {
+ eCanPause,
+ eCanPlay,
+ eCanStop,
+ eDoGotoURL,
+ eDoNextEntry,
+ eDoPause,
+ eDoPlay,
+ eDoPrevEntry,
+ eDoStop,
+ eGetAuthor,
+ eGetAutoGoToURL,
+ eGetAutoStart,
+ eGetBackgroundColor,
+ eGetBandwidthAverage,
+ eGetBandwidthCurrent,
+ eGetBufferingTimeElapsed,
+ eGetBufferingTimeRemaining,
+ eGetCanSeek,
+ eGetCenter,
+ eGetClipHeight,
+ eGetClipWidth,
+ eGetConnectionBandwidth,
+ eGetConsole,
+ eGetConsoleEvents,
+ eGetControls,
+ eGetCopyright,
+ eGetCurrentEntry,
+ eGetDoubleSize,
+ eGetDRMInfo,
+ eGetEnableContextMenu,
+ eGetEnableDoubleSize,
+ eGetEnableFullScreen,
+ eGetEnableOriginalSize,
+ eGetEntryAbstract,
+ eGetEntryAuthor,
+ eGetEntryCopyright,
+ eGetEntryTitle,
+ eGetFullScreen,
+ eGetImageStatus,
+ eGetIsPlus,
+ eGetLastErrorMoreInfoURL,
+ eGetLastErrorRMACode,
+ eGetLastErrorSeverity,
+ eGetLastErrorUserCode,
+ eGetLastErrorUserString,
+ eGetLastMessage,
+ eGetLastStatus,
+ eGetLength,
+ eGetLiveState,
+ eGetLoop,
+ eGetMaintainAspect,
+ eGetMute,
+ eGetNoLogo,
+ eGetNumEntries,
+ eGetNumLoop,
+ eGetNumSources,
+ eGetOriginalSize,
+ eGetPacketsEarly,
+ eGetPacketsLate,
+ eGetPacketsMissing,
+ eGetPacketsOutOfOrder,
+ eGetPacketsReceived,
+ eGetPacketsTotal,
+ eGetPlayState,
+ eGetPosition,
+ eGetPreferedLanguageID,
+ eGetPreferedLanguageString,
+ eGetPreferredLanguageID,
+ eGetPreferredLanguageString,
+ eGetPreFetch,
+ eGetShowAbout,
+ eGetShowPreferences,
+ eGetShowStatistics,
+ eGetShuffle,
+ eGetSource,
+ eGetSourceTransport,
+ eGetStereoState,
+ eGetTitle,
+ eGetUserCountryID,
+ eGetVersionInfo,
+ eGetVolume,
+ eGetWantErrors,
+ eGetWantKeyboardEvents,
+ eGetWantMouseEvents,
+ eHasNextEntry,
+ eHasPrevEntry,
+ eSetAuthor,
+ eSetAutoGoToURL,
+ eSetAutoStart,
+ eSetBackgroundColor,
+ eSetCanSeek,
+ eSetCenter,
+ eSetConsole,
+ eSetConsoleEvents,
+ eSetControls,
+ eSetCopyright,
+ eSetDoubleSize,
+ eSetEnableContextMenu,
+ eSetEnableDoubleSize,
+ eSetEnableFullScreen,
+ eSetEnableOriginalSize,
+ eSetFullScreen,
+ eSetImageStatus,
+ eSetLoop,
+ eSetMaintainAspect,
+ eSetMute,
+ eSetNoLogo,
+ eSetNumLoop,
+ eSetOriginalSize,
+ eSetPosition,
+ eSetPreFetch,
+ eSetShowAbout,
+ eSetShowPreferences,
+ eSetShowStatistics,
+ eSetShuffle,
+ eSetSource,
+ eSetTitle,
+ eSetVolume,
+ eSetWantErrors,
+ eSetWantKeyboardEvents,
+ eSetWantMouseEvents
+ };
+
+ virtual bool InvokeByIndex (int aIndex, const NPVariant *argv, uint32_t argc, NPVariant *_result);
+};
+
+TOTEM_DEFINE_NPCLASS (totemComplexPlayer);
+
+#endif /* __TOTEM_COMPLEX_PLAYER_H__ */
diff --git a/browser-plugin/totemComplexPlugin.cpp b/browser-plugin/totemComplexPlugin.cpp
index 57fe4ee6..8e75132d 100644
--- a/browser-plugin/totemComplexPlugin.cpp
+++ b/browser-plugin/totemComplexPlugin.cpp
@@ -47,13 +47,6 @@ static const nsCID kClassID =
{ 0x91, 0x8c, 0x09, 0xaa, 0x92, 0x36, 0xe3, 0xbb } };
static const char kClassDescription[] = "totemComplexPlugin";
-static const char kPluginDescription[] = "Helix DNA Plugin: RealPlayer G2 Plug-In Compatible (compatible; Totem)";
-
-#define TOTEM_COMPLEX_VERSION_BUILD "10.0"
-
-static const totemPluginMimeEntry kMimeTypes[] = {
- { "audio/x-pn-realaudio-plugin", "rpm", "audio/vnd.rn-realaudio" },
-};
void*
totemScriptablePlugin::operator new (size_t aSize) CPP_THROW_NEW
@@ -78,26 +71,6 @@ totemScriptablePlugin::~totemScriptablePlugin ()
D ("%s dtor [%p]", kClassDescription, (void*) this);
}
-/* static */ char *
-totemScriptablePlugin::PluginDescription ()
-{
- return (char*) kPluginDescription;
-}
-
-/* static */ char *
-totemScriptablePlugin::PluginLongDescription ()
-{
- return (char*) totem_plugin_get_long_description();
-}
-
-/* static */ void
-totemScriptablePlugin::PluginMimeTypes (const totemPluginMimeEntry **_entries,
- PRUint32 *_count)
-{
- *_entries = kMimeTypes;
- *_count = G_N_ELEMENTS (kMimeTypes);
-}
-
/* Interface implementations */
NS_IMPL_ISUPPORTS2 (totemScriptablePlugin,
diff --git a/browser-plugin/totemComplexPlugin.h b/browser-plugin/totemComplexPlugin.h
index 8051960b..8f17e7a3 100644
--- a/browser-plugin/totemComplexPlugin.h
+++ b/browser-plugin/totemComplexPlugin.h
@@ -1,7 +1,7 @@
/* Totem Complex Plugin scriptable
*
- * Copyright (C) 2004 Bastien Nocera <hadess@hadess.net>
- * Copyright (C) 2002 David A. Schleef <ds@schleef.org>
+ * Copyright © 2004 Bastien Nocera <hadess@hadess.net>
+ * Copyright © 2002 David A. Schleef <ds@schleef.org>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
@@ -44,9 +44,6 @@ class totemScriptablePlugin : public totemIComplexPlayer,
PRBool IsValid () { return mPlugin != nsnull; }
void SetPlugin (totemPlugin *aPlugin) { mPlugin = aPlugin; }
- static char *PluginDescription ();
- static char *PluginLongDescription();
- static void PluginMimeTypes (const totemPluginMimeEntry **, PRUint32 *);
private:
~totemScriptablePlugin ();
diff --git a/browser-plugin/totemCone.cpp b/browser-plugin/totemCone.cpp
new file mode 100644
index 00000000..329fd4dd
--- /dev/null
+++ b/browser-plugin/totemCone.cpp
@@ -0,0 +1,118 @@
+/* Totem Cone plugin
+ *
+ * Copyright © 2004 Bastien Nocera <hadess@hadess.net>
+ * Copyright © 2002 David A. Schleef <ds@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.
+ */
+
+#include <config.h>
+
+#include <string.h>
+
+#include <glib.h>
+
+#include "totemPlugin.h"
+#include "totemCone.h"
+
+static const char *propertyNames[] = {
+ "audio",
+ "input",
+ "iterator",
+ "log",
+ "messages",
+ "playlist",
+ "VersionInfo",
+ "video",
+};
+
+static const char *methodNames[] = {
+ "versionInfo"
+};
+
+TOTEM_IMPLEMENT_NPCLASS (totemCone,
+ propertyNames, G_N_ELEMENTS (propertyNames),
+ methodNames, G_N_ELEMENTS (methodNames),
+ NULL);
+
+totemCone::totemCone (NPP aNPP)
+ : totemNPObject (aNPP)
+{
+ TOTEM_LOG_CTOR ();
+}
+
+totemCone::~totemCone ()
+{
+ TOTEM_LOG_DTOR ();
+}
+
+bool
+totemCone::InvokeByIndex (int aIndex,
+ const NPVariant *argv,
+ uint32_t argc,
+ NPVariant *_result)
+{
+ TOTEM_LOG_INVOKE (aIndex, totemCone);
+
+ switch (Methods (aIndex)) {
+ case eversionInfo:
+ return GetPropertyByIndex (eVersionInfo, _result);
+ }
+
+ return false;
+}
+
+bool
+totemCone::GetPropertyByIndex (int aIndex,
+ NPVariant *_result)
+{
+ TOTEM_LOG_GETTER (aIndex, totemCone);
+
+ switch (Properties (aIndex)) {
+ case eAudio:
+ return ObjectVariant (_result, Plugin()->GetNPObject (totemPlugin::eConeAudio));
+
+ case eInput:
+ return ObjectVariant (_result, Plugin()->GetNPObject (totemPlugin::eConeInput));
+
+ case ePlaylist:
+ return ObjectVariant (_result, Plugin()->GetNPObject (totemPlugin::eConePlaylist));
+
+ case eVideo:
+ return ObjectVariant (_result, Plugin()->GetNPObject (totemPlugin::eConeVideo));
+
+ case eVersionInfo:
+ return StringVariant (_result, TOTEM_CONE_VERSION);
+
+ case eIterator:
+ case eLog:
+ case eMessages:
+ TOTEM_WARN_GETTER_UNIMPLEMENTED (aIndex, _result);
+ return NullVariant (_result);
+ }
+
+ return false;
+}
+
+bool
+totemCone::SetPropertyByIndex (int aIndex,
+ const NPVariant *aValue)
+{
+ TOTEM_LOG_SETTER (aIndex, totemCone);
+
+ return ThrowPropertyNotWritable ();
+}
diff --git a/browser-plugin/totemCone.h b/browser-plugin/totemCone.h
new file mode 100644
index 00000000..87596ee4
--- /dev/null
+++ b/browser-plugin/totemCone.h
@@ -0,0 +1,59 @@
+/* Totem Cone plugin
+ *
+ * Copyright © 2004 Bastien Nocera <hadess@hadess.net>
+ * Copyright © 2002 David A. Schleef <ds@schleef.org>
+ * Copyright © 2006, 2007, 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 __TOTEM_CONE__H__
+#define __TOTEM_CONE__H__
+
+#include "totemNPClass.h"
+#include "totemNPObject.h"
+
+class totemCone : public totemNPObject
+{
+ public:
+ totemCone (NPP);
+ virtual ~totemCone ();
+
+ private:
+
+ enum Methods {
+ eversionInfo
+ };
+
+ enum Properties {
+ eAudio,
+ eInput,
+ eIterator,
+ eLog,
+ eMessages,
+ ePlaylist,
+ eVersionInfo,
+ eVideo,
+ };
+
+ virtual bool InvokeByIndex (int aIndex, const NPVariant *argv, uint32_t argc, NPVariant *_result);
+ virtual bool GetPropertyByIndex (int aIndex, NPVariant *_result);
+ virtual bool SetPropertyByIndex (int aIndex, const NPVariant *aValue);
+};
+
+TOTEM_DEFINE_NPCLASS (totemCone);
+
+#endif /* __TOTEM_CONE__H__ */
diff --git a/browser-plugin/totemConeAudio.cpp b/browser-plugin/totemConeAudio.cpp
new file mode 100644
index 00000000..604f1daf
--- /dev/null
+++ b/browser-plugin/totemConeAudio.cpp
@@ -0,0 +1,139 @@
+/* Totem Cone plugin
+ *
+ * Copyright © 2004 Bastien Nocera <hadess@hadess.net>
+ * Copyright © 2002 David A. Schleef <ds@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.
+ */
+
+#include <config.h>
+
+#include <string.h>
+
+#include <glib.h>
+
+#include "totemPlugin.h"
+#include "totemConeAudio.h"
+
+static const char *propertyNames[] = {
+ "channel"
+ "mute",
+ "track",
+ "volume",
+};
+
+static const char *methodNames[] = {
+ "toggleMute"
+};
+
+TOTEM_IMPLEMENT_NPCLASS (totemConeAudio,
+ propertyNames, G_N_ELEMENTS (propertyNames),
+ methodNames, G_N_ELEMENTS (methodNames),
+ NULL);
+
+totemConeAudio::totemConeAudio (NPP aNPP)
+ : totemNPObject (aNPP),
+ mMute (false),
+ mSavedVolume (0.5)
+{
+ TOTEM_LOG_CTOR ();
+}
+
+totemConeAudio::~totemConeAudio ()
+{
+ TOTEM_LOG_DTOR ();
+}
+
+bool
+totemConeAudio::InvokeByIndex (int aIndex,
+ const NPVariant *argv,
+ uint32_t argc,
+ NPVariant *_result)
+{
+ TOTEM_LOG_INVOKE (aIndex, totemConeAudio);
+
+ switch (Methods (aIndex)) {
+ case eToggleMute: {
+ /* FIXMEchpe this sucks */
+ NPVariant mute;
+ BOOLEAN_TO_NPVARIANT (!mMute, mute);
+ return SetPropertyByIndex (eMute, &mute);
+ }
+ }
+
+ return false;
+}
+
+bool
+totemConeAudio::GetPropertyByIndex (int aIndex,
+ NPVariant *_result)
+{
+ TOTEM_LOG_GETTER (aIndex, totemConeAudio);
+
+ switch (Properties (aIndex)) {
+ case eMute:
+ return BoolVariant (_result, Plugin()->IsMute());
+
+ case eVolume:
+ return Int32Variant (_result, Plugin()->Volume() * 200.0);
+
+ case eChannel:
+ case eTrack:
+ TOTEM_WARN_GETTER_UNIMPLEMENTED (aIndex, _result);
+ return VoidVariant (_result);
+ }
+
+ return false;
+}
+
+bool
+totemConeAudio::SetPropertyByIndex (int aIndex,
+ const NPVariant *aValue)
+{
+ TOTEM_LOG_SETTER (aIndex, totemConeAudio);
+
+ switch (Properties (aIndex)) {
+ case eVolume: {
+ int32_t volume;
+ if (!GetInt32FromArguments (aValue, 1, 0, volume))
+ return false;
+
+ Plugin()->SetVolume ((double) CLAMP (volume, 0, 200) / 200.0);
+ return true;
+ }
+
+ case eMute: {
+ if (!GetBoolFromArguments (aValue, 1, 0, mMute))
+ return false;
+
+ if (mMute) {
+ mSavedVolume = Plugin()->Volume();
+ Plugin()->SetVolume (0.0);
+ } else {
+ Plugin()->SetVolume (mSavedVolume);
+ }
+ return true;
+ }
+
+ case eChannel:
+ case eTrack:
+ TOTEM_WARN_SETTER_UNIMPLEMENTED (aIndex, _result);
+ return true;
+ }
+
+ return false;
+}
diff --git a/browser-plugin/totemConeAudio.h b/browser-plugin/totemConeAudio.h
new file mode 100644
index 00000000..4bdbfc91
--- /dev/null
+++ b/browser-plugin/totemConeAudio.h
@@ -0,0 +1,58 @@
+/* Totem Cone plugin
+ *
+ * Copyright © 2004 Bastien Nocera <hadess@hadess.net>
+ * Copyright © 2002 David A. Schleef <ds@schleef.org>
+ * Copyright © 2006, 2007, 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 __TOTEM_CONE_AUDIO_H__
+#define __TOTEM_CONE_AUDIO_H__
+
+#include "totemNPClass.h"
+#include "totemNPObject.h"
+
+class totemConeAudio : public totemNPObject
+{
+ public:
+ totemConeAudio (NPP);
+ virtual ~totemConeAudio ();
+
+ private:
+
+ enum Methods {
+ eToggleMute
+ };
+
+ enum Properties {
+ eChannel,
+ eMute,
+ eTrack,
+ eVolume
+ };
+
+ virtual bool InvokeByIndex (int aIndex, const NPVariant *argv, uint32_t argc, NPVariant *_result);
+ virtual bool GetPropertyByIndex (int aIndex, NPVariant *_result);
+ virtual bool SetPropertyByIndex (int aIndex, const NPVariant *aValue);
+
+ bool mMute;
+ double mSavedVolume;
+};
+
+TOTEM_DEFINE_NPCLASS (totemConeAudio);
+
+#endif /* __TOTEM_CONE_AUDIO_H__ */
diff --git a/browser-plugin/totemConeInput.cpp b/browser-plugin/totemConeInput.cpp
new file mode 100644
index 00000000..475629cf
--- /dev/null
+++ b/browser-plugin/totemConeInput.cpp
@@ -0,0 +1,121 @@
+/* Totem Cone plugin
+ *
+ * Copyright © 2004 Bastien Nocera <hadess@hadess.net>
+ * Copyright © 2002 David A. Schleef <ds@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.
+ */
+
+#include <config.h>
+
+#include <string.h>
+
+#include <glib.h>
+
+#include "totemPlugin.h"
+#include "totemConeInput.h"
+
+static const char *propertyNames[] = {
+ "fps",
+ "hasVout",
+ "length",
+ "position",
+ "rate",
+ "state",
+ "time"
+};
+
+TOTEM_IMPLEMENT_NPCLASS (totemConeInput,
+ propertyNames, G_N_ELEMENTS (propertyNames),
+ NULL, 0,
+ NULL);
+
+totemConeInput::totemConeInput (NPP aNPP)
+ : totemNPObject (aNPP)
+{
+ TOTEM_LOG_CTOR ();
+}
+
+totemConeInput::~totemConeInput ()
+{
+ TOTEM_LOG_DTOR ();
+}
+
+bool
+totemConeInput::GetPropertyByIndex (int aIndex,
+ NPVariant *_result)
+{
+ TOTEM_LOG_GETTER (aIndex, totemConeInput);
+
+ switch (Properties (aIndex)) {
+ case eState: {
+ int32_t state;
+
+ /* IDLE/CLOSE=0,
+ * OPENING=1,
+ * BUFFERING=2,
+ * PLAYING=3,
+ * PAUSED=4,
+ * STOPPING=5,
+ * ERROR=6
+ */
+ if (Plugin()->State() == TOTEM_STATE_PLAYING) {
+ state = 3;
+ } else if (Plugin()->State() == TOTEM_STATE_PAUSED) {
+ state = 4;
+ } else {
+ state = 0;
+ }
+
+ return Int32Variant (_result, state);
+ }
+
+ case eFps:
+ case eHasVout:
+ case eLength:
+ case ePosition:
+ case eRate:
+ case eTime:
+ TOTEM_WARN_GETTER_UNIMPLEMENTED (aIndex, _result);
+ return VoidVariant (_result);
+ }
+
+ return false;
+}
+
+bool
+totemConeInput::SetPropertyByIndex (int aIndex,
+ const NPVariant *aValue)
+{
+ TOTEM_LOG_SETTER (aIndex, totemConeInput);
+
+ switch (Properties (aIndex)) {
+ case ePosition:
+ case eRate:
+ case eState:
+ case eTime:
+ TOTEM_WARN_SETTER_UNIMPLEMENTED (aIndex, _result);
+ return true;
+
+ case eFps:
+ case eHasVout:
+ case eLength:
+ return ThrowPropertyNotWritable ();
+ }
+
+ return false;
+}
diff --git a/browser-plugin/totemConeInput.h b/browser-plugin/totemConeInput.h
new file mode 100644
index 00000000..806bf333
--- /dev/null
+++ b/browser-plugin/totemConeInput.h
@@ -0,0 +1,53 @@
+/* Totem Cone plugin
+ *
+ * Copyright © 2004 Bastien Nocera <hadess@hadess.net>
+ * Copyright © 2002 David A. Schleef <ds@schleef.org>
+ * Copyright © 2006, 2007, 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 __TOTEM_CONE_INPUT_H__
+#define __TOTEM_CONE_INPUT_H__
+
+#include "totemNPClass.h"
+#include "totemNPObject.h"
+
+class totemConeInput : public totemNPObject
+{
+ public:
+ totemConeInput (NPP);
+ virtual ~totemConeInput ();
+
+ private:
+
+ enum Properties {
+ eFps,
+ eHasVout,
+ eLength,
+ ePosition,
+ eRate,
+ eState,
+ eTime
+ };
+
+ virtual bool GetPropertyByIndex (int aIndex, NPVariant *_result);
+ virtual bool SetPropertyByIndex (int aIndex, const NPVariant *aValue);
+};
+
+TOTEM_DEFINE_NPCLASS (totemConeInput);
+
+#endif /* __TOTEM_CONE_INPUT_H__ */
diff --git a/browser-plugin/totemConePlaylist.cpp b/browser-plugin/totemConePlaylist.cpp
new file mode 100644
index 00000000..4ad8b762
--- /dev/null
+++ b/browser-plugin/totemConePlaylist.cpp
@@ -0,0 +1,131 @@
+/* Totem Cone plugin
+ *
+ * Copyright © 2004 Bastien Nocera <hadess@hadess.net>
+ * Copyright © 2002 David A. Schleef <ds@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.
+ */
+
+#include <config.h>
+
+#include <string.h>
+
+#include <glib.h>
+
+#include "totemPlugin.h"
+#include "totemConePlaylist.h"
+
+static const char *propertyNames[] = {
+ "isPlaying",
+ "items"
+};
+
+static const char *methodNames[] = {
+ "add",
+ "next",
+ "play",
+ "playItem",
+ "prev",
+ "removeItem",
+ "stop",
+ "togglePause"
+};
+
+TOTEM_IMPLEMENT_NPCLASS (totemConePlaylist,
+ propertyNames, G_N_ELEMENTS (propertyNames),
+ methodNames, G_N_ELEMENTS (methodNames),
+ NULL);
+
+totemConePlaylist::totemConePlaylist (NPP aNPP)
+ : totemNPObject (aNPP)
+{
+ TOTEM_LOG_CTOR ();
+}
+
+totemConePlaylist::~totemConePlaylist ()
+{
+ TOTEM_LOG_DTOR ();
+}
+
+bool
+totemConePlaylist::InvokeByIndex (int aIndex,
+ const NPVariant *argv,
+ uint32_t argc,
+ NPVariant *_result)
+{
+ TOTEM_LOG_INVOKE (aIndex, totemConePlaylist);
+
+ switch (Methods (aIndex)) {
+ case eAdd: {
+ /* long add (in AUTF8String MRL, [in AUTF8String name, in AUTF8String options]); */
+ if (!CheckArgc (argc, 1, 3))
+ return false;
+
+ const char *mrl;
+ if (!GetStringFromArguments (argv, argc, 0, mrl))
+ return false;
+
+ Plugin()->AddItem (mrl);
+ return Int32Variant (_result, 0);
+ }
+
+ case ePlay:
+ Plugin()->Command (TOTEM_COMMAND_PLAY);
+ return VoidVariant (_result);
+
+ case eStop:
+ Plugin()->Command (TOTEM_COMMAND_STOP);
+ return VoidVariant (_result);
+
+ case eNext:
+ case ePlayItem:
+ case ePrev:
+ case eRemoveItem:
+ case eTogglePause:
+ TOTEM_WARN_INVOKE_UNIMPLEMENTED (aIndex, totemConePlaylist);
+ return VoidVariant (_result);
+ }
+
+ return false;
+}
+
+bool
+totemConePlaylist::GetPropertyByIndex (int aIndex,
+ NPVariant *_result)
+{
+ TOTEM_LOG_GETTER (aIndex, totemConePlaylist);
+
+ switch (Properties (aIndex)) {
+ case eItems:
+ return ObjectVariant (_result, Plugin()->GetNPObject (totemPlugin::eConePlaylistItems));
+
+ case eIsPlaying:
+ TOTEM_WARN_GETTER_UNIMPLEMENTED (aIndex, _result);
+ return BoolVariant (_result, true);
+ }
+
+ return false;
+}
+
+bool
+totemConePlaylist::SetPropertyByIndex (int aIndex,
+ const NPVariant *aValue)
+{
+ TOTEM_LOG_SETTER (aIndex, totemConePlaylist);
+
+ return ThrowPropertyNotWritable ();
+}
diff --git a/browser-plugin/totemConePlaylist.h b/browser-plugin/totemConePlaylist.h
new file mode 100644
index 00000000..e9b062eb
--- /dev/null
+++ b/browser-plugin/totemConePlaylist.h
@@ -0,0 +1,60 @@
+/* Totem Cone plugin
+ *
+ * Copyright © 2004 Bastien Nocera <hadess@hadess.net>
+ * Copyright © 2002 David A. Schleef <ds@schleef.org>
+ * Copyright © 2006, 2007, 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 __TOTEM_CONE_PLAYLIST_H__
+#define __TOTEM_CONE_PLAYLIST_H__
+
+#include "totemNPClass.h"
+#include "totemNPObject.h"
+
+class totemConePlaylist : public totemNPObject
+{
+ public:
+ totemConePlaylist (NPP);
+ virtual ~totemConePlaylist ();
+
+ private:
+
+ enum Methods {
+ eAdd,
+ eNext,
+ ePlay,
+ ePlayItem,
+ ePrev,
+ eRemoveItem,
+ eStop,
+ eTogglePause
+ };
+
+ enum Properties {
+ eIsPlaying,
+ eItems
+ };
+
+ virtual bool InvokeByIndex (int aIndex, const NPVariant *argv, uint32_t argc, NPVariant *_result);
+ virtual bool GetPropertyByIndex (int aIndex, NPVariant *_result);
+ virtual bool SetPropertyByIndex (int aIndex, const NPVariant *aValue);
+};
+
+TOTEM_DEFINE_NPCLASS (totemConePlaylist);
+
+#endif /* __TOTEM_CONE_PLAYLIST_H__ */
diff --git a/browser-plugin/totemConePlaylistItems.cpp b/browser-plugin/totemConePlaylistItems.cpp
new file mode 100644
index 00000000..844a9a62
--- /dev/null
+++ b/browser-plugin/totemConePlaylistItems.cpp
@@ -0,0 +1,95 @@
+/* Totem Cone plugin
+ *
+ * Copyright © 2004 Bastien Nocera <hadess@hadess.net>
+ * Copyright © 2002 David A. Schleef <ds@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.
+ */
+
+#include <config.h>
+
+#include <string.h>
+
+#include <glib.h>
+
+#include "totemPlugin.h"
+#include "totemConePlaylistItems.h"
+
+static const char *propertyNames[] = {
+ "count"
+};
+
+static const char *methodNames[] = {
+ "clear"
+};
+
+TOTEM_IMPLEMENT_NPCLASS (totemConePlaylistItems,
+ propertyNames, G_N_ELEMENTS (propertyNames),
+ methodNames, G_N_ELEMENTS (methodNames),
+ NULL);
+
+totemConePlaylistItems::totemConePlaylistItems (NPP aNPP)
+ : totemNPObject (aNPP)
+{
+ TOTEM_LOG_CTOR ();
+}
+
+totemConePlaylistItems::~totemConePlaylistItems ()
+{
+ TOTEM_LOG_DTOR ();
+}
+
+bool
+totemConePlaylistItems::InvokeByIndex (int aIndex,
+ const NPVariant *argv,
+ uint32_t argc,
+ NPVariant *_result)
+{
+ TOTEM_LOG_INVOKE (aIndex, totemConePlaylistItems);
+
+ switch (Methods (aIndex)) {
+ case eClear:
+ Plugin()->ClearPlaylist ();
+ return VoidVariant (_result);
+ }
+
+ return false;
+}
+
+bool
+totemConePlaylistItems::GetPropertyByIndex (int aIndex,
+ NPVariant *_result)
+{
+ TOTEM_LOG_GETTER (aIndex, totemConePlaylistItems);
+
+ switch (Properties (aIndex)) {
+ case eCount:
+ TOTEM_WARN_GETTER_UNIMPLEMENTED (aIndex, totemConePlaylistItems);
+ return Int32Variant (_result, 1);
+ }
+
+ return false;
+}
+
+bool
+totemConePlaylistItems::SetPropertyByIndex (int aIndex,
+ const NPVariant *aValue)
+{
+ TOTEM_LOG_SETTER (aIndex, totemConePlaylistItems);
+
+ return ThrowPropertyNotWritable ();
+}
diff --git a/browser-plugin/totemConePlaylistItems.h b/browser-plugin/totemConePlaylistItems.h
new file mode 100644
index 00000000..6447df79
--- /dev/null
+++ b/browser-plugin/totemConePlaylistItems.h
@@ -0,0 +1,52 @@
+/* Totem Cone plugin
+ *
+ * Copyright © 2004 Bastien Nocera <hadess@hadess.net>
+ * Copyright © 2002 David A. Schleef <ds@schleef.org>
+ * Copyright © 2006, 2007, 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 __TOTEM_CONE_PLAYLIST_ITEMS_H__
+#define __TOTEM_CONE_PLAYLIST_ITEMS_H__
+
+#include "totemNPClass.h"
+#include "totemNPObject.h"
+
+class totemConePlaylistItems : public totemNPObject
+{
+ public:
+ totemConePlaylistItems (NPP);
+ virtual ~totemConePlaylistItems ();
+
+ private:
+
+ enum Methods {
+ eClear
+ };
+
+ enum Properties {
+ eCount
+ };
+
+ virtual bool InvokeByIndex (int aIndex, const NPVariant *argv, uint32_t argc, NPVariant *_result);
+ virtual bool GetPropertyByIndex (int aIndex, NPVariant *_result);
+ virtual bool SetPropertyByIndex (int aIndex, const NPVariant *aValue);
+};
+
+TOTEM_DEFINE_NPCLASS (totemConePlaylistItems);
+
+#endif /* __TOTEM_CONE_PLAYLIST_ITEMS_H__ */
diff --git a/browser-plugin/totemConePlugin.cpp b/browser-plugin/totemConePlugin.cpp
deleted file mode 100644
index 4cd00280..00000000
--- a/browser-plugin/totemConePlugin.cpp
+++ /dev/null
@@ -1,627 +0,0 @@
-/* Totem Cone Plugin
- *
- * Copyright (C) 2004 Bastien Nocera <hadess@hadess.net>
- * Copyright (C) 2002 David A. Schleef <ds@schleef.org>
- * Copyright (C) 2006 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.
- *
- * $Id: totemBasicPlugin.cpp 4463 2007-07-27 16:07:42Z fcrozat $
- */
-
-#include <mozilla-config.h>
-#include "config.h"
-
-#include <glib.h>
-
-#include <nsISupportsImpl.h>
-#include <nsMemory.h>
-#include <nsXPCOM.h>
-#include <nsIProgrammingLanguage.h>
-
-#define GNOME_ENABLE_DEBUG 1
-/* define GNOME_ENABLE_DEBUG for more debug spew */
-#include "debug.h"
-
-#include "totemICone.h"
-
-#include "totemDebug.h"
-#include "totemClassInfo.h"
-
-#include "totemConePlugin.h"
-
-/* 11ef8fce-9eb4-494e-804e-d56eae788625 */
-static const nsCID kClassID =
- { 0x11ef8fce, 0x9eb4, 0x494e,
- { 0x80, 0x4e, 0xd5, 0x6e, 0xae, 0x78, 0x86, 0x25 } };
-
-static const char kClassDescription[] = "totemConePlugin";
-#define TOTEM_CONE_VERSION "0.8.6"
-static const char kPluginDescription[] = "VLC Multimedia Plugin (compatible Totem " VERSION ")";
-
-static const totemPluginMimeEntry kMimeTypes[] = {
- { "application/x-vlc-plugin", "", "application/octet-stream" },
- { "application/vlc", "", "application/octet-stream" },
- { "video/x-google-vlc-plugin", "", "application/octet-stream" },
-};
-
-totemScriptablePlugin::totemScriptablePlugin (totemPlugin *aPlugin)
- : mPlugin(aPlugin),
- mMute(PR_FALSE)
-{
- D ("%s ctor [%p]", kClassDescription, (void*) this);
-}
-
-totemScriptablePlugin::~totemScriptablePlugin ()
-{
- D ("%s dtor [%p]", kClassDescription, (void*) this);
-}
-
-/* static */ char *
-totemScriptablePlugin::PluginDescription ()
-{
- return (char*) kPluginDescription;
-}
-
-/* static */ char *
-totemScriptablePlugin::PluginLongDescription ()
-{
- return (char*) totem_plugin_get_long_description();
-}
-
-/* static */ void
-totemScriptablePlugin::PluginMimeTypes (const totemPluginMimeEntry **_entries,
- PRUint32 *_count)
-{
- *_entries = kMimeTypes;
- *_count = G_N_ELEMENTS (kMimeTypes);
-}
-
-/* Interface implementations */
-
-NS_IMPL_ISUPPORTS7 (totemScriptablePlugin,
- totemICone,
- totemIConePlaylist,
- totemIConePlaylistItems,
- totemIConeInput,
- totemIConeAudio,
- totemIConeVideo,
- nsIClassInfo)
-
-/* nsIClassInfo */
-
-TOTEM_CLASSINFO_BEGIN (totemScriptablePlugin,
- 6,
- kClassID,
- kClassDescription)
- TOTEM_CLASSINFO_ENTRY (0, totemICone)
- TOTEM_CLASSINFO_ENTRY (1, totemIConePlaylist)
- TOTEM_CLASSINFO_ENTRY (2, totemIConePlaylistItems)
- TOTEM_CLASSINFO_ENTRY (3, totemIConeInput)
- TOTEM_CLASSINFO_ENTRY (4, totemIConeAudio)
- TOTEM_CLASSINFO_ENTRY (5, totemIConeVideo)
-TOTEM_CLASSINFO_END
-
-/* totemICone */
-
-#define TOTEM_SCRIPTABLE_INTERFACE "totemICone"
-
-/* readonly attribute AUTF8String VersionInfo; */
-NS_IMETHODIMP
-totemScriptablePlugin::GetVersionInfo(nsACString & aVersionInfo)
-{
- aVersionInfo.Assign (TOTEM_CONE_VERSION);
- return NS_OK;
-}
-
-/* attribute totemIConeAudio audio; */
-NS_IMETHODIMP
-totemScriptablePlugin::GetAudio(totemIConeAudio * *aAudio)
-{
- return CallQueryInterface (this, aAudio);
-}
-
-/* attribute totemIConeInput input; */
-NS_IMETHODIMP
-totemScriptablePlugin::GetInput(totemIConeInput * *aInput)
-{
- return CallQueryInterface (this, aInput);
-}
-
-/* attribute totemIConePlaylist playlist; */
-NS_IMETHODIMP
-totemScriptablePlugin::GetPlaylist(totemIConePlaylist * *aPlaylist)
-{
- return CallQueryInterface (this, aPlaylist);
-}
-
-/* attribute totemIConeVideo video; */
-NS_IMETHODIMP
-totemScriptablePlugin::GetVideo(totemIConeVideo * *aVideo)
-{
- return CallQueryInterface (this, aVideo);
-}
-
-/* totemIConePlaylist */
-#undef TOTEM_SCRIPTABLE_INTERFACE
-#define TOTEM_SCRIPTABLE_INTERFACE "totemIConePlaylist"
-
-/* attribute totemIConePlaylistItems items; */
-NS_IMETHODIMP
-totemScriptablePlugin::GetItems(totemIConePlaylistItems * *aItems)
-{
- return CallQueryInterface (this, aItems);
-}
-
-/* readonly attribute boolean isPlaying */
-NS_IMETHODIMP
-totemScriptablePlugin::GetIsPlaying(PRBool *aIsPlaying)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* long add (in AUTF8String MRL, in AUTF8String name, in AUTF8String options) */
-NS_IMETHODIMP
-totemScriptablePlugin::Add(const nsACString & aURL, const nsACString & aName, const nsACString & aOptions, PRInt32 *aItemNumber)
-{
- TOTEM_SCRIPTABLE_LOG_ACCESS ();
-
- NS_ENSURE_STATE (IsValid ());
-
- /* FIXME */
- *aItemNumber = 0;
-
- return mPlugin->AddItem (aURL);
-}
-
-/* void play () */
-NS_IMETHODIMP
-totemScriptablePlugin::Play()
-{
- TOTEM_SCRIPTABLE_LOG_ACCESS ();
-
- NS_ENSURE_STATE (IsValid ());
-
- return mPlugin->DoCommand (TOTEM_COMMAND_PLAY);
-}
-
-/* void playItem (in long number) */
-NS_IMETHODIMP
-totemScriptablePlugin::PlayItem(PRInt32 aNumber)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* void togglePause () */
-NS_IMETHODIMP
-totemScriptablePlugin::TogglePause()
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-/* void stop () */
-NS_IMETHODIMP
-totemScriptablePlugin::Stop()
-{
- TOTEM_SCRIPTABLE_LOG_ACCESS ();
-
- NS_ENSURE_STATE (IsValid ());
-
- return mPlugin->DoCommand (TOTEM_COMMAND_STOP);
-}
-
-/* void next () */
-NS_IMETHODIMP
-totemScriptablePlugin::Next()
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* void prev () */
-NS_IMETHODIMP
-totemScriptablePlugin::Prev()
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* void removeItem (in long number) */
-NS_IMETHODIMP
-totemScriptablePlugin::RemoveItem(PRInt32 aNumber)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* totemIConePlaylistItems */
-#undef TOTEM_SCRIPTABLE_INTERFACE
-#define TOTEM_SCRIPTABLE_INTERFACE "totemIConePlaylistItems"
-
-/* readonly attribute long count */
-NS_IMETHODIMP
-totemScriptablePlugin::GetCount (PRInt32 *aCount)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* void clear () */
-NS_IMETHODIMP
-totemScriptablePlugin::Clear()
-{
- TOTEM_SCRIPTABLE_LOG_ACCESS ();
-
- NS_ENSURE_STATE (IsValid ());
-
- return mPlugin->ClearPlaylist ();
-}
-
-/* totemIConeInput */
-#undef TOTEM_SCRIPTABLE_INTERFACE
-#define TOTEM_SCRIPTABLE_INTERFACE "totemIConeInput"
-
-/* readonly attribute long length */
-NS_IMETHODIMP
-totemScriptablePlugin::GetLength (PRInt32 *aLength)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* readonly attribute long fps */
-NS_IMETHODIMP
-totemScriptablePlugin::GetFps (PRInt32 *aFps)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* readonly attribute boolean hasVout */
-NS_IMETHODIMP
-totemScriptablePlugin::GetHasVout (PRBool *aItemCount)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* attribute double position */
-NS_IMETHODIMP
-totemScriptablePlugin::GetPosition(double *aPosition)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-NS_IMETHODIMP
-totemScriptablePlugin::SetPosition(double aPosition)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* attribute long time */
-NS_IMETHODIMP
-totemScriptablePlugin::GetTime(PRInt32 *aPosition)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-NS_IMETHODIMP
-totemScriptablePlugin::SetTime(PRInt32 aPosition)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* attribute long state */
-NS_IMETHODIMP
-totemScriptablePlugin::GetState(PRInt32 *aState)
-{
- TOTEM_SCRIPTABLE_LOG_ACCESS ();
-
- NS_ENSURE_STATE (IsValid());
-
- /* IDLE/CLOSE=0,
- * OPENING=1,
- * BUFFERING=2,
- * PLAYING=3,
- * PAUSED=4,
- * STOPPING=5,
- * ERROR=6
- */
- if (mPlugin->mState == TOTEM_STATE_PLAYING) {
- *aState = 3;
- } else if (mPlugin->mState == TOTEM_STATE_PAUSED) {
- *aState = 4;
- } else {
- *aState = 0;
- }
-
- return NS_OK;
-}
-
-NS_IMETHODIMP
-totemScriptablePlugin::SetState(PRInt32 aState)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* attribute double rate */
-NS_IMETHODIMP
-totemScriptablePlugin::GetRate(double *aRate)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-NS_IMETHODIMP
-totemScriptablePlugin::SetRate(double aRate)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_OK;
-}
-
-/* totemIConeAudio */
-#undef TOTEM_SCRIPTABLE_INTERFACE
-#define TOTEM_SCRIPTABLE_INTERFACE "totemIConeAudio"
-
-/* attribute boolean mute */
-NS_IMETHODIMP
-totemScriptablePlugin::GetMute(PRBool *_retval)
-{
- TOTEM_SCRIPTABLE_LOG_ACCESS ();
-
- *_retval = mMute;
- return NS_OK;
-}
-
-NS_IMETHODIMP
-totemScriptablePlugin::SetMute(PRBool enabled)
-{
- nsresult rv;
-
- TOTEM_SCRIPTABLE_LOG_ACCESS ();
-
- NS_ENSURE_STATE (IsValid ());
-
- if (enabled == PR_FALSE) {
- mMute = PR_FALSE;
- rv = mPlugin->SetVolume (mSavedVolume);
- } else {
- mMute = PR_TRUE;
- mSavedVolume = mPlugin->mVolume;
- rv = mPlugin->SetVolume (0);
- };
-
- return rv;
-}
-
-/* attribute long volume */
-NS_IMETHODIMP
-totemScriptablePlugin::GetVolume(PRInt32 *_retval)
-{
- TOTEM_SCRIPTABLE_LOG_ACCESS ();
-
- NS_ENSURE_STATE (IsValid ());
-
- *_retval = (PRInt32) (mPlugin->mVolume * 200.0);
- return NS_OK;
-}
-
-NS_IMETHODIMP
-totemScriptablePlugin::SetVolume(PRInt32 aVolume)
-{
- TOTEM_SCRIPTABLE_LOG_ACCESS ();
-
- NS_ENSURE_STATE (IsValid ());
-
- nsresult rv = mPlugin->SetVolume ((double) aVolume / 200.0);
-
- /* Volume passed in is 0 through to 200 */
- mPlugin->mVolume = (double) aVolume / 200.0;
-
- return rv;
-}
-
-/* attribute long track */
-NS_IMETHODIMP
-totemScriptablePlugin::GetTrack(PRInt32 *_retval)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-NS_IMETHODIMP
-totemScriptablePlugin::SetTrack(PRInt32 aTrack)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* attribute long channel */
-NS_IMETHODIMP
-totemScriptablePlugin::GetChannel(PRInt32 *_retval)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-NS_IMETHODIMP
-totemScriptablePlugin::SetChannel(PRInt32 aChannel)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-/* void toggleMute () */
-NS_IMETHODIMP
-totemScriptablePlugin::ToggleMute()
-{
- TOTEM_SCRIPTABLE_LOG_ACCESS ();
-
- return SetMute (!mMute);
-}
-
-/* totemIConeAudio */
-#undef TOTEM_SCRIPTABLE_INTERFACE
-#define TOTEM_SCRIPTABLE_INTERFACE "totemIConeVideo"
-
-/* readonly attribute long width */
-NS_IMETHODIMP
-totemScriptablePlugin::GetWidth (PRInt32 *aWidth)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* readonly attribute long height */
-NS_IMETHODIMP
-totemScriptablePlugin::GetHeight (PRInt32 *aHeight)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* attribute boolean fullscreen */
-NS_IMETHODIMP
-totemScriptablePlugin::GetFullscreen(PRBool *_retval)
-{
- TOTEM_SCRIPTABLE_LOG_ACCESS ();
-
- NS_ENSURE_STATE (IsValid ());
-
- *_retval = mPlugin->mIsFullscreen;
-
- return NS_OK;
-}
-
-NS_IMETHODIMP
-totemScriptablePlugin::SetFullscreen(PRBool enabled)
-{
- TOTEM_SCRIPTABLE_LOG_ACCESS ();
-
- NS_ENSURE_STATE (IsValid ());
-
- nsresult rv = mPlugin->SetFullscreen (enabled);
-
- mPlugin->mIsFullscreen = enabled != PR_FALSE;
-
- return NS_OK;
-}
-
-/* attribute AUTF8String aspectRatio */
-NS_IMETHODIMP
-totemScriptablePlugin::GetAspectRatio(nsACString & aAspectRatio)
-{
-// aVersionInfo.Assign (TOTEM_CONE_VERSION);
-// return NS_OK;
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-NS_IMETHODIMP
-totemScriptablePlugin::SetAspectRatio(const nsACString & aAspectRatio)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-/* attribute long subtitle */
-NS_IMETHODIMP
-totemScriptablePlugin::GetSubtitle(PRInt32 *aSubtitle)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-NS_IMETHODIMP
-totemScriptablePlugin::SetSubtitle(PRInt32 aSubtitle)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* attribute long teletext */
-NS_IMETHODIMP
-totemScriptablePlugin::GetTeletext(PRInt32 *aTeletext)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-NS_IMETHODIMP
-totemScriptablePlugin::SetTeletext(PRInt32 aTeletext)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* void toggleFullscreen () */
-NS_IMETHODIMP
-totemScriptablePlugin::ToggleFullscreen()
-{
- TOTEM_SCRIPTABLE_LOG_ACCESS ();
-
- NS_ENSURE_STATE (IsValid ());
-
- nsresult rv = mPlugin->SetFullscreen (!mPlugin->mIsFullscreen);
-
- mPlugin->mIsFullscreen = !mPlugin->mIsFullscreen;
-
- return NS_OK;
-}
-
-/* void toggleTeletext () */
-NS_IMETHODIMP
-totemScriptablePlugin::ToggleTeletext()
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
diff --git a/browser-plugin/totemConePlugin.h b/browser-plugin/totemConePlugin.h
deleted file mode 100644
index c795818f..00000000
--- a/browser-plugin/totemConePlugin.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/* Totem Cone Plugin
- *
- * Copyright (C) 2004 Bastien Nocera <hadess@hadess.net>
- * Copyright (C) 2002 David A. Schleef <ds@schleef.org>
- *
- * 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.
- *
- * $Id: totemBasicPlugin.h 3717 2006-11-15 17:21:16Z chpe $
- */
-
-#ifndef __CONE_PLUGIN_H__
-#define __CONE_PLUGIN_H__
-
-#include <nsIClassInfo.h>
-
-#include "totemICone.h"
-#include "totemIConePlaylist.h"
-#include "totemIConePlaylistItems.h"
-#include "totemIConeInput.h"
-#include "totemIConeAudio.h"
-#include "totemIConeVideo.h"
-#include "totemPlugin.h"
-
-class totemScriptablePlugin : public totemICone,
- public totemIConePlaylist,
- public totemIConePlaylistItems,
- public totemIConeInput,
- public totemIConeAudio,
- public totemIConeVideo,
- public nsIClassInfo
-{
- public:
- NS_DECL_ISUPPORTS
- NS_DECL_TOTEMICONE
- NS_DECL_TOTEMICONEPLAYLIST
- NS_DECL_TOTEMICONEPLAYLISTITEMS
- NS_DECL_TOTEMICONEINPUT
- NS_DECL_TOTEMICONEAUDIO
- NS_DECL_TOTEMICONEVIDEO
- NS_DECL_NSICLASSINFO
-
- totemScriptablePlugin (totemPlugin *aPlugin);
-
- PRBool IsValid () { return mPlugin != nsnull; }
- void SetPlugin (totemPlugin *aPlugin) { mPlugin = aPlugin; }
-
- static char *PluginDescription ();
- static char *PluginLongDescription();
- static void PluginMimeTypes (const totemPluginMimeEntry **, PRUint32 *);
- private:
- ~totemScriptablePlugin ();
-
- totemPlugin *mPlugin;
-
- PRUint32 mMute : 1;
- double mSavedVolume;
-};
-
-#endif /* __CONE_PLUGIN_H__ */
diff --git a/browser-plugin/totemConeVideo.cpp b/browser-plugin/totemConeVideo.cpp
new file mode 100644
index 00000000..cfd6dff7
--- /dev/null
+++ b/browser-plugin/totemConeVideo.cpp
@@ -0,0 +1,136 @@
+/* Totem Cone plugin
+ *
+ * Copyright © 2004 Bastien Nocera <hadess@hadess.net>
+ * Copyright © 2002 David A. Schleef <ds@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.
+ */
+
+#include <config.h>
+
+#include <string.h>
+
+#include <glib.h>
+
+#include "totemPlugin.h"
+#include "totemConeVideo.h"
+
+static const char *propertyNames[] = {
+ "aspectRatio",
+ "fullscreen",
+ "height",
+ "subtitle",
+ "teletext",
+ "width",
+};
+
+static const char *methodNames[] = {
+ "toggleFullscreen",
+ "toggleTeletext"
+};
+
+TOTEM_IMPLEMENT_NPCLASS (totemConeVideo,
+ propertyNames, G_N_ELEMENTS (propertyNames),
+ methodNames, G_N_ELEMENTS (methodNames),
+ NULL);
+
+totemConeVideo::totemConeVideo (NPP aNPP)
+ : totemNPObject (aNPP)
+{
+ TOTEM_LOG_CTOR ();
+}
+
+totemConeVideo::~totemConeVideo ()
+{
+ TOTEM_LOG_DTOR ();
+}
+
+bool
+totemConeVideo::InvokeByIndex (int aIndex,
+ const NPVariant *argv,
+ uint32_t argc,
+ NPVariant *_result)
+{
+ TOTEM_LOG_INVOKE (aIndex, totemConeVideo);
+
+ switch (Methods (aIndex)) {
+ case eToggleFullscreen: {
+ /* FIXMEchpe this sucks */
+ NPVariant fullscreen;
+ BOOLEAN_TO_NPVARIANT (!Plugin()->IsFullscreen(), fullscreen);
+ return SetPropertyByIndex (eFullscreen, &fullscreen);
+ }
+
+ case eToggleTeletext:
+ TOTEM_WARN_INVOKE_UNIMPLEMENTED (aIndex, totemConeVideo);
+ return VoidVariant (_result);
+ }
+
+ return false;
+}
+
+bool
+totemConeVideo::GetPropertyByIndex (int aIndex,
+ NPVariant *_result)
+{
+ TOTEM_LOG_GETTER (aIndex, totemConeVideo);
+
+ switch (Properties (aIndex)) {
+ case eFullscreen:
+ return BoolVariant (_result, Plugin()->IsFullscreen());
+
+ case eAspectRatio:
+ case eHeight:
+ case eSubtitle:
+ case eTeletext:
+ case eWidth:
+ TOTEM_WARN_GETTER_UNIMPLEMENTED (aIndex, _result);
+ return VoidVariant (_result);
+ }
+
+ return false;
+}
+
+bool
+totemConeVideo::SetPropertyByIndex (int aIndex,
+ const NPVariant *aValue)
+{
+ TOTEM_LOG_SETTER (aIndex, totemConeVideo);
+
+ switch (Properties (aIndex)) {
+ case eFullscreen: {
+ bool fullscreen;
+ if (!GetBoolFromArguments (aValue, 1, 0, fullscreen))
+ return false;
+
+ Plugin()->SetFullscreen (fullscreen);
+ return true;
+ }
+
+ case eAspectRatio:
+ case eSubtitle:
+ case eTeletext:
+ TOTEM_WARN_SETTER_UNIMPLEMENTED (aIndex, _result);
+ return true;
+
+ case eHeight:
+ case eWidth:
+ return ThrowPropertyNotWritable ();
+ }
+
+ return false;
+}
diff --git a/browser-plugin/totemConeVideo.h b/browser-plugin/totemConeVideo.h
new file mode 100644
index 00000000..46ed8065
--- /dev/null
+++ b/browser-plugin/totemConeVideo.h
@@ -0,0 +1,61 @@
+/* Totem Cone plugin
+ *
+ * Copyright © 2004 Bastien Nocera <hadess@hadess.net>
+ * Copyright © 2002 David A. Schleef <ds@schleef.org>
+ * Copyright © 2006, 2007, 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 __TOTEM_CONE_VIDEO_H__
+#define __TOTEM_CONE_VIDEO_H__
+
+#include "totemNPClass.h"
+#include "totemNPObject.h"
+
+class totemConeVideo : public totemNPObject
+{
+ public:
+ totemConeVideo (NPP);
+ virtual ~totemConeVideo ();
+
+ private:
+
+ enum Methods {
+ eToggleFullscreen,
+ eToggleTeletext
+ };
+
+ enum Properties {
+ eAspectRatio,
+ eFullscreen,
+ eHeight,
+ eSubtitle,
+ eTeletext,
+ eWidth
+ };
+
+ virtual bool InvokeByIndex (int aIndex, const NPVariant *argv, uint32_t argc, NPVariant *_result);
+ virtual bool GetPropertyByIndex (int aIndex, NPVariant *_result);
+ virtual bool SetPropertyByIndex (int aIndex, const NPVariant *aValue);
+
+ bool mMute;
+ double mSaveVolume;
+};
+
+TOTEM_DEFINE_NPCLASS (totemConeVideo);
+
+#endif /* __TOTEM_CONE_VIDEO_H__ */
diff --git a/browser-plugin/totemDebug.h b/browser-plugin/totemDebug.h
deleted file mode 100644
index 21293d0c..00000000
--- a/browser-plugin/totemDebug.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright © 2006, 2007 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.
- *
- * $Id$
- */
-
-#ifndef __TOTEM_PLUGIN_DEBUG_H__
-#define __TOTEM_PLUGIN_DEBUG_H__
-
-#define TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED() \
-static PRBool warned = PR_FALSE;\
-if (!warned) {\
- D ("WARNING: Site uses unimplemented function '" TOTEM_SCRIPTABLE_INTERFACE "::%s'", __func__);\
- warned = PR_TRUE;\
-}
-
-#define TOTEM_SCRIPTABLE_WARN_ACCESS() \
-static PRBool warned = PR_FALSE;\
-if (!warned) {\
- D ("WARNING: Site uses forbidden function '" TOTEM_SCRIPTABLE_INTERFACE "::%s'", __func__);\
- warned = PR_TRUE;\
-}
-
-#define TOTEM_SCRIPTABLE_LOG_ACCESS() \
-static PRBool logged = PR_FALSE;\
-if (!logged) {\
- D ("NOTE: Site uses function '" TOTEM_SCRIPTABLE_INTERFACE "::%s'", __func__);\
- logged = PR_TRUE;\
-}
-
-#endif /* !__TOTEM_PLUGIN_DEBUG_H__ */
diff --git a/browser-plugin/totemGMPControls.cpp b/browser-plugin/totemGMPControls.cpp
new file mode 100644
index 00000000..bcfdaa64
--- /dev/null
+++ b/browser-plugin/totemGMPControls.cpp
@@ -0,0 +1,200 @@
+/* Totem GMP plugin
+ *
+ * Copyright © 2004 Bastien Nocera <hadess@hadess.net>
+ * Copyright © 2002 David A. Schleef <ds@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.
+ */
+
+#include <config.h>
+
+#include <string.h>
+
+#include <glib.h>
+
+#include "totemPlugin.h"
+#include "totemGMPControls.h"
+
+static const char *propertyNames[] = {
+ "audioLanguageCount",
+ "currentAudioLanguage",
+ "currentAudioLanguageIndex",
+ "currentItem",
+ "currentMarker",
+ "currentPosition",
+ "currentPositionString",
+ "currentPositionTimecode"
+};
+
+static const char *methodNames[] = {
+ "fastForward",
+ "fastReverse",
+ "getAudioLanguageDescription",
+ "getAudioLanguageID",
+ "getLanguageName",
+ "isAvailable",
+ "next",
+ "pause",
+ "play",
+ "playItem",
+ "previous",
+ "step",
+ "stop"
+};
+
+TOTEM_IMPLEMENT_NPCLASS (totemGMPControls,
+ propertyNames, G_N_ELEMENTS (propertyNames),
+ methodNames, G_N_ELEMENTS (methodNames),
+ NULL);
+
+totemGMPControls::totemGMPControls (NPP aNPP)
+ : totemNPObject (aNPP)
+{
+ TOTEM_LOG_CTOR ();
+}
+
+totemGMPControls::~totemGMPControls ()
+{
+ TOTEM_LOG_DTOR ();
+}
+
+bool
+totemGMPControls::InvokeByIndex (int aIndex,
+ const NPVariant *argv,
+ uint32_t argc,
+ NPVariant *_result)
+{
+ TOTEM_LOG_INVOKE (aIndex, totemGMPControls);
+
+ switch (Methods (aIndex)) {
+ case ePause:
+ /* void pause (); */
+ Plugin()->Command (TOTEM_COMMAND_PAUSE);
+ return VoidVariant (_result);
+
+ case ePlay:
+ /* void play (); */
+ Plugin()->Command (TOTEM_COMMAND_PLAY);
+ return VoidVariant (_result);
+
+ case eStop:
+ /* void stop (); */
+ Plugin()->Command (TOTEM_COMMAND_PAUSE);
+ return VoidVariant (_result);
+
+ case eGetAudioLanguageDescription:
+ /* AUTF8String getAudioLanguageDescription (in long index); */
+ TOTEM_WARN_1_INVOKE_UNIMPLEMENTED (aIndex,totemGMPControls);
+ return StringVariant (_result, "English");
+
+ case eGetLanguageName:
+ /* AUTF8String getLanguageName (in long LCID); */
+ TOTEM_WARN_1_INVOKE_UNIMPLEMENTED (aIndex,totemGMPControls);
+ return StringVariant (_result, "English");
+
+ case eIsAvailable:
+ /* boolean isAvailable (in ACString name); */
+ TOTEM_WARN_1_INVOKE_UNIMPLEMENTED (aIndex,totemGMPControls);
+ return BoolVariant (_result, true);
+
+ case eFastForward:
+ /* void fastForward (); */
+ case eFastReverse:
+ /* void fastReverse (); */
+ case eGetAudioLanguageID:
+ /* long getAudioLanguageID (in long index); */
+ case eNext:
+ /* void next (); */
+ case ePlayItem:
+ /* void playItem (in totemIGMPMedia theMediaItem); */
+ case ePrevious:
+ /* void previous (); */
+ case eStep:
+ /* void step (in long frameCount); */
+ TOTEM_WARN_INVOKE_UNIMPLEMENTED (aIndex,totemGMPControls);
+ return VoidVariant (_result);
+ }
+
+ return false;
+}
+
+bool
+totemGMPControls::GetPropertyByIndex (int aIndex,
+ NPVariant *_result)
+{
+ TOTEM_LOG_SETTER (aIndex, totemGMPControls);
+
+ switch (Properties (aIndex)) {
+ case eCurrentPosition:
+ /* attribute double currentPosition; */
+ return DoubleVariant (_result, double (Plugin()->Time()) / 1000.0);
+
+ case eCurrentItem:
+ /* attribute totemIGMPMedia currentItem; */
+ case eCurrentPositionTimecode:
+ /* attribute ACString currentPositionTimecode; */
+ case eCurrentPositionString:
+ /* readonly attribute ACString currentPositionString; */
+ TOTEM_WARN_GETTER_UNIMPLEMENTED (aIndex, totemGMPControls);
+ return StringVariant (_result, "");
+
+ case eAudioLanguageCount:
+ /* readonly attribute long audioLanguageCount; */
+ case eCurrentAudioLanguage:
+ /* attribute long currentAudioLanguage; */
+ case eCurrentAudioLanguageIndex:
+ /* attribute long currentAudioLanguageIndex; */
+ case eCurrentMarker:
+ /* attribute long currentMarker; */
+ TOTEM_WARN_GETTER_UNIMPLEMENTED (aIndex, totemGMPControls);
+ return Int32Variant (_result, 0);
+ }
+
+ return false;
+}
+
+bool
+totemGMPControls::SetPropertyByIndex (int aIndex,
+ const NPVariant *aValue)
+{
+ TOTEM_LOG_SETTER (aIndex, totemGMPControls);
+
+ switch (Properties (aIndex)) {
+ case eCurrentAudioLanguage:
+ /* attribute long currentAudioLanguage; */
+ case eCurrentAudioLanguageIndex:
+ /* attribute long currentAudioLanguageIndex; */
+ case eCurrentItem:
+ /* attribute totemIGMPMedia currentItem; */
+ case eCurrentMarker:
+ /* attribute long currentMarker; */
+ case eCurrentPosition:
+ /* attribute double currentPosition; */
+ case eCurrentPositionTimecode:
+ /* attribute ACString currentPositionTimecode; */
+ TOTEM_WARN_SETTER_UNIMPLEMENTED(aIndex, totemGMPControls);
+ return true;
+
+ case eAudioLanguageCount:
+ /* readonly attribute long audioLanguageCount; */
+ case eCurrentPositionString:
+ /* readonly attribute ACString currentPositionString; */
+ return ThrowPropertyNotWritable ();
+ }
+
+ return false;
+}
diff --git a/browser-plugin/totemGMPControls.h b/browser-plugin/totemGMPControls.h
new file mode 100644
index 00000000..073624ad
--- /dev/null
+++ b/browser-plugin/totemGMPControls.h
@@ -0,0 +1,71 @@
+/* Totem GMP plugin
+ *
+ * Copyright © 2004 Bastien Nocera <hadess@hadess.net>
+ * Copyright © 2002 David A. Schleef <ds@schleef.org>
+ * Copyright © 2006, 2007, 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 __TOTEM_GMP_CONTROLS_H__
+#define __TOTEM_GMP_CONTROLS_H__
+
+#include "totemNPClass.h"
+#include "totemNPObject.h"
+
+class totemGMPControls : public totemNPObject
+{
+ public:
+ totemGMPControls (NPP);
+ virtual ~totemGMPControls ();
+
+ private:
+
+ enum Methods {
+ eFastForward,
+ eFastReverse,
+ eGetAudioLanguageDescription,
+ eGetAudioLanguageID,
+ eGetLanguageName,
+ eIsAvailable,
+ eNext,
+ ePause,
+ ePlay,
+ ePlayItem,
+ ePrevious,
+ eStep,
+ eStop
+ };
+
+ enum Properties {
+ eAudioLanguageCount,
+ eCurrentAudioLanguage,
+ eCurrentAudioLanguageIndex,
+ eCurrentItem,
+ eCurrentMarker,
+ eCurrentPosition,
+ eCurrentPositionString,
+ eCurrentPositionTimecode
+ };
+
+ virtual bool InvokeByIndex (int aIndex, const NPVariant *argv, uint32_t argc, NPVariant *_result);
+ virtual bool GetPropertyByIndex (int aIndex, NPVariant *_result);
+ virtual bool SetPropertyByIndex (int aIndex, const NPVariant *aValue);
+};
+
+TOTEM_DEFINE_NPCLASS (totemGMPControls);
+
+#endif /* __TOTEM_GMP_CONTROLS_H__ */
diff --git a/browser-plugin/totemGMPError.cpp b/browser-plugin/totemGMPError.cpp
index 05922285..940243dc 100644
--- a/browser-plugin/totemGMPError.cpp
+++ b/browser-plugin/totemGMPError.cpp
@@ -1,6 +1,8 @@
/* Totem GMP plugin
*
- * Copyright © 2006, 2007 Christian Persch
+ * Copyright © 2004 Bastien Nocera <hadess@hadess.net>
+ * Copyright © 2002 David A. Schleef <ds@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
@@ -16,171 +18,87 @@
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
- *
- * $Id: totemGMPPlugin.cpp 3928 2007-01-22 14:59:07Z chpe $
*/
-#include <mozilla-config.h>
-#include "config.h"
-
-#include <glib.h>
-
-#include <nsDOMError.h>
-#include <nsIProgrammingLanguage.h>
-#include <nsISupportsImpl.h>
-#include <nsMemory.h>
-#include <nsXPCOM.h>
-
-#define GNOME_ENABLE_DEBUG 1
-/* define GNOME_ENABLE_DEBUG for more debug spew */
-#include "debug.h"
+#include <config.h>
-#include "totemDebug.h"
-#include "totemClassInfo.h"
+#include <string.h>
-#include "totemGMPPlugin.h"
-#include "totemPlugin.h"
+#include <glib.h>
#include "totemGMPError.h"
-/* 2908e683-6162-45ed-8167-f555579d2411 */
-static const nsCID kClassID =
- { 0x2908e683, 0x6162, 0x45ed, \
- { 0x81, 0x67, 0xf5, 0x55, 0x57, 0x9d, 0x24, 0x11 } };
+static const char *propertyNames[] = {
+ "errorCount",
+};
-static const char kClassDescription[] = "totemGMPError";
+static const char *methodNames[] = {
+ "clearErrorQueue",
+ "item",
+ "webHelp"
+};
-/* NOTE: For now we'll implement totemIGMPError and totemIGMPErrorItem on the same
- * object and only ever present at most _one_ error. If that ever changes,
- * we'll need to split this.
- */
+TOTEM_IMPLEMENT_NPCLASS (totemGMPError,
+ propertyNames, G_N_ELEMENTS (propertyNames),
+ methodNames, G_N_ELEMENTS (methodNames),
+ NULL);
-totemGMPError::totemGMPError (totemScriptablePlugin *aPlugin)
- : mPlugin(aPlugin),
- mCount(0)
+totemGMPError::totemGMPError (NPP aNPP)
+ : totemNPObject (aNPP)
{
- D ("%s ctor [%p]", kClassDescription, (void*) this);
+ TOTEM_LOG_CTOR ();
}
totemGMPError::~totemGMPError ()
{
- D ("%s dtor [%p]", kClassDescription, (void*) this);
-}
-
-/* Interface implementations */
-
-NS_IMPL_ISUPPORTS3 (totemGMPError,
- totemIGMPError,
- totemIGMPErrorItem,
- nsIClassInfo)
-
-/* nsIClassInfo */
-
-TOTEM_CLASSINFO_BEGIN (totemGMPError,
- 2,
- kClassID,
- kClassDescription)
- TOTEM_CLASSINFO_ENTRY (0, totemIGMPError)
- TOTEM_CLASSINFO_ENTRY (1, totemIGMPErrorItem)
-TOTEM_CLASSINFO_END
-
-/* totemIGMPError */
-
-#undef TOTEM_SCRIPTABLE_INTERFACE
-#define TOTEM_SCRIPTABLE_INTERFACE "totemIGMPError"
-
-/* void clearErrorQueue (); */
-NS_IMETHODIMP
-totemGMPError::ClearErrorQueue()
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- mCount = 0;
- return NS_OK;
-}
-
-/* readonly attribute long errorCount; */
-NS_IMETHODIMP
-totemGMPError::GetErrorCount(PRInt32 *aErrorCount)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- *aErrorCount = mCount;
- return NS_OK;
-}
-
-/* totemIGMPErrorItem item (in long index); */
-NS_IMETHODIMP
-totemGMPError::Item(PRInt32 index, totemIGMPErrorItem **_retval)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- if (index < 0 || index >= mCount)
- return NS_ERROR_ILLEGAL_VALUE;
-
- return CallQueryInterface (this, _retval);
-}
-
-/* void webHelp (); */
-NS_IMETHODIMP
-totemGMPError::WebHelp()
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_OK;
+ TOTEM_LOG_DTOR ();
}
-/* totemIGMPErrorItem */
-
-#undef TOTEM_SCRIPTABLE_INTERFACE
-#define TOTEM_SCRIPTABLE_INTERFACE "totemIGMPErrorItem"
-
-/* readonly attribute long condition; */
-NS_IMETHODIMP
-totemGMPError::GetCondition(PRInt32 *aCondition)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- *aCondition = 0;
- return NS_OK;
-}
-
-/* readonly attribute AUTF8String customURL; */
-NS_IMETHODIMP
-totemGMPError::GetCustomURL(nsACString & aCustomURL)
+bool
+totemGMPError::InvokeByIndex (int aIndex,
+ const NPVariant *argv,
+ uint32_t argc,
+ NPVariant *_result)
{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- aCustomURL.Assign ("http://www.gnome.org/projects/totem");
- return NS_OK;
+ TOTEM_LOG_INVOKE (aIndex, totemGMPError);
+
+ switch (Methods (aIndex)) {
+ case eClearErrorQueue:
+ /* void clearErrorQueue (); */
+ case eWebHelp:
+ /* void webHelp (); */
+ TOTEM_WARN_INVOKE_UNIMPLEMENTED (aIndex, totemGMPError);
+ return VoidVariant (_result);
+
+ case eItem:
+ /* totemIGMPErrorItem item (in long index); */
+ TOTEM_WARN_1_INVOKE_UNIMPLEMENTED (aIndex, totemGMPError);
+ return NullVariant (_result);
+ }
+
+ return false;
}
-/* readonly attribute long errorCode; */
-NS_IMETHODIMP
-totemGMPError::GetErrorCode(PRInt32 *aErrorCode)
+bool
+totemGMPError::GetPropertyByIndex (int aIndex,
+ NPVariant *_result)
{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
+ TOTEM_LOG_GETTER (aIndex, totemGMPError);
- *aErrorCode = 0;
- return NS_OK;
-}
-
-/* readonly attribute AUTF8String errorContext; */
-NS_IMETHODIMP
-totemGMPError::GetErrorContext(nsACString & aErrorContext)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
+ switch (Properties (aIndex)) {
+ case eErrorCount:
+ /* readonly attribute long errorCount; */
+ return Int32Variant (_result, 0);
+ }
- aErrorContext.Assign ("");
- return NS_OK;
+ return false;
}
-/* readonly attribute AUTF8String errorDescription; */
-NS_IMETHODIMP
-totemGMPError::GetErrorDescription(nsACString & aErrorDescription)
+bool
+totemGMPError::SetPropertyByIndex (int aIndex,
+ const NPVariant *aValue)
{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
+ TOTEM_LOG_SETTER (aIndex, totemGMPError);
- aErrorDescription.Assign ("");
- return NS_OK;
+ return ThrowPropertyNotWritable ();
}
diff --git a/browser-plugin/totemGMPError.h b/browser-plugin/totemGMPError.h
index 273e4b3f..c42e1c46 100644
--- a/browser-plugin/totemGMPError.h
+++ b/browser-plugin/totemGMPError.h
@@ -1,6 +1,8 @@
/* Totem GMP plugin
*
- * Copyright © 2006, 2007 Christian Persch
+ * Copyright © 2004 Bastien Nocera <hadess@hadess.net>
+ * Copyright © 2002 David A. Schleef <ds@schleef.org>
+ * Copyright © 2006, 2007, 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
@@ -16,37 +18,37 @@
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
- *
- * $Id: totemGMPPlugin.h 3717 2006-11-15 17:21:16Z chpe $
*/
-#ifndef __GMP_ERROR_H__
-#define __GMP_ERROR_H__
-
-#include <nsIClassInfo.h>
+#ifndef __TOTEM_GMP_ERROR_H__
+#define __TOTEM_GMP_ERROR_H__
-#include "totemIGMPError.h"
-#include "totemIGMPErrorItem.h"
+#include "totemNPClass.h"
+#include "totemNPObject.h"
-class totemScriptablePlugin;
-
-class totemGMPError : public totemIGMPError,
- public totemIGMPErrorItem,
- public nsIClassInfo
+class totemGMPError : public totemNPObject
{
public:
- NS_DECL_ISUPPORTS
- NS_DECL_TOTEMIGMPERROR
- NS_DECL_TOTEMIGMPERRORITEM
- NS_DECL_NSICLASSINFO
-
- totemGMPError (totemScriptablePlugin *aPlugin);
+ totemGMPError (NPP);
+ virtual ~totemGMPError ();
private:
- ~totemGMPError ();
- totemScriptablePlugin *mPlugin;
- PRInt32 mCount;
+ enum Methods {
+ eClearErrorQueue,
+ eItem,
+ eWebHelp
+ };
+
+ enum Properties {
+ eErrorCount
+ };
+
+ virtual bool InvokeByIndex (int aIndex, const NPVariant *argv, uint32_t argc, NPVariant *_result);
+ virtual bool GetPropertyByIndex (int aIndex, NPVariant *_result);
+ virtual bool SetPropertyByIndex (int aIndex, const NPVariant *aValue);
};
-#endif /* __GMP_ERROR_H__ */
+TOTEM_DEFINE_NPCLASS (totemGMPError);
+
+#endif /* __TOTEM_GMP_ERROR_H__ */
diff --git a/browser-plugin/totemGMPErrorItem.cpp b/browser-plugin/totemGMPErrorItem.cpp
new file mode 100644
index 00000000..a8fbff5f
--- /dev/null
+++ b/browser-plugin/totemGMPErrorItem.cpp
@@ -0,0 +1,89 @@
+/* Totem GMP plugin
+ *
+ * Copyright © 2004 Bastien Nocera <hadess@hadess.net>
+ * Copyright © 2002 David A. Schleef <ds@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.
+ */
+
+#include <config.h>
+
+#include <string.h>
+
+#include <glib.h>
+
+#include "totemGMPErrorItem.h"
+
+static const char *propertyNames[] = {
+ "condition",
+ "customURL",
+ "errorCode",
+ "errorContext",
+ "errorDescription",
+};
+
+TOTEM_IMPLEMENT_NPCLASS (totemGMPErrorItem,
+ propertyNames, G_N_ELEMENTS (propertyNames),
+ NULL, 0,
+ NULL);
+
+totemGMPErrorItem::totemGMPErrorItem (NPP aNPP)
+ : totemNPObject (aNPP)
+{
+ TOTEM_LOG_CTOR ();
+}
+
+totemGMPErrorItem::~totemGMPErrorItem ()
+{
+ TOTEM_LOG_DTOR ();
+}
+
+bool
+totemGMPErrorItem::GetPropertyByIndex (int aIndex,
+ NPVariant *_result)
+{
+ TOTEM_LOG_GETTER (aIndex, totemGMPErrorItem);
+
+ switch (Properties (aIndex)) {
+ case eCondition:
+ /* readonly attribute long condition; */
+ case eErrorCode:
+ /* readonly attribute long errorCode; */
+ return Int32Variant (_result, 0);
+
+ case eErrorContext:
+ /* readonly attribute AUTF8String errorContext; */
+ case eErrorDescription:
+ /* readonly attribute AUTF8String errorDescription; */
+ return StringVariant (_result, "Error<1>");
+
+ case eCustomURL:
+ /* readonly attribute AUTF8String customURL; */
+ return StringVariant (_result, "http://www.gnome.org/projects/totem");
+ }
+
+ return false;
+}
+
+bool
+totemGMPErrorItem::SetPropertyByIndex (int aIndex,
+ const NPVariant *aValue)
+{
+ TOTEM_LOG_SETTER (aIndex, totemGMPErrorItem);
+
+ return ThrowPropertyNotWritable ();
+}
diff --git a/browser-plugin/totemGMPErrorItem.h b/browser-plugin/totemGMPErrorItem.h
new file mode 100644
index 00000000..a04d8f0a
--- /dev/null
+++ b/browser-plugin/totemGMPErrorItem.h
@@ -0,0 +1,51 @@
+/* Totem GMP plugin
+ *
+ * Copyright © 2004 Bastien Nocera <hadess@hadess.net>
+ * Copyright © 2002 David A. Schleef <ds@schleef.org>
+ * Copyright © 2006, 2007, 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 __TOTEM_GMP_ERROR_ITEM_H__
+#define __TOTEM_GMP_ERROR_ITEM_H__
+
+#include "totemNPClass.h"
+#include "totemNPObject.h"
+
+class totemGMPErrorItem : public totemNPObject
+{
+ public:
+ totemGMPErrorItem (NPP);
+ virtual ~totemGMPErrorItem ();
+
+ private:
+
+ enum Properties {
+ eCondition,
+ eCustomURL,
+ eErrorCode,
+ eErrorContext,
+ eErrorDescription
+ };
+
+ virtual bool GetPropertyByIndex (int aIndex, NPVariant *_result);
+ virtual bool SetPropertyByIndex (int aIndex, const NPVariant *aValue);
+};
+
+TOTEM_DEFINE_NPCLASS (totemGMPErrorItem);
+
+#endif /* __TOTEM_GMP_ERROR_ITEM_H__ */
diff --git a/browser-plugin/totemGMPNetwork.cpp b/browser-plugin/totemGMPNetwork.cpp
new file mode 100644
index 00000000..a8b331a3
--- /dev/null
+++ b/browser-plugin/totemGMPNetwork.cpp
@@ -0,0 +1,171 @@
+/* Totem GMP plugin
+ *
+ * Copyright © 2004 Bastien Nocera <hadess@hadess.net>
+ * Copyright © 2002 David A. Schleef <ds@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.
+ */
+
+#include <config.h>
+
+#include <string.h>
+
+#include <glib.h>
+
+#include "npupp.h"
+
+#include "totemPlugin.h"
+#include "totemGMPNetwork.h"
+
+static const char *propertyNames[] = {
+ "bandWidth",
+ "bitRate",
+ "bufferingCount",
+ "bufferingProgress",
+ "bufferingTime",
+ "downloadProgress",
+ "encodedFrameRate",
+ "frameRate",
+ "framesSkipped",
+ "lostPackets",
+ "maxBandwidth",
+ "maxBitRate",
+ "receivedPackets",
+ "receptionQuality",
+ "recoveredPackets",
+ "sourceProtocol"
+};
+
+static const char *methodNames[] = {
+ "getProxyBypassForLocal",
+ "getProxyExceptionList",
+ "getProxyName",
+ "getProxyPort",
+ "getProxySettings",
+ "setProxyBypassForLocal",
+ "setProxyExceptionList",
+ "setProxyName",
+ "setProxyPort",
+ "setProxySettings"
+};
+
+TOTEM_IMPLEMENT_NPCLASS (totemGMPNetwork,
+ propertyNames, G_N_ELEMENTS (propertyNames),
+ methodNames, G_N_ELEMENTS (methodNames),
+ NULL);
+
+totemGMPNetwork::totemGMPNetwork (NPP aNPP)
+ : totemNPObject (aNPP)
+{
+ TOTEM_LOG_CTOR ();
+}
+
+totemGMPNetwork::~totemGMPNetwork ()
+{
+ TOTEM_LOG_DTOR ();
+}
+
+bool
+totemGMPNetwork::InvokeByIndex (int aIndex,
+ const NPVariant *argv,
+ uint32_t argc,
+ NPVariant *_result)
+{
+ TOTEM_LOG_INVOKE (aIndex, totemGMPNetwork);
+
+ switch (Methods (aIndex)) {
+ case eGetProxyBypassForLocal:
+ case eGetProxyExceptionList:
+ case eGetProxyName:
+ case eGetProxyPort:
+ case eGetProxySettings:
+ case eSetProxyBypassForLocal:
+ case eSetProxyExceptionList:
+ case eSetProxyName:
+ case eSetProxyPort:
+ case eSetProxySettings:
+ return ThrowSecurityError ();
+ }
+
+ return false;
+}
+
+bool
+totemGMPNetwork::GetPropertyByIndex (int aIndex,
+ NPVariant *_result)
+{
+ TOTEM_LOG_GETTER (aIndex, totemGMPNetwork);
+
+ switch (Properties (aIndex)) {
+ case eBandWidth:
+ /* readonly attribute long bandWidth; */
+ return Int32Variant (_result, Plugin()->Bandwidth() / 1024);
+
+ case eBitRate:
+ case eBufferingCount:
+ case eBufferingProgress:
+ case eBufferingTime:
+ case eDownloadProgress:
+ case eEncodedFrameRate:
+ case eFrameRate:
+ case eFramesSkipped:
+ case eLostPackets:
+ case eMaxBandwidth:
+ case eMaxBitRate:
+ case eReceivedPackets:
+ case eReceptionQuality:
+ case eRecoveredPackets:
+ case eSourceProtocol:
+ TOTEM_WARN_GETTER_UNIMPLEMENTED (aIndex, totemGMPNetwork);
+ return Int32Variant (_result, 0);
+ }
+
+ return false;
+}
+
+bool
+totemGMPNetwork::SetPropertyByIndex (int aIndex,
+ const NPVariant *aValue)
+{
+ TOTEM_LOG_SETTER (aIndex, totemGMPNetwork);
+
+ switch (Properties (aIndex)) {
+ case eBufferingTime:
+ case eMaxBandwidth:
+ TOTEM_WARN_SETTER_UNIMPLEMENTED (aIndex, totemGMPNetwork);
+ return true;
+
+ case eBandWidth:
+ /* readonly attribute long bandWidth; */
+ case eBitRate:
+ case eBufferingCount:
+ case eBufferingProgress:
+ case eDownloadProgress:
+ case eEncodedFrameRate:
+ case eFrameRate:
+ case eFramesSkipped:
+ case eLostPackets:
+ case eMaxBitRate:
+ case eReceivedPackets:
+ case eReceptionQuality:
+ case eRecoveredPackets:
+ case eSourceProtocol:
+ return ThrowPropertyNotWritable ();
+ }
+
+ return false;
+}
diff --git a/browser-plugin/totemGMPNetwork.h b/browser-plugin/totemGMPNetwork.h
new file mode 100644
index 00000000..75cab49c
--- /dev/null
+++ b/browser-plugin/totemGMPNetwork.h
@@ -0,0 +1,81 @@
+/* Totem GMP plugin
+ *
+ * Copyright © 2004 Bastien Nocera <hadess@hadess.net>
+ * Copyright © 2002 David A. Schleef <ds@schleef.org>
+ * Copyright © 2006, 2007, 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 __TOTEM_GMP_NETWORK_H__
+#define __TOTEM_GMP_NETWORK_H__
+
+#include "totemNPClass.h"
+#include "totemNPObject.h"
+
+class totemGMPSettings;
+
+class totemGMPNetwork : public totemNPObject
+{
+ public:
+ totemGMPNetwork (NPP);
+ virtual ~totemGMPNetwork ();
+
+ private:
+
+ enum Methods {
+ eGetProxyBypassForLocal,
+ eGetProxyExceptionList,
+ eGetProxyName,
+ eGetProxyPort,
+ eGetProxySettings,
+ eSetProxyBypassForLocal,
+ eSetProxyExceptionList,
+ eSetProxyName,
+ eSetProxyPort,
+ eSetProxySettings
+ };
+
+ enum Properties {
+ eBandWidth,
+ eBitRate,
+ eBufferingCount,
+ eBufferingProgress,
+ eBufferingTime,
+ eDownloadProgress,
+ eEncodedFrameRate,
+ eFrameRate,
+ eFramesSkipped,
+ eLostPackets,
+ eMaxBandwidth,
+ eMaxBitRate,
+ eReceivedPackets,
+ eReceptionQuality,
+ eRecoveredPackets,
+ eSourceProtocol
+ };
+
+ virtual bool InvokeByIndex (int aIndex, const NPVariant *argv, uint32_t argc, NPVariant *_result);
+ virtual bool GetPropertyByIndex (int aIndex, NPVariant *_result);
+ virtual bool SetPropertyByIndex (int aIndex, const NPVariant *aValue);
+
+ char *mSrc;
+ bool mWindowlessVideo;
+};
+
+TOTEM_DEFINE_NPCLASS (totemGMPNetwork);
+
+#endif /* __TOTEM_GMP_NETWORK_H__ */
diff --git a/browser-plugin/totemGMPPlayer.cpp b/browser-plugin/totemGMPPlayer.cpp
new file mode 100644
index 00000000..e4d92548
--- /dev/null
+++ b/browser-plugin/totemGMPPlayer.cpp
@@ -0,0 +1,314 @@
+/* Totem GMP plugin
+ *
+ * Copyright © 2004 Bastien Nocera <hadess@hadess.net>
+ * Copyright © 2002 David A. Schleef <ds@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.
+ */
+
+#include <config.h>
+
+#include <string.h>
+
+#include <glib.h>
+
+#include "npupp.h"
+
+#include "totemPlugin.h"
+#include "totemGMPPlayer.h"
+
+static const char *propertyNames[] = {
+ "cdromCollection",
+ "closedCaption",
+ "controls",
+ "currentMedia",
+ "currentPlaylist",
+ "dvd",
+ "enableContextMenu",
+ "enabled",
+ "error",
+ "fullScreen",
+ "isOnline",
+ "isRemote",
+ "mediaCollection",
+ "network",
+ "openState",
+ "playerApplication",
+ "playlistCollection",
+ "playState",
+ "settings",
+ "status",
+ "stretchToFit",
+ "uiMode",
+ "URL",
+ "versionInfo",
+ "windowlessVideo",
+};
+
+static const char *methodNames[] = {
+ "close",
+ "launchURL",
+ "newMedia",
+ "newPlaylist",
+ "openPlayer"
+};
+
+TOTEM_IMPLEMENT_NPCLASS (totemGMPPlayer,
+ propertyNames, G_N_ELEMENTS (propertyNames),
+ methodNames, G_N_ELEMENTS (methodNames),
+ NULL);
+
+totemGMPPlayer::totemGMPPlayer (NPP aNPP)
+ : totemNPObject (aNPP)
+{
+ TOTEM_LOG_CTOR ();
+}
+
+totemGMPPlayer::~totemGMPPlayer ()
+{
+ TOTEM_LOG_DTOR ();
+}
+
+bool
+totemGMPPlayer::InvokeByIndex (int aIndex,
+ const NPVariant *argv,
+ uint32_t argc,
+ NPVariant *_result)
+{
+ TOTEM_LOG_INVOKE (aIndex, totemGMPPlayer);
+
+ switch (Methods (aIndex)) {
+ case eNewPlaylist:
+ /* totemIGMPPlaylist newPlaylist (in AUTF8String name, in AUTF8String URL); */
+ TOTEM_WARN_INVOKE_UNIMPLEMENTED (aIndex, totemGMPPlayer);
+ return NullVariant (_result);
+
+ case eClose:
+ /* void close (); */
+ case eNewMedia:
+ /* totemIGMPMedia newMedia (in AUTF8String URL); */
+ case eOpenPlayer:
+ /* void openPlayer (in AUTF8String URL); */
+ case eLaunchURL:
+ /* void launchURL (in AUTF8String URL); */
+ return ThrowSecurityError ();
+ }
+
+ return false;
+}
+
+bool
+totemGMPPlayer::GetPropertyByIndex (int aIndex,
+ NPVariant *_result)
+{
+ TOTEM_LOG_GETTER (aIndex, totemGMPPlayer);
+
+ switch (Properties (aIndex)) {
+ case eControls:
+ /* readonly attribute totemIGMPControls controls; */
+ return ObjectVariant (_result, Plugin()->GetNPObject (totemPlugin::eGMPControls));
+
+ case eNetwork:
+ /* readonly attribute totemIGMPNetwork network; */
+ return ObjectVariant (_result, Plugin()->GetNPObject (totemPlugin::eGMPNetwork));
+
+ case eSettings:
+ /* readonly attribute totemIGMPSettings settings; */
+ return ObjectVariant (_result, Plugin()->GetNPObject (totemPlugin::eGMPSettings));
+
+ case eVersionInfo:
+ /* readonly attribute ACString versionInfo; */
+ return StringVariant (_result, TOTEM_GMP_VERSION_BUILD);
+
+ case eFullScreen:
+ /* attribute boolean fullScreen; */
+ return BoolVariant (_result, Plugin()->IsFullscreen());
+
+ case eWindowlessVideo:
+ /* attribute boolean windowlessVideo; */
+ return BoolVariant (_result, Plugin()->IsWindowless());
+
+ case eIsOnline:
+ /* readonly attribute boolean isOnline; */
+ TOTEM_WARN_1_GETTER_UNIMPLEMENTED (aIndex, totemGMPPlayer);
+ return BoolVariant (_result, true);
+
+ case eEnableContextMenu:
+ /* attribute boolean enableContextMenu; */
+ return BoolVariant (_result, Plugin()->AllowContextMenu());
+
+ case eClosedCaption:
+ /* readonly attribute totemIGMPClosedCaption closedCaption; */
+ case eCurrentMedia:
+ /* attribute totemIGMPMedia currentMedia; */
+ case eCurrentPlaylist:
+ /* attribute totemIGMPPlaylist currentPlaylist; */
+ case eError:
+ /* readonly attribute totemIGMPError error; */
+ TOTEM_WARN_GETTER_UNIMPLEMENTED (aIndex, totemGMPPlayer);
+ return NullVariant (_result);
+
+ case eStatus:
+ /* readonly attribute AUTF8String status; */
+ TOTEM_WARN_1_GETTER_UNIMPLEMENTED (aIndex, totemGMPPlayer);
+ return StringVariant (_result, "OK");
+
+ case eURL:
+ /* attribute AUTF8String URL; */
+ TOTEM_WARN_1_GETTER_UNIMPLEMENTED (aIndex, totemGMPPlayer);
+ return StringVariant (_result, Plugin()->Src()); /* FIXMEchpe use URL()? */
+
+ case eEnabled:
+ /* attribute boolean enabled; */
+ TOTEM_WARN_1_GETTER_UNIMPLEMENTED (aIndex, totemGMPPlayer);
+ return BoolVariant (_result, true);
+
+ case eOpenState:
+ /* readonly attribute long openState; */
+ TOTEM_WARN_1_GETTER_UNIMPLEMENTED (aIndex, totemGMPPlayer);
+ return Int32Variant (_result, 0);
+
+ case ePlayState:
+ /* readonly attribute long playState; */
+ TOTEM_WARN_1_GETTER_UNIMPLEMENTED (aIndex, totemGMPPlayer);
+ return Int32Variant (_result, 0);
+
+ case eStretchToFit:
+ /* attribute boolean stretchToFit; */
+ TOTEM_WARN_1_GETTER_UNIMPLEMENTED (aIndex, totemGMPPlayer);
+ return BoolVariant (_result, false);
+
+ case eUiMode:
+ /* attribute ACString uiMode; */
+ TOTEM_WARN_1_GETTER_UNIMPLEMENTED (aIndex, totemGMPPlayer);
+ return VoidVariant (_result);
+
+ case eCdromCollection:
+ /* readonly attribute totemIGMPCdromCollection cdromCollection; */
+ case eDvd:
+ /* readonly attribute totemIGMPDVD dvd; */
+ case eMediaCollection:
+ /* readonly attribute totemIGMPMediaCollection mediaCollection; */
+ case ePlayerApplication:
+ /* readonly attribute totemIGMPPlayerApplication playerApplication; */
+ case ePlaylistCollection:
+ /* readonly attribute totemIGMPPlaylistCollection playlistCollection; */
+ case eIsRemote:
+ /* readonly attribute boolean isRemote; */
+ return ThrowSecurityError ();
+ }
+
+ return false;
+}
+
+bool
+totemGMPPlayer::SetPropertyByIndex (int aIndex,
+ const NPVariant *aValue)
+{
+ TOTEM_LOG_SETTER (aIndex, totemGMPPlayer);
+
+ switch (Properties (aIndex)) {
+ case eFullScreen: {
+ /* attribute boolean fullScreen; */
+ bool enabled;
+ if (!GetBoolFromArguments (aValue, 1, 0, enabled))
+ return false;
+
+ Plugin()->SetFullscreen (enabled);
+ return true;
+ }
+
+ case eWindowlessVideo: {
+ /* attribute boolean windowlessVideo; */
+ bool enabled;
+ if (!GetBoolFromArguments (aValue, 1, 0, enabled))
+ return false;
+
+ Plugin()->SetIsWindowless(enabled);
+ return true;
+ }
+
+ case eURL: {
+ /* attribute AUTF8String URL; */
+ const char* url;
+ if (!GetStringFromArguments (aValue, 1, 0, url))
+ return false;
+
+ Plugin()->SetSrc (url); /* FIXMEchpe: use SetURL instead?? */
+ return true;
+ }
+
+ case eEnableContextMenu: {
+ /* attribute boolean enableContextMenu; */
+ bool enabled;
+ if (!GetBoolFromArguments (aValue, 1, 0, enabled))
+ return false;
+
+ Plugin()->SetAllowContextMenu (enabled);
+ return true;
+ }
+
+ case eCurrentMedia:
+ /* attribute totemIGMPMedia currentMedia; */
+ case eCurrentPlaylist:
+ /* attribute totemIGMPPlaylist currentPlaylist; */
+ case eEnabled:
+ /* attribute boolean enabled; */
+ case eStretchToFit:
+ /* attribute boolean stretchToFit; */
+ case eUiMode:
+ /* attribute ACString uiMode; */
+ TOTEM_WARN_SETTER_UNIMPLEMENTED (aIndex, totemGMPPlayer);
+ return true;
+
+ case eCdromCollection:
+ /* readonly attribute totemIGMPCdromCollection cdromCollection; */
+ case eClosedCaption:
+ /* readonly attribute totemIGMPClosedCaption closedCaption; */
+ case eControls:
+ /* readonly attribute totemIGMPControls controls; */
+ case eDvd:
+ /* readonly attribute totemIGMPDVD dvd; */
+ case eError:
+ /* readonly attribute totemIGMPError error; */
+ case eIsOnline:
+ /* readonly attribute boolean isOnline; */
+ case eIsRemote:
+ /* readonly attribute boolean isRemote; */
+ case eMediaCollection:
+ /* readonly attribute totemIGMPMediaCollection mediaCollection; */
+ case eNetwork:
+ /* readonly attribute totemIGMPNetwork network; */
+ case eOpenState:
+ /* readonly attribute long openState; */
+ case ePlayerApplication:
+ /* readonly attribute totemIGMPPlayerApplication playerApplication; */
+ case ePlaylistCollection:
+ /* readonly attribute totemIGMPPlaylistCollection playlistCollection; */
+ case ePlayState:
+ /* readonly attribute long playState; */
+ case eSettings:
+ /* readonly attribute totemIGMPSettings settings; */
+ case eStatus:
+ /* readonly attribute AUTF8String status; */
+ case eVersionInfo:
+ /* readonly attribute ACString versionInfo; */
+ return ThrowPropertyNotWritable ();
+ }
+
+ return false;
+}
diff --git a/browser-plugin/totemGMPPlayer.h b/browser-plugin/totemGMPPlayer.h
new file mode 100644
index 00000000..28e5f0d0
--- /dev/null
+++ b/browser-plugin/totemGMPPlayer.h
@@ -0,0 +1,82 @@
+/* Totem GMP plugin
+ *
+ * Copyright © 2004 Bastien Nocera <hadess@hadess.net>
+ * Copyright © 2002 David A. Schleef <ds@schleef.org>
+ * Copyright © 2006, 2007, 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 __TOTEM_GMP_PLAYER_H__
+#define __TOTEM_GMP_PLAYER_H__
+
+#include "totemNPClass.h"
+#include "totemNPObject.h"
+
+class totemGMPSettings;
+
+class totemGMPPlayer : public totemNPObject
+{
+ public:
+ totemGMPPlayer (NPP);
+ virtual ~totemGMPPlayer ();
+
+ private:
+
+ enum Methods {
+ eClose,
+ eLaunchURL,
+ eNewMedia,
+ eNewPlaylist,
+ eOpenPlayer
+ };
+
+ enum Properties {
+ eCdromCollection,
+ eClosedCaption,
+ eControls,
+ eCurrentMedia,
+ eCurrentPlaylist,
+ eDvd,
+ eEnableContextMenu,
+ eEnabled,
+ eError,
+ eFullScreen,
+ eIsOnline,
+ eIsRemote,
+ eMediaCollection,
+ eNetwork,
+ eOpenState,
+ ePlayerApplication,
+ ePlaylistCollection,
+ ePlayState,
+ eSettings,
+ eStatus,
+ eStretchToFit,
+ eUiMode,
+ eURL,
+ eVersionInfo,
+ eWindowlessVideo
+ };
+
+ virtual bool InvokeByIndex (int aIndex, const NPVariant *argv, uint32_t argc, NPVariant *_result);
+ virtual bool GetPropertyByIndex (int aIndex, NPVariant *_result);
+ virtual bool SetPropertyByIndex (int aIndex, const NPVariant *aValue);
+};
+
+TOTEM_DEFINE_NPCLASS (totemGMPPlayer);
+
+#endif /* __TOTEM_GMP_PLAYER_H__ */
diff --git a/browser-plugin/totemGMPPlaylist.cpp b/browser-plugin/totemGMPPlaylist.cpp
index ca99e890..226ed4b0 100644
--- a/browser-plugin/totemGMPPlaylist.cpp
+++ b/browser-plugin/totemGMPPlaylist.cpp
@@ -1,8 +1,8 @@
-/* Totem Basic Plugin
+/* Totem GMP plugin
*
- * Copyright (C) 2004 Bastien Nocera <hadess@hadess.net>
- * Copyright (C) 2002 David A. Schleef <ds@schleef.org>
- * Copyright (C) 2006 Christian Persch
+ * Copyright © 2004 Bastien Nocera <hadess@hadess.net>
+ * Copyright © 2002 David A. Schleef <ds@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
@@ -18,201 +18,141 @@
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
- *
- * $Id: totemGMPPlugin.cpp 3790 2006-12-15 23:08:57Z chpe $
*/
-#include <mozilla-config.h>
-#include "config.h"
-
-#include <nsDOMError.h>
-#include <nsIProgrammingLanguage.h>
-#include <nsISupportsImpl.h>
-#include <nsMemory.h>
-#include <nsXPCOM.h>
-
-#define GNOME_ENABLE_DEBUG 1
-/* define GNOME_ENABLE_DEBUG for more debug spew */
-#include "debug.h"
+#include <config.h>
-#include "totemDebug.h"
+#include <string.h>
-#include "totemGMPPlugin.h"
-#include "totemClassInfo.h"
+#include <glib.h>
#include "totemGMPPlaylist.h"
-/* cf079ca3-c94f-4676-a9ae-6d9bffd765bd */
-static const nsCID kClassID =
- { 0xcf079ca3, 0xc94f, 0x4676, \
- { 0xa9, 0xae, 0x6d, 0x9b, 0xff, 0xd7, 0x65, 0xbd } };
-
-static const char kClassDescription[] = "totemGMPPlaylist";
-
-totemGMPPlaylist::totemGMPPlaylist (totemScriptablePlugin *aScriptable)
-{
- D ("%s ctor [%p]", kClassDescription, (void*) this);
-
- /* We keep a reference to the main scriptable, so the code won't be unloaded unless it's ok to do so */
- mScriptable = aScriptable;
- NS_ADDREF (mScriptable);
+static const char *propertyNames[] = {
+ "attributeCount",
+ "count",
+ "name"
+};
+
+static const char *methodNames[] = {
+ "appendItem",
+ "attributeName",
+ "getAttributeName",
+ "getItemInfo",
+ "insertItem",
+ "isIdentical",
+ "item",
+ "moveItem",
+ "removeItem",
+ "setItemInfo"
+};
+
+TOTEM_IMPLEMENT_NPCLASS (totemGMPPlaylist,
+ propertyNames, G_N_ELEMENTS (propertyNames),
+ methodNames, G_N_ELEMENTS (methodNames),
+ NULL);
+
+totemGMPPlaylist::totemGMPPlaylist (NPP aNPP)
+ : totemNPObject (aNPP),
+ mName (NPN_StrDup ("Playlist"))
+{
+ TOTEM_LOG_CTOR ();
}
totemGMPPlaylist::~totemGMPPlaylist ()
{
- D ("%s dtor [%p]", kClassDescription, (void*) this);
+ TOTEM_LOG_DTOR ();
- NS_RELEASE (mScriptable);
- mScriptable = nsnull;
+ g_free (mName);
}
-/* Interface implementations */
-
-NS_IMPL_ISUPPORTS2 (totemGMPPlaylist,
- totemIGMPPlaylist,
- nsIClassInfo)
-
-/* nsIClassInfo */
-
-TOTEM_CLASSINFO_BEGIN (totemGMPPlaylist,
- 1,
- kClassID,
- kClassDescription)
- TOTEM_CLASSINFO_ENTRY (0, totemIGMPPlaylist)
-TOTEM_CLASSINFO_END
-
-/* totemIGMPPlayer */
-
-#undef TOTEM_SCRIPTABLE_INTERFACE
-#define TOTEM_SCRIPTABLE_INTERFACE "totemIGMPPlaylist"
-
-/* void appendItem (in totemIGMPMedia item); */
-NS_IMETHODIMP
-totemGMPPlaylist::AppendItem(totemIGMPMedia *item)
+bool
+totemGMPPlaylist::InvokeByIndex (int aIndex,
+ const NPVariant *argv,
+ uint32_t argc,
+ NPVariant *_result)
{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
+ TOTEM_LOG_INVOKE (aIndex, totemGMPPlaylist);
- return NS_OK;
-}
+ switch (Methods (aIndex)) {
+ case eAttributeName:
+ /* AUTF8String attributeName (in long index); */
+ case eGetAttributeName:
+ /* AUTF8String getAttributeName (in long index); */
+ case eGetItemInfo:
+ TOTEM_WARN_INVOKE_UNIMPLEMENTED (aIndex, totemGMPPlaylist);
+ /* AUTF8String getItemInfo (in AUTF8String name); */
+ return StringVariant (_result, "");
-/* readonly attribute long attributeCount; */
-NS_IMETHODIMP
-totemGMPPlaylist::GetAttributeCount(PRInt32 *aAttributeCount)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
+ case eIsIdentical: {
+ /* boolean isIdentical (in totemIGMPPlaylist playlist); */
+ NPObject *other;
+ if (!GetObjectFromArguments (argv, argc, 0, other))
+ return false;
- *aAttributeCount = 0;
- return NS_OK;
-}
+ return BoolVariant (_result, other == static_cast<NPObject*>(this));
+ }
-/* AUTF8String attributeName (in long index); */
-NS_IMETHODIMP
-totemGMPPlaylist::AttributeName(PRInt32 index, nsACString & _retval)
-{
- return GetAttributeName (index, _retval);
-}
+ case eItem:
+ /* totemIGMPMedia item (in long index); */
+ TOTEM_WARN_1_INVOKE_UNIMPLEMENTED (aIndex, totemGMPPlaylist);
+ return NullVariant (_result);
-/* AUTF8String getattributeName (in long index); */
-NS_IMETHODIMP
-totemGMPPlaylist::GetAttributeName(PRInt32 index, nsACString & _retval)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
+ case eAppendItem:
+ /* void appendItem (in totemIGMPMedia item); */
+ case eInsertItem:
+ /* void insertItem (in long index, in totemIGMPMedia item); */
+ case eMoveItem:
+ /* void moveItem (in long oldIndex, in long newIndex); */
+ case eRemoveItem:
+ /* void removeItem (in totemIGMPMedia item); */
+ case eSetItemInfo:
+ /* void setItemInfo (in AUTF8String name, in AUTF8String value); */
+ TOTEM_WARN_INVOKE_UNIMPLEMENTED (aIndex, totemGMPPlaylist);
+ return VoidVariant (_result);
+ }
- _retval.Assign ("");
- return NS_OK;
+ return false;
}
-/* readonly attribute long count; */
-NS_IMETHODIMP
-totemGMPPlaylist::GetCount(PRInt32 *aCount)
+bool
+totemGMPPlaylist::GetPropertyByIndex (int aIndex,
+ NPVariant *_result)
{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
+ TOTEM_LOG_GETTER (aIndex, totemGMPPlaylist);
- *aCount = 0;
- return NS_OK;
-}
+ switch (Properties (aIndex)) {
+ case eAttributeCount:
+ /* readonly attribute long attributeCount; */
+ case eCount:
+ /* readonly attribute long count; */
+ return Int32Variant (_result, 0);
-/* AUTF8String getItemInfo (in AUTF8String name); */
-NS_IMETHODIMP
-totemGMPPlaylist::GetItemInfo(const nsACString & name, nsACString & _retval)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
+ case eName:
+ /* attribute AUTF8String name; */
+ return StringVariant (_result, mName);
+ }
- _retval.Assign ("");
- return NS_OK;
+ return false;
}
-/* void insertItem (in long index, in totemIGMPMedia item); */
-NS_IMETHODIMP
-totemGMPPlaylist::InsertItem(PRInt32 index, totemIGMPMedia *item)
+bool
+totemGMPPlaylist::SetPropertyByIndex (int aIndex,
+ const NPVariant *aValue)
{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
+ TOTEM_LOG_SETTER (aIndex, totemGMPPlaylist);
- return NS_OK;
-}
-
-/* boolean isIdentical (in totemIGMPPlaylist playlist); */
-NS_IMETHODIMP
-totemGMPPlaylist::IsIdentical(totemIGMPPlaylist *playlist, PRBool *_retval)
-{
- nsISupports *thisPlaylist = static_cast<nsISupports*>
- (static_cast<totemIGMPPlaylist*>(this));
+ switch (Properties (aIndex)) {
+ case eName:
+ /* attribute AUTF8String name; */
+ return DupStringFromArguments (aValue, 1, 0, mName);
- *_retval = thisPlaylist == playlist;
- return NS_OK;
-}
-
-/* totemIGMPMedia item (in long index); */
-NS_IMETHODIMP
-totemGMPPlaylist::Item(PRInt32 index, totemIGMPMedia **_retval)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* void moveItem (in long oldIndex, in long newIndex); */
-NS_IMETHODIMP
-totemGMPPlaylist::MoveItem(PRInt32 oldIndex, PRInt32 newIndex)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_OK;
-}
-
-/* attribute AUTF8String name; */
-NS_IMETHODIMP
-totemGMPPlaylist::GetName(nsACString & aName)
-{
- TOTEM_SCRIPTABLE_LOG_ACCESS ();
-
- aName = mName;
- return NS_OK;
-}
-
-NS_IMETHODIMP
-totemGMPPlaylist::SetName(const nsACString & aName)
-{
- TOTEM_SCRIPTABLE_LOG_ACCESS ();
-
- mName = aName;
- return NS_OK;
-}
-
-/* void removeItem (in totemIGMPMedia item); */
-NS_IMETHODIMP
-totemGMPPlaylist::RemoveItem(totemIGMPMedia *item)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_OK;
-}
-
-/* void setItemInfo (in AUTF8String name, in AUTF8String value); */
-NS_IMETHODIMP
-totemGMPPlaylist::SetItemInfo(const nsACString & name, const nsACString & value)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
+ case eAttributeCount:
+ /* readonly attribute long attributeCount; */
+ case eCount:
+ /* readonly attribute long count; */
+ return ThrowPropertyNotWritable ();
+ }
- return NS_OK;
+ return false;
}
diff --git a/browser-plugin/totemGMPPlaylist.h b/browser-plugin/totemGMPPlaylist.h
index b117a48a..8ade2279 100644
--- a/browser-plugin/totemGMPPlaylist.h
+++ b/browser-plugin/totemGMPPlaylist.h
@@ -1,7 +1,8 @@
-/* Totem Basic Plugin
+/* Totem GMP plugin
*
- * Copyright (C) 2004 Bastien Nocera <hadess@hadess.net>
- * Copyright (C) 2002 David A. Schleef <ds@schleef.org>
+ * Copyright © 2004 Bastien Nocera <hadess@hadess.net>
+ * Copyright © 2002 David A. Schleef <ds@schleef.org>
+ * Copyright © 2006, 2007, 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
@@ -17,34 +18,48 @@
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
- *
- * $Id: totemScriptablePlugin.h 3717 2006-11-15 17:21:16Z chpe $
*/
-#ifndef __GMP_PLAYLIST_H__
-#define __GMP_PLAYLIST_H__
-
-#include <nsIClassInfo.h>
+#ifndef __TOTEM_GMP_PLAYLIST_H__
+#define __TOTEM_GMP_PLAYLIST_H__
-#include "totemIGMPPlaylist.h"
+#include "totemNPClass.h"
+#include "totemNPObject.h"
-#include "totemGMPPlugin.h"
-
-class totemGMPPlaylist : public totemIGMPPlaylist,
- public nsIClassInfo
+class totemGMPPlaylist : public totemNPObject
{
public:
- NS_DECL_ISUPPORTS
- NS_DECL_TOTEMIGMPPLAYLIST
- NS_DECL_NSICLASSINFO
+ totemGMPPlaylist (NPP);
+ virtual ~totemGMPPlaylist ();
- totemGMPPlaylist (totemScriptablePlugin *aScriptable);
-
private:
- ~totemGMPPlaylist ();
- totemScriptablePlugin *mScriptable;
- nsCString mName;
+ enum Methods {
+ eAppendItem,
+ eAttributeName,
+ eGetAttributeName,
+ eGetItemInfo,
+ eInsertItem,
+ eIsIdentical,
+ eItem,
+ eMoveItem,
+ eRemoveItem,
+ eSetItemInfo
+ };
+
+ enum Properties {
+ eAttributeCount,
+ eCount,
+ eName
+ };
+
+ virtual bool InvokeByIndex (int aIndex, const NPVariant *argv, uint32_t argc, NPVariant *_result);
+ virtual bool GetPropertyByIndex (int aIndex, NPVariant *_result);
+ virtual bool SetPropertyByIndex (int aIndex, const NPVariant *aValue);
+
+ char *mName;
};
-#endif /* __GMP_PLAYLIST_H__ */
+TOTEM_DEFINE_NPCLASS (totemGMPPlaylist);
+
+#endif /* __TOTEM_GMP_PLAYLIST_H__ */
diff --git a/browser-plugin/totemGMPPlugin.cpp b/browser-plugin/totemGMPPlugin.cpp
deleted file mode 100644
index 49eb57f0..00000000
--- a/browser-plugin/totemGMPPlugin.cpp
+++ /dev/null
@@ -1,739 +0,0 @@
-/* Totem GMP plugin
- *
- * Copyright (C) 2004 Bastien Nocera <hadess@hadess.net>
- * Copyright (C) 2002 David A. Schleef <ds@schleef.org>
- * Copyright (C) 2006 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.
- *
- * $Id$
- */
-
-#include <mozilla-config.h>
-#include "config.h"
-
-#include <glib.h>
-
-#include <nsDOMError.h>
-#include <nsIProgrammingLanguage.h>
-#include <nsISupportsImpl.h>
-#include <nsMemory.h>
-#include <nsXPCOM.h>
-
-#define GNOME_ENABLE_DEBUG 1
-/* define GNOME_ENABLE_DEBUG for more debug spew */
-#include "debug.h"
-
-#include "totemIGMPPlayer.h"
-#include "totemIGMPControls.h"
-
-#include "totemDebug.h"
-#include "totemClassInfo.h"
-
-#include "totemGMPPlaylist.h"
-#include "totemGMPSettings.h"
-
-#include "totemGMPPlugin.h"
-
-#define TOTEM_GMP_VERSION_BUILD "11.0.0.1024"
-
-/* 89cf81a7-1156-456f-b060-c2187df9a27c */
-static const nsCID kClassID =
- { 0x89cf81a7, 0x1156, 0x456f,
- { 0xb0, 0x60, 0xc2, 0x18, 0x7d, 0xf9, 0xa2, 0x7c } };
-
-static const char kClassDescription[] = "totemGMPPlugin";
-static const char kPluginDescription[] = "Windows Media Player Plug-in 10 (compatible; Totem)";
-
-static const totemPluginMimeEntry kMimeTypes[] = {
- { "application/x-mplayer2", "avi, wma, wmv", "video/x-msvideo" },
- { "video/x-ms-asf-plugin", "asf, wmv", "video/x-ms-asf" },
- { "video/x-msvideo", "asf, wmv", NULL },
- { "video/x-ms-asf", "asf", NULL },
- { "video/x-ms-wmv", "wmv", "video/x-ms-wmv" },
- { "video/x-wmv", "wmv", "video/x-ms-wmv" },
- { "video/x-ms-wvx", "wmv", "video/x-ms-wmv" },
- { "video/x-ms-wm", "wmv", "video/x-ms-wmv" },
- { "video/x-ms-wmp", "wmv", "video/x-ms-wmv" },
- { "application/x-ms-wms", "wms", "video/x-ms-wmv" },
- { "application/asx", "asx", "audio/x-ms-asx" },
- { "audio/x-ms-wma", "wma", NULL }
-};
-
-void*
-totemScriptablePlugin::operator new (size_t aSize) CPP_THROW_NEW
-{
- void *object = ::operator new (aSize);
- if (object) {
- memset (object, 0, aSize);
- }
-
- return object;
-}
-
-totemScriptablePlugin::totemScriptablePlugin (totemPlugin *aPlugin)
- : mPlugin(aPlugin)
-{
- D ("%s ctor [%p]", kClassDescription, (void*) this);
-}
-
-totemScriptablePlugin::~totemScriptablePlugin ()
-{
- D ("%s dtor [%p]", kClassDescription, (void*) this);
-
- NS_IF_RELEASE (mSettingsTearOff);
-}
-
-/* static */ char *
-totemScriptablePlugin::PluginDescription ()
-{
- return (char*) kPluginDescription;
-}
-
-/* static */ char *
-totemScriptablePlugin::PluginLongDescription ()
-{
- return (char*) totem_plugin_get_long_description();
-}
-
-/* static */ void
-totemScriptablePlugin::PluginMimeTypes (const totemPluginMimeEntry **_entries,
- PRUint32 *_count)
-{
- *_entries = kMimeTypes;
- *_count = G_N_ELEMENTS (kMimeTypes);
-}
-
-/* Interface implementations */
-
-NS_IMPL_ISUPPORTS3 (totemScriptablePlugin,
- totemIGMPPlayer,
- totemIGMPControls,
- nsIClassInfo)
-
-/* nsIClassInfo */
-
-TOTEM_CLASSINFO_BEGIN (totemScriptablePlugin,
- 2,
- kClassID,
- kClassDescription)
- TOTEM_CLASSINFO_ENTRY (0, totemIGMPPlayer)
- TOTEM_CLASSINFO_ENTRY (1, totemIGMPControls)
-TOTEM_CLASSINFO_END
-
-/* totemIGMPPlayer */
-
-#undef TOTEM_SCRIPTABLE_INTERFACE
-#define TOTEM_SCRIPTABLE_INTERFACE "totemIGMPPlayer"
-
-/* readonly attribute totemIGMPCdromCollection cdromCollection; */
-NS_IMETHODIMP
-totemScriptablePlugin::GetCdromCollection(totemIGMPCdromCollection * *aCdromCollection)
-{
- TOTEM_SCRIPTABLE_WARN_ACCESS ();
-
- return NS_ERROR_DOM_SECURITY_ERR;
-}
-
-/* readonly attribute totemIGMPClosedCaption closedCaption; */
-NS_IMETHODIMP
-totemScriptablePlugin::GetClosedCaption(totemIGMPClosedCaption * *aClosedCaption)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* readonly attribute totemIGMPControls controls; */
-NS_IMETHODIMP
-totemScriptablePlugin::GetControls(totemIGMPControls * *aControls)
-{
- return CallQueryInterface (this, aControls);
-}
-
-/* attribute totemIGMPMedia currentMedia; */
-NS_IMETHODIMP
-totemScriptablePlugin::GetCurrentMedia(totemIGMPMedia * *aCurrentMedia)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-NS_IMETHODIMP
-totemScriptablePlugin::SetCurrentMedia(totemIGMPMedia * aCurrentMedia)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* attribute totemIGMPPlaylist currentPlaylist; */
-NS_IMETHODIMP
-totemScriptablePlugin::GetCurrentPlaylist(totemIGMPPlaylist * *aCurrentPlaylist)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-NS_IMETHODIMP
-totemScriptablePlugin::SetCurrentPlaylist(totemIGMPPlaylist * aCurrentPlaylist)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* readonly attribute totemIGMPDVD dvd; */
-NS_IMETHODIMP
-totemScriptablePlugin::GetDvd(totemIGMPDVD * *aDvd)
-{
- TOTEM_SCRIPTABLE_WARN_ACCESS ();
-
- return NS_ERROR_DOM_SECURITY_ERR;
-}
-
-/* attribute boolean enableContextMenu; */
-NS_IMETHODIMP
-totemScriptablePlugin::GetEnableContextMenu(PRBool *aEnableContextMenu)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-NS_IMETHODIMP
-totemScriptablePlugin::SetEnableContextMenu(PRBool aEnableContextMenu)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* attribute boolean enabled; */
-NS_IMETHODIMP
-totemScriptablePlugin::GetEnabled(PRBool *aEnabled)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-NS_IMETHODIMP
-totemScriptablePlugin::SetEnabled(PRBool aEnabled)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* readonly attribute totemIGMPError error; */
-NS_IMETHODIMP
-totemScriptablePlugin::GetError(totemIGMPError * *aError)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* attribute boolean fullScreen; */
-NS_IMETHODIMP
-totemScriptablePlugin::GetFullScreen(PRBool *aFullScreen)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-NS_IMETHODIMP
-totemScriptablePlugin::SetFullScreen(PRBool aFullScreen)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* readonly attribute boolean isOnline; */
-NS_IMETHODIMP
-totemScriptablePlugin::GetIsOnline(PRBool *aIsOnline)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* readonly attribute boolean isRemote; */
-NS_IMETHODIMP
-totemScriptablePlugin::GetIsRemote(PRBool *aIsRemote)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_DOM_SECURITY_ERR;
-}
-
-/* readonly attribute totemIGMPMediaCollection mediaCollection; */
-NS_IMETHODIMP
-totemScriptablePlugin::GetMediaCollection(totemIGMPMediaCollection * *aMediaCollection)
-{
- TOTEM_SCRIPTABLE_WARN_ACCESS ();
-
- return NS_ERROR_DOM_SECURITY_ERR;
-}
-
-/* readonly attribute totemIGMPNetwork network; */
-NS_IMETHODIMP
-totemScriptablePlugin::GetNetwork(totemIGMPNetwork * *aNetwork)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* readonly attribute long openState; */
-NS_IMETHODIMP
-totemScriptablePlugin::GetOpenState(PRInt32 *aOpenState)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* readonly attribute totemIGMPPlayerApplication playerApplication; */
-NS_IMETHODIMP
-totemScriptablePlugin::GetPlayerApplication(totemIGMPPlayerApplication * *aPlayerApplication)
-{
- TOTEM_SCRIPTABLE_WARN_ACCESS ();
-
- return NS_ERROR_DOM_SECURITY_ERR;
-}
-
-/* readonly attribute totemIGMPPlaylistCollection playlistCollection; */
-NS_IMETHODIMP
-totemScriptablePlugin::GetPlaylistCollection(totemIGMPPlaylistCollection * *aPlaylistCollection)
-{
- TOTEM_SCRIPTABLE_WARN_ACCESS ();
-
- return NS_ERROR_DOM_SECURITY_ERR;
-}
-
-/* readonly attribute long playState; */
-NS_IMETHODIMP
-totemScriptablePlugin::GetPlayState(PRInt32 *aPlayState)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* readonly attribute totemIGMPSettings settings; */
-NS_IMETHODIMP
-totemScriptablePlugin::GetSettings(totemIGMPSettings * *aSettings)
-{
- NS_ENSURE_STATE (IsValid ());
-
- if (!mSettingsTearOff) {
- mSettingsTearOff = new totemGMPSettings (this);
- if (!mSettingsTearOff)
- return NS_ERROR_OUT_OF_MEMORY;
- NS_ADDREF (mSettingsTearOff);
- }
-
- return CallQueryInterface (mSettingsTearOff, aSettings);
-}
-
-/* readonly attribute AUTF8String status; */
-NS_IMETHODIMP
-totemScriptablePlugin::GetStatus(nsACString & aStatus)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- /* FIXME */
- aStatus.Assign ("OK");
- return NS_OK;
-}
-
-/* attribute boolean stretchToFit; */
-NS_IMETHODIMP
-totemScriptablePlugin::GetStretchToFit(PRBool *aStretchToFit)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-NS_IMETHODIMP
-totemScriptablePlugin::SetStretchToFit(PRBool aStretchToFit)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* attribute AUTF8String uiMode; */
-NS_IMETHODIMP
-totemScriptablePlugin::GetUiMode(nsACString & aUiMode)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-NS_IMETHODIMP
-totemScriptablePlugin::SetUiMode(const nsACString & aUiMode)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* attribute AUTF8String URL; */
-NS_IMETHODIMP
-totemScriptablePlugin::GetURL(nsACString & _retval)
-{
- TOTEM_SCRIPTABLE_LOG_ACCESS ();
-
- _retval.Assign (mSrc);
- return NS_OK;
-}
-
-NS_IMETHODIMP
-totemScriptablePlugin::SetURL(const nsACString & aURL)
-{
- TOTEM_SCRIPTABLE_LOG_ACCESS ();
-
- NS_ENSURE_STATE (IsValid ());
-
- nsresult rv = mPlugin->SetSrc (aURL);
-
- mSrc = aURL;
- return rv;
-}
-
-/* readonly attribute AUTF8String versionInfo; */
-NS_IMETHODIMP
-totemScriptablePlugin::GetVersionInfo(nsACString & aVersionInfo)
-{
- aVersionInfo.Assign (TOTEM_GMP_VERSION_BUILD);
- return NS_OK;
-}
-
-/* attribute boolean windowlessVideo; */
-NS_IMETHODIMP
-totemScriptablePlugin::GetWindowlessVideo(PRBool *aWindowlessVideo)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- *aWindowlessVideo = mWindowlessVideo;
- return NS_OK;
-}
-
-NS_IMETHODIMP
-totemScriptablePlugin::SetWindowlessVideo(PRBool aWindowlessVideo)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- mWindowlessVideo = aWindowlessVideo != PR_FALSE;
- return NS_OK;
-}
-
-/* void close (); */
-NS_IMETHODIMP
-totemScriptablePlugin::Close()
-{
- TOTEM_SCRIPTABLE_WARN_ACCESS ();
-
- return NS_ERROR_DOM_SECURITY_ERR;
-}
-
-/* totemIGMPMedia newMedia (in AUTF8String aURL); */
-NS_IMETHODIMP
-totemScriptablePlugin::NewMedia(const nsACString & aURL, totemIGMPMedia **_retval)
-{
- TOTEM_SCRIPTABLE_WARN_ACCESS ();
-
- return NS_ERROR_DOM_SECURITY_ERR;
-}
-
-/* void openPlayer (in AUTF8String aURL); */
-NS_IMETHODIMP
-totemScriptablePlugin::OpenPlayer (const nsACString & aURL)
-{
- TOTEM_SCRIPTABLE_WARN_ACCESS ();
-
- return NS_ERROR_DOM_SECURITY_ERR;
-}
-
-/* totemIGMPPlaylist newPlaylist (in AUTF8String aName, in AUTF8String aURL); */
-NS_IMETHODIMP
-totemScriptablePlugin::NewPlaylist (const nsACString & aName,
- const nsACString & aURL,
- totemIGMPPlaylist **_retval)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* void launchURL (in AUTF8String aURL); */
-NS_IMETHODIMP
-totemScriptablePlugin::LaunchURL(const nsACString & aURL)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_DOM_SECURITY_ERR;
-}
-
-/* totemIGMPControls */
-
-#undef TOTEM_SCRIPTABLE_INTERFACE
-#define TOTEM_SCRIPTABLE_INTERFACE "totemIGMPControls"
-
-/* readonly attribute long audioLanguageCount; */
-NS_IMETHODIMP
-totemScriptablePlugin::GetAudioLanguageCount(PRInt32 *aAudioLanguageCount)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* attribute long currentAudioLanguage; */
-NS_IMETHODIMP
-totemScriptablePlugin::GetCurrentAudioLanguage(PRInt32 *aCurrentAudioLanguage)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-NS_IMETHODIMP
-totemScriptablePlugin::SetCurrentAudioLanguage(PRInt32 aCurrentAudioLanguage)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* attribute long currentAudioLanguageIndex; */
-NS_IMETHODIMP
-totemScriptablePlugin::GetCurrentAudioLanguageIndex(PRInt32 *aCurrentAudioLanguageIndex)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-NS_IMETHODIMP
-totemScriptablePlugin::SetCurrentAudioLanguageIndex(PRInt32 aCurrentAudioLanguageIndex)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* attribute totemIGMPMedia currentItem; */
-NS_IMETHODIMP
-totemScriptablePlugin::GetCurrentItem(totemIGMPMedia * *aCurrentItem)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-NS_IMETHODIMP
-totemScriptablePlugin::SetCurrentItem(totemIGMPMedia * aCurrentItem)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* attribute long currentMarker; */
-NS_IMETHODIMP
-totemScriptablePlugin::GetCurrentMarker(PRInt32 *aCurrentMarker)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-NS_IMETHODIMP
-totemScriptablePlugin::SetCurrentMarker(PRInt32 aCurrentMarker)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* attribute double currentPosition; */
-NS_IMETHODIMP
-totemScriptablePlugin::GetCurrentPosition(double *aCurrentPosition)
-{
- TOTEM_SCRIPTABLE_LOG_ACCESS ();
-
- NS_ENSURE_STATE (IsValid ());
-
- *aCurrentPosition = mPlugin->mTime / 1000;
- return NS_OK;
-}
-
-NS_IMETHODIMP
-totemScriptablePlugin::SetCurrentPosition(double aCurrentPosition)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_OK;
-}
-
-/* readonly attribute ACString currentPositionString; */
-NS_IMETHODIMP
-totemScriptablePlugin::GetCurrentPositionString(nsACString & aCurrentPositionString)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* attribute ACString currentPositionTimecode; */
-NS_IMETHODIMP
-totemScriptablePlugin::GetCurrentPositionTimecode(nsACString & aCurrentPositionTimecode)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-NS_IMETHODIMP
-totemScriptablePlugin::SetCurrentPositionTimecode(const nsACString & aCurrentPositionTimecode)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* void fastForward (); */
-NS_IMETHODIMP
-totemScriptablePlugin::FastForward()
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* void fastReverse (); */
-NS_IMETHODIMP
-totemScriptablePlugin::FastReverse()
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* AUTF8String getAudioLanguageDescription (in long index); */
-NS_IMETHODIMP
-totemScriptablePlugin::GetAudioLanguageDescription(PRInt32 index, nsACString & _retval)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* long getAudioLanguageID (in long index); */
-NS_IMETHODIMP
-totemScriptablePlugin::GetAudioLanguageID(PRInt32 index, PRInt32 *_retval)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* AUTF8String getLanguageName (in long LCID); */
-NS_IMETHODIMP
-totemScriptablePlugin::GetLanguageName(PRInt32 LCID, nsACString & _retval)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* boolean isAvailable (in ACString name); */
-NS_IMETHODIMP
-totemScriptablePlugin::IsAvailable(const nsACString & name, PRBool *_retval)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* void next (); */
-NS_IMETHODIMP
-totemScriptablePlugin::Next()
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-NS_IMETHODIMP
-totemScriptablePlugin::Pause ()
-{
- NS_ENSURE_STATE (IsValid ());
-
- return mPlugin->DoCommand (TOTEM_COMMAND_PAUSE);
-}
-
-NS_IMETHODIMP
-totemScriptablePlugin::Play ()
-{
- NS_ENSURE_STATE (IsValid ());
-
- return mPlugin->DoCommand (TOTEM_COMMAND_PLAY);
-}
-
-/* void playItem (in totemIGMPMedia theMediaItem); */
-NS_IMETHODIMP
-totemScriptablePlugin::PlayItem(totemIGMPMedia *theMediaItem)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* void previous (); */
-NS_IMETHODIMP
-totemScriptablePlugin::Previous()
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* void step (in long frameCount); */
-NS_IMETHODIMP
-totemScriptablePlugin::Step(PRInt32 frameCount)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-NS_IMETHODIMP
-totemScriptablePlugin::Stop ()
-{
- NS_ENSURE_STATE (IsValid ());
-
- return mPlugin->DoCommand (TOTEM_COMMAND_STOP);
-}
diff --git a/browser-plugin/totemGMPPlugin.h b/browser-plugin/totemGMPPlugin.h
deleted file mode 100644
index 3a02b0c8..00000000
--- a/browser-plugin/totemGMPPlugin.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/* Totem GMP plugin
- *
- * Copyright © 2004 Bastien Nocera <hadess@hadess.net>
- * Copyright © 2002 David A. Schleef <ds@schleef.org>
- * Copyright © 2006, 2007 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.
- *
- * $Id$
- */
-
-#ifndef __GMP_PLUGIN_H__
-#define __GMP_PLUGIN_H__
-
-#include <nsIClassInfo.h>
-
-#include "totemIGMPPlayer.h"
-#include "totemIGMPControls.h"
-#include "totemIGMPSettings.h"
-
-#include "totemPlugin.h"
-
-class totemGMPSettings;
-
-class totemScriptablePlugin : public totemIGMPPlayer,
- public totemIGMPControls,
- public nsIClassInfo
-{
- public:
- NS_DECL_ISUPPORTS
- NS_DECL_TOTEMIGMPPLAYER
- NS_DECL_TOTEMIGMPCONTROLS
- NS_DECL_NSICLASSINFO
-
- void* operator new (size_t aSize) CPP_THROW_NEW;
-
- totemScriptablePlugin (totemPlugin *aPlugin);
-
- PRBool IsValid () { return mPlugin != nsnull; }
- void SetPlugin (totemPlugin *aPlugin) { mPlugin = aPlugin; }
-
- static char *PluginDescription ();
- static char *PluginLongDescription();
- static void PluginMimeTypes (const totemPluginMimeEntry **, PRUint32 *);
- private:
- friend class totemGMPSettings;
-
- ~totemScriptablePlugin ();
-
- totemPlugin *mPlugin;
- totemGMPSettings *mSettingsTearOff;
-
- nsCString mSrc;
- PRUint32 mWindowlessVideo;
-};
-
-#endif /* __GMP_PLUGIN_H__ */
diff --git a/browser-plugin/totemGMPSettings.cpp b/browser-plugin/totemGMPSettings.cpp
index 24e6cf16..c08913b6 100644
--- a/browser-plugin/totemGMPSettings.cpp
+++ b/browser-plugin/totemGMPSettings.cpp
@@ -16,300 +16,208 @@
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
- *
- * $Id: totemGMPPlugin.cpp 3928 2007-01-22 14:59:07Z chpe $
*/
-#include <mozilla-config.h>
-#include "config.h"
-
-#include <glib.h>
-
-#include <nsDOMError.h>
-#include <nsIProgrammingLanguage.h>
-#include <nsISupportsImpl.h>
-#include <nsMemory.h>
-#include <nsXPCOM.h>
+#include <config.h>
-#define GNOME_ENABLE_DEBUG 1
-/* define GNOME_ENABLE_DEBUG for more debug spew */
-#include "debug.h"
+#include <string.h>
-#include "totemIGMPControls.h"
-
-#include "totemDebug.h"
-#include "totemClassInfo.h"
+#include <glib.h>
-#include "totemGMPPlugin.h"
#include "totemPlugin.h"
-
#include "totemGMPSettings.h"
-/* 693329d8-866e-469a-805c-718c4291be70 */
-static const nsCID kClassID =
- { 0x693329d8, 0x866e, 0x469a, \
- { 0x80, 0x5c, 0x71, 0x8c, 0x42, 0x91, 0xbe, 0x70 } };
-
-static const char kClassDescription[] = "totemGMPSettings";
-
-totemGMPSettings::totemGMPSettings (totemScriptablePlugin *aPlugin)
- : mPlugin(aPlugin)
-{
- D ("%s ctor [%p]", kClassDescription, (void*) this);
+static const char *propertyNames[] = {
+ "autostart",
+ "balance",
+ "baseURL",
+ "defaultAudioLanguage",
+ "defaultFrame",
+ "enableErrorDialogs",
+ "invokeURLs",
+ "mediaAccessRights",
+ "mute",
+ "playCount",
+ "rate",
+ "volume"
+};
+
+static const char *methodNames[] = {
+ "getMode",
+ "isAvailable",
+ "requestMediaAccessRights",
+ "setMode",
+};
+
+TOTEM_IMPLEMENT_NPCLASS (totemGMPSettings,
+ propertyNames, G_N_ELEMENTS (propertyNames),
+ methodNames, G_N_ELEMENTS (methodNames),
+ NULL);
+
+totemGMPSettings::totemGMPSettings (NPP aNPP)
+ : totemNPObject (aNPP),
+ mMute (false)
+{
+ TOTEM_LOG_CTOR ();
}
totemGMPSettings::~totemGMPSettings ()
{
- D ("%s dtor [%p]", kClassDescription, (void*) this);
+ TOTEM_LOG_DTOR ();
}
-/* Interface implementations */
-
-NS_IMPL_ISUPPORTS2 (totemGMPSettings,
- totemIGMPSettings,
- nsIClassInfo)
-
-/* nsIClassInfo */
-
-TOTEM_CLASSINFO_BEGIN (totemGMPSettings,
- 1,
- kClassID,
- kClassDescription)
- TOTEM_CLASSINFO_ENTRY (0, totemIGMPSettings)
-TOTEM_CLASSINFO_END
-
-/* totemIGMPSettings */
-
-#undef TOTEM_SCRIPTABLE_INTERFACE
-#define TOTEM_SCRIPTABLE_INTERFACE "totemIGMPSettings"
-
-/* attribute boolean autoStart; */
-NS_IMETHODIMP
-totemGMPSettings::GetAutoStart(PRBool *aAutoStart)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-NS_IMETHODIMP
-totemGMPSettings::SetAutoStart(PRBool aAutoStart)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* attribute AUTF8String baseURL; */
-NS_IMETHODIMP
-totemGMPSettings::GetBaseURL(nsACString & aBaseURL)
+bool
+totemGMPSettings::InvokeByIndex (int aIndex,
+ const NPVariant *argv,
+ uint32_t argc,
+ NPVariant *_result)
{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-NS_IMETHODIMP
-totemGMPSettings::SetBaseURL(const nsACString & aBaseURL)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* readonly attribute long defaultAudioLanguage; */
-NS_IMETHODIMP
-totemGMPSettings::GetDefaultAudioLanguage(PRInt32 *aDefaultAudioLanguage)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* attribute AUTF8String defaultFrame; */
-NS_IMETHODIMP
-totemGMPSettings::GetDefaultFrame(nsACString & aDefaultFrame)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-NS_IMETHODIMP
-totemGMPSettings::SetDefaultFrame(const nsACString & aDefaultFrame)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* attribute boolean enableErrorDialogs; */
-NS_IMETHODIMP
-totemGMPSettings::GetEnableErrorDialogs(PRBool *aEnableErrorDialogs)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-NS_IMETHODIMP
-totemGMPSettings::SetEnableErrorDialogs(PRBool aEnableErrorDialogs)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* attribute boolean invokeURLs; */
-NS_IMETHODIMP
-totemGMPSettings::GetInvokeURLs(PRBool *aInvokeURLs)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-NS_IMETHODIMP
-totemGMPSettings::SetInvokeURLs(PRBool aInvokeURLs)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* readonly attribute ACString mediaAccessRights; */
-NS_IMETHODIMP
-totemGMPSettings::GetMediaAccessRights(nsACString & aMediaAccessRights)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* attribute boolean mute; */
-NS_IMETHODIMP
-totemGMPSettings::GetMute(PRBool *_retval)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- *_retval = mMute;
- return NS_OK;
-}
-
-NS_IMETHODIMP
-totemGMPSettings::SetMute(PRBool enabled)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- mMute = enabled != PR_FALSE;
- return NS_OK;
-}
-
-/* attribute long playCount; */
-NS_IMETHODIMP
-totemGMPSettings::GetPlayCount(PRInt32 *aPlayCount)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-NS_IMETHODIMP
-totemGMPSettings::SetPlayCount(PRInt32 aPlayCount)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* attribute double rate; */
-NS_IMETHODIMP
-totemGMPSettings::GetRate(double *aRate)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-NS_IMETHODIMP
-totemGMPSettings::SetRate(double aRate)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* attribute long balance; */
-NS_IMETHODIMP
-totemGMPSettings::GetBalance(PRInt32 *aBalance)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-NS_IMETHODIMP
-totemGMPSettings::SetBalance(PRInt32 aBalance)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* attribute long volume; */
-NS_IMETHODIMP
-totemGMPSettings::GetVolume(PRInt32 *_retval)
-{
- TOTEM_SCRIPTABLE_LOG_ACCESS ();
-
- NS_ENSURE_STATE (IsValid ());
-
- *_retval = mPlugin->mPlugin->mVolume;
- return NS_OK;
-}
-NS_IMETHODIMP
-totemGMPSettings::SetVolume(PRInt32 volume)
-{
- TOTEM_SCRIPTABLE_LOG_ACCESS ();
-
- NS_ENSURE_STATE (IsValid ());
-
- nsresult rv = mPlugin->mPlugin->SetVolume ((double) volume / 100);
-
- /* Volume passed in is 0 through to 100 */
- mPlugin->mPlugin->mVolume = volume;
-
- return NS_OK;
-}
-
-/* boolean isAvailable (in ACString setting); */
-NS_IMETHODIMP
-totemGMPSettings::IsAvailable(const nsACString & setting, PRBool *_retval)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- *_retval = PR_FALSE;
- return NS_OK;
-}
-
-/* boolean getMode (in ACString mode); */
-NS_IMETHODIMP
-totemGMPSettings::GetMode(const nsACString & mode, PRBool *_retval)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- *_retval = PR_FALSE;
- return NS_OK;
-}
-
-/* void setMode (in ACString mode, in boolean enabled); */
-NS_IMETHODIMP
-totemGMPSettings::SetMode(const nsACString & mode, PRBool enabled)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_OK;
-}
-
-/* boolean requestMediaAccessRights (in ACString mode); */
-NS_IMETHODIMP
-totemGMPSettings::RequestMediaAccessRights (const nsACString & mode, PRBool *_retval)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- *_retval = PR_FALSE;
- return NS_OK;
+ TOTEM_LOG_INVOKE (aIndex, totemGMPSettings);
+
+ switch (Methods (aIndex)) {
+ case eIsAvailable:
+ /* boolean isAvailable (in ACString name); */
+ case eGetMode:
+ /* boolean getMode (in ACString modeName); */
+ case eSetMode:
+ /* void setMode (in ACString modeName, in boolean state); */
+ case eRequestMediaAccessRights:
+ /* boolean requestMediaAccessRights (in ACString access); */
+ TOTEM_WARN_INVOKE_UNIMPLEMENTED (aIndex, totemGMPSettings);
+ return BoolVariant (_result, false);
+ }
+
+ return false;
+}
+
+bool
+totemGMPSettings::GetPropertyByIndex (int aIndex,
+ NPVariant *_result)
+{
+ TOTEM_LOG_GETTER (aIndex, totemGMPSettings);
+
+ switch (Properties (aIndex)) {
+ case eMute:
+ /* attribute boolean mute; */
+ return BoolVariant (_result, Plugin()->IsMute());
+
+ case eVolume:
+ /* attribute long volume; */
+ return Int32Variant (_result, Plugin()->Volume () * 100.0);
+
+ case eAutostart:
+ /* attribute boolean autoStart; */
+ return BoolVariant (_result, Plugin()->AutoPlay());
+
+ case eBalance:
+ /* attribute long balance; */
+ TOTEM_WARN_1_GETTER_UNIMPLEMENTED (aIndex, totemGMPSettings);
+ return Int32Variant (_result, 0);
+
+ case eBaseURL:
+ /* attribute AUTF8String baseURL; */
+ TOTEM_WARN_1_GETTER_UNIMPLEMENTED (aIndex, totemGMPSettings);
+ return StringVariant (_result, "");
+
+ case eDefaultAudioLanguage:
+ /* readonly attribute long defaultAudioLanguage; */
+ TOTEM_WARN_1_GETTER_UNIMPLEMENTED (aIndex, totemGMPSettings);
+ return Int32Variant (_result, 0); /* FIXME */
+
+ case eDefaultFrame:
+ /* attribute AUTF8String defaultFrame; */
+ TOTEM_WARN_1_GETTER_UNIMPLEMENTED (aIndex, totemGMPSettings);
+ return StringVariant (_result, "");
+
+ case eEnableErrorDialogs:
+ /* attribute boolean enableErrorDialogs; */
+ TOTEM_WARN_1_GETTER_UNIMPLEMENTED (aIndex, totemGMPSettings);
+ return BoolVariant (_result, true);
+
+ case eInvokeURLs:
+ /* attribute boolean invokeURLs; */
+ TOTEM_WARN_1_GETTER_UNIMPLEMENTED (aIndex, totemGMPSettings);
+ return BoolVariant (_result, true);
+
+ case eMediaAccessRights:
+ /* readonly attribute ACString mediaAccessRights; */
+ TOTEM_WARN_1_GETTER_UNIMPLEMENTED (aIndex, totemGMPSettings);
+ return StringVariant (_result, "");
+
+ case ePlayCount:
+ /* attribute long playCount; */
+ TOTEM_WARN_1_GETTER_UNIMPLEMENTED (aIndex, totemGMPSettings);
+ return Int32Variant (_result, 1);
+
+ case eRate:
+ /* attribute double rate; */
+ TOTEM_WARN_1_GETTER_UNIMPLEMENTED (aIndex, totemGMPSettings);
+ return DoubleVariant (_result, 1.0);
+ }
+
+ return false;
+}
+
+bool
+totemGMPSettings::SetPropertyByIndex (int aIndex,
+ const NPVariant *aValue)
+{
+ TOTEM_LOG_SETTER (aIndex, totemGMPSettings);
+
+ switch (Properties (aIndex)) {
+ case eMute: {
+ /* attribute boolean mute; */
+ bool enabled;
+ if (!GetBoolFromArguments (aValue, 1, 0, enabled))
+ return false;
+
+ Plugin()->SetMute (enabled);
+ return true;
+ }
+
+ case eVolume: {
+ /* attribute long volume; */
+ int32_t volume;
+ if (!GetInt32FromArguments (aValue, 1, 0, volume))
+ return false;
+
+ Plugin()->SetVolume ((double) CLAMP (volume, 0, 100) / 100.0);
+ return true;
+ }
+
+ case eAutostart: {
+ /* attribute boolean autoStart; */
+ bool enabled;
+ if (!GetBoolFromArguments (aValue, 1, 0, enabled))
+ return false;
+
+ Plugin()->SetAutoPlay (enabled);
+ return true;
+ }
+
+ case eBalance:
+ /* attribute long balance; */
+ case eBaseURL:
+ /* attribute AUTF8String baseURL; */
+ case eDefaultFrame:
+ /* attribute AUTF8String defaultFrame; */
+ case eEnableErrorDialogs:
+ /* attribute boolean enableErrorDialogs; */
+ case eInvokeURLs:
+ /* attribute boolean invokeURLs; */
+ case ePlayCount:
+ /* attribute long playCount; */
+ case eRate:
+ /* attribute double rate; */
+ TOTEM_WARN_SETTER_UNIMPLEMENTED (aIndex, totemGMPSettings);
+ return true;
+
+ case eDefaultAudioLanguage:
+ /* readonly attribute long defaultAudioLanguage; */
+ case eMediaAccessRights:
+ /* readonly attribute ACString mediaAccessRights; */
+ return ThrowPropertyNotWritable ();
+ }
+
+ return false;
}
diff --git a/browser-plugin/totemGMPSettings.h b/browser-plugin/totemGMPSettings.h
index f327a67e..1ec388b5 100644
--- a/browser-plugin/totemGMPSettings.h
+++ b/browser-plugin/totemGMPSettings.h
@@ -1,6 +1,8 @@
/* Totem GMP plugin
*
- * Copyright © 2006, 2007 Christian Persch
+ * Copyright © 2004 Bastien Nocera <hadess@hadess.net>
+ * Copyright © 2002 David A. Schleef <ds@schleef.org>
+ * Copyright © 2006, 2007, 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
@@ -16,37 +18,51 @@
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
- *
- * $Id: totemGMPPlugin.h 3717 2006-11-15 17:21:16Z chpe $
*/
-#ifndef __GMP_SETTINGS_H__
-#define __GMP_SETTINGS_H__
-
-#include <nsIClassInfo.h>
-
-#include "totemIGMPSettings.h"
+#ifndef __TOTEM_GMP_SETTINGS_H__
+#define __TOTEM_GMP_SETTINGS_H__
-class totemScriptablePlugin;
+#include "totemNPClass.h"
+#include "totemNPObject.h"
-class totemGMPSettings : public totemIGMPSettings,
- public nsIClassInfo
+class totemGMPSettings : public totemNPObject
{
public:
- NS_DECL_ISUPPORTS
- NS_DECL_TOTEMIGMPSETTINGS
- NS_DECL_NSICLASSINFO
+ totemGMPSettings (NPP);
+ virtual ~totemGMPSettings ();
- totemGMPSettings (totemScriptablePlugin *aPlugin);
+ private:
- PRBool IsValid () { return mPlugin != nsnull && mPlugin->mPlugin != nsnull ; }
+ enum Methods {
+ eGetMode,
+ eIsAvailable,
+ eRequestMediaAccessRights,
+ eSetMode
+ };
- private:
- ~totemGMPSettings ();
+ enum Properties {
+ eAutostart,
+ eBalance,
+ eBaseURL,
+ eDefaultAudioLanguage,
+ eDefaultFrame,
+ eEnableErrorDialogs,
+ eInvokeURLs,
+ eMediaAccessRights,
+ eMute,
+ ePlayCount,
+ eRate,
+ eVolume
+ };
- PRUint32 mMute : 1;
+ virtual bool InvokeByIndex (int aIndex, const NPVariant *argv, uint32_t argc, NPVariant *_result);
+ virtual bool GetPropertyByIndex (int aIndex, NPVariant *_result);
+ virtual bool SetPropertyByIndex (int aIndex, const NPVariant *aValue);
- totemScriptablePlugin *mPlugin;
+ bool mMute;
};
-#endif /* __GMP_SETTINGS_H__ */
+TOTEM_DEFINE_NPCLASS (totemGMPSettings);
+
+#endif /* __TOTEM_GMP_SETTINGS_H__ */
diff --git a/browser-plugin/totemMullYPlugin.cpp b/browser-plugin/totemMullYPlugin.cpp
index 958c4d58..6cba8e7c 100644
--- a/browser-plugin/totemMullYPlugin.cpp
+++ b/browser-plugin/totemMullYPlugin.cpp
@@ -1,8 +1,8 @@
/* Totem MullY Plugin
*
- * Copyright (C) 2004 Bastien Nocera <hadess@hadess.net>
- * Copyright (C) 2002 David A. Schleef <ds@schleef.org>
- * Copyright (C) 2006 Christian Persch
+ * Copyright © 2004 Bastien Nocera <hadess@hadess.net>
+ * Copyright © 2002 David A. Schleef <ds@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
@@ -18,505 +18,162 @@
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
- *
- * $Id$
*/
-#include <mozilla-config.h>
-#include "config.h"
+#include <config.h>
#include <glib.h>
-#include <nsIProgrammingLanguage.h>
-#include <nsISupportsImpl.h>
-#include <nsMemory.h>
-#include <nsXPCOM.h>
-
-#define GNOME_ENABLE_DEBUG 1
-/* define GNOME_ENABLE_DEBUG for more debug spew */
-#include "debug.h"
-
-#include "totemIMullYPlayer.h"
-
-#include "totemDebug.h"
-#include "totemClassInfo.h"
-
+#include "totemPlugin.h"
#include "totemMullYPlugin.h"
-/* 67DABFBF-D0AB-41fa-9C46-CC0F21721616 */
-static const nsCID kClassID =
- { 0x67dabfbf, 0xd0ab, 0x41fa,
- { 0x9c, 0x46, 0xcc, 0x0f, 0x21, 0x72, 0x16, 0x16 } };
-
-static const char kClassDescription[] = "totemMullYPlugin";
-static const char kPluginDescription[] = "DivX\xC2\xAE Web Player";
-#define TOTEM_MULLY_VERSION "1.4.0.233"
-static const char kPluginLongDescription[] = "DivX Web Player version " TOTEM_MULLY_VERSION;
-
-static const totemPluginMimeEntry kMimeTypes[] = {
- { "video/divx", "divx", "video/x-msvideo" },
+static const char *methodNames[] = {
+ "GetVersion",
+ "SetMinVersion",
+ "SetMode",
+ "SetAllowContextMenu",
+ "SetAutoPlay",
+ "SetLoop",
+ "SetBufferingMode",
+ "SetBannerEnabled",
+ "SetVolume",
+ "SetMovieTitle",
+ "SetPreviewImage",
+ "SetPreviewMessage",
+ "SetPreviewMessageFontSize",
+ "Open",
+ "Play",
+ "Pause",
+ "StepForward",
+ "StepBackward",
+ "FF",
+ "RW",
+ "Stop",
+ "Mute",
+ "UnMute",
+ "Seek",
+ "About",
+ "ShowPreferences",
+ "ShowContextMenu",
+ "GoEmbedded",
+ "GoWindowed",
+ "GoFullscreen",
+ "Resize",
+ "GetTotalTime",
+ "GetVideoWidth",
+ "GetVideoHeight",
+ "GetTotalVideoFrames",
+ "GetVideoFramerate",
+ "GetNumberOfAudioTracks",
+ "GetNumberOfSubtitleTracks",
+ "GetAudioTrackLanguage",
+ "GetSubtitleTrackLanguage",
+ "GetAudioTrackName",
+ "GetSubtitleTrackName",
+ "GetCurrentAudioTrack",
+ "GetCurrentSubtitleTrack",
+ "SetCurrentAudioTrack",
+ "SetCurrentSubtitleTrack"
};
-totemScriptablePlugin::totemScriptablePlugin (totemPlugin *aPlugin)
- : mPlugin(aPlugin)
-{
- D ("%s ctor [%p]", kClassDescription, (void*) this);
-}
-
-totemScriptablePlugin::~totemScriptablePlugin ()
-{
- D ("%s dtor [%p]", kClassDescription, (void*) this);
-}
-
-/* static */ char *
-totemScriptablePlugin::PluginDescription ()
-{
- return (char*) kPluginDescription;
-}
-
-/* static */ char *
-totemScriptablePlugin::PluginLongDescription ()
-{
- return (char*) kPluginLongDescription;
-}
-
-/* static */ void
-totemScriptablePlugin::PluginMimeTypes (const totemPluginMimeEntry **_entries,
- PRUint32 *_count)
-{
- *_entries = kMimeTypes;
- *_count = G_N_ELEMENTS (kMimeTypes);
-}
-
-/* Interface implementations */
-
-NS_IMPL_ISUPPORTS2 (totemScriptablePlugin,
- totemIMullYPlayer,
- nsIClassInfo)
-
-/* nsIClassInfo */
-
-TOTEM_CLASSINFO_BEGIN (totemScriptablePlugin,
- 1,
- kClassID,
- kClassDescription)
- TOTEM_CLASSINFO_ENTRY (0, totemIMullYPlayer)
-TOTEM_CLASSINFO_END
-
-/* totemIMullYPlayer */
-
-#define TOTEM_SCRIPTABLE_INTERFACE "totemIMullYPlayer"
-
-/* ACString GetVersion (); */
-NS_IMETHODIMP
-totemScriptablePlugin::GetVersion(nsACString & aVersion)
-{
- aVersion.Assign (TOTEM_MULLY_VERSION);
- return NS_OK;
-}
-
-/* void SetMinVersion (in ACString version); */
-NS_IMETHODIMP
-totemScriptablePlugin::SetMinVersion(const nsACString & aVersion)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* void SetMode (in ACString mode); */
-NS_IMETHODIMP
-totemScriptablePlugin::SetMode(const nsACString & aMode)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* void SetAllowContextMenu (in boolean allow); */
-NS_IMETHODIMP
-totemScriptablePlugin::SetAllowContextMenu(PRBool allowed)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* void SetAutoPlay (in boolean play); */
-NS_IMETHODIMP
-totemScriptablePlugin::SetAutoPlay(PRBool aPlay)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* void SetLoop (in boolean loop); */
-NS_IMETHODIMP
-totemScriptablePlugin::SetLoop(PRBool aLoop)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* void SetBufferingMode (in ACString mode); */
-NS_IMETHODIMP
-totemScriptablePlugin::SetBufferingMode(const nsACString & aMode)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* void SetBannerEnabled (in boolean enabled); */
-NS_IMETHODIMP
-totemScriptablePlugin::SetBannerEnabled(PRBool enabled)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* void SetVolume (in unsigned long volume); */
-NS_IMETHODIMP
-totemScriptablePlugin::SetVolume(PRUint32 aVolume)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* void SetMovieTitle (in AUTF8String movieTitle); */
-NS_IMETHODIMP
-totemScriptablePlugin::SetMovieTitle (const nsACString & aMovieTitle)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* void SetPreviewImage (in AUTF8String imageURL); */
-NS_IMETHODIMP
-totemScriptablePlugin::SetPreviewImage (const nsACString & aImageURL)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* void SetPreviewMessage (in AUTF8String message); */
-NS_IMETHODIMP
-totemScriptablePlugin::SetPreviewMessage (const nsACString & aMessage)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* void SetPreviewMessageFontSize (in unsigned long size); */
-NS_IMETHODIMP
-totemScriptablePlugin::SetPreviewMessageFontSize(PRUint32 aSize)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* void Open (in AUTF8String URL); */
-NS_IMETHODIMP
-totemScriptablePlugin::Open(const nsACString & aURL)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* void Play (); */
-NS_IMETHODIMP
-totemScriptablePlugin::Play ()
-{
- NS_ENSURE_STATE (IsValid ());
-
- return mPlugin->DoCommand (TOTEM_COMMAND_PLAY);
-}
-
-/* void Pause (); */
-NS_IMETHODIMP
-totemScriptablePlugin::Pause ()
-{
- NS_ENSURE_STATE (IsValid ());
-
- return mPlugin->DoCommand (TOTEM_COMMAND_PAUSE);
-}
-
-/* void StepForward (); */
-NS_IMETHODIMP
-totemScriptablePlugin::StepForward()
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* void StepBackward (); */
-NS_IMETHODIMP
-totemScriptablePlugin::StepBackward()
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* void FF (); */
-NS_IMETHODIMP
-totemScriptablePlugin::FF()
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* void RW (); */
-NS_IMETHODIMP
-totemScriptablePlugin::RW()
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
+TOTEM_IMPLEMENT_NPCLASS (totemMullYPlayer,
+ NULL, 0,
+ methodNames, G_N_ELEMENTS (methodNames),
+ NULL);
+
+totemMullYPlayer::totemMullYPlayer (NPP aNPP)
+ : totemNPObject (aNPP)
+{
+ TOTEM_LOG_CTOR ();
+}
+
+totemMullYPlayer::~totemMullYPlayer ()
+{
+ TOTEM_LOG_DTOR ();
+}
+
+bool
+totemMullYPlayer::InvokeByIndex (int aIndex,
+ const NPVariant *argv,
+ uint32_t argc,
+ NPVariant *_result)
+{
+ TOTEM_LOG_INVOKE (aIndex, totemMullYPlayer);
+
+ switch (Methods (aIndex)) {
+ case eGetVersion:
+ return StringVariant (_result, TOTEM_MULLY_VERSION);
+
+ case ePlay:
+ Plugin()->Command (TOTEM_COMMAND_PLAY);
+ return VoidVariant (_result);
+
+ case ePause:
+ Plugin()->Command (TOTEM_COMMAND_PAUSE);
+ return VoidVariant (_result);
+
+ case eStop:
+ Plugin()->Command (TOTEM_COMMAND_STOP);
+ return VoidVariant (_result);
+
+ case eSetVolume: {
+ // FIXMEchpe where's getVolume?
+ break;
+ }
+
+ case eMute:
+ Plugin()->SetMute (true);
+ return VoidVariant (_result);
+
+ case eUnMute:
+ Plugin()->SetMute (false);
+ return VoidVariant (_result);
+
+ case eSetMinVersion:
+ case eSetMode:
+ case eSetAllowContextMenu:
+ case eSetAutoPlay:
+ case eSetLoop:
+ case eSetBufferingMode:
+ case eSetBannerEnabled:
+ case eSetMovieTitle:
+ case eSetPreviewImage:
+ case eSetPreviewMessage:
+ case eSetPreviewMessageFontSize:
+ case eOpen:
+ case eStepForward:
+ case eStepBackward:
+ case eFF:
+ case eRW:
+ case eSeek:
+ case eResize:
+ case eGetTotalTime:
+ case eGetVideoWidth:
+ case eGetVideoHeight:
+ case eGetTotalVideoFrames:
+ case eGetVideoFramerate:
+ case eGetNumberOfAudioTracks:
+ case eGetNumberOfSubtitleTracks:
+ case eGetAudioTrackLanguage:
+ case eGetSubtitleTrackLanguage:
+ case eGetAudioTrackName:
+ case eGetSubtitleTrackName:
+ case eGetCurrentAudioTrack:
+ case eGetCurrentSubtitleTrack:
+ case eSetCurrentAudioTrack:
+ case eSetCurrentSubtitleTrack:
+ TOTEM_WARN_INVOKE_UNIMPLEMENTED (aIndex, totemMullYPlayer);
+ return VoidVariant (_result);
+
+ case eGoEmbedded:
+ case eGoWindowed:
+ case eGoFullscreen:
+ case eAbout:
+ case eShowPreferences:
+ case eShowContextMenu:
+ /* We don't allow the page's JS to do this. Don't throw though, just silently do nothing. */
+ return VoidVariant (_result);
+ }
+
+ return false;
}
-
-/* void Stop (); */
-NS_IMETHODIMP
-totemScriptablePlugin::Stop()
-{
- NS_ENSURE_STATE (IsValid ());
-
- return mPlugin->DoCommand (TOTEM_COMMAND_STOP);
-}
-
-/* void Mute (); */
-NS_IMETHODIMP
-totemScriptablePlugin::Mute()
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* void UnMute (); */
-NS_IMETHODIMP
-totemScriptablePlugin::UnMute()
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* void Seek (in ACString method, in unsigned long percent); */
-NS_IMETHODIMP
-totemScriptablePlugin::Seek(const nsACString & aMethod, PRUint32 aPercent)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* void About (); */
-NS_IMETHODIMP
-totemScriptablePlugin::About()
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* void ShowPreferences (); */
-NS_IMETHODIMP
-totemScriptablePlugin::ShowPreferences()
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* void ShowContextMenu (); */
-NS_IMETHODIMP
-totemScriptablePlugin::ShowContextMenu()
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* void GoEmbedded (); */
-NS_IMETHODIMP
-totemScriptablePlugin::GoEmbedded()
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* void GoWindowed (); */
-NS_IMETHODIMP
-totemScriptablePlugin::GoWindowed()
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* void GoFullscreen (); */
-NS_IMETHODIMP
-totemScriptablePlugin::GoFullscreen()
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* void Resize (in unsigned long width, in unsigned long height); */
-NS_IMETHODIMP
-totemScriptablePlugin::Resize(PRUint32 aWidth, PRUint32 aHeight)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* unsigned long GetTotalTime (); */
-NS_IMETHODIMP
-totemScriptablePlugin::GetTotalTime(PRUint32 *aTime)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* unsigned long GetVideoWidth (); */
-NS_IMETHODIMP
-totemScriptablePlugin::GetVideoWidth(PRUint32 *aWidth)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* unsigned long GetVideoHeight (); */
-NS_IMETHODIMP
-totemScriptablePlugin::GetVideoHeight(PRUint32 *aHeight)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* double GetTotalVideoFrames (); */
-NS_IMETHODIMP
-totemScriptablePlugin::GetTotalVideoFrames(double *aPosition)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* double GetVideoFramerate (); */
-NS_IMETHODIMP
-totemScriptablePlugin::GetVideoFramerate(double *aPosition)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* unsigned long GetNumberOfAudioTracks (); */
-NS_IMETHODIMP
-totemScriptablePlugin::GetNumberOfAudioTracks(PRUint32 *aNumAudioTracks)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* unsigned long GetNumberOfSubtitleTracks (); */
-NS_IMETHODIMP
-totemScriptablePlugin::GetNumberOfSubtitleTracks(PRUint32 *aNumSubtitleTracks)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* ACString GetAudioTrackLanguage (in unsigned long trackIndex); */
-NS_IMETHODIMP
-totemScriptablePlugin::GetAudioTrackLanguage(PRUint32 trackIndex, nsACString & _retval)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* ACString GetSubtitleTrackLanguage (in unsigned long trackIndex); */
-NS_IMETHODIMP
-totemScriptablePlugin::GetSubtitleTrackLanguage(PRUint32 trackIndex, nsACString & _retval)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* AUTF8String GetAudioTrackName (in unsigned long trackIndex); */
-NS_IMETHODIMP
-totemScriptablePlugin::GetAudioTrackName(PRUint32 trackIndex, nsACString & _retval)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* AUTF8String GetSubtitleTrackName (in unsigned long trackIndex); */
-NS_IMETHODIMP
-totemScriptablePlugin::GetSubtitleTrackName(PRUint32 trackIndex, nsACString & _retval)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* long GetCurrentAudioTrack (); */
-NS_IMETHODIMP
-totemScriptablePlugin::GetCurrentAudioTrack(PRInt32 *_retval)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* long GetCurrentSubtitleTrack (); */
-NS_IMETHODIMP
-totemScriptablePlugin::GetCurrentSubtitleTrack(PRInt32 *_retval)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* void SetCurrentAudioTrack (in long index); */
-NS_IMETHODIMP
-totemScriptablePlugin::SetCurrentAudioTrack(PRInt32 index)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-/* void SetCurrentSubtitleTrack (in long index); */
-NS_IMETHODIMP
-totemScriptablePlugin::SetCurrentSubtitleTrack(PRInt32 index)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
-
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
diff --git a/browser-plugin/totemMullYPlugin.h b/browser-plugin/totemMullYPlugin.h
index 352ce909..fe5003b9 100644
--- a/browser-plugin/totemMullYPlugin.h
+++ b/browser-plugin/totemMullYPlugin.h
@@ -1,7 +1,8 @@
/* Totem MullY Plugin
*
- * Copyright (C) 2004 Bastien Nocera <hadess@hadess.net>
- * Copyright (C) 2002 David A. Schleef <ds@schleef.org>
+ * Copyright © 2004 Bastien Nocera <hadess@hadess.net>
+ * Copyright © 2002 David A. Schleef <ds@schleef.org>
+ * Copyright © 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
@@ -17,39 +18,87 @@
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
- *
- * $Id$
*/
-#ifndef __MULLY_PLUGIN_H__
-#define __MULLY_PLUGIN_H__
-
-#include <nsIClassInfo.h>
-
-#include "totemIMullYPlayer.h"
+#ifndef __TOTEM_MULLY_PLUGIN_H__
+#define __TOTEM_MULLY_PLUGIN_H__
-#include "totemPlugin.h"
+#include "totemNPClass.h"
+#include "totemNPObject.h"
-class totemScriptablePlugin : public totemIMullYPlayer,
- public nsIClassInfo
+class totemMullYPlayer : public totemNPObject
{
public:
- NS_DECL_ISUPPORTS
- NS_DECL_TOTEMIMULLYPLAYER
- NS_DECL_NSICLASSINFO
+ totemMullYPlayer (NPP);
+ virtual ~totemMullYPlayer ();
- totemScriptablePlugin (totemPlugin *aPlugin);
+ private:
- PRBool IsValid () { return mPlugin != nsnull; }
- void SetPlugin (totemPlugin *aPlugin) { mPlugin = aPlugin; }
+ enum Methods {
+ /* Version */
+ eGetVersion,
- static char *PluginDescription ();
- static char *PluginLongDescription();
- static void PluginMimeTypes (const totemPluginMimeEntry **, PRUint32 *);
- private:
- ~totemScriptablePlugin ();
+ /* Setup */
+ eSetMinVersion,
+ eSetMode,
+ eSetAllowContextMenu,
+ eSetAutoPlay,
+ eSetLoop,
+ eSetBufferingMode,
+ eSetBannerEnabled,
+ eSetVolume,
+ eSetMovieTitle,
+ eSetPreviewImage,
+ eSetPreviewMessage,
+ eSetPreviewMessageFontSize,
+
+ /* Media management */
+ eOpen,
- totemPlugin *mPlugin;
+ /* Playback */
+ ePlay,
+ ePause,
+ eStepForward,
+ eStepBackward,
+ eFF,
+ eRW,
+ eStop,
+ eMute,
+ eUnMute,
+ eSeek,
+
+ /* Windowing */
+ eAbout,
+ eShowPreferences,
+ eShowContextMenu,
+ eGoEmbedded,
+ eGoWindowed,
+ eGoFullscreen,
+ eResize,
+
+ /* Media information */
+ eGetTotalTime,
+ eGetVideoWidth,
+ eGetVideoHeight,
+ eGetTotalVideoFrames,
+ eGetVideoFramerate,
+ eGetNumberOfAudioTracks,
+ eGetNumberOfSubtitleTracks,
+ eGetAudioTrackLanguage,
+ eGetSubtitleTrackLanguage,
+ eGetAudioTrackName,
+ eGetSubtitleTrackName,
+ eGetCurrentAudioTrack,
+ eGetCurrentSubtitleTrack,
+
+ /* Media management */
+ eSetCurrentAudioTrack,
+ eSetCurrentSubtitleTrack,
+ };
+
+ virtual bool InvokeByIndex (int aIndex, const NPVariant *argv, uint32_t argc, NPVariant *_result);
};
-#endif /* __MULLY_PLUGIN_H__ */
+TOTEM_DEFINE_NPCLASS (totemMullYPlayer);
+
+#endif /* __TOTEM_MULLY_PLUGIN_H__ */
diff --git a/browser-plugin/totemNPClass.cpp b/browser-plugin/totemNPClass.cpp
new file mode 100644
index 00000000..224b1c9a
--- /dev/null
+++ b/browser-plugin/totemNPClass.cpp
@@ -0,0 +1,207 @@
+/*
+ * Copyright © 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., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include <config.h>
+#include <string.h>
+
+#include "totemNPClass.h"
+#include "totemNPObject.h"
+
+totemNPClass_base::totemNPClass_base (const char *aPropertNames[],
+ uint32_t aPropertyCount,
+ const char *aMethodNames[],
+ uint32_t aMethodCount,
+ const char *aDefaultMethodName) :
+ mPropertyNameIdentifiers (GetIdentifiersForNames (aPropertNames, aPropertyCount)),
+ mMethodNameIdentifiers (GetIdentifiersForNames (aMethodNames, aMethodCount)),
+ mDefaultMethodIndex (aDefaultMethodName ? GetMethodIndex (NPN_GetStringIdentifier (aDefaultMethodName)) : -1)
+{
+ structVersion = NP_CLASS_STRUCT_VERSION_ENUM;
+ allocate = Allocate;
+ deallocate = Deallocate;
+ invalidate = Invalidate;
+ hasMethod = HasMethod;
+ invoke = Invoke;
+ invokeDefault = InvokeDefault;
+ hasProperty = HasProperty;
+ getProperty = GetProperty;
+ setProperty = SetProperty;
+ removeProperty = RemoveProperty;
+#if defined(NP_CLASS_STRUCT_VERSION_ENUM) && (NP_CLASS_STRUCT_VERSION >= NP_CLASS_STRUCT_VERSION_ENUM)
+ enumerate = Enumerate;
+#endif
+#if defined(NP_CLASS_STRUCT_VERSION_CTOR) && (NP_CLASS_STRUCT_VERSION >= NP_CLASS_STRUCT_VERSION_CTOR)
+ /* FIXMEchpe find out what's this supposed to do */
+ /* construct = Construct; */
+ construct = NULL;
+#endif
+}
+
+totemNPClass_base::~totemNPClass_base ()
+{
+ NPN_MemFree (mPropertyNameIdentifiers);
+ NPN_MemFree (mMethodNameIdentifiers);
+}
+
+NPIdentifier*
+totemNPClass_base::GetIdentifiersForNames (const char *aNames[],
+ uint32_t aCount)
+{
+ if (aCount == 0)
+ return NULL;
+
+ NPIdentifier *identifiers = reinterpret_cast<NPIdentifier*>(NPN_MemAlloc (aCount * sizeof (NPIdentifier)));
+ if (!identifiers)
+ return NULL;
+
+ NPN_GetStringIdentifiers (aNames, aCount, identifiers);
+
+ return identifiers;
+}
+
+int
+totemNPClass_base::GetPropertyIndex (NPIdentifier aName)
+{
+ if (!mPropertyNameIdentifiers)
+ return -1;
+
+ for (int i = 0; mPropertyNameIdentifiers[i]; ++i) {
+ if (aName == mPropertyNameIdentifiers[i])
+ return i;
+ }
+
+ return -1;
+}
+
+int
+totemNPClass_base::GetMethodIndex (NPIdentifier aName)
+{
+ if (!mMethodNameIdentifiers)
+ return -1;
+
+ for (int i = 0; mMethodNameIdentifiers[i]; ++i) {
+ if (aName == mMethodNameIdentifiers[i])
+ return i;
+ }
+
+ return -1;
+}
+
+bool
+totemNPClass_base::EnumerateProperties (NPIdentifier **_result, uint32_t *_count)
+{
+ if (!mPropertyNameIdentifiers)
+ return false;
+
+ uint32_t bytes = mPropertyNamesCount * sizeof (NPIdentifier);
+ NPIdentifier *identifiers = reinterpret_cast<NPIdentifier*>(NPN_MemAlloc (bytes));
+ if (!identifiers)
+ return false;
+
+ memcpy (identifiers, mPropertyNameIdentifiers, bytes);
+
+ *_result = identifiers;
+ *_count = mPropertyNamesCount;
+
+ return true;
+}
+
+NPObject*
+totemNPClass_base::Allocate (NPP aNPP, NPClass *aClass)
+{
+ totemNPClass_base* _class = static_cast<totemNPClass_base*>(aClass);
+ return _class->InternalCreate (aNPP);
+}
+
+void
+totemNPClass_base::Deallocate (NPObject *aObject)
+{
+ totemNPObject* object = static_cast<totemNPObject*> (aObject);
+ delete object;
+}
+
+void
+totemNPClass_base::Invalidate (NPObject *aObject)
+{
+ totemNPObject* object = static_cast<totemNPObject*> (aObject);
+ object->Invalidate ();
+}
+
+bool
+totemNPClass_base::HasMethod (NPObject *aObject, NPIdentifier aName)
+{
+ totemNPObject* object = static_cast<totemNPObject*> (aObject);
+ return object->HasMethod (aName);
+}
+
+bool
+totemNPClass_base::Invoke (NPObject *aObject, NPIdentifier aName, const NPVariant *argv, uint32_t argc, NPVariant *_result)
+{
+ totemNPObject* object = static_cast<totemNPObject*> (aObject);
+ return object->Invoke (aName, argv, argc, _result);
+}
+
+bool
+totemNPClass_base::InvokeDefault (NPObject *aObject, const NPVariant *argv, uint32_t argc, NPVariant *_result)
+{
+ totemNPObject* object = static_cast<totemNPObject*> (aObject);
+ return object->InvokeDefault (argv, argc, _result);
+}
+
+bool
+totemNPClass_base::HasProperty (NPObject *aObject, NPIdentifier aName)
+{
+ totemNPObject* object = static_cast<totemNPObject*> (aObject);
+ return object->HasProperty (aName);
+}
+
+bool
+totemNPClass_base::GetProperty (NPObject *aObject, NPIdentifier aName, NPVariant *_result)
+{
+ totemNPObject* object = static_cast<totemNPObject*> (aObject);
+ return object->GetProperty (aName, _result);
+}
+
+bool
+totemNPClass_base::SetProperty (NPObject *aObject, NPIdentifier aName, const NPVariant *aValue)
+{
+ totemNPObject* object = static_cast<totemNPObject*> (aObject);
+ return object->SetProperty (aName, aValue);
+}
+
+bool
+totemNPClass_base::RemoveProperty (NPObject *aObject, NPIdentifier aName)
+{
+ totemNPObject* object = static_cast<totemNPObject*> (aObject);
+ return object->RemoveProperty (aName);
+}
+
+bool
+totemNPClass_base::Enumerate (NPObject *aObject, NPIdentifier **_result, uint32_t *_count)
+{
+ totemNPObject* object = static_cast<totemNPObject*> (aObject);
+ return object->Enumerate (_result, _count);
+}
+
+bool
+totemNPClass_base::Construct (NPObject *aObject, const NPVariant *argv, uint32_t argc, NPVariant *_result)
+{
+ totemNPObject* object = static_cast<totemNPObject*> (aObject);
+ return object->Construct (argv, argc, _result);
+}
diff --git a/browser-plugin/totemNPClass.h b/browser-plugin/totemNPClass.h
new file mode 100644
index 00000000..980baaa5
--- /dev/null
+++ b/browser-plugin/totemNPClass.h
@@ -0,0 +1,156 @@
+/*
+ * Copyright © 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., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __TOTEM_NPCLASS_H__
+#define __TOTEM_NPCLASS_H__
+
+#include <assert.h>
+
+#include "npapi.h"
+#include "npruntime.h"
+
+class totemNPObject;
+
+class totemNPClass_base : public NPClass {
+
+ public:
+
+ NPObject* CreateInstance (NPP aNPP) {
+ return NPN_CreateObject (aNPP, this);
+ }
+
+ protected:
+ friend class totemNPObject;
+
+ totemNPClass_base (const char *aPropertNames[],
+ uint32_t aPropertyCount,
+ const char *aMethodNames[],
+ uint32_t aMethodCount,
+ const char *aDefaultMethodName);
+ virtual ~totemNPClass_base ();
+
+ virtual NPObject* InternalCreate (NPP aNPP) = 0;
+
+ int GetPropertyIndex (NPIdentifier aName);
+ int GetMethodIndex (NPIdentifier aName);
+ int GetDefaultMethodIndex () const { return mDefaultMethodIndex; }
+ bool EnumerateProperties (NPIdentifier **_result, uint32_t *_count);
+
+ private:
+
+ static NPObject* Allocate (NPP aNPP, NPClass *aClass);
+ static void Deallocate (NPObject *aObject);
+ static void Invalidate (NPObject *aObject);
+ static bool HasMethod (NPObject *aObject, NPIdentifier aName);
+ static bool Invoke (NPObject *aObject, NPIdentifier aName, const NPVariant *argv, uint32_t argc, NPVariant *_result);
+ static bool InvokeDefault (NPObject *aObject, const NPVariant *argv, uint32_t argc, NPVariant *_result);
+ static bool HasProperty (NPObject *aObject, NPIdentifier aName);
+ static bool GetProperty (NPObject *aObject, NPIdentifier aName, NPVariant *_result);
+ static bool SetProperty (NPObject *aObject, NPIdentifier aName, const NPVariant *aValue);
+ static bool RemoveProperty (NPObject *aObject, NPIdentifier aName);
+ static bool Enumerate (NPObject *aObject, NPIdentifier **_result, uint32_t *_count);
+ static bool Construct (NPObject *aObject, const NPVariant *argv, uint32_t argc, NPVariant *_result);
+
+ NPIdentifier* GetIdentifiersForNames (const char *aNames[], uint32_t aCount);
+
+ NPIdentifier *mPropertyNameIdentifiers;
+ int mPropertyNamesCount;
+ NPIdentifier *mMethodNameIdentifiers;
+ int mMethodNamesCount;
+ int mDefaultMethodIndex;
+};
+
+template <class T>
+class totemNPClass : public totemNPClass_base {
+
+ public:
+
+ typedef totemNPClass<T> class_type;
+
+ totemNPClass (const char *aPropertNames[],
+ uint32_t aPropertyCount,
+ const char *aMethodNames[],
+ uint32_t aMethodCount,
+ const char *aDefaultMethodName) :
+ totemNPClass_base (aPropertNames, aPropertyCount,
+ aMethodNames, aMethodCount,
+ aDefaultMethodName) {
+ }
+
+ virtual ~totemNPClass () { }
+
+ protected:
+
+ virtual NPObject* InternalCreate (NPP aNPP) {
+ return new T (aNPP);
+ }
+};
+
+/* Helper macros */
+
+#define TOTEM_DEFINE_NPCLASS(T) \
+class T##NPClass : public totemNPClass<T> {\
+\
+ public:\
+\
+ T##NPClass () throw ();\
+ virtual ~T##NPClass ();\
+\
+ static class_type* Instance () throw ();\
+ static void Shutdown ();\
+\
+ private:\
+ static class_type* sInstance;\
+}
+
+#define TOTEM_IMPLEMENT_NPCLASS(T, propertyNames, propertyNamesCount, methodNames, methodNamesCount, defaultMethodName) \
+\
+T##NPClass::class_type* T##NPClass::sInstance = 0; \
+\
+T##NPClass::T##NPClass () throw ()\
+ : totemNPClass<T> (propertyNames,\
+ propertyNamesCount,\
+ methodNames,\
+ methodNamesCount,\
+ defaultMethodName)\
+{\
+}\
+\
+T##NPClass::~T##NPClass ()\
+{\
+}\
+\
+T##NPClass::class_type* \
+T##NPClass::Instance () throw ()\
+{\
+ if (!sInstance) {\
+ sInstance = new T##NPClass ();\
+ }\
+\
+ return sInstance;\
+}\
+\
+void \
+T##NPClass::Shutdown ()\
+{\
+ delete sInstance;\
+ sInstance = 0;\
+}
+
+#endif /* __TOTEM_NPCLASS_H__ */
diff --git a/browser-plugin/totemNPNGlue.cpp b/browser-plugin/totemNPNGlue.cpp
new file mode 100644
index 00000000..ab30d820
--- /dev/null
+++ b/browser-plugin/totemNPNGlue.cpp
@@ -0,0 +1,303 @@
+/*
+ * Copyright © 1998 Netscape Communications Corporation.
+ * Copyright © 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., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * ===========================================================================
+ * Derived from MPL/LGPL/GPL tri-licensed code
+ * [mozilla/odules/plugin/samples/4x-scriptable/npn_gate.cpp];
+ * used here under LGPL 2+, as permitted by the relicensing clause.
+ *
+ * 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 © 1998
+ * the Initial Developer. All Rights Reserved.
+ */
+
+#include <config.h>
+
+#include <string.h>
+
+#include "npapi.h"
+#include "npupp.h"
+
+#ifndef HIBYTE
+#define HIBYTE(x) ((((uint32_t)(x)) & 0xff00) >> 8)
+#endif
+
+#ifndef LOBYTE
+#define LOBYTE(W) ((W) & 0xFF)
+#endif
+
+extern NPNetscapeFuncs NPNFuncs;
+
+void NPN_Version(int* plugin_major, int* plugin_minor, int* netscape_major, int* netscape_minor)
+{
+ *plugin_major = NP_VERSION_MAJOR;
+ *plugin_minor = NP_VERSION_MINOR;
+ *netscape_major = HIBYTE(NPNFuncs.version);
+ *netscape_minor = LOBYTE(NPNFuncs.version);
+}
+
+NPError NPN_GetURLNotify(NPP instance, const char *url, const char *target, void* notifyData)
+{
+ return NPNFuncs.geturlnotify(instance, url, target, notifyData);
+}
+
+NPError NPN_GetURL(NPP instance, const char *url, const char *target)
+{
+ return NPNFuncs.geturl(instance, url, target);
+}
+
+NPError NPN_PostURLNotify(NPP instance, const char* url, const char* window, uint32_t len, const char* buf, NPBool file, void* notifyData)
+{
+ return NPNFuncs.posturlnotify(instance, url, window, len, buf, file, notifyData);
+}
+
+NPError NPN_PostURL(NPP instance, const char* url, const char* window, uint32_t len, const char* buf, NPBool file)
+{
+ return NPNFuncs.posturl(instance, url, window, len, buf, file);
+}
+
+NPError NPN_RequestRead(NPStream* stream, NPByteRange* rangeList)
+{
+ return NPNFuncs.requestread(stream, rangeList);
+}
+
+NPError NPN_NewStream(NPP instance, NPMIMEType type, const char* target, NPStream** stream)
+{
+ return NPNFuncs.newstream(instance, type, target, stream);
+}
+
+int32_t NPN_Write(NPP instance, NPStream *stream, int32_t len, void *buffer)
+{
+ return NPNFuncs.write(instance, stream, len, buffer);
+}
+
+NPError NPN_DestroyStream(NPP instance, NPStream* stream, NPError reason)
+{
+ return NPNFuncs.destroystream(instance, stream, reason);
+}
+
+void NPN_Status(NPP instance, const char *message)
+{
+ NPNFuncs.status(instance, message);
+}
+
+const char* NPN_UserAgent(NPP instance)
+{
+ return NPNFuncs.uagent(instance);
+}
+
+void* NPN_MemAlloc(uint32 size)
+{
+ return NPNFuncs.memalloc(size);
+}
+
+void NPN_MemFree(void* ptr)
+{
+ /* Make it null-safe */
+ if (!ptr)
+ return;
+
+ NPNFuncs.memfree(ptr);
+}
+
+uint32_t NPN_MemFlush(uint32_t size)
+{
+ return NPNFuncs.memflush(size);
+}
+
+void NPN_ReloadPlugins(NPBool reloadPages)
+{
+ NPNFuncs.reloadplugins(reloadPages);
+}
+
+JRIEnv* NPN_GetJavaEnv(void)
+{
+ return NPNFuncs.getJavaEnv();
+}
+
+jref NPN_GetJavaPeer(NPP instance)
+{
+ return NPNFuncs.getJavaPeer(instance);
+}
+
+NPError NPN_GetValue(NPP instance, NPNVariable variable, void *value)
+{
+ return NPNFuncs.getvalue(instance, variable, value);
+}
+
+NPError NPN_SetValue(NPP instance, NPPVariable variable, void *value)
+{
+ return NPNFuncs.setvalue(instance, variable, value);
+}
+
+void NPN_InvalidateRect(NPP instance, NPRect *invalidRect)
+{
+ NPNFuncs.invalidaterect(instance, invalidRect);
+}
+
+void NPN_InvalidateRegion(NPP instance, NPRegion invalidRegion)
+{
+ NPNFuncs.invalidateregion(instance, invalidRegion);
+}
+
+void NPN_ForceRedraw(NPP instance)
+{
+ NPNFuncs.forceredraw(instance);
+}
+
+NPIdentifier NPN_GetStringIdentifier(const NPUTF8 *name)
+{
+ return NPNFuncs.getstringidentifier(name);
+}
+
+void NPN_GetStringIdentifiers(const NPUTF8 **names, int32_t nameCount,
+ NPIdentifier *identifiers)
+{
+ return NPNFuncs.getstringidentifiers(names, nameCount, identifiers);
+}
+
+NPIdentifier NPN_GetStringIdentifier(int32_t intid)
+{
+ return NPNFuncs.getintidentifier(intid);
+}
+
+bool NPN_IdentifierIsString(NPIdentifier identifier)
+{
+ return NPNFuncs.identifierisstring(identifier);
+}
+
+NPUTF8 *NPN_UTF8FromIdentifier(NPIdentifier identifier)
+{
+ return NPNFuncs.utf8fromidentifier(identifier);
+}
+
+int32_t NPN_IntFromIdentifier(NPIdentifier identifier)
+{
+ return NPNFuncs.intfromidentifier(identifier);
+}
+
+NPObject *NPN_CreateObject(NPP npp, NPClass *aClass)
+{
+ return NPNFuncs.createobject(npp, aClass);
+}
+
+NPObject *NPN_RetainObject(NPObject *obj)
+{
+ return NPNFuncs.retainobject(obj);
+}
+
+void NPN_ReleaseObject(NPObject *obj)
+{
+ return NPNFuncs.releaseobject(obj);
+}
+
+bool NPN_Invoke(NPP npp, NPObject* obj, NPIdentifier methodName,
+ const NPVariant *args, uint32_t argCount, NPVariant *result)
+{
+ return NPNFuncs.invoke(npp, obj, methodName, args, argCount, result);
+}
+
+bool NPN_InvokeDefault(NPP npp, NPObject* obj, const NPVariant *args,
+ uint32_t argCount, NPVariant *result)
+{
+ return NPNFuncs.invokeDefault(npp, obj, args, argCount, result);
+}
+
+bool NPN_Evaluate(NPP npp, NPObject* obj, NPString *script,
+ NPVariant *result)
+{
+ return NPNFuncs.evaluate(npp, obj, script, result);
+}
+
+bool NPN_GetProperty(NPP npp, NPObject* obj, NPIdentifier propertyName,
+ NPVariant *result)
+{
+ return NPNFuncs.getproperty(npp, obj, propertyName, result);
+}
+
+bool NPN_SetProperty(NPP npp, NPObject* obj, NPIdentifier propertyName,
+ const NPVariant *value)
+{
+ return NPNFuncs.setproperty(npp, obj, propertyName, value);
+}
+
+bool NPN_RemoveProperty(NPP npp, NPObject* obj, NPIdentifier propertyName)
+{
+ return NPNFuncs.removeproperty(npp, obj, propertyName);
+}
+
+bool NPN_Enumerate(NPP npp, NPObject *obj, NPIdentifier **identifier,
+ uint32_t *count)
+{
+#if defined(NPVERS_HAS_NPOBJECT_ENUM) && (NP_VERSION_MINOR >= NPVERS_HAS_NPOBJECT_ENUM)
+ if ((NPNFuncs.version & 0xFF) >= NPVERS_HAS_NPOBJECT_ENUM)
+ return NPNFuncs.enumerate(npp, obj, identifier, count);
+#endif
+ return false;
+}
+
+bool NPN_Construct(NPP npp, NPObject *obj, const NPVariant *args,
+ uint32_t argCount, NPVariant *result)
+{
+#if defined(NPVERS_HAS_NPOBJECT_ENUM) && (NP_VERSION_MINOR >= NPVERS_HAS_NPOBJECT_ENUM)
+ if ((NPNFuncs.version & 0xFF) >= NPVERS_HAS_NPOBJECT_ENUM)
+ return NPNFuncs.construct(npp, obj, args, argCount, result);
+#endif
+ return false;
+}
+
+bool NPN_HasProperty(NPP npp, NPObject* obj, NPIdentifier propertyName)
+{
+ return NPNFuncs.hasproperty(npp, obj, propertyName);
+}
+
+bool NPN_HasMethod(NPP npp, NPObject* obj, NPIdentifier methodName)
+{
+ return NPNFuncs.hasmethod(npp, obj, methodName);
+}
+
+void NPN_ReleaseVariantValue(NPVariant *variant)
+{
+ NPNFuncs.releasevariantvalue(variant);
+}
+
+void NPN_SetException(NPObject* obj, const NPUTF8 *message)
+{
+ NPNFuncs.setexception(obj, message);
+}
+
+void* NPN_MemDup (const void* aMem, uint32 aLen)
+{
+ if (!aMem || !aLen)
+ return NULL;
+
+ void* dup = NPN_MemAlloc (aLen);
+ if (!dup)
+ return NULL;
+
+ return memcpy (dup, aMem, aLen);
+}
+
+char* NPN_StrDup (const char* aString)
+{
+ return (char*) NPN_MemDup (aString, strlen (aString) + 1);
+}
diff --git a/browser-plugin/totemNPObject.cpp b/browser-plugin/totemNPObject.cpp
new file mode 100644
index 00000000..b367f74e
--- /dev/null
+++ b/browser-plugin/totemNPObject.cpp
@@ -0,0 +1,584 @@
+/*
+ * Copyright © 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., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include <config.h>
+
+#include <string.h>
+#include <stdio.h>
+#include <stdarg.h>
+
+#include <glib.h>
+
+#include "totemNPClass.h"
+#include "totemNPObject.h"
+
+#ifdef DEBUG_PLUGIN
+#define NOTE(x) x
+#else
+#define NOTE(x)
+#endif
+
+static const char *variantTypes[] = {
+ "void",
+ "null",
+ "bool",
+ "int32",
+ "double",
+ "string",
+ "object",
+ "unknown"
+};
+
+#define VARIANT_TYPE(type) (variantTypes[MIN (type, NPVariantType_Object + 1)])
+
+void*
+totemNPObject::operator new (size_t aSize) throw ()
+{
+ void *instance = ::operator new (aSize);
+ if (instance) {
+ memset (instance, 0, aSize);
+ }
+
+ return instance;
+}
+
+totemNPObject::totemNPObject (NPP aNPP)
+ : mNPP (aNPP),
+ mPlugin (reinterpret_cast<totemPlugin*>(aNPP->pdata))
+{
+ NOTE (g_print ("totemNPObject ctor [%p]\n", (void*) this));
+}
+
+totemNPObject::~totemNPObject ()
+{
+ NOTE (g_print ("totemNPObject dtor [%p]\n", (void*) this));
+}
+
+bool
+totemNPObject::Throw (const char *aMessage)
+{
+ NOTE (g_print ("totemNPObject::Throw [%p] : %s\n", (void*) this, aMessage));
+
+ NPN_SetException (this, aMessage);
+ return false;
+}
+
+bool
+totemNPObject::ThrowPropertyNotWritable ()
+{
+ return Throw ("Property not writable");
+}
+
+bool
+totemNPObject::ThrowSecurityError ()
+{
+ return Throw ("Access denied");
+}
+
+bool
+totemNPObject::CheckArgc (uint32_t argc,
+ uint32_t minArgc,
+ uint32_t maxArgc,
+ bool doThrow)
+{
+ if (argc >= minArgc && argc <= maxArgc)
+ return true;
+
+ if (argc < minArgc) {
+ if (doThrow)
+ return Throw ("Not enough arguments");
+
+ return false;
+ }
+
+ if (doThrow)
+ return Throw ("Too many arguments");
+
+ return false;
+}
+
+bool
+totemNPObject::CheckArgType (NPVariantType argType,
+ NPVariantType expectedType,
+ uint32_t argNum)
+{
+ bool conforms;
+
+ switch (argType) {
+ case NPVariantType_Void:
+ case NPVariantType_Null:
+ conforms = (argType == expectedType);
+ break;
+
+ case NPVariantType_Bool:
+ conforms = (argType == NPVariantType_Bool ||
+ argType == NPVariantType_Int32 ||
+ argType == NPVariantType_Double);
+ break;
+
+ case NPVariantType_Int32:
+ case NPVariantType_Double:
+ /* FIXMEchpe: also accept NULL or VOID ? */
+ conforms = (argType == NPVariantType_Int32 ||
+ argType == NPVariantType_Double);
+ break;
+
+ case NPVariantType_String:
+ case NPVariantType_Object:
+ conforms = (argType == expectedType ||
+ argType == NPVariantType_Null ||
+ argType == NPVariantType_Void);
+ break;
+ }
+
+ if (!conforms) {
+ char msg[128];
+ g_snprintf (msg, sizeof (msg),
+ "Wrong type of argument %d: expected %s but got %s\n",
+ argNum, VARIANT_TYPE (expectedType), VARIANT_TYPE (argType));
+
+ return Throw (msg);
+ }
+
+ return true;
+}
+
+bool
+totemNPObject::CheckArg (const NPVariant *argv,
+ uint32_t argc,
+ uint32_t argNum,
+ NPVariantType type)
+{
+ if (!CheckArgc (argc, argNum + 1))
+ return false;
+
+ return CheckArgType (argv[argNum].type, type, argNum);
+}
+
+bool
+totemNPObject::CheckArgv (const NPVariant* argv,
+ uint32_t argc,
+ uint32_t expectedArgc,
+ ...)
+{
+ if (!CheckArgc (argc, expectedArgc, expectedArgc))
+ return false;
+
+ va_list type_args;
+ va_start (type_args, expectedArgc);
+
+ for (uint32_t i = 0; i < argc; ++i) {
+ NPVariantType type = NPVariantType (va_arg (type_args, int /* promotion */));
+
+ if (!CheckArgType (argv[i].type, type)) {
+ va_end (type_args);
+ return false;
+ }
+ }
+
+ va_end (type_args);
+
+ return true;
+}
+
+bool
+totemNPObject::GetBoolFromArguments (const NPVariant* argv,
+ uint32_t argc,
+ uint32_t argNum,
+ bool& _result)
+{
+ if (!CheckArg (argv, argc, argNum, NPVariantType_Bool))
+ return false;
+
+ NPVariant arg = argv[argNum];
+ if (NPVARIANT_IS_BOOLEAN (arg)) {
+ _result = NPVARIANT_TO_BOOLEAN (arg);
+ } else if (NPVARIANT_IS_INT32 (arg)) {
+ _result = NPVARIANT_TO_INT32 (arg) != 0;
+ } else if (NPVARIANT_IS_DOUBLE (arg)) {
+ _result = NPVARIANT_TO_DOUBLE (arg) != 0.0;
+ } else {
+ /* void/null */
+ _result = false;
+ }
+
+ return true;
+}
+
+bool
+totemNPObject::GetInt32FromArguments (const NPVariant* argv,
+ uint32_t argc,
+ uint32_t argNum,
+ int32_t& _result)
+{
+ if (!CheckArg (argv, argc, argNum, NPVariantType_Int32))
+ return false;
+
+ NPVariant arg = argv[argNum];
+ if (NPVARIANT_IS_INT32 (arg)) {
+ _result = NPVARIANT_TO_INT32 (arg);
+ } else if (NPVARIANT_IS_DOUBLE (arg)) {
+ _result = int32_t (NPVARIANT_TO_DOUBLE (arg));
+ /* FIXMEchpe: overflow? */
+ }
+
+ return true;
+}
+
+bool
+totemNPObject::GetDoubleFromArguments (const NPVariant* argv,
+ uint32_t argc,
+ uint32_t argNum,
+ double& _result)
+{
+ if (!CheckArg (argv, argc, argNum, NPVariantType_Double))
+ return false;
+
+ NPVariant arg = argv[argNum];
+ if (NPVARIANT_IS_DOUBLE (arg)) {
+ _result = NPVARIANT_TO_DOUBLE (arg);
+ } else if (NPVARIANT_IS_INT32 (arg)) {
+ _result = double (NPVARIANT_TO_INT32 (arg));
+ }
+
+ return true;
+}
+
+bool
+totemNPObject::GetStringFromArguments (const NPVariant* argv,
+ uint32_t argc,
+ uint32_t argNum,
+ const char*& _result)
+{
+ if (!CheckArg (argv, argc, argNum, NPVariantType_String))
+ return false;
+
+ NPVariant arg = argv[argNum];
+ if (NPVARIANT_IS_STRING (arg)) {
+ NPString string = NPVARIANT_TO_STRING (arg);
+ // FIXMEchpe this assumes it's 0-terminated, check that this holds!
+ _result = string.UTF8Characters;
+ } else if (NPVARIANT_IS_NULL (arg) ||
+ NPVARIANT_IS_VOID (arg)) {
+ _result = NULL;
+ }
+
+ return true;
+}
+
+bool
+totemNPObject::DupStringFromArguments (const NPVariant* argv,
+ uint32_t argc,
+ uint32_t argNum,
+ char*& _result)
+{
+ NPN_MemFree (_result);
+ _result = NULL;
+
+ const char *newValue;
+ if (!GetStringFromArguments (argv, argc, argNum, newValue))
+ return false;
+
+ /* This assumes every NPString is 0-terminated. FIXMEchpe check that this holds! */
+ _result = NPN_StrDup (newValue);
+ return true;
+}
+
+bool
+totemNPObject::GetObjectFromArguments (const NPVariant* argv,
+ uint32_t argc,
+ uint32_t argNum,
+ NPObject*& _result)
+{
+ if (!CheckArg (argv, argc, argNum, NPVariantType_Object))
+ return false;
+
+ NPVariant arg = argv[argNum];
+ if (NPVARIANT_IS_STRING (arg)) {
+ _result = NPVARIANT_TO_OBJECT (arg);
+ } else if (NPVARIANT_IS_NULL (arg) ||
+ NPVARIANT_IS_VOID (arg)) {
+ _result = NULL;
+ }
+
+ return true;
+}
+
+bool
+totemNPObject::VoidVariant (NPVariant* _result)
+{
+ VOID_TO_NPVARIANT (*_result);
+ return true;
+}
+
+bool
+totemNPObject::NullVariant (NPVariant* _result)
+{
+ NULL_TO_NPVARIANT (*_result);
+ return true;
+}
+
+bool
+totemNPObject::BoolVariant (NPVariant* _result,
+ bool value)
+{
+ BOOLEAN_TO_NPVARIANT (value, *_result);
+ return true;
+}
+
+bool
+totemNPObject::Int32Variant (NPVariant* _result,
+ int32_t value)
+{
+ INT32_TO_NPVARIANT (value, *_result);
+ return true;
+}
+
+bool
+totemNPObject::DoubleVariant (NPVariant* _result,
+ double value)
+{
+ DOUBLE_TO_NPVARIANT (value, *_result);
+ return true;
+}
+
+bool
+totemNPObject::StringVariant (NPVariant* _result,
+ const char* value,
+ int32_t len)
+{
+ if (!value) {
+ NULL_TO_NPVARIANT (*_result);
+ } else {
+ char *dup;
+
+ if (len < 0) {
+ len = strlen (value);
+ dup = (char*) NPN_MemDup (value, len + 1);
+ } else {
+ dup = (char*) NPN_MemDup (value, len);
+ }
+
+ if (dup) {
+ STRINGN_TO_NPVARIANT (dup, len, *_result);
+ } else {
+ NULL_TO_NPVARIANT (*_result);
+ }
+ }
+
+ return true;
+}
+
+bool
+totemNPObject::ObjectVariant (NPVariant* _result,
+ NPObject* object)
+{
+ if (object) {
+ NPN_RetainObject (object);
+ OBJECT_TO_NPVARIANT (object, *_result);
+ } else {
+ NULL_TO_NPVARIANT (*_result);
+ }
+
+ return true;
+}
+
+/* NPObject method default implementations */
+
+void
+totemNPObject::Invalidate ()
+{
+ NOTE (g_print ("totemNPObject %p invalidated\n", (void*) this));
+
+ mNPP = NULL;
+ mPlugin = NULL;
+}
+
+bool
+totemNPObject::HasMethod (NPIdentifier aName)
+{
+ if (!IsValid ())
+ return false;
+
+ NOTE (g_print ("totemNPObject::HasMethod [%p] %s\n", (void*) this, NPN_UTF8FromIdentifier (aName)));
+ if (GetClass()->GetMethodIndex (aName) >= 0)
+ return true;
+
+ if (aName == NPN_GetStringIdentifier ("__noSuchMethod__"))
+ return true;
+
+ return false;
+}
+
+bool
+totemNPObject::Invoke (NPIdentifier aName,
+ const NPVariant *argv,
+ uint32_t argc,
+ NPVariant *_result)
+{
+ if (!IsValid ())
+ return false;
+
+ NOTE (g_print ("totemNPObject::Invoke [%p] %s\n", (void*) this, NPN_UTF8FromIdentifier (aName)));
+ int methodIndex = GetClass()->GetMethodIndex (aName);
+ if (methodIndex >= 0)
+ return InvokeByIndex (methodIndex, argv, argc, _result);
+
+ if (aName == NPN_GetStringIdentifier ("__noSuchMethod__")) {
+ /* http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Object:_noSuchMethod */
+ if (!CheckArgv (argv, argc, 2, NPVariantType_String, NPVariantType_Object))
+ return false;
+
+ const char *id = NPVARIANT_TO_STRING (argv[0]).UTF8Characters;
+ g_message ("NOTE: site calls unknown function \"%s\" on totemNPObject %p\n", id ? id : "(null)", (void*) this);
+
+ /* Silently ignore the invocation */
+ VOID_TO_NPVARIANT (*_result);
+ return true;
+ }
+
+ return Throw ("No method with this name exists.");
+}
+
+bool
+totemNPObject::InvokeDefault (const NPVariant *argv,
+ uint32_t argc,
+ NPVariant *_result)
+{
+ if (!IsValid ())
+ return false;
+
+ NOTE (g_print ("totemNPObject::InvokeDefault [%p]\n", (void*) this));
+ int defaultMethodIndex = GetClass()->GetDefaultMethodIndex ();
+ if (defaultMethodIndex >= 0)
+ return InvokeByIndex (defaultMethodIndex, argv, argc, _result);
+
+ return false;
+}
+
+bool
+totemNPObject::HasProperty (NPIdentifier aName)
+{
+ if (!IsValid ())
+ return false;
+
+ NOTE (g_print ("totemNPObject::HasProperty [%p] %s\n", (void*) this, NPN_UTF8FromIdentifier (aName)));
+ if (GetClass()->GetPropertyIndex (aName) >= 0)
+ return true;
+
+ return false;
+}
+
+bool
+totemNPObject::GetProperty (NPIdentifier aName,
+ NPVariant *_result)
+{
+ if (!IsValid ())
+ return false;
+
+ NOTE (g_print ("totemNPObject::GetProperty [%p] %s\n", (void*) this, NPN_UTF8FromIdentifier (aName)));
+ int propertyIndex = GetClass()->GetPropertyIndex (aName);
+ if (propertyIndex >= 0)
+ return GetPropertyByIndex (propertyIndex, _result);
+
+ return Throw ("No property with this name exists.");
+}
+
+bool
+totemNPObject::SetProperty (NPIdentifier aName,
+ const NPVariant *aValue)
+{
+ if (!IsValid ())
+ return false;
+
+ NOTE (g_print ("totemNPObject::SetProperty [%p] %s\n", (void*) this, NPN_UTF8FromIdentifier (aName)));
+ int propertyIndex = GetClass()->GetPropertyIndex (aName);
+ if (propertyIndex >= 0)
+ return SetPropertyByIndex (propertyIndex, aValue);
+
+ return Throw ("No property with this name exists.");
+}
+
+bool
+totemNPObject::RemoveProperty (NPIdentifier aName)
+{
+ if (!IsValid ())
+ return false;
+
+ NOTE (g_print ("totemNPObject::RemoveProperty [%p] %s\n", (void*) this, NPN_UTF8FromIdentifier (aName)));
+ int propertyIndex = GetClass()->GetPropertyIndex (aName);
+ if (propertyIndex >= 0)
+ return RemovePropertyByIndex (propertyIndex);
+
+ return Throw ("No property with this name exists.");
+}
+
+bool
+totemNPObject::Enumerate (NPIdentifier **_result,
+ uint32_t *_count)
+{
+ if (!IsValid ())
+ return false;
+
+ NOTE (g_print ("totemNPObject::Enumerate [%p]\n", (void*) this));
+ return GetClass()->EnumerateProperties (_result, _count);
+}
+
+bool
+totemNPObject::Construct (const NPVariant *argv,
+ uint32_t argc,
+ NPVariant *_result)
+{
+ if (!IsValid ())
+ return false;
+
+ NOTE (g_print ("totemNPObject::Construct [%p]\n", (void*) this));
+ return false; /* FIXMEchpe! */
+}
+
+/* by-index methods */
+
+bool
+totemNPObject::InvokeByIndex (int aIndex,
+ const NPVariant *argv,
+ uint32_t argc,
+ NPVariant *_result)
+{
+ return false;
+}
+
+bool
+totemNPObject::GetPropertyByIndex (int aIndex,
+ NPVariant *_result)
+{
+ return false;
+}
+
+bool
+totemNPObject::SetPropertyByIndex (int aIndex,
+ const NPVariant *aValue)
+{
+ return false;
+}
+
+bool
+totemNPObject::RemovePropertyByIndex (int aIndex)
+{
+ return Throw ("Removing properties is not supported.");
+}
diff --git a/browser-plugin/totemNPObject.h b/browser-plugin/totemNPObject.h
new file mode 100644
index 00000000..2682f1a8
--- /dev/null
+++ b/browser-plugin/totemNPObject.h
@@ -0,0 +1,201 @@
+/*
+ * Copyright © 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., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __TOTEM_NPOBJECT_H__
+#define __TOTEM_NPOBJECT_H__
+
+#include <assert.h>
+
+#include "npapi.h"
+#include "npruntime.h"
+
+#include "debug.h"
+
+class totemPlugin;
+class totemNPObject;
+class totemNPClass_base;
+template<class T> class totemNPClass;
+
+class totemNPObject : public NPObject {
+ public:
+ totemNPObject (NPP);
+
+ virtual ~totemNPObject ();
+
+ void* operator new (size_t aSize) throw ();
+
+ protected:
+ friend class totemNPClass_base;
+
+ /* NPObject methods */
+ virtual void Invalidate ();
+ virtual bool HasMethod (NPIdentifier aName);
+ virtual bool Invoke (NPIdentifier aName, const NPVariant *argv, uint32_t argc, NPVariant *_result);
+ virtual bool InvokeDefault (const NPVariant *argv, uint32_t argc, NPVariant *_result);
+ virtual bool HasProperty (NPIdentifier aName);
+ virtual bool GetProperty (NPIdentifier aName, NPVariant *_result);
+ virtual bool SetProperty (NPIdentifier aName, const NPVariant *aValue);
+ virtual bool RemoveProperty (NPIdentifier aName);
+ virtual bool Enumerate (NPIdentifier **_result, uint32_t *_count);
+ virtual bool Construct (const NPVariant *argv, uint32_t argc, NPVariant *_result);
+
+ /* By Index methods */
+ virtual bool InvokeByIndex (int aIndex, const NPVariant *argv, uint32_t argc, NPVariant *_result);
+ virtual bool GetPropertyByIndex (int aIndex, NPVariant *_result);
+ virtual bool SetPropertyByIndex (int aIndex, const NPVariant *aValue);
+ virtual bool RemovePropertyByIndex (int aIndex);
+
+ private:
+
+ NPP mNPP;
+ totemPlugin *mPlugin;
+
+ protected:
+
+ bool IsValid () const { return mPlugin != 0; }
+ totemPlugin* Plugin () const { assert (IsValid ()); return mPlugin; }
+
+ bool Throw (const char*);
+ bool ThrowPropertyNotWritable ();
+ bool ThrowSecurityError ();
+
+ bool CheckArgc (uint32_t, uint32_t, uint32_t = uint32_t(-1), bool = true);
+ bool CheckArgType (NPVariantType, NPVariantType, uint32_t = 0);
+ bool CheckArg (const NPVariant*, uint32_t, uint32_t, NPVariantType);
+ bool CheckArgv (const NPVariant*, uint32_t, uint32_t, ...);
+
+ bool GetBoolFromArguments (const NPVariant*, uint32_t, uint32_t, bool&);
+ bool GetInt32FromArguments (const NPVariant*, uint32_t, uint32_t, int32_t&);
+ bool GetDoubleFromArguments (const NPVariant*, uint32_t, uint32_t, double&);
+ bool GetStringFromArguments (const NPVariant*, uint32_t, uint32_t, const char*&);
+ bool DupStringFromArguments (const NPVariant*, uint32_t, uint32_t, char*&);
+ bool GetObjectFromArguments (const NPVariant*, uint32_t, uint32_t, NPObject*&);
+
+ bool VoidVariant (NPVariant*);
+ bool NullVariant (NPVariant*);
+ bool BoolVariant (NPVariant*, bool);
+ bool Int32Variant (NPVariant*, int32_t);
+ bool DoubleVariant (NPVariant*, double);
+ bool StringVariant (NPVariant*, const char*, int32_t = -1);
+ bool ObjectVariant (NPVariant*, NPObject*);
+
+ private:
+
+ totemNPClass_base* GetClass() const { return static_cast<totemNPClass_base*>(_class); }
+};
+
+/* Helper macros */
+
+#ifdef GNOME_ENABLE_DEBUG
+
+#define TOTEM_LOG_CTOR() D ("%s [%p]", __func__, (void*) this)
+#define TOTEM_LOG_DTOR() D ("%s [%p]", __func__, (void*) this)
+
+#define TOTEM_LOG_INVOKE(i, T) \
+{\
+ static bool logAccess[G_N_ELEMENTS (methodNames)];\
+ if (!logAccess[i]) {\
+ D ("NOTE: site calls function %s::%s", #T, methodNames[i]);\
+ logAccess[i] = true;\
+ }\
+}
+
+#define TOTEM_LOG_GETTER(i, T) \
+{\
+ static bool logAccess[G_N_ELEMENTS (propertyNames)];\
+ if (!logAccess[i]) {\
+ D ("NOTE: site gets property %s::%s", #T, propertyNames[i]);\
+ logAccess[i] = true;\
+ }\
+}
+
+#define TOTEM_LOG_SETTER(i, T) \
+{\
+ static bool logAccess[G_N_ELEMENTS (propertyNames)];\
+ if (!logAccess[i]) {\
+ D ("NOTE: site sets property %s::%s", #T, propertyNames[i]);\
+ logAccess[i] = true;\
+ }\
+}
+
+#else
+
+#define TOTEM_LOG_CTOR()
+#define TOTEM_LOG_DTOR()
+#define TOTEM_LOG_INVOKE(i, T)
+#define TOTEM_LOG_GETTER(i, T)
+#define TOTEM_LOG_SETTER(i, T)
+
+#endif /* GNOME_ENABLE_DEBUG */
+
+#define TOTEM_WARN_INVOKE_UNIMPLEMENTED(i, T) \
+{\
+ static bool logWarning[G_N_ELEMENTS (methodNames)];\
+ if (!logWarning[i]) {\
+ D ("WARNING: function %s::%s is unimplemented", #T, methodNames[i]);\
+ logWarning[i] = true;\
+ }\
+}
+
+#define TOTEM_WARN_1_INVOKE_UNIMPLEMENTED(i, T) \
+{\
+ static bool logWarning;\
+ if (!logWarning) {\
+ D ("WARNING: function %s::%s is unimplemented", #T, methodNames[i]);\
+ logWarning = true;\
+ }\
+}
+
+#define TOTEM_WARN_GETTER_UNIMPLEMENTED(i, T) \
+{\
+ static bool logWarning[G_N_ELEMENTS (propertyNames)];\
+ if (!logWarning[i]) {\
+ D ("WARNING: getter for property %s::%s is unimplemented", #T, propertyNames[i]);\
+ logWarning[i] = true;\
+ }\
+}
+
+#define TOTEM_WARN_1_GETTER_UNIMPLEMENTED(i, T) \
+{\
+ static bool logWarning;\
+ if (!logWarning) {\
+ D ("WARNING: getter for property %s::%s is unimplemented", #T, propertyNames[i]);\
+ logWarning = true;\
+ }\
+}
+
+#define TOTEM_WARN_SETTER_UNIMPLEMENTED(i, T) \
+{\
+ static bool logWarning[G_N_ELEMENTS (propertyNames)];\
+ if (!logWarning[i]) {\
+ D ("WARNING: setter for property %s::%s is unimplemented", #T, propertyNames[i]);\
+ logWarning[i] = true;\
+ }\
+}
+
+#define TOTEM_WARN_1_SETTER_UNIMPLEMENTED(i, T) \
+{\
+ static bool logWarning;\
+ if (!logWarning) {\
+ D ("WARNING: setter for property %s::%s is unimplemented", #T, propertyNames[i]);\
+ logWarning = true;\
+ }\
+}
+
+#endif /* __TOTEM_NPOBJECT_H__ */
diff --git a/browser-plugin/totemNPObjectWrapper.h b/browser-plugin/totemNPObjectWrapper.h
new file mode 100644
index 00000000..d633eefe
--- /dev/null
+++ b/browser-plugin/totemNPObjectWrapper.h
@@ -0,0 +1,124 @@
+/*
+ * Copyright © 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., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __TOTEM_NPOBJECT_WRAPPER_H__
+#define __TOTEM_NPOBJECT_WRAPPER_H__
+
+#include <npapi.h>
+#include <npruntime.h>
+
+#include <assert.h>
+
+class totemNPObjectWrapper {
+
+ public:
+
+ totemNPObjectWrapper () : mObject (0) { }
+ totemNPObjectWrapper (NPObject *aObject) : mObject (aObject) { } /* adopts */
+ totemNPObjectWrapper (const totemNPObjectWrapper& aOther) { Assign (aOther.mObject); }
+
+ ~totemNPObjectWrapper () { Assign (0); }
+
+ bool IsNull () const { return mObject == 0; }
+
+ totemNPObjectWrapper& operator= (NPObject *aObject) { Assign (aObject); return *this; }
+
+ operator void*() const { return reinterpret_cast<void*>(mObject); }
+ operator NPObject*() const { return mObject; }
+ NPObject* operator->() const { assert (!IsNull ()); return mObject; }
+
+ class GetterRetains {
+ public:
+ explicit GetterRetains (totemNPObjectWrapper& aTarget) : mTarget (aTarget) { VOID_TO_NPVARIANT (mVariant); }
+ ~GetterRetains () {
+ if (!NPVARIANT_IS_VOID (mVariant)) {
+ if (NPVARIANT_IS_OBJECT (mVariant)) {
+ mTarget = NPVARIANT_TO_OBJECT (mVariant);
+ }
+ NPN_ReleaseVariantValue (&mVariant);
+ }
+ }
+
+ operator void**() { return reinterpret_cast<void**> (mTarget.StartAssignment ()); } // FIXMEchpe this looks wrong...
+ operator NPObject**() { return mTarget.StartAssignment (); }
+ operator NPVariant*() { return &mVariant; }
+
+ /* NPN_GetValue uses void* which is broken */
+ operator void*() { return reinterpret_cast<void*> (mTarget.StartAssignment ()); }
+
+ private:
+ totemNPObjectWrapper& mTarget;
+ NPVariant mVariant;
+ };
+
+ class AlreadyRetained {
+ public:
+ explicit AlreadyRetained (NPObject *aObject) : mObject (aObject) { }
+ ~AlreadyRetained () { }
+
+ NPObject *Get () const { return mObject; }
+ private:
+ NPObject *mObject;
+ };
+
+ totemNPObjectWrapper& operator= (const AlreadyRetained& aRetainer) { Adopt (aRetainer.Get()); return *this; }
+
+ protected:
+
+ totemNPObjectWrapper& operator= (const totemNPObjectWrapper&); // not implemented
+
+ void Assign (NPObject *aObject) {
+ if (mObject) {
+ NPN_ReleaseObject (mObject);
+ }
+
+ mObject = aObject;
+ if (mObject) {
+ NPN_RetainObject (mObject);
+ }
+ }
+
+ void Adopt (NPObject *aObject) {
+ if (mObject) {
+ NPN_ReleaseObject (mObject);
+ }
+
+ mObject = aObject;
+ }
+
+ NPObject** StartAssignment () { Assign (0); return &mObject; }
+
+ NPObject *mObject;
+};
+
+inline totemNPObjectWrapper::GetterRetains
+getter_Retains (totemNPObjectWrapper &aTarget)
+{
+ return totemNPObjectWrapper::GetterRetains (aTarget);
+}
+
+inline totemNPObjectWrapper::AlreadyRetained
+do_CreateInstance (totemNPClass_base* aClass, NPP aNPP)
+{
+ assert (aClass);
+ assert (aNPP);
+ return totemNPObjectWrapper::AlreadyRetained (aClass->CreateInstance (aNPP));
+}
+
+#endif /* __TOTEM_NPOBJECT_WRAPPER_H__ */
diff --git a/browser-plugin/totemNPVariantWrapper.h b/browser-plugin/totemNPVariantWrapper.h
new file mode 100644
index 00000000..5f7da50a
--- /dev/null
+++ b/browser-plugin/totemNPVariantWrapper.h
@@ -0,0 +1,112 @@
+/*
+ * Copyright © 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., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __TOTEM_NPVARIANT_WRAPPER_H__
+#define __TOTEM_NPVARIANT_WRAPPER_H__
+
+#include <assert.h>
+#include <string.h>
+
+#include "npapi.h"
+#include "npruntime.h"
+
+class totemNPVariantWrapper {
+
+ public:
+
+ totemNPVariantWrapper () : mOwned (false) { VOID_TO_NPVARIANT (mVariant); }
+ totemNPVariantWrapper (bool aValue) : mOwned (false) { BOOLEAN_TO_NPVARIANT (aValue, mVariant); }
+ totemNPVariantWrapper (uint32_t aValue) : mOwned (false) { INT32_TO_NPVARIANT (aValue, mVariant); }
+ totemNPVariantWrapper (double aValue) : mOwned (false) { DOUBLE_TO_NPVARIANT (aValue, mVariant); }
+ totemNPVariantWrapper (char *aValue) : mOwned (false) { STRINGZ_TO_NPVARIANT (aValue, mVariant); }
+// totemNPVariantWrapper (NPString *aValue) : mOwned (false) { STRINGN_TO_NPVARIANT (aValue, mVariant); }
+ totemNPVariantWrapper (NPObject *aObject) : mOwned (false) { OBJECT_TO_NPVARIANT (aObject, mVariant); }
+
+ totemNPVariantWrapper (const totemNPVariantWrapper& aOther) : mVariant (aOther.mVariant), mOwned (false) { }
+
+ ~totemNPVariantWrapper () { Clear (); }
+
+ bool IsVoid () const { return NPVARIANT_IS_VOID (mVariant); }
+ bool IsNull () const { return NPVARIANT_IS_NULL (mVariant); }
+ bool IsBoolean () const { return NPVARIANT_IS_BOOLEAN (mVariant); }
+ bool IsInt32 () const { return NPVARIANT_IS_INT32 (mVariant); }
+ bool IsDouble () const { return NPVARIANT_IS_DOUBLE (mVariant); }
+ bool IsString () const { return NPVARIANT_IS_STRING (mVariant); }
+ bool IsObject () const { return NPVARIANT_IS_OBJECT (mVariant); }
+
+ bool GetBoolean () const { return NPVARIANT_TO_BOOLEAN (mVariant); }
+ uint32_t GetInt32 () const { return NPVARIANT_TO_INT32 (mVariant); }
+ double GetDouble () const { return NPVARIANT_TO_DOUBLE (mVariant); }
+ char * GetString () const { return (char *) NPVARIANT_TO_STRING (mVariant).UTF8Characters; }
+ NPString GetNPString () const { return NPVARIANT_TO_STRING (mVariant); }
+ NPObject* GetObject () const { return NPVARIANT_TO_OBJECT (mVariant); }
+
+ void SetVoid () { Clear (); VOID_TO_NPVARIANT (mVariant); }
+ void SetNull () { Clear (); NULL_TO_NPVARIANT (mVariant); }
+ void SetBoolean (bool aValue) { Clear (); BOOLEAN_TO_NPVARIANT (aValue, mVariant); }
+ void SetInt32 (uint32_t aValue) { Clear (); INT32_TO_NPVARIANT (aValue, mVariant); }
+ void SetDouble (double aValue) { Clear (); DOUBLE_TO_NPVARIANT (aValue, mVariant); }
+ void SetString (char *aValue) { Clear (); STRINGZ_TO_NPVARIANT (aValue, mVariant); }
+// void SetString (NPString *aValue) { Clear (); STRINGN_TO_NPVARIANT (aValue, mVariant); }
+ void SetObject (NPObject *aObject) { Clear (); OBJECT_TO_NPVARIANT (aObject, mVariant); }
+
+ operator char* () { return GetString (); }
+ operator NPString () { return GetNPString (); }
+ operator NPObject* () { return GetObject (); }
+
+ operator NPVariant*() { return &mVariant; }
+
+ class GetterCopies {
+ public:
+ explicit GetterCopies (totemNPVariantWrapper& aTarget) : mTarget (aTarget) { }
+ ~GetterCopies () { }
+
+ operator NPVariant*() { return mTarget.StartAssignment (); }
+
+ private:
+ totemNPVariantWrapper& mTarget;
+ };
+
+ private:
+
+ totemNPVariantWrapper& operator= (const totemNPVariantWrapper&); // not implemented
+
+ void Clear () {
+ if (mOwned) {
+ NPN_ReleaseVariantValue (&mVariant);
+ mOwned = false;
+ } else {
+ VOID_TO_NPVARIANT (mVariant);
+ }
+ }
+
+ NPVariant* StartAssignment () { Clear (); mOwned = true; return &mVariant; }
+
+ protected:
+ NPVariant mVariant;
+ bool mOwned;
+};
+
+inline totemNPVariantWrapper::GetterCopies
+getter_Copies (totemNPVariantWrapper &aTarget)
+{
+ return totemNPVariantWrapper::GetterCopies (aTarget);
+}
+
+#endif /* __TOTEM_NPVARIANT_WRAPPER_H__ */
diff --git a/browser-plugin/totemNarrowSpacePlugin.cpp b/browser-plugin/totemNarrowSpacePlugin.cpp
index 5a5beea3..122d1b54 100644
--- a/browser-plugin/totemNarrowSpacePlugin.cpp
+++ b/browser-plugin/totemNarrowSpacePlugin.cpp
@@ -1,8 +1,8 @@
-/* Totem Basic Plugin
+/* Totem NarrowSpace Plugin
*
- * Copyright (C) 2004 Bastien Nocera <hadess@hadess.net>
- * Copyright (C) 2002 David A. Schleef <ds@schleef.org>
- * Copyright (C) 2006 Christian Persch
+ * Copyright © 2004 Bastien Nocera <hadess@hadess.net>
+ * Copyright © 2002 David A. Schleef <ds@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
@@ -18,975 +18,523 @@
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
- *
- * $Id$
*/
-#include <mozilla-config.h>
-#include "config.h"
-
-#include <glib.h>
-
-#include <nsIProgrammingLanguage.h>
-#include <nsISupportsImpl.h>
-#include <nsMemory.h>
-#include <nsXPCOM.h>
-
-#define GNOME_ENABLE_DEBUG 1
-/* define GNOME_ENABLE_DEBUG for more debug spew */
-#include "debug.h"
-
-#include "totemDebug.h"
-#include "totemClassInfo.h"
+#include <config.h>
#include "totemNarrowSpacePlugin.h"
-
-/* 2e390ee1-f0e3-423c-9764-f5ab50a40c06 */
-static const nsCID kClassID =
-{ 0x2e390ee1, 0xf0e3, 0x423c, \
- { 0x97, 0x64, 0xf5, 0xab, 0x50, 0xa4, 0x0c, 0x06 } };
-
-static const char kClassDescription[] = "totemNarrowSpacePlugin";
-#define QUICKTIME_VERSION "7.2.0"
-static const char kPluginDescription[] = "QuickTime Plug-in "QUICKTIME_VERSION;
-
-static const totemPluginMimeEntry kMimeTypes[] = {
- { "video/quicktime", "mov", NULL },
- { "video/mp4", "mp4", NULL },
- { "image/x-macpaint", "pntg", NULL },
- { "image/x-quicktime", "pict, pict1, pict2", "image/x-pict" },
- { "video/x-m4v", "m4v", NULL },
+#include "totemPlugin.h"
+
+static const char *methodNames[] = {
+ "GetAutoPlay",
+ "GetBgColor",
+ "GetComponentVersion",
+ "GetControllerVisible",
+ "GetDuration",
+ "GetEndTime",
+ "GetFieldOfView",
+ "GetHotpotTarget",
+ "GetHotpotUrl",
+ "GetHREF",
+ "GetIsLooping",
+ "GetIsQuickTimeRegistered",
+ "GetIsVRMovie",
+ "GetKioskMode",
+ "GetLanguage",
+ "GetLoopIsPalindrome",
+ "GetMatrix",
+ "GetMaxBytesLoaded",
+ "GetMaxTimeLoaded",
+ "GetMIMEType",
+ "GetMovieID",
+ "GetMovieName",
+ "GetMovieSize",
+ "GetMute",
+ "GetNodeCount",
+ "GetNodeID",
+ "GetPanAngle",
+ "GetPlayEveryFrame",
+ "GetPluginStatus",
+ "GetPluginVersion",
+ "GetQTNextUrl",
+ "GetQuickTimeConnectionSpeed",
+ "GetQuickTimeLanguage",
+ "GetQuickTimeVersion",
+ "GetRate",
+ "GetRectangle",
+ "GetResetPropertiesOnReload",
+ "GetSpriteTrackVariable",
+ "GetStartTime",
+ "GetTarget",
+ "GetTiltAngle",
+ "GetTime",
+ "GetTimeScale",
+ "GetTrackCount"
+ "GetTrackEnabled",
+ "GetTrackName",
+ "GetTrackType",
+ "GetURL",
+ "GetUserData",
+ "GetVolume",
+ "GoPreviousNode",
+ "Play",
+ "Rewind",
+ "SetAutoPlay",
+ "SetBgColor",
+ "SetControllerVisible",
+ "SetEndTime",
+ "SetFieldOfView",
+ "SetHotpotTarget",
+ "SetHotpotUrl",
+ "SetHREF",
+ "SetIsLooping",
+ "SetKioskMode",
+ "SetLanguage",
+ "SetLoopIsPalindrome",
+ "SetMatrix",
+ "SetMovieID",
+ "SetMovieName",
+ "SetMute",
+ "SetNodeID",
+ "SetPanAngle",
+ "SetPlayEveryFrame",
+ "SetQTNextUrl",
+ "SetRate",
+ "SetRectangle",
+ "SetResetPropertiesOnReload",
+ "SetSpriteTrackVariable",
+ "SetStartTime",
+ "SetTarget",
+ "SetTiltAngle",
+ "SetTime",
+ "SetTrackEnabled",
+ "SetURL",
+ "SetVolume",
+ "ShowDefaultView",
+ "Step",
+ "Stop"
};
-void*
-totemScriptablePlugin::operator new (size_t aSize) CPP_THROW_NEW
-{
- void *object = ::operator new (aSize);
- if (object) {
- memset (object, 0, aSize);
- }
-
- return object;
-}
-
-totemScriptablePlugin::totemScriptablePlugin (totemPlugin *aPlugin)
- : mPluginState(eState_Waiting),
- mPlugin(aPlugin)
-{
- D ("%s ctor [%p]", kClassDescription, (void*) this);
-}
-
-totemScriptablePlugin::~totemScriptablePlugin ()
-{
- D ("%s dtor [%p]", kClassDescription, (void*) this);
-}
-
-/* static */ char *
-totemScriptablePlugin::PluginDescription ()
-{
- return (char*) kPluginDescription;
-}
-
-/* static */ char *
-totemScriptablePlugin::PluginLongDescription ()
-{
- return (char*) totem_plugin_get_long_description();
-}
-
-/* static */ void
-totemScriptablePlugin::PluginMimeTypes (const totemPluginMimeEntry **_entries,
- PRUint32 *_count)
-{
- *_entries = kMimeTypes;
- *_count = G_N_ELEMENTS (kMimeTypes);
-}
-
-/* Interface implementations */
-
-NS_IMPL_ISUPPORTS2 (totemScriptablePlugin,
- totemINarrowSpacePlayer,
- nsIClassInfo)
-
-/* nsIClassInfo */
-
-TOTEM_CLASSINFO_BEGIN (totemScriptablePlugin,
- 1,
- kClassID,
- kClassDescription)
- TOTEM_CLASSINFO_ENTRY (0, totemINarrowSpacePlayer)
-TOTEM_CLASSINFO_END
-
-/* totemINarrowSpacePlayer */
-
-#define TOTEM_SCRIPTABLE_INTERFACE "totemINarrowSpacePlayer"
-
-/* boolean GetAutoPlay (); */
-NS_IMETHODIMP
-totemScriptablePlugin::GetAutoPlay(PRBool *_retval)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED();
-
- *_retval = mAutoPlay;
- return NS_OK;
-}
-
-/* void SetAutoPlay (in boolean enabled); */
-NS_IMETHODIMP
-totemScriptablePlugin::SetAutoPlay(PRBool enabled)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED();
-
- mAutoPlay = enabled != PR_FALSE;
- return NS_OK;
-}
-
-/* ACString GetBgColor (); */
-NS_IMETHODIMP
-totemScriptablePlugin::GetBgColor(nsACString & _retval)
-{
- TOTEM_SCRIPTABLE_LOG_ACCESS ();
-
- _retval.Assign (mBackgroundColour);
- return NS_OK;
-}
-
-/* void SetBgColor (in ACString colour); */
-NS_IMETHODIMP
-totemScriptablePlugin::SetBgColor(const nsACString & colour)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED();
-
- mBackgroundColour = colour;
- return NS_OK;
-}
-
-/* ACString GetComponentVersion (in ACString type, in ACString subtype, in ACString vendor); */
-NS_IMETHODIMP
-totemScriptablePlugin::GetComponentVersion (const nsACString & type,
- const nsACString & subtype,
- const nsACString & vendor,
- nsACString & _retval)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED ();
- D ("GetComponentVersion [%s, %s, %s]",
- nsCString(type).get(),
- nsCString(subtype).get(),
- nsCString(vendor).get());
-
- _retval.Assign ("1.0");
- return NS_OK;
-}
-
-/* boolean GetControllerVisible (); */
-NS_IMETHODIMP
-totemScriptablePlugin::GetControllerVisible(PRBool *_retval)
-{
- TOTEM_SCRIPTABLE_LOG_ACCESS ();
- *_retval = mControllerVisible;
- return NS_OK;
-}
-
-/* void SetControllerVisible (in boolean enabled); */
-NS_IMETHODIMP
-totemScriptablePlugin::SetControllerVisible(PRBool enabled)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED();
-
- mControllerVisible = enabled != PR_FALSE;
- return NS_OK;
-}
-
-/* unsigned long GetDuration (); */
-NS_IMETHODIMP
-totemScriptablePlugin::GetDuration(PRUint32 *_retval)
-{
- TOTEM_SCRIPTABLE_LOG_ACCESS ();
-
- NS_ENSURE_STATE (IsValid());
- *_retval = mPlugin->mDuration;
- return NS_OK;
-}
-
-/* unsigned long GetEndTime (); */
-NS_IMETHODIMP
-totemScriptablePlugin::GetEndTime(PRUint32 *_retval)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED();
-
- *_retval = 0;
- return NS_OK;
-}
-
-/* void SetEndTime (in unsigned long time); */
-NS_IMETHODIMP
-totemScriptablePlugin::SetEndTime(PRUint32 time)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED();
-
- return NS_OK;
-}
-
-/* float GetFieldOfView (); */
-NS_IMETHODIMP
-totemScriptablePlugin::GetFieldOfView (float *_retval)
-{
- TOTEM_SCRIPTABLE_LOG_ACCESS ();
- return NS_ERROR_NOT_AVAILABLE;
-}
-
-/* void SetFieldOfView (in float angle); */
-NS_IMETHODIMP
-totemScriptablePlugin::SetFieldOfView(float angle)
-{
- TOTEM_SCRIPTABLE_LOG_ACCESS ();
- return NS_ERROR_NOT_AVAILABLE;
-}
-
-/* void GoPreviousNode (); */
-NS_IMETHODIMP
-totemScriptablePlugin::GoPreviousNode()
-{
- TOTEM_SCRIPTABLE_LOG_ACCESS ();
- return NS_ERROR_NOT_AVAILABLE;
-}
-
-/* AUTF8String GetHotspotTarget (in unsigned long id); */
-NS_IMETHODIMP
-totemScriptablePlugin::GetHotspotTarget(PRUint32 id, nsACString & _retval)
-{
- TOTEM_SCRIPTABLE_LOG_ACCESS ();
- return NS_ERROR_NOT_AVAILABLE;
-}
-
-/* void SetHotspotTarget (in unsigned long id, in AUTF8String target); */
-NS_IMETHODIMP
-totemScriptablePlugin::SetHotspotTarget(PRUint32 id, const nsACString & target)
-{
- TOTEM_SCRIPTABLE_LOG_ACCESS ();
- return NS_ERROR_NOT_AVAILABLE;
-}
-
-/* AUTF8String GetHotspotUrl (in unsigned long id); */
-NS_IMETHODIMP
-totemScriptablePlugin::GetHotspotUrl(PRUint32 id, nsACString & _retval)
-{
- TOTEM_SCRIPTABLE_LOG_ACCESS ();
- return NS_ERROR_NOT_AVAILABLE;
-}
-
-/* void SetHotspotUrl (in unsigned long id, in AUTF8String url); */
-NS_IMETHODIMP
-totemScriptablePlugin::SetHotspotUrl(PRUint32 id, const nsACString & url)
-{
- TOTEM_SCRIPTABLE_LOG_ACCESS ();
- return NS_ERROR_NOT_AVAILABLE;
-}
-
-/* AUTF8String GetHREF (); */
-NS_IMETHODIMP
-totemScriptablePlugin::GetHREF(nsACString & _retval)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED();
-
- return NS_OK;
-}
-
-/* void SetHREF (in AUTF8String href); */
-NS_IMETHODIMP
-totemScriptablePlugin::SetHREF(const nsACString & href)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED();
-
- return NS_OK;
-}
-
-/* boolean GetIsLooping (); */
-NS_IMETHODIMP
-totemScriptablePlugin::GetIsLooping(PRBool *_retval)
-{
- TOTEM_SCRIPTABLE_LOG_ACCESS ();
-
- *_retval = mIsLooping;
- return NS_OK;
-}
-
-/* void SetIsLooping (in boolean enabled); */
-NS_IMETHODIMP
-totemScriptablePlugin::SetIsLooping(PRBool enabled)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED();
-
- mIsLooping = enabled != PR_FALSE;
- return NS_OK;
-}
-
-/* boolean GetIsQuickTimeRegistered (); */
-NS_IMETHODIMP
-totemScriptablePlugin::GetIsQuickTimeRegistered(PRBool *_retval)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED();
-
- *_retval = PR_FALSE;
- return NS_OK;
-}
-
-/* boolean GetIsVRMovie (); */
-NS_IMETHODIMP
-totemScriptablePlugin::GetIsVRMovie(PRBool *_retval)
-{
- TOTEM_SCRIPTABLE_LOG_ACCESS ();
-
- *_retval = PR_FALSE;
- return NS_OK;
-}
-
-/* boolean GetKioskMode (); */
-NS_IMETHODIMP
-totemScriptablePlugin::GetKioskMode(PRBool *_retval)
-{
- TOTEM_SCRIPTABLE_LOG_ACCESS ();
-
- *_retval = mKioskMode;
- return NS_OK;
-}
-
-/* void SetKioskMode (in boolean enabled); */
-NS_IMETHODIMP
-totemScriptablePlugin::SetKioskMode(PRBool enabled)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED();
-
- mKioskMode = enabled != PR_FALSE;
- return NS_OK;
-}
-
-/* ACString GetLanguage (); */
-NS_IMETHODIMP
-totemScriptablePlugin::GetLanguage(nsACString & _retval)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED();
-
- _retval.Assign ("English");
- return NS_OK;
-}
-
-/* void SetLanguage (in ACString language); */
-NS_IMETHODIMP
-totemScriptablePlugin::SetLanguage(const nsACString & language)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED();
-
- return NS_OK;
-}
-
-/* boolean GetLoopIsPalindrome (); */
-NS_IMETHODIMP
-totemScriptablePlugin::GetLoopIsPalindrome(PRBool *_retval)
-{
- TOTEM_SCRIPTABLE_LOG_ACCESS ();
-
- *_retval = mLoopIsPalindrome;
- return NS_OK;
-}
-
-/* void SetLoopIsPalindrome (in boolean enabled); */
-NS_IMETHODIMP
-totemScriptablePlugin::SetLoopIsPalindrome(PRBool enabled)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED();
-
- mLoopIsPalindrome = enabled != PR_FALSE;
- return NS_OK;
-}
-
-/* ACString GetMatrix (); */
-NS_IMETHODIMP
-totemScriptablePlugin::GetMatrix(nsACString & _retval)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED();
-
- _retval.Assign (mMatrix);
- return NS_OK;
-}
-
-/* void SetMatrix (in ACString matrix); */
-NS_IMETHODIMP
-totemScriptablePlugin::SetMatrix(const nsACString & matrix)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED();
-
- mMatrix = matrix;
- return NS_OK;
-}
-
-/* unsigned long GetMaxBytesLoaded (); */
-NS_IMETHODIMP
-totemScriptablePlugin::GetMaxBytesLoaded(PRUint32 *_retval)
-{
- TOTEM_SCRIPTABLE_LOG_ACCESS ();
-
- NS_ENSURE_STATE (IsValid());
- *_retval = mPlugin->mBytesStreamed;
- return NS_OK;
-}
-
-/* unsigned long GetMaxTimeLoaded (); */
-NS_IMETHODIMP
-totemScriptablePlugin::GetMaxTimeLoaded(PRUint32 *_retval)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED();
-
- return NS_OK;
-}
-
-/* ACString GetMIMEType (); */
-NS_IMETHODIMP
-totemScriptablePlugin::GetMIMEType(nsACString & _retval)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED();
-
- _retval.Assign ("video/quicktime");
- return NS_OK;
-}
-
-/* unsigned long GetMovieID (); */
-NS_IMETHODIMP
-totemScriptablePlugin::GetMovieID(PRUint32 *_retval)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED();
-
- return NS_OK;
-}
-
-/* void SetMovieID (in unsigned long id); */
-NS_IMETHODIMP
-totemScriptablePlugin::SetMovieID(PRUint32 id)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED();
-
- return NS_OK;
-}
-
-/* AUTF8String GetMovieName (); */
-NS_IMETHODIMP
-totemScriptablePlugin::GetMovieName(nsACString & _retval)
-{
- TOTEM_SCRIPTABLE_LOG_ACCESS ();
-
- _retval.Assign (mMovieName);
- return NS_OK;
-}
-
-/* void SetMovieName (in AUTF8String name); */
-NS_IMETHODIMP
-totemScriptablePlugin::SetMovieName(const nsACString & name)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED();
-
- mMovieName = name;
- return NS_OK;
-}
-
-/* unsigned long GetMovieSize (); */
-NS_IMETHODIMP
-totemScriptablePlugin::GetMovieSize(PRUint32 *_retval)
-{
- TOTEM_SCRIPTABLE_LOG_ACCESS ();
-
- NS_ENSURE_STATE (IsValid());
- *_retval = mPlugin->mBytesLength;
- return NS_OK;
-}
-
-/* boolean GetMute (); */
-NS_IMETHODIMP
-totemScriptablePlugin::GetMute(PRBool *_retval)
-{
- TOTEM_SCRIPTABLE_LOG_ACCESS ();
-
- *_retval = mMute;
- return NS_OK;
-}
-
-/* void SetMute (in boolean enabled); */
-NS_IMETHODIMP
-totemScriptablePlugin::SetMute(PRBool enabled)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED();
-
- mMute = enabled != PR_FALSE;
- return NS_OK;
-}
-
-/* unsigned long GetNodeCount (); */
-NS_IMETHODIMP
-totemScriptablePlugin::GetNodeCount(PRUint32 *_retval)
-{
- TOTEM_SCRIPTABLE_LOG_ACCESS ();
-
- return NS_ERROR_NOT_AVAILABLE;
-}
-
-/* unsigned long GetNodeID (); */
-NS_IMETHODIMP
-totemScriptablePlugin::GetNodeID(PRUint32 *_retval)
-{
- TOTEM_SCRIPTABLE_LOG_ACCESS ();
-
- return NS_ERROR_NOT_AVAILABLE;
-}
-
-/* void SetNodeID (in unsigned long id); */
-NS_IMETHODIMP
-totemScriptablePlugin::SetNodeID(PRUint32 id)
-{
- TOTEM_SCRIPTABLE_LOG_ACCESS ();
-
- return NS_ERROR_NOT_AVAILABLE;
-}
-
-/* float GetPanAngle (); */
-NS_IMETHODIMP
-totemScriptablePlugin::GetPanAngle(float *_retval)
-{
- TOTEM_SCRIPTABLE_LOG_ACCESS ();
-
- return NS_ERROR_NOT_AVAILABLE;
-}
-
-/* void SetPanAngle (in float angle); */
-NS_IMETHODIMP
-totemScriptablePlugin::SetPanAngle(float angle)
-{
- TOTEM_SCRIPTABLE_LOG_ACCESS ();
-
- return NS_ERROR_NOT_AVAILABLE;
-}
-
-/* void Play (); */
-NS_IMETHODIMP
-totemScriptablePlugin::Play ()
-{
- TOTEM_SCRIPTABLE_LOG_ACCESS ();
-
- NS_ENSURE_STATE (IsValid ());
-
- return mPlugin->DoCommand (TOTEM_COMMAND_PLAY);
-}
-
-/* boolean GetPlayEveryFrame (); */
-NS_IMETHODIMP
-totemScriptablePlugin::GetPlayEveryFrame(PRBool *_retval)
-{
- TOTEM_SCRIPTABLE_LOG_ACCESS ();
-
- *_retval = mPlayEveryFrame;
- return NS_OK;
-}
-
-/* void SetPlayEveryFrame (in boolean enabled); */
-NS_IMETHODIMP
-totemScriptablePlugin::SetPlayEveryFrame(PRBool enabled)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED();
-
- mPlayEveryFrame = enabled != PR_FALSE;
- return NS_OK;
-}
-
-/* ACString GetPluginStatus (); */
-NS_IMETHODIMP
-totemScriptablePlugin::GetPluginStatus(nsACString & _retval)
-{
- static const char *kState[] = {
- "Complete",
- "Error:<%d>",
- "Loading",
- "Playable",
- "Waiting"
- };
-
- if (mPluginState != eState_Error) {
- _retval.Assign (kState[mPluginState]);
- } else {
- /* FIXME */
- _retval.Assign ("Error:<1>");
- }
- return NS_OK;
-}
-
-/* ACString GetPluginVersion (); */
-NS_IMETHODIMP
-totemScriptablePlugin::GetPluginVersion(nsACString & _retval)
-{
- _retval.Assign (QUICKTIME_VERSION);
- return NS_OK;
-}
-
-/* AUTF8String GetQTNEXTUrl (in unsigned long index); */
-NS_IMETHODIMP
-totemScriptablePlugin::GetQTNEXTUrl (PRUint32 index,
- nsACString & _retval)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED();
-
- return NS_OK;
-}
-
-/* void SetQTNEXTUrl (in unsigned long index, in AUTF8String url); */
-NS_IMETHODIMP
-totemScriptablePlugin::SetQTNEXTUrl (PRUint32 index,
- const nsACString & url)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED();
-
- return NS_OK;
-}
-
-/* unsigned long GetQuickTimeConnectionSpeed (); */
-NS_IMETHODIMP
-totemScriptablePlugin::GetQuickTimeConnectionSpeed(PRUint32 *_retval)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED();
-
- *_retval = 300000; /* FIXME */
- return NS_OK;
-}
+TOTEM_IMPLEMENT_NPCLASS (totemNarrowSpacePlayer,
+ NULL, 0,
+ methodNames, G_N_ELEMENTS (methodNames),
+ NULL);
-/* ACString GetQuickTimeLanguage (); */
-NS_IMETHODIMP
-totemScriptablePlugin::GetQuickTimeLanguage(nsACString & _retval)
+totemNarrowSpacePlayer::totemNarrowSpacePlayer (NPP aNPP)
+ : totemNPObject (aNPP),
+ mPluginState (eState_Waiting)
{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED();
-
- _retval.Assign ("English"); /* FIXME */
- return NS_OK;
+ TOTEM_LOG_CTOR ();
}
-/* ACString GetQuickTimeVersion (); */
-NS_IMETHODIMP
-totemScriptablePlugin::GetQuickTimeVersion(nsACString & _retval)
+totemNarrowSpacePlayer::~totemNarrowSpacePlayer ()
{
- _retval.Assign (QUICKTIME_VERSION);
- return NS_OK;
+ TOTEM_LOG_DTOR ();
}
-/* float GetRate (); */
-NS_IMETHODIMP
-totemScriptablePlugin::GetRate(float *_retval)
+bool
+totemNarrowSpacePlayer::InvokeByIndex (int aIndex,
+ const NPVariant *argv,
+ uint32_t argc,
+ NPVariant *_result)
{
- TOTEM_SCRIPTABLE_LOG_ACCESS ();
-
- NS_ENSURE_STATE (IsValid());
+ TOTEM_LOG_INVOKE (aIndex, totemNarrowSpacePlayer);
- if (mPlugin->mState == TOTEM_STATE_PLAYING) {
- *_retval = 1.0;
- } else {
- *_retval = 0.0;
+ switch (Methods (aIndex)) {
+ case ePlay:
+ /* void Play (); */
+ Plugin()->Command (TOTEM_COMMAND_PLAY);
+ return VoidVariant (_result);
+
+ case eStop:
+ /* void Stop (); */
+ Plugin()->Command (TOTEM_COMMAND_STOP);
+ return VoidVariant (_result);
+
+ case eRewind:
+ /* void Rewind (); */
+ Plugin()->Command (TOTEM_COMMAND_PAUSE);
+ return VoidVariant (_result);
+
+ case eGetMaxBytesLoaded:
+ /* unsigned long GetMaxBytesLoaded (); */
+ return Int32Variant (_result, Plugin()->BytesStreamed());
+
+ case eGetMovieSize:
+ /* unsigned long GetMovieSize (); */
+ return Int32Variant (_result, Plugin()->BytesLength());
+
+ case eGetAutoPlay:
+ /* boolean GetAutoPlay (); */
+ return BoolVariant (_result, Plugin()->AutoPlay());
+
+ case eGetControllerVisible:
+ /* boolean GetControllerVisible (); */
+ return BoolVariant (_result, Plugin()->IsControllerVisible());
+
+ case eGetIsLooping:
+ /* boolean GetIsLooping (); */
+ return BoolVariant (_result, Plugin()->IsLooping());
+
+ case eGetKioskMode:
+ /* boolean GetKioskMode (); */
+ return BoolVariant (_result, Plugin()->IsKioskMode());
+
+ case eGetLoopIsPalindrome:
+ /* boolean GetLoopIsPalindrome (); */
+ return BoolVariant (_result, Plugin()->IsLoopPalindrome());
+
+ case eGetMute:
+ /* boolean GetMute (); */
+ return BoolVariant (_result, Plugin()->IsMute());
+
+ case eGetPlayEveryFrame:
+ /* boolean GetPlayEveryFrame (); */
+ return BoolVariant (_result, Plugin()->PlayEveryFrame());
+
+ case eSetAutoPlay: {
+ /* void SetAutoPlay (in boolean autoPlay); */
+ bool enabled;
+ if (!GetBoolFromArguments (argv, argc, 0, enabled))
+ return false;
+
+ Plugin()->SetAutoPlay (enabled);
+ return VoidVariant (_result);
+ }
+
+ case eSetControllerVisible: {
+ /* void SetControllerVisible (in boolean visible); */
+ bool enabled;
+ if (!GetBoolFromArguments (argv, argc, 0, enabled))
+ return false;
+
+ Plugin()->SetControllerVisible (enabled);
+ return VoidVariant (_result);
+ }
+
+ case eSetIsLooping: {
+ /* void SetIsLooping (in boolean loop); */
+ bool enabled;
+ if (!GetBoolFromArguments (argv, argc, 0, enabled))
+ return false;
+
+ Plugin()->SetLooping (enabled);
+ return VoidVariant (_result);
+ }
+
+ case eSetKioskMode: {
+ /* void SetKioskMode (in boolean kioskMode); */
+ bool enabled;
+ if (!GetBoolFromArguments (argv, argc, 0, enabled))
+ return false;
+
+ Plugin()->SetKioskMode (enabled);
+ return VoidVariant (_result);
+ }
+
+ case eSetLoopIsPalindrome: {
+ /* void SetLoopIsPalindrome (in boolean loop); */
+ bool enabled;
+ if (!GetBoolFromArguments (argv, argc, 0, enabled))
+ return false;
+
+ Plugin()->SetLoopIsPalindrome (enabled);
+ return VoidVariant (_result);
+ }
+
+ case eSetMute: {
+ /* void SetMute (in boolean mute); */
+ bool enabled;
+ if (!GetBoolFromArguments (argv, argc, 0, enabled))
+ return false;
+
+ Plugin()->SetMute (enabled);
+ return VoidVariant (_result);
+ }
+
+ case eSetPlayEveryFrame: {
+ /* void SetPlayEveryFrame (in boolean playAll); */
+ bool enabled;
+ if (!GetBoolFromArguments (argv, argc, 0, enabled))
+ return false;
+
+ Plugin()->SetPlayEveryFrame (enabled);
+ return VoidVariant (_result);
+ }
+
+ case eGetVolume:
+ /* unsigned long GetVolume (); */
+ return Int32Variant (_result, Plugin()->Volume() * 255.0);
+
+ case eSetVolume: {
+ /* void SetVolume (in unsigned long volume); */
+ int32_t volume;
+ if (!GetInt32FromArguments (argv, argc, 0, volume))
+ return false;
+
+ Plugin()->SetVolume ((double) CLAMP (volume, 0, 255) / 255.0);
+ return VoidVariant (_result);
+ }
+
+ case eGetBgColor: {
+ /* ACString GetBgColor (); */
+ const char *color = Plugin()->BackgroundColor();
+ if (color)
+ return StringVariant (_result, color);
+
+ return StringVariant (_result, "#000000");
+ }
+
+ case eSetBgColor: {
+ /* void SetBgColor (in ACString color); */
+ const char *color;
+ if (!GetStringFromArguments (argv, argc, 0, color))
+ return false;
+
+ Plugin()->SetBackgroundColor (color);
+ return VoidVariant (_result);
+ }
+
+ case eGetDuration:
+ /* unsigned long GetDuration (); */
+ return Int32Variant (_result, Plugin()->Duration());
+
+ case eGetStartTime:
+ /* unsigned long GetStartTime (); */
+ TOTEM_WARN_1_INVOKE_UNIMPLEMENTED (aIndex, totemNarrowSpacePlayer);
+ return Int32Variant (_result, 0); /* FIXME */
+
+ case eGetTime:
+ /* unsigned long GetTime (); */
+ return Int32Variant (_result, Plugin()->Time());
+
+ case eGetEndTime:
+ /* unsigned long GetEndTime (); */
+ TOTEM_WARN_1_INVOKE_UNIMPLEMENTED (aIndex, totemNarrowSpacePlayer);
+ return Int32Variant (_result, 0);
+
+ case eGetTimeScale:
+ /* unsigned long GetTimeScale (); */
+ return Int32Variant (_result, 1000); /* FIXME? */
+
+ case eGetRate:
+ /* float GetRate (); */
+ return DoubleVariant (_result, Plugin()->Rate());
+
+ case eSetRate: {
+ /* void SetRate (in float rate); */
+ double rate;
+ if (!GetDoubleFromArguments (argv, argc, 0, rate))
+ return false;
+
+ Plugin()->SetRate (rate);
+ return VoidVariant (_result);
+ }
+
+ case eGetLanguage:
+ /* ACString GetLanguage (); */
+ TOTEM_WARN_1_INVOKE_UNIMPLEMENTED (aIndex, totemNarrowSpacePlayer);
+ return StringVariant (_result, "English");
+
+ case eGetComponentVersion:
+ /* ACString GetComponentVersion (in ACString type, in ACString subType, in ACString manufacturer); */
+ TOTEM_WARN_1_INVOKE_UNIMPLEMENTED (aIndex, totemNarrowSpacePlayer);
+ return StringVariant (_result, "1.0");
+
+ case eGetIsQuickTimeRegistered:
+ /* boolean GetIsQuickTimeRegistered (); */
+ TOTEM_WARN_1_INVOKE_UNIMPLEMENTED (aIndex, totemNarrowSpacePlayer);
+ case eGetIsVRMovie:
+ /* boolean GetIsVRMovie (); */
+ return BoolVariant (_result, false);
+
+ case eGetMIMEType:
+ /* ACString GetMIMEType (); */
+ return StringVariant (_result, "video/quicktime");
+
+ case eGetMatrix:
+ /* ACString GetMatrix (); */
+ return StringVariant (_result, Plugin()->Matrix());
+
+ case eSetMatrix: {
+ /* void SetMatrix (in ACString matrix); */
+ const char *matrix;
+ if (!GetStringFromArguments (argv, argc, 0, matrix))
+ return false;
+
+ Plugin()->SetMatrix (matrix);
+ return VoidVariant (_result);
+ }
+
+ case eGetMovieName:
+ /* AUTF8String GetMovieName (); */
+ return StringVariant (_result, Plugin()->MovieName());
+
+ case eSetMovieName: {
+ /* void SetMovieName (in AUTF8String movieName); */
+ const char *name;
+ if (!GetStringFromArguments (argv, argc, 0, name))
+ return false;
+
+ Plugin()->SetMovieName (name);
+ return VoidVariant (_result);
+ }
+
+ case eGetRectangle:
+ /* ACString GetRectangle (); */
+ return StringVariant (_result, Plugin()->Rectangle());
+
+ case eSetRectangle: {
+ /* void SetRectangle (in ACString rect); */
+ const char *rectangle;
+ if (!GetStringFromArguments (argv, argc, 0, rectangle))
+ return false;
+
+ Plugin()->SetRectangle (rectangle);
+ return VoidVariant (_result);
+ }
+
+ case eGetPluginStatus: {
+ return true;
+#if 0
+ /* ACString GetPluginStatus (); */
+ static const char *kState[] = {
+ "Complete",
+ NULL, /* "Error:<%d>", */
+ "Loading",
+ "Playable",
+ "Waiting"
+ };
+
+ if (Plugin()->State() == eState_Error)
+ return StringVariant (_result, "Error:<1>");
+
+ return StringVariant (_result, kState[Plugin()->State()]);
+#endif
+ }
+
+ case eGetTrackCount:
+ /* unsigned long GetTrackCount (); */
+ TOTEM_WARN_1_INVOKE_UNIMPLEMENTED (aIndex, totemNarrowSpacePlayer);
+ return Int32Variant (_result, 1);
+
+ case eGetTrackEnabled:
+ /* boolean GetTrackEnabled (in unsigned long index); */
+ TOTEM_WARN_1_INVOKE_UNIMPLEMENTED (aIndex, totemNarrowSpacePlayer);
+ return BoolVariant (_result, true);
+
+ case eGetPluginVersion:
+ /* ACString GetPluginVersion (); */
+ case eGetQuickTimeVersion:
+ /* ACString GetQuickTimeVersion (); */
+ return StringVariant (_result, TOTEM_NARROWSPACE_VERSION);
+
+ case eGetQuickTimeConnectionSpeed:
+ /* unsigned long GetQuickTimeConnectionSpeed (); */
+ return Int32Variant (_result, Plugin()->Bandwidth());
+
+ case eGetResetPropertiesOnReload:
+ /* boolean GetResetPropertiesOnReload (); */
+ return BoolVariant (_result, Plugin()->ResetPropertiesOnReload());
+
+ case eSetResetPropertiesOnReload: {
+ /* void SetResetPropertiesOnReload (in boolean reset); */
+ bool enabled;
+ if (!GetBoolFromArguments (argv, argc, 0, enabled))
+ return false;
+
+ Plugin()->SetResetPropertiesOnReload (enabled);
+ return VoidVariant (_result);
+ }
+
+ case eGetMaxTimeLoaded:
+ /* unsigned long GetMaxTimeLoaded (); */
+ case eGetMovieID:
+ /* unsigned long GetMovieID (); */
+ case eGetNodeCount:
+ /* unsigned long GetNodeCount (); */
+ case eGetNodeID:
+ /* unsigned long GetNodeID (); */
+ TOTEM_WARN_INVOKE_UNIMPLEMENTED (aIndex, totemNarrowSpacePlayer);
+ return Int32Variant (_result, 0);
+
+ case eGetFieldOfView:
+ /* float GetFieldOfView (); */
+ case eGetPanAngle:
+ /* float GetPanAngle (); */
+ case eGetTiltAngle:
+ /* float GetTiltAngle (); */
+ TOTEM_WARN_INVOKE_UNIMPLEMENTED (aIndex, totemNarrowSpacePlayer);
+ return DoubleVariant (_result, 0.0);
+
+ case eGetTrackName:
+ /* AUTF8String GetTrackName (in unsigned long index); */
+ case eGetTrackType:
+ /* ACString GetTrackType (in unsigned long index); */
+ case eGetHotpotTarget:
+ /* AUTF8String GetHotspotTarget (in unsigned long hotspotID); */
+ case eGetHotpotUrl:
+ /* AUTF8String GetHotspotUrl (in unsigned long hotspotID); */
+ case eGetHREF:
+ /* AUTF8String GetHREF (); */
+ case eGetQTNextUrl:
+ /* AUTF8String GetQTNEXTUrl (in unsigned long index); */
+ case eGetQuickTimeLanguage:
+ /* ACString GetQuickTimeLanguage (); */
+ case eGetSpriteTrackVariable:
+ /* ACString GetSpriteTrackVariable (in unsigned long trackIndex, in unsigned long variableIndex); */
+ case eGetTarget:
+ /* AUTF8String GetTarget (); */
+ case eGetURL:
+ /* AUTF8String GetURL (); */
+ case eGetUserData:
+ /* AUTF8String GetUserData (in ACString type); */
+ TOTEM_WARN_INVOKE_UNIMPLEMENTED (aIndex, totemNarrowSpacePlayer);
+ return StringVariant (_result, "");
+
+ case eGoPreviousNode:
+ /* void GoPreviousNode (); */
+ case eSetEndTime:
+ /* void SetEndTime (in unsigned long time); */
+ case eSetFieldOfView:
+ /* void SetFieldOfView (in float fov); */
+ case eSetHotpotTarget:
+ /* void SetHotspotTarget (in unsigned long hotspotID, in AUTF8String target); */
+ case eSetHotpotUrl:
+ /* void SetHotspotUrl (in unsigned long hotspotID, in AUTF8String url); */
+ case eSetHREF:
+ /* void SetHREF (in AUTF8String url); */
+ case eSetLanguage:
+ /* void SetLanguage (in ACString language); */
+ case eSetMovieID:
+ /* void SetMovieID (in unsigned long movieID); */
+ case eSetNodeID:
+ /* void SetNodeID (in unsigned long id); */
+ case eSetPanAngle:
+ /* void SetPanAngle (in float angle); */
+ case eSetQTNextUrl:
+ /* void SetQTNEXTUrl (in unsigned long index, in AUTF8String url); */
+ case eSetSpriteTrackVariable:
+ /* void SetSpriteTrackVariable (in unsigned long trackIndex, in unsigned long variableIndex, in ACString value); */
+ case eSetStartTime:
+ /* void SetStartTime (in unsigned long time); */
+ case eSetTarget:
+ /* void SetTarget (in AUTF8String target); */
+ case eSetTiltAngle:
+ /* void SetTiltAngle (in float angle); */
+ case eSetTime:
+ /* void SetTime (in unsigned long time); */
+ case eSetTrackEnabled:
+ /* void SetTrackEnabled (in unsigned long index, in boolean enabled); */
+ case eSetURL:
+ /* void SetURL (in AUTF8String url); */
+ case eStep:
+ /* void Step (in long count); */
+ case eShowDefaultView:
+ /* void ShowDefaultView (); */
+ TOTEM_WARN_INVOKE_UNIMPLEMENTED (aIndex, totemNarrowSpacePlayer);
+ return VoidVariant (_result);
}
- return NS_OK;
-}
-
-/* void SetRate (in float rate); */
-NS_IMETHODIMP
-totemScriptablePlugin::SetRate(float rate)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED();
-
- /* mRate = rate; FIXME */
- return NS_OK;
-}
-
-/* void SetRectangle (in ACString rectangle); */
-NS_IMETHODIMP
-totemScriptablePlugin::SetRectangle(const nsACString & rectangle)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED();
-
- mRectangle = rectangle;
- return NS_OK;
-}
-
-/* ACString GetRectangle (); */
-NS_IMETHODIMP
-totemScriptablePlugin::GetRectangle(nsACString & _retval)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED();
-
- _retval.Assign (mRectangle);
- return NS_OK;
-}
-
-/* boolean GetResetPropertiesOnReload (); */
-NS_IMETHODIMP
-totemScriptablePlugin::GetResetPropertiesOnReload(PRBool *_retval)
-{
- TOTEM_SCRIPTABLE_LOG_ACCESS ();
-
- *_retval = mResetPropertiesOnReload;
- return NS_OK;
-}
-
-/* void SetResetPropertiesOnReload (in boolean enabled); */
-NS_IMETHODIMP
-totemScriptablePlugin::SetResetPropertiesOnReload(PRBool enabled)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED();
-
- mResetPropertiesOnReload = enabled != PR_FALSE;
- return NS_OK;
-}
-
-/* void Rewind (); */
-NS_IMETHODIMP
-totemScriptablePlugin::Rewind ()
-{
- TOTEM_SCRIPTABLE_LOG_ACCESS ();
-
- NS_ENSURE_STATE (IsValid ());
- return mPlugin->DoCommand (TOTEM_COMMAND_PAUSE);
+ return false;
}
-
-/* void ShowDefaultView (); */
-NS_IMETHODIMP
-totemScriptablePlugin::ShowDefaultView()
-{
- TOTEM_SCRIPTABLE_LOG_ACCESS ();
-
- return NS_OK;
-}
-
-/* ACString GetSpriteTrackVariable (in unsigned long track, in unsigned long index); */
-NS_IMETHODIMP
-totemScriptablePlugin::GetSpriteTrackVariable (PRUint32 track,
- PRUint32 index,
- nsACString & _retval)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED();
-
- return NS_OK;
-}
-
-/* void SetSpriteTrackVariable (in unsigned long track, in unsigned long index, in ACString value); */
-NS_IMETHODIMP
-totemScriptablePlugin::SetSpriteTrackVariable (PRUint32 track,
- PRUint32 index,
- const nsACString & value)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED();
-
- return NS_OK;
-}
-
-/* void SetStartTime (in unsigned long time); */
-NS_IMETHODIMP
-totemScriptablePlugin::SetStartTime(PRUint32 time)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED();
-
- return NS_OK;
-}
-
-/* unsigned long GetStartTime (); */
-NS_IMETHODIMP
-totemScriptablePlugin::GetStartTime (PRUint32 *_retval)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED();
-
- *_retval = 0; /* FIXME */
- return NS_OK;
-}
-
-/* void Step (in long steps); */
-NS_IMETHODIMP
-totemScriptablePlugin::Step(PRInt32 steps)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED();
-
- return NS_OK;
-}
-
-/* void Stop (); */
-NS_IMETHODIMP
-totemScriptablePlugin::Stop ()
-{
- TOTEM_SCRIPTABLE_LOG_ACCESS ();
-
- NS_ENSURE_STATE (IsValid ());
-
- return mPlugin->DoCommand (TOTEM_COMMAND_PAUSE);
-}
-
-/* AUTF8String GetTarget (); */
-NS_IMETHODIMP
-totemScriptablePlugin::GetTarget(nsACString & _retval)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED();
-
- return NS_OK;
-}
-
-/* void SetTarget (in AUTF8String target); */
-NS_IMETHODIMP
-totemScriptablePlugin::SetTarget(const nsACString & target)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED();
-
- return NS_OK;
-}
-
-/* float GetTiltAngle (); */
-NS_IMETHODIMP
-totemScriptablePlugin::GetTiltAngle(float *_retval)
-{
- TOTEM_SCRIPTABLE_LOG_ACCESS ();
-
- return NS_ERROR_NOT_AVAILABLE;
-}
-
-/* void SetTiltAngle (in float angle); */
-NS_IMETHODIMP
-totemScriptablePlugin::SetTiltAngle(float angle)
-{
- TOTEM_SCRIPTABLE_LOG_ACCESS ();
-
- return NS_ERROR_NOT_AVAILABLE;
-}
-
-/* unsigned long GetTime (); */
-NS_IMETHODIMP
-totemScriptablePlugin::GetTime(PRUint32 *_retval)
-{
- TOTEM_SCRIPTABLE_LOG_ACCESS ();
-
- *_retval = mPlugin->mTime;
- return NS_OK;
-}
-
-/* void SetTime (in unsigned long time); */
-NS_IMETHODIMP
-totemScriptablePlugin::SetTime(PRUint32 time)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED();
-
- return NS_OK;
-}
-
-/* unsigned long GetTimeScale (); */
-NS_IMETHODIMP
-totemScriptablePlugin::GetTimeScale(PRUint32 *_retval)
-{
- TOTEM_SCRIPTABLE_LOG_ACCESS ();
-
- *_retval = 1000;
- return NS_OK;
-}
-
-/* unsigned long GetTrackCount (); */
-NS_IMETHODIMP
-totemScriptablePlugin::GetTrackCount(PRUint32 *_retval)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED();
-
- *_retval = 1;
- return NS_OK;
-}
-
-/* boolean GetTrackEnabled (in unsigned long index); */
-NS_IMETHODIMP
-totemScriptablePlugin::GetTrackEnabled (PRUint32 index,
- PRBool *_retval)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED();
-
- *_retval = PR_TRUE;
- return NS_OK;
-}
-
-/* void SetTrackEnabled (in unsigned long index, in boolean enabled); */
-NS_IMETHODIMP
-totemScriptablePlugin::SetTrackEnabled (PRUint32 index,
- PRBool enabled)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED();
-
- return NS_OK;
-}
-
-/* AUTF8String GetTrackName (in unsigned long index); */
-NS_IMETHODIMP
-totemScriptablePlugin::GetTrackName (PRUint32 index,
- nsACString & _retval)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED();
-
- return NS_OK;
-}
-
-/* AUTF8String GetTrackType (in unsigned long index); */
-NS_IMETHODIMP
-totemScriptablePlugin::GetTrackType (PRUint32 index,
- nsACString & _retval)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED();
-
- return NS_OK;
-}
-
-/* AUTF8String GetURL (); */
-NS_IMETHODIMP
-totemScriptablePlugin::GetURL (nsACString & _retval)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED();
-
- return NS_OK;
-}
-
-/* void SetURL (in AUTF8String url); */
-NS_IMETHODIMP
-totemScriptablePlugin::SetURL (const nsACString & url)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED();
-
- return NS_OK;
-}
-
-/* AUTF8String GetUserData (in AUTF8String identifier); */
-NS_IMETHODIMP
-totemScriptablePlugin::GetUserData (const nsACString & identifier,
- nsACString & _retval)
-{
- TOTEM_SCRIPTABLE_WARN_UNIMPLEMENTED();
-
- return NS_OK;
-}
-
-/* unsigned long GetVolume (); */
-NS_IMETHODIMP
-totemScriptablePlugin::GetVolume(PRUint32 *_retval)
-{
- TOTEM_SCRIPTABLE_LOG_ACCESS ();
-
- NS_ENSURE_STATE (IsValid ());
-
- *_retval = mPlugin->mVolume * 100.0;
- return NS_OK;
-}
-
-/* void SetVolume (in unsigned long volume); */
-NS_IMETHODIMP
-totemScriptablePlugin::SetVolume(PRUint32 aVolume)
-{
- TOTEM_SCRIPTABLE_LOG_ACCESS ();
-
- NS_ENSURE_STATE (IsValid ());
-
- nsresult rv = mPlugin->SetVolume ((double) aVolume / 100);
-
- /* Volume passed in is 0 through to 100 */
- mPlugin->mVolume = (double) aVolume / 100;
-
- return rv;
-}
-
diff --git a/browser-plugin/totemNarrowSpacePlugin.h b/browser-plugin/totemNarrowSpacePlugin.h
index 2d800328..4898c0e0 100644
--- a/browser-plugin/totemNarrowSpacePlugin.h
+++ b/browser-plugin/totemNarrowSpacePlugin.h
@@ -1,7 +1,8 @@
/* Totem NarrowSpace plugin scriptable
*
- * Copyright (C) 2004 Bastien Nocera <hadess@hadess.net>
- * Copyright (C) 2002 David A. Schleef <ds@schleef.org>
+ * Copyright © 2004 Bastien Nocera <hadess@hadess.net>
+ * Copyright © 2002 David A. Schleef <ds@schleef.org>
+ * Copyright © 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
@@ -17,36 +18,19 @@
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
- *
- * $Id$
*/
#ifndef __NARROWSPACE_PLUGIN_H__
#define __NARROWSPACE_PLUGIN_H__
-#include <nsIClassInfo.h>
-
-#include "totemINarrowSpacePlayer.h"
-#include "totemPlugin.h"
+#include "totemNPClass.h"
+#include "totemNPObject.h"
-class totemScriptablePlugin : public totemINarrowSpacePlayer,
- public nsIClassInfo
+class totemNarrowSpacePlayer : public totemNPObject
{
public:
- NS_DECL_ISUPPORTS
- NS_DECL_TOTEMINARROWSPACEPLAYER
- NS_DECL_NSICLASSINFO
-
- void* operator new (size_t aSize) CPP_THROW_NEW;
-
- totemScriptablePlugin (totemPlugin *aPlugin);
-
- PRBool IsValid () { return mPlugin != nsnull; }
- void SetPlugin (totemPlugin *aPlugin) { mPlugin = aPlugin; }
-
- static char *PluginDescription ();
- static char *PluginLongDescription();
- static void PluginMimeTypes (const totemPluginMimeEntry **, PRUint32 *);
+ totemNarrowSpacePlayer (NPP);
+ virtual ~totemNarrowSpacePlayer ();
enum PluginState {
eState_Complete,
@@ -56,26 +40,103 @@ class totemScriptablePlugin : public totemINarrowSpacePlayer,
eState_Waiting
};
- PRUint32 mPluginState : 3; /* enough bits for PluginState enum values */
+ PluginState mPluginState;
private:
- ~totemScriptablePlugin ();
-
- totemPlugin *mPlugin;
- nsCString mBackgroundColour;
- nsCString mMatrix;
- nsCString mRectangle;
- nsCString mMovieName;
+ enum Methods {
+ eGetAutoPlay,
+ eGetBgColor,
+ eGetComponentVersion,
+ eGetControllerVisible,
+ eGetDuration,
+ eGetEndTime,
+ eGetFieldOfView,
+ eGetHotpotTarget,
+ eGetHotpotUrl,
+ eGetHREF,
+ eGetIsLooping,
+ eGetIsQuickTimeRegistered,
+ eGetIsVRMovie,
+ eGetKioskMode,
+ eGetLanguage,
+ eGetLoopIsPalindrome,
+ eGetMatrix,
+ eGetMaxBytesLoaded,
+ eGetMaxTimeLoaded,
+ eGetMIMEType,
+ eGetMovieID,
+ eGetMovieName,
+ eGetMovieSize,
+ eGetMute,
+ eGetNodeCount,
+ eGetNodeID,
+ eGetPanAngle,
+ eGetPlayEveryFrame,
+ eGetPluginStatus,
+ eGetPluginVersion,
+ eGetQTNextUrl,
+ eGetQuickTimeConnectionSpeed,
+ eGetQuickTimeLanguage,
+ eGetQuickTimeVersion,
+ eGetRate,
+ eGetRectangle,
+ eGetResetPropertiesOnReload,
+ eGetSpriteTrackVariable,
+ eGetStartTime,
+ eGetTarget,
+ eGetTiltAngle,
+ eGetTime,
+ eGetTimeScale,
+ eGetTrackCount,
+ eGetTrackEnabled,
+ eGetTrackName,
+ eGetTrackType,
+ eGetURL,
+ eGetUserData,
+ eGetVolume,
+ eGoPreviousNode,
+ ePlay,
+ eRewind,
+ eSetAutoPlay,
+ eSetBgColor,
+ eSetControllerVisible,
+ eSetEndTime,
+ eSetFieldOfView,
+ eSetHotpotTarget,
+ eSetHotpotUrl,
+ eSetHREF,
+ eSetIsLooping,
+ eSetKioskMode,
+ eSetLanguage,
+ eSetLoopIsPalindrome,
+ eSetMatrix,
+ eSetMovieID,
+ eSetMovieName,
+ eSetMute,
+ eSetNodeID,
+ eSetPanAngle,
+ eSetPlayEveryFrame,
+ eSetQTNextUrl,
+ eSetRate,
+ eSetRectangle,
+ eSetResetPropertiesOnReload,
+ eSetSpriteTrackVariable,
+ eSetStartTime,
+ eSetTarget,
+ eSetTiltAngle,
+ eSetTime,
+ eSetTrackEnabled,
+ eSetURL,
+ eSetVolume,
+ eShowDefaultView,
+ eStep,
+ eStop
+ };
- PRUint32 mAutoPlay : 1;
- PRUint32 mControllerVisible : 1;
- PRUint32 mIsLooping : 1;
- PRUint32 mKioskMode : 1;
- PRUint32 mLoopIsPalindrome : 1;
- PRUint32 mMute : 1;
- PRUint32 mPlayEveryFrame : 1;
- PRUint32 mResetPropertiesOnReload : 1;
+ virtual bool InvokeByIndex (int aIndex, const NPVariant *argv, uint32_t argc, NPVariant *_result);
};
+TOTEM_DEFINE_NPCLASS (totemNarrowSpacePlayer);
+
#endif /* __NARROWSPACE_PLUGIN_H__ */
diff --git a/browser-plugin/totemPlugin.cpp b/browser-plugin/totemPlugin.cpp
index 421d6437..f1e0a444 100644
--- a/browser-plugin/totemPlugin.cpp
+++ b/browser-plugin/totemPlugin.cpp
@@ -2,7 +2,7 @@
*
* Copyright © 2004-2006 Bastien Nocera <hadess@hadess.net>
* Copyright © 2002 David A. Schleef <ds@schleef.org>
- * Copyright © 2006, 2007 Christian Persch
+ * Copyright © 2006, 2007, 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
@@ -20,49 +20,29 @@
* Boston, MA 02110-1301 USA.
*/
-#include <mozilla-config.h>
-#include "config.h"
+#include <config.h>
#include <errno.h>
-#include <stdio.h>
+#include <fcntl.h>
#include <stdint.h>
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
#include <unistd.h>
-#include <fcntl.h>
-#include <sys/wait.h>
#include <sys/poll.h>
-#include <string.h>
-#include <signal.h>
+#include <sys/wait.h>
#include <glib.h>
#include "totem-pl-parser-mini.h"
#include "totem-plugin-viewer-options.h"
-#include "totempluginviewer-marshal.h"
+#include "marshal.h"
#include "npapi.h"
+#include "npruntime.h"
#include "npupp.h"
-#include <nsIDOMWindow.h>
-#include <nsIURI.h>
-#include <nsEmbedString.h>
-#include <nsIInterfaceRequestor.h>
-#include <nsIInterfaceRequestorUtils.h>
-#include <nsIWebNavigation.h>
-
-#include <nsIServiceManager.h>
-#include <nsIDOMDocument.h>
-#include <nsIDOMElement.h>
-#include <nsIDOM3Node.h>
-#include <nsIIOService.h>
-#include <nsITimer.h>
-#include <nsIComponentManager.h>
-#include <nsIProtocolHandler.h>
-#include <nsIExternalProtocolHandler.h>
-
-/* for NS_IOSERVICE_CONTRACTID */
-#include <nsNetCID.h>
-
-#define GNOME_ENABLE_DEBUG 1
/* define GNOME_ENABLE_DEBUG for more debug spew */
/* FIXME define D() so that it prints the |this| pointer, so we can differentiate between different concurrent plugins! */
#include "debug.h"
@@ -74,15 +54,110 @@
#define DD(args...)
#endif
-#include "totemPluginGlue.h"
#include "totemPlugin.h"
+#if defined(TOTEM_BASIC_PLUGIN)
+#include "totemBasicPlugin.h"
+#elif defined(TOTEM_GMP_PLUGIN)
+#include "totemGMPControls.h"
+#include "totemGMPNetwork.h"
+#include "totemGMPPlayer.h"
+#include "totemGMPSettings.h"
+#elif defined(TOTEM_COMPLEX_PLUGIN)
+#include "totemComplexPlayer.h"
+#elif defined(TOTEM_NARROWSPACE_PLUGIN)
+#include "totemNarrowSpacePlugin.h"
+#elif defined(TOTEM_MULLY_PLUGIN)
+#include "totemMullYPlugin.h"
+#elif defined(TOTEM_CONE_PLUGIN)
+#include "totemCone.h"
+#include "totemConeAudio.h"
+#include "totemConeInput.h"
+#include "totemConePlaylist.h"
+#include "totemConePlaylistItems.h"
+#include "totemConeVideo.h"
+#else
+#error Unknown plugin type
+#endif
+
#define DASHES "--"
/* How much data bytes to request */
#define PLUGIN_STREAM_CHUNK_SIZE (8 * 1024)
-NPNetscapeFuncs totemPlugin::sNPN;
+static const totemPluginMimeEntry kMimeTypes[] = {
+#if defined(TOTEM_BASIC_PLUGIN)
+ { "application/x-ogg","ogg",NULL },
+ { "application/ogg", "ogg", NULL },
+ { "audio/ogg", "oga", NULL },
+ { "audio/x-ogg", "ogg", NULL },
+ { "video/ogg", "ogv", NULL },
+ { "video/x-ogg", "ogg", NULL },
+ { "application/annodex", "anx", NULL },
+ { "audio/annodex", "axa", NULL },
+ { "video/annodex", "axv", NULL },
+ { "video/mpeg", "mpg, mpeg, mpe", NULL },
+ { "audio/wav", "wav", NULL },
+ { "audio/x-wav", "wav", NULL },
+ { "audio/mpeg", "mp3", NULL },
+ { "application/x-nsv-vp3-mp3", "nsv", "video/x-nsv" },
+ { "video/flv", "flv", "application/x-flash-video" },
+ { "application/x-totem-plugin", "", "application/octet-stream" },
+#elif defined(TOTEM_GMP_PLUGIN)
+ { "application/x-mplayer2", "avi, wma, wmv", "video/x-msvideo" },
+ { "video/x-ms-asf-plugin", "asf, wmv", "video/x-ms-asf" },
+ { "video/x-msvideo", "asf, wmv", NULL },
+ { "video/x-ms-asf", "asf", NULL },
+ { "video/x-ms-wmv", "wmv", "video/x-ms-wmv" },
+ { "video/x-wmv", "wmv", "video/x-ms-wmv" },
+ { "video/x-ms-wvx", "wmv", "video/x-ms-wmv" },
+ { "video/x-ms-wm", "wmv", "video/x-ms-wmv" },
+ { "video/x-ms-wmp", "wmv", "video/x-ms-wmv" },
+ { "application/x-ms-wms", "wms", "video/x-ms-wmv" },
+ { "application/asx", "asx", "audio/x-ms-asx" },
+ { "audio/x-ms-wma", "wma", NULL }
+#elif defined(TOTEM_COMPLEX_PLUGIN)
+ { "audio/x-pn-realaudio-plugin", "rpm", "audio/vnd.rn-realaudio" },
+#elif defined(TOTEM_NARROWSPACE_PLUGIN)
+ { "video/quicktime", "mov", NULL },
+ { "video/mp4", "mp4", NULL },
+ { "image/x-macpaint", "pntg", NULL },
+ { "image/x-quicktime", "pict, pict1, pict2", "image/x-pict" },
+ { "video/x-m4v", "m4v", NULL },
+#elif defined(TOTEM_MULLY_PLUGIN)
+ { "video/divx", "divx", "video/x-msvideo" },
+#elif defined(TOTEM_CONE_PLUGIN)
+ { "application/x-vlc-plugin", "", "application/octet-stream" },
+ { "application/vlc", "", "application/octet-stream" },
+ { "video/x-google-vlc-plugin", "", "application/octet-stream" },
+#else
+#error Unknown plugin type
+#endif
+};
+
+static const char kPluginDescription[] =
+#if defined(TOTEM_BASIC_PLUGIN)
+ "Totem Web Browser Plugin " VERSION;
+#elif defined(TOTEM_GMP_PLUGIN)
+ "Windows Media Player Plug-in 10 (compatible; Totem)";
+#elif defined(TOTEM_COMPLEX_PLUGIN)
+ "Helix DNA Plugin: RealPlayer G2 Plug-In Compatible (compatible; Totem)";
+#elif defined(TOTEM_NARROWSPACE_PLUGIN)
+ "QuickTime Plug-in " TOTEM_NARROWSPACE_VERSION;
+#elif defined(TOTEM_MULLY_PLUGIN)
+ "DivX\xC2\xAE Web Player";
+#elif defined(TOTEM_CONE_PLUGIN)
+ "VLC Multimedia Plugin (compatible Totem " VERSION ")";
+#else
+#error Unknown plugin type
+#endif
+
+static const char kPluginLongDescription[] =
+#if defined(TOTEM_MULLY_PLUGIN)
+ "DivX Web Player version " TOTEM_MULLY_VERSION;
+#else
+ "The <a href=\"http://www.gnome.org/projects/totem/\">Totem</a> " PACKAGE_VERSION " plugin handles video and audio streams.";
+#endif
#if defined(TOTEM_COMPLEX_PLUGIN) && defined(HAVE_NSTARRAY_H)
nsTArray<totemPlugin*> *totemPlugin::sPlugins;
@@ -113,7 +188,7 @@ static const char *kControl[] = {
#endif /* TOTEM_COMPLEX_PLUGIN */
void*
-totemPlugin::operator new (size_t aSize) CPP_THROW_NEW
+totemPlugin::operator new (size_t aSize) throw ()
{
void *object = ::operator new (aSize);
if (object) {
@@ -123,24 +198,31 @@ totemPlugin::operator new (size_t aSize) CPP_THROW_NEW
return object;
}
-totemPlugin::totemPlugin (NPP aInstance)
-: mInstance (aInstance),
+totemPlugin::totemPlugin (NPP aNPP)
+: mNPP (aNPP),
+ mMimeType (NULL),
+ mBaseURI (NULL),
+ mSrcURI (NULL),
+ mRequestBaseURI (NULL),
+ mRequestURI (NULL),
+ mViewerBusAddress (NULL),
+ mViewerServiceName (NULL),
+ mViewerFD (-1),
mWidth (-1),
mHeight (-1),
- mViewerFD (-1),
- mState (TOTEM_STATE_STOPPED),
#ifdef TOTEM_COMPLEX_PLUGIN
- mAutostart (PR_FALSE),
+ mAutoPlay (false),
#else
- mAutostart (PR_TRUE),
+ mAutoPlay (true),
#endif /* TOTEM_NARROWSPACE_PLUGIN */
- mNeedViewer (PR_TRUE)
+ mNeedViewer (true),
+ mState (TOTEM_STATE_STOPPED)
{
- D ("totemPlugin ctor [%p]", (void*) this);
+ TOTEM_LOG_CTOR ();
#if defined(TOTEM_COMPLEX_PLUGIN) && defined(HAVE_NSTARRAY_H)
/* Add |this| to the global plugins list */
- NS_ASSERTION (sPlugins->IndexOf (this) == NoIndex, "WTF?");
+ assert (sPlugins->IndexOf (this) == NoIndex); //, "WTF?");
if (!sPlugins->AppendElement (this)) {
D ("Couldn't maintain plugin list!");
}
@@ -157,11 +239,7 @@ totemPlugin::~totemPlugin ()
TransferConsole ();
#endif /* TOTEM_COMPLEX_PLUGIN */
- if (mScriptable) {
- mScriptable->SetPlugin (nsnull);
- NS_RELEASE (mScriptable);
- mScriptable = nsnull;
- }
+ /* FIXMEchpe invalidate the scriptable object, or is that done automatically? */
if (mBusProxy) {
dbus_g_proxy_disconnect_signal (mBusProxy,
@@ -174,133 +252,207 @@ totemPlugin::~totemPlugin ()
ViewerCleanup ();
- if (mTimer) {
- mTimer->Cancel ();
- NS_RELEASE (mTimer);
- mTimer = nsnull;
+ if (mTimerID != 0) {
+ g_source_remove (mTimerID);
+ mTimerID = 0;
}
- NS_IF_RELEASE (mServiceManager);
- NS_IF_RELEASE (mIOService);
- NS_IF_RELEASE (mPluginDOMElement);
- NS_IF_RELEASE (mBaseURI);
- NS_IF_RELEASE (mRequestBaseURI);
- NS_IF_RELEASE (mRequestURI);
- NS_IF_RELEASE (mSrcURI);
-
#ifdef TOTEM_GMP_PLUGIN
- NS_IF_RELEASE (mURLURI);
+ g_free (mURLURI);
#endif
#ifdef TOTEM_NARROWSPACE_PLUGIN
- NS_IF_RELEASE (mHrefURI);
- NS_IF_RELEASE (mQtsrcURI);
+ g_free (mHref);
+ g_free (mTarget);
+ g_free (mHrefURI);
+ g_free (mQtsrcURI);
#endif
-#if defined(TOTEM_COMPLEX_PLUGIN) && defined(HAVE_NSTARRAY_H)
- NS_IF_RELEASE (mPluginOwnerDocument);
-#endif /* TOTEM_COMPLEX_PLUGIN */
+ g_free (mMimeType);
- D ("totemPlugin dtor [%p]", (void*) this);
+ g_free (mSrcURI);
+ g_free (mBaseURI);
+ g_free (mRequestURI);
+ g_free (mRequestBaseURI);
+
+ g_free (mViewerBusAddress);
+ g_free (mViewerServiceName);
+
+ g_free (mBackgroundColor);
+ g_free (mMatrix);
+ g_free (mRectangle);
+ g_free (mMovieName);
+
+ TOTEM_LOG_DTOR ();
}
/* public functions */
-nsresult
-totemPlugin::DoCommand (const char *aCommand)
+void
+totemPlugin::Command (const char *aCommand)
{
- D ("DoCommand '%s'", aCommand);
+ D ("Command '%s'", aCommand);
/* FIXME: queue the action instead */
if (!mViewerReady)
- return NS_OK;
+ return;
- NS_ASSERTION (mViewerProxy, "No viewer proxy");
+ assert (mViewerProxy);
dbus_g_proxy_call_no_reply (mViewerProxy,
"DoCommand",
G_TYPE_STRING, aCommand,
G_TYPE_INVALID,
G_TYPE_INVALID);
-
- return NS_OK;
}
-nsresult
-totemPlugin::SetVolume (gdouble aVolume)
+void
+totemPlugin::SetVolume (double aVolume)
{
D ("SetVolume '%f'", aVolume);
+ mVolume = CLAMP (aVolume, 0.0, 1.0);
+
/* FIXME: queue the action instead */
if (!mViewerReady)
- return NS_OK;
+ return;
- NS_ASSERTION (mViewerProxy, "No viewer proxy");
+ assert (mViewerProxy);
dbus_g_proxy_call_no_reply (mViewerProxy,
"SetVolume",
- G_TYPE_DOUBLE, aVolume,
+ G_TYPE_DOUBLE, gdouble (Volume()),
G_TYPE_INVALID,
G_TYPE_INVALID);
-
- return NS_OK;
}
-nsresult
-totemPlugin::SetFullscreen (gboolean enabled)
+void
+totemPlugin::SetFullscreen (bool enabled)
{
D ("SetFullscreen '%d'", enabled);
+ mIsFullscreen = enabled;
+
/* FIXME: queue the action instead */
if (!mViewerReady)
- return NS_OK;
+ return;
- NS_ASSERTION (mViewerProxy, "No viewer proxy");
+ assert (mViewerProxy);
dbus_g_proxy_call_no_reply (mViewerProxy,
"SetFullscreen",
- G_TYPE_BOOLEAN, enabled,
+ G_TYPE_BOOLEAN, gboolean (IsFullscreen()),
G_TYPE_INVALID,
G_TYPE_INVALID);
-
- return NS_OK;
}
-nsresult
-totemPlugin::ClearPlaylist (void)
+void
+totemPlugin::ClearPlaylist ()
{
D ("ClearPlaylist");
/* FIXME: queue the action instead */
if (!mViewerReady)
- return NS_OK;
+ return;
- NS_ASSERTION (mViewerProxy, "No viewer proxy");
+ assert (mViewerProxy);
dbus_g_proxy_call_no_reply (mViewerProxy,
"ClearPlaylist",
G_TYPE_INVALID,
G_TYPE_INVALID);
-
- return NS_OK;
}
-nsresult
-totemPlugin::AddItem (const nsACString &aURI)
+int32_t
+totemPlugin::AddItem (const char* aURI)
{
- const nsCString string (aURI);
- const char *str = string.get ();
+ if (!aURI || !aURI[0])
+ return -1;
- D ("AddItem '%s'", str);
+ /* FIXMEchpe: resolve against mBaseURI or mSrcURI ?? */
+
+ D ("AddItem '%s'", aURI);
/* FIXME: queue the action instead */
if (!mViewerReady)
- return NS_OK;
+ return false;
- NS_ASSERTION (mViewerProxy, "No viewer proxy");
+ assert (mViewerProxy);
dbus_g_proxy_call_no_reply (mViewerProxy,
"AddItem",
- G_TYPE_STRING, str,
+ G_TYPE_STRING, aURI,
G_TYPE_INVALID,
G_TYPE_INVALID);
- return NS_OK;
+ return 0;
+}
+
+void
+totemPlugin::SetMute (bool enabled)
+{
+ mMute = enabled;
+ /* FIXMEchpe do stuff in the viewer! */
+}
+
+void
+totemPlugin::SetLooping (bool enabled)
+{
+ mIsLooping = enabled;
+ /* FIXMEchpe do stuff in the viewer! */
+}
+
+void
+totemPlugin::SetAutoPlay (bool enabled)
+{
+ mAutoPlay = enabled;
+}
+
+void
+totemPlugin::SetControllerVisible (bool enabled)
+{
+ mControllerHidden = !enabled; // FIXMEchpe
+}
+
+void
+totemPlugin::SetBackgroundColor (const char* color)
+{
+ g_free (mBackgroundColor);
+ mBackgroundColor = g_strdup (color);
+}
+
+void
+totemPlugin::SetMatrix (const char* matrix)
+{
+ g_free (mMatrix);
+ mMatrix = g_strdup (matrix);
+}
+
+void
+totemPlugin::SetRectangle (const char *rectangle)
+{
+ g_free (mRectangle);
+ mRectangle = g_strdup (rectangle);
+}
+
+void
+totemPlugin::SetMovieName (const char *name)
+{
+ g_free (mMovieName);
+ mMovieName = g_strdup (name);
+}
+
+void
+totemPlugin::SetRate (double rate)
+{
+ // FIXMEchpe
+}
+
+double
+totemPlugin::Rate () const
+{
+ double rate;
+ if (mState == TOTEM_STATE_PLAYING) {
+ rate = 1.0;
+ } else {
+ rate = 0.0;
+ }
+ return rate;
}
/* Viewer interaction */
@@ -314,8 +466,7 @@ totemPlugin::ViewerFork ()
return NPERR_NO_ERROR;
#endif /* TOTEM_COMPLEX_PLUGIN */
- const char *userAgent = CallNPN_UserAgentProc (sNPN.uagent,
- mInstance);
+ const char *userAgent = NPN_UserAgent (mNPP);
if (!userAgent) {
/* See https://bugzilla.mozilla.org/show_bug.cgi?id=328778 */
D ("User agent has more than 127 characters; fix your browser!");
@@ -374,9 +525,9 @@ totemPlugin::ViewerFork ()
}
/* FIXME: remove this */
- if (!mMimeType.IsEmpty ()) {
+ if (mMimeType) {
g_ptr_array_add (arr, g_strdup (DASHES TOTEM_OPTION_MIMETYPE));
- g_ptr_array_add (arr, g_strdup (mMimeType.get()));
+ g_ptr_array_add (arr, g_strdup (mMimeType));
}
if (mControllerHidden) {
@@ -399,7 +550,7 @@ totemPlugin::ViewerFork ()
g_ptr_array_add (arr, g_strdup (DASHES TOTEM_OPTION_AUDIOONLY));
}
- if (!mAutostart) {
+ if (!mAutoPlay) {
g_ptr_array_add (arr, g_strdup (DASHES TOTEM_OPTION_NOAUTOSTART));
}
@@ -421,18 +572,13 @@ totemPlugin::ViewerFork ()
}
#endif
- mViewerReady = PR_FALSE;
+ mViewerReady = false;
/* Don't wait forever! */
- const PRUint32 kViewerTimeout = 30 * 1000; /* ms */
- nsresult rv = mTimer->InitWithFuncCallback (ViewerForkTimeoutCallback,
- reinterpret_cast<void*>(this),
- kViewerTimeout,
- nsITimer::TYPE_ONE_SHOT);
- if (NS_FAILED (rv)) {
- D ("Failed to initialise timer");
- return NPERR_GENERIC_ERROR;
- }
+ const guint kViewerTimeout = 30 * 1000; /* ms */
+ mTimerID = g_timeout_add (kViewerTimeout,
+ (GSourceFunc) ViewerForkTimeoutCallback,
+ reinterpret_cast<void*>(this));
/* FIXME: once gecko is multihead-safe, this should use gdk_spawn_on_screen_with_pipes */
GError *error = NULL;
@@ -476,18 +622,18 @@ totemPlugin::ViewerSetup ()
if (mViewerSetUp)
return;
- mViewerSetUp = PR_TRUE;
+ mViewerSetUp = true;
D ("ViewerSetup");
/* Cancel timeout */
- nsresult rv = mTimer->Cancel ();
- if (NS_FAILED (rv)) {
- D ("Failed to cancel timer");
+ if (mTimerID != 0) {
+ g_source_remove (mTimerID);
+ mTimerID = 0;
}
mViewerProxy = dbus_g_proxy_new_for_name (mBusConnection,
- mViewerServiceName.get (),
+ mViewerServiceName,
TOTEM_PLUGIN_VIEWER_DBUS_PATH,
TOTEM_PLUGIN_VIEWER_INTERFACE_NAME);
@@ -550,8 +696,8 @@ totemPlugin::ViewerSetup ()
#if defined(TOTEM_COMPLEX_PLUGIN) && defined(HAVE_NSTARRAY_H)
/* Notify all consoles */
- PRUint32 count = sPlugins->Length ();
- for (PRUint32 i = 0; i < count; ++i) {
+ uint32_t count = sPlugins->Length ();
+ for (uint32_t i = 0; i < count; ++i) {
totemPlugin *plugin = sPlugins->ElementAt (i);
if (plugin->mConsoleClassRepresentant == this)
@@ -564,10 +710,12 @@ totemPlugin::ViewerSetup ()
void
totemPlugin::ViewerCleanup ()
{
- mViewerReady = PR_FALSE;
+ mViewerReady = false;
- mViewerBusAddress.SetLength (0);
- mViewerServiceName.SetLength (0);
+ g_free (mViewerBusAddress);
+ mViewerBusAddress = NULL;
+ g_free (mViewerServiceName);
+ mViewerServiceName = NULL;
if (mViewerPendingCall) {
dbus_g_proxy_cancel_call (mViewerProxy, mViewerPendingCall);
@@ -621,12 +769,12 @@ totemPlugin::ViewerSetWindow ()
/* FIXME this shouldn't happen here */
if (mHidden) {
- mWindowSet = PR_TRUE;
+ mWindowSet = true;
ViewerReady ();
return;
}
- NS_ASSERTION (mViewerPendingCall == NULL, "Have a pending call");
+ assert (mViewerPendingCall == NULL); /* Have a pending call */
D ("Calling SetWindow");
mViewerPendingCall =
@@ -641,11 +789,11 @@ totemPlugin::ViewerSetWindow ()
G_TYPE_STRING, "All",
#endif
G_TYPE_UINT, (guint) mWindow,
- G_TYPE_INT, (gint) mWidth,
- G_TYPE_INT, (gint) mHeight,
+ G_TYPE_INT, mWidth,
+ G_TYPE_INT, mHeight,
G_TYPE_INVALID);
- mWindowSet = PR_TRUE;
+ mWindowSet = true;
}
void
@@ -653,23 +801,23 @@ totemPlugin::ViewerReady ()
{
D ("ViewerReady");
- NS_ASSERTION (!mViewerReady, "Viewer already ready");
+ assert (!mViewerReady);
- mViewerReady = PR_TRUE;
+ mViewerReady = true;
- if (mAutostart) {
- RequestStream (PR_FALSE);
+ if (mAutoPlay) {
+ RequestStream (false);
} else {
- mWaitingForButtonPress = PR_TRUE;
+ mWaitingForButtonPress = true;
}
#ifdef TOTEM_NARROWSPACE_PLUGIN
/* Tell the viewer it has an href */
- if (!mHref.IsEmpty ()) {
+ if (mHref) {
dbus_g_proxy_call_no_reply (mViewerProxy,
"SetHref",
- G_TYPE_STRING, mHref.get (),
- G_TYPE_STRING, mTarget.get (),
+ G_TYPE_STRING, mHref,
+ G_TYPE_STRING, mTarget ? mTarget : "",
G_TYPE_INVALID);
}
#endif /* TOTEM_NARROWSPACE_PLUGIN */
@@ -682,20 +830,22 @@ totemPlugin::ViewerButtonPressed (guint aTimestamp, guint aButton)
#ifdef TOTEM_NARROWSPACE_PLUGIN
/* FIXME set href="" afterwards, so we don't try to launch again when the user clicks again? */
- if (!mHref.IsEmpty ()) {
- if (g_ascii_strcasecmp (mTarget.get (), "quicktimeplayer") == 0) {
- D ("Opening movie '%s' in external player", mHref.get ());
+ if (mHref) {
+ if (mTarget &&
+ g_ascii_strcasecmp (mTarget, "quicktimeplayer") == 0) {
+ D ("Opening movie '%s' in external player", mHref);
dbus_g_proxy_call_no_reply (mViewerProxy,
"LaunchPlayer",
- G_TYPE_STRING, mHref.get (),
+ G_TYPE_STRING, mHref,
G_TYPE_UINT, time,
G_TYPE_INVALID);
return;
}
- if (g_ascii_strcasecmp (mTarget.get (), "myself") == 0 ||
- mTarget.Equals (NS_LITERAL_CSTRING ("_current")) ||
- mTarget.Equals (NS_LITERAL_CSTRING ("_self"))) {
- D ("Opening movie '%s'", mHref.get ());
+ if (mTarget &&
+ (g_ascii_strcasecmp (mTarget, "myself") == 0 ||
+ g_ascii_strcasecmp (mTarget, "_current") == 0 ||
+ g_ascii_strcasecmp (mTarget, "_self") == 0)) {
+ D ("Opening movie '%s'", mHref);
dbus_g_proxy_call_no_reply (mViewerProxy,
"SetHref",
G_TYPE_STRING, NULL,
@@ -703,25 +853,22 @@ totemPlugin::ViewerButtonPressed (guint aTimestamp, guint aButton)
G_TYPE_INVALID);
/* FIXME this isn't right, we should just create a mHrefURI and instruct to load that one */
SetQtsrc (mHref);
- RequestStream (PR_TRUE);
+ RequestStream (true);
return;
}
/* Load URL in browser. This will either open a new website,
* or execute some javascript.
*/
- nsCString href;
+ const char *href = NULL;
if (mHrefURI) {
- mHrefURI->GetSpec (href);
+ href = mHrefURI;
} else {
href = mHref;
}
- if (CallNPN_GetURLProc (sNPN.geturl,
- mInstance,
- href.get (),
- mTarget.get ()) != NPERR_NO_ERROR) {
- D ("Failed to launch URL '%s' in browser", mHref.get ());
+ if (NPN_GetURL (mNPP, href, mTarget) != NPERR_NO_ERROR) {
+ D ("Failed to launch URL '%s' in browser", mHref);
}
return;
@@ -731,12 +878,12 @@ totemPlugin::ViewerButtonPressed (guint aTimestamp, guint aButton)
if (!mWaitingForButtonPress)
return;
- mWaitingForButtonPress = PR_FALSE;
+ mWaitingForButtonPress = false;
/* Now is the time to start the stream */
- if (!mAutostart &&
+ if (!mAutoPlay &&
!mStream) {
- RequestStream (PR_FALSE);
+ RequestStream (false);
}
}
@@ -749,41 +896,40 @@ totemPlugin::NameOwnerChanged (const char *aName,
return;
/* Construct viewer interface name */
- if (NS_UNLIKELY (mViewerServiceName.IsEmpty ())) {
- char name[256];
-
- g_snprintf (name, sizeof (name),
- TOTEM_PLUGIN_VIEWER_NAME_TEMPLATE,
- mViewerPID);
- mViewerServiceName.Assign (name);
-
- D ("Viewer DBus interface name is '%s'", mViewerServiceName.get ());
+ if (G_UNLIKELY (!mViewerServiceName)) {
+ mViewerServiceName = g_strdup_printf (TOTEM_PLUGIN_VIEWER_NAME_TEMPLATE, mViewerPID);
+ D ("Viewer DBus interface name is '%s'", mViewerServiceName);
}
- if (!mViewerServiceName.Equals (nsDependentCString (aName)))
+ if (strcmp (mViewerServiceName, aName) != 0)
return;
D ("NameOwnerChanged old-owner '%s' new-owner '%s'", aOldOwner, aNewOwner);
if (aOldOwner[0] == '\0' /* empty */ &&
aNewOwner[0] != '\0' /* non-empty */) {
- if (mViewerBusAddress.Equals (nsDependentCString (aNewOwner))) {
+ if (mViewerBusAddress &&
+ strcmp (mViewerBusAddress, aNewOwner) == 0) {
D ("Already have owner, why are we notified again?");
- } else if (!mViewerBusAddress.IsEmpty ()) {
+ g_free (mViewerBusAddress);
+ } else if (mViewerBusAddress) {
D ("WTF, new owner!?");
+ g_free (mViewerBusAddress);
} else {
/* This is the regular case */
D ("Viewer now connected to the bus");
}
- mViewerBusAddress.Assign (aNewOwner);
+ mViewerBusAddress = g_strdup (aNewOwner);
ViewerSetup ();
- } else if (!mViewerBusAddress.IsEmpty () &&
- mViewerBusAddress.Equals (nsDependentCString (aOldOwner))) {
+ } else if (mViewerBusAddress &&
+ strcmp (mViewerBusAddress, aOldOwner) == 0) {
D ("Viewer lost connection!");
- mViewerBusAddress.SetLength (0); /* truncate */
+ g_free (mViewerBusAddress);
+ mViewerBusAddress = NULL;
+
/* FIXME */
/* ViewerCleanup () ? */
/* FIXME if we're not quitting, put up error viewer */
@@ -798,20 +944,19 @@ totemPlugin::NameOwnerChanged (const char *aName,
void
totemPlugin::ClearRequest ()
{
- if (mRequestBaseURI) {
- NS_RELEASE (mRequestBaseURI);
- mRequestBaseURI = nsnull;
- }
- if (mRequestURI) {
- NS_RELEASE (mRequestURI);
- mRequestURI = nsnull;
- }
+ g_free (mRequestURI);
+ mRequestURI = NULL;
+
+ g_free (mRequestBaseURI);
+ mRequestBaseURI = NULL;
}
void
-totemPlugin::RequestStream (PRBool aForceViewer)
+totemPlugin::RequestStream (bool aForceViewer)
{
- NS_ASSERTION (mViewerReady, "Viewer not ready");
+// assert (mViewerReady);
+ if (!mViewerReady)
+ return;//FIXMEchpe
if (mStream) {
D ("Unexpectedly have a stream!");
@@ -822,8 +967,8 @@ totemPlugin::RequestStream (PRBool aForceViewer)
ClearRequest ();
/* Now work out which URL to request */
- nsIURI *baseURI = nsnull;
- nsIURI *requestURI = nsnull;
+ const char *baseURI = NULL;
+ const char *requestURI = NULL;
#ifdef TOTEM_GMP_PLUGIN
/* Prefer filename over src */
@@ -848,7 +993,7 @@ totemPlugin::RequestStream (PRBool aForceViewer)
#endif /* TOTEM_NARROWSPACE_PLUGIN */
#ifdef TOTEM_MULLY_PLUGIN
- aForceViewer = PR_TRUE;
+ aForceViewer = true;
#endif /* TOTEM_MULLY_PLUGIN */
/* Fallback */
@@ -859,25 +1004,16 @@ totemPlugin::RequestStream (PRBool aForceViewer)
baseURI = mBaseURI;
/* Nothing to do */
- if (!requestURI)
- return;
-
- NS_ADDREF (mRequestBaseURI = baseURI);
- NS_ADDREF (mRequestURI = requestURI);
-
- /* FIXME use the right base! */
- nsCString baseSpec, spec;
- baseURI->GetSpec (baseSpec);
- requestURI->GetSpec (spec);
-
- /* Shouldn't happen, but who knows */
- if (spec.IsEmpty ())
+ if (!requestURI || !requestURI[0])
return;
/* If we don't have a proxy yet */
if (!mViewerReady)
return;
+ mRequestURI = g_strdup (requestURI);
+ mRequestBaseURI = g_strdup (baseURI);
+
/* If the URL is supported and the caller isn't asking us to make
* the viewer open the stream, we call OpenStream, and
* otherwise OpenURI. */
@@ -891,8 +1027,8 @@ totemPlugin::RequestStream (PRBool aForceViewer)
ViewerOpenStreamCallback,
reinterpret_cast<void*>(this),
NULL,
- G_TYPE_STRING, spec.get (),
- G_TYPE_STRING, baseSpec.get (),
+ G_TYPE_STRING, requestURI,
+ G_TYPE_STRING, baseURI,
G_TYPE_INVALID);
} else {
mViewerPendingCall =
@@ -901,16 +1037,18 @@ totemPlugin::RequestStream (PRBool aForceViewer)
ViewerOpenURICallback,
reinterpret_cast<void*>(this),
NULL,
- G_TYPE_STRING, spec.get (),
- G_TYPE_STRING, baseSpec.get (),
+ G_TYPE_STRING, requestURI,
+ G_TYPE_STRING, baseURI,
G_TYPE_INVALID);
}
/* FIXME: start playing in the callbacks ! */
#ifdef TOTEM_NARROWSPACE_PLUGIN
- if (mScriptable) {
- mScriptable->mPluginState = totemScriptablePlugin::eState_Playable;
+ if (!mNPObjects[ePluginScriptable].IsNull ()) {
+ NPObject *object = mNPObjects[ePluginScriptable];
+ totemNarrowSpacePlayer *scriptable = static_cast<totemNarrowSpacePlayer*>(object);
+ scriptable->mPluginState = totemNarrowSpacePlayer::eState_Playable;
}
#endif /* TOTEM_NARROWSPACE_PLUGIN */
}
@@ -921,29 +1059,30 @@ totemPlugin::UnsetStream ()
if (!mStream)
return;
- if (CallNPN_DestroyStreamProc (sNPN.destroystream,
- mInstance,
- mStream,
- NPRES_DONE) != NPERR_NO_ERROR) {
- g_warning ("Couldn't destroy the stream");
- /* FIXME: set mStream to NULL here too? */
- return;
+ if (NPN_DestroyStream (mNPP,
+ mStream,
+ NPRES_DONE) != NPERR_NO_ERROR) {
+ g_warning ("Couldn't destroy the stream");
+ /* FIXME: set mStream to NULL here too? */
+ return;
}
/* Calling DestroyStream should already have set this to NULL */
- NS_ASSERTION (!mStream, "Should not have a stream anymore");
- mStream = nsnull; /* just to make sure */
+ assert (!mStream); /* Should not have a stream anymore */
+ mStream = NULL; /* just to make sure */
#ifdef TOTEM_NARROWSPACE_PLUGIN
- if (mScriptable) {
- mScriptable->mPluginState = totemScriptablePlugin::eState_Waiting;
+ if (!mNPObjects[ePluginScriptable].IsNull ()) {
+ NPObject *object = mNPObjects[ePluginScriptable];
+ totemNarrowSpacePlayer *scriptable = static_cast<totemNarrowSpacePlayer*>(object);
+ scriptable->mPluginState = totemNarrowSpacePlayer::eState_Waiting;
}
#endif /* TOTEM_NARROWSPACE_PLUGIN */
}
/* Callbacks */
-/* static */ void PR_CALLBACK
+/* static */ void
totemPlugin::NameOwnerChangedCallback (DBusGProxy *proxy,
const char *aName,
const char *aOldOwner,
@@ -955,22 +1094,25 @@ totemPlugin::NameOwnerChangedCallback (DBusGProxy *proxy,
plugin->NameOwnerChanged (aName, aOldOwner, aNewOwner);
}
-/* static */ void PR_CALLBACK
-totemPlugin::ViewerForkTimeoutCallback (nsITimer *aTimer,
- void *aData)
+/* static */ gboolean
+totemPlugin::ViewerForkTimeoutCallback (void *aData)
{
totemPlugin *plugin = reinterpret_cast<totemPlugin*>(aData);
+ plugin->mTimerID = 0;
+
D ("ViewerForkTimeoutCallback");
/* FIXME: can this really happen? */
- NS_ASSERTION (!plugin->mViewerReady, "Viewer ready but timeout running?");
+ assert (!plugin->mViewerReady); /* Viewer ready but timeout running? */
plugin->ViewerCleanup ();
/* FIXME start error viewer */
+
+ return FALSE; /* don't run again */
}
-/* static */ void PR_CALLBACK
+/* static */ void
totemPlugin::ButtonPressCallback (DBusGProxy *proxy,
guint aTimestamp,
guint aButton,
@@ -983,7 +1125,7 @@ totemPlugin::ButtonPressCallback (DBusGProxy *proxy,
plugin->ViewerButtonPressed (aTimestamp, aButton);
}
-/* static */ void PR_CALLBACK
+/* static */ void
totemPlugin::StopStreamCallback (DBusGProxy *proxy,
void *aData)
{
@@ -994,7 +1136,7 @@ totemPlugin::StopStreamCallback (DBusGProxy *proxy,
plugin->UnsetStream ();
}
-/* static */ void PR_CALLBACK
+/* static */ void
totemPlugin::TickCallback (DBusGProxy *proxy,
guint aTime,
guint aDuration,
@@ -1002,10 +1144,11 @@ totemPlugin::TickCallback (DBusGProxy *proxy,
void *aData)
{
totemPlugin *plugin = reinterpret_cast<totemPlugin*>(aData);
- TotemStates state;
guint i;
- NS_ASSERTION (aState != NULL, "aState is NULL probably garbage");
+ //assert (aState != NULL) /* aState is NULL probably garbage */
+ if (!aState)
+ return;
DD ("Tick signal received, aState %s, aTime %d, aDuration %d", aState, aTime, aDuration);
@@ -1020,7 +1163,7 @@ totemPlugin::TickCallback (DBusGProxy *proxy,
plugin->mDuration = aDuration;
}
-/* static */ void PR_CALLBACK
+/* static */ void
totemPlugin::PropertyChangeCallback (DBusGProxy *proxy,
const char *aType,
GValue *value,
@@ -1028,7 +1171,9 @@ totemPlugin::PropertyChangeCallback (DBusGProxy *proxy,
{
totemPlugin *plugin = reinterpret_cast<totemPlugin*>(aData);
- NS_ASSERTION (aType != NULL, "aType is NULL probably garbage");
+ //NS_ASSERTION (aType != NULL, "aType is NULL probably garbage");
+ if (!aType)
+ return;
DD ("PropertyChange signal received, aType %s", aType);
@@ -1039,7 +1184,7 @@ totemPlugin::PropertyChangeCallback (DBusGProxy *proxy,
}
}
-/* static */ void PR_CALLBACK
+/* static */ void
totemPlugin::ViewerSetWindowCallback (DBusGProxy *aProxy,
DBusGProxyCall *aCall,
void *aData)
@@ -1048,13 +1193,15 @@ totemPlugin::ViewerSetWindowCallback (DBusGProxy *aProxy,
D ("SetWindow reply");
- NS_ASSERTION (aCall == plugin->mViewerPendingCall, "SetWindow not the current call");
+ //assert (aCall == plugin->mViewerPendingCall, "SetWindow not the current call");
+ if (aCall != plugin->mViewerPendingCall)
+ return;
plugin->mViewerPendingCall = NULL;
GError *error = NULL;
if (!dbus_g_proxy_end_call (aProxy, aCall, &error, G_TYPE_INVALID)) {
- /* FIXME: mViewerFailed = PR_TRUE */
+ /* FIXME: mViewerFailed = true */
g_warning ("SetWindow failed: %s", error->message);
g_error_free (error);
return;
@@ -1063,7 +1210,7 @@ totemPlugin::ViewerSetWindowCallback (DBusGProxy *aProxy,
plugin->ViewerReady ();
}
-/* static */ void PR_CALLBACK
+/* static */ void
totemPlugin::ViewerOpenStreamCallback (DBusGProxy *aProxy,
DBusGProxyCall *aCall,
void *aData)
@@ -1072,7 +1219,9 @@ totemPlugin::ViewerOpenStreamCallback (DBusGProxy *aProxy,
D ("OpenStream reply");
- NS_ASSERTION (aCall == plugin->mViewerPendingCall, "OpenStream not the current call");
+// assert (aCall == plugin->mViewerPendingCall, "OpenStream not the current call");
+ if (aCall != plugin->mViewerPendingCall)
+ return;
plugin->mViewerPendingCall = NULL;
@@ -1085,39 +1234,40 @@ totemPlugin::ViewerOpenStreamCallback (DBusGProxy *aProxy,
/* FIXME this isn't the best way... */
if (plugin->mHidden &&
- plugin->mAutostart) {
- plugin->DoCommand (TOTEM_COMMAND_PLAY);
+ plugin->mAutoPlay) {
+ plugin->Command (TOTEM_COMMAND_PLAY);
}
- NS_ASSERTION (!plugin->mExpectingStream, "Already expecting a stream");
- NS_ENSURE_TRUE (plugin->mRequestURI, );
+ assert (!plugin->mExpectingStream); /* Already expecting a stream */
- plugin->mExpectingStream = PR_TRUE;
+ //assert (plugin->mRequestURI);
+ if (!plugin->mRequestURI)
+ return;
- nsCString spec;
- plugin->mRequestURI->GetSpec (spec);
+ plugin->mExpectingStream = true;
/* Use GetURLNotify so we can reset mExpectingStream on failure */
- NPError err = CallNPN_GetURLNotifyProc (sNPN.geturlnotify,
- plugin->mInstance,
- spec.get (),
- nsnull,
- nsnull);
+ NPError err = NPN_GetURLNotify (plugin->mNPP,
+ plugin->mRequestURI,
+ NULL,
+ NULL);
if (err != NPERR_NO_ERROR) {
- plugin->mExpectingStream = PR_FALSE;
+ plugin->mExpectingStream = false;
- D ("GetURLNotify '%s' failed with error %d", spec.get (), err);
+ D ("GetURLNotify '%s' failed with error %d", plugin->mRequestURI, err);
return;
}
#ifdef TOTEM_NARROWSPACE_PLUGIN
- if (plugin->mScriptable) {
- plugin->mScriptable->mPluginState = totemScriptablePlugin::eState_Playable;
+ if (!plugin->mNPObjects[ePluginScriptable].IsNull ()) {
+ NPObject *object = plugin->mNPObjects[ePluginScriptable];
+ totemNarrowSpacePlayer *scriptable = static_cast<totemNarrowSpacePlayer*>(object);
+ scriptable->mPluginState = totemNarrowSpacePlayer::eState_Playable;
}
#endif /* TOTEM_NARROWSPACE_PLUGIN */
}
-/* static */ void PR_CALLBACK
+/* static */ void
totemPlugin::ViewerOpenURICallback (DBusGProxy *aProxy,
DBusGProxyCall *aCall,
void *aData)
@@ -1126,7 +1276,9 @@ totemPlugin::ViewerOpenURICallback (DBusGProxy *aProxy,
D ("OpenURI reply");
- NS_ASSERTION (aCall == plugin->mViewerPendingCall, "OpenURI not the current call");
+// //assert (aCall == plugin->mViewerPendingCall, "OpenURI not the current call");
+ if (aCall != plugin->mViewerPendingCall)
+ return;
plugin->mViewerPendingCall = NULL;
@@ -1138,35 +1290,51 @@ totemPlugin::ViewerOpenURICallback (DBusGProxy *aProxy,
}
#ifdef TOTEM_NARROWSPACE_PLUGIN
- if (plugin->mScriptable) {
- plugin->mScriptable->mPluginState = totemScriptablePlugin::eState_Playable;
+ if (!plugin->mNPObjects[ePluginScriptable].IsNull ()) {
+ NPObject *object = plugin->mNPObjects[ePluginScriptable];
+ totemNarrowSpacePlayer *scriptable = static_cast<totemNarrowSpacePlayer*>(object);
+ scriptable->mPluginState = totemNarrowSpacePlayer::eState_Playable;
}
#endif /* TOTEM_NARROWSPACE_PLUGIN */
/* FIXME this isn't the best way... */
- if (plugin->mAutostart) {
- plugin->DoCommand (TOTEM_COMMAND_PLAY);
+ if (plugin->mAutoPlay) {
+ plugin->Command (TOTEM_COMMAND_PLAY);
}
}
/* Auxiliary functions */
-void
-totemPlugin::GetRealMimeType (const char *mimetype,
- nsACString &_retval)
+
+/* static */ char *
+totemPlugin::PluginDescription ()
+{
+ return (char*) kPluginDescription;
+}
+
+/* static */ char *
+totemPlugin::PluginLongDescription ()
{
- _retval.Assign ("");
+ return (char*) kPluginLongDescription;
+}
- const totemPluginMimeEntry *mimetypes;
- PRUint32 count;
- totemScriptablePlugin::PluginMimeTypes (&mimetypes, &count);
+/* static */ void
+totemPlugin::PluginMimeTypes (const totemPluginMimeEntry **_entries,
+ uint32_t *_count)
+{
+ *_entries = kMimeTypes;
+ *_count = G_N_ELEMENTS (kMimeTypes);
+}
- for (PRUint32 i = 0; i < count; ++i) {
- if (strcmp (mimetypes[i].mimetype, mimetype) == 0) {
- if (mimetypes[i].mime_alias != NULL) {
- _retval.Assign (mimetypes[i].mime_alias);
+void
+totemPlugin::SetRealMimeType (const char *mimetype)
+{
+ for (uint32_t i = 0; i < G_N_ELEMENTS (kMimeTypes); ++i) {
+ if (strcmp (kMimeTypes[i].mimetype, mimetype) == 0) {
+ if (kMimeTypes[i].mime_alias != NULL) {
+ mMimeType = g_strdup (kMimeTypes[i].mime_alias);
} else {
- _retval.Assign (mimetype);
+ mMimeType = g_strdup (mimetype);
}
return;
}
@@ -1175,47 +1343,40 @@ totemPlugin::GetRealMimeType (const char *mimetype,
D ("Real mime-type for '%s' not found", mimetype);
}
-PRBool
-totemPlugin::IsSchemeSupported (nsIURI *aURI)
+bool
+totemPlugin::IsSchemeSupported (const char *aURI)
{
- if (!aURI)
- return PR_FALSE;
+ if (!aURI)
+ return false;
- nsCString scheme;
- nsresult rv = aURI->GetScheme (scheme);
- if (NS_FAILED (rv) || scheme.IsEmpty ())
- return PR_FALSE;
+ char *scheme = g_uri_parse_scheme (aURI);
+ if (!scheme)
+ return false;
- nsIProtocolHandler *handler = nsnull;
- rv = mIOService->GetProtocolHandler (scheme.get (), &handler);
-
- /* Check that it's not the external protocol handler! */
- nsIExternalProtocolHandler *extHandler = nsnull;
- if (NS_SUCCEEDED (rv) && handler) {
- CallQueryInterface (handler, &extHandler);
- }
+ bool isSupported = false;
+ if (g_ascii_strcasecmp (scheme, "http") == 0 ||
+ g_ascii_strcasecmp (scheme, "https") == 0 ||
+ g_ascii_strcasecmp (scheme, "ftp") == 0)
+ isSupported = true;
- PRBool isSupported = NS_SUCCEEDED (rv) && handler && !extHandler;
+ D("IsSchemeSupported scheme '%s': %s", scheme, isSupported ? "yes" : "no");
- NS_IF_RELEASE (handler); /* this nullifies |handler| */
- NS_IF_RELEASE (extHandler);
+ g_free (scheme);
- D ("IsSchemeSupported scheme '%s': %s", scheme.get (), isSupported ? "yes" : "no");
-
- return isSupported;
+ return isSupported;
}
-PRBool
+bool
totemPlugin::ParseBoolean (const char *key,
const char *value,
- PRBool default_val)
+ bool default_val)
{
if (value == NULL || strcmp (value, "") == 0)
return default_val;
if (g_ascii_strcasecmp (value, "false") == 0 || g_ascii_strcasecmp (value, "no") == 0)
- return PR_FALSE;
+ return false;
if (g_ascii_strcasecmp (value, "true") == 0 || g_ascii_strcasecmp (value, "yes") == 0)
- return PR_TRUE;
+ return true;
char *endptr = NULL;
errno = 0;
@@ -1229,10 +1390,10 @@ totemPlugin::ParseBoolean (const char *key,
return default_val;
}
-PRBool
+bool
totemPlugin::GetBooleanValue (GHashTable *args,
const char *key,
- PRBool default_val)
+ bool default_val)
{
const char *value;
@@ -1243,18 +1404,18 @@ totemPlugin::GetBooleanValue (GHashTable *args,
return ParseBoolean (key, value, default_val);
}
-PRUint32
+uint32_t
totemPlugin::GetEnumIndex (GHashTable *args,
const char *key,
const char *values[],
- PRUint32 n_values,
- PRUint32 default_value)
+ uint32_t n_values,
+ uint32_t default_value)
{
const char *value = (const char *) g_hash_table_lookup (args, key);
if (!value)
return default_value;
- for (PRUint32 i = 0; i < n_values; ++i) {
+ for (uint32_t i = 0; i < n_values; ++i) {
if (g_ascii_strcasecmp (value, values[i]) == 0)
return i;
}
@@ -1264,120 +1425,87 @@ totemPlugin::GetEnumIndex (GHashTable *args,
/* Public functions for use by the scriptable plugin */
-nsresult
-totemPlugin::SetSrc (const nsACString& aURL)
+bool
+totemPlugin::SetSrc (const char* aURL)
{
- if (mSrcURI) {
- NS_RELEASE (mSrcURI);
- mSrcURI = nsnull;
- }
-
- mSrc = aURL;
+ g_free (mSrcURI);
/* If |src| is empty, don't resolve the URI! Otherwise we may
* try to load an (probably iframe) html document as our video stream.
*/
- if (mSrc.Length () == 0)
- return NS_OK;
-
- nsresult rv = mIOService->NewURI (aURL, nsnull /* FIXME! use document charset */,
- mBaseURI, &mSrcURI);
- if (NS_FAILED (rv)) {
- D ("Failed to create src URI (rv=%x)", rv);
- mSrcURI = nsnull;
- } else {
- if (mAutostart) {
- RequestStream (PR_FALSE);
- } else {
- mWaitingForButtonPress = PR_TRUE;
- }
- }
+ if (!aURL || !aURL[0]) {
+ mSrcURI = NULL;
+ return true;
+ }
- return rv;
+ mSrcURI = g_strdup (aURL);
+
+ if (mAutoPlay) {
+ RequestStream (false);
+ } else {
+ mWaitingForButtonPress = true;
+ }
+
+ return true;
}
#ifdef TOTEM_GMP_PLUGIN
-nsresult
-totemPlugin::SetURL (const nsACString& aURL)
+void
+totemPlugin::SetURL (const char* aURL)
{
- if (mURLURI) {
- NS_RELEASE (mURLURI);
- mURLURI = nsnull;
- }
+ g_free (mURLURI);
/* Don't allow empty URL */
- if (aURL.Length () == 0)
- return NS_OK;
-
- /* FIXME: what is the correct base for the URL param? */
- nsresult rv;
- nsIURI *baseURI;
- if (mSrcURI) {
- baseURI = mSrcURI;
- } else {
- baseURI = mBaseURI;
- }
+ if (!aURL || !aURL[0]) {
+ mURLURI = NULL;
+ return;
+ }
- rv = mIOService->NewURI (aURL, nsnull /* FIXME document charset? */,
- baseURI, &mURLURI);
- if (NS_FAILED (rv)) {
- D ("Failed to create URL URI (rv=%x)", rv);
- }
+ mURLURI = g_strdup (aURL);
+ /* FIXME: what is the correct base for the URL param? mSrcURI or mBaseURI? */
/* FIXME: security checks? */
-
- return rv;
+ /* FIXMEchpe: resolve the URI here? */
}
#endif /* TOTEM_GMP_PLUGIN */
#ifdef TOTEM_NARROWSPACE_PLUGIN
-nsresult
-totemPlugin::SetQtsrc (const nsCString& aURL)
+bool
+totemPlugin::SetQtsrc (const char* aURL)
{
/* FIXME can qtsrc have URL extensions? */
- if (mQtsrcURI) {
- NS_RELEASE (mQtsrcURI);
- mQtsrcURI = nsnull;
- }
-
+ g_free (mQtsrcURI);
+
/* Don't allow empty qtsrc */
- if (aURL.Length () == 0)
- return NS_OK;
-
- nsresult rv;
- nsIURI *baseURI;
- if (mSrcURI) {
- baseURI = mSrcURI;
- } else {
- baseURI = mBaseURI;
- }
+ if (!aURL || !aURL[0]) {
+ mQtsrcURI = NULL;
+ return true;
+ }
- rv = mIOService->NewURI (aURL, nsnull /* FIXME document charset? */,
- baseURI, &mQtsrcURI);
- if (NS_FAILED (rv)) {
- D ("Failed to create QTSRC URI (rv=%x)", rv);
- }
+ mQtsrcURI = g_strdup (aURL);
/* FIXME: security checks? */
+ /* FIXMEchpe: resolve the URI here? */
- return rv;
+ return true;
}
-nsresult
-totemPlugin::SetHref (const nsCString& aURL)
+bool
+totemPlugin::SetHref (const char* aURL)
{
- nsCString url, target;
- PRBool hasExtensions = ParseURLExtensions (aURL, url, target);
+ char *url = NULL, *target = NULL;
+ bool hasExtensions = ParseURLExtensions (aURL, &url, &target);
D ("SetHref '%s' has-extensions %d (url: '%s' target: '%s')",
- nsCString (aURL).get (), hasExtensions, url.get (), target.get ());
+ aURL ? aURL : "", hasExtensions, url ? url : "", target ? target : "");
- nsresult rv;
- nsIURI *baseURI;
+#if 0
+// nsresult rv = NS_OK;
+ char *baseURI;
if (mQtsrcURI) {
baseURI = mQtsrcURI;
} else if (mSrcURI) {
@@ -1385,50 +1513,69 @@ totemPlugin::SetHref (const nsCString& aURL)
} else {
baseURI = mBaseURI;
}
+#endif
if (hasExtensions) {
+ g_free (mHref);
+ mHref = g_strdup (url && url[0] ? url : NULL);
+#if 0
rv = baseURI->Resolve (url, mHref);
-
- if (!target.IsEmpty ())
- mTarget = target;
+#endif
+ g_free (mTarget);
+ mTarget = g_strdup (target);
} else {
+ g_free (mHref);
+ mHref = g_strdup (aURL && aURL[0] ? aURL : NULL);
+#if 0
rv = baseURI->Resolve (aURL, mHref);
+#endif
+
+ g_free (mTarget);
+ mTarget = NULL;
}
+#if 0
if (NS_SUCCEEDED (rv)) {
- D ("Resolved HREF '%s'", mHref.get());
+ D ("Resolved HREF '%s'", mHref ? mHref : "");
} else {
D ("Failed to resolve HREF (rv=%x)", rv);
- mHref = hasExtensions ? url : aURL; /* save unresolved HREF */
+ mHref = hasExtensions ? g_strdup (url) : g_strdup (aURL); /* save unresolved HREF */
}
+#endif
+
+ g_free (url);
+ g_free (target);
- return rv;
+ return true; // FIXMEchpe
}
-PRBool
-totemPlugin::ParseURLExtensions (const nsACString &aString,
- nsACString &_url,
- nsACString &_target)
+bool
+totemPlugin::ParseURLExtensions (const char* str,
+ char **_url,
+ char **_target)
{
- const nsCString string (aString);
+ if (!str || !str[0])
+ return false;
- const char *str = string.get ();
+ /* FIXMEchpe allo whitespace in front? */
if (str[0] != '<')
- return PR_FALSE;
+ return false;
/* The expected form is "<URL> T<target> E<name=value pairs>".
* But since this is untrusted input from the web, we'll make sure it conforms to this!
*/
const char *end = strchr (str, '>');
if (!end)
- return PR_FALSE;
+ return false;
- _url = nsDependentCSubstring (string, 1, PRUint32 (end - str - 1));
+// _url = nsDependentCSubstring (string, 1, uint32_t (end - str - 1));
+ *_url = g_strndup (str + 1, end - str - 1);
const char *ext = strstr (end, " T<");
if (ext) {
const char *extend = strchr (ext, '>');
if (extend) {
- _target = nsDependentCSubstring (ext + 3, PRUint32 (extend - ext - 3));
+ *_target = g_strndup (ext + 3, extend - ext - 3);
+ // _target = nsDependentCSubstring (ext + 3, uint32_t (extend - ext - 3));
}
}
@@ -1437,12 +1584,12 @@ totemPlugin::ParseURLExtensions (const nsACString &aString,
if (ext) {
const char *extend = strchr (ext, '>');
if (extend) {
- D ("E = %s", nsCString (ext + 3, PRUint32 (extend - ext - 3)).get ());
+ D ("E = %s", nsCString (ext + 3, uint32_t (extend - ext - 3)).get ());
}
}
#endif
- return PR_TRUE;
+ return true;
}
#endif /* TOTEM_NARROWSPACE_PLUGIN */
@@ -1458,17 +1605,17 @@ totemPlugin::FindConsoleClassRepresentant ()
mConsole.Equals (NS_LITERAL_CSTRING ("_unique")) ||
mConsole.Equals (NS_LITERAL_CSTRING ("_master"))) {
D ("We're the representant for the console class");
- return nsnull;
+ return NULL;
}
- totemPlugin *representant = nsnull;
+ totemPlugin *representant = NULL;
/* Try to find a the representant of the console class */
- PRUint32 count = sPlugins->Length ();
- for (PRUint32 i = 0; i < count; ++i) {
+ uint32_t count = sPlugins->Length ();
+ for (uint32_t i = 0; i < count; ++i) {
totemPlugin *plugin = sPlugins->ElementAt (i);
- PRBool equal = PR_FALSE;
+ bool equal = false;
/* FIXME: is this correct? Maybe we should use the toplevel document
* to allow frames (and check the frames for same-origin, obviously) ?
*/
@@ -1492,36 +1639,39 @@ totemPlugin::FindConsoleClassRepresentant ()
return representant;
}
-nsresult
-totemPlugin::SetConsole (const nsACString &aConsole)
+bool
+totemPlugin::SetConsole (const char * aConsole)
{
/* Can't change console group */
- if (!mConsole.IsEmpty ())
- return NS_ERROR_ALREADY_INITIALIZED;
+ if (mConsole) {
+// return NS_ERROR_ALREADY_INITIALIZED;
+ // FIXMEchpe set exception
+ return false;
+ }
/* FIXME: we might allow this, and kill the viewer instead.
* Or maybe not spawn the viewer if we don't have a console yet?
*/
if (mViewerPID)
- return NS_ERROR_ALREADY_INITIALIZED;
+ return false; // FIXMEchpe throw exception
- mConsole = aConsole;
+ mConsole = g_strdup (aConsole);
- NS_ASSERTION (mConsoleClassRepresentant == nsnull, "Already have a representant");
+// assert (mConsoleClassRepresentant == NULL, "Already have a representant");
mConsoleClassRepresentant = FindConsoleClassRepresentant ();
- mNeedViewer = (nsnull == mConsoleClassRepresentant);
+ mNeedViewer = (NULL == mConsoleClassRepresentant);
- return NS_OK;
+ return true;
}
void
totemPlugin::TransferConsole ()
{
/* Find replacement representant */
- totemPlugin *representant = nsnull;
+ totemPlugin *representant = NULL;
- PRUint32 i, count = sPlugins->Length ();
+ uint32_t i, count = sPlugins->Length ();
for (i = 0; i < count; ++i) {
totemPlugin *plugin = sPlugins->ElementAt (i);
@@ -1538,7 +1688,7 @@ totemPlugin::TransferConsole ()
D ("Transferring console from %p to %p", (void*) this, (void*) representant);
/* Store new representant in the plugins */
- representant->mConsoleClassRepresentant = nsnull;
+ representant->mConsoleClassRepresentant = NULL;
/* We can start at i since we got out when we found the first one in the loop above */
for ( ; i < count; ++i) {
totemPlugin *plugin = sPlugins->ElementAt (i);
@@ -1548,14 +1698,16 @@ totemPlugin::TransferConsole ()
}
/* Now transfer viewer ownership */
+#if 0
if (mScriptable) {
- NS_ASSERTION (!representant->mScriptable, "WTF");
+ assert (!representant->mScriptable, "WTF");
representant->mScriptable = mScriptable;
mScriptable->SetPlugin (representant);
- mScriptable = nsnull;
+ mScriptable = NULL;
}
+#endif
- representant->mNeedViewer = PR_TRUE;
+ representant->mNeedViewer = true;
representant->mViewerPID = mViewerPID;
mViewerPID = 0;
@@ -1563,8 +1715,8 @@ totemPlugin::TransferConsole ()
representant->mViewerFD = mViewerFD;
mViewerFD = -1;
- representant->mViewerBusAddress = mViewerBusAddress;
- representant->mViewerServiceName = mViewerServiceName;
+ representant->mViewerBusAddress = g_strdup (mViewerBusAddress);
+ representant->mViewerServiceName = g_strdup (mViewerServiceName);
/* FIXME correct condition? */
if (mViewerSetUp)
@@ -1578,11 +1730,11 @@ totemPlugin::UnownedViewerSetup ()
if (mUnownedViewerSetUp)
return;
- mUnownedViewerSetUp = PR_TRUE;
+ mUnownedViewerSetUp = true;
D ("UnownedViewerSetup");
- NS_ASSERTION (mConsoleClassRepresentant, "We own the viewer!?");
+ assert (mConsoleClassRepresentant); /* We own the viewer!? */
UnownedViewerSetWindow ();
}
@@ -1598,20 +1750,20 @@ totemPlugin::UnownedViewerSetWindow ()
return;
}
- NS_ASSERTION (mConsoleClassRepresentant, "We own the viewer!");
+ assert (mConsoleClassRepresentant); /* We own the viewer! */
- NS_ENSURE_TRUE (mConsoleClassRepresentant->mViewerProxy, );
+ assert (mConsoleClassRepresentant->mViewerProxy);
/* FIXME: do we need a reply callback? */
dbus_g_proxy_call_no_reply (mConsoleClassRepresentant->mViewerProxy,
"SetWindow",
G_TYPE_STRING, mControls.get (),
G_TYPE_UINT, (guint) mWindow,
- G_TYPE_INT, (gint) mWidth,
- G_TYPE_INT, (gint) mHeight,
+ G_TYPE_INT, mWidth,
+ G_TYPE_INT, mHeight,
G_TYPE_INVALID);
- mWindowSet = PR_TRUE;
+ mWindowSet = true;
}
void
@@ -1623,16 +1775,16 @@ totemPlugin::UnownedViewerUnsetWindow ()
if (!mUnownedViewerSetUp)
return;
- NS_ASSERTION (mConsoleClassRepresentant, "We own the viewer!");
+ assert (mConsoleClassRepresentant); /* We own the viewer! */
- NS_ENSURE_TRUE (mConsoleClassRepresentant->mViewerProxy, );
+ assert (mConsoleClassRepresentant->mViewerProxy);
dbus_g_proxy_call_no_reply (mConsoleClassRepresentant->mViewerProxy,
"UnsetWindow",
G_TYPE_UINT, (guint) mWindow,
G_TYPE_INVALID);
- mWindowSet = PR_FALSE;
+ mWindowSet = false;
}
#endif /* TOTEM_COMPLEX_PLUGIN */
@@ -1656,37 +1808,22 @@ totemPlugin::Init (NPMIMEType mimetype,
*/
NPError err;
- err = CallNPN_GetValueProc (sNPN.getvalue,
- mInstance, NPNVserviceManager,
- reinterpret_cast<void *>
- (reinterpret_cast<void **>(&mServiceManager)));
- if (err != NPERR_NO_ERROR || !mServiceManager) {
- D ("Failed to get the service manager");
- return NPERR_GENERIC_ERROR;
- }
-
- nsresult rv;
- rv = mServiceManager->GetServiceByContractID (NS_IOSERVICE_CONTRACTID,
- NS_GET_IID (nsIIOService),
- reinterpret_cast<void **>(&mIOService));
- if (NS_FAILED (rv) || !mIOService) {
- D ("Failed to get IO service");
- return NPERR_GENERIC_ERROR;
- }
-
- err = CallNPN_GetValueProc (sNPN.getvalue,
- mInstance, NPNVDOMElement,
- reinterpret_cast<void *>
- (reinterpret_cast<void **>(&mPluginDOMElement)));
- if (err != NPERR_NO_ERROR || !mPluginDOMElement) {
- D ("Failed to get our DOM Element");
+ err = NPN_GetValue (mNPP,
+ NPNVPluginElementNPObject,
+ getter_Retains (mPluginElement));
+ if (err != NPERR_NO_ERROR || mPluginElement.IsNull ()) {
+ D ("Failed to get our DOM Element NPObject");
return NPERR_GENERIC_ERROR;
}
#if defined(TOTEM_COMPLEX_PLUGIN) && defined(HAVE_NSTARRAY_H)
- rv = mPluginDOMElement->GetOwnerDocument (&mPluginOwnerDocument);
- if (NS_FAILED (rv) || !mPluginOwnerDocument) {
- D ("Plugin in a document!?");
+ /* FIXMEchpe untested; test this! */
+ if (!NPN_GetProperty (mNPP,
+ mPluginElement,
+ NPN_GetStringIdentifier ("ownerDocument"),
+ getter_Retains (mPluginOwnerDocument)) ||
+ mPluginOwnerDocument.IsNull ()) {
+ D ("Failed to get the plugin element's ownerDocument");
return NPERR_GENERIC_ERROR;
}
#endif /* TOTEM_COMPLEX_PLUGIN */
@@ -1696,50 +1833,20 @@ totemPlugin::Init (NPMIMEType mimetype,
* for non-MOZILLA_INTERNAL_API code). nsIDOM3Node isn't frozen either,
* but should be safe enough.
*/
- nsIDOM3Node *dom3Node = nsnull;
- rv = CallQueryInterface (mPluginDOMElement, &dom3Node);
- if (NS_FAILED (rv) || !dom3Node) {
- D ("Failed to QI the DOM element to nsIDOM3Node");
- return NPERR_GENERIC_ERROR;
- }
-
- /* FIXME: can we cache this, or can it change (so we'll need to re-get every time we use it)? */
- nsString baseASpec;
- rv = dom3Node->GetBaseURI (baseASpec);
- if (NS_FAILED (rv) || baseASpec.IsEmpty ()) {
- /* We can't go on without a base URI ! */
- D ("Failed to get base URI spec");
- return NPERR_GENERIC_ERROR;
- }
-
- NS_ConvertUTF16toUTF8 baseSpec (baseASpec);
-
- D ("Base URI is '%s'", baseSpec.get ());
-
- rv = mIOService->NewURI (baseSpec, nsnull /* FIXME: use document charset */,
- nsnull, &mBaseURI);
- if (NS_FAILED (rv) || !mBaseURI) {
- D ("Failed to construct base URI");
- return NPERR_GENERIC_ERROR;
- }
-
- /* Create timer */
- nsIComponentManager *compMan = nsnull;
- rv = CallQueryInterface (mServiceManager, &compMan);
- if (NS_FAILED (rv) || !compMan) {
- D ("Failed to get component manager");
- return NPERR_GENERIC_ERROR;
+
+ /* This is a property on nsIDOM3Node */
+ totemNPVariantWrapper baseURI;
+ if (!NPN_GetProperty (mNPP,
+ mPluginElement,
+ NPN_GetStringIdentifier ("baseURI"),
+ getter_Copies (baseURI)) ||
+ !baseURI.IsString ()) {
+ D ("Failed to get the base URI");
+ return NPERR_GENERIC_ERROR;
}
- /* FIXME ? */
- rv = compMan->CreateInstanceByContractID (NS_TIMER_CONTRACTID,
- nsnull,
- NS_GET_IID (nsITimer),
- reinterpret_cast<void **>(&mTimer));
- if (NS_FAILED (rv) || !mTimer) {
- D ("Failed to create timer: rv=%x", rv);
- return NPERR_GENERIC_ERROR;
- }
+ mBaseURI = g_strdup (baseURI.GetString ());
+ D ("Base URI is '%s'", mBaseURI ? mBaseURI : "");
/* Setup DBus connection handling */
GError *error = NULL;
@@ -1771,9 +1878,9 @@ totemPlugin::Init (NPMIMEType mimetype,
NULL);
/* Find the "real" mime-type */
- GetRealMimeType (mimetype, mMimeType);
+ SetRealMimeType (mimetype);
- D ("Real mimetype for '%s' is '%s'", mimetype, mMimeType.get());
+ D ("Real mimetype for '%s' is '%s'", mimetype, mMimeType ? mMimeType : "(null)");
/* Now parse the attributes */
/* Note: argv[i] is NULL for the "PARAM" arg which separates the attributes
@@ -1796,7 +1903,7 @@ totemPlugin::Init (NPMIMEType mimetype,
/* We only use the size attributes to detect whether we're hidden;
* we'll get our real size from SetWindow.
*/
- PRInt32 width = -1, height = -1;
+ int width = -1, height = -1;
value = (const char *) g_hash_table_lookup (args, "width");
if (value != NULL) {
@@ -1821,7 +1928,7 @@ totemPlugin::Init (NPMIMEType mimetype,
/* Are we hidden? */
/* Treat hidden without a value as TRUE */
mHidden = g_hash_table_lookup (args, "hidden") != NULL &&
- GetBooleanValue (args, "hidden", PR_TRUE);
+ GetBooleanValue (args, "hidden", true);
/* Used as a replacement for HIDDEN=TRUE attribute.
* See http://mxr.mozilla.org/mozilla/source/modules/plugin/base/src/ns4xPluginInstance.cpp#1135
@@ -1830,20 +1937,18 @@ totemPlugin::Init (NPMIMEType mimetype,
* as -1 is our value for unset/unknown sizes
*/
if (width == 0 || height == 0)
- mHidden = PR_TRUE;
+ mHidden = true;
/* Whether to automatically stream and play the content */
- mAutostart = GetBooleanValue (args, "autoplay",
- GetBooleanValue (args, "autostart", mAutostart));
+ mAutoPlay = GetBooleanValue (args, "autoplay",
+ GetBooleanValue (args, "autostart", mAutoPlay));
/* Whether to loop */
mRepeat = GetBooleanValue (args, "repeat",
- GetBooleanValue (args, "loop", PR_FALSE));
+ GetBooleanValue (args, "loop", false));
/* Now collect URI attributes */
- const char *src = nsnull, *href = nsnull, *qtsrc = nsnull, *filename = nsnull;
-
- src = (const char *) g_hash_table_lookup (args, "src");
+ const char *src = (const char *) g_hash_table_lookup (args, "src");
/* DATA is only used in OBJECTs, see:
* http://developer.mozilla.org/en/docs/Gecko_Plugin_API_Reference:Plug-in_Basics#Plug-in_Display_Modes
*/
@@ -1854,36 +1959,36 @@ totemPlugin::Init (NPMIMEType mimetype,
if (!src) {
src = (const char *) g_hash_table_lookup (args, "data");
}
- if (src) {
- SetSrc (nsDependentCString (src));
- }
+
+ SetSrc (src);
#ifdef TOTEM_GMP_PLUGIN
/* http://windowssdk.msdn.microsoft.com/en-us/library/aa392440(VS.80).aspx */
- filename = (const char *) g_hash_table_lookup (args, "filename");
+ const char *filename = (const char *) g_hash_table_lookup (args, "filename");
if (!filename)
filename = (const char *) g_hash_table_lookup (args, "url");
- if (filename) {
- SetURL (nsDependentCString (filename));
- }
+
+ if (filename) {
+ SetURL (filename);
+ }
#endif /* TOTEM_GMP_PLUGIN */
#ifdef TOTEM_NARROWSPACE_PLUGIN
/* Target */
value = (const char *) g_hash_table_lookup (args, "target");
if (value) {
- mTarget.Assign (value);
+ mTarget = g_strdup (value);
}
- href = (const char *) g_hash_table_lookup (args, "href");
+ const char *href = (const char *) g_hash_table_lookup (args, "href");
if (href) {
- SetHref (nsDependentCString (href));
+ SetHref (href);
}
/* http://developer.apple.com/documentation/QuickTime/QT6WhatsNew/Chap1/chapter_1_section_13.html */
- qtsrc = (const char *) g_hash_table_lookup (args, "qtsrc");
+ const char *qtsrc = (const char *) g_hash_table_lookup (args, "qtsrc");
if (qtsrc) {
- SetQtsrc (nsDependentCString (qtsrc));
+ SetQtsrc (qtsrc);
}
#endif /* TOTEM_NARROWSPACE_PLUGIN */
@@ -1891,14 +1996,14 @@ totemPlugin::Init (NPMIMEType mimetype,
#ifdef TOTEM_MULLY_PLUGIN
value = (const char *) g_hash_table_lookup (args, "video");
if (value) {
- SetSrc (nsDependentCString (value));
+ SetSrc (value);
}
#endif /* TOTEM_MULLY_PLUGIN */
#ifdef TOTEM_CONE_PLUGIN
value = (const char *) g_hash_table_lookup (args, "target");
if (value) {
- SetSrc (nsDependentCString (value));
+ SetSrc (value);
}
#endif /* TOTEM_CONE_PLUGIN */
@@ -1909,25 +2014,27 @@ totemPlugin::Init (NPMIMEType mimetype,
mHref = g_strdup (mSrc);
#endif /* TOTEM_MULLY_PLUGIN */
+ /* FIXMEchpe: check if this doesn't work anymore because the URLs aren't fully resolved! */
/* If we're set to start automatically, we'll use the src stream */
if (mRequestURI &&
- mRequestURI == mSrcURI) {
- mExpectingStream = mAutostart;
+ mSrcURI &&
+ strcmp (mRequestURI, mSrcURI) == 0) {
+ mExpectingStream = mAutoPlay;
}
/* Caching behaviour */
#ifdef TOTEM_NARROWSPACE_PLUGIN
if (strcmp (mimetype, "video/quicktime") != 0) {
- mCache = PR_TRUE;
+ mCache = true;
}
mCache = GetBooleanValue (args, "cache", mCache);
#endif /* TOTEM_NARROWSPACE_PLUGIN */
#if defined (TOTEM_NARROWSPACE_PLUGIN) || defined (TOTEM_BASIC_PLUGIN)
- mControllerHidden = !GetBooleanValue (args, "controller", PR_TRUE);
+ mControllerHidden = !GetBooleanValue (args, "controller", true);
- mAutoPlay = GetBooleanValue (args, "autoplay", PR_TRUE);
+ mAutoPlay = GetBooleanValue (args, "autoplay", true);
#endif /* TOTEM_NARROWSPACE_PLUGIN || TOTEM_BASIC_PLUGIN */
@@ -1961,7 +2068,7 @@ totemPlugin::Init (NPMIMEType mimetype,
"TACCtrl",
"VolumeSlider",
};
- PRUint32 control = GetEnumIndex (args, "controls",
+ uint32_t control = GetEnumIndex (args, "controls",
kControls, G_N_ELEMENTS (kControls),
0);
mControls = kControls[control];
@@ -1974,11 +2081,11 @@ totemPlugin::Init (NPMIMEType mimetype,
value = (char *) g_hash_table_lookup (args, "uimode");
if (value != NULL) {
if (g_ascii_strcasecmp (value, "none") == 0) {
- mControllerHidden = PR_TRUE;
+ mControllerHidden = true;
} else if (g_ascii_strcasecmp (value, "invisible") == 0) {
- mHidden = PR_TRUE;
+ mHidden = true;
} else if (g_ascii_strcasecmp (value, "full") == 0) {
- mShowStatusbar = PR_TRUE;
+ mShowStatusbar = true;
} else if (g_ascii_strcasecmp (value, "mini") == 0) {
;
}
@@ -1988,7 +2095,7 @@ totemPlugin::Init (NPMIMEType mimetype,
* http://www.htmlcodetutorial.com/embeddedobjects/_EMBED_CONTROLLER.html */
/* ShowXXX parameters as per http://support.microsoft.com/kb/285154 */
mControllerHidden = !GetBooleanValue (args, "controller",
- GetBooleanValue (args, "showcontrols", PR_TRUE));
+ GetBooleanValue (args, "showcontrols", true));
mShowStatusbar = GetBooleanValue (args, "showstatusbar", mShowStatusbar);
#endif /* TOTEM_GMP_PLUGIN */
@@ -2004,35 +2111,35 @@ totemPlugin::Init (NPMIMEType mimetype,
* controllers need to be showing, otherwise it's useless */
#ifdef TOTEM_GMP_PLUGIN
if (height == 40 && !mControllerHidden) {
- mAudioOnly = PR_TRUE;
+ mAudioOnly = true;
}
#endif /* TOTEM_GMP_PLUGIN */
#if defined(TOTEM_NARROWSPACE_PLUGIN) || defined (TOTEM_BASIC_PLUGIN)
if (height <= 16 && !mControllerHidden) {
- mAudioOnly = PR_TRUE;
+ mAudioOnly = true;
}
#endif /* TOTEM_NARROWSPACE_PLUGIN || TOTEM_BASIC_PLUGIN */
#ifdef TOTEM_NARROWSPACE_PLUGIN
/* We need to autostart if we're using an HREF
* otherwise the start image isn't shown */
- if (!mHref.IsEmpty ()) {
- mExpectingStream = PR_TRUE;
- mAutostart = PR_TRUE;
+ if (mHref) {
+ mExpectingStream = true;
+ mAutoPlay = true;
}
#endif /* TOTEM_NARROWSPACE_PLUGIN */
/* Dump some disagnostics */
- D ("mSrc: %s", mSrc.get ());
+ D ("mSrcURI: %s", mSrcURI ? mSrcURI : "");
D ("mCache: %d", mCache);
D ("mControllerHidden: %d", mControllerHidden);
D ("mShowStatusbar: %d", mShowStatusbar);
D ("mHidden: %d", mHidden);
D ("mAudioOnly: %d", mAudioOnly);
- D ("mAutostart: %d, mRepeat: %d", mAutostart, mRepeat);
+ D ("mAutoPlay: %d, mRepeat: %d", mAutoPlay, mRepeat);
#ifdef TOTEM_NARROWSPACE_PLUGIN
- D ("mHref: %s", mHref.get ());
- D ("mTarget: %s", mTarget.get ());
+ D ("mHref: %s", mHref ? mHref : "");
+ D ("mTarget: %s", mTarget ? mTarget : "");
#endif /* TOTEM_NARROWSPACE_PLUGIN */
#if defined(TOTEM_COMPLEX_PLUGIN) && defined(HAVE_NSTARRAY_H)
D ("mConsole: %s", mConsole.get ());
@@ -2093,10 +2200,9 @@ totemPlugin::NewStream (NPMIMEType type,
* since, using gecko trunk (1.9), this causes the plugin to be destroyed,
* if this is the automatic |src| stream. Same for the other calls below.
*/
- return CallNPN_DestroyStreamProc (sNPN.destroystream,
- mInstance,
- stream,
- NPRES_DONE);
+ return NPN_DestroyStream (mNPP,
+ stream,
+ NPRES_DONE);
}
/* Either:
@@ -2109,14 +2215,13 @@ totemPlugin::NewStream (NPMIMEType type,
if (!mExpectingStream) {
D ("Not expecting a new stream; aborting stream");
- return CallNPN_DestroyStreamProc (sNPN.destroystream,
- mInstance,
- stream,
- NPRES_DONE);
+ return NPN_DestroyStream (mNPP,
+ stream,
+ NPRES_DONE);
}
/* This was an expected stream, no more expected */
- mExpectingStream = PR_FALSE;
+ mExpectingStream = false;
#if 1 // #if 0
// This is fixed now _except_ the "if (!mViewerReady)" problem in StreamAsFile
@@ -2129,10 +2234,9 @@ totemPlugin::NewStream (NPMIMEType type,
if (!mViewerReady) {
D ("Viewer not ready, aborting stream");
- return CallNPN_DestroyStreamProc (sNPN.destroystream,
- mInstance,
- stream,
- NPRES_DONE);
+ return NPN_DestroyStream (mNPP,
+ stream,
+ NPRES_DONE);
}
#endif
@@ -2147,15 +2251,17 @@ totemPlugin::NewStream (NPMIMEType type,
}
#ifdef TOTEM_NARROWSPACE_PLUGIN
- if (mScriptable) {
- mScriptable->mPluginState = totemScriptablePlugin::eState_Loading;
+ if (!mNPObjects[ePluginScriptable].IsNull ()) {
+ NPObject *object = mNPObjects[ePluginScriptable];
+ totemNarrowSpacePlayer *scriptable = static_cast<totemNarrowSpacePlayer*>(object);
+ scriptable->mPluginState = totemNarrowSpacePlayer::eState_Loading;
}
#endif /* TOTEM_NARROWSPACE_PLUGIN */
mStream = stream;
- mCheckedForPlaylist = PR_FALSE;
- mIsPlaylist = PR_FALSE;
+ mCheckedForPlaylist = false;
+ mIsPlaylist = false;
/* To track how many data we get from ::Write */
mBytesStreamed = 0;
@@ -2173,7 +2279,7 @@ totemPlugin::DestroyStream (NPStream* stream,
D ("DestroyStream reason %d", reason);
- mStream = nsnull;
+ mStream = NULL;
mBytesStreamed = 0;
mBytesLength = 0;
@@ -2188,7 +2294,7 @@ totemPlugin::DestroyStream (NPStream* stream,
return NPERR_NO_ERROR;
}
-int32
+int32_t
totemPlugin::WriteReady (NPStream *stream)
{
/* FIXME this could probably be an assertion instead */
@@ -2213,10 +2319,10 @@ totemPlugin::WriteReady (NPStream *stream)
return 0;
}
-int32
+int32_t
totemPlugin::Write (NPStream *stream,
- int32 offset,
- int32 len,
+ int32_t offset,
+ int32_t len,
void *buffer)
{
/* FIXME this could probably be an assertion instead */
@@ -2237,13 +2343,13 @@ totemPlugin::Write (NPStream *stream,
* So we can only do this at the start of the stream.
*/
if (!mCheckedForPlaylist) {
- NS_ASSERTION (offset == 0, "Not checked for playlist but not at the start of the stream!?");
+ assert (offset == 0); /* Not checked for playlist but not at the start of the stream!? */
- mCheckedForPlaylist = PR_TRUE;
+ mCheckedForPlaylist = true;
if (totem_pl_parser_can_parse_from_data ((const char *) buffer, len, TRUE /* FIXME */)) {
D ("Is playlist; need to wait for the file to be downloaded completely");
- mIsPlaylist = PR_TRUE;
+ mIsPlaylist = true;
/* Close the viewer */
dbus_g_proxy_call_no_reply (mViewerProxy,
@@ -2260,7 +2366,7 @@ totemPlugin::Write (NPStream *stream,
int ret = write (mViewerFD, buffer, len);
/* FIXME shouldn't we retry if errno is EINTR ? */
- if (NS_UNLIKELY (ret < 0)) {
+ if (G_UNLIKELY (ret < 0)) {
int err = errno;
D ("Write failed with errno %d: %s", err, g_strerror (err));
@@ -2268,10 +2374,9 @@ totemPlugin::Write (NPStream *stream,
/* fd://0 got closed, probably because the backend
* crashed on us. Destroy the stream.
*/
- if (CallNPN_DestroyStreamProc (sNPN.destroystream,
- mInstance,
- mStream,
- NPRES_DONE) != NPERR_NO_ERROR) {
+ if (NPN_DestroyStream (mNPP,
+ mStream,
+ NPRES_DONE) != NPERR_NO_ERROR) {
g_warning ("Couldn't destroy the stream");
}
}
@@ -2306,14 +2411,12 @@ totemPlugin::StreamAsFile (NPStream *stream,
return;
}
- NS_ASSERTION (mViewerProxy, "No viewer proxy");
- NS_ASSERTION (mViewerReady, "Viewer not ready");
-
- NS_ENSURE_TRUE (mRequestBaseURI && mRequestURI, );
+ assert (mViewerProxy); /* No viewer proxy!? */
+ assert (mViewerReady); /* Viewer not ready? */
- nsCString baseSpec, spec;
- mRequestBaseURI->GetSpec (baseSpec);
- mRequestURI->GetSpec (spec);
+ //assert (mRequestBaseURI && mRequestURI, );
+ if (!mRequestBaseURI || !mRequestURI)
+ return;
/* FIXME: these calls need to be async!!
* But the file may be unlinked as soon as we return from this
@@ -2326,8 +2429,8 @@ totemPlugin::StreamAsFile (NPStream *stream,
"SetPlaylist",
&error,
G_TYPE_STRING, fname,
- G_TYPE_STRING, spec.get (),
- G_TYPE_STRING, baseSpec.get (),
+ G_TYPE_STRING, mRequestURI,
+ G_TYPE_STRING, mRequestBaseURI,
G_TYPE_INVALID,
G_TYPE_INVALID);
}
@@ -2340,8 +2443,8 @@ totemPlugin::StreamAsFile (NPStream *stream,
"SetLocalFile",
&error,
G_TYPE_STRING, fname,
- G_TYPE_STRING, spec.get (),
- G_TYPE_STRING, baseSpec.get (),
+ G_TYPE_STRING, mRequestURI,
+ G_TYPE_STRING, mRequestBaseURI,
G_TYPE_INVALID,
G_TYPE_INVALID);
}
@@ -2364,8 +2467,10 @@ totemPlugin::StreamAsFile (NPStream *stream,
return;
}
#ifdef TOTEM_NARROWSPACE_PLUGIN
- if (mScriptable) {
- mScriptable->mPluginState = totemScriptablePlugin::eState_Complete;
+ if (!mNPObjects[ePluginScriptable].IsNull ()) {
+ NPObject *object = mNPObjects[ePluginScriptable];
+ totemNarrowSpacePlayer *scriptable = static_cast<totemNarrowSpacePlayer*>(object);
+ scriptable->mPluginState = totemNarrowSpacePlayer::eState_Complete;
}
#endif /* TOTEM_NARROWSPACE_PLUGIN */
}
@@ -2392,37 +2497,91 @@ totemPlugin::URLNotify (const char *url,
/* FIXME: show error to user? */
}
- mExpectingStream = PR_FALSE;
+ mExpectingStream = false;
}
}
-NPError
-totemPlugin::GetScriptable (void *_retval)
+NPObject*
+totemPlugin::GetNPObject (ObjectEnum which)
{
- D ("GetScriptable [%p]", (void*) this);
+ if (!mNPObjects[which].IsNull ())
+ return mNPObjects[which];
-#if defined(TOTEM_COMPLEX_PLUGIN) && defined(HAVE_NSTARRAY_H)
- if (mConsoleClassRepresentant) {
- return mConsoleClassRepresentant->GetScriptable (_retval);
- }
-#endif /* TOTEM_COMPLEX_PLUGIN */
+ totemNPClass_base *npclass = 0;
- if (!mScriptable) {
- mScriptable = new totemScriptablePlugin (this);
- if (!mScriptable)
- return NPERR_OUT_OF_MEMORY_ERROR;
+#if defined(TOTEM_BASIC_PLUGIN)
+ npclass = totemBasicPlayerNPClass::Instance();
+#elif defined(TOTEM_GMP_PLUGIN)
+ switch (which) {
+ case ePluginScriptable:
+ npclass = totemGMPPlayerNPClass::Instance();
+ break;
+ case eGMPControls:
+ npclass = totemGMPControlsNPClass::Instance();
+ break;
+ case eGMPNetwork:
+ npclass = totemGMPNetworkNPClass::Instance();
+ break;
+ case eGMPSettings:
+ npclass = totemGMPSettingsNPClass::Instance();
+ break;
+ }
+#elif defined(TOTEM_COMPLEX_PLUGIN)
+ npclass = totemComplexPlayerNPClass::Instance();
+#elif defined(TOTEM_NARROWSPACE_PLUGIN)
+ npclass = totemNarrowSpacePlayerNPClass::Instance();
+#elif defined(TOTEM_MULLY_PLUGIN)
+ npclass = totemMullYPlayerNPClass::Instance();
+#elif defined(TOTEM_CONE_PLUGIN)
+ switch (which) {
+ case ePluginScriptable:
+ npclass = totemConeNPClass::Instance();
+ break;
+ case eConeAudio:
+ npclass = totemConeAudioNPClass::Instance();
+ break;
+ case eConeInput:
+ npclass = totemConeInputNPClass::Instance();
+ break;
+ case eConePlaylist:
+ npclass = totemConePlaylistNPClass::Instance();
+ break;
+ case eConePlaylistItems:
+ npclass = totemConePlaylistItemsNPClass::Instance();
+ break;
+ case eConeVideo:
+ npclass = totemConeVideoNPClass::Instance();
+ break;
+ }
+#else
+#error Unknown plugin type
+#endif
-#ifdef TOTEM_NARROWSPACE_PLUGIN
- mScriptable->mPluginState = totemScriptablePlugin::eState_Waiting;
-#endif /* TOTEM_NARROWSPACE_PLUGIN */
+ if (!npclass)
+ return NULL;
- NS_ADDREF (mScriptable);
- }
+ mNPObjects[which] = do_CreateInstance (npclass, mNPP);
+ if (mNPObjects[which].IsNull ()) {
+ D ("Creating scriptable NPObject failed!");
+ return NULL;
+ }
+
+ return mNPObjects[which];
+}
+
+NPError
+totemPlugin::GetScriptableNPObject (void *_retval)
+{
+ D ("GetScriptableNPObject [%p]", (void *) this);
- nsresult rv = mScriptable->QueryInterface (NS_GET_IID (nsISupports),
- reinterpret_cast<void **>(_retval));
+ NPObject *scriptable = GetNPObject (ePluginScriptable);
+ if (!scriptable)
+ return NPERR_GENERIC_ERROR;
- return NS_SUCCEEDED (rv) ? NPERR_NO_ERROR : NPERR_GENERIC_ERROR;
+ NPN_RetainObject (scriptable);
+
+ *reinterpret_cast<NPObject**>(_retval) = scriptable;
+ return NPERR_NO_ERROR;
}
/* static */ NPError
@@ -2447,9 +2606,33 @@ totemPlugin::Shutdown ()
}
delete sPlugins;
- sPlugins = nsnull;
+ sPlugins = NULL;
}
#endif /* TOTEM_COMPLEX_PLUGIN */
+#if defined(TOTEM_BASIC_PLUGIN)
+ totemBasicPlayerNPClass::Shutdown ();
+#elif defined(TOTEM_GMP_PLUGIN)
+ totemGMPPlayerNPClass::Shutdown ();
+ totemGMPControlsNPClass::Shutdown ();
+ totemGMPNetworkNPClass::Shutdown ();
+ totemGMPSettingsNPClass::Shutdown ();
+#elif defined(TOTEM_COMPLEX_PLUGIN)
+#error FIXME
+#elif defined(TOTEM_NARROWSPACE_PLUGIN)
+ totemNarrowSpacePlayerNPClass::Shutdown ();
+#elif defined(TOTEM_MULLY_PLUGIN)
+ totemMullYPlayerNPClass::Shutdown ();
+#elif defined(TOTEM_CONE_PLUGIN)
+ totemConeNPClass::Shutdown ();
+ totemConeAudioNPClass::Shutdown ();
+ totemConeInputNPClass::Shutdown ();
+ totemConePlaylistNPClass::Shutdown ();
+ totemConePlaylistItemsNPClass::Shutdown ();
+ totemConeVideoNPClass::Shutdown ();
+#else
+#error Unknown plugin type
+#endif
+
return NPERR_NO_ERROR;
}
diff --git a/browser-plugin/totemPlugin.h b/browser-plugin/totemPlugin.h
index 513d5cad..3e9badaf 100644
--- a/browser-plugin/totemPlugin.h
+++ b/browser-plugin/totemPlugin.h
@@ -2,7 +2,7 @@
*
* Copyright © 2004 Bastien Nocera <hadess@hadess.net>
* Copyright © 2002 David A. Schleef <ds@schleef.org>
- * Copyright © 2006 Christian Persch
+ * 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
@@ -25,49 +25,46 @@
#include <stdint.h>
#include <dbus/dbus-glib.h>
-#include <npapi.h>
-#include <nsStringAPI.h>
+#include "npapi.h"
-#ifdef NEED_STRING_GLUE
-#include "totemStringGlue.h"
-#endif
-
-#if defined(TOTEM_COMPLEX_PLUGIN) && defined(HAVE_NSTARRAY_H)
-#include <nsTArray.h>
-#endif /* TOTEM_COMPLEX_PLUGIN */
+#include "totemNPClass.h"
+#include "totemNPObject.h"
+#include "totemNPObjectWrapper.h"
+#include "totemNPVariantWrapper.h"
#include "totem-plugin-viewer-constants.h"
-class nsIDOMDocument;
-class nsIDOMElement;
-class nsIIOService;
-class nsIServiceManager;
-class nsITimer;
-class nsIURI;
-class nsVoidArray;
-class totemScriptablePlugin;
-struct _NPNetscapeFuncs;
+#define TOTEM_COMPLEX_VERSION_BUILD "10.0"
+#define TOTEM_NARROWSPACE_VERSION "7.2.0"
+#define TOTEM_MULLY_VERSION "1.4.0.233"
+#define TOTEM_CONE_VERSION "0.8.6"
+#define TOTEM_GMP_VERSION_BUILD "11.0.0.1024"
+
+typedef struct {
+ const char *mimetype;
+ const char *extensions;
+ const char *mime_alias;
+} totemPluginMimeEntry;
+
+class totemBasicPlayer;
+class totemComplexPlayer;
+class totemConePlayer;
+class totemGMPControls;
+class totemGMPError;
+class totemGMPPlayer;
+class totemGMPSettings;
+class totemMullYPlayer;
+class totemNarrowSpacePlayer;
class totemPlugin {
public:
- totemPlugin (NPP aInstance);
+ totemPlugin (NPP aNPP);
~totemPlugin ();
- void* operator new (size_t aSize) CPP_THROW_NEW;
-
- /* Interface to scriptable */
-
- nsresult DoCommand (const char *aCommand);
- nsresult SetVolume (gdouble aVolume);
- nsresult ClearPlaylist (void);
- nsresult AddItem (const nsACString &aURI);
- nsresult SetFullscreen (gboolean enabled);
-
- nsresult SetSrc (const nsACString &aURL);
+ void* operator new (size_t aSize) throw ();
/* plugin glue */
- static _NPNetscapeFuncs sNPN;
static NPError Initialise ();
static NPError Shutdown ();
@@ -88,11 +85,11 @@ class totemPlugin {
NPError DestroyStream (NPStream* stream,
NPError reason);
- int32 WriteReady (NPStream *stream);
- int32 Write (NPStream *stream,
- int32 offset,
- int32 len,
- void *buffer);
+ int32_t WriteReady (NPStream *stream);
+ int32_t Write (NPStream *stream,
+ int32_t offset,
+ int32_t len,
+ void *buffer);
void StreamAsFile (NPStream *stream,
const char* fname);
@@ -100,44 +97,47 @@ class totemPlugin {
NPReason reason,
void *notifyData);
- NPError GetScriptable (void *_retval);
+ NPError GetScriptableNPObject (void *_retval);
+
+ static char *PluginDescription ();
+ static char *PluginLongDescription();
+ static void PluginMimeTypes (const totemPluginMimeEntry **, uint32_t *);
private:
- static void PR_CALLBACK NameOwnerChangedCallback (DBusGProxy *proxy,
+ static void NameOwnerChangedCallback (DBusGProxy *proxy,
const char *svc,
const char *old_owner,
const char *new_owner,
void *aData);
- static void PR_CALLBACK ViewerForkTimeoutCallback (nsITimer *aTimer,
- void *aData);
+ static gboolean ViewerForkTimeoutCallback (void *aData);
- static void PR_CALLBACK ButtonPressCallback (DBusGProxy *proxy,
+ static void ButtonPressCallback (DBusGProxy *proxy,
guint aTimestamp,
guint aButton,
void *aData);
- static void PR_CALLBACK StopStreamCallback (DBusGProxy *proxy,
+ static void StopStreamCallback (DBusGProxy *proxy,
void *aData);
- static void PR_CALLBACK TickCallback (DBusGProxy *proxy,
+ static void TickCallback (DBusGProxy *proxy,
guint aTime,
guint aDuration,
char *aState,
void *aData);
- static void PR_CALLBACK PropertyChangeCallback (DBusGProxy *proxy,
+ static void PropertyChangeCallback (DBusGProxy *proxy,
const char *type,
GValue *value,
void *aData);
- static void PR_CALLBACK ViewerSetWindowCallback (DBusGProxy *aProxy,
+ static void ViewerSetWindowCallback (DBusGProxy *aProxy,
DBusGProxyCall *aCall,
void *aData);
- static void PR_CALLBACK ViewerOpenStreamCallback (DBusGProxy *aProxy,
+ static void ViewerOpenStreamCallback (DBusGProxy *aProxy,
DBusGProxyCall *aCall,
void *aData);
- static void PR_CALLBACK ViewerOpenURICallback (DBusGProxy *aProxy,
+ static void ViewerOpenURICallback (DBusGProxy *aProxy,
DBusGProxyCall *aCall,
void *aData);
@@ -155,105 +155,141 @@ class totemPlugin {
void ComputeRequest ();
void ClearRequest ();
- void RequestStream (PRBool aForceViewer);
+ void RequestStream (bool aForceViewer);
void UnsetStream ();
- PRBool IsMimeTypeSupported (const char *aMimeType,
- const char *aURL);
- PRBool IsSchemeSupported (nsIURI *aURI);
- void GetRealMimeType (const char *aMimeType,
- nsACString &_retval);
- PRBool ParseBoolean (const char *key,
- const char *value,
- PRBool default_val);
- PRBool GetBooleanValue (GHashTable *args,
- const char *key,
- PRBool default_val);
- PRUint32 GetEnumIndex (GHashTable *args,
+ bool IsMimeTypeSupported (const char *aMimeType,
+ const char *aURL);
+ bool IsSchemeSupported (const char *aURI);
+ void SetRealMimeType (const char *aMimeType);
+ bool ParseBoolean (const char *key,
+ const char *value,
+ bool default_val);
+ bool GetBooleanValue (GHashTable *args,
+ const char *key,
+ bool default_val);
+ uint32_t GetEnumIndex (GHashTable *args,
const char *key,
const char *values[],
- PRUint32 n_values,
- PRUint32 default_value);
+ uint32_t n_values,
+ uint32_t default_value);
- NPP mInstance;
+ NPP mNPP;
- /* FIXME make these use nsCOMPtr<> !! */
- totemScriptablePlugin *mScriptable;
- nsIServiceManager *mServiceManager;
- nsIIOService *mIOService;
- nsIDOMElement *mPluginDOMElement;
- nsITimer *mTimer;
- nsIURI *mBaseURI;
+ totemNPObjectWrapper mPluginElement;
- nsIURI *mRequestBaseURI;
- nsIURI *mRequestURI;
+ guint mTimerID;
/* Stream data */
NPStream *mStream;
public:
- PRUint32 mBytesStreamed;
- PRUint32 mBytesLength;
+ uint32_t mBytesStreamed;
+ uint32_t mBytesLength;
private:
- PRUint8 mStreamType;
-
- nsCString mMimeType;
+ uint8_t mStreamType;
- nsCString mSrc;
- nsIURI *mSrcURI;
+ char* mMimeType;
- Window mWindow;
- PRInt32 mWidth;
- PRInt32 mHeight;
+ char* mBaseURI;
+ char* mSrcURI; /* relative to mBaseURI */
+ char* mRequestBaseURI;
+ char* mRequestURI; /* relative to mRequestBaseURI */
DBusGConnection *mBusConnection;
DBusGProxy *mBusProxy;
DBusGProxy *mViewerProxy;
DBusGProxyCall *mViewerPendingCall;
- nsCString mViewerBusAddress;
- nsCString mViewerServiceName;
+ char* mViewerBusAddress;
+ char* mViewerServiceName;
int mViewerPID;
int mViewerFD;
- public:
- PRUint32 mTime;
- PRUint32 mDuration;
- TotemStates mState;
+ Window mWindow;
+ int mWidth;
+ int mHeight;
+
+ private:
+
+ bool mAllowContextMenu;
+ bool mAudioOnly;
+ bool mAutoPlay;
+ bool mCache;
+ bool mCheckedForPlaylist;
+ bool mControllerHidden;
+ bool mControllerVisible;
+ bool mExpectingStream;
+ bool mHadStream;
+ bool mHidden;
+ bool mIsFullscreen;
+ bool mIsLooping;
+ bool mIsMute;
+ bool mIsPlaylist;
+ bool mIsSupportedSrc;
+ bool mIsWindowless;
+ bool mKioskMode;
+ bool mLoopIsPalindrome;
+ bool mMute;
+ bool mNeedViewer;
+ bool mPlayEveryFrame;
+ bool mRepeat;
+ bool mRequestIsSrc;
+ bool mResetPropertiesOnReload;
+ bool mShowStatusbar;
+ bool mTimerRunning;
+ bool mUnownedViewerSetUp;
+ bool mViewerReady;
+ bool mViewerSetUp;
+ bool mWaitingForButtonPress;
+ bool mWindowSet;
+
+ char *mBackgroundColor;
+ char *mMatrix;
+ char *mRectangle;
+ char *mMovieName;
+
double mVolume;
- PRBool mIsFullscreen;
+
+ TotemStates mState;
+
+ uint32_t mDuration;
+ uint32_t mTime;
#ifdef TOTEM_GMP_PLUGIN
public:
- nsresult SetURL (const nsACString &aURL);
+ void SetURL (const char* aURL);
+ const char* URL() const { return mURLURI; }
private:
- nsIURI *mURLURI;
+ char* mURLURI;
#endif
#ifdef TOTEM_NARROWSPACE_PLUGIN
public:
- nsresult SetQtsrc (const nsCString &aURL);
- nsresult SetHref (const nsCString& aURL);
-
- private:
- PRBool ParseURLExtensions (const nsACString &aString,
- nsACString &_url,
- nsACString &_target);
+ bool SetQtsrc (const char* aURL);
+ bool SetHref (const char* aURL);
- void LaunchTotem (const nsCString &aURL,
- PRUint32 aTimestamp);
+ const char* QtSrc () const { return mQtsrcURI; }
+ const char* Href () const { return mHref; }
+ const char* Target () const { return mTarget; }
- nsIURI *mQtsrcURI;
+ private:
+ bool ParseURLExtensions (const char* aString,
+ char* *_url,
+ char* *_target);
- nsCString mHref;
- nsIURI *mHrefURI;
+ void LaunchTotem (const char* aURL,
+ uint32_t aTimestamp);
- nsCString mTarget;
+ char* mQtsrcURI;
+ char* mHref;
+ char* mHrefURI;
+ char* mTarget;
#endif
-#if defined(TOTEM_COMPLEX_PLUGIN) && defined(HAVE_NSTARRAY_H)
+#if 0 //defined(TOTEM_COMPLEX_PLUGIN) && defined(HAVE_NSTARRAY_H)
public:
- nsresult SetConsole (const nsACString &aConsole);
+ bool SetConsole (const char* aConsole);
private:
@@ -264,9 +300,9 @@ class totemPlugin {
void UnownedViewerSetWindow ();
void UnownedViewerUnsetWindow ();
- nsIDOMDocument *mPluginOwnerDocument;
- nsCString mConsole;
- nsCString mControls;
+ totemNPObjectWrapper mPluginOwnerDocument;
+ char* mConsole;
+ char* mControls;
/* nsnull if we're the representant ourself */
totemPlugin *mConsoleClassRepresentant;
@@ -275,37 +311,101 @@ class totemPlugin {
#endif /* TOTEM_COMPLEX_PLUGIN */
+ public:
+
+ enum ObjectEnum {
+ ePluginScriptable,
+#if defined(TOTEM_GMP_PLUGIN)
+ eGMPControls,
+ eGMPNetwork,
+ eGMPSettings,
+#elif defined(TOTEM_CONE_PLUGIN)
+ eConeAudio,
+ eConeInput,
+ eConePlaylist,
+ eConePlaylistItems,
+ eConeVideo,
+#endif
+ eLastNPObject
+ };
+
private:
- PRUint32 mAutostart : 1;
- PRUint32 mAutoPlay : 1;
- PRUint32 mCache : 1;
- PRUint32 mCheckedForPlaylist : 1;
- PRUint32 mControllerHidden : 1;
- PRUint32 mExpectingStream : 1;
- PRUint32 mHadStream : 1;
- PRUint32 mHidden : 1;
- PRUint32 mIsPlaylist : 1;
- PRUint32 mIsSupportedSrc : 1;
- PRUint32 mNeedViewer : 1;
- PRUint32 mRepeat : 1;
- PRUint32 mRequestIsSrc : 1;
- PRUint32 mShowStatusbar : 1;
- PRUint32 mTimerRunning : 1;
- PRUint32 mUnownedViewerSetUp : 1;
- PRUint32 mViewerReady : 1;
- PRUint32 mViewerSetUp : 1;
- PRUint32 mWaitingForButtonPress : 1;
- PRUint32 mWindowSet : 1;
- PRUint32 mAudioOnly : 1;
-};
+ totemNPObjectWrapper mNPObjects[eLastNPObject];
-typedef struct {
- const char *mimetype;
- const char *extensions;
- const char *mime_alias;
-} totemPluginMimeEntry;
+ public:
+
+ NPObject* GetNPObject (ObjectEnum which);
+
+ bool SetSrc (const char* aURL);
+ const char* Src() const { return mSrcURI; }
+
+ void Command (const char *aCommand);
+ void ClearPlaylist ();
+ int32_t AddItem (const char*);
+
+ void SetIsWindowless (bool enabled) { mIsWindowless = enabled; }
+ bool IsWindowless () const { return mIsWindowless; }
+
+ void SetVolume (double aVolume);
+ double Volume () const { return mVolume; }
+
+ void SetMute (bool mute);
+ bool IsMute () const { return mIsMute; }
+
+ void SetFullscreen (bool enabled);
+ bool IsFullscreen () const { return mIsFullscreen; }
+
+ void SetAllowContextMenu (bool enabled) { mAllowContextMenu = enabled; }
+ bool AllowContextMenu () const { return mAllowContextMenu; }
+
+ void SetLooping (bool enabled);
+ bool IsLooping () const { return mIsLooping; }
+
+ void SetAutoPlay (bool enabled);
+ bool AutoPlay () const { return mAutoPlay; }
-const char *totem_plugin_get_long_description (void);
+ void SetControllerVisible (bool enabled);
+ bool IsControllerVisible () const { return !mControllerHidden; }
+
+ void SetKioskMode (bool enabled) { mKioskMode = enabled; }
+ bool IsKioskMode () const { return mKioskMode; }
+
+ void SetLoopIsPalindrome (bool enabled) { mLoopIsPalindrome = enabled; }
+ bool IsLoopPalindrome () const { return mLoopIsPalindrome; }
+
+ void SetPlayEveryFrame (bool enabled) { mPlayEveryFrame = enabled; }
+ bool PlayEveryFrame () const { return mPlayEveryFrame; }
+
+ void SetBackgroundColor (const char* color);
+ const char *BackgroundColor () const { return mBackgroundColor; }
+
+ void SetMatrix (const char* matrix);
+ const char* Matrix () const { return mMatrix; }
+
+ void SetRectangle (const char *rectangle);
+ const char* Rectangle () const { return mRectangle; }
+
+ void SetMovieName (const char *name);
+ const char* MovieName () const { return mMovieName; }
+
+ void SetResetPropertiesOnReload (bool enabled) { mResetPropertiesOnReload = enabled; }
+ bool ResetPropertiesOnReload () const { return mResetPropertiesOnReload; }
+
+ void SetRate (double rate);
+ double Rate () const;
+
+ double Duration () const { return double (mDuration); }
+
+ int32_t BytesStreamed () const { return mBytesStreamed; }
+
+ int32_t BytesLength () const { return mBytesLength; }
+
+ uint32_t Time () const { return mTime; }
+
+ TotemStates State () const { return mState; }
+
+ uint32_t Bandwidth () const { return 300000; /* bit/s */ /* FIXMEchpe! */ }
+};
#endif /* __TOTEM_PLUGIN_H__ */
diff --git a/browser-plugin/totemPluginGlue.cpp b/browser-plugin/totemPluginGlue.cpp
index fba8b5f8..486e8b25 100644
--- a/browser-plugin/totemPluginGlue.cpp
+++ b/browser-plugin/totemPluginGlue.cpp
@@ -1,8 +1,8 @@
/* Totem Mozilla plugin
*
- * Copyright (C) 2004-2006 Bastien Nocera <hadess@hadess.net>
- * Copyright (C) 2002 David A. Schleef <ds@schleef.org>
- * Copyright (C) 2006 Christian Persch
+ * Copyright © 2004-2006 Bastien Nocera <hadess@hadess.net>
+ * Copyright © 2002 David A. Schleef <ds@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
@@ -20,8 +20,9 @@
* Boston, MA 02110-1301 USA.
*/
-#include <mozilla-config.h>
-#include "config.h"
+#include <config.h>
+
+#include <string.h>
#include <gio/gio.h>
#include <dlfcn.h>
@@ -29,13 +30,12 @@
#include "npapi.h"
#include "npupp.h"
-#define GNOME_ENABLE_DEBUG 1
-/* define GNOME_ENABLE_DEBUG for more debug spew */
#include "debug.h"
-#include "totemPluginGlue.h"
#include "totemPlugin.h"
+NPNetscapeFuncs NPNFuncs; /* used in npn_gate.cpp */
+
static char *mime_list = NULL;
static NPError
@@ -54,14 +54,14 @@ totem_plugin_new_instance (NPMIMEType mimetype,
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;
- plugin = nsnull;
+ instance->pdata = 0;
}
- instance->pdata = plugin;
-
return rv;
}
@@ -72,13 +72,13 @@ totem_plugin_destroy_instance (NPP instance,
if (!instance)
return NPERR_INVALID_INSTANCE_ERROR;
- totemPlugin *plugin = (totemPlugin *) instance->pdata;
+ totemPlugin *plugin = reinterpret_cast<totemPlugin*> (instance->pdata);
if (!plugin)
return NPERR_NO_ERROR;
delete plugin;
- instance->pdata = nsnull;
+ instance->pdata = 0;
return NPERR_NO_ERROR;
}
@@ -90,7 +90,7 @@ totem_plugin_set_window (NPP instance,
if (!instance)
return NPERR_INVALID_INSTANCE_ERROR;
- totemPlugin *plugin = (totemPlugin *) instance->pdata;
+ totemPlugin *plugin = reinterpret_cast<totemPlugin*> (instance->pdata);
if (!plugin)
return NPERR_INVALID_INSTANCE_ERROR;
@@ -107,7 +107,7 @@ totem_plugin_new_stream (NPP instance,
if (!instance)
return NPERR_INVALID_INSTANCE_ERROR;
- totemPlugin *plugin = (totemPlugin *) instance->pdata;
+ totemPlugin *plugin = reinterpret_cast<totemPlugin*> (instance->pdata);
if (!plugin)
return NPERR_INVALID_INSTANCE_ERROR;
@@ -125,38 +125,38 @@ totem_plugin_destroy_stream (NPP instance,
return NPERR_NO_ERROR;
}
- totemPlugin *plugin = (totemPlugin *) instance->pdata;
+ totemPlugin *plugin = reinterpret_cast<totemPlugin*> (instance->pdata);
if (!plugin)
return NPERR_INVALID_INSTANCE_ERROR;
return plugin->DestroyStream (stream, reason);
}
-static int32
+static int32_t
totem_plugin_write_ready (NPP instance,
NPStream *stream)
{
if (!instance)
return -1;
- totemPlugin *plugin = (totemPlugin *) instance->pdata;
+ totemPlugin *plugin = reinterpret_cast<totemPlugin*> (instance->pdata);
if (!plugin)
return -1;
return plugin->WriteReady (stream);
}
-static int32
+static int32_t
totem_plugin_write (NPP instance,
NPStream *stream,
- int32 offset,
- int32 len,
+ int32_t offset,
+ int32_t len,
void *buffer)
{
if (!instance)
return -1;
- totemPlugin *plugin = (totemPlugin *) instance->pdata;
+ totemPlugin *plugin = reinterpret_cast<totemPlugin*> (instance->pdata);
if (!plugin)
return -1;
@@ -171,7 +171,7 @@ totem_plugin_stream_as_file (NPP instance,
if (!instance)
return;
- totemPlugin *plugin = (totemPlugin *) instance->pdata;
+ totemPlugin *plugin = reinterpret_cast<totemPlugin*> (instance->pdata);
if (!plugin)
return;
@@ -187,7 +187,7 @@ totem_plugin_url_notify (NPP instance,
if (!instance)
return;
- totemPlugin *plugin = (totemPlugin *) instance->pdata;
+ totemPlugin *plugin = reinterpret_cast<totemPlugin*> (instance->pdata);
if (!plugin)
return;
@@ -201,10 +201,12 @@ totem_plugin_print (NPP instance,
D ("Print");
}
-const char *
-totem_plugin_get_long_description (void)
+static int16_t
+totem_plugin_handle_event (NPP instance,
+ void* event)
{
- return "The <a href=\"http://www.gnome.org/projects/totem/\">Totem</a> " PACKAGE_VERSION " plugin handles video and audio streams.";
+ D ("Handle event");
+ return FALSE;
}
static NPError
@@ -212,59 +214,39 @@ totem_plugin_get_value (NPP instance,
NPPVariable variable,
void *value)
{
- totemPlugin *plugin = nsnull;
+ totemPlugin *plugin = 0;
NPError err = NPERR_NO_ERROR;
- /* See NPPVariable in npapi.h */
- D ("GetValue variable %d (%x)", variable, variable);
-
if (instance) {
- plugin = (totemPlugin *) instance->pdata;
+ plugin = reinterpret_cast<totemPlugin*> (instance->pdata);
}
+ /* See NPPVariable in npapi.h */
switch (variable) {
case NPPVpluginNameString:
- *((char **)value) = totemScriptablePlugin::PluginDescription ();
+ *((char **)value) = totemPlugin::PluginDescription ();
break;
case NPPVpluginDescriptionString:
- *((char **)value) = totemScriptablePlugin::PluginLongDescription ();
+ *((char **)value) = totemPlugin::PluginLongDescription ();
break;
case NPPVpluginNeedsXEmbed:
+ // FIXMEchpe fix webkit which passes a (unsigned int*) here...
*((NPBool *)value) = TRUE;
break;
- case NPPVpluginScriptableIID: {
- nsIID* ptr = static_cast<nsIID *>(totemPlugin::sNPN.memalloc (sizeof (nsIID)));
- if (ptr) {
- *ptr = NS_GET_IID (nsISupports);
- *static_cast<nsIID **>(value) = ptr;
- } else {
- err = NPERR_OUT_OF_MEMORY_ERROR;
- }
- break;
- }
- case NPPVpluginScriptableInstance: {
- if (plugin) {
- err = plugin->GetScriptable (value);
- }
- else {
- err = NPERR_INVALID_PLUGIN_ERROR;
- }
- break;
- }
- case NPPVjavascriptPushCallerBool:
- D ("Unhandled variable NPPVjavascriptPushCallerBool");
- err = NPERR_INVALID_PARAM;
- break;
- case NPPVpluginKeepLibraryInMemory:
- D ("Unhandled variable NPPVpluginKeepLibraryInMemory");
- err = NPERR_INVALID_PARAM;
+ case NPPVpluginScriptableIID:
+ case NPPVpluginScriptableInstance:
+ /* XPCOM scripting, obsolete */
+ err = NPERR_GENERIC_ERROR;
break;
case NPPVpluginScriptableNPObject:
- D ("Unhandled variable NPPVpluginScriptableNPObject");
- err = NPERR_INVALID_PARAM;
+ if (plugin) {
+ err = plugin->GetScriptableNPObject (value);
+ } else {
+ err = NPERR_INVALID_PLUGIN_ERROR;
+ }
break;
default:
- D ("Unhandled variable");
+ D ("Unhandled variable %d instance %p", variable, plugin);
err = NPERR_INVALID_PARAM;
break;
}
@@ -323,6 +305,7 @@ totem_plugin_mimetype_is_disabled (const char *mimetype,
}
}
+ // FIXME g_free (key);
return retval;
}
@@ -365,9 +348,9 @@ NP_GetMIMEDescription (void)
g_free (user_ini_file);
const totemPluginMimeEntry *mimetypes;
- PRUint32 count;
- totemScriptablePlugin::PluginMimeTypes (&mimetypes, &count);
- for (PRUint32 i = 0; i < count; ++i) {
+ uint32_t count;
+ totemPlugin::PluginMimeTypes (&mimetypes, &count);
+ for (uint32_t i = 0; i < count; ++i) {
char *desc;
if (totem_plugin_mimetype_is_disabled (mimetypes[i].mimetype, system, user))
@@ -399,42 +382,49 @@ NP_GetMIMEDescription (void)
return mime_list;
}
+// FIXMEchpe!!!!
+typedef enum {
+ NPNVGtk12 = 1,
+ NPNVGtk2
+} NPNToolkitType;
+
NPError
-NP_Initialize (NPNetscapeFuncs * aMozillaFuncs,
- NPPluginFuncs * plugin_funcs)
+NP_Initialize (NPNetscapeFuncs *aMozillaVTable,
+ NPPluginFuncs *aPluginVTable)
{
- NPError err = NPERR_NO_ERROR;
- NPBool supportsXEmbed = PR_FALSE;
- NPNToolkitType toolkit = (NPNToolkitType) 0;
-
D ("NP_Initialize");
- /* Do we support XEMBED? */
- err = CallNPN_GetValueProc (aMozillaFuncs->getvalue, NULL,
- NPNVSupportsXEmbedBool,
- (void *)&supportsXEmbed);
-
- if (err != NPERR_NO_ERROR || supportsXEmbed != PR_TRUE)
- return NPERR_INCOMPATIBLE_VERSION_ERROR;
-
- /* Are we using a GTK+ 2.x Moz? */
- err = CallNPN_GetValueProc (aMozillaFuncs->getvalue, NULL,
- NPNVToolkit, (void *)&toolkit);
+ if (aMozillaVTable == NULL || aPluginVTable == NULL)
+ return NPERR_INVALID_FUNCTABLE_ERROR;
- if (err != NPERR_NO_ERROR || toolkit != NPNVGtk2)
+ if ((aMozillaVTable->version >> 8) > NP_VERSION_MAJOR)
return NPERR_INCOMPATIBLE_VERSION_ERROR;
- if(aMozillaFuncs == NULL || plugin_funcs == NULL)
+ if (aMozillaVTable->size < sizeof (NPNetscapeFuncs))
+ return NPERR_INVALID_FUNCTABLE_ERROR;
+ if (aPluginVTable->size < sizeof (NPPluginFuncs))
return NPERR_INVALID_FUNCTABLE_ERROR;
- if ((aMozillaFuncs->version >> 8) > NP_VERSION_MAJOR)
+ /* 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);
+#if 0 // FIXMEchpe
+ /* Do we support XEMBED? */
+ NPError err;
+ NPBool supportsXEmbed = 0;
+ err = NPN_GetValue (NULL, NPNVSupportsXEmbedBool, (void *) &supportsXEmbed);
+ if (err != NPERR_NO_ERROR || !supportsXEmbed)
return NPERR_INCOMPATIBLE_VERSION_ERROR;
- /* FIXME: check instead: indexof (last known entry in NPNetscapeFuncs) */
- if (aMozillaFuncs->size < sizeof (NPNetscapeFuncs))
- return NPERR_INVALID_FUNCTABLE_ERROR;
- if (plugin_funcs->size < sizeof (NPPluginFuncs))
- return NPERR_INVALID_FUNCTABLE_ERROR;
+ /* Are we using a GTK+ 2.x Moz? */
+ NPNToolkitType toolkit = (NPNToolkitType) 0;
+ err = NPN_GetValue (NULL, NPNVToolkit, (void *) &toolkit);
+ if (err != NPERR_NO_ERROR || toolkit != NPNVGtk2)
+ return NPERR_INCOMPATIBLE_VERSION_ERROR;
+#endif
/* we want to open libdbus-glib-1.so.2 in such a way
* in such a way that it becomes permanentely resident */
void *handle;
@@ -446,69 +436,28 @@ NP_Initialize (NPNetscapeFuncs * aMozillaFuncs,
/* RTLD_NODELETE allows us to close right away ... */
dlclose(handle);
-
- /*
- * Copy all of the fields of the Mozilla function table into our
- * copy so we can call back into Mozilla later. Note that we need
- * to copy the fields one by one, rather than assigning the whole
- * structure, because the Mozilla function table could actually be
- * bigger than what we expect.
- */
- totemPlugin::sNPN.size = aMozillaFuncs->size;
- totemPlugin::sNPN.version = aMozillaFuncs->version;
- totemPlugin::sNPN.geturl = aMozillaFuncs->geturl;
- totemPlugin::sNPN.posturl = aMozillaFuncs->posturl;
- totemPlugin::sNPN.requestread = aMozillaFuncs->requestread;
- totemPlugin::sNPN.newstream = aMozillaFuncs->newstream;
- totemPlugin::sNPN.write = aMozillaFuncs->write;
- totemPlugin::sNPN.destroystream = aMozillaFuncs->destroystream;
- totemPlugin::sNPN.status = aMozillaFuncs->status;
- totemPlugin::sNPN.uagent = aMozillaFuncs->uagent;
- totemPlugin::sNPN.memalloc = aMozillaFuncs->memalloc;
- totemPlugin::sNPN.memfree = aMozillaFuncs->memfree;
- totemPlugin::sNPN.memflush = aMozillaFuncs->memflush;
- totemPlugin::sNPN.reloadplugins = aMozillaFuncs->reloadplugins;
- totemPlugin::sNPN.getJavaEnv = aMozillaFuncs->getJavaEnv;
- totemPlugin::sNPN.getJavaPeer = aMozillaFuncs->getJavaPeer;
- totemPlugin::sNPN.geturlnotify = aMozillaFuncs->geturlnotify;
- totemPlugin::sNPN.posturlnotify = aMozillaFuncs->posturlnotify;
- totemPlugin::sNPN.getvalue = aMozillaFuncs->getvalue;
- totemPlugin::sNPN.setvalue = aMozillaFuncs->setvalue;
- totemPlugin::sNPN.invalidaterect = aMozillaFuncs->invalidaterect;
- totemPlugin::sNPN.invalidateregion = aMozillaFuncs->invalidateregion;
- totemPlugin::sNPN.forceredraw = aMozillaFuncs->forceredraw;
-
/*
* Set up a plugin function table that Mozilla will use to call
* into us. Mozilla needs to know about our version and size and
* have a UniversalProcPointer for every function we implement.
*/
- plugin_funcs->size = sizeof(NPPluginFuncs);
- plugin_funcs->version = (NP_VERSION_MAJOR << 8) + NP_VERSION_MINOR;
- plugin_funcs->newp = NewNPP_NewProc(totem_plugin_new_instance);
- plugin_funcs->destroy =
- NewNPP_DestroyProc(totem_plugin_destroy_instance);
- plugin_funcs->setwindow =
- NewNPP_SetWindowProc(totem_plugin_set_window);
- plugin_funcs->newstream =
- NewNPP_NewStreamProc(totem_plugin_new_stream);
- plugin_funcs->destroystream =
- NewNPP_DestroyStreamProc(totem_plugin_destroy_stream);
- plugin_funcs->asfile =
- NewNPP_StreamAsFileProc(totem_plugin_stream_as_file);
- plugin_funcs->writeready =
- NewNPP_WriteReadyProc(totem_plugin_write_ready);
- plugin_funcs->write = NewNPP_WriteProc(totem_plugin_write);
- /* Printing ? */
- plugin_funcs->print = NewNPP_PrintProc(totem_plugin_print);
- /* What's that for ? */
- plugin_funcs->event = NewNPP_HandleEventProc(NULL);
- plugin_funcs->urlnotify =
- NewNPP_URLNotifyProc(totem_plugin_url_notify);
- plugin_funcs->javaClass = NULL;
- plugin_funcs->getvalue = NewNPP_GetValueProc(totem_plugin_get_value);
- plugin_funcs->setvalue = NewNPP_SetValueProc(totem_plugin_set_value);
+ aPluginVTable->size = sizeof (NPPluginFuncs);
+ aPluginVTable->version = (NP_VERSION_MAJOR << 8) + NP_VERSION_MINOR;
+ aPluginVTable->newp = NewNPP_NewProc (totem_plugin_new_instance);
+ aPluginVTable->destroy = NewNPP_DestroyProc (totem_plugin_destroy_instance);
+ aPluginVTable->setwindow = NewNPP_SetWindowProc (totem_plugin_set_window);
+ aPluginVTable->newstream = NewNPP_NewStreamProc (totem_plugin_new_stream);
+ aPluginVTable->destroystream = NewNPP_DestroyStreamProc (totem_plugin_destroy_stream);
+ aPluginVTable->asfile = NewNPP_StreamAsFileProc (totem_plugin_stream_as_file);
+ aPluginVTable->writeready = NewNPP_WriteReadyProc (totem_plugin_write_ready);
+ aPluginVTable->write = NewNPP_WriteProc (totem_plugin_write);
+ aPluginVTable->print = NewNPP_PrintProc (totem_plugin_print);
+ aPluginVTable->event = NewNPP_HandleEventProc (totem_plugin_handle_event);
+ aPluginVTable->urlnotify = NewNPP_URLNotifyProc (totem_plugin_url_notify);
+ aPluginVTable->javaClass = NULL;
+ aPluginVTable->getvalue = NewNPP_GetValueProc (totem_plugin_get_value);
+ aPluginVTable->setvalue = NewNPP_SetValueProc (totem_plugin_set_value);
D ("NP_Initialize succeeded");
diff --git a/browser-plugin/totemPluginGlue.h b/browser-plugin/totemPluginGlue.h
deleted file mode 100644
index d9cd19b6..00000000
--- a/browser-plugin/totemPluginGlue.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/* Totem Mozilla plugin
- *
- * Copyright (C) 2004-2006 Bastien Nocera <hadess@hadess.net>
- * Copyright (C) 2002 David A. Schleef <ds@schleef.org>
- * Copyright (C) 2006 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 __TOTEM_PLUGIN_GLUE_H__
-#define __TOTEM_PLUGIN_GLUE_H__
-
-#if defined(TOTEM_BASIC_PLUGIN)
-#include "totemBasicPlugin.h"
-#elif defined(TOTEM_GMP_PLUGIN)
-#include "totemGMPPlugin.h"
-#elif defined(TOTEM_COMPLEX_PLUGIN)
-#include "totemComplexPlugin.h"
-#elif defined(TOTEM_NARROWSPACE_PLUGIN)
-#include "totemNarrowSpacePlugin.h"
-#elif defined(TOTEM_MULLY_PLUGIN)
-#include "totemMullYPlugin.h"
-#elif defined(TOTEM_CONE_PLUGIN)
-#include "totemConePlugin.h"
-#else
-#error Unknown plugin type
-#endif
-
-#endif /* !__TOTEM_PLUGIN_GLUE_H__ */
diff --git a/browser-plugin/totemStringGlue.h b/browser-plugin/totemStringGlue.h
deleted file mode 100644
index 92d704b7..00000000
--- a/browser-plugin/totemStringGlue.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/* Totem browser plugin
- *
- * Copyright © 2006 Bastien Nocera <hadess@hadess.net>
- * Copyright © 2006 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.
- */
-
-#include <nsEmbedString.h>
-
-#ifndef NS_LITERAL_CSTRING
-#define NS_LITERAL_CSTRING(x) (x)
-#endif
-
-class nsString : public nsEmbedString {
- public:
- PRBool IsEmpty () { return !Length (); }
-};
-
-class nsCString : public nsEmbedCString {
- public:
- nsCString () : nsEmbedCString () { }
- explicit nsCString (const char *aData, PRUint32 aLength) : nsEmbedCString (aData, aLength) { }
- explicit nsCString (const abstract_string_type& aOther) { Assign (aOther); }
- explicit nsCString (const char *&aOther) { Assign (aOther); }
- explicit nsCString (const nsCString& aData, int aStartPos, PRUint32 aLength) : nsEmbedCString (aData.get() + aStartPos, aLength-aStartPos) { }
- PRBool IsEmpty () { return !Length (); }
- PRBool Equals (const self_type& aOther) { return !strcmp (aOther.get (), get ()); }
- PRBool Equals (const char_type *aOther) { return !strcmp (aOther, get ()); }
- void SetLength (PRUint32 aLen) { Assign (""); }
- self_type& operator=(const abstract_string_type& aOther) { Assign (aOther); return *this; }
- self_type& operator=(const char_type* aOther) { Assign (aOther); return *this; }
-};
-
-class NS_ConvertUTF16toUTF8 : public nsCString {
- public:
- explicit NS_ConvertUTF16toUTF8 (const nsAString& aString) {
- NS_UTF16ToCString (aString, NS_CSTRING_ENCODING_UTF8, *this);
- }
-};
-
-typedef nsString nsDependentString;
-typedef nsCString nsDependentCString;
-typedef nsCString nsDependentCSubstring;
-
diff --git a/configure.in b/configure.in
index f763d73d..544cf610 100644
--- a/configure.in
+++ b/configure.in
@@ -632,89 +632,20 @@ AC_MSG_CHECKING([whether to compile the browser plugins])
AC_ARG_ENABLE([browser-plugins],
[AS_HELP_STRING([--enable-browser-plugins],[compile the totem browser plugins])],
- [],[enable_browser_plugins=autodetect])
-
-# Backward compatibility
-AC_ARG_ENABLE([mozilla],[],[enable_browser_plugins=$enableval],[])
-
+ [],[enable_browser_plugins=yes])
AC_MSG_RESULT([$enable_browser_plugins])
-# Check which mozilla to use
-
-if test "$enable_browser_plugins" != "no" ; then
- AC_MSG_CHECKING([which gecko to use])
-
- AC_ARG_WITH([gecko],
- [AS_HELP_STRING([--with-gecko],[Which gecko engine to use (default: autodetect)])])
-
- # backward compat
- AC_ARG_WITH([mozilla],[],[with_gecko=$withval])
-
- GECKOS="xulrunner firefox mozilla-firefox seamonkey mozilla"
- gecko=$with_gecko
-
- if test -z "$with_gecko"; then
- dnl Autodetect gecko
- for g in $GECKOS; do
- if $PKG_CONFIG --exists $g-xpcom; then
- gecko=$g
- break;
- fi
- done
- elif ! $PKG_CONFIG --exists $gecko-xpcom; then
- AC_MSG_ERROR([Gecko "$gecko" not found])
- fi
-
- if test -z "$gecko" -a "$enable_browser_plugins" = "autodetect"; then
- dnl No gecko found, disable plugin
- AC_MSG_WARN([No gecko found, disabling plugin])
- enable_browser_plugins=no
- elif test -z "$gecko"; then
- AC_MSG_ERROR([No gecko found])
- elif ! ( echo "$GECKOS" | egrep "(^| )$gecko(\$| )" > /dev/null); then
- AC_MSG_ERROR([Unknown gecko "$gecko" specified])
- else
- enable_browser_plugins=yes
- fi
-
- AC_MSG_RESULT([$gecko])
-
- case "$gecko" in
- mozilla) MOZILLA_VERSION_MIN=1.7 ;;
- seamonkey) MOZILLA_VERSION_MIN=1.0 ;;
- *firefox) MOZILLA_VERSION_MIN=1.0 ;;
- xulrunner) MOZILLA_VERSION_MIN=1.8 ;;
- esac
+if test "$enable_browser_plugins" = "yes" ; then
+ AC_DEFINE([ENABLE_BROWSER_PLUGINS],[1],[Define to build the browser plugin])
- MOZILLA=$gecko
- AC_SUBST([MOZILLA])
+ BROWSER_PLUGIN_DIR="\${libdir}/mozilla/plugins"
+ AC_ARG_VAR([BROWSER_PLUGIN_DIR],[Where to install the plugin to])
- if test "$enable_cxx_warnings" != "no" -a "$GXX" = "yes"; then
- PLUGIN_EXTRA_WARN_CXXFLAGS="-Wno-ctor-dtor-privacy -Wno-non-virtual-dtor -Woverloaded-virtual"
- else
- PLUGIN_EXTRA_WARN_CXXFLAGS=
- fi
- AC_SUBST([PLUGIN_EXTRA_WARN_CXXFLAGS])
-fi
-
-# Check for mozilla modules, but keep the CFLAGS and LIBS in
-# separate vars
-if test "$enable_browser_plugins" = "yes" ; then
- PKG_CHECK_MODULES([MOZILLA_NOT_LINKED],
- [$MOZILLA-xpcom >= $MOZILLA_VERSION_MIN \
- $MOZILLA-plugin],,
- [enable_browser_plugins=no])
-fi
-# Check for other required modules, and merge CFLAGS, but not link
-# flags to avoid linking against -lxpcom -lplds4 -lplc4 -lnspr4
-if test "$enable_browser_plugins" = "yes" ; then
PKG_CHECK_MODULES([BROWSER_PLUGIN],
[glib-2.0
- gthread-2.0
totem-plparser-mini >= $TOTEM_PLPARSER_REQS],
[],[enable_browser_plugins=no])
- BROWSER_PLUGIN_CFLAGS="$MOZILLA_NOT_LINKED_CFLAGS $BROWSER_PLUGIN_CFLAGS"
AC_SUBST([BROWSER_PLUGIN_CFLAGS])
AC_SUBST([BROWSER_PLUGIN_LIBS])
@@ -724,9 +655,7 @@ if test "$enable_browser_plugins" = "yes" ; then
[AC_MSG_ERROR([
The Browser plugin requires shared-mime-info
>= 0.22 to function.])])
-fi
-if test "$enable_browser_plugins" = "yes" ; then
PKG_CHECK_MODULES([DBUS], [dbus-glib-1 >= $DBUS_REQS],,
[enable_browser_plugins=no])
DBUSLIBDIR="`$PKG_CONFIG dbus-glib-1 --variable=libdir`"
@@ -736,108 +665,14 @@ if test "$enable_browser_plugins" = "yes" ; then
AC_MSG_WARN([dbus-binding-tool not found])
enable_browser_plugins=no
fi
-fi
-if test "$enable_browser_plugins" = "yes" ; then
PKG_CHECK_MODULES([SN], [ libstartup-notification-1.0 >= 0.8 ], [enable_browser_plugins=yes], [enable_browser_plugins=no])
if test "x$enable_browser_plugins" != "xyes" ; then
AC_MSG_WARN([libstartup-notification not found, necessary to build the plugin viewer])
fi
-fi
-# Sets some variables, and check for xpidl
-if test "$enable_browser_plugins" = "yes" ; then
- MOZILLA_PREFIX="`$PKG_CONFIG $MOZILLA-xpcom --variable=prefix`"
- MOZILLA_LIBDIR="`$PKG_CONFIG $MOZILLA-xpcom --variable=libdir`"
- MOZILLA_INCLUDE_ROOT="`$PKG_CONFIG --variable=includedir $MOZILLA-xpcom`"
- MOZILLA_XPCOM_CFLAGS="-I`$PKG_CONFIG --variable=includedir $MOZILLA-xpcom`"
- MOZILLA_PLUGINDIR="${MOZILLA_PLUGINDIR:-"\${libdir}/mozilla/plugins"}"
-
- AC_PATH_PROG([MOZILLA_XPIDL], [xpidl], [no], [$MOZILLA_LIBDIR:$PATH])
- if test "x$MOZILLA_XPIDL" = "xno"; then
- AC_MSG_ERROR([xpidl compiler not found])
- fi
+ # check for -fno-rtti flag
- AC_PATH_PROG([MOZILLA_XPT_LINK],[xpt_link],[no],[$MOZILLA_LIBDIR:$PATH])
- if test "$MOZILLA_XPT_LINK" = "no"; then
- AC_MSG_ERROR([xpt_link not found])
- fi
-
- AC_SUBST([MOZILLA_PREFIX])
- AC_SUBST([MOZILLA_LIBDIR])
- AC_SUBST([MOZILLA_XPCOM_CFLAGS])
- AC_SUBST([MOZILLA_INCLUDE_ROOT])
- AC_ARG_VAR([MOZILLA_PLUGINDIR],[Where to install the plugin to])
-fi
-
-# Search for the idl include directory
-if test "$enable_browser_plugins" = "yes" ; then
- dnl This only works on gecko 1.8
- MOZILLA_IDLDIR="`$PKG_CONFIG --variable=idldir $MOZILLA-xpcom`"
- dnl Fallback for older versions
- if test "x$MOZILLA_IDLDIR" = "x"; then
- MOZILLA_IDLDIR="`echo $MOZILLA_LIBDIR | sed -e s!lib!share/idl!`"
- fi
- dnl Some distributions (Gentoo) have it in unusual places
- if test "x$MOZILLA_IDLDIR" = "x"; then
- MOZILLA_IDLDIR="$MOZILLA_INCLUDE_ROOT/idl"
- fi
-
- AC_SUBST([MOZILLA_IDLDIR])
-fi
-
-if test "$enable_browser_plugins" = "yes" ; then
- AC_DEFINE([ENABLE_BROWSER_PLUGINS],[1],[Define if you build the mozilla plugin])
-fi
-
-AM_CONDITIONAL([ENABLE_BROWSER_PLUGINS], [test "$enable_browser_plugins" = "yes"])
-
-# check for libxpcomglue_s
-
-LIBXPCOMGLUE_S=
-
-if test "$enable_browser_plugins" = "yes"; then
- AC_LANG_PUSH([C++])
- __SAVE_CPPFLAGS=$CPPFLAGS
- __SAVE_CXXFLAGS=$CXXFLAGS
- __SAVE_LIBS=$LIBS
- __SAVE_LDFLAGS=$LDFLAGS
-
- CPPFLAGS="$CPPFLAGS -I$MOZILLA_INCLUDE_ROOT"
- CXXFLAGS="$CXXFLAGS $MOZILLA_NOT_LINKED_CFLAGS"
- LIBS="$LIBS -L$MOZILLA_LIBDIR -lxpcom -lxpcomglue_s"
- LDFLAGS="$LDFLAGS -Wl,--rpath -Wl,$MOZILLA_LIBDIR"
-
- AC_MSG_CHECKING([for libxpcomglue_s])
- AC_LINK_IFELSE([AC_LANG_PROGRAM([[
-#include <mozilla-config.h>
-#include <nsStringAPI.h>
- ]],[[
-nsCString s;
-const char *t = s.get ();
- ]])],
- [have_libxpcomglue_s=yes],
- [have_libxpcomglue_s=no])
- AC_MSG_RESULT([$have_libxpcomglue_s])
-
- CPPFLAGS=$__SAVE_CPPFLAGS
- CXXFLAGS=$__SAVE_CXXFLAGS
- LIBS=$__SAVE_LIBS
- LDFLAGS=$__SAVE_LDFLAGS
- AC_LANG_POP([C++])
-
- if test "$have_libxpcomglue_s" = "yes"; then
- LIBXPCOMGLUE_S="-L$MOZILLA_LIBDIR -lxpcomglue_s"
- else
- AC_MSG_WARN([libxpcomglue_s not available; plugins may not be portable])
- fi
-fi
-
-AC_SUBST([LIBXPCOMGLUE_S])
-
-# check for -fno-rtti flag
-
-if test "$enable_browser_plugins" = "yes"; then
AC_LANG_PUSH([C++])
__SAVE_CXXFLAGS=$CXXFLAGS
CXXFLAGS="-fno-rtti $CXXFLAGS"
@@ -854,31 +689,7 @@ if test "$enable_browser_plugins" = "yes"; then
fi
fi
-# check for some additional xpcom headers and for string compatibility
-
-if test "$enable_browser_plugins" = "yes"; then
- AC_LANG_PUSH([C++])
- __SAVE_CPPFLAGS=$CPPFLAGS
- CPPFLAGS="$CPPFLAGS $MOZILLA_NOT_LINKED_CFLAGS -I$MOZILLA_INCLUDE_ROOT -I$MOZILLA_INCLUDE_ROOT/xpcom"
-
- AC_CHECK_HEADERS([nsTArray.h])
-
- AC_MSG_CHECKING([whether we need string glue])
- AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
- #include <mozilla-config.h>
- #include <nsStringAPI.h>
- ],[
- nsDependentCString test("Test");
- ])],[need_string_glue=no],[need_string_glue=yes])
- AC_MSG_RESULT([$need_string_glue])
-
- CPPFLAGS=$__SAVE_CPPFLAGS
- AC_LANG_POP([C++])
-
- if test "$need_string_glue" = "yes"; then
- AC_DEFINE([NEED_STRING_GLUE],[1],[Define if we need string glue])
- fi
-fi
+AM_CONDITIONAL([ENABLE_BROWSER_PLUGINS], [test "$enable_browser_plugins" = "yes"])
# check which plugins to enable
@@ -899,7 +710,7 @@ AC_MSG_RESULT([$enable_gmp_plugin])
AC_MSG_CHECKING([whether to enable the Complex browser plugin])
AC_ARG_ENABLE([complex-plugin],
AS_HELP_STRING([--enable-complex-plugin],[Whether to enable the complex browser plugin]),
- [],[enable_complex_plugin=yes])
+ [],[enable_complex_plugin=no])
AC_MSG_RESULT([$enable_complex_plugin])
AC_MSG_CHECKING([whether to enable the NarrowSpace browser plugin])
@@ -1069,7 +880,6 @@ src/plugins/youtube/Makefile
src/plugins/publish/Makefile
src/backend/Makefile
browser-plugin/Makefile
-browser-plugin/idl/Makefile
data/Makefile
data/totem.desktop.in.in
data/icons/Makefile
diff --git a/src/plugins/bemused/totem-bemused.c b/src/plugins/bemused/totem-bemused.c
index a3fea633..f880258b 100644
--- a/src/plugins/bemused/totem-bemused.c
+++ b/src/plugins/bemused/totem-bemused.c
@@ -413,7 +413,6 @@ static void
write_directory_listing (TotemBemusedPlugin *tp, GIOChannel *source, gboolean at_root)
{
char *filename;
- char *root;
char buf[2];
if (at_root == FALSE)