ThinBridge / Chronos

Chromiumベースの業務ブラウザ
Other
5 stars 3 forks source link

Use Chrome bootstrap mode #193

Closed HashidaTKS closed 2 weeks ago

HashidaTKS commented 1 month ago

現在使用しているAlloyモードはCEF127でサポート対象外となる予定。 Chrome bootstrapを使うようにする必要がある。

https://github.com/chromiumembedded/cef/issues/3685

CEF124以降で、Alloyモード印刷のプレビューが動作しないといった問題が確認できている。 CEF127でAlloyモードがサポート対象外となることから、Alloyモード特有の問題は修正されないことになっている。 これもAlloyモードでしか発生しない問題なので修正されない。

https://github.com/chromiumembedded/cef/issues/3686

HashidaTKS commented 1 month ago

https://github.com/chromiumembedded/cef/issues/3685 の変更によるもの。

上記のMigration routeに従って

CefSettings.chrome_runtime = true

とするとプレビューが動作するようになったが、右クリックのメニューに不要なアイテムが表示されるなど、別の影響が起きる。 Alloyスタイルにする方も試してみる。

HashidaTKS commented 1 month ago

runtime_styleを指定する必要があるのだが、これはCEF125から導入されていて、CEF124では導入されていない。

HashidaTKS commented 1 month ago

CEF125を使って、

        info.runtime_style = CEF_RUNTIME_STYLE_ALLOY;

としたが、これで動かすと印刷プレビューを表示するとChronosがフリーズしたりする。

HashidaTKS commented 1 month ago

https://magpcss.org/ceforum/viewtopic.php?f=6&t=19413

chrome_runtimeを有効にした場合、「印刷」メニューのIDなどがAlloyモードのときと変わるので、OnBeforeContextMenuでいじっているコンテキストメニューのIDなどもそれに追随して変更しないといけない。 簡単にできる対応ではない...。

また、chrome_runtimeを有効にすると、Chronos起動時に勝手にいくつか別のウィンドウが開き、そこでGoogleが開いたりするので、さらに別の対応も必要。

HashidaTKS commented 1 month ago

chrome_runtimeが有効な状態で確認できている問題

コンテキストメニューにchrome拡張のコンテキストメニューが追加されており、重複があったり、Chronosでは使わない機能が表示される。

image

image

https://magpcss.org/ceforum/viewtopic.php?f=6&t=19413 の通り、Chrome runtimeが有効だと別のIDになるので、それらを削除したり、Chronos独自実装のものに置き換える必要がある。 一括で削除するようなオプションがないか探す。

Chronos起動時にChromiumが勝手に起動する

「インスタンスの二重起動を許可する」にチェックが入った状態で、二つ目のインスタンスを起動すると発生する

image

発生すると、二つの目のChronosのタブの表示は入力を受け付けない。

ファイルダウンロードの動きが違う

Chronosのダウンロードの動きがChromeっぽくなる。 (ダウンロード先を選択しないで、勝手にダウンロードされるようになる)

ダウンロードした後、ダウンロードフォルダがわからないのでユーザビリティが悪い。 (Chronosにはダウンロードアイテムのアイコンがないので。)

SGモードでも同様。 ファイルオープンダイアログやファイルセーブダイアログそのものが呼ばれていないのではないだろうか。

OnBeforeDownloadが呼ばれていないなぁ...。

HashidaTKS commented 1 month ago

コンテキストメニューにchrome拡張のコンテキストメニューが追加されており、重複があったり、Chronosでは使わない機能が表示される。

この問題については、cef_type.hで定義されているcef_menu_id_tに対応するchrome_command_idsのIDを取得して、そのIDのもの以外は削除、で対応できそう。 対応するIDはデバッグログを仕込むなどして調べる。

chrome_command_ids.hそのものを移植しようかと思ったが、これは別のヘッダーもインポートしていて扱いにくいから、必要な分だけ抜き出すか。 (いまいちだが)

HashidaTKS commented 1 month ago

コンテキストメニューについては直したつもり。

動作の差異:

