// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. library url_test; import 'dart:async'; import 'dart:html'; import 'dart:typed_data'; import 'package:expect/minitest.dart'; Blob createImageBlob() { var canvas = new CanvasElement(); canvas.width = 100; canvas.height = 100; var context = canvas.context2D; context.fillStyle = 'red'; context.fillRect(0, 0, canvas.width, canvas.height); var dataUri = canvas.toDataUrl('image/png'); var byteString = window.atob(dataUri.split(',')[1]); var mimeString = dataUri.split(',')[0].split(':')[1].split(';')[0]; var arrayBuffer = new Uint8List(byteString.length); var dataArray = new Uint8List.view(arrayBuffer.buffer); for (var i = 0; i < byteString.length; i++) { dataArray[i] = byteString.codeUnitAt(i); } var blob = new Blob([arrayBuffer], 'image/png'); return blob; } Future testCreateObjectUrlFromBlob() async { final done = new Completer(); var blob = createImageBlob(); var url = Url.createObjectUrlFromBlob(blob); expect(url.length, greaterThan(0)); expect(url.startsWith('blob:'), isTrue); var img = new ImageElement(); img.onLoad.listen((_) { expect(img.complete, true); done.complete(); }); img.onError.listen((_) { fail('URL failed to load.'); }); img.src = url; await done.future; } Future testRevokeObjectUrl() async { final done = new Completer(); var blob = createImageBlob(); var url = Url.createObjectUrlFromBlob(blob); expect(url.startsWith('blob:'), isTrue); Url.revokeObjectUrl(url); var img = new ImageElement(); // Image should fail to load since the URL was revoked. img.onError.listen(done.complete); img.onLoad.listen((_) { fail('URL should not have loaded.'); }); img.src = url; await done.future; } main() async { await testCreateObjectUrlFromBlob(); await testRevokeObjectUrl(); }