Hi all,
Currently, there's no way to compare the contents of two Blobs without writing
your own byte-by-byte comparison. A use case I can see for this is setting
webapp wallpapers and wanting to see if an image that a user uploaded is the
same as one already in a gallery, but without having to query a server or store
them as anything other than blobs.
I have an example of what the byte-by-byte comparison code looks like. [1]
Here's a much simpler test case:
```
<script>
var blobA = new Blob(['hello'], {type: 'text/html'});
var blobB = new Blob(['hello'], {type: 'text/html'});
// Prints "blobA and blobB are not equal"
alert('blobA and blobB are ' + (blobA == blobB ? 'equal' : 'not equal'));
</script>
```
Obviously, since byte-by-byte blob comparisons can be very expensive, I think
it's dangerous to provide this with a simple "==" check, so I don't actually
think we should do anything about this. However, Jonas Sicking proposed an
interface like this:
```
p = blob.isEqual(otherblob);
p.then((equal) => {
if (equal === true) {
alert("they were equal");
}
else {
alert("they were not equal");
}
});
```
This would guarantee the following about the blobs:
1) they are the same MIME type,
2) they are byte-by-byte equal.
It could also perform shortcuts (note: these are implementation details) such
as:
1) checking the sizes and if they're different, bailing out early,
2) using memcmp and such when appropriate.
This is discussed further on Mozilla's bug tracker. [2]
Doug
[1] https://bug1029064.bugzilla.mozilla.org/attachment.cgi?id=8445567
[2] https://bugzilla.mozilla.org/show_bug.cgi?id=1029064