Commit cc4d82d4 authored by Lijin Shen's avatar Lijin Shen Committed by Chromium LUCI CQ

[Messages] Disable messages when a11y is enabled

If a11y is enabled when password is submitted, show infobar instead.

Bug: 1153946
Change-Id: Ic5dc35b2596b995e62493fae211aad0c1e191362
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2566727
Commit-Queue: Lijin Shen <lazzzis@google.com>
Reviewed-by: default avatarTheresa  <twellington@chromium.org>
Reviewed-by: default avatarPavel Yatsuk <pavely@chromium.org>
Cr-Commit-Position: refs/heads/master@{#834340}
parent 5fe33cf0
...@@ -81,6 +81,7 @@ import org.chromium.chrome.browser.ui.appmenu.AppMenuBlocker; ...@@ -81,6 +81,7 @@ import org.chromium.chrome.browser.ui.appmenu.AppMenuBlocker;
import org.chromium.chrome.browser.ui.appmenu.AppMenuCoordinator; import org.chromium.chrome.browser.ui.appmenu.AppMenuCoordinator;
import org.chromium.chrome.browser.ui.appmenu.AppMenuCoordinatorFactory; import org.chromium.chrome.browser.ui.appmenu.AppMenuCoordinatorFactory;
import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager; import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager;
import org.chromium.chrome.browser.util.ChromeAccessibilityUtil;
import org.chromium.chrome.browser.vr.VrModuleProvider; import org.chromium.chrome.browser.vr.VrModuleProvider;
import org.chromium.chrome.features.start_surface.StartSurface; import org.chromium.chrome.features.start_surface.StartSurface;
import org.chromium.components.browser_ui.bottomsheet.BottomSheetController; import org.chromium.components.browser_ui.bottomsheet.BottomSheetController;
...@@ -94,6 +95,7 @@ import org.chromium.components.browser_ui.widget.scrim.ScrimCoordinator; ...@@ -94,6 +95,7 @@ import org.chromium.components.browser_ui.widget.scrim.ScrimCoordinator;
import org.chromium.components.feature_engagement.EventConstants; import org.chromium.components.feature_engagement.EventConstants;
import org.chromium.components.messages.ManagedMessageDispatcher; import org.chromium.components.messages.ManagedMessageDispatcher;
import org.chromium.components.messages.MessageContainer; import org.chromium.components.messages.MessageContainer;
import org.chromium.components.messages.MessageUtils;
import org.chromium.components.messages.MessagesFactory; import org.chromium.components.messages.MessagesFactory;
import org.chromium.content_public.browser.ActionModeCallbackHelper; import org.chromium.content_public.browser.ActionModeCallbackHelper;
import org.chromium.content_public.browser.LoadUrlParams; import org.chromium.content_public.browser.LoadUrlParams;
...@@ -267,6 +269,8 @@ public class RootUiCoordinator ...@@ -267,6 +269,8 @@ public class RootUiCoordinator
mActivity.getLayoutManagerSupplier().removeObserver(mLayoutManagerSupplierCallback); mActivity.getLayoutManagerSupplier().removeObserver(mLayoutManagerSupplierCallback);
MessageUtils.setAccessibilityUtil(null);
if (mMessageDispatcher != null) { if (mMessageDispatcher != null) {
MessagesFactory.detachMessageDispatcher(mMessageDispatcher); MessagesFactory.detachMessageDispatcher(mMessageDispatcher);
mMessageDispatcher = null; mMessageDispatcher = null;
...@@ -409,6 +413,7 @@ public class RootUiCoordinator ...@@ -409,6 +413,7 @@ public class RootUiCoordinator
@CallSuper @CallSuper
public void onFinishNativeInitialization() { public void onFinishNativeInitialization() {
if (ChromeFeatureList.isEnabled(ChromeFeatureList.MESSAGES_FOR_ANDROID_INFRASTRUCTURE)) { if (ChromeFeatureList.isEnabled(ChromeFeatureList.MESSAGES_FOR_ANDROID_INFRASTRUCTURE)) {
MessageUtils.setAccessibilityUtil(ChromeAccessibilityUtil.get());
MessageContainer container = mActivity.findViewById(R.id.message_container); MessageContainer container = mActivity.findViewById(R.id.message_container);
mMessageContainerCoordinator = mMessageContainerCoordinator =
new MessageContainerCoordinator(container, getBrowserControlsManager()); new MessageContainerCoordinator(container, getBrowserControlsManager());
......
...@@ -43,7 +43,9 @@ void SavePasswordMessageDelegate::DisplaySavePasswordPrompt( ...@@ -43,7 +43,9 @@ void SavePasswordMessageDelegate::DisplaySavePasswordPrompt(
} }
void SavePasswordMessageDelegate::DismissSavePasswordPrompt() { void SavePasswordMessageDelegate::DismissSavePasswordPrompt() {
if (message_ != nullptr) {
messages::MessageDispatcherBridge::DismissMessage(*message_, web_contents_); messages::MessageDispatcherBridge::DismissMessage(*message_, web_contents_);
}
} }
void SavePasswordMessageDelegate::CreateMessage( void SavePasswordMessageDelegate::CreateMessage(
......
...@@ -600,11 +600,10 @@ void ChromePasswordManagerClient::NotifyUserCredentialsWereLeaked( ...@@ -600,11 +600,10 @@ void ChromePasswordManagerClient::NotifyUserCredentialsWereLeaked(
password_manager::features::kPasswordChange)) { password_manager::features::kPasswordChange)) {
was_leak_dialog_shown_ = true; was_leak_dialog_shown_ = true;
} }
if (messages::IsPasswordMessagesUiEnabled()) {
save_password_message_delegate_.DismissSavePasswordPrompt(); save_password_message_delegate_.DismissSavePasswordPrompt();
} else {
HideSavePasswordInfobar(web_contents()); HideSavePasswordInfobar(web_contents());
}
(new CredentialLeakControllerAndroid( (new CredentialLeakControllerAndroid(
leak_type, saved_sites, origin, username, leak_type, saved_sites, origin, username,
web_contents()->GetTopLevelNativeWindow())) web_contents()->GetTopLevelNativeWindow()))
......
...@@ -20,6 +20,8 @@ android_library("java") { ...@@ -20,6 +20,8 @@ android_library("java") {
"java/src/org/chromium/components/messages/MessageDispatcherBridge.java", "java/src/org/chromium/components/messages/MessageDispatcherBridge.java",
"java/src/org/chromium/components/messages/MessageDispatcherProvider.java", "java/src/org/chromium/components/messages/MessageDispatcherProvider.java",
"java/src/org/chromium/components/messages/MessageStateHandler.java", "java/src/org/chromium/components/messages/MessageStateHandler.java",
"java/src/org/chromium/components/messages/MessageUtils.java",
"java/src/org/chromium/components/messages/MessageUtilsBridge.java",
"java/src/org/chromium/components/messages/MessageWrapper.java", "java/src/org/chromium/components/messages/MessageWrapper.java",
"java/src/org/chromium/components/messages/SingleActionMessage.java", "java/src/org/chromium/components/messages/SingleActionMessage.java",
] ]
...@@ -54,6 +56,7 @@ android_resources("java_resources") { ...@@ -54,6 +56,7 @@ android_resources("java_resources") {
generate_jni("jni_headers") { generate_jni("jni_headers") {
sources = [ sources = [
"java/src/org/chromium/components/messages/MessageDispatcherBridge.java", "java/src/org/chromium/components/messages/MessageDispatcherBridge.java",
"java/src/org/chromium/components/messages/MessageUtilsBridge.java",
"java/src/org/chromium/components/messages/MessageWrapper.java", "java/src/org/chromium/components/messages/MessageWrapper.java",
] ]
} }
...@@ -62,6 +65,8 @@ static_library("android") { ...@@ -62,6 +65,8 @@ static_library("android") {
sources = [ sources = [
"message_dispatcher_bridge.cc", "message_dispatcher_bridge.cc",
"message_dispatcher_bridge.h", "message_dispatcher_bridge.h",
"message_utils_bridge.cc",
"message_utils_bridge.h",
"message_wrapper.cc", "message_wrapper.cc",
"message_wrapper.h", "message_wrapper.h",
] ]
...@@ -99,7 +104,10 @@ static_library("feature_flags") { ...@@ -99,7 +104,10 @@ static_library("feature_flags") {
"messages_feature.cc", "messages_feature.cc",
"messages_feature.h", "messages_feature.h",
] ]
deps = [ "//base" ] deps = [
":android",
"//base",
]
} }
android_library("javatests") { android_library("javatests") {
......
// 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.components.messages;
import org.chromium.ui.util.AccessibilityUtil;
/**
* A util class designed for messages.
*/
public class MessageUtils {
private static AccessibilityUtil sUtil;
/**
* @return True if a11y is enabled.
*/
public static boolean isA11yEnabled() {
assert sUtil != null;
return sUtil.isAccessibilityEnabled();
}
/**
* Set an {@link AccessibilityUtil} to know if a11y is enabled.
* Should set null when message infra is destroyed.
* @param util The {@link AccessibilityUtil} instance.
*/
public static void setAccessibilityUtil(AccessibilityUtil util) {
sUtil = util;
}
}
// 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.components.messages;
import org.chromium.base.annotations.CalledByNative;
import org.chromium.base.annotations.JNINamespace;
/**
* Java counterpart to MessageUtilsBridge. Enables C++ feature code to know
* if it is okay to show message ui.
*/
@JNINamespace("messages")
public class MessageUtilsBridge {
@CalledByNative
private static boolean isA11yEnabled() {
return MessageUtils.isA11yEnabled();
}
}
// 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.
#include "components/messages/android/message_utils_bridge.h"
#include <jni.h>
#include "base/android/jni_android.h"
#include "components/messages/android/jni_headers/MessageUtilsBridge_jni.h"
namespace messages {
// static
bool MessageUtilsBridge::IsA11yEnabled() {
JNIEnv* env = base::android::AttachCurrentThread();
return Java_MessageUtilsBridge_isA11yEnabled(env);
}
} // namespace messages
\ No newline at end of file
// 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.
#ifndef COMPONENTS_MESSAGES_ANDROID_MESSAGE_UTILS_BRIDGE_H_
#define COMPONENTS_MESSAGES_ANDROID_MESSAGE_UTILS_BRIDGE_H_
namespace messages {
// C++ counterpart to MessageUtilsBridge.java.
class MessageUtilsBridge {
public:
static bool IsA11yEnabled();
};
} // namespace messages
#endif // COMPONENTS_MESSAGES_ANDROID_MESSAGE_UTILS_BRIDGE_H_
\ No newline at end of file
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
// found in the LICENSE file. // found in the LICENSE file.
#include "components/messages/android/messages_feature.h" #include "components/messages/android/messages_feature.h"
#include "components/messages/android/message_utils_bridge.h"
namespace messages { namespace messages {
...@@ -14,7 +15,8 @@ const base::Feature kMessagesForAndroidPasswords{ ...@@ -14,7 +15,8 @@ const base::Feature kMessagesForAndroidPasswords{
bool IsPasswordMessagesUiEnabled() { bool IsPasswordMessagesUiEnabled() {
return base::FeatureList::IsEnabled(kMessagesForAndroidInfrastructure) && return base::FeatureList::IsEnabled(kMessagesForAndroidInfrastructure) &&
base::FeatureList::IsEnabled(kMessagesForAndroidPasswords); base::FeatureList::IsEnabled(kMessagesForAndroidPasswords) &&
!messages::MessageUtilsBridge::IsA11yEnabled();
} }
} // namespace messages } // namespace messages
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