Commit 2b4ecde0 authored by Peter E Conn's avatar Peter E Conn Committed by Commit Bot

🤝 Include connectivity status in verification result.

This also rolls custom-tabs-client, including the following changes
(only the most recent is directly depended upon):

https://chromium-review.googlesource.com/c/custom-tabs-client/+/1028234
https://chromium-review.googlesource.com/c/custom-tabs-client/+/1063970
https://chromium-review.googlesource.com/c/custom-tabs-client/+/1065875

Bug: 816798
Change-Id: I3ec9bdcb658af5a30ea8d09f5603b56441f7f367
Reviewed-on: https://chromium-review.googlesource.com/1064236
Commit-Queue: Peter Conn <peconn@chromium.org>
Reviewed-by: default avatarBernhard Bauer <bauerb@chromium.org>
Cr-Commit-Position: refs/heads/master@{#560255}
parent 7f2ea7d9
......@@ -518,7 +518,7 @@ deps = {
},
'src/third_party/custom_tabs_client/src': {
'url': Var('chromium_git') + '/custom-tabs-client.git' + '@' + 'fea7d0fe778ef486d4dbbdfa4b1c5f5bec9df186',
'url': Var('chromium_git') + '/custom-tabs-client.git' + '@' + 'bd0bd8af3755f0941c766403c4603a1d8d2ef0f4',
'condition': 'checkout_android',
},
......
......@@ -72,14 +72,16 @@ public class OriginVerifier {
/** Small helper class to post a result of origin verification. */
private class VerifiedCallback implements Runnable {
private final boolean mResult;
private final Boolean mOnline;
public VerifiedCallback(boolean result) {
this.mResult = result;
public VerifiedCallback(boolean result, Boolean online) {
mResult = result;
mOnline = online;
}
@Override
public void run() {
originVerified(mResult);
originVerified(mResult, mOnline);
}
}
......@@ -146,8 +148,12 @@ public class OriginVerifier {
* @param packageName The package name for the origin verification query for this result.
* @param origin The origin that was declared on the query for this result.
* @param verified Whether the given origin was verified to correspond to the given package.
* @param online Whether the device could connect to the internet to perform verification.
* Will be {@code null} if internet was not required for check (eg
* verification had already been attempted this Chrome lifetime and the
* result was cached or the origin was not https).
*/
void onOriginVerified(String packageName, Origin origin, boolean verified);
void onOriginVerified(String packageName, Origin origin, boolean verified, Boolean online);
}
/**
......@@ -182,7 +188,7 @@ public class OriginVerifier {
if (!TextUtils.isEmpty(disableDalUrl)
&& mOrigin.equals(new Origin(disableDalUrl))) {
Log.i(TAG, "Verification skipped for %s due to command line flag.", origin);
ThreadUtils.runOnUiThread(new VerifiedCallback(true));
ThreadUtils.runOnUiThread(new VerifiedCallback(true, null));
return;
}
......@@ -192,7 +198,7 @@ public class OriginVerifier {
Log.i(TAG, "Verification failed for %s as not https.", origin);
BrowserServicesMetrics.recordVerificationResult(
BrowserServicesMetrics.VERIFICATION_RESULT_HTTPS_FAILURE);
ThreadUtils.runOnUiThread(new VerifiedCallback(false));
ThreadUtils.runOnUiThread(new VerifiedCallback(false, null));
return;
}
......@@ -201,7 +207,7 @@ public class OriginVerifier {
Log.i(TAG, "Verification succeeded for %s, it was cached.", origin);
BrowserServicesMetrics.recordVerificationResult(
BrowserServicesMetrics.VERIFICATION_RESULT_CACHED_SUCCESS);
ThreadUtils.runOnUiThread(new VerifiedCallback(true));
ThreadUtils.runOnUiThread(new VerifiedCallback(true, null));
return;
}
if (mNativeOriginVerifier != 0) cleanUp();
......@@ -230,7 +236,7 @@ public class OriginVerifier {
if (!requestSent) {
BrowserServicesMetrics.recordVerificationResult(
BrowserServicesMetrics.VERIFICATION_RESULT_REQUEST_FAILURE);
ThreadUtils.runOnUiThread(new VerifiedCallback(false));
ThreadUtils.runOnUiThread(new VerifiedCallback(false, false));
}
}
......@@ -307,12 +313,12 @@ public class OriginVerifier {
case RelationshipCheckResult.SUCCESS:
BrowserServicesMetrics.recordVerificationResult(
BrowserServicesMetrics.VERIFICATION_RESULT_ONLINE_SUCCESS);
originVerified(true);
originVerified(true, true);
break;
case RelationshipCheckResult.FAILURE:
BrowserServicesMetrics.recordVerificationResult(
BrowserServicesMetrics.VERIFICATION_RESULT_ONLINE_FAILURE);
originVerified(false);
originVerified(false, true);
break;
case RelationshipCheckResult.NO_CONNECTION:
Log.i(TAG, "Device is offline, checking saved verification result.");
......@@ -324,7 +330,7 @@ public class OriginVerifier {
}
/** Deal with the result of an Origin check. Will be called on UI Thread. */
private void originVerified(boolean originVerified) {
private void originVerified(boolean originVerified, Boolean online) {
Log.i(TAG, "Verification %s.", (originVerified ? "succeeded" : "failed"));
if (originVerified) {
addVerifiedOriginForPackage(mPackageName, mOrigin, mRelation);
......@@ -334,7 +340,9 @@ public class OriginVerifier {
// successfully verified result that fails on a subsequent check.
saveVerificationResult(originVerified);
if (mListener != null) mListener.onOriginVerified(mPackageName, mOrigin, originVerified);
if (mListener != null) {
mListener.onOriginVerified(mPackageName, mOrigin, originVerified, online);
}
cleanUp();
}
......@@ -369,7 +377,7 @@ public class OriginVerifier {
? BrowserServicesMetrics.VERIFICATION_RESULT_OFFLINE_SUCCESS
: BrowserServicesMetrics.VERIFICATION_RESULT_OFFLINE_FAILURE);
originVerified(verified);
originVerified(verified, false);
}
}
......
......@@ -190,7 +190,8 @@ public class PostMessageHandler
}
@Override
public void onOriginVerified(String packageName, Origin origin, boolean result) {
public void onOriginVerified(String packageName, Origin origin, boolean result,
Boolean online) {
if (!result) return;
initializeWithPostMessageUri(
OriginVerifier.getPostMessageUriFromVerifiedOrigin(packageName, origin));
......
......@@ -402,15 +402,21 @@ class ClientManager {
SessionParams params = mSessionParams.get(session);
if (params == null || TextUtils.isEmpty(params.getPackageName())) return false;
OriginVerificationListener listener = (packageName, verifiedOrigin, verified) -> {
OriginVerificationListener listener = (packageName, verifiedOrigin, verified, online) -> {
assert origin.equals(verifiedOrigin);
CustomTabsCallback callback = getCallbackForSession(session);
if (callback != null) {
callback.onRelationshipValidationResult(relation, origin.uri(), verified, null);
Bundle extras = null;
if (verified && online != null) {
extras = new Bundle();
extras.putBoolean(CustomTabsCallback.ONLINE_EXTRAS_KEY, online);
}
callback.onRelationshipValidationResult(relation, origin.uri(), verified, extras);
}
if (initializePostMessageChannel) {
params.postMessageHandler.onOriginVerified(packageName, verifiedOrigin, verified);
params.postMessageHandler
.onOriginVerified(packageName, verifiedOrigin, verified, online);
}
};
......
......@@ -179,7 +179,8 @@ public class WebappActivity extends SingleTabActivity {
}
@Override
public void onOriginVerified(String packageName, Origin origin, boolean verified) {
public void onOriginVerified(String packageName, Origin origin, boolean verified,
Boolean online) {
mVerificationFailed = !verified;
mOriginVerifier = null;
if (mVerificationFailed) getFullscreenManager().setPositionsForTabToNonFullscreen();
......
......@@ -51,7 +51,8 @@ public class OriginVerifierTest {
private class TestOriginVerificationListener implements OriginVerificationListener {
@Override
public void onOriginVerified(String packageName, Origin origin, boolean verified) {
public void onOriginVerified(String packageName, Origin origin, boolean verified,
Boolean online) {
mLastPackageName = packageName;
mLastOrigin = origin;
mLastVerified = verified;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment