[ChromeCart] Use product image from ShoppingService for AddToCart

Currently we don't try to detect product image when AddToCart happens
due to technical limitations. Therefore, when an AddToCart is
detected, we show a fallback cart icon in ChromeCart, and the product
images won't be available until user visits the cart page which is a
suboptimal user experience.

This CL improves the situation by taking advantage of the product
images from ShoppingService. When an AddToCart is detected, we use
the PDP where AddToCart happens to query ShoppingService to see if
there are product image available. Two things worth mentioning about
this approach:
* This improvement depends on ShoppingService, so it won't be
  available for users who have ChromeCart but don't satisfy the
  requirement in ShoppingService.
* This CL only uses the cached product images in ShoppingService
  (i.e. using GetAvailableProductInfoForUrl API) instead of
  initiating backend fetch. This should be good enough because
  in most cases, the user needs to visit the PDP first before
  adding the product to cart, and the navigation should already
  bring the product image into cache.

Bug: 1407248
Change-Id: I1bf1ae566d7a3da5b99c31f6ad7df520baaca9ce
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4166473
Reviewed-by: Wei-Yin Chen <wychen@chromium.org>
Reviewed-by: Matthew Jones <mdjones@chromium.org>
Commit-Queue: Yue Zhang <yuezhanggg@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1093921}
10 files changed
tree: 7a1e19a6a218b332b0924d7881a8eff32256d742
  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.