Closed Bug 1057556 Opened 10 years ago Closed 8 years ago

TCPSocket doesn't work correctly if byteOffset and byteLength aren't set

Categories

(Core :: DOM: Device Interfaces, defect)

x86
macOS
defect
Not set
normal

Tracking

()

RESOLVED WORKSFORME

People

(Reporter: marco, Unassigned)

References

Details

const DATAARRAY = [0, 255, 254, 0, 1, 2, 3, 0, 255, 255, 254, 0], DATAARRAYBUFFER = new ArrayBuffer(DATAARRAY.length); // This works correctly: var socket = navigator.mozTCPSocket.open("www.mozilla.org", 80, { binaryType: "arraybuffer" }); socket.onopen = function() { console.log("Connection opened"); console.log(socket.send(DATAARRAYBUFFER, 0, 5)); } socket.ondata = function(event) { console.log(event.data.byteLength); socket.close(); } // This doesn't work correctly: var socket = navigator.mozTCPSocket.open("www.mozilla.org", 80, { binaryType: "arraybuffer" }); socket.onopen = function() { console.log("Connection opened"); console.log(socket.send(DATAARRAYBUFFER, 0)); } socket.ondata = function(event) { console.log(event.data.byteLength); socket.close(); } // This doesn't work correctly: var socket = navigator.mozTCPSocket.open("www.mozilla.org", 80, { binaryType: "arraybuffer" }); socket.onopen = function() { console.log("Connection opened"); console.log(socket.send(DATAARRAYBUFFER)); } socket.ondata = function(event) { console.log(event.data.byteLength); socket.close(); }
Component: DOM → DOM: Device Interfaces
They all work correctly if run in a privileged environment like about:newtab.
Summary: TCPSocket doesn't work correctly if both byteOffset and byteLength aren't set → TCPSocket doesn't work correctly if byteOffset and byteLength aren't set
Looks like this has been fixed.
Status: NEW → RESOLVED
Closed: 10 years ago
Resolution: --- → WORKSFORME
:marco, can you confirm your testing method? I don't think anything in TCPSocket actually changed to make this work, so unless XPConnect internals got changed, I don't know why it would start working. Specifically, I think when I migrated the tests to be mochitests in bug 1087145 I think the 3-arg form was still required, although it might have been only in e10s that it was a problem...
Flags: needinfo?(mar.castelluccio)
I just re-ran the mochitests with the following patch applied, and they failed (they hang) in both e10s and non-e10s (on a tip debug build at least), so I'm reopening: diff --git a/dom/network/tests/test_tcpsocket_client_and_server_basics.js b/dom/network/tests/test_tcpsocket_client_and_server_basics.js --- a/dom/network/tests/test_tcpsocket_client_and_server_basics.js +++ b/dom/network/tests/test_tcpsocket_client_and_server_basics.js @@ -194,26 +194,26 @@ function* test_basics() { // -- Simple send / receive // - Send data from client to server // (But not so much we cross the drain threshold.) let smallUint8Array = new Uint8Array(256); for (let i = 0; i < smallUint8Array.length; i++) { smallUint8Array[i] = i; } - is(clientSocket.send(smallUint8Array.buffer, 0, smallUint8Array.length), true, + is(clientSocket.send(smallUint8Array.buffer), true, 'Client sending less than 64k, buffer should not be full.'); let serverReceived = yield serverQueue.waitForDataWithAtLeastLength(256); assertUint8ArraysEqual(serverReceived, smallUint8Array, 'Server received/client sent'); // - Send data from server to client // (But not so much we cross the drain threshold.) - is(serverSocket.send(smallUint8Array.buffer, 0, smallUint8Array.length), true, + is(serverSocket.send(smallUint8Array.buffer), true, 'Server sending less than 64k, buffer should not be full.'); let clientReceived = yield clientQueue.waitForDataWithAtLeastLength(256); assertUint8ArraysEqual(clientReceived, smallUint8Array, 'Client received/server sent'); // -- Perform sending multiple times with different buffer slices // - Send data from client to server
Status: RESOLVED → REOPENED
Resolution: WORKSFORME → ---
You're right, sorry. I was testing in about:newtab.
Flags: needinfo?(mar.castelluccio)
I believe this should work as expected now that bug 885982 has merged.
It wouldn't hurt for someone to actually verify my earlier statement.
Status: REOPENED → NEW
Declaring this WFM based on my review back then and re-inspection here that we default byteOffset to 0: https://hg.mozilla.org/mozilla-central/diff/bf8d9233a7bd/dom/webidl/TCPSocket.webidl#l1.137 and we automatically initialize to length if not passed: https://hg.mozilla.org/mozilla-central/rev/bf8d9233a7bd#l6.646
Status: NEW → RESOLVED
Closed: 10 years ago8 years ago
Resolution: --- → WORKSFORME
You need to log in before you can comment on or make changes to this bug.