Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Update Playwright to 1.49.0 (Chromium 131.0.6778.33) #545

Merged
merged 4 commits into from
Nov 25, 2024

Conversation

MurakamiShinyu
Copy link
Member

@MurakamiShinyu MurakamiShinyu commented Nov 21, 2024

@MurakamiShinyu
Copy link
Member Author

@MurakamiShinyu
Copy link
Member Author

@MurakamiShinyu MurakamiShinyu marked this pull request as ready for review November 22, 2024 10:51
@MurakamiShinyu
Copy link
Member Author

Test case

Playwright v1.49.0 に更新しただけだと不具合が発生するテストケース:
depends-on-devicePixelRatio-border-inline-x16.html

Playwright v1.49.0 に更新する前のVivliostyle CLIで出力したPDFでは、問題が発生しない。
常に2ページのPDFが出力される。

Playwright v1.49.0 に更新した後のVivliostyle CLIで出力したPDFは、Retinaディスプレイ上で実行した場合だけPDFは1ページだけになり、2ページ目に送られるべき内容が1ページ目の下にはみ出して表示される。

chromium-headless-shell を使うように修正した後のVivliostyle CLIで出力したPDFではこの問題が解消されている。

@spring-raining
Copy link
Member

この実装んついて試したところ、previewとbuildで chromiumchromium-headless-shell の異なるブラウザーをダウンロードすることになるため、できれば新しいChromium headless modeで正しく動作するような解決方法を考えたいです。もう少し調査させてください。

@MurakamiShinyu
Copy link
Member Author

PDF生成には chromium-headless-shell のほうが良さそうだと考えた理由は、HiDPI/Retinaディスプレイでの不具合のほかに、次のことがあります:

  • chromium-headless-shell のほうが軽量で高速

    Changes in Chromium headless in Playwright v1.49 microsoft/playwright#33566 の次の記述参照:

    Switching to new headless mode gives you a browser that closely follows the regular headed browser, at the cost of being a bit heavier on features you probably do not need and being slightly slower.

  • headlessには chromium-headless-shell を使うというのが Playwright 1.49+ のデフォルト

    Playwright v1.49 の説明に "Opt-in to new headless" とあるように、何も指定しないと headlessには chromium-headless-shell を使うようになっている。

    試しに、playwright[browserType].launch(options)optionsexecutablePath を指定しない場合をテストしてみると、 headless: true のときは chromium-headless-shell が、 false のときは chromium が使われるようになっていることが確認できました。

  • chromiumchromium-headless-shell のブラウザのUIが違っていても同一バージョンのレンダリングエンジンなのだから、previewとbuildで別々のものが使われるからといって結果の違いが問題になることはあまり考えられない。(これまでの headless mode と変わらないはず)

とはいっても、previewとbuildで2回もダウンロードが発生するのはたしかにあまりよくないですね。 #357 の問題(「"Retina" ディスプレイ(devicePixelRatio = 2)であっても、window.devicePixelRatio の値は 1 を返す。ところが、レイアウト処理において最小のborder幅はそれと矛盾して 0.5px になる。」)を vivliostyle.js の側で解決するには、window.devicePixelRatio の値に頼るのではなく、getBoundingClientRect() を使って極細のボーダーの幅を調べて、それを元に本当の devicePixelRatio 値を求めるようにするということが考えられます。

@spring-raining
Copy link
Member

@MurakamiShinyu HiDPR環境でHeadlessで chromium を使った場合でも #357 の問題が起きないように修正しました: #547
こちらの内容で修正できていそうか確認してもらえますか?

@MurakamiShinyu
Copy link
Member Author

@spring-raining ありがとうございます! #547 で問題が起きないこと確認しました。

44737f3 のコミットを取り消すのに Revert のコミットをするのではなく、git reset --hard eadf6da とするのではどうでしょうか?

@spring-raining
Copy link
Member

spring-raining commented Nov 25, 2024

44737f3 のコミットを取り消すのに Revert のコミットをするのではなく、git reset --hard eadf6da とするのではどうでしょうか?

分かりました、一度 Rebase merge してから Revert commit も含めて reset します

@spring-raining spring-raining merged commit 5765dd3 into main Nov 25, 2024
11 checks passed
@spring-raining spring-raining deleted the update-playwright branch November 25, 2024 16:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants