blob: 91f147a02b2774ba1948ec36241b7f34ee2eeea5 [file]
// Copyright 2022 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import * as SDK from '../../core/sdk/sdk.js';
import {
createTarget,
} from '../../testing/EnvironmentHelpers.js';
import {
describeWithMockConnection,
} from '../../testing/MockConnection.js';
import {
getMainFrame,
} from '../../testing/ResourceTreeHelpers.js';
import * as UI from '../../ui/legacy/legacy.js';
import * as Main from './main.js';
describeWithMockConnection('ExecutionContextSelector', () => {
it('switches to the default context once available', () => {
new Main.ExecutionContextSelector.ExecutionContextSelector(
SDK.TargetManager.TargetManager.instance(), UI.Context.Context.instance());
const tabTarget = createTarget({type: SDK.Target.Type.Tab});
const mainFrameTarget = createTarget({type: SDK.Target.Type.Frame, parentTarget: tabTarget});
const subframeTarget = createTarget({type: SDK.Target.Type.Frame, parentTarget: mainFrameTarget});
const prerenderTarget = createTarget({type: SDK.Target.Type.Frame, parentTarget: tabTarget, subtype: 'prerender'});
const contextSetFlavor = sinon.spy(UI.Context.Context.instance(), 'setFlavor');
const sentExecutionContextCreated = (target: SDK.Target.Target) => {
const frame = getMainFrame(target);
const runtimeModel = target.model(SDK.RuntimeModel.RuntimeModel);
runtimeModel!.dispatchEventToListeners(
SDK.RuntimeModel.Events.ExecutionContextCreated,
{isDefault: true, frameId: frame.id, target: () => target} as SDK.RuntimeModel.ExecutionContext);
};
sentExecutionContextCreated(subframeTarget);
assert.isTrue(contextSetFlavor.called);
contextSetFlavor.resetHistory();
sentExecutionContextCreated(subframeTarget);
assert.isTrue(contextSetFlavor.notCalled);
sentExecutionContextCreated(mainFrameTarget);
assert.isTrue(contextSetFlavor.called);
contextSetFlavor.resetHistory();
sentExecutionContextCreated(prerenderTarget);
assert.isFalse(contextSetFlavor.called);
});
});