зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1811290 - [cdp] Implement Target.getBrowserContexts r=webdriver-reviewers,whimboo
Depends on D168203 Differential Revision: https://phabricator.services.mozilla.com/D167293
This commit is contained in:
Родитель
6d2c9f83b7
Коммит
3bf32814f0
|
@ -19,23 +19,31 @@ ChromeUtils.defineESModuleGetters(lazy, {
|
||||||
let browserContextIds = 1;
|
let browserContextIds = 1;
|
||||||
|
|
||||||
export class Target extends Domain {
|
export class Target extends Domain {
|
||||||
|
#browserContextIds;
|
||||||
|
|
||||||
constructor(session) {
|
constructor(session) {
|
||||||
super(session);
|
super(session);
|
||||||
|
|
||||||
|
this.#browserContextIds = new Set();
|
||||||
|
|
||||||
this._onTargetCreated = this._onTargetCreated.bind(this);
|
this._onTargetCreated = this._onTargetCreated.bind(this);
|
||||||
this._onTargetDestroyed = this._onTargetDestroyed.bind(this);
|
this._onTargetDestroyed = this._onTargetDestroyed.bind(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
getBrowserContexts() {
|
getBrowserContexts() {
|
||||||
return {
|
const browserContextIds = lazy.ContextualIdentityService.getPublicUserContextIds().filter(
|
||||||
browserContextIds: [],
|
id => this.#browserContextIds.has(id)
|
||||||
};
|
);
|
||||||
|
|
||||||
|
return { browserContextIds };
|
||||||
}
|
}
|
||||||
|
|
||||||
createBrowserContext() {
|
createBrowserContext() {
|
||||||
const identity = lazy.ContextualIdentityService.create(
|
const identity = lazy.ContextualIdentityService.create(
|
||||||
"remote-agent-" + browserContextIds++
|
"remote-agent-" + browserContextIds++
|
||||||
);
|
);
|
||||||
|
|
||||||
|
this.#browserContextIds.add(identity.userContextId);
|
||||||
return { browserContextId: identity.userContextId };
|
return { browserContextId: identity.userContextId };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -44,6 +52,8 @@ export class Target extends Domain {
|
||||||
|
|
||||||
lazy.ContextualIdentityService.remove(browserContextId);
|
lazy.ContextualIdentityService.remove(browserContextId);
|
||||||
lazy.ContextualIdentityService.closeContainerTabs(browserContextId);
|
lazy.ContextualIdentityService.closeContainerTabs(browserContextId);
|
||||||
|
|
||||||
|
this.#browserContextIds.delete(browserContextId);
|
||||||
}
|
}
|
||||||
|
|
||||||
getTargets() {
|
getTargets() {
|
||||||
|
|
|
@ -12,8 +12,29 @@ add_task(async function({ CDP }) {
|
||||||
const { Target } = client;
|
const { Target } = client;
|
||||||
await getDiscoveredTargets(Target);
|
await getDiscoveredTargets(Target);
|
||||||
|
|
||||||
|
// Test if Target.getBrowserContexts is empty before creatinga ny
|
||||||
|
const {
|
||||||
|
browserContextIds: browserContextIdsBefore,
|
||||||
|
} = await Target.getBrowserContexts();
|
||||||
|
|
||||||
|
is(
|
||||||
|
browserContextIdsBefore.length,
|
||||||
|
0,
|
||||||
|
"No browser context is open by default"
|
||||||
|
);
|
||||||
|
|
||||||
const { browserContextId } = await Target.createBrowserContext();
|
const { browserContextId } = await Target.createBrowserContext();
|
||||||
|
|
||||||
|
// Test if Target.getBrowserContexts includes the context we just created
|
||||||
|
const { browserContextIds } = await Target.getBrowserContexts();
|
||||||
|
|
||||||
|
is(browserContextIds.length, 1, "Got expected length of browser contexts");
|
||||||
|
is(
|
||||||
|
browserContextIds[0],
|
||||||
|
browserContextId,
|
||||||
|
"Got expected browser context id from getBrowserContexts"
|
||||||
|
);
|
||||||
|
|
||||||
const targetCreated = Target.targetCreated();
|
const targetCreated = Target.targetCreated();
|
||||||
const { targetId } = await Target.createTarget({ browserContextId });
|
const { targetId } = await Target.createTarget({ browserContextId });
|
||||||
ok(!!targetId, "Target.createTarget returns a non-empty target id");
|
ok(!!targetId, "Target.createTarget returns a non-empty target id");
|
||||||
|
@ -34,6 +55,17 @@ add_task(async function({ CDP }) {
|
||||||
// Releasing the browser context is going to remove the tab opened when calling createTarget
|
// Releasing the browser context is going to remove the tab opened when calling createTarget
|
||||||
await Target.disposeBrowserContext({ browserContextId });
|
await Target.disposeBrowserContext({ browserContextId });
|
||||||
|
|
||||||
|
// Test if Target.getBrowserContexts now is empty
|
||||||
|
const {
|
||||||
|
browserContextIds: browserContextIdsAfter,
|
||||||
|
} = await Target.getBrowserContexts();
|
||||||
|
|
||||||
|
is(
|
||||||
|
browserContextIdsAfter.length,
|
||||||
|
0,
|
||||||
|
"After closing all browser contexts none is available anymore"
|
||||||
|
);
|
||||||
|
|
||||||
await client.close();
|
await client.close();
|
||||||
info("The client is closed");
|
info("The client is closed");
|
||||||
});
|
});
|
||||||
|
|
Загрузка…
Ссылка в новой задаче