Mercurial > firefox-enso
view enso_pyxpcom.py @ 0:b1c0ab5d5f14
Origination, originally taken from the about:python source code from pyxpcom.
author | Atul Varma <varmaa@toolness.com> |
---|---|
date | Thu, 08 May 2008 11:06:36 -0700 |
parents | |
children | 6e4335fa3321 |
line wrap: on
line source
from xpcom import components, verbose import sys, os import logging import platform _ensoStarted = False def getAbout(): global _ensoStarted import enso if not _ensoStarted: logging.info("Launching Enso.") _ensoStarted = True enso.run() return "Enso is running." class ShutdownObserver: _com_interfaces_ = components.interfaces.nsIObserver def observe(self, subject, topic, data): print "quit-application received; calling sys.exitfunc()." sys.exitfunc() class AboutPython: _com_interfaces_ = components.interfaces.nsIAboutModule _reg_contractid_ = '@mozilla.org/network/protocol/about;1?what=enso' _reg_clsid_ = '{6d5d462e-6de7-4bca-bbc6-c488d481351c}' _reg_desc_ = "about:enso handler" def __init__(self): logging.basicConfig( level=logging.INFO ) logging.info("Setting shutdown observer.") observerService = components.classes["@mozilla.org/observer-service;1"].getService(components.interfaces.nsIObserverService) observerService.addObserver(ShutdownObserver(), "quit-application", False) def newChannel(self, aURI): ioService = components.classes["@mozilla.org/network/io-service;1"] \ .getService(); istream = components.classes["@mozilla.org/io/string-input-stream;1"] \ .createInstance() about = getAbout() istream.setData(about, len(about)) channel = components.classes["@mozilla.org/network/input-stream-channel;1"] \ .createInstance(components.interfaces.nsIInputStreamChannel) channel.setURI(aURI) #channel.contentType = "text/html" channel.contentStream = istream return channel def getURIFlags(self, aURI): return 0;