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;
import org.chromium.chrome.browser.ui.appmenu.AppMenuCoordinator;
import org.chromium.chrome.browser.ui.appmenu.AppMenuCoordinatorFactory;
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.features.start_surface.StartSurface;
import org.chromium.components.browser_ui.bottomsheet.BottomSheetController;
......@@ -94,6 +95,7 @@ import org.chromium.components.browser_ui.widget.scrim.ScrimCoordinator;
import org.chromium.components.feature_engagement.EventConstants;
import org.chromium.components.messages.ManagedMessageDispatcher;
import org.chromium.components.messages.MessageContainer;
import org.chromium.components.messages.MessageUtils;
import org.chromium.components.messages.MessagesFactory;
import org.chromium.content_public.browser.ActionModeCallbackHelper;
import org.chromium.content_public.browser.LoadUrlParams;
......@@ -267,6 +269,8 @@ public class RootUiCoordinator
mActivity.getLayoutManagerSupplier().removeObserver(mLayoutManagerSupplierCallback);
MessageUtils.setAccessibilityUtil(null);
if (mMessageDispatcher != null) {
MessagesFactory.detachMessageDispatcher(mMessageDispatcher);
mMessageDispatcher = null;
......@@ -409,6 +413,7 @@ public class RootUiCoordinator
@CallSuper
public void onFinishNativeInitialization() {
if (ChromeFeatureList.isEnabled(ChromeFeatureList.MESSAGES_FOR_ANDROID_INFRASTRUCTURE)) {
MessageUtils.setAccessibilityUtil(ChromeAccessibilityUtil.get());
MessageContainer container = mActivity.findViewById(R.id.message_container);
mMessageContainerCoordinator =
new MessageContainerCoordinator(container, getBrowserControlsManager());
......
......@@ -43,7 +43,9 @@ void SavePasswordMessageDelegate::DisplaySavePasswordPrompt(
}
void SavePasswordMessageDelegate::DismissSavePasswordPrompt() {
if (message_ != nullptr) {
messages::MessageDispatcherBridge::DismissMessage(*message_, web_contents_);
}
}
void SavePasswordMessageDelegate::CreateMessage(
......
......@@ -600,11 +600,10 @@ void ChromePasswordManagerClient::NotifyUserCredentialsWereLeaked(
password_manager::features::kPasswordChange)) {
was_leak_dialog_shown_ = true;
}
if (messages::IsPasswordMessagesUiEnabled()) {
save_password_message_delegate_.DismissSavePasswordPrompt();
} else {
HideSavePasswordInfobar(web_contents());
}
(new CredentialLeakControllerAndroid(
leak_type, saved_sites, origin, username,
web_contents()->GetTopLevelNativeWindow()))
......
......@@ -20,6 +20,8 @@ android_library("java") {
"java/src/org/chromium/components/messages/MessageDispatcherBridge.java",
"java/src/org/chromium/components/messages/MessageDispatcherProvider.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/SingleActionMessage.java",
]
......@@ -54,6 +56,7 @@ android_resources("java_resources") {
generate_jni("jni_headers") {
sources = [
"java/src/org/chromium/components/messages/MessageDispatcherBridge.java",
"java/src/org/chromium/components/messages/MessageUtilsBridge.java",
"java/src/org/chromium/components/messages/MessageWrapper.java",
]
}
......@@ -62,6 +65,8 @@ static_library("android") {
sources = [
"message_dispatcher_bridge.cc",
"message_dispatcher_bridge.h",
"message_utils_bridge.cc",
"message_utils_bridge.h",
"message_wrapper.cc",
"message_wrapper.h",
]
......@@ -99,7 +104,10 @@ static_library("feature_flags") {
"messages_feature.cc",
"messages_feature.h",
]
deps = [ "//base" ]
deps = [
":android",
"//base",
]
}
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 @@
// found in the LICENSE file.
#include "components/messages/android/messages_feature.h"
#include "components/messages/android/message_utils_bridge.h"
namespace messages {
......@@ -14,7 +15,8 @@ const base::Feature kMessagesForAndroidPasswords{
bool IsPasswordMessagesUiEnabled() {
return base::FeatureList::IsEnabled(kMessagesForAndroidInfrastructure) &&
base::FeatureList::IsEnabled(kMessagesForAndroidPasswords);
base::FeatureList::IsEnabled(kMessagesForAndroidPasswords) &&
!messages::MessageUtilsBridge::IsA11yEnabled();
}
} // 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