firefox extension development

89
Mozilla Firefox Extensions Development Tutorial 2009, October FOSS GN09 @ Engineering College Bikaner Abhinav Chittora, Google Summer of Code Student, Xiph.org Foundation 2009

Upload: abhinav-chittora

Post on 07-Dec-2014

9.108 views

Category:

Technology


2 download

DESCRIPTION

Learn how to make Firefox extensions. I am sure it will help you.

TRANSCRIPT

Page 1: Firefox extension Development

Mozilla FirefoxExtensions

DevelopmentTutorial

2009, October FOSS GN09 @ Engineering College BikanerAbhinav Chittora, Google Summer of Code Student,

Xiph.org Foundation 2009

Page 2: Firefox extension Development

Agenda

Page 3: Firefox extension Development

Chapter 1 Firefox architectureand technology

Chapter 2 The mechanism behind Extensions

Chapter 3 Building an Extension

Page 4: Firefox extension Development

Chapter 1Firefox architecture

and technology

Page 5: Firefox extension Development

Firefoxis closer to a

Web appthan a conventional

application

Page 6: Firefox extension Development

Firefox architecture is very similar to web pages that use Dynamic HTML

Firefox

XUL

JavaScript

XPCOM

HTML

HTML

JScript

ActiveX

DHTML

HTML

JavaScript

CGI

Structure

Control

CustomizedProcesses

Page 7: Firefox extension Development

Keywords・HTML・CSS・JavaScript・XPCOM

Page 8: Firefox extension Development

XULXML-based

User-interfaceLanguage

Page 9: Firefox extension Development

XML basedUser Interface

Markup Language

Page 10: Firefox extension Development

Creates frameworkof Firefox GUI

Page 11: Firefox extension Development

<vbox><hbox><label value="Make your selection"/><menulist>

<menupopup><menuitem label="Foo 1" selected="true"/><menuitem label="Foo 2"/><menuitem label="Foo 3"/>

</menupopup></menulist>

</hbox><checkbox label="Select items" checked="true"/><hbox><label value="Enter text"/><textbox size="15"/>

</hbox></vbox>

Page 12: Firefox extension Development

Similar to HTML

A GUI widget like an HTML form

Simplifies and standardizes GUI widgetsthat were difficult to build using DHTML(Drop-down lists, scrollbars, tabs, etc.)

Can be used on the web, not just in Firefoxhttp://sakshama.org/latest/mozilla/index.xul

Page 13: Firefox extension Development

HTML-like use of XUL

Page 14: Firefox extension Development

XUL allows a variety of widgets

Page 15: Firefox extension Development

“Logic” is definedrather than “Style”

(Color, font size, etc. are defined using CSS, explained later)

Page 16: Firefox extension Development

Benefits

Page 17: Firefox extension Development

Read code,Understand logic

Page 18: Firefox extension Development

When defining menus using Java

fileMenu = new JMenu(resbundle.getString("fileMenu"));fileMenu.add(new JMenuItem(newAction)):fileMenu.add(new JMenuItem(openAction)):fileMenu.add(new JMenuItem(saveAsAction)):mainMenuBar.add(fileMenu);editMenu = new JMenu(resbundle.getString("editMenu"));editMenu.add(new JMenuItem(undoAction)):editMenu.addSeparator();editMenu.add(new JMenuItem(cutAction)):editMenu.add(new JMenuItem(pasteAction)):editMenu.add(new JMenuItem(clearAction)):editMenu.addSeparator();editMenu.add(new JMenuItem(selectAllAction)):mainMenuBar.add(fileMenu);

One needs to decipher the code

Page 19: Firefox extension Development

With XUL, one only needs to look

<menubar><menu label="&fileMenu.label;"><menupopup><menuitem label="&fileMenu.new.label;"/><menuitem label="&fileMenu.open.label;"/><menuitem label="&fileMenu.save.label;"/>

</menupopup></menu><menu label="&editMenu.label;"><menupopup><menuitem label="&editMenu.undo.label;"/><menuseparator/><menuitem label="&editMenu.cut.label;"/><menuitem label="&editMenu.paste.label;"/><menuitem label="&editMenu.clear.label;"/><menuseparator/><menuitem label="&editMenu.selectAll.label;"/>

