The idea with the new embedding API is to provide an easier way to embed Mozilla in other applications. The existing API using XPCOM has quite a steep learning curve for new-comers. We would like to improve this with the new API. This is done by making a new API on top of the existing one, which also helps shield embedders for changes in the underlying API, hopefully making things more stable long term.
For some more background check Chris Blizzard's blog entry.
The new API has a common C++ layer built on top of the existing API. The new API thus encapsulates many of the complexities of setting up and using XPCOM.
The common layer is then used by platform/toolkit specific APIs. This will allow embedders to use components that fit well into their application, e.g. GTK or Qt widgets.
Having the common layer also makes it a lot easier to add support for additional toolkits as this should only require a relative thin wrapper.
It is however still possible to access the underlying XPCOM API, see here
The common layer is implemented using plain C++. For strings we are using char* encoded as utf-8. When methods return pointers to newly allocated buffers (e.g. strings) it is the responsibility of the caller to free those.
There are 2 main classes for embedding:
This represent a browser view, capable of displaying content. It should be connected to a window or widget. It also has a listener interface that can be used to get notified of events like when a document has finished loading.
This class provides access to things like preferences. NOTE: it is optional to use this, i.e. if you don't need the functionality provided by MozApp you don't need to use it.
You can find class documentation here
Getting the code
hg clone http://hg.mozilla.org/incubator/embedding/ mozembed
(This repository was taken offline by bkero. Please contact him in #it on irc.mozilla.org if you would like the contents of this repository)