Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CONTRIBUTORS
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,4 @@ Alex Chau <alexchau@google.com>
Benjamin Franz <bfranz@google.com>
Rebecka Gulliksson <rebecka.gulliksson@gmail.com>
Rahul Ravikumar <rahulrav@google.com>
Henning Nielsen Lund <henning.n.lund@jp.dk>
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,8 @@
*
* // blacklist Firefox
* new BrowserBlacklist(
* VersionedBrowserMatcher.FIREFOX_BROWSER);
* VersionedBrowserMatcher.FIREFOX_BROWSER,
* VersionedBrowserMatcher.FIREFOX_CUSTOM_TAB);
*
* // blacklist Dolphin Browser
* new BrowserBlacklist(
Expand Down
24 changes: 22 additions & 2 deletions library/java/net/openid/appauth/browser/BrowserSelector.java
Original file line number Diff line number Diff line change
Expand Up @@ -76,11 +76,17 @@ public final class BrowserSelector {
public static List<BrowserDescriptor> getAllBrowsers(Context context) {
PackageManager pm = context.getPackageManager();
List<BrowserDescriptor> 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<ResolveInfo> resolvedActivityList =
pm.queryIntentActivities(BROWSER_INTENT, queryFlag);

Expand All @@ -91,15 +97,29 @@ public static List<BrowserDescriptor> 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
}
Expand Down
16 changes: 15 additions & 1 deletion library/java/net/openid/appauth/browser/Browsers.java
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down Expand Up @@ -97,6 +97,12 @@ public static final class Firefox {
public static final Set<String> 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.
Expand All @@ -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
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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.
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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();
}

Expand All @@ -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
Expand All @@ -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();
}
Expand Down