-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcontent.js
More file actions
116 lines (116 loc) · 4.97 KB
/
content.js
File metadata and controls
116 lines (116 loc) · 4.97 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
110
111
112
113
114
115
116
try
{
if(chrome.runtime&&chrome.runtime.onMessage)
{
chrome.runtime.onMessage.addListener((request,sender,sendResponse)=>
{
if(request&&request.action==="getPageData_DT")
{
const data={
localStorage:[],
sessionStorage:[],
localStorageCount:0,
sessionStorageCount:0,
permissions:[],
error:null
};
try
{
if(typeof localStorage!=='undefined')
{
for(let i=0;i<localStorage.length;i++)
{
const key=localStorage.key(i);
if(key===null)continue;
let itemValue;
try
{
itemValue=localStorage.getItem(key);
}
catch(e)
{
itemValue=null;
}
data.localStorage.push({key:key,valueSize:itemValue?.length||0});
}
data.localStorageCount=localStorage.length;
}
if(typeof sessionStorage!=='undefined')
{
for(let i=0;i<sessionStorage.length;i++)
{
const key=sessionStorage.key(i);
if(key===null)continue;
let itemValue;
try
{
itemValue=sessionStorage.getItem(key);
}
catch(e)
{
itemValue=null;
}
data.sessionStorage.push({key:key,valueSize:itemValue?.length||0});
}
data.sessionStorageCount=sessionStorage.length;
}
const permissionsToCheck=[
{name:'geolocation',label:'Location',icon:'📍',category:'sensitive'},
{name:'camera',label:'Camera',icon:'📷',category:'sensitive'},
{name:'microphone',label:'Microphone',icon:'🎤',category:'sensitive'}
];
if(typeof navigator.permissions==='undefined'||typeof navigator.permissions.query==='undefined')
{
data.permissions=permissionsToCheck.map(p=>({...p,status:'unavailable'}));
const permErrorMsg="Permissions API unavailable.";
data.error=data.error?`${data.error};${permErrorMsg}`:permErrorMsg;
sendResponse(data);
return false;
}
const permissionPromises=permissionsToCheck.map(p_info=>
navigator.permissions.query({name:p_info.name})
.then(status=>({...p_info,status:status.state}))
.catch(err=>({...p_info,status:'query_failed',errorMsg:err.message}))
);
Promise.all(permissionPromises)
.then(permissions=>
{
data.permissions=permissions;
sendResponse(data);
})
.catch(overallError=>
{
data.permissions=permissionsToCheck.map(p=>({...p,status:'error',errorMsg:"Promise.all failure"}));
const overallPermError="Overall permissions query failed.";
data.error=data.error?`${data.error};${overallPermError}`:overallPermError;
sendResponse(data);
});
return true;
}
catch(eDataGather)
{
data.error=`Content script error:${eDataGather.message}`;
data.localStorage=[];
data.localStorageCount=0;
data.sessionStorage=[];
data.sessionStorageCount=0;
data.permissions=[];
sendResponse(data);
return false;
}
}
else
{
return false;
}
});
}
else
{
console.error("DigitalTrustExt_Content_RevG: CRITICAL - chrome.runtime or onMessage UNDEFINED.");
}
}
catch(eTopLevelSetup)
{
console.error("DigitalTrustExt_Content_RevG: CATASTROPHIC SCRIPT-LEVEL ERROR during setup:",eTopLevelSetup.message);
}