Commit 41ad73f8 authored by Adam Langley's avatar Adam Langley Committed by Commit Bot

webauthn: wire up link checkbox.

If one unchecks the checkbox in the QR-scanning dialog, the phone is no
longer linked to the desktop.

BUG=1002262

Change-Id: I9c6d97637ba5361b6d1f24f4d270f172d7e15363
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2527888Reviewed-by: default avatarAdam Langley <agl@chromium.org>
Reviewed-by: default avatarMartin Kreichgauer <martinkr@google.com>
Commit-Queue: Adam Langley <agl@chromium.org>
Cr-Commit-Position: refs/heads/master@{#827461}
parent 9a18ecfa
......@@ -440,9 +440,9 @@ class CableAuthenticator {
* @param value contents of the QR code, which will be a valid caBLE
* URL, i.e. "fido://"...
*/
void onQRCode(String value) {
void onQRCode(String value, boolean link) {
assert mTaskRunner.belongsToCurrentThread();
CableAuthenticatorJni.get().startQR(this, getName(), value);
CableAuthenticatorJni.get().startQR(this, getName(), value, link);
// TODO: show the user an error if that returned false.
// that indicates that the QR code was invalid.
}
......@@ -558,8 +558,8 @@ class CableAuthenticator {
* should be human-meaningful. The qrUrl must be a caBLE URL, i.e. starting with
* "fido://c1/"
*/
boolean startQR(
CableAuthenticator cableAuthenticator, String authenticatorName, String qrUrl);
boolean startQR(CableAuthenticator cableAuthenticator, String authenticatorName,
String qrUrl, boolean link);
/**
* unlink causes the root secret to be rotated and the FCM token to be rotated. This
......
......@@ -183,9 +183,9 @@ public class CableAuthenticatorUI
*/
@Override
@SuppressLint("SetTextI18n")
public void onQRCode(String value) {
public void onQRCode(String value, boolean link) {
setHeader(R.style.step1);
mAuthenticator.onQRCode(value);
mAuthenticator.onQRCode(value, link);
}
void onStatus(int code) {
......
......@@ -12,6 +12,7 @@ import android.util.SparseArray;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import androidx.fragment.app.DialogFragment;
......@@ -42,10 +43,11 @@ class QRScanDialog extends DialogFragment implements Camera.PreviewCallback {
* Receives a single call containing the decoded QR value. It will
* begin with FIDO_QR_PREFIX.
*/
public static interface Callback { void onQRCode(String value); }
public static interface Callback { void onQRCode(String value, boolean link); }
private final Callback mCallback;
private BarcodeDetector mQRScanner;
private CheckBox mLinkCheckbox;
private CameraView mCameraView;
private ByteBuffer mBuffer;
private boolean mDismissed;
......@@ -62,6 +64,8 @@ class QRScanDialog extends DialogFragment implements Camera.PreviewCallback {
mCameraView = v.findViewById(R.id.camera_view);
mCameraView.setCallback(this);
mCameraView.setDisplay(getActivity().getWindowManager().getDefaultDisplay());
mLinkCheckbox = v.findViewById(R.id.link_checkbox);
return v;
}
......@@ -126,7 +130,7 @@ class QRScanDialog extends DialogFragment implements Camera.PreviewCallback {
for (int i = 0; i < barcodes.size(); i++) {
String value = barcodes.valueAt(i).rawValue;
if (value.startsWith(FIDO_QR_PREFIX)) {
mCallback.onQRCode(value);
mCallback.onQRCode(value, mLinkCheckbox.isChecked());
dismiss();
return;
}
......
......@@ -477,7 +477,8 @@ static jboolean JNI_CableAuthenticator_StartQR(
JNIEnv* env,
const JavaParamRef<jobject>& cable_authenticator,
const JavaParamRef<jstring>& authenticator_name,
const JavaParamRef<jstring>& qr_url) {
const JavaParamRef<jstring>& qr_url,
jboolean link) {
GlobalData& global_data = GetGlobalData();
const std::string& qr_string = ConvertJavaStringToUTF8(qr_url);
base::Optional<device::cablev2::qr::Components> decoded_qr(
......@@ -492,7 +493,8 @@ static jboolean JNI_CableAuthenticator_StartQR(
std::make_unique<AndroidPlatform>(env, cable_authenticator),
global_data.network_context, global_data.root_secret,
ConvertJavaStringToUTF8(authenticator_name), decoded_qr->secret,
decoded_qr->peer_identity, global_data.registration->contact_id());
decoded_qr->peer_identity,
link ? global_data.registration->contact_id() : base::nullopt);
return true;
}
......
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