Commit a6f6697e authored by James Wallace-Lee's avatar James Wallace-Lee Committed by Commit Bot

Tab modal dialog title should be accessible window title

Tab modal dialogs (ui::MODAL_TYPE_CHILD) should report their title
to AT (insert+T on JAWS and NVDA) when active. To accomplish this,
BrowserView::GetAccessibleWindowTitle should report the title of
the dialog when one is active.

Bug: 775680
Test: browser_tests.exe --gtest_filter=BrowserViewTest.GetAccessibleTabModalDialogTitle
Change-Id: Ie693e1627c87e4d97eede64381d80dab31635642
Reviewed-on: https://chromium-review.googlesource.com/1184039
Commit-Queue: James Wallace-Lee <jamwalla@chromium.org>
Reviewed-by: default avatarScott Violet <sky@chromium.org>
Reviewed-by: default avatarDominic Mazzoni <dmazzoni@chromium.org>
Cr-Commit-Position: refs/heads/master@{#587371}
parent 6f96a48d
......@@ -1699,6 +1699,30 @@ base::string16 BrowserView::GetWindowTitle() const {
}
base::string16 BrowserView::GetAccessibleWindowTitle() const {
// If there is a focused and visible tab-modal dialog, report the dialog's
// title instead of the page title.
const views::FocusManager* focus_manager = GetFocusManager();
const views::View* focused_view =
focus_manager ? focus_manager->GetFocusedView() : nullptr;
if (focused_view) {
std::set<views::Widget*> child_widgets;
views::Widget::GetAllOwnedWidgets(GetWidget()->GetNativeView(),
&child_widgets);
for (auto iter = child_widgets.begin(); iter != child_widgets.end();
++iter) {
views::Widget* child_widget = *iter;
DCHECK_NE(GetWidget(), child_widget);
WidgetDelegate* child_delegate = child_widget->widget_delegate();
if (child_delegate->GetModalType() == ui::MODAL_TYPE_CHILD &&
child_widget->IsVisible() &&
child_widget->GetContentsView()->Contains(focused_view))
return child_delegate->GetAccessibleWindowTitle();
}
}
return GetAccessibleWindowTitleForChannelAndProfile(chrome::GetChannel(),
browser_->profile());
}
......
......@@ -9,12 +9,14 @@
#include "chrome/browser/devtools/devtools_window_testing.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/browser_tabstrip.h"
#include "chrome/browser/ui/tab_modal_confirm_dialog.h"
#include "chrome/browser/ui/tab_ui_helper.h"
#include "chrome/browser/ui/tabs/tab_strip_model.h"
#include "chrome/browser/ui/views/bookmarks/bookmark_bar_view.h"
#include "chrome/browser/ui/views/bookmarks/bookmark_bar_view_observer.h"
#include "chrome/browser/ui/views/tabs/tab_strip.h"
#include "chrome/common/url_constants.h"
#include "chrome/grit/chromium_strings.h"
#include "chrome/test/base/in_process_browser_test.h"
#include "chrome/test/base/ui_test_utils.h"
#include "chrome/test/views/scoped_macviews_browser_mode.h"
......@@ -25,6 +27,7 @@
#include "content/public/browser/web_contents_observer.h"
#include "content/public/test/browser_test_utils.h"
#include "content/public/test/test_navigation_observer.h"
#include "ui/base/l10n/l10n_util.h"
class BrowserViewTest : public InProcessBrowserTest {
public:
......@@ -87,6 +90,17 @@ class TestWebContentsObserver : public content::WebContentsObserver {
DISALLOW_COPY_AND_ASSIGN(TestWebContentsObserver);
};
class TestTabModalConfirmDialogDelegate : public TabModalConfirmDialogDelegate {
public:
explicit TestTabModalConfirmDialogDelegate(content::WebContents* contents)
: TabModalConfirmDialogDelegate(contents) {}
base::string16 GetTitle() override {
return base::string16(base::ASCIIToUTF16("Dialog Title"));
}
base::string16 GetDialogMessage() override { return base::string16(); }
DISALLOW_COPY_AND_ASSIGN(TestTabModalConfirmDialogDelegate);
};
} // namespace
// Verifies don't crash when CloseNow() is invoked with two tabs in a browser.
......@@ -339,3 +353,22 @@ IN_PROC_BROWSER_TEST_F(BrowserViewTest, ShowFaviconInTab) {
auto favicon = helper->GetFavicon();
ASSERT_FALSE(favicon.IsEmpty());
}
// Open a tab-modal dialog and check that the accessible window title is the
// title of the dialog.
IN_PROC_BROWSER_TEST_F(BrowserViewTest, GetAccessibleTabModalDialogTitle) {
base::string16 window_title = base::ASCIIToUTF16("about:blank - ") +
l10n_util::GetStringUTF16(IDS_PRODUCT_NAME);
EXPECT_TRUE(base::StartsWith(browser_view()->GetAccessibleWindowTitle(),
window_title, base::CompareCase::SENSITIVE));
content::WebContents* contents = browser_view()->GetActiveWebContents();
TestTabModalConfirmDialogDelegate* delegate =
new TestTabModalConfirmDialogDelegate(contents);
TabModalConfirmDialog::Create(delegate, contents);
EXPECT_EQ(browser_view()->GetAccessibleWindowTitle(), delegate->GetTitle());
delegate->Close();
EXPECT_TRUE(base::StartsWith(browser_view()->GetAccessibleWindowTitle(),
window_title, base::CompareCase::SENSITIVE));
}
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