Potential Projects
Contents
- 1 Introduction
- 2 Projects
- 2.1 Sample Project
- 2.2 Mozilla Tree Visualization
- 2.3 Mozilla Data Visualization Back-ends
- 2.4 Add OpenID support to Bugzilla
- 2.5 Tbeachball - Quantifying Mozilla's Responsiveness
- 2.6 Port distcc to MSYS
- 2.7 Add Multi-File transfer to distcc
- 2.8 Add password managers for various platforms
- 2.9 Convert password storage to a SQLite database
- 2.10 Refactor master password out of NSS
- 2.11 Add Offline Support to an open source web app
- 2.12 Thunderbird SMTP Auto-Sensing
- 2.13 Firefox Session Saver Extension
- 2.14 Bugzilla component-watching
- 2.15 Litmus Extension
- 2.16 "Avoid loading the same page twice" Extension
- 2.17 Firebug "linting" for portability problems
- 2.18 Add-on update helper tools for developers
- 2.19 Make FUEL work with Firefox 2
- 2.20 XULRunner Application Packaging
- 2.21 Embeddable HTTP Engine
- 2.22 Universal Firefox on a USB Key
- 2.23 'Compact databases' feature for Mozilla calendaring applications (Lightning, Sunbird)
- 2.24 Thunderbird Draft Scheduler Extension
- 2.25 Spellcheck Extension for Arbitrary Web Pages
- 2.26 Webpage Delta Debugger
- 2.27 Modify Firefox to throttle Plugins when Inactive
- 2.28 Modify Firefox to handle files downloaded to Temp more appropriately
- 2.29 Implement Audio and Visual Mute in the Browser
- 2.30 Standalone Test Harnesses
- 2.31 Provide a way to easily perform bookmark queries in JS
- 2.32 Provide an easier mechanism for creating History Listeners in JS
- 2.33 Add source checkout to buildbot
- 2.34 Thunderbird Picture Preview
- 2.35 Thunderbird Image Auto-Resize
- 2.36 Local MXR
- 2.37 Port the Firefox Release Repackager to other platforms
- 2.38 Add MSI packaging to the Firefox build system
- 2.39 Leverage Socorro as a Metrics collector
Introduction
This is a list of potential projects that need people. If you'd like to work on one of these, move the chosen project to the Project List and create a page for your work based on the Sample Project template.
Projects
Sample Project
This is a sample project stub. You can use the template for Sample Project in order to create a project page for one of the stubs below. This is how you 'sign-up' for a project.
NOTE: if someone has already created the project page, speak to this person and see if you can join them. If so, simply add your name to the Project Leader(s) page. Otherwise, you can become a contributor later.
Mozilla Tree Visualization
Use the canvas element in order to create a generic front-end for data visualization of the Mozilla source. Many types of information about the Mozilla project can be keyed to the source tree. For example, file change-rates, code-coverage, bug activity per module, checkins per module, etc. The visualization will be a heatmap, showing certain types of activity in the tree. Doing this visualizaiton using canvas3d would allow for a third axis, and changes over time to be shown.
Mozilla Data Visualization Back-ends
Create a data-source for the Mozilla Tree Visualization project. This means data mining cvs.mozilla.org, bugzilla.mozilla.org, bonsai.mozilla.org and preparing the data for use in a heatmap visualization.
Add OpenID support to Bugzilla
Many open source projects rely on bugzilla for bug tracking, and open source developers use different instances, forcing them to have multiple logins. Complete OpenID support in bugzilla.
References: see bug 294608
Tbeachball - Quantifying Mozilla's Responsiveness
This project will add instrumentation to Mozilla in order to determine how much time is spent away from the main event loop, and therefore from the user's mouse/keyboard input. When the user does something, how long does it take for Mozilla to act on that stimulus? One thing that sometimes interferes with interface responsiveness is spending too long away from the main event loop, perhaps in layout or some other intensive computation. This leads to new events from the user, such as mouse clicks or keypresses, not being noticed and acted upon. This could also be expanded in order to include the triggering of log points and specific dialog openings, etc. with a view to understanding what the long-running events actually are.
References: http://shaver.off.net/diary/2007/08/25/tbeachball/ and http://shaver.off.net/misc/latency-tracing-patch.txt
Port distcc to MSYS
The recent work to add MSVC support to distcc works using the cygwin build environment. However, since this project was completed, Mozilla has switched to MSYS (see the [http://developer.mozilla.org/en/docs/Windows_Build_Prerequisites Mozilla Win32 build docs). Port distcc so that it works with the new MSYS environment.
References: Cesar and Tom
Add Multi-File transfer to distcc
The recent work to add MSVC support to distcc only allows for a single file to be sent back from build slaves. This means that extra debugging info (e.g., .pdb files) cannot be sent with binaries. Modify distcc so that it can support debug Mozilla builds.
References: Cesar and Tom
Add password managers for various platforms
Previous work was done on adding OS X Keychain integration to Firefox. This work was focused on tightly binding C++ and Mac API calls. Since then more work has been done to modularize the password manager in Firefox. Various platform "keychains" need to be integrated with the new system. See bugs 309807, 106400, and 371000. See also this e-mail message.
Convert password storage to a SQLite database
Currently, Firefox stores logins in a text file in the user's profile (signons2.txt). The format is simple, but inflexible. Storage of other browser data, such as cookies and form history, has steadily been moving towards using SQLite-backed databases so moving password storage to the same kind of storage would be good. Some work was started in bug 288040.
Refactor master password out of NSS
Users can enable a "master password" in their browser, which securely encrypts all their stored passwords. The current implementation can be awkward to use and has some limitations, see bug 322617. Fixing this would involve having password manager being more involved with the cryptography operations -- deriving a key from a passphrase with PKCS#5, and using NSS and PKCS#11 to encrypt/decrypt entries.
Add Offline Support to an open source web app
Firefox 3 will support offline abilities, such that web developers can write their apps so they work even when no network is present. Good headway has been made already porting Zimbra. Pick another web app and add offline support, for example: Moodle.
Thunderbird SMTP Auto-Sensing
Modify Thunderbird so that it uses the correct SMTP server for your current network and IP. In other words, if you are at home, use your home ISP's SMTP, but if you use a school wireless network, switch to the school's SMTP. These various SMTP configurations should be manually controlled by the user, that is, you don't have to try and figure out which SMTP to use. Rather, it should be configurable in an options dialog.
Firefox Session Saver Extension
Write a simple (i.e., nothing more than a simple "save session") extension to leverage the existing Session Store API in order to allow the user to save his/her currently open tabs and restore them. This is similar to what Firefox does when it unexpectedly crashes and gives the user the option to restore a previous session. NOTE: there are extensions that do this already, but many of them are more feature rich than need be. See also this blog post.
Bugzilla component-watching
It's common for a developer to want to "watch" all the bugs that are filed in a certain Bugzilla component. Mozilla uses a convoluted and painful system of synthetic accounts to simulate this capability, and we'd all really prefer to be able to do it more directly and with less opportunity for error.
Reference: Bug 76794
Litmus Extension
We wanted to have an extension that would be able to serve users testcases to try and allow them to submit results to http://litmus.mozilla.org. We could expand the feature set of the extension to do a lot of other cool things with Bugzilla and Website Reporter integration. So we need some ideas there. If you're interested, you could consult the work of David Hamp-Gonsalves, who created the Buggy Bar extension.
"Avoid loading the same page twice" Extension
Create an extension to Firefox so that when a bookmark is clicked, and that site is already open in any tab in any window, that tab/window is brought to the front rather than loading the page again.
Related tech and skills: XUL, JavaScript
Firebug "linting" for portability problems
Lots of web developers use Firebug and Firefox for building their applications, but we want those apps to work well in other browsers as well. If Firebug knew about JS or CSS patterns that could cause problems in other browsers, it would make it much easier to have those applications work in all browsers.
Add-on update helper tools for developers
As Firefox 3 gets ramped up, there are nearly 3000 add-ons that need to get updated to some degree. Write tools (web or XULRunner) to look in add-ons and find things that developers will need to update. You'll want to work with the Mozilla documentation and evangelism teams to figure out what you're looking for and what to recommend to users.
Make FUEL work with Firefox 2
Mozilla's FUEL (Firefox User Extension Library) is a JavaScript Library designed to help developers build extensions using terminology and interfaces that are more familiar to them. Currently it works with Firefox 3, but it would be helpful to have it work with Firefox 2 as well. Work toward having the existing FUEL Tests pass for Firefox 2.
XULRunner Application Packaging
Help to develop an automated packaging system for XULRunner applications.
Resources: plasticmillion, mfinkle, #mozpad
Embeddable HTTP Engine
Create an HTTP facility (transport, not rendering) for desktop apps that shares cache and cookies with the browser -- basically export the firefox http engine. A dbus-exported proof-of-concept exists which which shows some basic structure. A better solution would support more http features, avoid the dbus daemon for large files, and use Firefox instead of libcurl. One challenge is making this work when Firefox is not running. Resources: RH online desktop team.
Universal Firefox on a USB Key
Create a portable USB installation of Firefox that will work on all of Windows, Linux, and Mac. Currently there are binaries for doing this with Windows/Linux. You'll need to get binaries for the app on each platform, figure out how to share a common profile, and get it all on a single USB key. Some existing work in this area has been done, and could be built upon.
'Compact databases' feature for Mozilla calendaring applications (Lightning, Sunbird)
Add the possibility to compact the database for local storage calendars based on SQLite using the VACUUM command. At the moment the local database for events and tasks will not get smaller even if you delete your tasks and events. This has serious performance implications for people, who work a lot with their calendar.
See also Bug 352976
Resources: ctalbert, daniel in #calendar on irc.mozilla.org
Thunderbird Draft Scheduler Extension
Write an extension for Thunderbird so that the user has the ability to mark a draft email for sending later. This is not the same as having to save emails in your DRAFT box because users would have to remember to go back in and click Send later. What is different here is that users could set the date and time for each email to be sent. This feature would be helpful to those who work late into the night but prefer not to send emails at such a late hour. This feature would also benefit support staff, e.g., administrative assistants, who constantly have to send out regular email reminders, e.g., for meetings, timesheets, etc.
Resources: Vivian Ngo
Spellcheck Extension for Arbitrary Web Pages
Write an extension to leverage the existing spellcheck code in Mozilla and add the ability to highlight spelling mistakes for a given web page (i.e., vs. a textbox).
Webpage Delta Debugger
It'd be really nice to have a webpage "delta debugger" extension - something where the user could make a change, save a complete copy of the document post-change, load it in the browser again, and see if the bug's still there. If it is, user makes another change, gets another complete copy saved, loads the new copy, lather rinse repeat. If the bug isn't there, scrap the newly saved copy, but allow the user to annotate it, saying "Hey, I tried this already, don't try it again".
Suggestions include wrapping Jesse Ruderman's "Lithium" testcase reducer project into an user-friendly Firefox extension, or a DOM Inspector-like tool, focusing on a representation of the tree of DOM nodes.
Resources: Alex Vincent (WeirdAl in #developers on irc.mozilla.org)
Modify Firefox to throttle Plugins when Inactive
Modify the browser so that it throttles plugins back when the user/browser/system is inactive. Consider, for example, work that has been done in Safari. You could consider doing this via the IdleService, with an observer set to go off at an appropriate interval. You should also consider how to deal with the case of videos (YouTube). Perhaps keep a white list of movie sites, or other plugin-dependent content that shouldn't be throttled.
Modify Firefox to handle files downloaded to Temp more appropriately
Often files downloaded by the browser are put in a temporary folder that is emptied on close. Users (and especially novice users) should be protected from inadvertent data loss as a result of important files being saved to this temp folder. This project will add fixes to the browser so that users are protected. Ideas include:
- Make Firefox aware of common productivity file types (e.g., .doc, .pdf) and whitelist these types so they aren't deleted
- Have office type files download automatically to a documents folder instead of temp
- Firefox could check the timestamp of such files and delete them only if the timestamp is the same as when it was originally saved by the browser (i.e., has not been edited)
- Warn the user on closing the browser that files are going to be removed
- Assuming files still exist on start-up (see above), alert the user that these files are still there (similar to "New Session or Restart Existing?" dialog)
- Have the browser pop-up a Save As dialog instead of automatically saving to temp, and use a documents path
Other ideas are possible, and a combination of these might be necessary. Ultimately, this fix should target regular users without much knowledge of the filesystem.
Implement Audio and Visual Mute in the Browser
It would be useful if you could pause/mute/freeze distracting content in a tab. Often this means plugins, which are playing music or animating. One possible solution is to expose the API that bfcache uses to freeze/thaw a window, since plugins are themselves "windows." Other platform specific approaches may also be available (e.g., hooking sound API calls in Windows).
References: http://www.melez.com/mykzilla/2007/04/tab-specific-mute.html
Standalone Test Harnesses
Mozilla uses several systems for automated testing, including Mochitest, Reftest, xpcshell unit tests, and crash tests. Currently, to run these test suites or develop new tests, you need to build your own Firefox with --enable-tests, and run the tests from the object directory. Ideally there would be a standalone package available for download that would let you run these test suites against any Firefox build, to ease development of new tests and allow more people to get involved with automated testing.
- References: http://xoatlicue.blogspot.com/2008/01/standalone-test-product.html
- Possible Resources: Rob Campbell (robcee), Ben Hearsum
Provide a way to easily perform bookmark queries in JS
Right now the only way of finding bookmarks in FUEL is to recursively iterate folders beginning with the root. Because the assumption is that in Firefox 3 users are going to accumulate a lot of bookmarks, this could be not efficient enough (not to mention inconvenient). It would be useful if FUEL provided an interface for querying bookmarks, as a wrapper for nsINavHistoryQuery and friends. An example of how it could look like in action:
var query = bookmarks.newQuery(); query.type = "folder"; query.searchTerms = "goats"; var results = query.execute();
References: Mark Finkle (mfinkle), bug 409279
Provide an easier mechanism for creating History Listeners in JS
A better way for adding easy history event listeners to FUEL is needed, perhaps. Some initial design work has been done on this, see bug 406974.
References: Mark Finkle (mfinkle)
Add source checkout to buildbot
Unlike many open source projects, it's not possible to do a CVS checkout and build the code. This is due to the complex module and version combinations necessary to get and build a particular product, for example Firefox. To accomplish this, Mozilla uses client.mk, which provides a set of rules for getting and building the code.
Increasingly, Mozilla is moving toward using the Python based buildbot system for automated builds and tests. It would be good to add a Source class for client.mk checkouts. This would mean creating a a general Source class that understands the idea of checking out a file, and which could then be used to drive the checkout and allow for integration with client.mk.
References: Rob Helmer (rhelmer)
Thunderbird Picture Preview
Write an extension for Thunderbird that allows the user to start a slideshow preview of all images in the current message. The feature would work like this: when a mail arrives with pictures attached, a button or some other UI is added to the message that allows the slideshow to begin. When clicked, the images are shown one after the other, properly scaled to fit in the window. Consider using Canvas to do the custom graphics, and take a look at this existing Thunderbird extension for ideas.
Thunderbird Image Auto-Resize
Write an extension for Thunderbird that gives functionality similar to that of Outlook, where image attachments in an email can be automatically re-sized to one of a set of smaller sizes. This is helpful for users who would otherwise try to send megabytes of image data, when they can safely scale the images down and still share their pictures with friends.
Local MXR
Many developers without highspeed network access would like to be able to use MXR but can't. Build a lightweight, installable Windows package that gives the full functionality of MXR locally. Create a Prism front-end specific for the task of using this local MXR.
Resources: MXR source, patches to lxr in the tree
Port the Firefox Release Repackager to other platforms
The Firefox Release Repackager allows one to take a released version of the browser, deconstruct it in order to add some custom extension, then repackage it. This allows organizations to ship slightly modified versions of stock releases, useful for their users. Currently the repackager only works on Mac.
Port this tool to Windows and/or Linux. In order to do this you'll need platform binaries of 7zip, or perhaps you can use P7zip to do a cross platform version. There are other ideas that can be added to this tool as well for making it more flexible.
Resources: mkaply, bsmedberg
Add MSI packaging to the Firefox build system
Firefox is not currently available on Windows as an MSI, which is something IT departments and others deploying on many desktops routinely request. The Windows Installer XML toolset (WiX) is an open source tool provided by Microsoft that allows the creation of MSI files based on XML config files. This project will add MSI packaging to the Firefox build system so that it happens by default.
Resources: mkaply, ted, http://www.frontmotion.com/Firefox/index.htm, http://forums.mozillazine.org/viewtopic.php?t=138033
Leverage Socorro as a Metrics collector
Mozilla has existing code that could be used to create a metrics collector. More details to follow...
Resources: shaver, ted