Closed HashidaTKS closed 2 weeks ago
https://github.com/chromiumembedded/cef/issues/3685 の変更によるもの。
上記のMigration routeに従って
CefSettings.chrome_runtime = true
とするとプレビューが動作するようになったが、右クリックのメニューに不要なアイテムが表示されるなど、別の影響が起きる。 Alloyスタイルにする方も試してみる。
runtime_styleを指定する必要があるのだが、これはCEF125から導入されていて、CEF124では導入されていない。
CEF125を使って、
info.runtime_style = CEF_RUNTIME_STYLE_ALLOY;
としたが、これで動かすと印刷プレビューを表示するとChronosがフリーズしたりする。
https://magpcss.org/ceforum/viewtopic.php?f=6&t=19413
chrome_runtime
を有効にした場合、「印刷」メニューのIDなどがAlloyモードのときと変わるので、OnBeforeContextMenu
でいじっているコンテキストメニューのIDなどもそれに追随して変更しないといけない。
簡単にできる対応ではない...。
また、chrome_runtime
を有効にすると、Chronos起動時に勝手にいくつか別のウィンドウが開き、そこでGoogleが開いたりするので、さらに別の対応も必要。
https://magpcss.org/ceforum/viewtopic.php?f=6&t=19413 の通り、Chrome runtimeが有効だと別のIDになるので、それらを削除したり、Chronos独自実装のものに置き換える必要がある。 一括で削除するようなオプションがないか探す。
「インスタンスの二重起動を許可する」にチェックが入った状態で、二つ目のインスタンスを起動すると発生する
発生すると、二つの目のChronosのタブの表示は入力を受け付けない。
Chronosのダウンロードの動きがChromeっぽくなる。 (ダウンロード先を選択しないで、勝手にダウンロードされるようになる)
ダウンロードした後、ダウンロードフォルダがわからないのでユーザビリティが悪い。 (Chronosにはダウンロードアイテムのアイコンがないので。)
SGモードでも同様。 ファイルオープンダイアログやファイルセーブダイアログそのものが呼ばれていないのではないだろうか。
OnBeforeDownload
が呼ばれていないなぁ...。
コンテキストメニューにchrome拡張のコンテキストメニューが追加されており、重複があったり、Chronosでは使わない機能が表示される。
この問題については、cef_type.hで定義されているcef_menu_id_t
に対応するchrome_command_idsのIDを取得して、そのIDのもの以外は削除、で対応できそう。
対応するIDはデバッグログを仕込むなどして調べる。
chrome_command_ids.hそのものを移植しようかと思ったが、これは別のヘッダーもインポートしていて扱いにくいから、必要な分だけ抜き出すか。 (いまいちだが)
コンテキストメニューについては直したつもり。
動作の差異:
現在(Alloy Bootstrap)は、リンクを右クリックしたとき、コンテキストメニューに「進む/戻る」が表示される。
一方、Chrome Bootstrapの時は表示されない。
これはCEF側の仕様でそうなっている部分であることと、リンククリック時に「進む/戻る」は必ずしも必要ないように思うので、仕様としたい。 (Chronos側で進む・戻るを足そうと思えばできるが、やる必要がなさそうという判断)
ファイルダウンロードの動きが違う
https://www.magpcss.org/ceforum/viewtopic.php?f=6&t=19437&p=53579&hilit=OnBeforeDownload#p53579
There are no additional APIs currently available for download management with Chrome runtime.
ないのか...。
CEF 125のUIだけAlloyにするモードだとどうなるか確認する。
CEF125だとAlloyモードにしなくてもOnBeforeDownload
が呼ばれた...。
改めて最新のCEF124
だとどうなるのか確認する。
うーん、最新のCEF124
でもChrome Bootstrap(Chrome Runtime)だとOnBeforeDownload
は呼ばれない...。
CEF125を使うしかないのではないか。
数日中にCEF125がstableになるはず。
Chrome runtime + Alloy styleを使う場合は、コンテキストメニューはそのまま動くことが確認できたので、その部分は修正不要。
Alloy Styleは実際にはAlloy Runtime Styleという名前なので、Chrome runtimeという呼び方はよくなさそう。 今後はChrome bootstrapとAlloy Runtime Styleに統一する。
Chrome bootstrap + Alloy runtime styleでも「Chronos起動時にChromiumが勝手に起動する」は発生している。 https://github.com/ThinBridge/Chronos/issues/193#issuecomment-2123987693 の他の問題は発生していなさそう。
「Chronos起動時にChromiumが勝手に起動する」問題の原因はこれだろうか。 CEF120から必要なハンドラーの設定が増えている。
CEF124で複数のインスタンスを起動したときの動作がおかしかったのも同様の原因だろうか?
あれ、cache_pathをuniqueにすればいいだけかな。
いや、両方対応が必要なのかもしれない。
OnAlreadyRunningAppRelaunchを設定しないとCEFが複数起動した場合のデフォルト動作をする。 デフォルト動作は
Default behavior will create a new default styled Chrome window.
なので、現在のChromiumのウィンドウが開くという現象に一致している。
今もSGモードだとcacheはChronos終了をすると削除されるので、cacheのフォルダーを毎回別々のユニークなパスにしても問題ないはず。 昔起動したキャッシュを使いたい場合は問題があるが、Chronosはそうではないので大丈夫なはずということ。
ユニークというより、インスタンス間で重複さえしなければよいから、起動時刻の秒までを使えば用は足りるかな。
いや、改めて読むとOnAlreadyRunningAppRelaunchは同じCefSettings.root_cache_pathに到達した場合に必要な設定だから、やはりキャッシュパスが重複しないようにすればよいだけである。
https://github.com/ThinBridge/Chronos/pull/196
こちらの作業ブランチで、キャッシュパスをインスタンス間で重複しないようにすることで、「Chronos起動時にChromiumが勝手に起動する」問題が解決することを確認。 OnAlreadyRunningAppRelaunchの実装も入れている。
もう少し全体的に動かしてみて、問題がなければこれで一旦修正作業を終了する。
Resolved with https://github.com/ThinBridge/Chronos/pull/196.
現在使用しているAlloyモードはCEF127でサポート対象外となる予定。 Chrome bootstrapを使うようにする必要がある。
https://github.com/chromiumembedded/cef/issues/3685
CEF124以降で、Alloyモード印刷のプレビューが動作しないといった問題が確認できている。 CEF127でAlloyモードがサポート対象外となることから、Alloyモード特有の問題は修正されないことになっている。 これもAlloyモードでしか発生しない問題なので修正されない。
https://github.com/chromiumembedded/cef/issues/3686