Oxide: using the Chromium Content API in Ubuntu

Registered by Jamie Strandboge on 2013-08-21

https://blueprints.launchpad.net/ubuntu/+spec/client-1303-webkit-maintenance discussed how to support a webkit-based engine in Ubuntu and SDK applications. We have decided to use the Chromium Content API for Canonical-supported applications and the default webview for Ubuntu SDK applications. Oxide (https://launchpad.net/oxide and http://www.chriscoulson.me.uk/blog/?p=196) was started to make the Chromium Content API usable in Ubuntu and includes a preliminary Qt5/QML binding and is now at a point where others can contribute. This session aims to define the work items needed to use Oxide in the SDK, webbrowser and any other Canonical-supported applications that need a webview.

Blueprint information

Jamie Strandboge
Chris Coulson
Chris Coulson
Series goal:
Accepted for trusty
Milestone target:
milestone icon ubuntu-14.04
Started by
Jamie Strandboge on 2013-08-21
Completed by
Jamie Strandboge on 2014-05-07



jdstrand> most work is tracked as bugs in https://bugs.launchpad.net/oxide

Etherpad dump from vUDS-1308 session (http://pad.ubuntu.com/uds-1308-client-1308-oxide):

Review and assign bugs in https://bugs.launchpad.net/oxide
 * HIGH #1214033 Implement navigation API - oSoMoN
 * HIGH #1214034 Implement API for querying SSL status and certificate information - chrisccoulson
 * HIGH #1214035 Dialog integration (with permission) - oSoMoN
 * HIGH #1214037 Permission request handling (with permission) - oSoMoN
 * HIGH #1214041 Embedder <-> content script messaging API - chrisccoulson
 * HIGH #1214049 Support accelarated compositing - chrisccoulson
 * MEDIUM #1214040 Visited link tracking (perhaps with history interface or zeitgeist or U1DB)
 * MEDIUM #1214045 Support overriding the user agent string - chrisccoulson
 * MEDIUM #1214048 Support autocomplete
 * LOW #1214046 Add support for navigator.registerProtocolHandler

Decide on which bugs in https://bugs.launchpad.net/oxide are required for feature parity with QtWebkit
 - the HIGH bugs above

Discuss relationship between oxide and cordova
 - would use oxide like how cordova currently uses qtwebkit. There are several properties for dealing with local files, etc, but basically like webapps/embedded

Discuss additional requirements that haven't already been captured from other stakeholders
- none

What is the status of using oxide with QML?
 - works. need to build chromium content api. Chris will put up a wiki

dev package for chromium? not really because not intended to be consumable. Likely more work than it is worth.
- Ping Chad if it's interesting. He can extract headers, but can't guarantee they're stable.

does visited link tracking work in qtwebkit?

does oxide work with chromium 30? works with latest trunk

how will this work when developing packages?
 - various branches and update in same way as we update chromium (ie, stable, beta, trunk)
 - some churn, but not difficult. mostly around move away from webkit

when is it targeted?
 - 14.04

why do we need a change in the import line at all? Ie, just replace qtwebkit with oxide
 - it would prevent parallel installs of qtwebkit and oxide
 - ties us into an external api, which is what we want to avoid
 - for simple embedders, the api will be very similar

what about working with Digia?
 - we will work with them to the extent we can (ie, working with chromium at a low level), but their model is the qtwebkit model which is a different timescale than ours, with tight qt integration. oxide provides us with the LTS support and flexibility to optimize for webbrowser, webapps, etc

what about existing webapps stuff?
- don't worry for now-- we will look at it and make adjustments/etc as necessary so the transition is smooth

postponed work captured in https://blueprints.launchpad.net/ubuntu/+spec/client-1410-oxide


Work Items

Work items for ubuntu-13.10:
[chrisccoulson] Embedder <-> content script messaging API: DONE
[chrisccoulson] get oxide into a state where others can contribute: DONE

Work items for ubuntu-13.11:
[chrisccoulson] wiki page on getting started with developing oxide: DONE
[chrisccoulson] figure out mailing list: DONE
[jdstrand] ask QA about CI since full rebuild per commit will be painful: DONE
[osomon] implement navigation API (bug #1214033): DONE
[chrisccoulson] package oxide-qt in a ppa: DONE
[chrisccoulson] Support accelerated compositing (bug #1214049): DONE

Work items for ubuntu-13.12:
[jdstrand] adjust click-review-tools to warn QtWebkit imports and recommend UbuntuWebview: DONE
[abreu-alexandre] Add an API to allow content scripts to bind objects to the main world global object (bug #1221996): POSTPONED
[jdstrand] verify/adjust apparmor-easyprof-ubuntu policy for Oxide: DONE

Work items for ubuntu-14.01:
[chrisccoulson] perform some benchmarks on (at least) armhf, compare to qtwebkit (ie, UbuntuWebview qml) and send to list: DONE
[osomon] dialog integration (bug #1214035): DONE

Work items for ubuntu-14.02:
[chrisccoulson] Migrate from qmake to cmake to get cross-compiling support, etc.: DONE
[chrisccoulson] upload oxide-qt integration to Ubuntu: DONE
[chrisccoulson] enable daily builds: DONE

Work items for ubuntu-14.03:
[abreu-alexandre] Cordova integration (bug #1217439): POSTPONED
[chrisccoulson] fix high and critical oxide bugs tagged with 'application-confinement': POSTPONED
[chrisccoulson] Implement API for querying SSL status and certificate (bug #1214034): POSTPONED
[rsalveti] hook oxide up to platfrom API (bug #1249387): POSTPONED
[osomon] permission request handling (bug #1214037): POSTPONED
[chrisccoulson] Support overriding the user agent string (bug #1214045): DONE
[osomon] work with bzoltan to transition UbuntuWebview out of webbrowser-app to SDK and to use Oxide: POSTPONED

Work items:
[zaspire] Investigate API for delegating navigation decisions to the embedder (bug #1259219): DONE
implement bug #1214040 Visited link tracking (perhaps with history interface or zeitgeist or U1DB): POSTPONED
Support autocomplete (bug #1214048): POSTPONED
Use a localized Accept-Language header (bug #1224707): POSTPONED
Add support for navigator.registerProtocolHandler (bug #1214046): POSTPONED
Stop using QT_USE_NAMESPACE (bug #1219396): POSTPONED

Dependency tree

* Blueprints in grey have been implemented.