現在(Alloy Bootstrap)は、リンクを右クリックしたとき、コンテキストメニューに「進む/戻る」が表示される。

image

一方、Chrome Bootstrapの時は表示されない。

image

これはCEF側の仕様でそうなっている部分であることと、リンククリック時に「進む/戻る」は必ずしも必要ないように思うので、仕様としたい。 (Chronos側で進む・戻るを足そうと思えばできるが、やる必要がなさそうという判断)

HashidaTKS commented 1 month ago

ファイルダウンロードの動きが違う

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.

ないのか...。

HashidaTKS commented 1 month ago

CEF 125のUIだけAlloyにするモードだとどうなるか確認する。

HashidaTKS commented 1 month ago

CEF125だとAlloyモードにしなくてもOnBeforeDownloadが呼ばれた...。 改めて最新のCEF124だとどうなるのか確認する。

HashidaTKS commented 1 month ago

うーん、最新のCEF124でもChrome Bootstrap(Chrome Runtime)だとOnBeforeDownloadは呼ばれない...。 CEF125を使うしかないのではないか。

HashidaTKS commented 1 month ago

数日中にCEF125がstableになるはず。

HashidaTKS commented 1 month ago

https://chromiumdash.appspot.com/schedule

HashidaTKS commented 1 month ago

Chrome runtime + Alloy styleを使う場合は、コンテキストメニューはそのまま動くことが確認できたので、その部分は修正不要。

HashidaTKS commented 1 month ago

Alloy Styleは実際にはAlloy Runtime Styleという名前なので、Chrome runtimeという呼び方はよくなさそう。 今後はChrome bootstrapとAlloy Runtime Styleに統一する。

HashidaTKS commented 1 month ago

Chrome bootstrap + Alloy runtime styleでも「Chronos起動時にChromiumが勝手に起動する」は発生している。 https://github.com/ThinBridge/Chronos/issues/193#issuecomment-2123987693 の他の問題は発生していなさそう。

HashidaTKS commented 1 month ago

「Chronos起動時にChromiumが勝手に起動する」問題の原因はこれだろうか。 CEF120から必要なハンドラーの設定が増えている。

https://magpcss.org/ceforum/viewtopic.php?f=6&t=19677&p=54689&hilit=OnAlreadyRunningAppRelaunch#p54689

CEF124で複数のインスタンスを起動したときの動作がおかしかったのも同様の原因だろうか?

HashidaTKS commented 1 month ago

あれ、cache_pathをuniqueにすればいいだけかな。

HashidaTKS commented 1 month ago

いや、両方対応が必要なのかもしれない。

OnAlreadyRunningAppRelaunchを設定しないとCEFが複数起動した場合のデフォルト動作をする。 デフォルト動作は

Default behavior will create a new default styled Chrome window.

なので、現在のChromiumのウィンドウが開くという現象に一致している。

HashidaTKS commented 1 month ago

今もSGモードだとcacheはChronos終了をすると削除されるので、cacheのフォルダーを毎回別々のユニークなパスにしても問題ないはず。 昔起動したキャッシュを使いたい場合は問題があるが、Chronosはそうではないので大丈夫なはずということ。

HashidaTKS commented 1 month ago

ユニークというより、インスタンス間で重複さえしなければよいから、起動時刻の秒までを使えば用は足りるかな。

HashidaTKS commented 1 month ago

いや、改めて読むとOnAlreadyRunningAppRelaunchは同じCefSettings.root_cache_pathに到達した場合に必要な設定だから、やはりキャッシュパスが重複しないようにすればよいだけである。

HashidaTKS commented 1 month ago

https://github.com/ThinBridge/Chronos/pull/196

こちらの作業ブランチで、キャッシュパスをインスタンス間で重複しないようにすることで、「Chronos起動時にChromiumが勝手に起動する」問題が解決することを確認。 OnAlreadyRunningAppRelaunchの実装も入れている。

HashidaTKS commented 1 month ago

もう少し全体的に動かしてみて、問題がなければこれで一旦修正作業を終了する。

HashidaTKS commented 2 weeks ago

Resolved with https://github.com/ThinBridge/Chronos/pull/196.