printing: Implement Get Lacros extension printers on ash-chrome

When Lacros is enabled, the Print Preview UI initialized from ash cannot
access printer extensions, as these extensions reside solely within the
separate Lacros process.

Add a mojom service definition to enable access to Lacros's extension
printers from ash side.

- The ExtensionPrinterServiceProvider interface is implemented by
  lacros-chrome. It allows ash to query lacros extension printers.
  More methods will be added in followup CLs.

- The ExtensionPrinterService interface is implemented on ash. It
  provides two methods:

  1) RegisterServiceProvider which allows Lacros to register its
     ExtensionPrinterServiceProvider implementation with ash so that ash
     can use the provider to communicate with lacros extension printers.

  2) PrintersAdded which will be used by lacros to report extension
     printers back to ash after ash sends a get printers request. The
     method should be called once per extension per request.

ExtensionPrinterServiceSetupLacros is responsible for observing profile
creation events to create a new ExtensionPrinterServiceProvider
instance when a profile is added. Since we limit to loading extension
printers from the main profile, the ExtensionPrinterServiceProvider will
only registers itself with ash when the profile is the main one.

ExtensionPrinterServiceAsh implements the ExtensionPrinterService
interface on ash side. It acts as the bridge between Print preview UI
on ash and the ExtensionPrinterServiceProvider on lacros.

ExtensionPrinterServiceAsh has a handler to handle disconnected events
in case a lacros process crashes.

- Add ExtensionPrinterHandlerAdapterAsh to connect Print Preview UI to
  the ExtensionPrinterServiceAsh on ash side. It delegates all the hard
  works required to communicate with lacros extensions through the
  ExtensionPrinterServiceAsh.

- Update PrintPreviewHandler to use ExtensionPrinterHandlerAdapterAsh
  as its extension printer handler when lacros is enabled.

- Implement the DispatchStartGetPrinters method in
  ExtensionPrinterServiceProviderLacros by delegating requests to the
  extension printer handler on lacros.

Following methods will be added to the ExtensionPrinterServiceProvider
interface in followup CLs.

- DispatchStartGetCapability.
- DispatchStartPrint.
- DispatchStartGrantPrinterAccess.


Screenshots:
- Print preview on Gallery: http://screen/4hXgTcpUUYSJFyX.png.
- Extension printers loaded: http://screen/6tDNgoZkErHzQKj.png.

that the Gallery can see the printers offered by the extensions when
lacros is the only browser.

Bug: b:40273973
Test: manually tested on DUT using a test printer extension and observed
Change-Id: I733fc9343c4af6515da545e5223fe68f4d74dc3f
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5506694
Code-Coverage: findit-for-me@appspot.gserviceaccount.com <findit-for-me@appspot.gserviceaccount.com>
Reviewed-by: Erik Chen <erikchen@chromium.org>
Commit-Queue: Xiangdong Kong <xiangdongkong@google.com>
Reviewed-by: Jenny Zhang <jennyz@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1302891}
26 files changed
tree: 1ab1f07688545a5cc6781143d92e7b2fcd137dd8
  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. .clangd
  54. .eslintrc.js
  55. .git-blame-ignore-revs
  56. .gitallowed
  57. .gitattributes
  58. .gitignore
  59. .gitmodules
  60. .gn
  61. .mailmap
  62. .rustfmt.toml
  63. .vpython3
  64. .yapfignore
  65. ATL_OWNERS
  66. AUTHORS
  67. BUILD.gn
  68. CODE_OF_CONDUCT.md
  69. codereview.settings
  70. CPPLINT.cfg
  71. DEPS
  72. DIR_METADATA
  73. LICENSE
  74. LICENSE.chromium_os
  75. OWNERS
  76. PRESUBMIT.py
  77. PRESUBMIT_test.py
  78. PRESUBMIT_test_mocks.py
  79. README.md
  80. 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.