We're hiring!
*

CEF on Wayland upstreamed

Santosh Mahto avatar

Santosh Mahto
May 08, 2019

Share this post:

CEF (Chromium Embedded Framework) provides a simple framework for embedded browser/web functionality in your application. It is built on top of Chromium and mitigates the issue of a fast-changing Chromium API with stable APIs.

Over the past few years, Collabora has been involved in a number of customer projects to port/embed CEF on their platforms. One of the major projects related to this was to port CEF on Wayland.

To give some background (see previous blog), Chromium supports multiple backends with its Ozone layer abstraction. Once Chromium is built with Ozone enabled, a specific backend (e.g Wayland, Headless, X11) can be chosen at runtime.

Some time ago, Chromium made the decision to move to a servicification of UI-related components and introduced Mus (mandoline UI service). Ozone was only functional with the Mus framework, and not with the default Aura framework.

The work therefore involved updating CEF to use Mus and use Ozone-enabled Chromium for Wayland support. After quite a bit of effort, with several Collaborans participating, patches were made available for CEF to enable its usage on Wayland. And as our goal was always to upstream these changes to CEF, we began making these patches upstream ready.

However, at that time, building mainline CEF for Wayland still required external patches to be available on the ozone-wayland-dev project. This caused some issues for the patches getting accepted by upstream.

But time passed and the Chromium project changed its mind and deprecated Mus, moving back to its original architecture which allowed Ozone to be functional with the default Aura framework. This simplified everything, and enabled the Chromium main tree to be directly built for Ozone/Wayland.

This also led to some simplification of the patch for the CEF Ozone build and after a successful team effort, the patch has finally landed upstream!

https://bitbucket.org/chromiumembedded/cef/commits/491253fa0371

Now that the patch is directly available upstream, CEF is ready to be built with different Ozone platforms (Wayland, X11, Headless).

There are still some constraints to use CEF for Ozone due to many parts of the code dependant on X11.

  • CEF Ozone is usable only in views mode (top window is created using window views)
  • cefclient is not available in Ozone build.

The CEF Ozone build binary distribution can be created by passing flag --ozone to make_distrib.py.

Here are build instructions to build/run CEF on Wayland:

$ export GN_DEFINES="use_ozone=true"
$ cd /path/to/chromium/src/cef
$ ./cef_create_projects.sh
$ cd /path/to/chromium/src
$ ninja -C out/Release_GN_x64  cefsimple
$ weston &
$ ./out/Release_GN_x64/cefsimple --use-views --ozone-platform=wayland

Screenshot:

Screenshot of CEF on Wayland

Happy coding!

Comments (2)

  1. Anand Srivastava:
    Jun 18, 2019 at 01:35 PM

    I am not able to build.
    Getting a whole lot of errors.
    ./cef_create_projects.sh tries to patch files which it can only patch for a very old version, when the ozone was not merged.
    And on the latest the merge does not happen and compile cannot work.

    Reply to this comment

    Reply to this comment

    1. santosh:
      Jun 18, 2019 at 02:29 PM

      @ Anand : Could you paste error you are getting, I doubt error might have different reason, since patch is applied in chromium source tree and ozone related changes are in CEF, so ozone related changes should not effect patch apply. Just a hint, is your chromium tree on correct revision as specified in cef/CHROMIUM_BUILD_COMPATIBILITY.txt and gclient syned ?

      Reply to this comment

      Reply to this comment


Add a Comment






Allowed tags: <b><i><br>Add a new comment:


Search the newsroom

Latest Blog Posts

Zink: Fall Update

24/10/2019

I recently went to XDC 2019, where I gave yet another talk about Zink. I kinda forgot to write a blog-post about it, so here’s me trying…

Adding stateless support to vicodec

09/10/2019

Prior to joining Collabora, I took part in Round 17 of the Outreachy internships, to work on the virtual drivers in the media subsystem…

Why HDCP support in Weston is a good thing

03/10/2019

What HDCP is, and why supporting HDCP in Weston is justified in both an economical and technical context.

Virglrenderer and the state of virtualized virtual worlds

28/08/2019

With the release of virglrenderer 0.8.0, getting accelerated OpenGL within a virtual machine (VM) made a big leap forward. Since virglrenderer-0.7.0,…

ROCK Pi and an easy place: Panfrost & Wayland on a Rockchip board

06/08/2019

Ongoing work on the reverse-engineered Panfrost OpenGL ES driver for Arm Mali GPUs has turned the RK3399 SoC into a very attractive platform…

What's new in OpenXR 1.0 & Monado?

02/08/2019

As part of its unwavering commitment to open source and open standards, Collabora is proud to be part of bringing the recently-released…

Open Since 2005 logo

We use cookies on this website to ensure that you get the best experience. By continuing to use this website you are consenting to the use of these cookies. To find out more please follow this link.

Collabora Ltd © 2005-2019. All rights reserved. Website sitemap.