From ffebe74edd5d99bf19110e654eb0aac036034199 Mon Sep 17 00:00:00 2001 From: Henning Nielsen Lund Date: Thu, 12 Jul 2018 23:15:09 +0200 Subject: [PATCH 1/4] Add support for custom tabs in Firefox support for custom tabs was added to stable Firefox in version 57.0 fixes: #368 Signed-off-by: Henning Nielsen Lund --- .../openid/appauth/browser/BrowserBlacklist.java | 3 ++- .../net/openid/appauth/browser/Browsers.java | 16 +++++++++++++++- .../appauth/browser/VersionedBrowserMatcher.java | 9 +++++++++ .../appauth/browser/BrowserWhitelistTest.java | 6 ++++++ 4 files changed, 32 insertions(+), 2 deletions(-) diff --git a/library/java/net/openid/appauth/browser/BrowserBlacklist.java b/library/java/net/openid/appauth/browser/BrowserBlacklist.java index d796dc52..ad2ce094 100644 --- a/library/java/net/openid/appauth/browser/BrowserBlacklist.java +++ b/library/java/net/openid/appauth/browser/BrowserBlacklist.java @@ -31,7 +31,8 @@ * * // blacklist Firefox * new BrowserBlacklist( - * VersionedBrowserMatcher.FIREFOX_BROWSER); + * VersionedBrowserMatcher.FIREFOX_BROWSER, + * VersionedBrowserMatcher.FIREFOX_CUSTOM_TAB); * * // blacklist Dolphin Browser * new BrowserBlacklist( diff --git a/library/java/net/openid/appauth/browser/Browsers.java b/library/java/net/openid/appauth/browser/Browsers.java index bcf28d61..c0acab34 100644 --- a/library/java/net/openid/appauth/browser/Browsers.java +++ b/library/java/net/openid/appauth/browser/Browsers.java @@ -62,7 +62,7 @@ public static BrowserDescriptor standaloneBrowser(@NonNull String version) { } /** - * Creates a browser descriptor fot the specified version of Chrome, when used as + * Creates a browser descriptor for the specified version of Chrome, when used as * a custom tab. */ public static BrowserDescriptor customTab(@NonNull String version) { @@ -97,6 +97,12 @@ public static final class Firefox { public static final Set SIGNATURE_SET = Collections.singleton(SIGNATURE_HASH); + /** + * The version in which Custom Tabs were introduced in Firefox. + */ + public static final DelimitedVersion MINIMUM_VERSION_FOR_CUSTOM_TAB = + DelimitedVersion.parse("57"); + /** * Creates a browser descriptor for the specified version of Firefox, when used * as a standalone browser. @@ -105,6 +111,14 @@ public static BrowserDescriptor standaloneBrowser(@NonNull String version) { return new BrowserDescriptor(PACKAGE_NAME, SIGNATURE_SET, version, false); } + /** + * Creates a browser descriptor for the specified version of Firefox, when used as + * a custom tab. + */ + public static BrowserDescriptor customTab(@NonNull String version) { + return new BrowserDescriptor(PACKAGE_NAME, SIGNATURE_SET, version, true); + } + private Firefox() { // no need to construct this class } diff --git a/library/java/net/openid/appauth/browser/VersionedBrowserMatcher.java b/library/java/net/openid/appauth/browser/VersionedBrowserMatcher.java index 85deeaed..5386c327 100644 --- a/library/java/net/openid/appauth/browser/VersionedBrowserMatcher.java +++ b/library/java/net/openid/appauth/browser/VersionedBrowserMatcher.java @@ -43,6 +43,15 @@ public class VersionedBrowserMatcher implements BrowserMatcher { false, VersionRange.ANY_VERSION); + /** + * Matches any version of Firefox for use as a custom tab. + */ + public static final VersionedBrowserMatcher FIREFOX_CUSTOM_TAB = new VersionedBrowserMatcher( + Browsers.Firefox.PACKAGE_NAME, + Browsers.Firefox.SIGNATURE_SET, + true, + VersionRange.atLeast(Browsers.Firefox.MINIMUM_VERSION_FOR_CUSTOM_TAB)); + /** * Matches any version of Mozilla Firefox. */ diff --git a/library/javatests/net/openid/appauth/browser/BrowserWhitelistTest.java b/library/javatests/net/openid/appauth/browser/BrowserWhitelistTest.java index b95a0d6a..7e3a988a 100644 --- a/library/javatests/net/openid/appauth/browser/BrowserWhitelistTest.java +++ b/library/javatests/net/openid/appauth/browser/BrowserWhitelistTest.java @@ -31,6 +31,7 @@ public void testMatches_emptyWhitelist() { BrowserWhitelist whitelist = new BrowserWhitelist(); assertThat(whitelist.matches(Browsers.Chrome.customTab("46"))).isFalse(); assertThat(whitelist.matches(Browsers.Firefox.standaloneBrowser("10"))).isFalse(); + assertThat(whitelist.matches(Browsers.Firefox.customTab("57"))).isFalse(); assertThat(whitelist.matches(Browsers.SBrowser.standaloneBrowser("11"))).isFalse(); } @@ -40,6 +41,7 @@ public void testMatches_chromeBrowserOnly() { assertThat(whitelist.matches(Browsers.Chrome.standaloneBrowser("46"))).isTrue(); assertThat(whitelist.matches(Browsers.Chrome.customTab("46"))).isFalse(); assertThat(whitelist.matches(Browsers.Firefox.standaloneBrowser("10"))).isFalse(); + assertThat(whitelist.matches(Browsers.Firefox.customTab("57"))).isFalse(); } @Test @@ -50,17 +52,21 @@ public void testMatches_chromeCustomTabOrBrowser() { assertThat(whitelist.matches(Browsers.Chrome.standaloneBrowser("46"))).isTrue(); assertThat(whitelist.matches(Browsers.Chrome.customTab("46"))).isTrue(); assertThat(whitelist.matches(Browsers.Firefox.standaloneBrowser("10"))).isFalse(); + assertThat(whitelist.matches(Browsers.Firefox.customTab("57"))).isFalse(); } @Test public void testMatches_firefoxOrSamsung() { BrowserWhitelist whitelist = new BrowserWhitelist( VersionedBrowserMatcher.FIREFOX_BROWSER, + VersionedBrowserMatcher.FIREFOX_CUSTOM_TAB, VersionedBrowserMatcher.SAMSUNG_BROWSER, VersionedBrowserMatcher.SAMSUNG_CUSTOM_TAB); assertThat(whitelist.matches(Browsers.Chrome.standaloneBrowser("46"))).isFalse(); assertThat(whitelist.matches(Browsers.Chrome.customTab("46"))).isFalse(); assertThat(whitelist.matches(Browsers.Firefox.standaloneBrowser("10"))).isTrue(); + assertThat(whitelist.matches(Browsers.Firefox.customTab("56"))).isFalse(); + assertThat(whitelist.matches(Browsers.Firefox.customTab("57"))).isTrue(); assertThat(whitelist.matches(Browsers.SBrowser.standaloneBrowser("10"))).isTrue(); assertThat(whitelist.matches(Browsers.SBrowser.customTab("10"))).isTrue(); } From b7a62fdec755cc163017f20c9715eaaebe59c5ac Mon Sep 17 00:00:00 2001 From: Henning Nielsen Lund Date: Mon, 16 Jul 2018 00:19:50 +0200 Subject: [PATCH 2/4] Respect default browser of the user a possible default browser of the user is respected. fixes: #372 Signed-off-by: Henning Nielsen Lund --- CONTRIBUTORS | 1 + .../appauth/browser/BrowserSelector.java | 21 +++++++++++++++++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/CONTRIBUTORS b/CONTRIBUTORS index 225c16b9..034bee8b 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -13,3 +13,4 @@ Alex Chau Benjamin Franz Rebecka Gulliksson Rahul Ravikumar +Henning Nielsen Lund diff --git a/library/java/net/openid/appauth/browser/BrowserSelector.java b/library/java/net/openid/appauth/browser/BrowserSelector.java index bdc63dd6..66b17572 100644 --- a/library/java/net/openid/appauth/browser/BrowserSelector.java +++ b/library/java/net/openid/appauth/browser/BrowserSelector.java @@ -76,11 +76,16 @@ public final class BrowserSelector { public static List getAllBrowsers(Context context) { PackageManager pm = context.getPackageManager(); List browsers = new ArrayList<>(); + String defaultBrowserPackage = null; int queryFlag = PackageManager.GET_RESOLVED_FILTER; if (VERSION.SDK_INT >= VERSION_CODES.M) { queryFlag |= PackageManager.MATCH_ALL; } + ResolveInfo resolvedDefaultActivity = pm.resolveActivity(BROWSER_INTENT, 0); + if (resolvedDefaultActivity != null) { + defaultBrowserPackage = resolvedDefaultActivity.activityInfo.packageName; + } List resolvedActivityList = pm.queryIntentActivities(BROWSER_INTENT, queryFlag); @@ -91,15 +96,27 @@ public static List getAllBrowsers(Context context) { } try { + int defaultBrowserIndex = 0; PackageInfo packageInfo = pm.getPackageInfo( info.activityInfo.packageName, PackageManager.GET_SIGNATURES); if (hasWarmupService(pm, info.activityInfo.packageName)) { - browsers.add(new BrowserDescriptor(packageInfo, true)); + BrowserDescriptor customTabBrowserDescriptor = new BrowserDescriptor(packageInfo, true); + if (info.activityInfo.packageName.equals(defaultBrowserPackage)) { + browsers.add(defaultBrowserIndex, customTabBrowserDescriptor); + defaultBrowserIndex++; + } else { + browsers.add(customTabBrowserDescriptor); + } } - browsers.add(new BrowserDescriptor(packageInfo, false)); + BrowserDescriptor fullBrowserDescriptor = new BrowserDescriptor(packageInfo, false); + if (info.activityInfo.packageName.equals(defaultBrowserPackage)) { + browsers.add(defaultBrowserIndex, fullBrowserDescriptor); + } else { + browsers.add(fullBrowserDescriptor); + } } catch (NameNotFoundException e) { // a descriptor cannot be generated without the package info } From 289bb590d2498d96b201c0bd4ef98a7b95039433 Mon Sep 17 00:00:00 2001 From: Henning Nielsen Lund Date: Mon, 16 Jul 2018 00:29:55 +0200 Subject: [PATCH 3/4] Reduce LineLength The line needed to get reduced to no more than 100 characters. Signed-off-by: Henning Nielsen Lund --- .../java/net/openid/appauth/browser/BrowserSelector.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/library/java/net/openid/appauth/browser/BrowserSelector.java b/library/java/net/openid/appauth/browser/BrowserSelector.java index 66b17572..13db2eb4 100644 --- a/library/java/net/openid/appauth/browser/BrowserSelector.java +++ b/library/java/net/openid/appauth/browser/BrowserSelector.java @@ -82,7 +82,8 @@ public static List getAllBrowsers(Context context) { if (VERSION.SDK_INT >= VERSION_CODES.M) { queryFlag |= PackageManager.MATCH_ALL; } - ResolveInfo resolvedDefaultActivity = pm.resolveActivity(BROWSER_INTENT, 0); + ResolveInfo resolvedDefaultActivity = + pm.resolveActivity(BROWSER_INTENT, 0); if (resolvedDefaultActivity != null) { defaultBrowserPackage = resolvedDefaultActivity.activityInfo.packageName; } @@ -102,7 +103,8 @@ public static List getAllBrowsers(Context context) { PackageManager.GET_SIGNATURES); if (hasWarmupService(pm, info.activityInfo.packageName)) { - BrowserDescriptor customTabBrowserDescriptor = new BrowserDescriptor(packageInfo, true); + BrowserDescriptor customTabBrowserDescriptor = + new BrowserDescriptor(packageInfo, true); if (info.activityInfo.packageName.equals(defaultBrowserPackage)) { browsers.add(defaultBrowserIndex, customTabBrowserDescriptor); defaultBrowserIndex++; @@ -111,7 +113,8 @@ public static List getAllBrowsers(Context context) { } } - BrowserDescriptor fullBrowserDescriptor = new BrowserDescriptor(packageInfo, false); + BrowserDescriptor fullBrowserDescriptor = + new BrowserDescriptor(packageInfo, false); if (info.activityInfo.packageName.equals(defaultBrowserPackage)) { browsers.add(defaultBrowserIndex, fullBrowserDescriptor); } else { From 57d183a732597f9e14f92031e8380b255d29e428 Mon Sep 17 00:00:00 2001 From: Henning Nielsen Lund Date: Mon, 16 Jul 2018 00:37:10 +0200 Subject: [PATCH 4/4] Fix indentation Corrected indentation accoring to travis-ci. Signed-off-by: Henning Nielsen Lund --- .../java/net/openid/appauth/browser/BrowserSelector.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/library/java/net/openid/appauth/browser/BrowserSelector.java b/library/java/net/openid/appauth/browser/BrowserSelector.java index 13db2eb4..e5b9bdb1 100644 --- a/library/java/net/openid/appauth/browser/BrowserSelector.java +++ b/library/java/net/openid/appauth/browser/BrowserSelector.java @@ -83,7 +83,7 @@ public static List getAllBrowsers(Context context) { queryFlag |= PackageManager.MATCH_ALL; } ResolveInfo resolvedDefaultActivity = - pm.resolveActivity(BROWSER_INTENT, 0); + pm.resolveActivity(BROWSER_INTENT, 0); if (resolvedDefaultActivity != null) { defaultBrowserPackage = resolvedDefaultActivity.activityInfo.packageName; } @@ -104,7 +104,7 @@ public static List getAllBrowsers(Context context) { if (hasWarmupService(pm, info.activityInfo.packageName)) { BrowserDescriptor customTabBrowserDescriptor = - new BrowserDescriptor(packageInfo, true); + new BrowserDescriptor(packageInfo, true); if (info.activityInfo.packageName.equals(defaultBrowserPackage)) { browsers.add(defaultBrowserIndex, customTabBrowserDescriptor); defaultBrowserIndex++; @@ -114,7 +114,7 @@ public static List getAllBrowsers(Context context) { } BrowserDescriptor fullBrowserDescriptor = - new BrowserDescriptor(packageInfo, false); + new BrowserDescriptor(packageInfo, false); if (info.activityInfo.packageName.equals(defaultBrowserPackage)) { browsers.add(defaultBrowserIndex, fullBrowserDescriptor); } else {