Skip to content

Commit 577966c

Browse files
committed
follow-up to #161:
- add __WB_no_unrewrite option to get original url / referrer - avoids storing extra real URL, extra copying of RequestInit object - simplifies Request override, avoids copying props (fixes body not being copied)
1 parent f67fd5d commit 577966c

File tree

3 files changed

+45
-37
lines changed

3 files changed

+45
-37
lines changed

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@webrecorder/wombat",
3-
"version": "3.7.9",
3+
"version": "3.7.10",
44
"main": "index.js",
55
"license": "AGPL-3.0-or-later",
66
"author": "Ilya Kreymer, Webrecorder Software",

src/wombat.js

+21-34
Original file line numberDiff line numberDiff line change
@@ -3026,6 +3026,9 @@ Wombat.prototype.overridePropExtract = function(proto, prop) {
30263026
var new_getter = function () {
30273027
var obj = wombat.proxyToObj(this);
30283028
var res = orig_getter.call(obj);
3029+
if (obj.__WB_no_unrewrite) {
3030+
return res;
3031+
}
30293032
return wombat.extractOriginalURL(res);
30303033
};
30313034
this.defGetterProp(proto, prop, new_getter);
@@ -4612,25 +4615,15 @@ Wombat.prototype.initHTTPOverrides = function() {
46124615

46134616
if (input instanceof Request) {
46144617
var new_url = wombat.rewriteUrl(input.url);
4615-
var real_url = input.__WB_real_url;
4616-
// if already a Request with rewritten url, just use that
4617-
if (new_url === input.url || new_url === real_url || new_url === wombat.$wbwindow.location.origin + real_url) {
4618+
input.__WB_no_unrewrite = true;
4619+
if (new_url === input.url) {
46184620
request = input;
46194621
} else {
46204622
request = new Request(new_url, input);
46214623
}
4624+
delete input.__WB_no_unrewrite;
46224625
} else {
46234626
input = wombat.rewriteUrl(input.toString());
4624-
4625-
if (!init_opts) {
4626-
init_opts = {};
4627-
}
4628-
if (init_opts.credentials === undefined) {
4629-
try {
4630-
init_opts.credentials = 'include';
4631-
} catch(e) {}
4632-
}
4633-
46344627
request = new Request(input, init_opts);
46354628
}
46364629

@@ -4665,30 +4658,24 @@ Wombat.prototype.initHTTPOverrides = function() {
46654658
}
46664659
break;
46674660
}
4668-
const props = ['cache', 'headers', 'integrity',
4669-
'keepalive', 'method', 'mode', 'redirect',
4670-
'referrerPolicy', 'signal'
4671-
];
4672-
4673-
const newOpts = {};
4674-
4675-
for (const prop of props) {
4676-
newOpts[prop] = newInitOpts[prop];
4677-
}
4678-
4679-
newOpts.credentials = 'include';
4680-
4681-
if (newInitOpts.referrer) {
4682-
newOpts.referrer = wombat.rewriteUrl(newInitOpts.referrer);
4661+
let unrwSet = false;
4662+
// make a duplicate object to override referrer
4663+
if (newInitOpts && newInitOpts.referrer) {
4664+
var newReferrer = wombat.rewriteUrl(newInitOpts.referrer);
4665+
if (newReferrer !== newInitOpts.referrer) {
4666+
if (newInitOpts instanceof Request) {
4667+
newInitOpts.__WB_no_unrewrite = true;
4668+
unrwSet = true;
4669+
} else {
4670+
newInitOpts.referrer = newReferrer;
4671+
}
4672+
}
46834673
}
46844674

4685-
if (newInitOpts.duplex && newInitOpts.body) {
4686-
newOpts.body = newInitOpts.body;
4687-
newOpts.duplex = newInitOpts.duplex;
4675+
var request = new Request_(newInput, newInitOpts);
4676+
if (unrwSet) {
4677+
delete newInitOpts.__WB_no_unrewrite;
46884678
}
4689-
4690-
var request = new Request_(newInput, newOpts);
4691-
request.__WB_real_url = newInput;
46924679
return request;
46934680
};
46944681
})(this.$wbwindow.Request);

test/overrides-http.js

+23-2
Original file line numberDiff line numberDiff line change
@@ -118,15 +118,36 @@ test('fetch: should rewrite the input argument when it is an Request object, als
118118
const data = await response.json();
119119
return {url: data.url,
120120
rwUrl: request.url,
121-
realUrl: request.__WB_real_url,
122121
respURL: response.url};
123122
});
124123
t.is(result.rwUrl, 'https://tests.wombat.io/test');
125-
t.is(result.realUrl, '/live/20180803160549mp_/https://tests.wombat.io/test');
126124
t.is(result.url, '/live/20180803160549mp_/https://tests.wombat.io/test');
127125
t.is(result.respURL, 'https://tests.wombat.io/test');
128126
});
129127

128+
test('fetch: Request.referrer is rewritten across multiple copies of Request', async t => {
129+
const { sandbox, server } = t.context;
130+
const result = await sandbox.evaluate(async () => {
131+
let to;
132+
let A = new Request('/test', {'referrer': '/abc'});
133+
let B = new Request('/test', A);
134+
let C = new Request(B, {'referrer': '/xyz'});
135+
let D = new Request({'url': '/test', 'referrer': '/cde'}, C);
136+
D.__WB_no_unrewrite = true;
137+
138+
return {A: A.referrer,
139+
B: B.referrer,
140+
C: C.referrer,
141+
D: D.referrer
142+
};
143+
});
144+
t.is(result.A, 'https://tests.wombat.io/abc');
145+
t.is(result.B, 'https://tests.wombat.io/abc');
146+
t.is(result.C, 'https://tests.wombat.io/xyz');
147+
t.is(result.D, 'http://localhost:3030/live/20180803160549mp_/https://tests.wombat.io/xyz');
148+
});
149+
150+
130151
test('fetch: should rewrite the input argument when it is a object, but return original', async t => {
131152
const { sandbox, server } = t.context;
132153
const result = await sandbox.evaluate(async () => {

0 commit comments

Comments
 (0)