Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(138)

Side by Side Diff: chrome/android/junit/src/org/chromium/chrome/browser/webapps/ManifestUpgradeDetectorTest.java

Issue 2543073005: Make ManifestUpgradeDetectorTest use the intent version of WebApkInfo#create() (Closed)
Patch Set: Merge branch 'master' into update_fail_refactor01 Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 package org.chromium.chrome.browser.webapps; 5 package org.chromium.chrome.browser.webapps;
6 6
7 import android.content.Context; 7 import android.content.Context;
8 import android.content.Intent;
8 import android.graphics.Bitmap; 9 import android.graphics.Bitmap;
9 import android.graphics.Color; 10 import android.graphics.Color;
11 import android.os.Bundle;
10 import android.text.TextUtils; 12 import android.text.TextUtils;
11 13
12 import org.junit.Assert; 14 import org.junit.Assert;
13 import org.junit.Before; 15 import org.junit.Before;
14 import org.junit.Test; 16 import org.junit.Test;
15 import org.junit.runner.RunWith; 17 import org.junit.runner.RunWith;
16 import org.robolectric.RuntimeEnvironment; 18 import org.robolectric.RuntimeEnvironment;
17 import org.robolectric.annotation.Config; 19 import org.robolectric.annotation.Config;
18 import org.robolectric.res.builder.RobolectricPackageManager; 20 import org.robolectric.res.builder.RobolectricPackageManager;
19 import org.robolectric.shadows.ShadowBitmap; 21 import org.robolectric.shadows.ShadowBitmap;
20 22
21 import org.chromium.base.ContextUtils; 23 import org.chromium.base.ContextUtils;
22 import org.chromium.blink_public.platform.WebDisplayMode; 24 import org.chromium.blink_public.platform.WebDisplayMode;
23 import org.chromium.chrome.browser.ShortcutHelper; 25 import org.chromium.chrome.browser.ShortcutHelper;
24 import org.chromium.chrome.browser.tab.Tab; 26 import org.chromium.chrome.browser.tab.Tab;
25 import org.chromium.content_public.common.ScreenOrientationValues; 27 import org.chromium.content_public.common.ScreenOrientationValues;
26 import org.chromium.testing.local.LocalRobolectricTestRunner; 28 import org.chromium.testing.local.LocalRobolectricTestRunner;
29 import org.chromium.webapk.lib.common.WebApkMetaDataKeys;
30 import org.chromium.webapk.test.WebApkTestHelper;
27 31
28 import java.util.HashMap; 32 import java.util.HashMap;
29 import java.util.Map; 33 import java.util.Map;
30 34
31 /** 35 /**
32 * Tests the ManifestUpgradeDetector. 36 * Tests the ManifestUpgradeDetector.
33 */ 37 */
34 @RunWith(LocalRobolectricTestRunner.class) 38 @RunWith(LocalRobolectricTestRunner.class)
35 @Config(manifest = Config.NONE) 39 @Config(manifest = Config.NONE)
36 public class ManifestUpgradeDetectorTest { 40 public class ManifestUpgradeDetectorTest {
37 41
38 private static final String WEBAPK_START_URL = "/start_url.html"; 42 private static final String WEBAPK_START_URL = "/start_url.html";
39 private static final String WEBAPK_SCOPE_URL = "/"; 43 private static final String WEBAPK_SCOPE_URL = "/";
40 private static final String WEBAPK_NAME = "Long Name"; 44 private static final String WEBAPK_NAME = "Long Name";
41 private static final String WEBAPK_SHORT_NAME = "Short Name"; 45 private static final String WEBAPK_SHORT_NAME = "Short Name";
42 private static final String WEBAPK_BEST_ICON_URL = "/icon.png"; 46 private static final String WEBAPK_BEST_ICON_URL = "/icon.png";
43 private static final String WEBAPK_BEST_ICON_MURMUR2_HASH = "3"; 47 private static final String WEBAPK_BEST_ICON_MURMUR2_HASH = "3";
44 private static final int WEBAPK_DISPLAY_MODE = WebDisplayMode.Standalone; 48 private static final int WEBAPK_DISPLAY_MODE = WebDisplayMode.Undefined;
45 private static final int WEBAPK_ORIENTATION = ScreenOrientationValues.LANDSC APE; 49 private static final int WEBAPK_ORIENTATION = ScreenOrientationValues.DEFAUL T;
46 private static final long WEBAPK_THEME_COLOR = 1L; 50 private static final long WEBAPK_THEME_COLOR = 1L;
47 private static final long WEBAPK_BACKGROUND_COLOR = 2L; 51 private static final long WEBAPK_BACKGROUND_COLOR = 2L;
48 private static final String WEBAPK_MANIFEST_URL = "manifest.json"; 52 private static final String WEBAPK_MANIFEST_URL = "manifest.json";
49 private static final String WEBAPK_PACKAGE_NAME = "package_name"; 53 private static final String WEBAPK_PACKAGE_NAME = "package_name";
50 54
51 private RobolectricPackageManager mPackageManager; 55 private RobolectricPackageManager mPackageManager;
52 56
53 private static class TestCallback implements ManifestUpgradeDetector.Callbac k { 57 private static class TestCallback implements ManifestUpgradeDetector.Callbac k {
54 public boolean mIsUpgraded; 58 public boolean mIsUpgraded;
55 public boolean mWasCalled; 59 public boolean mWasCalled;
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
168 } 172 }
169 173
170 private static WebApkInfo infoFromManifestData(ManifestData manifestData) { 174 private static WebApkInfo infoFromManifestData(ManifestData manifestData) {
171 return WebApkInfo.create("", "", manifestData.scopeUrl, 175 return WebApkInfo.create("", "", manifestData.scopeUrl,
172 new WebApkInfo.Icon(manifestData.bestIcon), manifestData.name, 176 new WebApkInfo.Icon(manifestData.bestIcon), manifestData.name,
173 manifestData.shortName, manifestData.displayMode, manifestData.o rientation, -1, 177 manifestData.shortName, manifestData.displayMode, manifestData.o rientation, -1,
174 manifestData.themeColor, manifestData.backgroundColor, WEBAPK_PA CKAGE_NAME, -1, 178 manifestData.themeColor, manifestData.backgroundColor, WEBAPK_PA CKAGE_NAME, -1,
175 WEBAPK_MANIFEST_URL, manifestData.startUrl, manifestData.iconUrl ToMurmur2HashMap); 179 WEBAPK_MANIFEST_URL, manifestData.startUrl, manifestData.iconUrl ToMurmur2HashMap);
176 } 180 }
177 181
178 private static TestManifestUpgradeDetector createDetectorWithFetchedData( 182 /**
179 ManifestData fetchedData, TestCallback callback) { 183 * Checks whether the WebAPK is updated given data from the WebAPK's Android Manifest and data
180 return createDetector(defaultManifestData(), fetchedData, callback); 184 * from the fetched Web Manifest. This function uses the intent version of
185 * {@link WebApkInfo#create()} in order to test default values set by the in tent version of
186 * {@link WebApkInfo#create()} and how the defaults affect whether the WebAP K is updated.
187 */
188 private boolean checkUpdateNeededForFetchedManifest(
189 ManifestData androidManifestData, ManifestData fetchedManifestData) {
190 registerWebApk(androidManifestData);
191
192 Intent intent = new Intent();
193 intent.putExtra(ShortcutHelper.EXTRA_URL, "");
194 intent.putExtra(
195 ShortcutHelper.EXTRA_WEBAPK_PACKAGE_NAME, WebApkTestHelper.WEBAP K_PACKAGE_NAME);
196 WebApkInfo androidManifestInfo = WebApkInfo.create(intent);
197
198 TestCallback callback = new TestCallback();
199 TestManifestUpgradeDetector detector =
200 new TestManifestUpgradeDetector(androidManifestInfo, fetchedMani festData, callback);
201 detector.start();
202 Assert.assertTrue(callback.mWasCalled);
203 return callback.mIsUpgraded;
181 } 204 }
182 205
183 /** 206 /**
184 * Creates ManifestUpgradeDetector. 207 * Registers WebAPK with default package name. Overwrites previous registrat ions.
185 * @param oldData Data used to create WebAPK. Potentially different from Web Manifest data at 208 * @param manifestData <meta-data> values for WebAPK's Android Manifest.
186 * time that the WebAPK was generated.
187 * @param fetchedData Data fetched by ManifestUpgradeDetector.
188 * @param callback Callback to call when the upgrade check is complete.
189 */ 209 */
190 private static TestManifestUpgradeDetector createDetector( 210 private void registerWebApk(ManifestData manifestData) {
191 ManifestData oldData, ManifestData fetchedData, TestCallback callbac k) { 211 Bundle metaData = new Bundle();
192 return new TestManifestUpgradeDetector( 212 metaData.putString(WebApkMetaDataKeys.START_URL, manifestData.startUrl);
193 infoFromManifestData(oldData), fetchedData, callback); 213 metaData.putString(WebApkMetaDataKeys.SCOPE, manifestData.scopeUrl);
214 metaData.putString(WebApkMetaDataKeys.NAME, manifestData.name);
215 metaData.putString(WebApkMetaDataKeys.SHORT_NAME, manifestData.shortName );
216 metaData.putString(WebApkMetaDataKeys.THEME_COLOR, manifestData.themeCol or + "L");
217 metaData.putString(WebApkMetaDataKeys.BACKGROUND_COLOR, manifestData.bac kgroundColor + "L");
218 metaData.putString(WebApkMetaDataKeys.WEB_MANIFEST_URL, WEBAPK_MANIFEST_ URL);
219
220 String iconUrlsAndIconMurmur2Hashes = "";
221 for (String iconUrl : manifestData.iconUrlToMurmur2HashMap.keySet()) {
222 String murmur2Hash = manifestData.iconUrlToMurmur2HashMap.get(iconUr l);
223 if (murmur2Hash == null) {
224 murmur2Hash = "0";
225 }
226 iconUrlsAndIconMurmur2Hashes += " " + iconUrl + " " + murmur2Hash;
227 }
228 iconUrlsAndIconMurmur2Hashes = iconUrlsAndIconMurmur2Hashes.trim();
229 metaData.putString(WebApkMetaDataKeys.ICON_URLS_AND_ICON_MURMUR2_HASHES,
230 iconUrlsAndIconMurmur2Hashes);
231 WebApkTestHelper.registerWebApkWithMetaData(metaData);
194 } 232 }
195 233
196 @Test 234 @Test
197 public void testManifestDoesNotUpgrade() { 235 public void testManifestDoesNotUpgrade() {
198 TestCallback callback = new TestCallback(); 236 Assert.assertFalse(
199 TestManifestUpgradeDetector detector = 237 checkUpdateNeededForFetchedManifest(defaultManifestData(), defau ltManifestData()));
200 createDetectorWithFetchedData(defaultManifestData(), callback);
201 detector.start();
202 Assert.assertTrue(callback.mWasCalled);
203 Assert.assertFalse(callback.mIsUpgraded);
204 } 238 }
205 239
206 @Test 240 @Test
207 public void testStartUrlChangeShouldUpgrade() { 241 public void testStartUrlChangeShouldUpgrade() {
208 ManifestData fetchedData = defaultManifestData(); 242 ManifestData fetchedData = defaultManifestData();
209 fetchedData.startUrl = "/changed.html"; 243 fetchedData.startUrl = "/changed.html";
210 TestCallback callback = new TestCallback(); 244 Assert.assertTrue(checkUpdateNeededForFetchedManifest(defaultManifestDat a(), fetchedData));
211 TestManifestUpgradeDetector detector = createDetectorWithFetchedData(fet chedData, callback);
212 detector.start();
213 Assert.assertTrue(callback.mWasCalled);
214 Assert.assertTrue(callback.mIsUpgraded);
215 } 245 }
216 246
217 /** 247 /**
218 * Test that an upgrade is not requested when the Web Manifest did not chang e and the Web 248 * Test that an upgrade is not requested when the Web Manifest did not chang e and the Web
219 * Manifest scope is empty. 249 * Manifest scope is empty.
220 */ 250 */
221 @Test 251 @Test
222 public void testManifestEmptyScopeShouldNotUpgrade() { 252 public void testManifestEmptyScopeShouldNotUpgrade() {
223 ManifestData oldData = defaultManifestData(); 253 ManifestData oldData = defaultManifestData();
224 // webapk_installer.cc sets the scope to the default scope if the scope is empty. 254 // webapk_installer.cc sets the scope to the default scope if the scope is empty.
225 oldData.scopeUrl = ShortcutHelper.getScopeFromUrl(oldData.startUrl); 255 oldData.scopeUrl = ShortcutHelper.getScopeFromUrl(oldData.startUrl);
226 ManifestData fetchedData = defaultManifestData(); 256 ManifestData fetchedData = defaultManifestData();
227 fetchedData.scopeUrl = ""; 257 fetchedData.scopeUrl = "";
228 Assert.assertTrue(!oldData.scopeUrl.equals(fetchedData.scopeUrl)); 258 Assert.assertTrue(!oldData.scopeUrl.equals(fetchedData.scopeUrl));
229 259 Assert.assertFalse(checkUpdateNeededForFetchedManifest(oldData, fetchedD ata));
230 TestCallback callback = new TestCallback();
231 TestManifestUpgradeDetector detector = createDetector(oldData, fetchedDa ta, callback);
232 detector.start();
233 Assert.assertTrue(callback.mWasCalled);
234 Assert.assertFalse(callback.mIsUpgraded);
235 } 260 }
236 261
237 /** 262 /**
238 * Test that an upgrade is requested when the Web Manifest is updated from u sing a non-empty 263 * Test that an upgrade is requested when the Web Manifest is updated from u sing a non-empty
239 * scope to an empty scope. 264 * scope to an empty scope.
240 */ 265 */
241 @Test 266 @Test
242 public void testManifestNonEmptyScopeToEmptyScopeShouldUpgrade() { 267 public void testManifestNonEmptyScopeToEmptyScopeShouldUpgrade() {
243 ManifestData oldData = defaultManifestData(); 268 ManifestData oldData = defaultManifestData();
244 oldData.startUrl = "/fancy/scope/special/snowflake.html"; 269 oldData.startUrl = "/fancy/scope/special/snowflake.html";
245 oldData.scopeUrl = "/fancy/scope/"; 270 oldData.scopeUrl = "/fancy/scope/";
246 Assert.assertTrue( 271 Assert.assertTrue(
247 !oldData.scopeUrl.equals(ShortcutHelper.getScopeFromUrl(oldData. startUrl))); 272 !oldData.scopeUrl.equals(ShortcutHelper.getScopeFromUrl(oldData. startUrl)));
248 ManifestData fetchedData = defaultManifestData(); 273 ManifestData fetchedData = defaultManifestData();
249 fetchedData.startUrl = "/fancy/scope/special/snowflake.html"; 274 fetchedData.startUrl = "/fancy/scope/special/snowflake.html";
250 fetchedData.scopeUrl = ""; 275 fetchedData.scopeUrl = "";
251 276
252 TestCallback callback = new TestCallback(); 277 Assert.assertTrue(checkUpdateNeededForFetchedManifest(oldData, fetchedDa ta));
253 TestManifestUpgradeDetector detector = createDetector(oldData, fetchedDa ta, callback);
254 detector.start();
255 Assert.assertTrue(callback.mWasCalled);
256 Assert.assertTrue(callback.mIsUpgraded);
257 } 278 }
258 279
259 /** 280 /**
260 * Test that an upgrade is requested when: 281 * Test that an upgrade is requested when:
261 * - WebAPK was generated using icon at {@link WEBAPK_BEST_ICON_URL} from We b Manifest. 282 * - WebAPK was generated using icon at {@link WEBAPK_BEST_ICON_URL} from We b Manifest.
262 * - Bitmap at {@link WEBAPK_BEST_ICON_URL} has changed. 283 * - Bitmap at {@link WEBAPK_BEST_ICON_URL} has changed.
263 */ 284 */
264 @Test 285 @Test
265 public void testHomescreenIconChangeShouldUpgrade() { 286 public void testHomescreenIconChangeShouldUpgrade() {
266 ManifestData fetchedData = defaultManifestData(); 287 ManifestData fetchedData = defaultManifestData();
267 fetchedData.iconUrlToMurmur2HashMap.put(fetchedData.bestIconUrl, 288 fetchedData.iconUrlToMurmur2HashMap.put(fetchedData.bestIconUrl,
268 WEBAPK_BEST_ICON_MURMUR2_HASH + "1"); 289 WEBAPK_BEST_ICON_MURMUR2_HASH + "1");
269 fetchedData.bestIcon = createBitmap(Color.BLUE); 290 fetchedData.bestIcon = createBitmap(Color.BLUE);
270 TestCallback callback = new TestCallback(); 291 Assert.assertTrue(checkUpdateNeededForFetchedManifest(defaultManifestDat a(), fetchedData));
271 TestManifestUpgradeDetector detector = createDetectorWithFetchedData(fet chedData, callback);
272
273 detector.start();
274 Assert.assertTrue(callback.mWasCalled);
275 Assert.assertTrue(callback.mIsUpgraded);
276 } 292 }
277 293
278 /** 294 /**
279 * Test that an upgrade is requested when: 295 * Test that an upgrade is requested when:
280 * - WebAPK is generated using icon at {@link WEBAPK_BEST_ICON_URL} from Web Manifest. 296 * - WebAPK is generated using icon at {@link WEBAPK_BEST_ICON_URL} from Web Manifest.
281 * - Web Manifest is updated to refer to different icon. 297 * - Web Manifest is updated to refer to different icon.
282 */ 298 */
283 @Test 299 @Test
284 public void testHomescreenBestIconUrlChangeShouldUpgrade() { 300 public void testHomescreenBestIconUrlChangeShouldUpgrade() {
285 ManifestData fetchedData = defaultManifestData(); 301 ManifestData fetchedData = defaultManifestData();
286 fetchedData.iconUrlToMurmur2HashMap.clear(); 302 fetchedData.iconUrlToMurmur2HashMap.clear();
287 fetchedData.iconUrlToMurmur2HashMap.put("/icon2.png", "22"); 303 fetchedData.iconUrlToMurmur2HashMap.put("/icon2.png", "22");
288 fetchedData.bestIconUrl = "/icon2.png"; 304 fetchedData.bestIconUrl = "/icon2.png";
289 305 Assert.assertTrue(checkUpdateNeededForFetchedManifest(defaultManifestDat a(), fetchedData));
290 TestCallback callback = new TestCallback();
291 TestManifestUpgradeDetector detector = createDetectorWithFetchedData(fet chedData, callback);
292 detector.start();
293 Assert.assertTrue(callback.mWasCalled);
294 Assert.assertTrue(callback.mIsUpgraded);
295 } 306 }
296 307
297 /** 308 /**
298 * Test that an upgrade is not requested if: 309 * Test that an upgrade is not requested if:
299 * - icon URL is added to the Web Manifest 310 * - icon URL is added to the Web Manifest
300 * AND 311 * AND
301 * - "best" icon URL for the launcher icon did not change. 312 * - "best" icon URL for the launcher icon did not change.
302 */ 313 */
303 @Test 314 @Test
304 public void testIconUrlsChangeShouldNotUpgradeIfTheBestIconUrlDoesNotChange( ) { 315 public void testIconUrlsChangeShouldNotUpgradeIfTheBestIconUrlDoesNotChange( ) {
305 ManifestData fetchedData = defaultManifestData(); 316 ManifestData fetchedData = defaultManifestData();
306 fetchedData.iconUrlToMurmur2HashMap.clear(); 317 fetchedData.iconUrlToMurmur2HashMap.clear();
307 fetchedData.iconUrlToMurmur2HashMap.put( 318 fetchedData.iconUrlToMurmur2HashMap.put(
308 WEBAPK_BEST_ICON_URL, WEBAPK_BEST_ICON_MURMUR2_HASH); 319 WEBAPK_BEST_ICON_URL, WEBAPK_BEST_ICON_MURMUR2_HASH);
309 fetchedData.iconUrlToMurmur2HashMap.put("/icon2.png", null); 320 fetchedData.iconUrlToMurmur2HashMap.put("/icon2.png", null);
310 321 Assert.assertFalse(checkUpdateNeededForFetchedManifest(defaultManifestDa ta(), fetchedData));
311 TestCallback callback = new TestCallback();
312 TestManifestUpgradeDetector detector = createDetectorWithFetchedData(fet chedData, callback);
313 detector.start();
314 Assert.assertTrue(callback.mWasCalled);
315 Assert.assertFalse(callback.mIsUpgraded);
316 } 322 }
317 323
318 /** 324 /**
319 * Test than upgrade is requested if: 325 * Test than upgrade is requested if:
320 * - the WebAPK's meta data has murmur2 hashes for all of the icons. 326 * - the WebAPK's meta data has murmur2 hashes for all of the icons.
321 * AND 327 * AND
322 * - the Web Manifest has not changed 328 * - the Web Manifest has not changed
323 * AND 329 * AND
324 * - the computed best icon URL is different from the one stored in the WebA PK's meta data. 330 * - the computed best icon URL is different from the one stored in the WebA PK's meta data.
325 */ 331 */
326 @Test 332 @Test
327 public void testWebManifestSameButBestIconUrlChangedShouldNotUpgrade() { 333 public void testWebManifestSameButBestIconUrlChangedShouldNotUpgrade() {
328 String iconUrl1 = "/icon1.png"; 334 String iconUrl1 = "/icon1.png";
329 String iconUrl2 = "/icon2.png"; 335 String iconUrl2 = "/icon2.png";
330 String hash1 = "11"; 336 String hash1 = "11";
331 String hash2 = "22"; 337 String hash2 = "22";
332 338
333 ManifestData oldData = defaultManifestData(); 339 ManifestData oldData = defaultManifestData();
334 oldData.bestIconUrl = iconUrl1; 340 oldData.bestIconUrl = iconUrl1;
335 oldData.iconUrlToMurmur2HashMap.clear(); 341 oldData.iconUrlToMurmur2HashMap.clear();
336 oldData.iconUrlToMurmur2HashMap.put(iconUrl1, hash1); 342 oldData.iconUrlToMurmur2HashMap.put(iconUrl1, hash1);
337 oldData.iconUrlToMurmur2HashMap.put(iconUrl2, hash2); 343 oldData.iconUrlToMurmur2HashMap.put(iconUrl2, hash2);
338 344
339 ManifestData fetchedData = defaultManifestData(); 345 ManifestData fetchedData = defaultManifestData();
340 fetchedData.bestIconUrl = iconUrl2; 346 fetchedData.bestIconUrl = iconUrl2;
341 fetchedData.iconUrlToMurmur2HashMap.clear(); 347 fetchedData.iconUrlToMurmur2HashMap.clear();
342 fetchedData.iconUrlToMurmur2HashMap.put(iconUrl1, null); 348 fetchedData.iconUrlToMurmur2HashMap.put(iconUrl1, null);
343 fetchedData.iconUrlToMurmur2HashMap.put(iconUrl2, hash2); 349 fetchedData.iconUrlToMurmur2HashMap.put(iconUrl2, hash2);
344 350
345 TestCallback callback = new TestCallback(); 351 Assert.assertFalse(checkUpdateNeededForFetchedManifest(oldData, fetchedD ata));
346 TestManifestUpgradeDetector detector = createDetector(oldData, fetchedDa ta, callback);
347 detector.start();
348 Assert.assertTrue(callback.mWasCalled);
349 Assert.assertFalse(callback.mIsUpgraded);
350 } 352 }
351 } 353 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698