Bug 1438666 - Let tabs.query check if a tab is highlighted
MozReview-Commit-ID: CgVuzLCxjPl
--- a/browser/components/extensions/ext-browser.js
+++ b/browser/components/extensions/ext-browser.js
@@ -654,16 +654,20 @@ class Tab extends TabBase {
get pinned() {
return this.nativeTab.pinned;
}
get active() {
return this.nativeTab.selected;
}
+ get highlighted() {
+ return this.nativeTab.selected;
+ }
+
get selected() {
return this.nativeTab.selected;
}
get status() {
if (this.nativeTab.getAttribute("busy") === "true") {
return "loading";
}
--- a/browser/components/extensions/test/browser/browser_ext_tabs_query.js
+++ b/browser/components/extensions/test/browser/browser_ext_tabs_query.js
@@ -165,16 +165,41 @@ add_task(async function() {
browser.test.notifyPass("tabs.query");
},
});
await extension.startup();
await extension.awaitFinish("tabs.query");
await extension.unload();
+ // match highlighted
+ extension = ExtensionTestUtils.loadExtension({
+ manifest: {
+ "permissions": ["tabs"],
+ },
+
+ background: async function() {
+ let tabs1 = await browser.tabs.query({highlighted: false});
+ browser.test.assertEq(3, tabs1.length, "should have three non-highlighted tabs");
+
+ let tabs2 = await browser.tabs.query({highlighted: true});
+ browser.test.assertEq(1, tabs2.length, "should have one highlighted tab");
+
+ for (let tab of [...tabs1, ...tabs2]) {
+ browser.test.assertEq(tab.active, tab.highlighted, "highlighted and active are equal in tab " + tab.index);
+ }
+
+ browser.test.notifyPass("tabs.query");
+ },
+ });
+
+ await extension.startup();
+ await extension.awaitFinish("tabs.query");
+ await extension.unload();
+
// test width and height
extension = ExtensionTestUtils.loadExtension({
manifest: {
"permissions": ["tabs"],
},
background: function() {
browser.test.onMessage.addListener(async msg => {
--- a/mobile/android/components/extensions/ext-utils.js
+++ b/mobile/android/components/extensions/ext-utils.js
@@ -539,16 +539,20 @@ class Tab extends TabBase {
// all the active tabs.
if (tabTracker.extensionPopupTab === this.nativeTab) {
return false;
}
}
return this.nativeTab.getActive();
}
+ get highlighted() {
+ return this.nativeTab.getActive();
+ }
+
get selected() {
return this.nativeTab.getActive();
}
get status() {
if (this.browser.webProgress.isLoadingDocument) {
return "loading";
}
--- a/mobile/android/components/extensions/test/mochitest/mochitest.ini
+++ b/mobile/android/components/extensions/test/mochitest/mochitest.ini
@@ -25,10 +25,11 @@ skip-if = true # Currently fails in emul
[test_ext_tabs_executeScript_no_create.html]
[test_ext_tabs_executeScript_runAt.html]
[test_ext_tabs_getCurrent.html]
[test_ext_tabs_insertCSS.html]
[test_ext_tabs_lastAccessed.html]
[test_ext_tabs_reload.html]
[test_ext_tabs_reload_bypass_cache.html]
[test_ext_tabs_onUpdated.html]
+[test_ext_tabs_query.html]
[test_ext_tabs_sendMessage.html]
[test_ext_tabs_update_url.html]
new file mode 100644
--- /dev/null
+++ b/mobile/android/components/extensions/test/mochitest/test_ext_tabs_query.html
@@ -0,0 +1,56 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+ <title>Tabs create Test</title>
+ <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
+ <script type="text/javascript" src="/tests/SimpleTest/SpawnTask.js"></script>
+ <script type="text/javascript" src="/tests/SimpleTest/ExtensionTestUtils.js"></script>
+ <script type="text/javascript" src="head.js"></script>
+ <link rel="stylesheet" href="/tests/SimpleTest/test.css"/>
+</head>
+<body>
+
+<script type="text/javascript">
+"use strict";
+
+var {Services} = SpecialPowers.Cu.import("resource://gre/modules/Services.jsm", {});
+
+add_task(async function test_query_highlighted() {
+ let extension = ExtensionTestUtils.loadExtension({
+ manifest: {
+ "permissions": ["tabs"],
+ },
+
+ background: async function() {
+ let tabs1 = await browser.tabs.query({highlighted: false});
+ browser.test.assertEq(3, tabs1.length, "should have three non-highlighted tabs");
+
+ let tabs2 = await browser.tabs.query({highlighted: true});
+ browser.test.assertEq(1, tabs2.length, "should have one highlighted tab");
+
+ for (let tab of [...tabs1, ...tabs2]) {
+ browser.test.assertEq(tab.active, tab.highlighted, "highlighted and active are equal in tab " + tab.index);
+ }
+
+ browser.test.notifyPass("tabs.query");
+ },
+ });
+
+ const {BrowserApp} = Services.wm.getMostRecentWindow("navigator:browser");
+ let tabs = [];
+ for (let url of ["http://example.com/", "http://example.net/", "http://test1.example.org/MochiKit/"]) {
+ tabs.push(BrowserApp.addTab(url));
+ }
+
+ await extension.startup();
+ await extension.awaitFinish("tabs.query");
+ await extension.unload();
+
+ for (let tab of tabs) {
+ BrowserApp.closeTab(tab);
+ }
+});
+</script>
+
+</body>
+</html>