</menupopup></menu>

</menubar>

Page 20: Firefox extension Development

Not as straightforward asWYSIWYG, but much more

intuitive than writingconventional programs

*WYSIWYG = What You See Is What You Get

Page 21: Firefox extension Development

Summary

Application Logic

Regular app C++, etc.

Web app HTML

Firefox XUL

Page 22: Firefox extension Development

1.Mozilla Developer Center (MDC)http://developer.mozilla.org/

2.Mozillazine.orghttp://mozillazine.org/

3.Extension developer toolhttp://ted.mielczarek.org/code/mozilla/ extensionwiz/

XUL Specification Resources

Page 23: Firefox extension Development
Page 24: Firefox extension Development

CSSCascading

StyleSheets

Page 25: Firefox extension Development

Stylesheet language used to describethe presentation of XML documents

in an easy to read format

#content {font-size: 10pt;border-width: 1pt;border-color: red;border-style: solid;

}

Page 26: Firefox extension Development

XUL is also styled using CSSbutton[type="menu-button"] {-moz-box-align: center;-moz-box-pack: center;margin: 0;border: none;

}

.button-menu-dropmarker,

.button-menubutton-dropmarker {margin: 1px;background-image:

url("chrome://global/skin/arrow/arrow-dn.gif");background-repeat: no-repeat;background-position: center center;min-width:11px;min-height:11px;

}

Page 27: Firefox extension Development

Build the framework using XULDress it up using CSS

Page 28: Firefox extension Development

Same as buildinga web page

Page 29: Firefox extension Development

Benefits

Page 30: Firefox extension Development

Clean separation of presentation from application logic

Page 31: Firefox extension Development

Therefore

Page 32: Firefox extension Development

Each part can bealtered independently

Page 33: Firefox extension Development

→“Theme”(or “Skin”)

of Firefox

Page 34: Firefox extension Development

Summary

Application Logic

Presentation

Regular app C++, etc. C++, etc.

Web app HTML CSS

Firefox XUL CSS

Page 35: Firefox extension Development
Page 36: Firefox extension Development

JavaScript

Page 37: Firefox extension Development

Firefox iscontrolled by

JavaScript

Page 38: Firefox extension Development

Object-oriented prototype-based language corresponding to ECMAScript(ECMA-262)3rd editionhttp://www.ecma-international.org/publications/

standards/Ecma-262.htm

Not related to Java

Page 39: Firefox extension Development

JavaScript in Firefox 2

・JavaScript 1.7ECMAScript Edition 3 extended

・E4X・ECMAScript for XML・

is supported

Page 40: Firefox extension Development

・Grammar is similar to C(easier to learn)

・Highly flexible

・Untyped variables (almost entirely)

・There is garbage collection

・Not strictly structured like Java

etc.

Page 41: Firefox extension Development

Useful when deployed

strategically

Page 42: Firefox extension Development

XULand

JavaScript

Page 43: Firefox extension Development

DOMDocument

ObjectModel

Interoperate using

Page 44: Firefox extension Development

Controls XML throughAPI of

JavaScript objects

Page 45: Firefox extension Development

Control through properties

var checkbox =document.getElementById('check');

check.checked = true;

Page 46: Firefox extension Development

Control through methods

var textbox =document.getElementById('input');

textbox.focus();

Page 47: Firefox extension Development

Create and append XUL elements

var button =document.createElement('button');

button.setAttribute('label', 'button');box.appendChild(button);

Page 48: Firefox extension Development

Useful whendynamically displaying

message text

Page 49: Firefox extension Development

Summary

Application Logic

PresentationConditional

tasks

Regular app C++, etc. C++, etc. C++, etc.

Web app HTML CSSJavaScript

Jscript

Firefox XUL CSS JavaScript

Page 50: Firefox extension Development
Page 51: Firefox extension Development

XPCOMCross

PlatformComponent

ObjectModel

Page 52: Firefox extension Development

Is a concept that binds together

Page 53: Firefox extension Development

