注意
これはただの備忘録です
最終目標
ブラウザの表示部分をNSView(のサブクラス)として簡単に取り扱えるようにする
導入
これをそのまま実行
https://bitbucket.org/chromiumembedded/cef/wiki/MasterBuildQuickStart#markdown-header-mac-os-x-setup
out/Debug_GN_x64 内の Chromium Embedded Framework.framework
とlibcef_dll_wrapper.a
をリンクする。
libcef_dll_dylib
はあとで調べる。
dSYMが5GBぐらいあるので注意。
何か変な時
create.shが失敗する時
code/chromium_git/chromium/src
でgclient runhooks
かgclient 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は非対応。