forked from firefox-devtools/debugger
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.js
More file actions
109 lines (90 loc) · 2.79 KB
/
index.js
File metadata and controls
109 lines (90 loc) · 2.79 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at <http://mozilla.org/MPL/2.0/>. */
// @flow
import * as firefox from "./firefox";
import * as chrome from "./chrome";
import { prefs, asyncStore } from "../utils/prefs";
import { setupHelper } from "../utils/dbg";
import {
bootstrapApp,
bootstrapStore,
bootstrapWorkers
} from "../utils/bootstrap";
import { initialBreakpointsState } from "../reducers/breakpoints";
import type { Panel } from "./firefox/types";
function loadFromPrefs(actions: Object) {
const { pauseOnExceptions, pauseOnCaughtExceptions } = prefs;
if (pauseOnExceptions || pauseOnCaughtExceptions) {
return actions.pauseOnExceptions(
pauseOnExceptions,
pauseOnCaughtExceptions
);
}
}
async function syncBreakpoints() {
const breakpoints = await asyncStore.pendingBreakpoints;
const breakpointValues = (Object.values(breakpoints): any);
breakpointValues.forEach(({ disabled, options, generatedLocation }) => {
if (!disabled) {
firefox.clientCommands.setBreakpoint(generatedLocation, options);
}
});
}
function syncXHRBreakpoints() {
asyncStore.xhrBreakpoints.then(bps => {
bps.forEach(({ path, method, disabled }) => {
if (!disabled) {
firefox.clientCommands.setXHRBreakpoint(path, method);
}
});
});
}
async function loadInitialState() {
const pendingBreakpoints = await asyncStore.pendingBreakpoints;
const tabs = await asyncStore.tabs;
const xhrBreakpoints = await asyncStore.xhrBreakpoints;
const eventListenerBreakpoints = await asyncStore.eventListenerBreakpoints;
const breakpoints = initialBreakpointsState(xhrBreakpoints);
return { pendingBreakpoints, tabs, breakpoints, eventListenerBreakpoints };
}
function getClient(connection: any) {
const {
tab: { clientType }
} = connection;
return clientType == "firefox" ? firefox : chrome;
}
export async function onConnect(
connection: Object,
sourceMaps: Object,
panel: Panel
) {
// NOTE: the landing page does not connect to a JS process
if (!connection) {
return;
}
const client = getClient(connection);
const commands = client.clientCommands;
const initialState = await loadInitialState();
const { store, actions, selectors } = bootstrapStore(
commands,
sourceMaps,
panel,
initialState
);
const workers = bootstrapWorkers();
await client.onConnect(connection, actions);
await loadFromPrefs(actions);
syncBreakpoints();
syncXHRBreakpoints();
setupHelper({
store,
actions,
selectors,
workers: { ...workers, sourceMaps },
connection,
client: client.clientCommands
});
bootstrapApp(store);
return { store, actions, selectors, client: commands };
}