Skip to content

Commit c998f39

Browse files
committed
got data in app
1 parent bae762f commit c998f39

File tree

6 files changed

+57
-61
lines changed

6 files changed

+57
-61
lines changed

test-extension/content_scripts/content.ts

Lines changed: 30 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,12 @@
33
// Check if the content script has already been loaded into the current tab
44
// Prevents it from injecting into the same page twice if the developer opens and closes the dev tool
55
if (window.myContentScriptLoaded) {
6-
console.log('CONTENT.TS: Content script already injected');
6+
console.log("CONTENT.TS: Content script already injected");
77
return;
88
} else {
99
// Set the flag on the window to indicate the content script has already been loaded in the tab
1010
window.myContentScriptLoaded = true;
11-
console.log('CONTENT.TS: Loaded');
11+
console.log("CONTENT.TS: Loaded");
1212
}
1313

1414
let appConnected = false;
@@ -20,23 +20,23 @@
2020

2121
// Function to setup and initialize the background port
2222
function setupPort() {
23-
console.log('CONTENT.TS: Background.ts Connected');
23+
console.log("CONTENT.TS: Background.ts Connected");
2424

2525
// Connect to background script
26-
backgroundPort = chrome.runtime.connect({ name: 'content-background' });
26+
backgroundPort = chrome.runtime.connect({ name: "content-background" });
2727

2828
// Handle background.ts messages - send message if connected to app otherwise add to queue
29-
backgroundPort.onMessage.addListener(message => {
29+
backgroundPort.onMessage.addListener((message) => {
3030
if (appConnected) {
31-
console.log('CONTENT.TS: Message to app', message);
31+
console.log("CONTENT.TS: Message to app", message);
3232
window.postMessage(message);
3333
} else {
3434
appMessageQueue.push(message);
3535
}
3636
});
3737

3838
backgroundPort.onDisconnect.addListener(() => {
39-
console.log('CONTENT.TS: Background.ts Disconnected');
39+
console.log("CONTENT.TS: Background.ts Disconnected");
4040
// Reset the port to trigger reconnection attempt
4141
backgroundPort = null;
4242
setupPort();
@@ -49,20 +49,20 @@
4949
}
5050

5151
// Add listener to the window to handle messages from the app
52-
window.addEventListener('message', handleMessageFromApp, false);
52+
window.addEventListener("message", handleMessageFromApp, false);
5353

5454
function handleMessageFromApp(message: MessageEvent) {
5555
// Initial message from the app to confirm connection
56-
if (message.data?.type === 'app-connected') {
57-
console.log('CONTENT.TS: App Connected');
56+
if (message.data?.type === "app-connected") {
57+
console.log("CONTENT.TS: App Connected");
5858
clearInterval(appConnectionInterval);
5959
appConnected = true;
6060
appMessageQueue.forEach((message: any) => window.postMessage(message));
6161
appMessageQueue = [];
6262
}
6363

6464
// All other messages are sent to background.ts
65-
if (message.data?.type === 'event') {
65+
if (message.data?.type === "event") {
6666
// console.log('CONTENT.TS: Message from App:', message);
6767
sendMessageToBackground(message);
6868
}
@@ -71,7 +71,7 @@
7171
// Notify app that content.ts is ready
7272
function establishAppConnection() {
7373
if (!appConnected) {
74-
window.postMessage({ type: 'content-script-ready' }, '*');
74+
window.postMessage({ type: "content-script-ready" }, "*");
7575
}
7676
}
7777

@@ -81,12 +81,25 @@
8181

8282
// Function to send a heartbeat message to the background script to keep it active
8383
function sendHeartbeat() {
84-
backgroundPort?.postMessage({ type: 'heartbeat' });
84+
backgroundPort?.postMessage({ type: "heartbeat" });
8585
// console.log('heartbeat');
8686
}
8787

8888
// Call sendHeartbeat function every 25 seconds
8989
setInterval(sendHeartbeat, 25000);
90+
91+
// Function to send a message to the app when the component tree is ready
92+
window.addEventListener("message", (event) => {
93+
// console.log("message from inject.js", event.data.eventListStr);
94+
if (event.data.type && event.data.type === "tree") {
95+
console.log("CONTENT.ts: component tree sending event: ", event);
96+
backgroundPort?.postMessage({type: event.data.type, data: event.data.eventListStr});
97+
// chrome.runtime.sendMessage({
98+
// action: event.data.type,
99+
// data: event.data.eventListStr,
100+
// });
101+
}
102+
});
90103
})();
91104

92105
// *** Component Tree ***
@@ -99,27 +112,14 @@
99112
*/
100113
const inject = (fileName: string) => {
101114
// console.log("CONTENTSCRIPT.JS: INJECTING SCRIPT");
102-
const treeScript = document.createElement('script');
103-
treeScript.setAttribute('type', 'text/javascript');
104-
treeScript.setAttribute('src', chrome.runtime.getURL(fileName));
115+
const treeScript = document.createElement("script");
116+
treeScript.setAttribute("type", "text/javascript");
117+
treeScript.setAttribute("src", chrome.runtime.getURL(fileName));
105118
document.body.appendChild(treeScript);
106119
};
107120

108121
//invoke inject function to inject script
109-
inject('inject.js');
110-
111-
// Function to send a message to the app when the component tree is ready
112-
window.addEventListener('message', event => {
113-
// console.log("message from inject.js", event.data.eventListStr);
114-
if (event.data.type && event.data.type === 'EVENT_LIST') {
115-
console.log("component tree sending event: ", event);
116-
chrome.runtime.sendMessage({
117-
action: event.data.type,
118-
data: event.data.eventListStr,
119-
});
120-
}
121-
});
122-
122+
inject("inject.js");
123123

124124
export {};
125125

@@ -135,4 +135,3 @@ export {};
135135
// appMessageQueue = [];
136136
// console.log('CONTENT.TS: Old content.ts cleaned up.');
137137
// }
138-

test-extension/content_scripts/inject.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ const getReactTree = () => {
177177
//convert eventList to string
178178
const eventListStr = JSON.stringify(eventList);
179179
//send message w/eventList string
180-
window.postMessage({ type: "EVENT_LIST", eventListStr });
180+
window.postMessage({ type: "tree", eventListStr });
181181
return onCommitFiberRoot(...args);
182182
};
183183
};

test-extension/src/App.tsx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ function App() {
1818
const [devToolsPort, setDevToolsPort] = useState<chrome.runtime.Port | null>(
1919
null
2020
);
21+
const [treeData, setTreeData] = useState<any>('');
2122

2223
// adds event listeners when component mountsx
2324
useEffect(() => {
@@ -39,8 +40,9 @@ function App() {
3940
setQueryEvents(queryEvents => [...queryEvents, message.payload]);
4041
}
4142

42-
if (message.type === 'metric') {
43-
// metrics logic
43+
if (message.type === 'tree') {
44+
console.log('APP.tsx: Recieved tree data', message);
45+
setTreeData(message.data);
4446
}
4547
});
4648

@@ -82,6 +84,7 @@ function App() {
8284
selectedQueries={selectedQueries}
8385
handleSelectionChange={handleSelectionChange}
8486
devToolsPort={devToolsPort}
87+
treeData={treeData}
8588
/>
8689
</Container>
8790
);

test-extension/src/containers/ParentTab.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ const ParentTab = ({
1313
selectedQueries,
1414
handleSelectionChange,
1515
devToolsPort,
16+
treeData
1617
}: ParentTabsProps) => {
1718
const [value, setValue] = React.useState(0);
1819

@@ -54,8 +55,7 @@ const ParentTab = ({
5455

5556
<CustomTabPanel value={value} index={1}>
5657
<TreeTab
57-
queryEvents={queryEvents}
58-
selectedQueries={selectedQueries}
58+
treeData={treeData}
5959
/>
6060
</CustomTabPanel>
6161
</Box>

test-extension/src/containers/TreeTab.tsx

Lines changed: 18 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,29 @@
11
import React, { useEffect, useState } from 'react';
22
import Box from '@mui/material/Box';
3-
import { BasicTabsProps } from '../types';
43
import ComponentTree from '../components/Tree';
54
import ProfilingToggle from '../components/ProfilingToggle';
65

7-
const TreeTab = ({ queryEvents }: BasicTabsProps) => {
6+
const TreeTab:React.FC<any> = ({treeData}) => {
7+
console.log('Tree Tab loaded');
8+
9+
chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
10+
if (message.type === "tree") {
11+
console.log("Received component tree events:", message.data);
12+
// Handle the received data as needed
13+
14+
// Optionally, send a response back to the content script
15+
sendResponse({ status: "success", data: "Processed EVENT_LIST" });
16+
}
17+
18+
// Return true if you want to send a response asynchronously
19+
// (this is necessary if the response will not be sent immediately)
20+
return true;
21+
});
22+
23+
824
const [value, setValue] = React.useState(0);
925
const [selectedQueries, setSelectedQueries] = useState<string[]>([]);
1026

11-
const [treeData, setTreeData] = useState<any[]>([]);
1227
//state for navigating between tree and charts
1328
const [view, setView] = useState<string>('treeView');
1429
//state for recording status, default to false;
@@ -42,28 +57,6 @@ const TreeTab = ({ queryEvents }: BasicTabsProps) => {
4257
}
4358
}, [recStat]);
4459

45-
useEffect(() => {
46-
const msgListener = (request: any, sender: any, sendResponse: any) => {
47-
console.log('inside use effect', request);
48-
if (recStat) {
49-
console.log('inside use effect', JSON.parse(request.data));
50-
switch (request.action) {
51-
case 'EVENT_LIST':
52-
if (request.data) {
53-
setTreeData([...JSON.parse(request.data)]);
54-
}
55-
break;
56-
}
57-
}
58-
};
59-
60-
chrome.runtime.onMessage.addListener(msgListener);
61-
62-
return () => {
63-
chrome.runtime.onMessage.removeListener(msgListener);
64-
};
65-
}, [recStat]);
66-
6760
return (
6861
<Box sx={{ display: 'flex', flexDirection: 'column', width: '100%', height: '100%', marginTop: '1rem' }}>
6962
<ProfilingToggle onClick={() => setStatus()}>

test-extension/src/types.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ export type ParentTabsProps = {
1616
selectedQueries: string[];
1717
handleSelectionChange: (queries: string[]) => void;
1818
devToolsPort: chrome.runtime.Port | null;
19+
treeData: any;
1920
};
2021

2122
export type QueryTabProps = {

0 commit comments

Comments
 (0)