Platform independent framework

for component development

Page 54: Firefox extension Development

Componentsdeveloped based on

this framework

Page 55: Firefox extension Development

Functionalityoffered by

these components

Page 56: Firefox extension Development

・Platform independentframework for componentdevelopment

・Components developedbased on this framework

・Functionality offered bythese components

Page 57: Firefox extension Development

XPCOM examplensIFile::create(in unsigned long type,in unsigned long permissions

)

・Creates a file・Has two parameters

File type (File or Directory)Permission (UNIX-style)

=> Permission value is ignoreddepending on the environment

Page 58: Firefox extension Development

Performs 3 functionsin Firefox

Page 59: Firefox extension Development

1Can focus on development

while ignoringlanguage differences

Page 60: Firefox extension Development

2Absorbs platform

dependent differences

Standardized API to handlemultiple platforms→Simplifies Firefox development

Page 61: Firefox extension Development

3Use the programming language

that is mostsuited to the task at hand

Page 62: Firefox extension Development

・JavaScript callsXPCOM components written in C++

・C++ callsXPCOM components written in JavaScript

・Java callsXPCOM components written in C++

...

Page 63: Firefox extension Development

Take advantageof programminglanguage traits

and divide tasks

Page 64: Firefox extension Development

Each componentis a black box

Page 65: Firefox extension Development

InFirefox

Page 66: Firefox extension Development

・If speed is necessary

・If the platform is directly accessed

Use C++

Page 67: Firefox extension Development

Development Complexity

Need to Compile

Platform dependency

Execution Speed

JavaScript Simple No Low Slow

C++ Complex Yes High Fast

Page 68: Firefox extension Development

JavaScriptand

XPCOM

Page 69: Firefox extension Development

Interoperate using

XPConnect

Page 70: Firefox extension Development

XPConnectAllows XPCOM to be accessed from JavaScript

Page 71: Firefox extension Development

Example:Create a temporary folder by calling XPCOM from JavaScript

Page 72: Firefox extension Development

const nsILocalFile = Components.interfaces.nsILocalFile;var file = Components.classes['@mozilla.org/file/local;1']

.createInstance(nsILocalFile);file.initWithPath('C:\\');file.append('temp');if (!file.exists()) {file.create(nsILocalFile.DIRECTORY_TYPE, 0755);

}

Page 73: Firefox extension Development

Benefits

Page 74: Firefox extension Development

It iscross-platform

(This is it)

Page 75: Firefox extension Development

Summary

Application Logic

Presentation

Conditional tasks

Specialized tasks

Regular app

C++, etc.

C++, etc.

C++, etc.COM .NET Framework

Web app HTML CSSJavaScript

JscriptActiveX CGI

script

Firefox XUL CSS JavaScript XPCOM

Page 76: Firefox extension Development

Review

Page 77: Firefox extension Development

Role of each technology in Firefox

Defines presentation

Controls all parts

Builds architectural framework

Black box for specialized tasks

Page 78: Firefox extension Development
Page 79: Firefox extension Development

Compare tosimilar projects

Page 80: Firefox extension Development

Logic PresentationConditional

tasksSpecialized

tasks

Firefox XUL CSS JavaScript XPCOM

Adobe AIR HTML CSS JavaScript Flash

Page 81: Firefox extension Development

Not flashy but it is solid

Platform compatibility

Platform dependency

Capable of flashy

tasksStandard

Machine code High High High -

Java Low Low High Open

Flash/AIR Low Low High Closed

Silverlight ? Low High Closed

XUL Modestly high Low Slight Open

Page 82: Firefox extension Development
Page 83: Firefox extension Development

Issues withdeveloping XUL

based applications

Page 84: Firefox extension Development

There are no WYSIWYGdevelopment environments

Page 85: Firefox extension Development

Lack of documentation

(Source code is the documentation)

Page 86: Firefox extension Development

However

Page 87: Firefox extension Development

Only a text editoris needed fordevelopment

Page 88: Firefox extension Development

AgileApplication

Developmentwith XUL!!

Page 89: Firefox extension Development

Thanks !Any Query ???