microsoft/vscode-react-native

Public

mirrored from https://github.com/microsoft/vscode-react-nativeAvailable

CodeCommitsIssuesPull requestsActionsInsightsSecurity
refactor-some-tm-grammars-for-extension-log

Branches

Tags

  • No tags available.
0Branches0Tags
Go to file
Add file
Code

Clone

HTTPS

Download ZIP

src/cdp-proxy/CDPMessageHandlers/iOSDirectCDPMessageHandler.ts

117lines · modeblame

259c018fYuri Skorokhodov5 years ago1// Copyright (c) Microsoft Corporation. All rights reserved.
2// Licensed under the MIT license. See LICENSE file in the project root for details.
3
4import { BaseCDPMessageHandler } from "./baseCDPMessageHandler";
5import { ProcessedCDPMessage } from "./ICDPMessageHandler";
6import { CDP_API_NAMES } from "./CDPAPINames";
7
f5b444ffRedMickey5 years ago8interface ExecutionContext {
9id: number;
10origin: string;
11name: string;
12auxData?: {
13isDefault: boolean;
14type?: "default" | "page";
15frameId?: string;
16};
17}
18
259c018fYuri Skorokhodov5 years ago19export class IOSDirectCDPMessageHandler extends BaseCDPMessageHandler {
20private isBackcompatConfigured: boolean;
f5b444ffRedMickey5 years ago21private customMessageLastId: number;
259c018fYuri Skorokhodov5 years ago22
23constructor() {
24super();
25this.isBackcompatConfigured = false;
f5b444ffRedMickey5 years ago26this.customMessageLastId = 0;
259c018fYuri Skorokhodov5 years ago27}
28
29public processDebuggerCDPMessage(event: any): ProcessedCDPMessage {
09f6024fHeniker4 years ago30const sendBack = false;
259c018fYuri Skorokhodov5 years ago31if (!this.isBackcompatConfigured && event.method === CDP_API_NAMES.RUNTIME_ENABLE) {
32this.configureTargetForIWDPCommunication();
f5b444ffRedMickey5 years ago33this.configureDebuggerForIWDPCommunication();
34this.isBackcompatConfigured = true;
259c018fYuri Skorokhodov5 years ago35}
36return {
37event,
38sendBack,
39};
40}
41
42public processApplicationCDPMessage(event: any): ProcessedCDPMessage {
43if (event.method === CDP_API_NAMES.CONSOLE_MESSAGE_ADDED) {
44event = this.processDeprecatedConsoleMessage(event);
45}
46if (event.result && event.result.properties) {
47event.result = { result: event.result.properties };
48}
49return {
50event,
51sendBack: false,
52};
53}
54
55private processDeprecatedConsoleMessage(event: any) {
56return {
57method: CDP_API_NAMES.RUNTIME_CONSOLE_API_CALLED,
58params: {
59type: event.params.message.type,
60timestamp: event.params.message.timestamp,
34472878RedMickey5 years ago61args: event.params.message.parameters || [
62{ type: "string", value: event.params.message.text },
63],
64stackTrace: {
65callFrames: event.params.message.stack || event.params.message.stackTrace,
66},
259c018fYuri Skorokhodov5 years ago67executionContextId: 1,
68},
69};
70}
71
72private configureTargetForIWDPCommunication(): void {
73try {
74this.applicationTarget?.api.Console.enable({});
75this.applicationTarget?.api.Debugger.setBreakpointsActive({ active: true });
76} catch (err) {
77// Specifically ignore a fail here since it's only for backcompat
78}
79}
f5b444ffRedMickey5 years ago80
81private configureDebuggerForIWDPCommunication(): void {
82const context: ExecutionContext = {
83id: this.customMessageLastId++,
84origin: "",
85name: "IOS Execution Context",
86auxData: {
87isDefault: true,
88},
89};
90try {
91this.sendCustomRequestToDebuggerTarget(
92CDP_API_NAMES.EXECUTION_CONTEXT_CREATED,
93{ context },
94false,
95);
96} catch (err) {
97throw Error("Could not create Execution context");
98}
99}
100
101private sendCustomRequestToDebuggerTarget(
102method: string,
103params: any = {},
104addMessageId: boolean = true,
105): void {
09f6024fHeniker4 years ago106const request: any = {
f5b444ffRedMickey5 years ago107method,
108params,
109};
110
111if (addMessageId) {
112request.id = this.customMessageLastId++;
113}
114
115this.debuggerTarget?.send(request);
116}
34472878RedMickey5 years ago117}