Commit 8f4ad6b7 authored by Maxim Kolosovskiy's avatar Maxim Kolosovskiy Committed by Commit Bot

[Autofill Assistant] Implement triggering a password flow from Autofill

Assistant (no integration test yet)

This CL implements the action for the "Change password" button in the
credentials leak dialog. The button triggers an Autofill Assistant flow
for password change.

TODO: the integration test will be implemented in another CL once a
compilation trick works (https://chromium-review.googlesource.com/c/chromium/src/+/2074761/38/chrome/browser/password_manager/chrome_password_manager_client.h#258).

Bug: 1057608
Change-Id: I1d584b6e735a1bd3736221a1fee35c4215b15c5f
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2106190
Commit-Queue: Maxim Kolosovskiy <kolos@chromium.org>
Reviewed-by: default avatarMaxim Kolosovskiy <kolos@chromium.org>
Reviewed-by: default avatarBoris Sazonov <bsazonov@chromium.org>
Reviewed-by: default avatarClemens Arbesser <arbesser@google.com>
Reviewed-by: default avatarIoana Pandele <ioanap@chromium.org>
Auto-Submit: Maxim Kolosovskiy <kolos@chromium.org>
Cr-Commit-Position: refs/heads/master@{#751660}
parent e7b03cd9
......@@ -2801,6 +2801,7 @@ generate_jni("chrome_jni_headers") {
"java/src/org/chromium/chrome/browser/password_manager/Credential.java",
"java/src/org/chromium/chrome/browser/password_manager/CredentialLeakDialogBridge.java",
"java/src/org/chromium/chrome/browser/password_manager/OnboardingDialogBridge.java",
"java/src/org/chromium/chrome/browser/password_manager/PasswordChangeLauncher.java",
"java/src/org/chromium/chrome/browser/password_manager/PasswordCheckupLauncher.java",
"java/src/org/chromium/chrome/browser/password_manager/PasswordGenerationDialogBridge.java",
"java/src/org/chromium/chrome/browser/password_manager/PasswordGenerationPopupBridge.java",
......
......@@ -1240,6 +1240,7 @@ chrome_java_sources = [
"java/src/org/chromium/chrome/browser/password_manager/CredentialLeakDialogBridge.java",
"java/src/org/chromium/chrome/browser/password_manager/GooglePasswordManagerUIProvider.java",
"java/src/org/chromium/chrome/browser/password_manager/OnboardingDialogBridge.java",
"java/src/org/chromium/chrome/browser/password_manager/PasswordChangeLauncher.java",
"java/src/org/chromium/chrome/browser/password_manager/PasswordCheckupLauncher.java",
"java/src/org/chromium/chrome/browser/password_manager/PasswordGenerationDialogBridge.java",
"java/src/org/chromium/chrome/browser/password_manager/PasswordGenerationDialogCoordinator.java",
......
......@@ -37,7 +37,7 @@ public class AutofillAssistantFacade {
* <p>Intent starting with this prefix are reported to the controller as parameters, except for
* the ones starting with {@code INTENT_SPECIAL_PREFIX}.
*/
private static final String INTENT_EXTRA_PREFIX =
public static final String INTENT_EXTRA_PREFIX =
"org.chromium.chrome.browser.autofill_assistant.";
/** Prefix for intent extras which are not parameters. */
......
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.chrome.browser.password_manager;
import android.os.Bundle;
import org.chromium.base.Log;
import org.chromium.base.annotations.CalledByNative;
import org.chromium.chrome.browser.ChromeActivity;
import org.chromium.chrome.browser.autofill_assistant.AutofillAssistantFacade;
import org.chromium.ui.base.WindowAndroid;
/** Class for starting a password change flow in Autofill Assistant. */
public class PasswordChangeLauncher {
private static final String TAG = "AutofillAssistant";
/**
* Name for the parameter that stores session username. Should be synced with
* |kSessionUsernameParameterName| from components/autofill_assistant/browser/controller.cc
* TODO(b/151401974): Eliminate duplicate parameter definitions.
*/
private static final String PASSWORD_CHANGE_USERNAME_PARAMETER =
AutofillAssistantFacade.INTENT_EXTRA_PREFIX + "PASSWORD_CHANGE_USERNAME";
@CalledByNative
public static void start(WindowAndroid windowAndroid, String origin, String username) {
ChromeActivity activity = (ChromeActivity) windowAndroid.getActivity().get();
if (activity == null) {
Log.v(TAG, "Failed to retrieve ChromeActivity.");
return;
}
Bundle bundleExtras = new Bundle();
bundleExtras.putString(PASSWORD_CHANGE_USERNAME_PARAMETER, username);
AutofillAssistantFacade.start(activity, bundleExtras, origin);
}
}
......@@ -6,6 +6,7 @@
#include "base/android/jni_android.h"
#include "base/android/jni_string.h"
#include "chrome/android/chrome_jni_headers/PasswordChangeLauncher_jni.h"
#include "chrome/browser/ui/android/passwords/credential_leak_dialog_password_change_view_android.h"
#include "chrome/common/url_constants.h"
#include "components/password_manager/core/browser/leak_detection_dialog_utils.h"
......@@ -47,6 +48,13 @@ void CredentialLeakPasswordChangeControllerAndroid::OnAcceptDialog() {
password_manager::GetLeakDialogType(leak_type_),
ShouldCheckPasswords() ? LeakDialogDismissalReason::kClickedCheckPasswords
: LeakDialogDismissalReason::kClickedOk);
if (window_android_) {
JNIEnv* env = base::android::AttachCurrentThread();
Java_PasswordChangeLauncher_start(
env, window_android_->GetJavaObject(),
base::android::ConvertUTF8ToJavaString(env, origin_.spec()),
base::android::ConvertUTF16ToJavaString(env, username_));
}
delete this;
}
......
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