wiki:EFLWebKit
Last modified 4 months ago Last modified on 08/24/14 18:28:57

EFL Port of WebKit

About EFL

The Enlightenment Foundation Libraries (EFL for short) are a set of graphical libraries intended to provide easy-to-use resources for building rich user interfaces based applications. It is the core of the Enlightenment (E17 to E19) desktop shell and window manager. As mentioned in Enlightenment's official web site, "the libraries are meant to be portable and optimized to be functional even on devices such as mobile devices". Its core components are:

  • Evas: Highly optimized raster canvas, supports software or hardware accelerated rendering
  • Edje: Declarative UI library, provides rich theme
  • Ecore: Event loop and utility classes to interface with system (X, DirectFB, Cocoa...)
  • Eina: Basic data types
  • Eo : The Eo generic object system. It was designed to be the base object system for the EFL.(Since EFL 1.8)

About the port

WebKit/EFL is a project aiming at porting WebKit to the Enlightenment Foundation Libraries. The port shares code with the GTK+ one, as we also use Cairo for rendering and LibSoup for networking.

Status

The port is being developed and maintained by ProFUSION, Samsung and Intel. An early version was started by INdT/OpenBossa, but it was changed significantly before inclusion in SVN (see their initial announcement at 0.1 version (Jun/16/2009)). The current version is quite complete, featuring:

  • Embedding API mostly consistent w/ Gtk, but following EFL naming scheme and conventions (such as usage of Evas Smart Objects and its callbacks);
  • Theme support per Web Frame;
  • Most of HTML5 features;
  • Various delegates to allow full customization of Pop-up and Context menus;
  • Most of page settings (auto load images, disable flash or javascript, etc);
  • Override-able input handling, allowing custom mouse and keyboard behavior;
  • WebKit2 based multi-process architecture.
  • UI-side compositing based on coordinated graphics system

For releases, samples, docs and snapshots, check http://github.com/ewebkit

Release plan and desired features

BuildBots

Samsung is maintaining several Buildbots.

Getting the source

The port is entirely in the official SVN repository. Please follow the usual instructions for obtaining WebKit's source code.

If you just want to get release version, you can download tarballs from http://download.enlightenment.org/rel/libs/webkit-efl/ (tarball is small because it contains only ewebkit related files.)

Development

Using a distro that comes with Python 3 as default

If you are working on a distro that comes with Python 3 as default, such as ArchLinux, you might need to follow these instructions to create a virtual environment which uses Python 2, in order to successfully build the Efl port. If that's the case, activate your virtual environment before starting the build process.

Dependencies

Install the base EFLWebKit dependencies:

$ Tools/efl/install-dependencies

If for some reason, you're not planning to use the dependencies for the EFL port that are pulled in via jhbuild, please make sure that (after bug 91864 lands you have an installed version of harfbuzz-ng on your system as well. Unfortunately, it usually doesn't come packaged with your distro, so grab it from http://www.freedesktop.org/software/harfbuzz/release/harfbuzz-0.9.2.tar.bz2 , build and install it manually.

About unstable dependencies requirement

The webkit-gtk folks have bumped the needed dependency some time ago to an unstable libsoup version (they track GNOME's release cycle). As we share the backend's code, we have to follow the required versions.

For our needs, at least following versions will do:

  • glib >= 2.36.0
  • glib-networking >= 2.33.2
  • libsoup >= 2.42.0

Build and Install

The port can be built using WebKit's default build-webkit script. By default, WebKit will be built in the WebKitBuild/<release type> directory, where <release type> is either Release or Debug. To override the default settings, you can set the WEBKIT_OUTPUTDIR environment variable to set a different build location.

After having checked out the source code, run the script, which will take care of calling both CMake and make.

Dependencies

WebKit EFL makes it easy to pull in dependencies using jhbuild. Before your first build, depending on your OS and installed libs, you need to retrieve the dependencies. You can do that manually by calling

WebKit$ ./Tools/Scripts/update-webkitefl-libs

or alternatively by adding the parameter

--update-efl

to the build-webkit command below.

Building

WebKit$ ./Tools/Scripts/build-webkit --efl [--update-efl]

A variety of features can be enabled or disabled by the build-webkit script, pass the --help argument to it to see all possible options (please notice some options have no effect as they depend on features which have not been implemented on the port yet):

WebKit$ ./Tools/Scripts/build-webkit --help
WebKit$ ./Tools/Scripts/build-webkit --efl --debug --prefix=/opt/webkit-efl --makeargs="-j8" --no-svg --page-visibility-api

It is also possible to pass extra arguments directly to CMake by using the --cmakeargs option.

WebKit$ ./Tools/Scripts/build-webkit --efl --cmakeargs="-DCMAKE_CXX_COMPILER=/opt/c++ -DCMAKE_PREFIX_PATH=/usr/local -DCMAKE_VERBOSE_MAKEFILE=TRUE"

As with any CMake project, it is later possible to edit the existing build configuration by using tools such as ccmake or cmake-gui.

WebKit$ ./Tools/Scripts/build-webkit --efl --debug
WebKit$ cd WebKitBuild/Debug
WebKit/WebKitBuild/Debug$ cmake-gui . # Change a few options
WebKit/WebKitBuild/Debug$ make # Build again

Building WebKit faster

The SHARED_CORE option

By default, internal WebKit libraries such as JavaScriptCore and WebCore are built as static libraries and linked into the libewebkit shared library, which is the actual port library. It is also possible to build all libraries as shared libraries, which reduces link time and memory consumption but has a slight performance hit during application startup (obviously, all the shared libraries then need to be distributed and installed).

In order to enable the SHARED_CORE option, pass --cmakeargs="-DSHARED_CORE=ON" to the built-webkit` script.

WebKit$ ./Tools/Scripts/build-webkit --efl --cmakeargs="-DSHARED_CORE=ON"

Known issues

If you can't launch MiniBrowser because of efreet (maybe ubuntu 12.10?), it might be the inotify issue.

Please try to edit below at /etc/sysctl.conf

fs.inotify.max_user_watches=1048576

reference: http://peter-butkovic.blogspot.kr/2013/08/tail-inotify-resources-exhausted.html

API Unit Tests

LayoutTests

Coding Style

Questions, feedback

If you have questions please join #webkit, #webkit-efl or #edevelop on irc.freenode.net. You may ask gyuyoung, ryuan, jinwoo, rakuco, grezegorz, mpakula, kczech or other developer there.

Information about API

Using Web Inspector

  • Web Inspector can be opened by pressing 'ctrl + i' on a web page. (for EWebLauncher/MiniBrowser)
  • Remote Web Inspector. (for MiniBrowser only)
    • The server listens on port 2999 by default. IP address of the server can be set in 'WEBKIT_INSPECTOR_SERVER'. (for example export WEBKIT_INSPECTOR_SERVER="127.0.0.1:2999")

Attachments