Commit 5aa7731c authored by Hector Carmona's avatar Hector Carmona Committed by Commit Bot

Extensions: Focus correct button on options dialog close.

Also fix some const references surfaced by presubmit.

Bug: 912026
Change-Id: I2661f69f0e63e613a9b8e9d565813c3e27fed340
Reviewed-on: https://chromium-review.googlesource.com/c/1377494Reviewed-by: default avatarDevlin <rdevlin.cronin@chromium.org>
Commit-Queue: Hector Carmona <hcarmona@chromium.org>
Cr-Commit-Position: refs/heads/master@{#619843}
parent 5eb41b90
......@@ -44,6 +44,14 @@ cr.define('extensions', function() {
'view-enter-start': 'onViewEnterStart_',
},
/**
* Focuses the extensions options button. This should be used after the
* dialog closes.
*/
focusOptionsButton: function() {
this.$$('#extensions-options').focus();
},
/**
* Focuses the back button when page is loaded.
* @private
......
......@@ -530,6 +530,7 @@ cr.define('extensions', function() {
/** @private */
onOptionsDialogClose_: function() {
this.showOptionsDialog_ = false;
this.$$('extensions-detail-view').focusOptionsButton();
},
/** @private */
......
{
"name": "Extension With Options Page",
"description": "An extension with an options page and an extra page",
"key": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAm3v3jAleGUmPIlw9zsz5xfNE0uP41ZguA2nz4sM6Dy477Ve8rLMwqdsDjxDDnHWdIxNsGkXQbP+Yo8jhH/tEc1lo780b5T3Sjj+ULKsW/lunxQV35Q4x5UNs0vryQvVZZCn4euYSn66XtRGIe4+3nq55cw8HgF2Ex3r7jJ3jRzQg0LV9j1JyoibkjwAqxvdYdnHtMvVfJPTo8NoTrFFZbq1qBQTZCvZKIFJX/iwY/ib3AnH+DCnc1jj2mBuoOoNYHuRwYt/7uCmst8UNSr47deNlv4neCh5IIWZjz6AROFRUGFrIcP6s3f1FiOQoGGAD5x7adL2zAsScNqyCm2TczQIDAQAB",
"options_ui": { "page": "options.html", "open_in_tab": false },
"version": "0.1.1",
"manifest_version": 2
......
......@@ -63,6 +63,7 @@ CrExtensionsBrowserTestWithInstalledExtension =
testGenPreamble() {
GEN(' InstallGoodExtension();');
GEN(' SetAutoConfirmUninstall();');
GEN(' InstallExtensionWithInPageOptions();');
}
};
......@@ -490,6 +491,32 @@ TEST_F(
extension_manager_tests.TestNames.UrlNavigationToActivityLogFail);
});
CrExtensionsManagerTestWithOptionsDialog =
class extends CrExtensionsBrowserTestWithInstalledExtension {
/** @override */
get browsePreload() {
return 'chrome://extensions/?id=ibbpngabdmdpednkhonkkobdeccpkiff';
}
/** @override */
get extraLibraries() {
return super.extraLibraries.concat([
'manager_test.js',
]);
}
/** @override */
get suiteName() {
return extension_manager_tests.suiteName;
}
};
TEST_F(
'CrExtensionsManagerTestWithOptionsDialog', 'ShowOptionsDialog',
function() {
this.runMochaTest(extension_manager_tests.TestNames.ShowOptionsDialog);
});
CrExtensionsManagerTestWithActivityLogFlag =
class extends CrExtensionsManagerTestWithIdQueryParam {
/** @override */
......
......@@ -14,6 +14,7 @@ cr.define('extension_manager_tests', function() {
'url navigation to activity log without flag set',
UrlNavigationToActivityLogSuccess:
'url navigation to activity log with flag set',
ShowOptionsDialog: 'show options dialog',
};
function getDataByName(list, name) {
......@@ -168,6 +169,50 @@ cr.define('extension_manager_tests', function() {
// Should be re-routed to the main page.
assertViewActive('extensions-item-list');
});
test(assert(TestNames.ShowOptionsDialog), function() {
function waitForOptionsDialogToOpen() {
return new Promise(resolve => {
const dialogOpenListener = () => {
const dialog = manager.$$('#options-dialog');
assert(dialog);
manager.removeEventListener('cr-dialog-open', dialogOpenListener);
resolve(dialog);
};
manager.addEventListener('cr-dialog-open', dialogOpenListener);
});
}
function waitForDialogToClose(dialog) {
return new Promise(resolve => {
// No need to unlisten b/c dialog is removed from DOM after closing.
dialog.addEventListener('close', () => {
// Allow other events to be handled.
window.setTimeout(resolve, 0);
});
});
}
const extensionDetailView = manager.$$('extensions-detail-view');
assertTrue(!!extensionDetailView);
const optionsButton = extensionDetailView.$$('#extensions-options');
// Click the options button.
optionsButton.click();
// Wait for dialog to open.
return waitForOptionsDialogToOpen()
.then(dialog => {
// Close dialog and wait.
dialog.$.dialog.cancel();
return waitForDialogToClose(dialog);
})
.then(() => {
// Validate that this button is focused after dialog closes.
assertEquals(optionsButton.$$('button'), getDeepActiveElement());
});
});
});
return {
......
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