summaryrefslogtreecommitdiffstats
path: root/mobile/android/base/java/org/mozilla/gecko/icons/IconsHelper.java
diff options
context:
space:
mode:
authorMatt A. Tobin <mattatobin@localhost.localdomain>2018-02-02 04:16:08 -0500
committerMatt A. Tobin <mattatobin@localhost.localdomain>2018-02-02 04:16:08 -0500
commit5f8de423f190bbb79a62f804151bc24824fa32d8 (patch)
tree10027f336435511475e392454359edea8e25895d /mobile/android/base/java/org/mozilla/gecko/icons/IconsHelper.java
parent49ee0794b5d912db1f95dce6eb52d781dc210db5 (diff)
downloadUXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar
UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.gz
UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.lz
UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.xz
UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.zip
Add m-esr52 at 52.6.0
Diffstat (limited to 'mobile/android/base/java/org/mozilla/gecko/icons/IconsHelper.java')
-rw-r--r--mobile/android/base/java/org/mozilla/gecko/icons/IconsHelper.java140
1 files changed, 140 insertions, 0 deletions
diff --git a/mobile/android/base/java/org/mozilla/gecko/icons/IconsHelper.java b/mobile/android/base/java/org/mozilla/gecko/icons/IconsHelper.java
new file mode 100644
index 000000000..d351eb4b7
--- /dev/null
+++ b/mobile/android/base/java/org/mozilla/gecko/icons/IconsHelper.java
@@ -0,0 +1,140 @@
+/* -*- Mode: Java; c-basic-offset: 4; tab-width: 4; indent-tabs-mode: nil; -*-
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package org.mozilla.gecko.icons;
+
+import android.net.Uri;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.text.TextUtils;
+import android.util.Log;
+
+import org.mozilla.gecko.AboutPages;
+import org.mozilla.gecko.util.StringUtils;
+
+import java.util.HashSet;
+
+/**
+ * Helper methods for icon related tasks.
+ */
+public class IconsHelper {
+ private static final String LOGTAG = "Gecko/IconsHelper";
+
+ // Mime types of things we are capable of decoding.
+ private static final HashSet<String> sDecodableMimeTypes = new HashSet<>();
+
+ // Mime types of things we are both capable of decoding and are container formats (May contain
+ // multiple different sizes of image)
+ private static final HashSet<String> sContainerMimeTypes = new HashSet<>();
+
+ static {
+ // MIME types extracted from http://filext.com - ostensibly all in-use mime types for the
+ // corresponding formats.
+ // ICO
+ sContainerMimeTypes.add("image/vnd.microsoft.icon");
+ sContainerMimeTypes.add("image/ico");
+ sContainerMimeTypes.add("image/icon");
+ sContainerMimeTypes.add("image/x-icon");
+ sContainerMimeTypes.add("text/ico");
+ sContainerMimeTypes.add("application/ico");
+
+ // Add supported container types to the set of supported types.
+ sDecodableMimeTypes.addAll(sContainerMimeTypes);
+
+ // PNG
+ sDecodableMimeTypes.add("image/png");
+ sDecodableMimeTypes.add("application/png");
+ sDecodableMimeTypes.add("application/x-png");
+
+ // GIF
+ sDecodableMimeTypes.add("image/gif");
+
+ // JPEG
+ sDecodableMimeTypes.add("image/jpeg");
+ sDecodableMimeTypes.add("image/jpg");
+ sDecodableMimeTypes.add("image/pipeg");
+ sDecodableMimeTypes.add("image/vnd.swiftview-jpeg");
+ sDecodableMimeTypes.add("application/jpg");
+ sDecodableMimeTypes.add("application/x-jpg");
+
+ // BMP
+ sDecodableMimeTypes.add("application/bmp");
+ sDecodableMimeTypes.add("application/x-bmp");
+ sDecodableMimeTypes.add("application/x-win-bitmap");
+ sDecodableMimeTypes.add("image/bmp");
+ sDecodableMimeTypes.add("image/x-bmp");
+ sDecodableMimeTypes.add("image/x-bitmap");
+ sDecodableMimeTypes.add("image/x-xbitmap");
+ sDecodableMimeTypes.add("image/x-win-bitmap");
+ sDecodableMimeTypes.add("image/x-windows-bitmap");
+ sDecodableMimeTypes.add("image/x-ms-bitmap");
+ sDecodableMimeTypes.add("image/x-ms-bmp");
+ sDecodableMimeTypes.add("image/ms-bmp");
+ }
+
+ /**
+ * Helper method to getIcon the default Favicon URL for a given pageURL. Generally: somewhere.com/favicon.ico
+ *
+ * @param pageURL Page URL for which a default Favicon URL is requested
+ * @return The default Favicon URL or null if no default URL could be guessed.
+ */
+ @Nullable
+ public static String guessDefaultFaviconURL(String pageURL) {
+ if (TextUtils.isEmpty(pageURL)) {
+ return null;
+ }
+
+ // Special-casing for about: pages. The favicon for about:pages which don't provide a link tag
+ // is bundled in the database, keyed only by page URL, hence the need to return the page URL
+ // here. If the database ever migrates to stop being silly in this way, this can plausibly
+ // be removed.
+ if (AboutPages.isAboutPage(pageURL) || pageURL.startsWith("jar:")) {
+ return pageURL;
+ }
+
+ if (!StringUtils.isHttpOrHttps(pageURL)) {
+ // Guessing a default URL only makes sense for http(s) URLs.
+ return null;
+ }
+
+ try {
+ // Fall back to trying "someScheme:someDomain.someExtension/favicon.ico".
+ Uri uri = Uri.parse(pageURL);
+ if (uri.getAuthority().isEmpty()) {
+ return null;
+ }
+
+ return uri.buildUpon()
+ .path("favicon.ico")
+ .clearQuery()
+ .fragment("")
+ .build()
+ .toString();
+ } catch (Exception e) {
+ Log.d(LOGTAG, "Exception getting default favicon URL");
+ return null;
+ }
+ }
+
+ /**
+ * Helper function to determine if the provided mime type is that of a format that can contain
+ * multiple image types. At time of writing, the only such type is ICO.
+ * @param mimeType Mime type to check.
+ * @return true if the given mime type is a container type, false otherwise.
+ */
+ public static boolean isContainerType(@NonNull String mimeType) {
+ return sContainerMimeTypes.contains(mimeType);
+ }
+
+ /**
+ * Helper function to determine if we can decode a particular mime type.
+ *
+ * @param imgType Mime type to check for decodability.
+ * @return false if the given mime type is certainly not decodable, true if it might be.
+ */
+ public static boolean canDecodeType(@NonNull String imgType) {
+ return sDecodableMimeTypes.contains(imgType);
+ }
+}