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

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/webapps/WebApkMetaDataUtils.java

Issue 2453423002: Send all of the icon URLs listed in Web Manifest to WebAPK Server. (Closed)
Patch Set: Nits. Created 4 years, 1 month 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 side-by-side diff with in-line comments
Download patch
Index: chrome/android/java/src/org/chromium/chrome/browser/webapps/WebApkMetaDataUtils.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebApkMetaDataUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebApkMetaDataUtils.java
index bfe11ea07f448d7f86bdd86b4d4051ed6020ecd1..5955df2c6008ef9fdbdc8e0e6fc71758b6ceba46 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebApkMetaDataUtils.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebApkMetaDataUtils.java
@@ -13,6 +13,7 @@ import android.os.Bundle;
import android.text.TextUtils;
import org.chromium.base.ContextUtils;
+import org.chromium.base.Log;
import org.chromium.blink_public.platform.WebDisplayMode;
import org.chromium.chrome.browser.ShortcutHelper;
import org.chromium.chrome.browser.util.IntentUtils;
@@ -20,10 +21,15 @@ import org.chromium.content_public.common.ScreenOrientationValues;
import org.chromium.webapk.lib.common.WebApkConstants;
import org.chromium.webapk.lib.common.WebApkMetaDataKeys;
+import java.util.HashMap;
+import java.util.Map;
+
/**
* Contains methods for extracting meta data from WebAPK.
*/
public class WebApkMetaDataUtils {
+ private static final String TAG = "cr_WebApkMetaData";
+
/**
* Populates {@link WebappInfo} with meta data extracted from WebAPK's Android Manifest.
* @param webApkPackageName Package name of the WebAPK to extract meta data from.
@@ -48,7 +54,8 @@ public class WebApkMetaDataUtils {
return WebApkInfo.create(WebApkConstants.WEBAPK_ID_PREFIX + webApkPackageName, url,
metaData.scope, encodedIcon, metaData.name, metaData.shortName,
metaData.displayMode, metaData.orientation, source, metaData.themeColor,
- metaData.backgroundColor, TextUtils.isEmpty(metaData.iconUrl), webApkPackageName);
+ metaData.backgroundColor, metaData.iconUrlAndIconMurmur2HashMap.isEmpty(),
+ webApkPackageName);
}
/**
@@ -84,8 +91,8 @@ public class WebApkMetaDataUtils {
metaData.backgroundColor = getLongFromMetaData(bundle, WebApkMetaDataKeys.BACKGROUND_COLOR,
ShortcutHelper.MANIFEST_COLOR_INVALID_OR_MISSING);
metaData.iconId = IntentUtils.safeGetInt(bundle, WebApkMetaDataKeys.ICON_ID, 0);
- metaData.iconUrl = IntentUtils.safeGetString(bundle, WebApkMetaDataKeys.ICON_URL);
- metaData.iconMurmur2Hash = getIconMurmur2HashFromMetaData(bundle);
+ metaData.iconUrlAndIconMurmur2HashMap =
+ WebApkMetaDataUtils.getIconUrlAndIconMurmur2HashMap(bundle);
if (TextUtils.isEmpty(metaData.scope)) {
metaData.scope = ShortcutHelper.getScopeFromUrl(metaData.startUrl);
@@ -120,8 +127,45 @@ public class WebApkMetaDataUtils {
}
/**
+ * Extract the icon URLs and icon hashes from the WebAPK's meta data, and returns a map of these
+ * {URL, hash} pairs. The icon URLs/icon hashes are stored in a single meta data tag in the
+ * WebAPK's AndroidManifest.xml as following:
+ * "URL1 hash1 URL2 hash2 URL3 hash3..."
+ */
+ public static Map<String, String> getIconUrlAndIconMurmur2HashMap(Bundle metaData) {
+ Map<String, String> iconUrlAndIconMurmur2HashMap = new HashMap<String, String>();
+ String iconUrlsAndIconMurmur2Hashes = metaData.getString(
+ WebApkMetaDataKeys.ICON_URLS_AND_ICON_MURMUR2_HASHES);
+ if (TextUtils.isEmpty(iconUrlsAndIconMurmur2Hashes)) {
+ // Open old WebAPKs which support single icon only.
+ // TODO(hanxi): crbug.com/665549. Clean up the following code after all the old WebAPKs
+ // are updated.
+ String iconUrl = metaData.getString(WebApkMetaDataKeys.ICON_URL);
+ if (!TextUtils.isEmpty(iconUrl)) {
+ iconUrlAndIconMurmur2HashMap.put(iconUrl, getIconMurmur2HashFromMetaData(metaData));
+ }
+ return iconUrlAndIconMurmur2HashMap;
+ }
+
+ // Parse the metadata tag which contains "URL1 hash1 URL2 hash2 URL3 hash3..." pairs and
+ // create a hash map.
+ // TODO(hanxi): crbug.com/666349. Add a test to verify that the icon URLs in WebAPKs'
+ // AndroidManifest.xml don't contain space.
+ String[] urlsAndHashes = iconUrlsAndIconMurmur2Hashes.split("[ ]+");
+ if (urlsAndHashes.length % 2 != 0) {
+ Log.e(TAG, "The icon URLs and icon murmur2 hashes doesn't come in pairs.");
+ return iconUrlAndIconMurmur2HashMap;
+ }
+ for (int i = 0; i < urlsAndHashes.length; i += 2) {
+ iconUrlAndIconMurmur2HashMap.put(urlsAndHashes[i], urlsAndHashes[i + 1]);
+ }
+ return iconUrlAndIconMurmur2HashMap;
+ }
+
+ /**
* Extracts icon murmur2 hash from the WebAPK's meta data. Return value is a string because the
* hash can take values up to 2^64-1 which is greater than {@link Long#MAX_VALUE}.
+ * Note: keep this function for supporting old WebAPKs which have single icon only.
* @param metaData WebAPK meta data to extract the hash from.
* @return The hash. An empty string if the hash could not be extracted.
*/

Powered by Google App Engine
This is Rietveld 408576698