Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
titaniumnetwork-dev
GitHub Repository: titaniumnetwork-dev/Ultraviolet
Path: blob/main/src/client/url.js
304 views
1
import EventEmitter from "events";
2
import HookEvent from "./hook.js";
3
4
/**
5
* @typedef {import('./index').default} UVClient
6
*/
7
8
class URLApi extends EventEmitter {
9
/**
10
*
11
* @param {UVClient} ctx
12
*/
13
constructor(ctx) {
14
super();
15
this.ctx = ctx;
16
this.window = this.ctx.window;
17
this.URL = this.window.URL || {};
18
this.createObjectURL = this.URL.createObjectURL;
19
this.revokeObjectURL = this.URL.revokeObjectURL;
20
}
21
overrideObjectURL() {
22
this.ctx.override(this.URL, "createObjectURL", (target, that, args) => {
23
if (!args.length) return target.apply(that, args);
24
let [object] = args;
25
26
const event = new HookEvent({ object }, target, that);
27
this.emit("createObjectURL", event);
28
29
if (event.intercepted) return event.returnValue;
30
return event.target.call(event.that, event.data.object);
31
});
32
this.ctx.override(this.URL, "revokeObjectURL", (target, that, args) => {
33
if (!args.length) return target.apply(that, args);
34
let [url] = args;
35
36
const event = new HookEvent({ url }, target, that);
37
this.emit("revokeObjectURL", event);
38
39
if (event.intercepted) return event.returnValue;
40
return event.target.call(event.that, event.data.url);
41
});
42
}
43
}
44
45
export default URLApi;
46
47