Building WebKitGTK+ on Ubuntu

WebKitGTK+ を VirtualBox Ubuntu（18.04）でビルド ＆ 起動する方法です。

## 環境の準備
VirtualBox Ubunt 18.04
https://www.ubuntulinux.jp/download/ja-remix
 `ubuntu-ja-18.04.1-desktop-amd64.iso` 前提で進めます。

## release tarball のダウンロード
https://webkitgtk.org/releases/ から [webkitgtk-2.22.5](https://webkitgtk.org/releases/webkitgtk-2.22.5.tar.xz) をダウンロードして解凍する。

```
$ wget https://webkitgtk.org/releases/webkitgtk-2.22.5.tar.xz
$ xz -dc webkitgtk-2.22.5.tar.xz | tar xfv -
```

## GCC のバージョンアップ
WebKit では GCC 6.0.0 以降を使っているため明示的にあげないといけない
[UbuntuにおけるGNU Compiler Collection(GCC)のバージョン管理](https://qiita.com/LxrunYutaKojima/items/41535afdf7af4d3e6ed8)
これで 6 以降のバージョンにする。

## 必要パッケージのインストール
```
$ cd ./webkitgtk-2.22.5
$ Tools/gtk/install-dependencies
$ sudo apt install ruby-dev libenchant-dev libwoff-dev
```

## ビルド
```
$ cmake -DPORT=GTK -DCMAKE_BUILD_TYPE=RelWithDebInfo -GNinja -DENABLE_MINIBROWSER=ON
$ ninja
$ sudo ninja install
```

## MiniBrowser を起動
```
$ bin/MiniBrowser
```
<img width="1084" alt="スクリーンショット 2019-02-13 11.38.50.png" src="https://qiita-image-store.s3.amazonaws.com/0/3989/bd8b3531-7c14-03b1-999a-380052be55c9.png">

## 起動オプション
```
bin/MiniBrowser --help-all
用法:
  MiniBrowser [OPTION…] [URL…]

ヘルプのオプション:
  -h, --help                                               ヘルプのオプションを表示する
  --help-all                                               ヘルプのオプションをすべて表示する
  --help-gtk                                               GTK+ のオプションを表示する
  --help-gst                                               GStreamer オプションを表示する
  --help-websettings                                       WebKitSettings properties

GTK+ のオプション
  --class=CLASS                                            ウィンドウマネージャーで利用するプログラムのクラスを指定する
  --name=NAME                                              ウィンドウマネージャーで利用するプログラムの名前を指定する
  --gdk-debug=FLAGS                                        有効にする GDK のデバッグフラグを指定する
  --gdk-no-debug=FLAGS                                     無効にする GDK のデバッグフラグを指定する
  --gtk-module=MODULES                                     追加で読み込む GTK+ モジュールを指定する
  --g-fatal-warnings                                       警告をすべて致命的と見なす
  --gtk-debug=FLAGS                                        有効にする GTK+ のデバッグフラグを指定する
  --gtk-no-debug=FLAGS                                     無効にする GTK+ のデバッグフラグを指定する

GStreamer オプション
  --gst-version                                            GStreamer バージョンを表示する
  --gst-fatal-warnings                                     Make all warnings fatal
  --gst-debug-help                                         利用可能なデバッグカテゴリを表示して終了する
  --gst-debug-level=LEVEL                                  Default debug level from 1 (only error) to 9 (anything) or 0 for no output
  --gst-debug=LIST                                         Comma-separated list of category_name:level pairs to set specific levels for the individual categories. Example: GST_AUTOPLUG:5,GST_ELEMENT_*:3
  --gst-debug-no-color                                     デバッグ出力のカラー出力を無効にする
  --gst-debug-color-mode                                   Changes coloring mode of the debug log. Possible modes: off, on, disable, auto, unix
  --gst-debug-disable                                      デバッグを無効にする
  --gst-plugin-spew                                        Enable verbose plugin loading diagnostics
  --gst-plugin-path=PATHS                                  プラグインを含むコロン (:) で区切られたパス
  --gst-plugin-load=PLUGINS                                Comma-separated list of plugins to preload in addition to the list stored in environment variable GST_PLUGIN_PATH
  --gst-disable-segtrap                                    プラグインのロード中に発生したセグメンテーション違反のトラップを無効にする
  --gst-disable-registry-update                            レジストリのアップデートを無効にする
  --gst-disable-registry-fork                              Disable spawning a helper process while scanning the registry

WebKitSettings writable properties for default WebKitWebView
  --enable-javascript=gboolean                             JavaScript を有効にします。
  --auto-load-images=gboolean                              画像を自動的に読み込みます。
  --load-icons-ignoring-image-load-setting=gboolean        画像の読み込み設定を無視してサイトアイコンを読み込むかどうかです。
  --enable-offline-web-application-cache=gboolean          オフライン Web アプリケーションキャッシュを有効にするかどうかです。
  --enable-html5-local-storage=gboolean                    HTML5 ローカルストレージのサポートを有効にするかどうかです。
  --enable-html5-database=gboolean                         HTML5 データベースのサポートを有効にするかどうかです。
  --enable-xss-auditor=gboolean                            XSS Auditor を有効にするかどうかです。
  --enable-frame-flattening=gboolean                       フレーム平坦化を有効にするかどうかです。
  --enable-plugins=gboolean                                埋め込みのプラグインオブジェクトを有効します。
  --enable-java=gboolean                                   Java サポートを有効にするかどうかです。
  --javascript-can-open-windows-automatically=gboolean     JavaScript によるウィンドウの自動オープンを許可するかどうかです
  --enable-hyperlink-auditing=gboolean                     <a ping> による ping の送信を許可するかどうかです。
  --default-font-family=gchararray                         フォントの指定をしていないコンテンツのデフォルトとして使用するフォントファミリーです。
  --monospace-font-family=gchararray                       monospace フォントを使用するコンテンツのデフォルトとして使用するフォントファミリーです。
  --serif-font-family=gchararray                           serif フォント使用するコンテンツのデフォルトとして使用するフォントファミリーです。
  --sans-serif-font-family=gchararray                      sans-serif フォントを使用するコンテンツのデフォルトとして使用するフォントファミリーです。
  --cursive-font-family=gchararray                         cursive フォントを使用するコンテンツのデフォルトして使用するフォントファミリーです。
  --fantasy-font-family=gchararray                         fantasy フォントを使用するコンテンツのデフォルトとして使用するフォントファミリーです。
  --pictograph-font-family=gchararray                      pictograph フォントを使用するコンテンツのデフォルトとして使用するフォントファミリーです。
  --default-charset=gchararray                             文字セットが指定されていないコンテンツの解釈に利用するデフォルトのテキスト文字セットです。
  --enable-private-browsing=gboolean                       プライベートブラウズを有効にするかどうかです
  --enable-developer-extras=gboolean                       Developer Extras を有効にするかどうかです
  --enable-resizable-text-areas=gboolean                   サイズ変更可能なテキスト領域を有効にするかどうかです
  --enable-tabs-to-links=gboolean                          リンクへのタブを有効にするかどうかです
  --enable-dns-prefetching=gboolean                        DNS プレフェッチを有効にするかどうかです
  --enable-caret-browsing=gboolean                         アクセシビリティを強化したキーボード操作を有効にするかどうかです
  --enable-fullscreen=gboolean                             Whether to enable the Javascript Fullscreen API
  --print-backgrounds=gboolean                             印刷時に背景の画像を描画するかどうかです
  --enable-webaudio=gboolean                               WebAudio のコンテンツを処理するかどうかです
  --enable-webgl=gboolean                                  WebGL コンテンツを表示させるかどうかです
  --allow-modal-dialogs=gboolean                           モードダイアログの作成を可能にするかどうかです
  --zoom-text-only=gboolean                                web ビューのズームレベルによる変更をテキストサイズに限るかどうかです
  --javascript-can-access-clipboard=gboolean               JavaScript にクリップボードへのアクセスを許可するかどうかです
  --media-playback-requires-user-gesture=gboolean          メディアの再生にユーザーのジェスチャを必要とするかどうかです
  --media-playback-allows-inline=gboolean                  メディア再生でインラインを許可するかどうかです
  --draw-compositing-indicators=gboolean                   合成境界線を引いてカウンターを描画し直すかどうかです
  --enable-site-specific-quirks=gboolean                   サイト固有の互換性のある回避方法を有効にします
  --enable-page-cache=gboolean                             ページキャッシュを使用させるかどうかです
  --user-agent=gchararray                                  ユーザーエージェント文字列
  --enable-smooth-scrolling=gboolean                       スムーズスクロールを有効にするかどうかです
  --enable-accelerated-2d-canvas=gboolean                  アクセラレート 2D キャンバスを有効にするかどうかです
  --enable-write-console-messages-to-stdout=gboolean       コンソールメッセージを標準出力に書き出すかどうかです
  --enable-media-stream=gboolean                           Whether MediaStream content should be handled
  --enable-spatial-navigation=gboolean                     Whether to enable Spatial Navigation support.
  --enable-mediasource=gboolean                            Whether MediaSource should be enabled.
  --enable-encrypted-media=gboolean                        Whether EncryptedMedia should be enabled.
  --enable-media-capabilities=gboolean                     Whether MediaCapabilities should be enabled.
  --allow-file-access-from-file-urls=gboolean              Whether file access is allowed from file URLs.
  --allow-universal-access-from-file-urls=gboolean         Whether or not universal access is allowed from the context of file scheme URLs

アプリケーションのオプション:
  --bg-color                                               Background color
  -e, --editor-mode                                        Run in editor mode
  -s, --session-file=FILE                                  Session file
  -g, --geometry=GEOMETRY                                  Set the size and position of the window (WIDTHxHEIGHT+X+Y)
  -f, --full-screen                                        Set the window to full-screen mode
  -p, --private                                            Run in private browsing mode
  --automation                                             Run in automation mode
  -c, --cookies-file=FILE                                  Persistent cookie storage database file
  --cookies-policy=POLICY                                  Cookies accept policy (always, never, no-third-party). Default: no-third-party
  --proxy=PROXY                                            Set proxy
  --ignore-host=HOSTS                                      Set proxy ignore hosts
  --ignore-tls-errors                                      Ignore TLS errors
  --display=DISPLAY                                        使用するXのディスプレイを指定する
```


## 参考
- [Building WebKitGTK+ from a release tarball](https://trac.webkit.org/wiki/BuildingGtk#BuildingWebKitGTKfromareleasetarball)
- [WebKitGTK+ の概要（WebKitGTK+-2.20.5だけど。）build オプションなどが書いてある](http://lfsbookja.osdn.jp/BLFS/svn-ja/x/webkitgtk.html)
- [WebKit2GTK+ Reference Manual](https://webkitgtk.org/reference/webkit2gtk/2.22.5/)