summaryrefslogtreecommitdiff
path: root/background.js
blob: 5786847d07256340078083a3fcb1ef4b5a6633b4 (plain)
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
/* global chrome, MediaRecorder, FileReader */

let recorder = null;
let filename = null;

chrome.runtime.onConnect.addListener(port => {
    port.onMessage.addListener(msg => {
        console.log('background script received message', msg);
        switch (msg.type) {
            case 'SET_EXPORT_PATH':
                filename = msg.filename
                break

            case 'REC_STOP':
                recorder.stop()
                break

            case 'REC_START':
                recorder.start();
                break

            case 'REC_CLIENT_PLAY':
                if (recorder) {
                    return
                }
                const tab = port.sender.tab
                tab.url = msg.data.url
                chrome.desktopCapture.chooseDesktopMedia(['tab', 'audio'], streamId => {
                    // Get the stream
                    navigator.webkitGetUserMedia({
                        audio: {
                            mandatory: {
                                chromeMediaSource: 'system'
                            }
                        },
                        video: {
                            mandatory: {
                                chromeMediaSource: 'desktop',
                                chromeMediaSourceId: streamId,
                                minWidth: 1280,
                                maxWidth: 1280,
                                minHeight: 720,
                                maxHeight: 720,
                                minFrameRate: 60,
                            }
                        }
                    }, stream => {
                        var chunks = [];
                        recorder = new MediaRecorder(stream, {
                            videoBitsPerSecond: 2500000,
                            ignoreMutedMedia: true,
                            mimeType: 'video/webm'
                        });
                        recorder.ondataavailable = function (event) {
                            if (event.data.size > 0) {
                                chunks.push(event.data);
                            }
                        };

                        recorder.onstop = function () {
                            var superBuffer = new Blob(chunks, {
                                type: 'video/webm'
                            });

                            var url = URL.createObjectURL(superBuffer);

                            chrome.downloads.download({
                                url,
                                filename,
                            }, () => {
                            });
                        }

                    }, error => console.log('Unable to get user media', error))
                })
                break
            default:
                console.log('Unrecognized message', msg)
        }
    })


    chrome.downloads.onChanged.addListener(function (delta) {
        if (!delta.state || (delta.state.current != 'complete')) {
            return;
        }
        try {
            port.postMessage({ downloadComplete: true })
        }
        catch (e) { }
    });
})