Use normalized crop rect when creating ImageBitmap

When creating ImageBitmap from ImageData, if the intersection of source rect
and crop rect is empty, we should create and return an empty ImageBitmap with
the size of "normalized" crop rect.

Bug: 739818
Change-Id: Ia405732fc9f2d3f1d97783bcab1a203508cab4e8
Reviewed-on: https://chromium-review.googlesource.com/565053
Cr-Commit-Position: refs/heads/master@{#485688}
WPT-Export-Revision: 84ece2e6f0d5816bcde9ae989d4c3797d8dad37e
diff --git a/2dcontext/imagebitmap/createImageBitmap-sizeOverflow.html b/2dcontext/imagebitmap/createImageBitmap-sizeOverflow.html
new file mode 100644
index 0000000..f58825c
--- /dev/null
+++ b/2dcontext/imagebitmap/createImageBitmap-sizeOverflow.html
@@ -0,0 +1,44 @@
+<!DOCTYPE html>
+<html>
+<title>createImageBitmap with size overflow</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<body>
+<script>
+promise_test(function() {
+    var imgData = new ImageData(20, 20);
+    return new Promise(function(resolve, reject) {
+        createImageBitmap(imgData, 4294967400, 10, 10, 10).then(resolve, reject);
+    });
+}, "createImageBitmap does not crash or reject the promise when passing very large sx");
+
+promise_test(function() {
+    var imgData = new ImageData(20, 20);
+    return new Promise(function(resolve, reject) {
+        createImageBitmap(imgData, 10, 4294967400, 10, 10).then(resolve, reject);
+    });
+}, "createImageBitmap does not crash or reject the promise when passing very large sy");
+
+promise_test(function() {
+    var imgData = new ImageData(20, 20);
+    return new Promise(function(resolve, reject) {
+        createImageBitmap(imgData, 10, 10, 4294967400, 10).then(resolve, reject);
+    });
+}, "createImageBitmap does not crash or reject the promise when passing very large sw");
+
+promise_test(function() {
+    var imgData = new ImageData(20, 20);
+    return new Promise(function(resolve, reject) {
+        createImageBitmap(imgData, 10, 10, 10, 4294967400).then(resolve, reject);
+    });
+}, "createImageBitmap does not crash or reject the promise when passing very large sh");
+
+promise_test(function() {
+    var imgData = new ImageData(20, 20);
+    return new Promise(function(resolve, reject) {
+        createImageBitmap(imgData, 4294967400, 4294967400, 4294967400, 4294967400).then(resolve, reject);
+    });
+}, "createImageBitmap does not crash or reject the promise when passing very large sx, sy, sw and sh");
+</script>
+</body>
+</html>
\ No newline at end of file