[Discount][Clank] Check price tracking content eligible with product info and remove ineligible button state
Non-pdp: https://screenshot.googleplex.com/4sAq7kKhyYwtfKV
Bug: 409443205
Change-Id: Ib6a039d30ea5806e1af4c584fd0f378ac3d91ec1
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6442878
Reviewed-by: Matthew Jones <mdjones@chromium.org>
Commit-Queue: Qi Bao <qib@google.com>
Reviewed-by: Mei Liang <meiliang@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1444963}
diff --git a/chrome/browser/commerce/price_insights/android/java/src/org/chromium/chrome/browser/price_insights/PriceInsightsBottomSheetProperties.java b/chrome/browser/commerce/price_insights/android/java/src/org/chromium/chrome/browser/price_insights/PriceInsightsBottomSheetProperties.java
index 5a42f05..2b58df2d 100644
--- a/chrome/browser/commerce/price_insights/android/java/src/org/chromium/chrome/browser/price_insights/PriceInsightsBottomSheetProperties.java
+++ b/chrome/browser/commerce/price_insights/android/java/src/org/chromium/chrome/browser/price_insights/PriceInsightsBottomSheetProperties.java
@@ -65,15 +65,4 @@
OPEN_URL_BUTTON_VISIBLE,
OPEN_URL_BUTTON_ON_CLICK_LISTENER
};
-
- public static final PropertyKey[] PRICE_TRACKING_KEYS =
- new PropertyKey[] {
- PRICE_TRACKING_TITLE,
- PRICE_TRACKING_BUTTON_TEXT,
- PRICE_TRACKING_BUTTON_ICON,
- PRICE_TRACKING_BUTTON_FOREGROUND_COLOR,
- PRICE_TRACKING_BUTTON_BACKGROUND_COLOR,
- PRICE_TRACKING_BUTTON_ENABLED,
- PRICE_TRACKING_BUTTON_ON_CLICK_LISTENER
- };
}
diff --git a/chrome/browser/commerce/price_tracking/android/BUILD.gn b/chrome/browser/commerce/price_tracking/android/BUILD.gn
index 2fe169a..403b344 100644
--- a/chrome/browser/commerce/price_tracking/android/BUILD.gn
+++ b/chrome/browser/commerce/price_tracking/android/BUILD.gn
@@ -49,6 +49,7 @@
sources = [
"java/src/org/chromium/chrome/browser/price_tracking/PriceTrackingBottomSheetContentCoordinator.java",
"java/src/org/chromium/chrome/browser/price_tracking/PriceTrackingBottomSheetContentMediator.java",
+ "java/src/org/chromium/chrome/browser/price_tracking/PriceTrackingBottomSheetContentProperties.java",
"java/src/org/chromium/chrome/browser/price_tracking/PriceTrackingBottomSheetContentViewBinder.java",
]
diff --git a/chrome/browser/commerce/price_tracking/android/java/src/org/chromium/chrome/browser/price_tracking/PriceTrackingBottomSheetContentCoordinator.java b/chrome/browser/commerce/price_tracking/android/java/src/org/chromium/chrome/browser/price_tracking/PriceTrackingBottomSheetContentCoordinator.java
index e034ae0..9f363e2 100644
--- a/chrome/browser/commerce/price_tracking/android/java/src/org/chromium/chrome/browser/price_tracking/PriceTrackingBottomSheetContentCoordinator.java
+++ b/chrome/browser/commerce/price_tracking/android/java/src/org/chromium/chrome/browser/price_tracking/PriceTrackingBottomSheetContentCoordinator.java
@@ -18,7 +18,6 @@
import org.chromium.chrome.browser.commerce.CommerceBottomSheetContentProperties;
import org.chromium.chrome.browser.commerce.CommerceBottomSheetContentProvider;
import org.chromium.chrome.browser.price_insights.PriceInsightsBottomSheetCoordinator.PriceInsightsDelegate;
-import org.chromium.chrome.browser.price_insights.PriceInsightsBottomSheetProperties;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.ui.modelutil.PropertyModel;
import org.chromium.ui.modelutil.PropertyModelChangeProcessor;
@@ -40,7 +39,7 @@
.inflate(R.layout.price_tracking_layout_v2, /* root= */ null);
updateTouchDelegate();
PropertyModel propertyModel =
- new PropertyModel(PriceInsightsBottomSheetProperties.PRICE_TRACKING_KEYS);
+ new PropertyModel(PriceTrackingBottomSheetContentProperties.ALL_KEYS);
PropertyModelChangeProcessor.create(
propertyModel,
mPriceTrackingContentContainer,
diff --git a/chrome/browser/commerce/price_tracking/android/java/src/org/chromium/chrome/browser/price_tracking/PriceTrackingBottomSheetContentMediator.java b/chrome/browser/commerce/price_tracking/android/java/src/org/chromium/chrome/browser/price_tracking/PriceTrackingBottomSheetContentMediator.java
index 06f6ddfd..d2c56cf 100644
--- a/chrome/browser/commerce/price_tracking/android/java/src/org/chromium/chrome/browser/price_tracking/PriceTrackingBottomSheetContentMediator.java
+++ b/chrome/browser/commerce/price_tracking/android/java/src/org/chromium/chrome/browser/price_tracking/PriceTrackingBottomSheetContentMediator.java
@@ -4,13 +4,12 @@
package org.chromium.chrome.browser.price_tracking;
-import static org.chromium.chrome.browser.price_insights.PriceInsightsBottomSheetProperties.PRICE_TRACKING_BUTTON_BACKGROUND_COLOR;
-import static org.chromium.chrome.browser.price_insights.PriceInsightsBottomSheetProperties.PRICE_TRACKING_BUTTON_ENABLED;
-import static org.chromium.chrome.browser.price_insights.PriceInsightsBottomSheetProperties.PRICE_TRACKING_BUTTON_FOREGROUND_COLOR;
-import static org.chromium.chrome.browser.price_insights.PriceInsightsBottomSheetProperties.PRICE_TRACKING_BUTTON_ICON;
-import static org.chromium.chrome.browser.price_insights.PriceInsightsBottomSheetProperties.PRICE_TRACKING_BUTTON_ON_CLICK_LISTENER;
-import static org.chromium.chrome.browser.price_insights.PriceInsightsBottomSheetProperties.PRICE_TRACKING_BUTTON_TEXT;
-import static org.chromium.chrome.browser.price_insights.PriceInsightsBottomSheetProperties.PRICE_TRACKING_TITLE;
+import static org.chromium.chrome.browser.price_tracking.PriceTrackingBottomSheetContentProperties.PRICE_TRACKING_BUTTON_BACKGROUND_COLOR;
+import static org.chromium.chrome.browser.price_tracking.PriceTrackingBottomSheetContentProperties.PRICE_TRACKING_BUTTON_FOREGROUND_COLOR;
+import static org.chromium.chrome.browser.price_tracking.PriceTrackingBottomSheetContentProperties.PRICE_TRACKING_BUTTON_ICON;
+import static org.chromium.chrome.browser.price_tracking.PriceTrackingBottomSheetContentProperties.PRICE_TRACKING_BUTTON_ON_CLICK_LISTENER;
+import static org.chromium.chrome.browser.price_tracking.PriceTrackingBottomSheetContentProperties.PRICE_TRACKING_BUTTON_TEXT;
+import static org.chromium.chrome.browser.price_tracking.PriceTrackingBottomSheetContentProperties.PRICE_TRACKING_TITLE;
import android.content.Context;
import android.view.View.OnClickListener;
@@ -29,6 +28,7 @@
import org.chromium.components.browser_ui.styles.SemanticColorUtils;
import org.chromium.components.commerce.core.CommerceFeatureUtils;
import org.chromium.components.commerce.core.PriceBucket;
+import org.chromium.components.commerce.core.ShoppingService;
import org.chromium.ui.modelutil.PropertyModel;
import org.chromium.ui.widget.Toast;
@@ -56,27 +56,32 @@
}
public void requestShowContent(Callback<Boolean> contentReadyCallback) {
+ ShoppingService shoppingService =
+ ShoppingServiceFactory.getForProfile(mTabSupplier.get().getProfile());
+ if (shoppingService == null
+ || !CommerceFeatureUtils.isShoppingListEligible(shoppingService)) {
+ contentReadyCallback.onResult(false);
+ }
+
mPriceTrackingStateSupplier =
mPriceInsightsDelegate.getPriceTrackingStateSupplier(mTabSupplier.get());
mPriceTrackingStateSupplier.addObserver(mUpdatePriceTrackingButtonModelCallback);
+ shoppingService.getProductInfoForUrl(
+ mTabSupplier.get().getUrl(),
+ (url, info) -> {
+ boolean hasProductInfo = info != null && info.productClusterId.isPresent();
+ if (hasProductInfo) {
+ updatePriceTrackingButtonModel(mPriceTrackingStateSupplier.get());
+ }
+ contentReadyCallback.onResult(hasProductInfo);
+ });
fetchPriceBucket();
- updatePriceTrackingButtonModel(mPriceTrackingStateSupplier.get());
- contentReadyCallback.onResult(true);
}
private void updatePriceTrackingButtonModel(boolean isPriceTracked) {
- boolean priceTrackingEligible =
- CommerceFeatureUtils.isShoppingListEligible(
- ShoppingServiceFactory.getForProfile(mTabSupplier.get().getProfile()));
-
mPropertyModel.set(PRICE_TRACKING_TITLE, mTabSupplier.get().getTitle());
- mPropertyModel.set(PRICE_TRACKING_BUTTON_ENABLED, priceTrackingEligible);
- if (!priceTrackingEligible) {
- updatePriceTrackingButtonIneligible();
- return;
- }
updatePriceTrackingButtonState(isPriceTracked);
mPropertyModel.set(
PRICE_TRACKING_BUTTON_ON_CLICK_LISTENER,
@@ -101,22 +106,6 @@
mPriceTrackingStateSupplier = null;
}
- private void updatePriceTrackingButtonIneligible() {
- mPropertyModel.set(
- PRICE_TRACKING_BUTTON_TEXT,
- mContext.getString(
- R.string.price_insights_content_price_tracking_disabled_button_text));
- mPropertyModel.set(
- PRICE_TRACKING_BUTTON_ICON,
- R.drawable.price_insights_sheet_price_tracking_button_disabled);
- mPropertyModel.set(
- PRICE_TRACKING_BUTTON_FOREGROUND_COLOR,
- mContext.getColor(R.color.price_tracking_ineligible_button_foreground_color));
- mPropertyModel.set(
- PRICE_TRACKING_BUTTON_BACKGROUND_COLOR,
- mContext.getColor(R.color.price_tracking_ineligible_button_background_color));
- }
-
private void updatePriceTrackingButtonState(boolean enabled) {
int buttonTextResId =
enabled
diff --git a/chrome/browser/commerce/price_tracking/android/java/src/org/chromium/chrome/browser/price_tracking/PriceTrackingBottomSheetContentProperties.java b/chrome/browser/commerce/price_tracking/android/java/src/org/chromium/chrome/browser/price_tracking/PriceTrackingBottomSheetContentProperties.java
new file mode 100644
index 0000000..2e17f44a
--- /dev/null
+++ b/chrome/browser/commerce/price_tracking/android/java/src/org/chromium/chrome/browser/price_tracking/PriceTrackingBottomSheetContentProperties.java
@@ -0,0 +1,43 @@
+// Copyright 2025 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.chrome.browser.price_tracking;
+
+import android.view.View.OnClickListener;
+
+import org.chromium.ui.modelutil.PropertyKey;
+import org.chromium.ui.modelutil.PropertyModel.WritableIntPropertyKey;
+import org.chromium.ui.modelutil.PropertyModel.WritableObjectPropertyKey;
+
+/** Properties for price tracking bottom sheet content. */
+public class PriceTrackingBottomSheetContentProperties {
+
+ public static final WritableObjectPropertyKey<String> PRICE_TRACKING_TITLE =
+ new WritableObjectPropertyKey<>();
+
+ public static final WritableObjectPropertyKey<String> PRICE_TRACKING_BUTTON_TEXT =
+ new WritableObjectPropertyKey<>();
+
+ public static final WritableIntPropertyKey PRICE_TRACKING_BUTTON_ICON =
+ new WritableIntPropertyKey();
+
+ public static final WritableIntPropertyKey PRICE_TRACKING_BUTTON_FOREGROUND_COLOR =
+ new WritableIntPropertyKey();
+
+ public static final WritableIntPropertyKey PRICE_TRACKING_BUTTON_BACKGROUND_COLOR =
+ new WritableIntPropertyKey();
+
+ public static final WritableObjectPropertyKey<OnClickListener>
+ PRICE_TRACKING_BUTTON_ON_CLICK_LISTENER = new WritableObjectPropertyKey<>();
+
+ public static final PropertyKey[] ALL_KEYS =
+ new PropertyKey[] {
+ PRICE_TRACKING_TITLE,
+ PRICE_TRACKING_BUTTON_TEXT,
+ PRICE_TRACKING_BUTTON_ICON,
+ PRICE_TRACKING_BUTTON_FOREGROUND_COLOR,
+ PRICE_TRACKING_BUTTON_BACKGROUND_COLOR,
+ PRICE_TRACKING_BUTTON_ON_CLICK_LISTENER
+ };
+}
diff --git a/chrome/browser/commerce/price_tracking/android/java/src/org/chromium/chrome/browser/price_tracking/PriceTrackingBottomSheetContentViewBinder.java b/chrome/browser/commerce/price_tracking/android/java/src/org/chromium/chrome/browser/price_tracking/PriceTrackingBottomSheetContentViewBinder.java
index 2803620..cba5ceec 100644
--- a/chrome/browser/commerce/price_tracking/android/java/src/org/chromium/chrome/browser/price_tracking/PriceTrackingBottomSheetContentViewBinder.java
+++ b/chrome/browser/commerce/price_tracking/android/java/src/org/chromium/chrome/browser/price_tracking/PriceTrackingBottomSheetContentViewBinder.java
@@ -4,13 +4,12 @@
package org.chromium.chrome.browser.price_tracking;
-import static org.chromium.chrome.browser.price_insights.PriceInsightsBottomSheetProperties.PRICE_TRACKING_BUTTON_BACKGROUND_COLOR;
-import static org.chromium.chrome.browser.price_insights.PriceInsightsBottomSheetProperties.PRICE_TRACKING_BUTTON_ENABLED;
-import static org.chromium.chrome.browser.price_insights.PriceInsightsBottomSheetProperties.PRICE_TRACKING_BUTTON_FOREGROUND_COLOR;
-import static org.chromium.chrome.browser.price_insights.PriceInsightsBottomSheetProperties.PRICE_TRACKING_BUTTON_ICON;
-import static org.chromium.chrome.browser.price_insights.PriceInsightsBottomSheetProperties.PRICE_TRACKING_BUTTON_ON_CLICK_LISTENER;
-import static org.chromium.chrome.browser.price_insights.PriceInsightsBottomSheetProperties.PRICE_TRACKING_BUTTON_TEXT;
-import static org.chromium.chrome.browser.price_insights.PriceInsightsBottomSheetProperties.PRICE_TRACKING_TITLE;
+import static org.chromium.chrome.browser.price_tracking.PriceTrackingBottomSheetContentProperties.PRICE_TRACKING_BUTTON_BACKGROUND_COLOR;
+import static org.chromium.chrome.browser.price_tracking.PriceTrackingBottomSheetContentProperties.PRICE_TRACKING_BUTTON_FOREGROUND_COLOR;
+import static org.chromium.chrome.browser.price_tracking.PriceTrackingBottomSheetContentProperties.PRICE_TRACKING_BUTTON_ICON;
+import static org.chromium.chrome.browser.price_tracking.PriceTrackingBottomSheetContentProperties.PRICE_TRACKING_BUTTON_ON_CLICK_LISTENER;
+import static org.chromium.chrome.browser.price_tracking.PriceTrackingBottomSheetContentProperties.PRICE_TRACKING_BUTTON_TEXT;
+import static org.chromium.chrome.browser.price_tracking.PriceTrackingBottomSheetContentProperties.PRICE_TRACKING_TITLE;
import android.content.res.ColorStateList;
import android.view.View;
@@ -48,8 +47,6 @@
ViewCompat.setBackgroundTintList(
priceTrackingButton,
ColorStateList.valueOf(model.get(PRICE_TRACKING_BUTTON_BACKGROUND_COLOR)));
- } else if (PRICE_TRACKING_BUTTON_ENABLED == propertyKey) {
- priceTrackingButton.setEnabled(model.get(PRICE_TRACKING_BUTTON_ENABLED));
} else if (PRICE_TRACKING_BUTTON_ON_CLICK_LISTENER == propertyKey) {
ViewCompat.replaceAccessibilityAction(
priceTrackingButton,
diff --git a/chrome/browser/commerce/price_tracking/android/javatests/src/org/chromium/chrome/browser/price_tracking/PriceTrackingBottomSheetContentMediatorTest.java b/chrome/browser/commerce/price_tracking/android/javatests/src/org/chromium/chrome/browser/price_tracking/PriceTrackingBottomSheetContentMediatorTest.java
index b38b87a2..8296038d 100644
--- a/chrome/browser/commerce/price_tracking/android/javatests/src/org/chromium/chrome/browser/price_tracking/PriceTrackingBottomSheetContentMediatorTest.java
+++ b/chrome/browser/commerce/price_tracking/android/javatests/src/org/chromium/chrome/browser/price_tracking/PriceTrackingBottomSheetContentMediatorTest.java
@@ -5,10 +5,7 @@
package org.chromium.chrome.browser.price_tracking;
import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyLong;
@@ -17,14 +14,13 @@
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
-import static org.chromium.chrome.browser.price_insights.PriceInsightsBottomSheetProperties.PRICE_TRACKING_BUTTON_BACKGROUND_COLOR;
-import static org.chromium.chrome.browser.price_insights.PriceInsightsBottomSheetProperties.PRICE_TRACKING_BUTTON_ENABLED;
-import static org.chromium.chrome.browser.price_insights.PriceInsightsBottomSheetProperties.PRICE_TRACKING_BUTTON_FOREGROUND_COLOR;
-import static org.chromium.chrome.browser.price_insights.PriceInsightsBottomSheetProperties.PRICE_TRACKING_BUTTON_ICON;
-import static org.chromium.chrome.browser.price_insights.PriceInsightsBottomSheetProperties.PRICE_TRACKING_BUTTON_ON_CLICK_LISTENER;
-import static org.chromium.chrome.browser.price_insights.PriceInsightsBottomSheetProperties.PRICE_TRACKING_BUTTON_TEXT;
-import static org.chromium.chrome.browser.price_insights.PriceInsightsBottomSheetProperties.PRICE_TRACKING_KEYS;
-import static org.chromium.chrome.browser.price_insights.PriceInsightsBottomSheetProperties.PRICE_TRACKING_TITLE;
+import static org.chromium.chrome.browser.price_tracking.PriceTrackingBottomSheetContentProperties.ALL_KEYS;
+import static org.chromium.chrome.browser.price_tracking.PriceTrackingBottomSheetContentProperties.PRICE_TRACKING_BUTTON_BACKGROUND_COLOR;
+import static org.chromium.chrome.browser.price_tracking.PriceTrackingBottomSheetContentProperties.PRICE_TRACKING_BUTTON_FOREGROUND_COLOR;
+import static org.chromium.chrome.browser.price_tracking.PriceTrackingBottomSheetContentProperties.PRICE_TRACKING_BUTTON_ICON;
+import static org.chromium.chrome.browser.price_tracking.PriceTrackingBottomSheetContentProperties.PRICE_TRACKING_BUTTON_ON_CLICK_LISTENER;
+import static org.chromium.chrome.browser.price_tracking.PriceTrackingBottomSheetContentProperties.PRICE_TRACKING_BUTTON_TEXT;
+import static org.chromium.chrome.browser.price_tracking.PriceTrackingBottomSheetContentProperties.PRICE_TRACKING_TITLE;
import android.app.Activity;
import android.view.View.OnClickListener;
@@ -60,6 +56,8 @@
import org.chromium.components.commerce.core.ShoppingService.PriceInsightsInfo;
import org.chromium.components.commerce.core.ShoppingService.PriceInsightsInfoCallback;
import org.chromium.components.commerce.core.ShoppingService.PricePoint;
+import org.chromium.components.commerce.core.ShoppingService.ProductInfo;
+import org.chromium.components.commerce.core.ShoppingService.ProductInfoCallback;
import org.chromium.ui.modelutil.PropertyModel;
import org.chromium.ui.widget.ToastManager;
import org.chromium.url.GURL;
@@ -102,9 +100,19 @@
Optional.of(TEST_URL),
PRICE_BUCKET,
false);
+ private static final ProductInfo PRODUCT_INFO =
+ new ProductInfo(
+ null,
+ null,
+ Optional.of(12345L),
+ Optional.empty(),
+ null,
+ 0,
+ null,
+ Optional.empty());
private PriceTrackingBottomSheetContentMediator mMediator;
- private PropertyModel mPropertyModel = new PropertyModel(PRICE_TRACKING_KEYS);
+ private PropertyModel mPropertyModel = new PropertyModel(ALL_KEYS);
private Activity mActivity;
private HistogramWatcher mHistogramWatcher;
@@ -142,33 +150,26 @@
public void testRequestShowContent_PriceTrackingNotEligible() {
doReturn(false).when(mCommerceFeatureUtilsJniMock).isShoppingListEligible(anyLong());
mMediator.requestShowContent(mMockCallback);
+ verify(mMockCallback).onResult(false);
+ }
- assertEquals(PRODUCT_TITLE, mPropertyModel.get(PRICE_TRACKING_TITLE));
- assertFalse(mPropertyModel.get(PRICE_TRACKING_BUTTON_ENABLED));
- assertEquals(
- R.drawable.price_insights_sheet_price_tracking_button_disabled,
- mPropertyModel.get(PRICE_TRACKING_BUTTON_ICON));
- assertEquals(
- PRICE_TRACKING_DISABLED_BUTTON_TEXT,
- mPropertyModel.get(PRICE_TRACKING_BUTTON_TEXT));
- assertEquals(
- mActivity.getColor(R.color.price_tracking_ineligible_button_foreground_color),
- mPropertyModel.get(PRICE_TRACKING_BUTTON_FOREGROUND_COLOR));
- assertEquals(
- mActivity.getColor(R.color.price_tracking_ineligible_button_background_color),
- mPropertyModel.get(PRICE_TRACKING_BUTTON_BACKGROUND_COLOR));
- assertNull(mPropertyModel.get(PRICE_TRACKING_BUTTON_ON_CLICK_LISTENER));
+ @Test
+ public void testRequestShowContent_ProductInfoNotAvailable() {
+ setUpGetPriceProductInfoForUrl(null);
+ mMediator.requestShowContent(mMockCallback);
+ verify(mMockCallback).onResult(false);
}
@Test
public void testRequestShowContent_PriceTrackingEligibleAndDisabled() {
- doReturn(false).when(mMockPriceTrackingStateSupplier).get();
+ setUpGetPriceProductInfoForUrl(PRODUCT_INFO);
mMediator.requestShowContent(mMockCallback);
mHistogramWatcher =
HistogramWatcher.newBuilder()
.expectIntRecord("Commerce.PriceInsights.PriceTracking.Track", PRICE_BUCKET)
.build();
+ verify(mMockCallback).onResult(true);
assertEquals(PRODUCT_TITLE, mPropertyModel.get(PRICE_TRACKING_TITLE));
assertPriceTrackingButtonHasTrackingState(/* isTracking= */ false);
@@ -185,6 +186,7 @@
@Test
public void testRequestShowContent_PriceTrackingEligibleAndEnabled() {
+ setUpGetPriceProductInfoForUrl(PRODUCT_INFO);
doReturn(true).when(mMockPriceTrackingStateSupplier).get();
mMediator.requestShowContent(mMockCallback);
mHistogramWatcher =
@@ -193,6 +195,7 @@
"Commerce.PriceInsights.PriceTracking.Untrack", PRICE_BUCKET)
.build();
+ verify(mMockCallback).onResult(true);
assertEquals(PRODUCT_TITLE, mPropertyModel.get(PRICE_TRACKING_TITLE));
assertPriceTrackingButtonHasTrackingState(/* isTracking= */ true);
@@ -209,6 +212,7 @@
@Test
public void testRequestShowContent_PriceTrackingButtonOnClick_Failed() {
+ setUpGetPriceProductInfoForUrl(PRODUCT_INFO);
doReturn(false).when(mMockPriceTrackingStateSupplier).get();
mMediator.requestShowContent(mMockCallback);
mHistogramWatcher =
@@ -216,6 +220,7 @@
.expectIntRecord("Commerce.PriceInsights.PriceTracking.Track", PRICE_BUCKET)
.build();
+ verify(mMockCallback).onResult(true);
assertPriceTrackingButtonHasTrackingState(/* isTracking= */ false);
// Test click price tracking button and set from state disabled to enabled failed.
@@ -251,6 +256,17 @@
.setPriceTrackingStateForTab(any(Tab.class), anyBoolean(), any());
}
+ private void setUpGetPriceProductInfoForUrl(ProductInfo info) {
+ doAnswer(
+ (InvocationOnMock invocation) -> {
+ ((ProductInfoCallback) invocation.getArgument(1))
+ .onResult(TEST_URL, info);
+ return null;
+ })
+ .when(mMockShoppingService)
+ .getProductInfoForUrl(any(), any());
+ }
+
private void setShoppingServiceGetPriceInsightsInfoForUrl(PriceInsightsInfo info) {
doAnswer(
(InvocationOnMock invocation) -> {
@@ -280,7 +296,6 @@
? SemanticColorUtils.getDefaultBgColor(mActivity)
: SemanticColorUtils.getColorPrimaryContainer(mActivity);
- assertTrue(mPropertyModel.get(PRICE_TRACKING_BUTTON_ENABLED));
assertEquals(buttonText, mPropertyModel.get(PRICE_TRACKING_BUTTON_TEXT));
assertEquals(buttonIconResId, mPropertyModel.get(PRICE_TRACKING_BUTTON_ICON));
assertEquals(
diff --git a/chrome/browser/commerce/price_tracking/android/javatests/src/org/chromium/chrome/browser/price_tracking/PriceTrackingBottomSheetContentRenderTest.java b/chrome/browser/commerce/price_tracking/android/javatests/src/org/chromium/chrome/browser/price_tracking/PriceTrackingBottomSheetContentRenderTest.java
index 9aa7f96..4fac838 100644
--- a/chrome/browser/commerce/price_tracking/android/javatests/src/org/chromium/chrome/browser/price_tracking/PriceTrackingBottomSheetContentRenderTest.java
+++ b/chrome/browser/commerce/price_tracking/android/javatests/src/org/chromium/chrome/browser/price_tracking/PriceTrackingBottomSheetContentRenderTest.java
@@ -4,7 +4,9 @@
package org.chromium.chrome.browser.price_tracking;
+import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyLong;
+import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.doReturn;
import static org.chromium.ui.test.util.RenderTestRule.Component.UI_BROWSER_SHOPPING;
@@ -22,6 +24,7 @@
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
+import org.mockito.invocation.InvocationOnMock;
import org.mockito.junit.MockitoJUnit;
import org.mockito.junit.MockitoRule;
@@ -41,11 +44,14 @@
import org.chromium.components.commerce.core.CommerceFeatureUtils;
import org.chromium.components.commerce.core.CommerceFeatureUtilsJni;
import org.chromium.components.commerce.core.ShoppingService;
+import org.chromium.components.commerce.core.ShoppingService.ProductInfo;
+import org.chromium.components.commerce.core.ShoppingService.ProductInfoCallback;
import org.chromium.ui.modelutil.PropertyModel;
import org.chromium.ui.test.util.BlankUiTestActivity;
import org.chromium.ui.test.util.RenderTestRule;
import java.io.IOException;
+import java.util.Optional;
/** Render Tests for the price tracking bottom sheet content. */
@RunWith(ChromeJUnit4ClassRunner.class)
@@ -76,6 +82,16 @@
@Mock private ShoppingService mMockShoppingService;
private static final String PRODUCT_TITLE = "Testing Sneaker";
+ private static final ProductInfo PRODUCT_INFO =
+ new ProductInfo(
+ null,
+ null,
+ Optional.of(12345L),
+ Optional.empty(),
+ null,
+ 0,
+ null,
+ Optional.empty());
private View mContentView;
private PriceTrackingBottomSheetContentCoordinator mCoordinator;
@@ -91,11 +107,13 @@
doReturn(PRODUCT_TITLE).when(mMockTab).getTitle();
ShoppingServiceFactory.setShoppingServiceForTesting(mMockShoppingService);
CommerceFeatureUtilsJni.setInstanceForTesting(mCommerceFeatureUtilsJniMock);
+ doReturn(true).when(mCommerceFeatureUtilsJniMock).isShoppingListEligible(anyLong());
doReturn(false).when(mMockPriceTrackingStateSupplier).get();
doReturn(mMockPriceTrackingStateSupplier)
.when(mMockPriceInsightsDelegate)
.getPriceTrackingStateSupplier(mMockTab);
+ setUpGetPriceProductInfoForUrl();
ThreadUtils.runOnUiThreadBlocking(
() -> {
@@ -118,20 +136,7 @@
@Test
@SmallTest
@Feature({"RenderTest"})
- public void testPriceTrackingIneligible() throws IOException {
- doReturn(false).when(mCommerceFeatureUtilsJniMock).isShoppingListEligible(anyLong());
- ThreadUtils.runOnUiThreadBlocking(
- () -> {
- mCoordinator.requestContent(mMockCallback);
- });
- mRenderTestRule.render(mContentView, "price_tracking_ineligible");
- }
-
- @Test
- @SmallTest
- @Feature({"RenderTest"})
public void testPriceTrackingEnabled() throws IOException {
- doReturn(true).when(mCommerceFeatureUtilsJniMock).isShoppingListEligible(anyLong());
doReturn(true).when(mMockPriceTrackingStateSupplier).get();
ThreadUtils.runOnUiThreadBlocking(
() -> {
@@ -144,7 +149,6 @@
@SmallTest
@Feature({"RenderTest"})
public void testPriceTrackingDisabled() throws IOException {
- doReturn(true).when(mCommerceFeatureUtilsJniMock).isShoppingListEligible(anyLong());
doReturn(false).when(mMockPriceTrackingStateSupplier).get();
ThreadUtils.runOnUiThreadBlocking(
() -> {
@@ -152,4 +156,15 @@
});
mRenderTestRule.render(mContentView, "price_tracking_disabled");
}
+
+ private void setUpGetPriceProductInfoForUrl() {
+ doAnswer(
+ (InvocationOnMock invocation) -> {
+ ((ProductInfoCallback) invocation.getArgument(1))
+ .onResult(invocation.getArgument(0), PRODUCT_INFO);
+ return null;
+ })
+ .when(mMockShoppingService)
+ .getProductInfoForUrl(any(), any());
+ }
}