diff options
author | Marco Pesenti Gritti <marco@localhost.localdomain> | 2007-05-19 17:18:51 (GMT) |
---|---|---|
committer | Marco Pesenti Gritti <marco@localhost.localdomain> | 2007-05-19 17:18:51 (GMT) |
commit | 54bfce91fbf10e69a3782c30aa381fdbf3bc7a5d (patch) | |
tree | 63cc26baadd36078a57234119cb007dd16678c40 | |
parent | e77e975333ac47677c48b57cea0ef6f785609941 (diff) |
Give access to nsIWebBrowser to python
-rw-r--r-- | .gitignore | 3 | ||||
-rw-r--r-- | Makefile.am | 2 | ||||
-rw-r--r-- | components/Makefile.am | 1 | ||||
-rw-r--r-- | components/browserhelper/Makefile.am | 32 | ||||
-rw-r--r-- | components/browserhelper/nsBrowserHelper.js | 100 | ||||
-rw-r--r-- | components/browserhelper/nsIBrowserHelper.idl | 13 | ||||
-rw-r--r-- | configure.ac | 2 | ||||
-rw-r--r-- | m4/gecko.m4 | 2 | ||||
-rw-r--r-- | src/.gitignore | 2 | ||||
-rw-r--r-- | src/Makefile.am | 4 | ||||
-rw-r--r-- | src/__init__.py | 14 | ||||
-rw-r--r-- | src/hulahop-browser.cpp | 30 | ||||
-rw-r--r-- | src/hulahop-browser.h | 6 | ||||
-rw-r--r-- | src/hulahop.defs | 14 | ||||
-rw-r--r-- | src/hulahop.override | 7 | ||||
-rw-r--r-- | tests/test-browser.py | 2 |
16 files changed, 75 insertions, 159 deletions
@@ -1,4 +1,7 @@ *~ +*.lo +*.la +*.o Makefile Makefile.in diff --git a/Makefile.am b/Makefile.am index 979e82b..af437a6 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1 +1 @@ -SUBDIRS = components src +SUBDIRS = src diff --git a/components/Makefile.am b/components/Makefile.am deleted file mode 100644 index 4385e25..0000000 --- a/components/Makefile.am +++ /dev/null @@ -1 +0,0 @@ -SUBDIRS = browserhelper diff --git a/components/browserhelper/Makefile.am b/components/browserhelper/Makefile.am deleted file mode 100644 index e33b907..0000000 --- a/components/browserhelper/Makefile.am +++ /dev/null @@ -1,32 +0,0 @@ -sessionstoredir = $(pkgdatadir)/components - -sessionstore_DATA = \ - nsIBrowserHelper.xpt \ - nsBrowserHelper.js - -BUILT_SOURCES = \ - nsIBrowserHelper.xpt \ - nsIBrowserHelper.h - -stamp_files = \ - stamp-nsIBrowserHelper.xpt \ - stamp-nsIBrowserHelper.h - -nsIBrowserHelper.xpt: stamp-nsIBrowserHelper.xpt - @true -stamp-nsIBrowserHelper.xpt: nsIBrowserHelper.idl - $(XPIDL) -m typelib -w -v -I $(XPIDL_IDLDIR) -e nsIBrowserHelper.xpt \ - $(srcdir)/nsIBrowserHelper.idl \ - && echo timestamp > $(@F) - -nsIBrowserHelper.h: stamp-nsIBrowserHelper.h - @true -stamp-nsIBrowserHelper.h: nsIBrowserHelper.idl - $(XPIDL) -m header -w -v -I $(XPIDL_IDLDIR) -e nsIBrowserHelper.h \ - $(srcdir)/nsIBrowserHelper.idl \ - && echo timestamp > $(@F) - -CLEANFILES = $(stamp_files) $(BUILT_SOURCES) -DISTCLEANFILES = $(stamp_files) $(BUILT_SOURCES) -MAINTAINERCLEANFILES = $(stamp_files) $(BUILT_SOURCES) -EXTRA_DIST = nsIBrowserHelper.idl nsBrowserHelper.js diff --git a/components/browserhelper/nsBrowserHelper.js b/components/browserhelper/nsBrowserHelper.js deleted file mode 100644 index f726ddf..0000000 --- a/components/browserhelper/nsBrowserHelper.js +++ /dev/null @@ -1,100 +0,0 @@ -const Cc = Components.classes; -const Ci = Components.interfaces; -const Cr = Components.results; - -const CID = Components.ID("{475e1194-92bc-4e03-92f3-5ad6ccddaca3}"); -const CONTRACT_ID = "@laptop.org/browser/browserhelper;1"; -const CLASS_NAME = "Browser Helper"; - -var browsers = []; - -function BrowserHelperService() { -} - -BrowserHelperService.prototype = { - -/* ........ nsIBrowserHelper API .............. */ - - getBrowser: function bh_getBrowser(aId) { - return browsers[aId] - }, - - registerBrowser: function bh_registerBrowser(aId, aBrowser) { - browsers[aId] = aBrowser; - }, - - unregisterBrowser: function bh_unregisterBrowser(aId) { - browsers.pop(aId) - }, - - QueryInterface: function(aIID) { - if (!aIID.equals(Ci.nsISupports) && - !aIID.equals(Ci.nsIBrowserHelper)) { - Components.returnCode = Cr.NS_ERROR_NO_INTERFACE; - return null; - } - - return this; - } -} - -/* :::::::: Service Registration & Initialization ::::::::::::::: */ - -/* ........ nsIModule .............. */ - -const BrowserHelperModule = { - - getClassObject: function(aCompMgr, aCID, aIID) { - if (aCID.equals(CID)) { - return BrowserHelperFactory; - } - - Components.returnCode = Cr.NS_ERROR_NOT_REGISTERED; - return null; - }, - - registerSelf: function(aCompMgr, aFileSpec, aLocation, aType) { - aCompMgr.QueryInterface(Ci.nsIComponentRegistrar); - aCompMgr.registerFactoryLocation(CID, CLASS_NAME, CONTRACT_ID, aFileSpec, aLocation, aType); - }, - - unregisterSelf: function(aCompMgr, aLocation, aType) { - aCompMgr.QueryInterface(Ci.nsIComponentRegistrar); - aCompMgr.unregisterFactoryLocation(CID, aLocation); - }, - - canUnload: function(aCompMgr) { - return true; - } -} - -/* ........ nsIFactory .............. */ - -const BrowserHelperFactory = { - - createInstance: function(aOuter, aIID) { - if (aOuter != null) { - Components.returnCode = Cr.NS_ERROR_NO_AGGREGATION; - return null; - } - - return (new BrowserHelperService()).QueryInterface(aIID); - }, - - lockFactory: function(aLock) { }, - - QueryInterface: function(aIID) { - if (!aIID.equals(Ci.nsISupports) && !aIID.equals(Ci.nsIModule) && - !aIID.equals(Ci.nsIFactory) && !aIID.equals(Ci.nsIBrowserHelper)) { - Components.returnCode = Cr.NS_ERROR_NO_INTERFACE; - return null; - } - - return this; - } -}; - -function NSGetModule(aComMgr, aFileSpec) { - dump("nsBrowserHelper: NSGetModule\n") - return BrowserHelperModule; -} diff --git a/components/browserhelper/nsIBrowserHelper.idl b/components/browserhelper/nsIBrowserHelper.idl deleted file mode 100644 index abe52b3..0000000 --- a/components/browserhelper/nsIBrowserHelper.idl +++ /dev/null @@ -1,13 +0,0 @@ -#include "nsISupports.idl" - -interface nsIWebBrowser; - -[scriptable, uuid(475e1194-92bc-4e03-92f3-5ad6ccddaca3)] -interface nsIBrowserHelper : nsISupports -{ - nsIWebBrowser getBrowser(in long id); - - void registerBrowser(in long id, in nsIWebBrowser browser); - - void unregisterBrowser(in long id); -}; diff --git a/configure.ac b/configure.ac index 5957fb0..0d2f3d8 100644 --- a/configure.ac +++ b/configure.ac @@ -37,7 +37,5 @@ AC_SUBST([GECKO_LIBS]) AC_OUTPUT([ Makefile -components/Makefile -components/browserhelper/Makefile src/Makefile ]) diff --git a/m4/gecko.m4 b/m4/gecko.m4 index c537e02..d32d4fe 100644 --- a/m4/gecko.m4 +++ b/m4/gecko.m4 @@ -328,7 +328,7 @@ gecko_cv_glue_libs= gecko_cv_extra_pkg_dependencies= if test "$gecko_cv_gecko_version_int" -ge "1009000"; then - gecko_cv_extra_libs="-L$_GECKO_LIBDIR -lxul" + gecko_cv_extra_libs="-L$_GECKO_LIBDIR -lxul -lpyxpcom" gecko_cv_glue_libs="-L$_GECKO_LIBDIR -lxpcomglue_s" else gecko_cv_extra_pkg_dependencies="${gecko_cv_gecko}-gtkmozembed" diff --git a/src/.gitignore b/src/.gitignore index 39a0668..89f50e0 100644 --- a/src/.gitignore +++ b/src/.gitignore @@ -1 +1,3 @@ .deps +.libs +hulahop.c diff --git a/src/Makefile.am b/src/Makefile.am index 8abb20b..b6c894a 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -10,10 +10,12 @@ INCLUDES = \ -I$(MOZILLA_INCLUDE_ROOT)/docshell \ -I$(MOZILLA_INCLUDE_ROOT)/xulapp \ -I$(MOZILLA_INCLUDE_ROOT)/nspr \ + -I$(MOZILLA_INCLUDE_ROOT)/pyxpcom \ -I$(MOZILLA_INCLUDE_ROOT)/string \ -I$(MOZILLA_INCLUDE_ROOT)/webbrwsr \ -I$(MOZILLA_INCLUDE_ROOT)/widget \ - -I$(MOZILLA_INCLUDE_ROOT)/xpcom + -I$(MOZILLA_INCLUDE_ROOT)/xpcom \ + -DMOZILLA_HOME=\"$(MOZILLA_HOME)\" pkgpyexec_LTLIBRARIES = _hulahop.la diff --git a/src/__init__.py b/src/__init__.py index 9d9afbb..86be877 100644 --- a/src/__init__.py +++ b/src/__init__.py @@ -1,6 +1,20 @@ from hulahop import _hulahop +_hulahop.startup() + +from xpcom import components +from xpcom.components import interfaces + class Browser(_hulahop.Browser): def __init__(self): _hulahop.Browser.__init__(self) + def get_document(self): + browser = self.get_browser() + if not browser: + return None + else: + web_browser = browser.queryInterface(interfaces.nsIWebBrowser) + return web_browser.contentDOMWindow + + document = property(get_document) diff --git a/src/hulahop-browser.cpp b/src/hulahop-browser.cpp index b353765..40d6562 100644 --- a/src/hulahop-browser.cpp +++ b/src/hulahop-browser.cpp @@ -21,8 +21,10 @@ #include <nsComponentManagerUtils.h> #include <nsCOMPtr.h> #include <nsIWebBrowser.h> +#include <nsILocalFile.h> #include <nsIBaseWindow.h> #include <nsXULAppAPI.h> +#include <PyXPCOM.h> #include "hulahop-browser.h" #include "HulahopDirectoryProvider.h" @@ -43,12 +45,27 @@ static GObjectClass *parent_class = NULL; static const HulahopDirectoryProvider kDirectoryProvider; -static void +gboolean hulahop_startup() { - XRE_InitEmbedding(nsnull, nsnull, - NS_CONST_CAST(HulahopDirectoryProvider *, + nsresult rv; + + nsCOMPtr<nsILocalFile> greDir; + rv = NS_NewNativeLocalFile(nsCString(MOZILLA_HOME), PR_TRUE, + getter_AddRefs(greDir)); + NS_ENSURE_SUCCESS(rv, FALSE); + + nsCOMPtr<nsILocalFile> binDir; + rv = NS_NewNativeLocalFile(nsCString(MOZILLA_HOME"/components"), PR_TRUE, + getter_AddRefs(binDir)); + NS_ENSURE_SUCCESS(rv, FALSE); + + rv = XRE_InitEmbedding(greDir, binDir, + NS_CONST_CAST(HulahopDirectoryProvider *, &kDirectoryProvider), nsnull, 0); + NS_ENSURE_SUCCESS(rv, FALSE); + + return TRUE; } static void @@ -130,6 +147,11 @@ static void hulahop_browser_init(HulahopBrowser *browser) { GTK_WIDGET_UNSET_FLAGS(GTK_WIDGET(browser), GTK_NO_WINDOW); +} - hulahop_startup(); +PyObject * +hulahop_browser_get_browser (HulahopBrowser *browser) +{ + return PyObject_FromNSInterface(browser->browser, + NS_GET_IID(nsIWebBrowser), PR_FALSE); } diff --git a/src/hulahop-browser.h b/src/hulahop-browser.h index d4d9215..7116999 100644 --- a/src/hulahop-browser.h +++ b/src/hulahop-browser.h @@ -20,6 +20,7 @@ #ifndef __HULAHOP_BROWSER_H__ #define __HULAHOP_BROWSER_H__ +#include <Python.h> #include <gtk/gtkbin.h> G_BEGIN_DECLS @@ -34,7 +35,10 @@ typedef struct _HulahopBrowserClass HulahopBrowserClass; #define HULAHOP_IS_BROWSER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), HULAHOP_TYPE_BROWSER)) #define HULAHOP_BROWSER_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS((object), HULAHOP_TYPE_BROWSER, HulahopBrowserClass)) -GType hulahop_browser_get_type (void); +gboolean hulahop_startup (void); + +GType hulahop_browser_get_type (void); +PyObject *hulahop_browser_get_browser (HulahopBrowser *browser); G_END_DECLS diff --git a/src/hulahop.defs b/src/hulahop.defs index c3c2854..ff7017f 100644 --- a/src/hulahop.defs +++ b/src/hulahop.defs @@ -1,9 +1,17 @@ -;; -*- scheme -*- -; object definitions ... - (define-object Browser (in-module "Hulahop") (parent "GtkBin") (c-name "HulahopBrowser") (gtype-id "HULAHOP_TYPE_BROWSER") ) + +(define-method get_browser + (of-object "HulahopBrowser") + (c-name "hulahop_browser_get_browser") + (return-type "none") +) + +(define-function startup + (c-name "hulahop_startup") + (return-type "gboolean") +) diff --git a/src/hulahop.override b/src/hulahop.override index b232bcb..bdc0729 100644 --- a/src/hulahop.override +++ b/src/hulahop.override @@ -15,3 +15,10 @@ ignore-glob *_get_type _* %% +override hulahop_browser_get_browser noargs +static PyObject * +_wrap_hulahop_browser_get_browser(PyGObject *self) +{ + return hulahop_browser_get_browser(HULAHOP_BROWSER(self->obj)); +} +%% diff --git a/tests/test-browser.py b/tests/test-browser.py index 2e3a701..317aa58 100644 --- a/tests/test-browser.py +++ b/tests/test-browser.py @@ -9,4 +9,6 @@ browser.show() window.show() +print browser.document + gtk.main() |