Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarco 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)
commit54bfce91fbf10e69a3782c30aa381fdbf3bc7a5d (patch)
tree63cc26baadd36078a57234119cb007dd16678c40
parente77e975333ac47677c48b57cea0ef6f785609941 (diff)
Give access to nsIWebBrowser to python
-rw-r--r--.gitignore3
-rw-r--r--Makefile.am2
-rw-r--r--components/Makefile.am1
-rw-r--r--components/browserhelper/Makefile.am32
-rw-r--r--components/browserhelper/nsBrowserHelper.js100
-rw-r--r--components/browserhelper/nsIBrowserHelper.idl13
-rw-r--r--configure.ac2
-rw-r--r--m4/gecko.m42
-rw-r--r--src/.gitignore2
-rw-r--r--src/Makefile.am4
-rw-r--r--src/__init__.py14
-rw-r--r--src/hulahop-browser.cpp30
-rw-r--r--src/hulahop-browser.h6
-rw-r--r--src/hulahop.defs14
-rw-r--r--src/hulahop.override7
-rw-r--r--tests/test-browser.py2
16 files changed, 75 insertions, 159 deletions
diff --git a/.gitignore b/.gitignore
index f36761d..30c44d6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -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()