Skip to content

Commit 9b6fe34

Browse files
danilsomsikovDevtools-frontend LUCI CQ
authored andcommitted
Fix Web Audio context selection when a context is destroyed and add tests
Bug: 414631999 Change-Id: I941765d2356875f0b7c3b748742b713b6b8d3725 Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/6870539 Auto-Submit: Danil Somsikov <[email protected]> Reviewed-by: Benedikt Meurer <[email protected]> Commit-Queue: Danil Somsikov <[email protected]>
1 parent 62831c2 commit 9b6fe34

File tree

2 files changed

+61
-2
lines changed

2 files changed

+61
-2
lines changed

front_end/panels/web_audio/WebAudioView.test.ts

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,4 +189,59 @@ describeWithMockConnection('WebAudioView', () => {
189189
const input = await view.nextInput;
190190
assert.strictEqual(input.selectedContextIndex, 1);
191191
});
192+
193+
it('keeps context selected when another is destroyed', async () => {
194+
const view = createViewFunctionStub(WebAudio.WebAudioView.WebAudioView);
195+
renderElementIntoDOM(new WebAudio.WebAudioView.WebAudioView(undefined, view));
196+
const target = createTarget();
197+
const model = target.model(WebAudio.WebAudioModel.WebAudioModel);
198+
assert.exists(model);
199+
200+
model.dispatchEventToListeners(WebAudio.WebAudioModel.Events.CONTEXT_CREATED, context1);
201+
await view.nextInput;
202+
model.dispatchEventToListeners(WebAudio.WebAudioModel.Events.CONTEXT_CREATED, context2);
203+
await view.nextInput;
204+
205+
model.dispatchEventToListeners(WebAudio.WebAudioModel.Events.CONTEXT_DESTROYED, context2.contextId);
206+
const input = await view.nextInput;
207+
208+
assert.deepEqual(input.contexts, [context1]);
209+
assert.strictEqual(input.selectedContextIndex, 0);
210+
});
211+
212+
it('selects another context when the selected one is destroyed', async () => {
213+
const view = createViewFunctionStub(WebAudio.WebAudioView.WebAudioView);
214+
renderElementIntoDOM(new WebAudio.WebAudioView.WebAudioView(undefined, view));
215+
const target = createTarget();
216+
const model = target.model(WebAudio.WebAudioModel.WebAudioModel);
217+
assert.exists(model);
218+
219+
model.dispatchEventToListeners(WebAudio.WebAudioModel.Events.CONTEXT_CREATED, context1);
220+
await view.nextInput;
221+
model.dispatchEventToListeners(WebAudio.WebAudioModel.Events.CONTEXT_CREATED, context2);
222+
await view.nextInput;
223+
224+
model.dispatchEventToListeners(WebAudio.WebAudioModel.Events.CONTEXT_DESTROYED, context1.contextId);
225+
const input = await view.nextInput;
226+
227+
assert.deepEqual(input.contexts, [context2]);
228+
assert.strictEqual(input.selectedContextIndex, 0);
229+
});
230+
231+
it('selects nothing when the only context is destroyed', async () => {
232+
const view = createViewFunctionStub(WebAudio.WebAudioView.WebAudioView);
233+
renderElementIntoDOM(new WebAudio.WebAudioView.WebAudioView(undefined, view));
234+
const target = createTarget();
235+
const model = target.model(WebAudio.WebAudioModel.WebAudioModel);
236+
assert.exists(model);
237+
238+
model.dispatchEventToListeners(WebAudio.WebAudioModel.Events.CONTEXT_CREATED, context1);
239+
await view.nextInput;
240+
241+
model.dispatchEventToListeners(WebAudio.WebAudioModel.Events.CONTEXT_DESTROYED, context1.contextId);
242+
const input = await view.nextInput;
243+
244+
assert.isEmpty(input.contexts);
245+
assert.strictEqual(input.selectedContextIndex, -1);
246+
});
192247
});

front_end/panels/web_audio/WebAudioView.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -267,8 +267,12 @@ export class WebAudioView extends UI.Widget.VBox implements SDK.TargetManager.SD
267267
const selectedContext =
268268
this.selectedContextIndex > -1 ? this.contextSelectorItems.at(this.selectedContextIndex) : null;
269269
this.contextSelectorItems.remove(index);
270-
this.selectedContextIndex =
271-
selectedContext ? this.contextSelectorItems.indexOf(selectedContext) : this.contextSelectorItems.length - 1;
270+
const newSelectedIndex = selectedContext ? this.contextSelectorItems.indexOf(selectedContext) : -1;
271+
if (newSelectedIndex > -1) {
272+
this.selectedContextIndex = newSelectedIndex;
273+
} else {
274+
this.selectedContextIndex = Math.min(index, this.contextSelectorItems.length - 1);
275+
}
272276
}
273277
this.requestUpdate();
274278
}

0 commit comments

Comments
 (0)