fix: session.getBlobData never resolves with blob sizes > 65536 (#35277)
* fix: session.getBlobData never resolves with blob sizes > 65536 (#34398) * Add unit test case for session.getBlobData Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>
This commit is contained in:
parent
3a6d6ff008
commit
e3efa16415
2 changed files with 48 additions and 1 deletions
|
@ -86,8 +86,11 @@ class DataPipeReader {
|
||||||
if (result == MOJO_RESULT_OK) { // success
|
if (result == MOJO_RESULT_OK) { // success
|
||||||
remaining_size_ -= length;
|
remaining_size_ -= length;
|
||||||
head_ += length;
|
head_ += length;
|
||||||
if (remaining_size_ == 0)
|
if (remaining_size_ == 0) {
|
||||||
OnSuccess();
|
OnSuccess();
|
||||||
|
} else {
|
||||||
|
handle_watcher_.ArmOrNotify();
|
||||||
|
}
|
||||||
} else if (result == MOJO_RESULT_SHOULD_WAIT) { // IO pending
|
} else if (result == MOJO_RESULT_SHOULD_WAIT) { // IO pending
|
||||||
handle_watcher_.ArmOrNotify();
|
handle_watcher_.ArmOrNotify();
|
||||||
} else { // error
|
} else { // error
|
||||||
|
|
|
@ -529,6 +529,50 @@ describe('session module', () => {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('ses.getBlobData2()', () => {
|
||||||
|
const scheme = 'cors-blob';
|
||||||
|
const protocol = session.defaultSession.protocol;
|
||||||
|
const url = `${scheme}://host`;
|
||||||
|
after(async () => {
|
||||||
|
await protocol.unregisterProtocol(scheme);
|
||||||
|
});
|
||||||
|
afterEach(closeAllWindows);
|
||||||
|
|
||||||
|
it('returns blob data for uuid', (done) => {
|
||||||
|
const content = `<html>
|
||||||
|
<script>
|
||||||
|
let fd = new FormData();
|
||||||
|
fd.append("data", new Blob(new Array(65_537).fill('a')));
|
||||||
|
fetch('${url}', {method:'POST', body: fd });
|
||||||
|
</script>
|
||||||
|
</html>`;
|
||||||
|
|
||||||
|
protocol.registerStringProtocol(scheme, (request, callback) => {
|
||||||
|
try {
|
||||||
|
if (request.method === 'GET') {
|
||||||
|
callback({ data: content, mimeType: 'text/html' });
|
||||||
|
} else if (request.method === 'POST') {
|
||||||
|
const uuid = request.uploadData![1].blobUUID;
|
||||||
|
expect(uuid).to.be.a('string');
|
||||||
|
session.defaultSession.getBlobData(uuid!).then(result => {
|
||||||
|
try {
|
||||||
|
const data = new Array(65_537).fill('a');
|
||||||
|
expect(result.toString()).to.equal(data.join(''));
|
||||||
|
done();
|
||||||
|
} catch (e) {
|
||||||
|
done(e);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
done(e);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
const w = new BrowserWindow({ show: false });
|
||||||
|
w.loadURL(url);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
describe('ses.setCertificateVerifyProc(callback)', () => {
|
describe('ses.setCertificateVerifyProc(callback)', () => {
|
||||||
let server: http.Server;
|
let server: http.Server;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue