-
Notifications
You must be signed in to change notification settings - Fork 0
/
background.js
93 lines (82 loc) · 2.94 KB
/
background.js
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
let id = 1;
chrome.runtime.onMessage.addListener((message) => {
console.log(message);
});
// listens to messages from the js file attached to the popup and then executes respective functions if it's a screenshot or screen capture (coming soon)
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
if(request.msg == "screenshot"){
captureTab();
} else if(request.msg == "scrcapture"){
// records the tab/window/anything you need
recordTab();
} else if(request.msg == "stop"){
stopRec();
};
});
function captureTab(){
// captures the given tab
chrome.tabs.captureVisibleTab((url) => {
console.log("captured, id is: " + id);
// set url of page where the capture will be shown
const capture_url = chrome.extension.getURL(`capture.html?id=${id++}`);
console.log(capture_url);
let targetID = null;
// create a tab to show the screenshot
chrome.tabs.create({
url: capture_url
}, tab => {
targetID = tab.id;
console.log("targetID in bg is: " + targetID);
});
chrome.tabs.onUpdated.addListener(function listener(tabId, changedProps) {
if (tabId != targetID || changedProps.status != "complete") {
chrome.tabs.onUpdated.removeListener(listener);
};
// gets all tabs currently open and then checks if the url is the same as the one we want to modify
chrome.extension.getViews().map((view) => {
console.log("location is: " + view.location.href);
if (view.location.href === capture_url) {
console.log("capture url is: " + capture_url);
// once we have the url, we send the image data to the 'capture.js' file in the html page we created. The image will then be rendered on the html page
chrome.runtime.onConnect.addListener(function(port){
port.postMessage({url: url, id: id-1});
});
console.log("yes");
};
});
});
console.log("id is: " + id);
});
};
let video = document.getElementById("video");
function recordTab(){
let sources = ["screen", "tab", "window", "audio"];
let constraints = {video: true};
chrome.desktopCapture.chooseDesktopMedia(sources, async function(streamId){
let captureStream = null;
try {
let stream = await navigator.mediaDevices.getDisplayMedia(constraints);
stream.getVideoTracks()[0].addEventListener('ended', (stream) => {
console.log("user ended rec session");
console.log(stream);
// chrome.downloads.download({
// url: stream,
// filename: 'video',
// saveAs: false
// }, function (downloadId) {
// console.log(downloadId);
// });
});
} catch(err) {
console.log(err);
}
return captureStream;
console.log("does this work?");
});
};
function stopRec(){
let tracks = video.srcObject.getTracks();
tracks.forEach(track => track.stop());
video.srcObject = null;
video.style.display = "none";
};