| Index: chrome/test/data/extensions/api_test/tabs/basics/tabs_util.js
|
| diff --git a/chrome/test/data/extensions/api_test/tabs/basics/tabs_util.js b/chrome/test/data/extensions/api_test/tabs/basics/tabs_util.js
|
| index 757cd6b46539e019144ad5639f0ef65675a89c5e..2ee8b07258454de6dca67ac3332e333db47dbcb9 100644
|
| --- a/chrome/test/data/extensions/api_test/tabs/basics/tabs_util.js
|
| +++ b/chrome/test/data/extensions/api_test/tabs/basics/tabs_util.js
|
| @@ -35,10 +35,10 @@ function createWindow(tabUrls, winOptions, callback) {
|
| // zero arguments.
|
| function waitForAllTabs(callback) {
|
| // Wait for all tabs to load.
|
| - function waitForTabs(){
|
| + function waitForTabs() {
|
| chrome.windows.getAll({"populate": true}, function(windows) {
|
| var ready = true;
|
| - for (var i in windows){
|
| + for (var i in windows) {
|
| for (var j in windows[i].tabs) {
|
| if (windows[i].tabs[j].status != "complete") {
|
| ready = false;
|
| @@ -56,3 +56,56 @@ function waitForAllTabs(callback) {
|
| }
|
| waitForTabs();
|
| }
|
| +
|
| +// Like chrome.tabs.query, but with the ability to filter by |tabId| as well.
|
| +// Returns the found tab or null
|
| +function queryForTab(tabId, queryInfo, callback) {
|
| + chrome.tabs.query(queryInfo,
|
| + pass(function(tabs) {
|
| + var foundTabs = tabs.filter(function(tab) {
|
| + return (tab.id == tabId);
|
| + });
|
| + if (callback !== null)
|
| + callback(foundTabs.length ? foundTabs[0] : null);
|
| + })
|
| + );
|
| +}
|
| +
|
| +// Check onUpdated for a queryable attribute such as muted or audible
|
| +// and then check that the tab, a query, and changeInfo are consistent
|
| +// with the expected value. Does similar checks for each
|
| +// (nonqueryable attribute, expected value) pair in nonqueryableAttribsDict
|
| +// except it does not check the query.
|
| +function onUpdatedExpect(queryableAttrib, expected, nonqueryableAttribsDict) {
|
| + var onUpdatedCompleted = chrome.test.listenForever(
|
| + chrome.tabs.onUpdated,
|
| + function(tabId, changeInfo, tab) {
|
| + if (nonqueryableAttribsDict !== null) {
|
| + var nonqueryableAttribs = Object.keys(nonqueryableAttribsDict);
|
| + nonqueryableAttribs.forEach(function(nonqueryableAttrib) {
|
| + if (typeof changeInfo[nonqueryableAttrib] !== "undefined") {
|
| + assertEq(nonqueryableAttribsDict[nonqueryableAttrib],
|
| + changeInfo[nonqueryableAttrib]);
|
| + assertEq(nonqueryableAttribsDict[nonqueryableAttrib],
|
| + tab[nonqueryableAttrib]);
|
| + }
|
| + });
|
| + }
|
| + if (changeInfo.hasOwnProperty(queryableAttrib)) {
|
| + assertEq(expected, changeInfo[queryableAttrib]);
|
| + assertEq(expected, tab[queryableAttrib]);
|
| + var queryInfo = {};
|
| + queryInfo[queryableAttrib] = expected;
|
| + queryForTab(tabId, queryInfo, pass(function(tab) {
|
| + assertEq(expected, tab[queryableAttrib]);
|
| + queryInfo[queryableAttrib] = !expected;
|
| +
|
| + queryForTab(tabId, queryInfo, pass(function(tab) {
|
| + assertEq(null, tab);
|
| + onUpdatedCompleted();
|
| + }));
|
| + }));
|
| + }
|
| + }
|
| + );
|
| +}
|
|
|