Commit 20550df3 authored by Evan Stade's avatar Evan Stade Committed by Commit Bot

WebLayer: Add autofill to context menu

This matches WebView as well as Android TextView.

If a user initially dismisses the Autofill popup, this context menu
item allows them to access Autofill again.

Bug: 1056468
Change-Id: I2bee9d5960b92ed6b726402f7f570b09cad2eda5
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2079039
Commit-Queue: Evan Stade <estade@chromium.org>
Reviewed-by: default avatarTao Bai <michaelbai@chromium.org>
Reviewed-by: default avatarColin Blundell <blundell@chromium.org>
Cr-Commit-Position: refs/heads/master@{#746023}
parent fc64bd47
...@@ -360,7 +360,6 @@ generate_jar_jni("cancellation_signal_android_jar_jni_headers") { ...@@ -360,7 +360,6 @@ generate_jar_jni("cancellation_signal_android_jar_jni_headers") {
android_library("browser_java") { android_library("browser_java") {
sources = [ sources = [
"java/src/org/chromium/android_webview/AndroidProtocolHandler.java", "java/src/org/chromium/android_webview/AndroidProtocolHandler.java",
"java/src/org/chromium/android_webview/AutofillActionModeCallback.java",
"java/src/org/chromium/android_webview/AwActionModeCallback.java", "java/src/org/chromium/android_webview/AwActionModeCallback.java",
"java/src/org/chromium/android_webview/AwAutofillClient.java", "java/src/org/chromium/android_webview/AwAutofillClient.java",
"java/src/org/chromium/android_webview/AwBrowserContext.java", "java/src/org/chromium/android_webview/AwBrowserContext.java",
......
...@@ -72,6 +72,7 @@ import org.chromium.base.metrics.RecordHistogram; ...@@ -72,6 +72,7 @@ import org.chromium.base.metrics.RecordHistogram;
import org.chromium.base.metrics.ScopedSysTraceEvent; import org.chromium.base.metrics.ScopedSysTraceEvent;
import org.chromium.base.task.AsyncTask; import org.chromium.base.task.AsyncTask;
import org.chromium.base.task.PostTask; import org.chromium.base.task.PostTask;
import org.chromium.components.autofill.AutofillActionModeCallback;
import org.chromium.components.autofill.AutofillProvider; import org.chromium.components.autofill.AutofillProvider;
import org.chromium.components.content_capture.ContentCaptureConsumer; import org.chromium.components.content_capture.ContentCaptureConsumer;
import org.chromium.components.navigation_interception.InterceptNavigationDelegate; import org.chromium.components.navigation_interception.InterceptNavigationDelegate;
......
...@@ -58,6 +58,7 @@ android_library("provider_java") { ...@@ -58,6 +58,7 @@ android_library("provider_java") {
] ]
annotation_processor_deps = [ "//base/android/jni_generator:jni_processor" ] annotation_processor_deps = [ "//base/android/jni_generator:jni_processor" ]
sources = [ sources = [
"java/src/org/chromium/components/autofill/AutofillActionModeCallback.java",
"java/src/org/chromium/components/autofill/AutofillManagerWrapper.java", "java/src/org/chromium/components/autofill/AutofillManagerWrapper.java",
"java/src/org/chromium/components/autofill/AutofillProvider.java", "java/src/org/chromium/components/autofill/AutofillProvider.java",
"java/src/org/chromium/components/autofill/AutofillProviderImpl.java", "java/src/org/chromium/components/autofill/AutofillProviderImpl.java",
......
...@@ -2,15 +2,13 @@ ...@@ -2,15 +2,13 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
package org.chromium.android_webview; package org.chromium.components.autofill;
import android.content.Context; import android.content.Context;
import android.view.ActionMode; import android.view.ActionMode;
import android.view.Menu; import android.view.Menu;
import android.view.MenuItem; import android.view.MenuItem;
import org.chromium.components.autofill.AutofillProvider;
/** /**
* The class to implement autofill context menu. To match the Android native view behavior, the * The class to implement autofill context menu. To match the Android native view behavior, the
* autofill context menu only appears when there is no text selected. * autofill context menu only appears when there is no text selected.
......
...@@ -17,6 +17,7 @@ import org.chromium.base.Callback; ...@@ -17,6 +17,7 @@ import org.chromium.base.Callback;
import org.chromium.base.annotations.CalledByNative; import org.chromium.base.annotations.CalledByNative;
import org.chromium.base.annotations.JNINamespace; import org.chromium.base.annotations.JNINamespace;
import org.chromium.base.annotations.NativeMethods; import org.chromium.base.annotations.NativeMethods;
import org.chromium.components.autofill.AutofillActionModeCallback;
import org.chromium.components.autofill.AutofillProvider; import org.chromium.components.autofill.AutofillProvider;
import org.chromium.components.autofill.AutofillProviderImpl; import org.chromium.components.autofill.AutofillProviderImpl;
import org.chromium.components.browser_ui.util.BrowserControlsVisibilityDelegate; import org.chromium.components.browser_ui.util.BrowserControlsVisibilityDelegate;
...@@ -189,15 +190,21 @@ public final class TabImpl extends ITab.Stub { ...@@ -189,15 +190,21 @@ public final class TabImpl extends ITab.Stub {
mViewAndroidDelegate.setContainerView(mBrowser.getViewAndroidDelegateContainerView()); mViewAndroidDelegate.setContainerView(mBrowser.getViewAndroidDelegateContainerView());
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
SelectionPopupController selectionController =
SelectionPopupController.fromWebContents(mWebContents);
if (mBrowser.getContext() == null) { if (mBrowser.getContext() == null) {
// The Context and ViewContainer in which Autofill was previously operating have // The Context and ViewContainer in which Autofill was previously operating have
// gone away, so tear down |mAutofillProvider|. // gone away, so tear down |mAutofillProvider|.
mAutofillProvider = null; mAutofillProvider = null;
selectionController.setNonSelectionActionModeCallback(null);
} else { } else {
// Set up |mAutofillProvider| to operate in the new Context. // Set up |mAutofillProvider| to operate in the new Context.
mAutofillProvider = new AutofillProviderImpl( mAutofillProvider = new AutofillProviderImpl(
mBrowser.getContext(), mBrowser.getViewAndroidDelegateContainerView()); mBrowser.getContext(), mBrowser.getViewAndroidDelegateContainerView());
mAutofillProvider.setWebContents(mWebContents); mAutofillProvider.setWebContents(mWebContents);
selectionController.setNonSelectionActionModeCallback(
new AutofillActionModeCallback(mBrowser.getContext(), mAutofillProvider));
} }
TabImplJni.get().onAutofillProviderChanged(mNativeTab, mAutofillProvider); TabImplJni.get().onAutofillProviderChanged(mNativeTab, mAutofillProvider);
......
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