Proceedings of the 4Th Annual Linux Showcase & Conference, Atlanta
Total Page:16
File Type:pdf, Size:1020Kb
USENIX Association Proceedings of the 4th Annual Linux Showcase & Conference, Atlanta Atlanta, Georgia, USA October 10 –14, 2000 THE ADVANCED COMPUTING SYSTEMS ASSOCIATION © 2000 by The USENIX Association All Rights Reserved For more information about the USENIX Association: Phone: 1 510 528 8649 FAX: 1 510 548 5738 Email: [email protected] WWW: http://www.usenix.org Rights to individual papers remain with the author or the author's employer. Permission is granted for noncommercial reproduction of the work for educational or research purposes. This copyright notice must be included in the reproduced paper. USENIX acknowledges all trademarks herein. Mozilla as a cross-platform application development framework David Ascher, Eric Promislow, Dick Hardt ActiveState Tool Corporation 1 Outline • Overview of Mozilla as an application development framework • Building portable user interfaces with XUL, XBL and JavaScript • XPCOM: Mozilla's component strategy • Architecture of the Komodo IDE, a large non- browser Mozilla application • Lessons learned in working with Mozilla Mozilla Overview • XML & JS define the UI • Components (think of them as classes) define the implementation/backend • NSPR is a portable runtime library • Necko is network library • Oh yeah, there’s a layout engine too… (Gecko) • Emphasis on standards compliance 2 UI TLAs • XUL: XML dialect for layout of widgets • XBL: XML dialect for association of behaviors with widgets • JavaScript: What to do on events • Skins: switchable themes XUL Example <?xml version="1.0"?> <?xml-stylesheet href="chrome://mypackage/skin/" type="text/css"?> <?xul-overlay href="chrome://mypackage/content/myOverlay.xul"?> <window id="main-window" xmlns:html="http://www.w3.org/TR/REC-html40" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" onload="EditorOnLoad()" > <script language="JavaScript" src="chrome://mypackage/content/demo.js"/> <box orient="vertical"> <button id="Spam" flex="2" oncommand = "DoIt()" /> <button id="Foo" flex="1"/> <button id="Eggs" flex="1"/> </box> </window> 3 XPCOM • Cross-platform component model • Much like COM, without IDispatch • C++, JavaScript supported by Netscape • Python and Perl support by ActiveState • Define an IDL file, an implementation, and can call from any language (e.g. JS in a XUL file) IDL Example: [scriptable, uuid(D1899240-F9D2-11D2-BDD6-000064657374)] interface nsISimpleEnumerator : nsISupports { boolean hasMoreElements(); nsISupports getNext(); }; 4 Python Implementation from xpcom import components class SimpleEnumerator: _com_interfaces_ = [components.interfaces.nsISimpleEnumerator] _reg_desc_ = "Python SimpleEnumerator Implementation" _reg_progid_ = "Python.SimpleEnumerator" _reg_clsid_ = "{E4EE2533-F5BD-4c2c-BEDF-5EC4A35BC609}" def __init__(self): self._data = [] self._index = 0 def hasMoreElements(self): return self._index < len(self._data) def getNext(self): self._index = self._index + 1 return self._data[self._index-1] JS Usage Pattern var winEnumerator = foo.getEnumerator(); while ( winEnumerator.hasMoreElements()) { var myWindow = winEnumerator.getNext(); … do something with myWindow … } The enumerator could be written in C++, Perl, Python, JavaScript, … 5 Architecture of Komodo IDL IDL IDL Python Python Python Perl Perl Perl XPCOM Py/XPCOM Perl/XPCOM XPCOM Core XPCONNECT C++ C++ JS JS JS Non-XPCOM Parts of Mozilla including: Access to DOM manipulation Other Key Tech • Gecko (Layout) • DOM / XML • Network APIs • RDF • NSPR • Java • Crypto • Mail/News/Composer/Chatzilla/… • SVG? XSLT? 6 Lessons learned • XPCOM is a great foundation to build on • Mozilla is huge, but worth investigating • Get involved! – www.mozilla.org – Newsgroups, Bugzilla, IRC • Netscape is a great partner • Unique opportunity for Linux community 7.