[ChromeCart] Always populate CommerceHint interface in binder map

A renderer crash has been observed for CommerceHintObserver because
under certain circumstances, CommerceHintAgent in renderer is created
and seek to communicate with browser process via CommerceHintObserver
interface[1], only to find that there is no binder for this interface
in current frame. This could be due to that we conditionally[2]
populate the CommerceHintObserver binder, and the condition might fall
inconsistent with the condition for CommerceHintAgent creation (i.e.
CommerceHintAgent is created but the binder is not populated).

This CL tries to fix this issue by always populating the binder for
CommerceHintObserver interface; in the meantime, move the condition
checks to the binding function so that no actual communication will
happen if the condition fails. This CL shouldn't introduce any user
visible changes.

[1] https://source.chromium.org/chromium/chromium/src/+/main:chrome/renderer/cart/commerce_hint_agent.cc;l=265;bpv=1;bpt=0;drc=c3764abf223906125b09af39b411eaed49628efb
[2] https://source.chromium.org/chromium/chromium/src/+/main:chrome/browser/chrome_browser_interface_binders.cc;l=694-698;bpv=1;bpt=0;drc=62ceca1978aa627a52a66a5dd11787a91871031b

Bug: 1298709
Change-Id: Ib85b6c8c2fbfbb00b15814084bc88a1fe73b7455
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4149630
Reviewed-by: Wei-Yin Chen <wychen@chromium.org>
Commit-Queue: Yue Zhang <yuezhanggg@chromium.org>
Reviewed-by: Alex Gough <ajgo@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1091378}
1 file changed
tree: 2ca9e6ff14ce2a7ef510ecf4f7c5467af71e7efe
  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.