Skip to content

Commit fce3076

Browse files
David Maunderpull[bot]
authored andcommitted
Migrate Price Drop Annotations on Android from OptimizationGuide to ShoppingService
Price Drop Annotations on Android was written before ShoppingService existed. It is more appropriate for the data to be acquired from ShoppingService (which calls OptimizationGuide). It also makes the code cleaner not to need to do all the proto parsing (and for the test code to set up all the test protos). Bug: 381237019 Change-Id: Idd290f6adcc619529584276be3a341ac9ad75ad3 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6050389 Reviewed-by: Yue Zhang <[email protected]> Commit-Queue: David Maunder <[email protected]> Code-Coverage: [email protected] <[email protected]> Cr-Commit-Position: refs/heads/main@{#1389010}
1 parent f7c282b commit fce3076

File tree

6 files changed

+200
-610
lines changed

6 files changed

+200
-610
lines changed

chrome/android/javatests/src/org/chromium/chrome/browser/tab/state/ShoppingPersistedTabDataDeferredStartupTest.java

Lines changed: 13 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -25,17 +25,16 @@
2525
import org.chromium.base.test.BaseJUnit4ClassRunner;
2626
import org.chromium.base.test.util.CommandLineFlags;
2727
import org.chromium.base.test.util.Features.EnableFeatures;
28+
import org.chromium.chrome.browser.commerce.ShoppingServiceFactory;
2829
import org.chromium.chrome.browser.flags.ChromeFeatureList;
2930
import org.chromium.chrome.browser.flags.ChromeSwitches;
30-
import org.chromium.chrome.browser.optimization_guide.OptimizationGuideBridge;
31-
import org.chromium.chrome.browser.optimization_guide.OptimizationGuideBridgeFactory;
32-
import org.chromium.chrome.browser.optimization_guide.OptimizationGuideBridgeFactoryJni;
3331
import org.chromium.chrome.browser.price_tracking.PriceTrackingFeatures;
3432
import org.chromium.chrome.browser.profiles.Profile;
3533
import org.chromium.chrome.browser.profiles.ProfileManager;
3634
import org.chromium.chrome.browser.tab.Tab;
35+
import org.chromium.chrome.browser.tab.state.ShoppingPersistedTabDataTestUtils.ShoppingServiceResponse;
3736
import org.chromium.chrome.test.ChromeBrowserTestRule;
38-
import org.chromium.components.optimization_guide.proto.HintsProto;
37+
import org.chromium.components.commerce.core.ShoppingService;
3938
import org.chromium.content_public.browser.NavigationHandle;
4039

4140
import java.util.concurrent.Semaphore;
@@ -47,8 +46,7 @@
4746
public class ShoppingPersistedTabDataDeferredStartupTest {
4847
@Rule public final ChromeBrowserTestRule mBrowserTestRule = new ChromeBrowserTestRule();
4948

50-
@Mock protected OptimizationGuideBridgeFactory.Natives mOptimizationGuideBridgeFactoryJniMock;
51-
@Mock protected OptimizationGuideBridge mOptimizationGuideBridgeMock;
49+
@Mock ShoppingService mShoppingService;
5250

5351
@Mock protected Profile mProfileMock;
5452

@@ -59,12 +57,6 @@ public class ShoppingPersistedTabDataDeferredStartupTest {
5957
@Before
6058
public void setUp() {
6159
MockitoAnnotations.initMocks(this);
62-
OptimizationGuideBridgeFactoryJni.setInstanceForTesting(
63-
mOptimizationGuideBridgeFactoryJniMock);
64-
doReturn(mOptimizationGuideBridgeMock)
65-
.when(mOptimizationGuideBridgeFactoryJniMock)
66-
.getForProfile(mProfileMock);
67-
6860
ThreadUtils.runOnUiThreadBlocking(
6961
() -> {
7062
PersistedTabDataConfiguration.setUseTestConfig(true);
@@ -73,6 +65,7 @@ public void setUp() {
7365
PriceTrackingFeatures.setPriceTrackingEnabledForTesting(false);
7466
doReturn(true).when(mNavigationHandle).isInPrimaryMainFrame();
7567
ShoppingPersistedTabDataService.setServiceForTesting(mShoppingPersistedTabDataService);
68+
ShoppingServiceFactory.setShoppingServiceForTesting(mShoppingService);
7669
}
7770

7871
@SmallTest
@@ -81,12 +74,9 @@ public void setUp() {
8174
ChromeFeatureList.COMMERCE_PRICE_TRACKING
8275
+ ":return_empty_price_drops_until_init/false")
8376
public void testDeferredStartup() {
84-
ShoppingPersistedTabDataTestUtils.mockOptimizationGuideResponse(
85-
mOptimizationGuideBridgeMock,
86-
HintsProto.OptimizationType.PRICE_TRACKING,
87-
ShoppingPersistedTabDataTestUtils.MockPriceTrackingResponse
88-
.BUYABLE_PRODUCT_AND_PRODUCT_UPDATE);
8977
final Tab tab = ShoppingPersistedTabDataTestUtils.createTabOnUiThread(0, mProfileMock);
78+
ShoppingPersistedTabDataTestUtils.mockShoppingServiceResponse(
79+
mShoppingService, tab.getUrl(), ShoppingServiceResponse.PRICE_DROP_1);
9080
Semaphore semaphore = new Semaphore(0);
9181
ThreadUtils.runOnUiThreadBlocking(
9282
() -> {
@@ -115,12 +105,9 @@ public void testDeferredStartup() {
115105
@EnableFeatures(
116106
ChromeFeatureList.COMMERCE_PRICE_TRACKING + ":return_empty_price_drops_until_init/true")
117107
public void testReturnEmptyPriceDropsUntilInit() {
118-
ShoppingPersistedTabDataTestUtils.mockOptimizationGuideResponse(
119-
mOptimizationGuideBridgeMock,
120-
HintsProto.OptimizationType.PRICE_TRACKING,
121-
ShoppingPersistedTabDataTestUtils.MockPriceTrackingResponse
122-
.BUYABLE_PRODUCT_AND_PRODUCT_UPDATE);
123108
final Tab tab = ShoppingPersistedTabDataTestUtils.createTabOnUiThread(0, mProfileMock);
109+
ShoppingPersistedTabDataTestUtils.mockShoppingServiceResponse(
110+
mShoppingService, tab.getUrl(), ShoppingServiceResponse.PRICE_DROP_1);
124111
final Semaphore semaphore = new Semaphore(0);
125112
ThreadUtils.runOnUiThreadBlocking(
126113
() -> {
@@ -165,12 +152,9 @@ public void testReturnEmptyPriceDropsUntilInit() {
165152
@EnableFeatures(
166153
ChromeFeatureList.COMMERCE_PRICE_TRACKING + ":return_empty_price_drops_until_init/true")
167154
public void testSkipDelayedInitialization_NotSkip() {
168-
ShoppingPersistedTabDataTestUtils.mockOptimizationGuideResponse(
169-
mOptimizationGuideBridgeMock,
170-
HintsProto.OptimizationType.PRICE_TRACKING,
171-
ShoppingPersistedTabDataTestUtils.MockPriceTrackingResponse
172-
.BUYABLE_PRODUCT_AND_PRODUCT_UPDATE);
173155
final Tab tab = ShoppingPersistedTabDataTestUtils.createTabOnUiThread(0, mProfileMock);
156+
ShoppingPersistedTabDataTestUtils.mockShoppingServiceResponse(
157+
mShoppingService, tab.getUrl(), ShoppingServiceResponse.PRICE_DROP_1);
174158
final Semaphore semaphore = new Semaphore(0);
175159
ThreadUtils.runOnUiThreadBlocking(
176160
() -> {
@@ -191,13 +175,9 @@ public void testSkipDelayedInitialization_NotSkip() {
191175
@EnableFeatures(
192176
ChromeFeatureList.COMMERCE_PRICE_TRACKING + ":return_empty_price_drops_until_init/true")
193177
public void testSkipDelayedInitialization_Skip() {
194-
ShoppingPersistedTabDataTestUtils.mockOptimizationGuideResponse(
195-
mOptimizationGuideBridgeMock,
196-
HintsProto.OptimizationType.PRICE_TRACKING,
197-
ShoppingPersistedTabDataTestUtils.MockPriceTrackingResponse
198-
.BUYABLE_PRODUCT_AND_PRODUCT_UPDATE);
199178
final Tab tab = ShoppingPersistedTabDataTestUtils.createTabOnUiThread(0, mProfileMock);
200-
179+
ShoppingPersistedTabDataTestUtils.mockShoppingServiceResponse(
180+
mShoppingService, tab.getUrl(), ShoppingServiceResponse.PRICE_DROP_1);
201181
final Semaphore semaphore = new Semaphore(0);
202182
ThreadUtils.runOnUiThreadBlocking(
203183
() -> {
@@ -224,12 +204,6 @@ public void testSkipDelayedInitialization_Skip() {
224204
@EnableFeatures(
225205
ChromeFeatureList.COMMERCE_PRICE_TRACKING + ":return_empty_price_drops_until_init/true")
226206
public void testSkipDelayedInitialization_SkipForNullTab() {
227-
ShoppingPersistedTabDataTestUtils.mockOptimizationGuideResponse(
228-
mOptimizationGuideBridgeMock,
229-
HintsProto.OptimizationType.PRICE_TRACKING,
230-
ShoppingPersistedTabDataTestUtils.MockPriceTrackingResponse
231-
.BUYABLE_PRODUCT_AND_PRODUCT_UPDATE);
232-
233207
final Semaphore semaphore = new Semaphore(0);
234208
ThreadUtils.runOnUiThreadBlocking(
235209
() -> {
@@ -249,11 +223,6 @@ public void testSkipDelayedInitialization_SkipForNullTab() {
249223
@EnableFeatures(
250224
ChromeFeatureList.COMMERCE_PRICE_TRACKING + ":return_empty_price_drops_until_init/true")
251225
public void testSkipDelayedInitialization_SkipForDestroyedTab() {
252-
ShoppingPersistedTabDataTestUtils.mockOptimizationGuideResponse(
253-
mOptimizationGuideBridgeMock,
254-
HintsProto.OptimizationType.PRICE_TRACKING,
255-
ShoppingPersistedTabDataTestUtils.MockPriceTrackingResponse
256-
.BUYABLE_PRODUCT_AND_PRODUCT_UPDATE);
257226
final Tab tab = mock(Tab.class);
258227
doReturn(true).when(tab).isDestroyed();
259228

chrome/android/javatests/src/org/chromium/chrome/browser/tab/state/ShoppingPersistedTabDataServiceTest.java

Lines changed: 11 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -28,19 +28,18 @@
2828
import org.chromium.base.test.util.CallbackHelper;
2929
import org.chromium.base.test.util.CommandLineFlags;
3030
import org.chromium.base.test.util.Features;
31+
import org.chromium.chrome.browser.commerce.ShoppingServiceFactory;
3132
import org.chromium.chrome.browser.flags.ChromeFeatureList;
3233
import org.chromium.chrome.browser.flags.ChromeSwitches;
33-
import org.chromium.chrome.browser.optimization_guide.OptimizationGuideBridge;
34-
import org.chromium.chrome.browser.optimization_guide.OptimizationGuideBridgeFactory;
35-
import org.chromium.chrome.browser.optimization_guide.OptimizationGuideBridgeFactoryJni;
3634
import org.chromium.chrome.browser.preferences.ChromeSharedPreferences;
3735
import org.chromium.chrome.browser.price_tracking.PriceTrackingFeatures;
3836
import org.chromium.chrome.browser.profiles.Profile;
3937
import org.chromium.chrome.browser.profiles.ProfileManager;
4038
import org.chromium.chrome.browser.tab.MockTab;
4139
import org.chromium.chrome.browser.tab.Tab;
40+
import org.chromium.chrome.browser.tab.state.ShoppingPersistedTabDataTestUtils.ShoppingServiceResponse;
4241
import org.chromium.chrome.test.ChromeBrowserTestRule;
43-
import org.chromium.components.optimization_guide.proto.HintsProto.OptimizationType;
42+
import org.chromium.components.commerce.core.ShoppingService;
4443
import org.chromium.url.GURL;
4544

4645
import java.util.Arrays;
@@ -53,8 +52,7 @@
5352
public class ShoppingPersistedTabDataServiceTest {
5453
@Rule public final ChromeBrowserTestRule mBrowserTestRule = new ChromeBrowserTestRule();
5554

56-
@Mock protected OptimizationGuideBridgeFactory.Natives mOptimizationGuideBridgeFactoryJniMock;
57-
@Mock protected OptimizationGuideBridge mOptimizationGuideBridgeMock;
55+
@Mock ShoppingService mShoppingService;
5856

5957
@Mock protected Profile mProfileMock;
6058

@@ -67,11 +65,6 @@ public class ShoppingPersistedTabDataServiceTest {
6765
@Before
6866
public void setUp() {
6967
MockitoAnnotations.initMocks(this);
70-
OptimizationGuideBridgeFactoryJni.setInstanceForTesting(
71-
mOptimizationGuideBridgeFactoryJniMock);
72-
doReturn(mOptimizationGuideBridgeMock)
73-
.when(mOptimizationGuideBridgeFactoryJniMock)
74-
.getForProfile(mProfileMock);
7568
ThreadUtils.runOnUiThreadBlocking(
7669
() -> {
7770
PersistedTabDataConfiguration.setUseTestConfig(true);
@@ -80,6 +73,7 @@ public void setUp() {
8073
mService = new ShoppingPersistedTabDataService();
8174
mSharedPrefsManager = ChromeSharedPreferences.getInstance();
8275
PriceTrackingFeatures.setPriceTrackingEnabledForTesting(false);
76+
ShoppingServiceFactory.setShoppingServiceForTesting(mShoppingService);
8377
}
8478

8579
@After
@@ -200,34 +194,22 @@ public void testGetAllShoppingPersistedTabDataWithPriceDrop() throws TimeoutExce
200194
MockTab tab1 = ShoppingPersistedTabDataTestUtils.createTabOnUiThread(123, mProfileMock);
201195
GURL url1 = ShoppingPersistedTabDataTestUtils.DEFAULT_GURL;
202196
tab1.setGurlOverrideForTesting(url1);
203-
ShoppingPersistedTabDataTestUtils.mockOptimizationGuideResponseForURL(
204-
url1,
205-
mOptimizationGuideBridgeMock,
206-
OptimizationType.PRICE_TRACKING,
207-
ShoppingPersistedTabDataTestUtils.MockPriceTrackingResponse
208-
.BUYABLE_PRODUCT_INITIAL);
197+
ShoppingPersistedTabDataTestUtils.mockShoppingServiceResponse(
198+
mShoppingService, url1, ShoppingServiceResponse.PRICE);
209199

210200
// tab2 is eligible.
211201
MockTab tab2 = ShoppingPersistedTabDataTestUtils.createTabOnUiThread(456, mProfileMock);
212202
GURL url2 = ShoppingPersistedTabDataTestUtils.GURL_FOO;
213203
tab2.setGurlOverrideForTesting(url2);
214-
ShoppingPersistedTabDataTestUtils.mockOptimizationGuideResponseForURL(
215-
url2,
216-
mOptimizationGuideBridgeMock,
217-
OptimizationType.PRICE_TRACKING,
218-
ShoppingPersistedTabDataTestUtils.MockPriceTrackingResponse
219-
.BUYABLE_PRODUCT_AND_PRODUCT_UPDATE);
204+
ShoppingPersistedTabDataTestUtils.mockShoppingServiceResponse(
205+
mShoppingService, url2, ShoppingServiceResponse.PRICE_DROP_1);
220206

221207
// tab3 is eligible.
222208
MockTab tab3 = ShoppingPersistedTabDataTestUtils.createTabOnUiThread(789, mProfileMock);
223209
GURL url3 = ShoppingPersistedTabDataTestUtils.GURL_BAR;
224210
tab3.setGurlOverrideForTesting(url3);
225-
ShoppingPersistedTabDataTestUtils.mockOptimizationGuideResponseForURL(
226-
url3,
227-
mOptimizationGuideBridgeMock,
228-
OptimizationType.PRICE_TRACKING,
229-
ShoppingPersistedTabDataTestUtils.MockPriceTrackingResponse
230-
.BUYABLE_PRODUCT_AND_PRODUCT_UPDATE_TWO);
211+
ShoppingPersistedTabDataTestUtils.mockShoppingServiceResponse(
212+
mShoppingService, url3, ShoppingServiceResponse.PRICE_DROP_2);
231213

232214
// Set up the recency to be tab1 > tab3 > tab2.
233215
long currentTimeStamp = System.currentTimeMillis();

0 commit comments

Comments
 (0)