Monday, December 1st, 2008

Chromium Extensions Design Doc

Category: Chrome

Aaron Boodman posted about the new design document that discusses what the extension system should look like in Chromium and thus Google Chrome:

Chromium can’t be everything to all people. People use web browsers in a variety of environments and for a wide variety of jobs. Personal tastes and needs vary widely from one user to the next. The feature needs of one person often conflict directly with those of another. Further, one of the design goals of Chromium is to have a minimal light-weight user interface, which itself conflicts with adding lots of features.

User-created extensions have been proposed to solve these problems:

  • The addition of features that have specific or limited appeal (“that would be great as an extension”).
  • Users coming from other browsers who are used to certain extensions that they can’t live without.
  • Bundling partners who would like to add features to Chromium specific to their bundle.

They then define the goals:

An extension system for Chromium should be:

  • Webby
  • Developing and using extensions should be very similar to developing and using web pages.
  • We should reuse the web platform wherever possible instead of creating new proprietary APIs.
  • Web developers should be able to easily create Chromium extensions.
  • Installing and using an extension should feel lightweight and simple, like using a web app.
  • Rich
    • It should be possible to create extensions as polished as if they had been developed by the Chromium team.
    • Eventually, it should be possible to implement major chunks of Chromium itself as extensions.
  • General
    • There should be only one extension system in Chromium that handles all types of extensibility.
    • Infrastructure like autoupdate, packaging, and security should be shared.
    • Even traditional NPAPI plugins should be deployable as extensions.
  • Maintainable
    • The system should require low ongoing maintenance from the Chromium team, and minimize potential for forward compatibility issues.
    • We should not need to disable deployed extensions when we release new versions of Chromium. 
  • Stable
    • Extensions should not be able to crash or hang the browser process.
    • Chromium should assign blame to extensions that are overusing resources via tools like the task manager and web inspector.
    • Poorly behaving extensions should be easy to disable.
  • Secure
    • It must not be possible for third-party code to get access to privileged APIs because of the extension system.
    • Extensions should be given only the privileges they require, not everything by default.
    • Extensions should run in sandboxed processes so that if they are compromised, they can’t access the local machine.
    • It should be trivial for authors to support secure autoupdates for extensions.
    • We must be able to blacklist extensions across all Chromium installations.
  • Open
    • Extension development must not require use of any Google products or services.
    • Extensions should work the same in Chromium as in Google Chrome.

    As the new kid on the block, they get to learn from the good and bad of other add on systems (IE, Firefox, etc). What would you like to see? I love the idea of being able to do as much as possible by using the Web platform as it is, and doing things like adding some new APIs, but also additions to CSS and the like versus a new system.

    I would also love to see the Chromium folks working with others to start sharing some work here. For example, it would be great to have the vbox/hbox work shared. David Hyatt did a lot of work there back in the day with WebKit already.

    Posted by Dion Almaer at 1:28 am

    3.8 rating from 24 votes


    Comments feed TrackBack URI

    “We must be able to blacklist extensions across all Chromium installations.”

    No ad blockers!

    Comment by eyelidlessness — December 1, 2008

    @eyelidlessness: I think they will allow blocking every ad except google’s own :P

    Comment by SchizoDuckie — December 1, 2008

    Awww man when ever i see a post from Aaron it just takes me back like 5/6 years when i first stumbled on his sleight.js and YoungPup work :)

    Looking forward to a FireBug in chrome although i guess i should really learn to use the in built debugger.

    Comment by Phunky — December 1, 2008

    Chrome will be my number 1 browser as soon as it gets all the webdev extensions that Firefox has.

    Comment by WillPeavy — December 1, 2008

    From an ease-of-development perspective, please make it more GM and less XPI.

    It looks like this is where it’s going anyway, here’s hoping!

    As for your criteria, I’m glad to see ease of installation is important as the whole process has been a major bugbear with Firefox – it’s too complicated for novices and it’s cumbersome for everyone. In addition, I’d like to see something in the criteria about avoiding browser reboots. Most Firefox extensions have no good reason to require a restart, maybe allow extensions to declare if they need the browser to be restarted or not, and default that to OFF.

    Comment by Michael Mahemoff — December 1, 2008

    @Michael Mahemoff

    The browser restart issue is already in there: “Most extensions should be able to load in place without forcing a browser restart or even a page reload when they are installed.”

    “more GM and less XPI” is definitely the direction we’re headed. It should be as easy to create extensions as it is to create web pages.

    Comment by aboodman — December 1, 2008

    Leave a comment

    You must be logged in to post a comment.