chromium/chrome/browser/cart/chrome_cart.mojom

// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

module chrome_cart.mojom;

import "url/mojom/url.mojom";

// Information needed to show cart for one merchant in chrome cart module.
struct MerchantCart {
  // Merchant that this cart comes from.
  string merchant;
  // URL that directs to the cart page. It is used to identify carts.
  url.mojom.Url cart_url;
  // List of URLs for product image to show in the cart.
  array<url.mojom.Url> product_image_urls;
  // Text content of the discount on this cart (e.g. 15% off).
  string discount_text;
};

// The current status of the consent. This is used when user has acted on the
// consent. UNSPECIFIED is the default state.
enum ConsentStatus {
  ACCEPTED = 0,
  DISMISSED = 1,
  REJECTED = 2
};

// Browser-side handler for requests from JS.
interface CartHandler {
  // Returns the merchant carts in chrome cart.
  GetMerchantCarts() => (array<MerchantCart> carts);
  // Returns whether the ChromeCart feature is enabled.
  GetCartFeatureEnabled() => (bool enabled);
  // Temporarily hide the cart module.
  HideCartModule();
  // Restores the cart module that has been temporarily hidden.
  RestoreHiddenCartModule();
  // Hides the cart for certain domain
  // and returns if the operation is successful.
  HideCart(url.mojom.Url cart_url) => (bool success);
  // Restores hidden cart for certain domain
  // and returns if the operation is successful.
  RestoreHiddenCart(url.mojom.Url cart_url) => (bool success);
  // Removes the cart for certain domain
  // and returns if the operation is successful.
  RemoveCart(url.mojom.Url cart_url) => (bool success);
  // Restores removed cart for certain domain
  // and returns if the operation is successful.
  RestoreRemovedCart(url.mojom.Url cart_url) => (bool success);
  // Returns whether to show welcome surface in the module.
  GetWarmWelcomeVisible() => (bool welcome_visible);
  // Passes |cart_url| to browser process to fetch discount URL.
  GetDiscountURL(url.mojom.Url cart_url) => (url.mojom.Url discount_url);
  // Returns whether to show discount consent card in the module.
  GetDiscountConsentCardVisible() => (bool consent_visible);
  // Returns whether to show the discount toggle in the customize setting page.
  GetDiscountToggleVisible() => (bool toggle_visible);
  // TODO(crbug.com/40215404): Merge OnDiscountConsentAcknowledged and
  //                          OnDiscountConsentDismissed.
  // Stores in profile prefs that user has acknowledged
  // discount consent and whether user has opted-in or opted-out
  // the feature.
  OnDiscountConsentAcknowledged(bool accept);
  // Stores in profile prefs that user has dismissed the consent.
  OnDiscountConsentDismissed();
  // Stores in profile prefs that user has shown interest in the
  // consent.
  OnDiscountConsentContinued();
  // Shows the native consent dialog and returns the consent status.
  ShowNativeConsentDialog() => (ConsentStatus consent_status);
  // Returns whether the rule-based discount feature is enabled.
  GetDiscountEnabled() => (bool enabled);
  // Sets whether the rule-based discount feature is enabled.
  SetDiscountEnabled(bool enabled);
  // Passes the |cart_url| that user is navigating or about to navigate
  // towards to browser process, in order to help identify navigations
  // originated from cart module. |is_navigating| indicates whether
  // the navigation is happening now (e.g. left click on cart item)
  // or not.
  PrepareForNavigation(url.mojom.Url cart_url, bool is_navigating);
};