diff --git a/remote/domains/parent/Target.jsm b/remote/domains/parent/Target.jsm index 3f58943ae1b8..443a373c308e 100644 --- a/remote/domains/parent/Target.jsm +++ b/remote/domains/parent/Target.jsm @@ -22,6 +22,9 @@ const { ContextualIdentityService } = ChromeUtils.import( const { Domain } = ChromeUtils.import( "chrome://remote/content/domains/Domain.jsm" ); +const { MainProcessTarget } = ChromeUtils.import( + "chrome://remote/content/targets/MainProcessTarget.jsm" +); const { TabManager } = ChromeUtils.import( "chrome://remote/content/TabManager.jsm" ); @@ -60,6 +63,29 @@ class Target extends Domain { ContextualIdentityService.closeContainerTabs(browserContextId); } + getTargets() { + const { targets } = this.session.target; + + const targetInfos = []; + for (const target of targets) { + if (target instanceof MainProcessTarget) { + continue; + } + + targetInfos.push({ + targetId: target.id, + type: target.type, + title: target.title, + url: target.url, + // TODO: Correctly determine if target is attached (bug 1680780) + attached: target.id == this.session.target.id, + browserContextId: target.browserContextId, + }); + } + + return { targetInfos }; + } + setDiscoverTargets({ discover }) { const { targets } = this.session.target; if (discover) { diff --git a/remote/targets/TabTarget.jsm b/remote/targets/TabTarget.jsm index fa447b532296..fd672677aad6 100644 --- a/remote/targets/TabTarget.jsm +++ b/remote/targets/TabTarget.jsm @@ -107,6 +107,10 @@ class TabTarget extends Target { }); } + get title() { + return this.browsingContext.currentWindowGlobal.documentTitle; + } + get type() { return "page"; } @@ -131,7 +135,8 @@ class TabTarget extends Target { // TODO(ato): toJSON cannot be marked async )-: faviconUrl: "", id: this.id, - title: this.title, + // Bug 1680817: Fails to encode some UTF-8 characters + // title: this.title, type: this.type, url: this.url, browsingContextId: this.browsingContext.id, diff --git a/remote/test/browser/target/browser.ini b/remote/test/browser/target/browser.ini index 3d9ecb8f2313..44d1fd678f35 100644 --- a/remote/test/browser/target/browser.ini +++ b/remote/test/browser/target/browser.ini @@ -7,12 +7,14 @@ support-files = !/remote/test/browser/chrome-remote-interface.js !/remote/test/browser/head.js head.js + doc_test.html [browser_activateTarget.js] [browser_attachToTarget.js] [browser_attachedToTarget.js] [browser_browserContext.js] [browser_closeTarget.js] +[browser_getTargets.js] [browser_sendMessageToTarget.js] skip-if = true # bug 1598468 - temporarily stop emitting event due to spamming [browser_setDiscoverTargets.js] diff --git a/remote/test/browser/target/browser_getTargets.js b/remote/test/browser/target/browser_getTargets.js new file mode 100644 index 000000000000..a867a0d18de1 --- /dev/null +++ b/remote/test/browser/target/browser_getTargets.js @@ -0,0 +1,43 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; + +const PAGE_TEST = + "http://example.com/browser/remote/test/browser/target/doc_test.html"; + +add_task( + async function getTargetsDetails({ client }) { + const { Target, target } = client; + + await loadURL(PAGE_TEST); + + const { targetInfos } = await Target.getTargets(); + + Assert.equal(targetInfos.length, 1, "Got expected amount of targets"); + + const targetInfo = targetInfos[0]; + is(targetInfo.id, target.id, "Got expected target id"); + is(targetInfo.type, "page", "Got expected target type"); + is(targetInfo.title, "Test Page", "Got expected target title"); + is(targetInfo.url, PAGE_TEST, "Got expected target URL"); + }, + { createTab: false } +); + +add_task( + async function getTargetsCount({ client }) { + const { Target, target } = client; + const { targetInfo: newTabTargetInfo } = await openTab(Target); + + await loadURL(PAGE_TEST); + + const { targetInfos } = await Target.getTargets(); + + Assert.equal(targetInfos.length, 2, "Got expected amount of targets"); + const targetIds = targetInfos.map(info => info.id); + ok(targetIds.includes(target.id), "Got expected original target id"); + ok(targetIds.includes(newTabTargetInfo.id), "Got expected new target id"); + }, + { createTab: false } +); diff --git a/remote/test/browser/target/doc_test.html b/remote/test/browser/target/doc_test.html new file mode 100644 index 000000000000..c779ea0773ad --- /dev/null +++ b/remote/test/browser/target/doc_test.html @@ -0,0 +1,8 @@ + + + + Test Page + + + +