Reland: Recalculate style before setting ICB size for printing.

One change, compared to the initial attempt: Set zero page margins in
the browser test, to avoid crbug.com/1491775

Original commit comment follows:

A zoom factor used when viewing a webpage on screen may have been set in
computed style. This would affect @page margin resolution incorrectly
when entering print mode, which in turn would result in an incorrect
initial containing block size. To fix this, recalculate style before
calculating the page area size.

Since we now recalculate style before setting any initial containing
block size for printing at all, viewport units will not be resolved
correctly. So make sure that they get calculated before laying out. This
used to be triggered by calling LayoutViewportWasResized(). It turns out
though, now that we need to do this unconditionally before the first
layout, that LayoutViewportWasResized() does more than we want. For
printing, we don't need to re-evaluate media queries, and we do not want
a resize event to be fired. Therefore, split the viewport units dirtying
into a separate function. Introduce a lambda in
ForceLayoutForPagination() to avoid repetitive code.

Make PrintBrowserTest.NoResizeEvent more evil, by modifying its resource
HTML file to use a named page, and also a wide DIV. This would make the
test fail without this CL.

Add external/wpt/css/printing/ to the scalefactor200 virtual test suite.
Three other tests (the already existing page-margin-xxx tests) would
also fail without this fix, but add a test for this specific issue
(abspos) as well.

(cherry picked from commit fc575639a9441664b3f079e57a2afbea068bb43f)

Bug: 1488751, 1486499
Change-Id: I716f8f9ca77769629ac71c0607aeef93824754b8
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4931752
Reviewed-by: Rune Lillesveen <futhark@chromium.org>
Auto-Submit: Morten Stenshorne <mstensho@chromium.org>
Reviewed-by: Ian Kilpatrick <ikilpatrick@chromium.org>
Commit-Queue: Rune Lillesveen <futhark@chromium.org>
Commit-Queue: Ian Kilpatrick <ikilpatrick@chromium.org>
Cr-Original-Commit-Position: refs/heads/main@{#1208263}
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4934372
Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Cr-Commit-Position: refs/branch-heads/6045@{#369}
Cr-Branched-From: 905e8bdd32d891451d94d1ec71682e989da2b0a1-refs/heads/main@{#1204232}
8 files changed
tree: 631314e2c35fbbc2e0fbf4ccd7ed266a1ed8fc67
  1. android_webview/
  2. apps/
  3. ash/
  4. base/
  5. build/
  6. build_overrides/
  7. buildtools/
  8. cc/
  9. chrome/
  10. chromecast/
  11. chromeos/
  12. codelabs/
  13. components/
  14. content/
  15. courgette/
  16. crypto/
  17. dbus/
  18. device/
  19. docs/
  20. extensions/
  21. fuchsia_web/
  22. gin/
  23. google_apis/
  24. google_update/
  25. gpu/
  26. headless/
  27. infra/
  28. ios/
  29. ipc/
  30. media/
  31. mojo/
  32. native_client_sdk/
  33. net/
  34. pdf/
  35. ppapi/
  36. printing/
  37. remoting/
  38. rlz/
  39. sandbox/
  40. services/
  41. skia/
  42. sql/
  43. storage/
  44. styleguide/
  45. testing/
  46. third_party/
  47. tools/
  48. ui/
  49. url/
  50. webkit/
  51. .clang-format
  52. .clang-tidy
  53. .eslintrc.js
  54. .git-blame-ignore-revs
  55. .gitattributes
  56. .gitignore
  57. .gitmodules
  58. .gn
  59. .mailmap
  60. .rustfmt.toml
  61. .vpython3
  62. .yapfignore
  63. ATL_OWNERS
  64. AUTHORS
  65. BUILD.gn
  66. CODE_OF_CONDUCT.md
  67. codereview.settings
  68. DEPS
  69. DIR_METADATA
  70. LICENSE
  71. LICENSE.chromium_os
  72. OWNERS
  73. PRESUBMIT.py
  74. PRESUBMIT_test.py
  75. PRESUBMIT_test_mocks.py
  76. README.md
  77. WATCHLISTS
README.md

Logo Chromium

Chromium is an open-source browser project that aims to build a safer, faster, and more stable way for all users to experience the web.

The project's web site is https://www.chromium.org.

To check out the source code locally, don't use git clone! Instead, follow the instructions on how to get the code.

Documentation in the source is rooted in docs/README.md.

Learn how to Get Around the Chromium Source Code Directory Structure .

For historical reasons, there are some small top level directories. Now the guidance is that new top level directories are for product (e.g. Chrome, Android WebView, Ash). Even if these products have multiple executables, the code should be in subdirectories of the product.

If you found a bug, please file it at https://crbug.com/new.