Update paper printable area in UpdatePrintSettings

When getting the default printer capabilities and settings, updates in
https://crrev.com/1099645 filled in the printable area for all paper
sizes supported by a Windows driver.  For some printer drivers this can
be a relatively expensive call.  Since this is in an inner loop of
supported papers sizes, the performance cost is further compounded when
a printer supports many different paper sizes.  This can result in
large delays in generating the Print Preview, and can make the UI
unresponsive for many seconds.

To avoid this performance impact, modify the Windows behavior for paper
printable area handling.  Change getting printer capabilities to only
retrieve the printable area for the default paper size.  Introduce a
new Windows-only call to PrintBackend to retrieve just the printable
area for a particular paper.  Modify PrinterQuery to use this query to
update an existing PrintSettings object.

This initial version only is functional when printer calls are made
in-browser.  Out-of-process printing for Windows still performs the
expensive query of retrieving the printable area for all papers.  While
the UI will be responsive for OOP, it will still experience a large
delay before the preview is ready.

Bug: 879284, 1424368
Change-Id: I0b22abfb88e922a3f50fc26fd6502cdb9a01299e
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4409898
Commit-Queue: Alan Screen <awscreen@chromium.org>
Reviewed-by: Andy Phan <andyphan@chromium.org>
Reviewed-by: Lei Zhang <thestig@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1128325}
9 files changed
tree: d83b0b6d6e91b802fb8e4ab459234a7ed5733b84
  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. weblayer/
  51. .clang-format
  52. .clang-tidy
  53. .eslintrc.js
  54. .git-blame-ignore-revs
  55. .gitattributes
  56. .gitignore
  57. .gn
  58. .mailmap
  59. .rustfmt.toml
  60. .vpython3
  61. .yapfignore
  62. ATL_OWNERS
  63. AUTHORS
  64. BUILD.gn
  65. CODE_OF_CONDUCT.md
  66. codereview.settings
  67. DEPS
  68. DIR_METADATA
  69. LICENSE
  70. LICENSE.chromium_os
  71. OWNERS
  72. PRESUBMIT.py
  73. PRESUBMIT_test.py
  74. PRESUBMIT_test_mocks.py
  75. README.md
  76. 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.