Edited at

[macOS] ネイティブで殴るCEF - 備忘録


注意

これはただの備忘録です


最終目標

ブラウザの表示部分をNSView(のサブクラス)として簡単に取り扱えるようにする


導入

これをそのまま実行

https://bitbucket.org/chromiumembedded/cef/wiki/MasterBuildQuickStart#markdown-header-mac-os-x-setup

out/Debug_GN_x64 内の Chromium Embedded Framework.frameworklibcef_dll_wrapper.aをリンクする。

libcef_dll_dylibはあとで調べる。

dSYMが5GBぐらいあるので注意。


何か変な時


create.shが失敗する時

code/chromium_git/chromium/srcgclient runhooksgclient syncを実行してみる


次やること


  • なにしよう


CEFに関して今までに分かったこと


CefBrowser

CefWindowInfo window_info;

window_info.hidden = true;

これを設定してCefBrowserを生成すれば生成時にウインドウが表示されない。


CefWindow

これが弄るターゲット。

native側のNSView(CefBrowserHostViewクラス)を持ってる。 Windowなのに。

auto nsview = (NSView *)browser_->GetHost()->GetWindowHandle();

で取得可能。

上記Viewから

NSWindow *window = view.window;

でCefBrowserが持つNSWindowが取得できる。

このウインドウのクラスはUnderlayOpenGLHostingWindow。

delegateとしてCefWindowDelegateのインスタンスが設定されている。

このウインドウを破棄するとviewも破棄されてしまう。

NSWindowControllerは設定されていない。


イベントループ

native側が無視するイベントを全部CEFに流し込む感じ?


UAの設定

CefSettings settings;

const char *ua = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/605.1.15 (KHTML, like Gecko) KCD(2.0a0) is not Chrome/70.0.3538.0";

CefString(&settings.user_agent).FromASCII(ua);


Accept-Languageの設定

CefSettings settings;

CefString(&settings.accept_language_list).FromASCII("ja-JP,en-US;q=0.5,en;q=0.1");


わからん

windowless_viewとかあるがちょっと意味が違う。

view-baseとかあるがmacOSは非対応。