Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(246)

Side by Side Diff: Source/core/page/DOMWindow.cpp

Issue 20748002: Blob creation methods for ImageBitmap. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 7 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2006, 2007, 2008, 2010 Apple Inc. All rights reserved. 2 * Copyright (C) 2006, 2007, 2008, 2010 Apple Inc. All rights reserved.
3 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies) 3 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies)
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions 6 * modification, are permitted provided that the following conditions
7 * are met: 7 * are met:
8 * 1. Redistributions of source code must retain the above copyright 8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright 10 * 2. Redistributions in binary form must reproduce the above copyright
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
48 #include "core/dom/Element.h" 48 #include "core/dom/Element.h"
49 #include "core/dom/EventListener.h" 49 #include "core/dom/EventListener.h"
50 #include "core/dom/EventNames.h" 50 #include "core/dom/EventNames.h"
51 #include "core/dom/ExceptionCode.h" 51 #include "core/dom/ExceptionCode.h"
52 #include "core/dom/ExceptionCodePlaceholder.h" 52 #include "core/dom/ExceptionCodePlaceholder.h"
53 #include "core/dom/MessageEvent.h" 53 #include "core/dom/MessageEvent.h"
54 #include "core/dom/PageTransitionEvent.h" 54 #include "core/dom/PageTransitionEvent.h"
55 #include "core/dom/RequestAnimationFrameCallback.h" 55 #include "core/dom/RequestAnimationFrameCallback.h"
56 #include "core/dom/ScriptExecutionContext.h" 56 #include "core/dom/ScriptExecutionContext.h"
57 #include "core/editing/Editor.h" 57 #include "core/editing/Editor.h"
58 #include "core/fileapi/Blob.h"
58 #include "core/history/BackForwardController.h" 59 #include "core/history/BackForwardController.h"
59 #include "core/html/HTMLCanvasElement.h" 60 #include "core/html/HTMLCanvasElement.h"
60 #include "core/html/HTMLFrameOwnerElement.h" 61 #include "core/html/HTMLFrameOwnerElement.h"
61 #include "core/html/HTMLImageElement.h" 62 #include "core/html/HTMLImageElement.h"
62 #include "core/html/HTMLVideoElement.h" 63 #include "core/html/HTMLVideoElement.h"
63 #include "core/html/ImageData.h" 64 #include "core/html/ImageData.h"
64 #include "core/html/canvas/CanvasRenderingContext2D.h" 65 #include "core/html/canvas/CanvasRenderingContext2D.h"
65 #include "core/inspector/InspectorInstrumentation.h" 66 #include "core/inspector/InspectorInstrumentation.h"
66 #include "core/inspector/ScriptCallStack.h" 67 #include "core/inspector/ScriptCallStack.h"
67 #include "core/loader/DocumentLoader.h" 68 #include "core/loader/DocumentLoader.h"
(...skipping 1300 matching lines...) Expand 10 before | Expand all | Expand 10 after
1368 return IntSize(); 1369 return IntSize();
1369 } 1370 }
1370 1371
1371 static IntSize size(HTMLVideoElement* video) 1372 static IntSize size(HTMLVideoElement* video)
1372 { 1373 {
1373 if (MediaPlayer* player = video->player()) 1374 if (MediaPlayer* player = video->player())
1374 return player->naturalSize(); 1375 return player->naturalSize();
1375 return IntSize(); 1376 return IntSize();
1376 } 1377 }
1377 1378
1378 void DOMWindow::createImageBitmap(HTMLImageElement* image, PassRefPtr<ImageBitma pCallback> callback, ExceptionCode& ec) 1379 void DOMWindow::createImageBitmap(HTMLImageElement* image, PassRefPtr<ImageBitma pCallback> callback, ExceptionCode& ec) const
1379 { 1380 {
1380 LayoutSize s = size(image); 1381 LayoutSize s = size(image);
1381 createImageBitmap(image, callback, 0, 0, s.width(), s.height(), ec); 1382 createImageBitmap(image, callback, 0, 0, s.width(), s.height(), ec);
1382 } 1383 }
1383 1384
1384 void DOMWindow::createImageBitmap(HTMLImageElement* image, PassRefPtr<ImageBitma pCallback> callback, int sx, int sy, int sw, int sh, ExceptionCode& ec) 1385 void DOMWindow::createImageBitmap(HTMLImageElement* image, PassRefPtr<ImageBitma pCallback> callback, int sx, int sy, int sw, int sh, ExceptionCode& ec) const
1385 { 1386 {
1386 if (!image) { 1387 if (!image) {
1387 ec = TypeError; 1388 ec = TypeError;
1388 return; 1389 return;
1389 } 1390 }
1390 if (!image->cachedImage()) { 1391 if (!image->cachedImage()) {
1391 ec = InvalidStateError; 1392 ec = InvalidStateError;
1392 return; 1393 return;
1393 } 1394 }
1394 if (image->cachedImage()->image()->isSVGImage()) { 1395 if (image->cachedImage()->image()->isSVGImage()) {
(...skipping 14 matching lines...) Expand all
1409 } 1410 }
1410 1411
1411 ec = 0; 1412 ec = 0;
1412 1413
1413 // FIXME: make ImageBitmap creation asynchronous crbug.com/258082 1414 // FIXME: make ImageBitmap creation asynchronous crbug.com/258082
1414 RefPtr<ImageBitmap> imageBitmap = ImageBitmap::create(image, IntRect(sx, sy, sw, sh)); 1415 RefPtr<ImageBitmap> imageBitmap = ImageBitmap::create(image, IntRect(sx, sy, sw, sh));
1415 RefPtr<ImageBitmapCallback> callbackLocal = callback; 1416 RefPtr<ImageBitmapCallback> callbackLocal = callback;
1416 scriptExecutionContext()->postTask(ImageBitmapCallback::CallbackTask::create (imageBitmap.release(), callbackLocal)); 1417 scriptExecutionContext()->postTask(ImageBitmapCallback::CallbackTask::create (imageBitmap.release(), callbackLocal));
1417 } 1418 }
1418 1419
1419 void DOMWindow::createImageBitmap(HTMLVideoElement* video, PassRefPtr<ImageBitma pCallback> callback, ExceptionCode& ec) 1420 void DOMWindow::createImageBitmap(HTMLVideoElement* video, PassRefPtr<ImageBitma pCallback> callback, ExceptionCode& ec) const
1420 { 1421 {
1421 IntSize s = size(video); 1422 IntSize s = size(video);
1422 createImageBitmap(video, callback, 0, 0, s.width(), s.height(), ec); 1423 createImageBitmap(video, callback, 0, 0, s.width(), s.height(), ec);
1423 } 1424 }
1424 1425
1425 void DOMWindow::createImageBitmap(HTMLVideoElement* video, PassRefPtr<ImageBitma pCallback> callback, int sx, int sy, int sw, int sh, ExceptionCode& ec) 1426 void DOMWindow::createImageBitmap(HTMLVideoElement* video, PassRefPtr<ImageBitma pCallback> callback, int sx, int sy, int sw, int sh, ExceptionCode& ec) const
1426 { 1427 {
1427 if (!video) { 1428 if (!video) {
1428 ec = TypeError; 1429 ec = TypeError;
1429 return; 1430 return;
1430 } 1431 }
1431 if (!video->player()) { 1432 if (!video->player()) {
1432 ec = InvalidStateError; 1433 ec = InvalidStateError;
1433 return; 1434 return;
1434 } 1435 }
1435 if (video->networkState() == HTMLMediaElement::NETWORK_EMPTY) { 1436 if (video->networkState() == HTMLMediaElement::NETWORK_EMPTY) {
(...skipping 18 matching lines...) Expand all
1454 } 1455 }
1455 1456
1456 ec = 0; 1457 ec = 0;
1457 1458
1458 // FIXME: make ImageBitmap creation asynchronous crbug.com/258082 1459 // FIXME: make ImageBitmap creation asynchronous crbug.com/258082
1459 RefPtr<ImageBitmap> imageBitmap = ImageBitmap::create(video, IntRect(sx, sy, sw, sh)); 1460 RefPtr<ImageBitmap> imageBitmap = ImageBitmap::create(video, IntRect(sx, sy, sw, sh));
1460 RefPtr<ImageBitmapCallback> callbackLocal = callback; 1461 RefPtr<ImageBitmapCallback> callbackLocal = callback;
1461 scriptExecutionContext()->postTask(ImageBitmapCallback::CallbackTask::create (imageBitmap.release(), callbackLocal)); 1462 scriptExecutionContext()->postTask(ImageBitmapCallback::CallbackTask::create (imageBitmap.release(), callbackLocal));
1462 } 1463 }
1463 1464
1464 void DOMWindow::createImageBitmap(CanvasRenderingContext2D* context, PassRefPtr< ImageBitmapCallback> callback, ExceptionCode& ec) 1465 void DOMWindow::createImageBitmap(CanvasRenderingContext2D* context, PassRefPtr< ImageBitmapCallback> callback, ExceptionCode& ec) const
1465 { 1466 {
1466 createImageBitmap(context->canvas(), callback, ec); 1467 createImageBitmap(context->canvas(), callback, ec);
1467 } 1468 }
1468 1469
1469 void DOMWindow::createImageBitmap(CanvasRenderingContext2D* context, PassRefPtr< ImageBitmapCallback> callback, int sx, int sy, int sw, int sh, ExceptionCode& ec ) 1470 void DOMWindow::createImageBitmap(CanvasRenderingContext2D* context, PassRefPtr< ImageBitmapCallback> callback, int sx, int sy, int sw, int sh, ExceptionCode& ec ) const
1470 { 1471 {
1471 createImageBitmap(context->canvas(), callback, sx, sy, sw, sh, ec); 1472 createImageBitmap(context->canvas(), callback, sx, sy, sw, sh, ec);
1472 } 1473 }
1473 1474
1474 void DOMWindow::createImageBitmap(HTMLCanvasElement* canvas, PassRefPtr<ImageBit mapCallback> callback, ExceptionCode& ec) 1475 void DOMWindow::createImageBitmap(HTMLCanvasElement* canvas, PassRefPtr<ImageBit mapCallback> callback, ExceptionCode& ec) const
1475 { 1476 {
1476 createImageBitmap(canvas, callback, 0, 0, canvas->width(), canvas->height(), ec); 1477 createImageBitmap(canvas, callback, 0, 0, canvas->width(), canvas->height(), ec);
1477 } 1478 }
1478 1479
1479 void DOMWindow::createImageBitmap(HTMLCanvasElement* canvas, PassRefPtr<ImageBit mapCallback> callback, int sx, int sy, int sw, int sh, ExceptionCode& ec) 1480 void DOMWindow::createImageBitmap(HTMLCanvasElement* canvas, PassRefPtr<ImageBit mapCallback> callback, int sx, int sy, int sw, int sh, ExceptionCode& ec) const
1480 { 1481 {
1481 if (!canvas) { 1482 if (!canvas) {
1482 ec = TypeError; 1483 ec = TypeError;
1483 return; 1484 return;
1484 } 1485 }
1485 if (!canvas->originClean()) { 1486 if (!canvas->originClean()) {
1486 ec = InvalidStateError; 1487 ec = InvalidStateError;
1487 return; 1488 return;
1488 } 1489 }
1489 if (!sw || !sh) { 1490 if (!sw || !sh) {
1490 ec = IndexSizeError; 1491 ec = IndexSizeError;
1491 return; 1492 return;
1492 } 1493 }
1493 1494
1494 ec = 0; 1495 ec = 0;
1495 1496
1496 // FIXME: make ImageBitmap creation asynchronous crbug.com/258082 1497 // FIXME: make ImageBitmap creation asynchronous crbug.com/258082
1497 RefPtr<ImageBitmap> imageBitmap = ImageBitmap::create(canvas, IntRect(sx, sy , sw, sh)); 1498 RefPtr<ImageBitmap> imageBitmap = ImageBitmap::create(canvas, IntRect(sx, sy , sw, sh));
1498 RefPtr<ImageBitmapCallback> callbackLocal = callback; 1499 RefPtr<ImageBitmapCallback> callbackLocal = callback;
1499 scriptExecutionContext()->postTask(ImageBitmapCallback::CallbackTask::create (imageBitmap.release(), callbackLocal)); 1500 scriptExecutionContext()->postTask(ImageBitmapCallback::CallbackTask::create (imageBitmap.release(), callbackLocal));
1500 } 1501 }
1501 1502
1502 void DOMWindow::createImageBitmap(ImageData* data, PassRefPtr<ImageBitmapCallbac k> callback, ExceptionCode& ec) 1503 void DOMWindow::createImageBitmap(Blob* blob, PassRefPtr<ImageBitmapCallback> ca llback, ExceptionCode& ec)
1504 {
1505 if (!blob) {
1506 ec = TypeError;
1507 return;
1508 }
1509 // We pass 0 as width and height to indicate that there should be no croppin g.
1510 RefPtr<ImageBitmap> bitmap = ImageBitmap::create(this, callback, blob, IntRe ct(IntPoint(), IntSize()));
1511 m_pendingImageBitmaps.add(bitmap);
1512 }
1513
1514 void DOMWindow::createImageBitmap(Blob* blob, PassRefPtr<ImageBitmapCallback> ca llback, int sx, int sy, int sw, int sh, ExceptionCode& ec)
1515 {
1516 if (!blob) {
1517 ec = TypeError;
1518 return;
1519 }
1520 if (!sw || !sh) {
1521 ec = IndexSizeError;
1522 return;
1523 }
1524 RefPtr<ImageBitmap> bitmap = ImageBitmap::create(this, callback, blob, IntRe ct(sx, sy, sw, sh));
1525 m_pendingImageBitmaps.add(bitmap);
1526 }
1527
1528 void DOMWindow::createImageBitmap(ImageData* data, PassRefPtr<ImageBitmapCallbac k> callback, ExceptionCode& ec) const
1503 { 1529 {
1504 createImageBitmap(data, callback, 0, 0, data->width(), data->height(), ec); 1530 createImageBitmap(data, callback, 0, 0, data->width(), data->height(), ec);
1505 } 1531 }
1506 1532
1507 void DOMWindow::createImageBitmap(ImageData* data, PassRefPtr<ImageBitmapCallbac k> callback, int sx, int sy, int sw, int sh, ExceptionCode& ec) 1533 void DOMWindow::createImageBitmap(ImageData* data, PassRefPtr<ImageBitmapCallbac k> callback, int sx, int sy, int sw, int sh, ExceptionCode& ec) const
1508 { 1534 {
1509 if (!data) { 1535 if (!data) {
1510 ec = TypeError; 1536 ec = TypeError;
1511 return; 1537 return;
1512 } 1538 }
1513 if (!sw || !sh) { 1539 if (!sw || !sh) {
1514 ec = IndexSizeError; 1540 ec = IndexSizeError;
1515 return; 1541 return;
1516 } 1542 }
1517 1543
1518 ec = 0; 1544 ec = 0;
1519 1545
1520 // FIXME: make ImageBitmap creation asynchronous crbug.com/258082 1546 // FIXME: make ImageBitmap creation asynchronous crbug.com/258082
1521 RefPtr<ImageBitmap> imageBitmap = ImageBitmap::create(data, IntRect(sx, sy, sw, sh)); 1547 RefPtr<ImageBitmap> imageBitmap = ImageBitmap::create(data, IntRect(sx, sy, sw, sh));
1522 RefPtr<ImageBitmapCallback> callbackLocal = callback; 1548 RefPtr<ImageBitmapCallback> callbackLocal = callback;
1523 scriptExecutionContext()->postTask(ImageBitmapCallback::CallbackTask::create (imageBitmap.release(), callbackLocal)); 1549 scriptExecutionContext()->postTask(ImageBitmapCallback::CallbackTask::create (imageBitmap.release(), callbackLocal));
1524 } 1550 }
1525 1551
1526 void DOMWindow::createImageBitmap(ImageBitmap* bitmap, PassRefPtr<ImageBitmapCal lback> callback, ExceptionCode& ec) 1552 void DOMWindow::createImageBitmap(ImageBitmap* bitmap, PassRefPtr<ImageBitmapCal lback> callback, ExceptionCode& ec) const
1527 { 1553 {
1528 createImageBitmap(bitmap, callback, 0, 0, bitmap->width(), bitmap->height(), ec); 1554 createImageBitmap(bitmap, callback, 0, 0, bitmap->width(), bitmap->height(), ec);
1529 } 1555 }
1530 1556
1531 void DOMWindow::createImageBitmap(ImageBitmap* bitmap, PassRefPtr<ImageBitmapCal lback> callback, int sx, int sy, int sw, int sh, ExceptionCode& ec) 1557 void DOMWindow::createImageBitmap(ImageBitmap* bitmap, PassRefPtr<ImageBitmapCal lback> callback, int sx, int sy, int sw, int sh, ExceptionCode& ec) const
1532 { 1558 {
1533 if (!bitmap) { 1559 if (!bitmap) {
1534 ec = TypeError; 1560 ec = TypeError;
1535 return; 1561 return;
1536 } 1562 }
1537 if (!sw || !sh) { 1563 if (!sw || !sh) {
1538 ec = IndexSizeError; 1564 ec = IndexSizeError;
1539 return; 1565 return;
1540 } 1566 }
1541 1567
1542 ec = 0; 1568 ec = 0;
1543 1569
1544 // FIXME: make ImageBitmap creation asynchronous crbug.com/258082 1570 // FIXME: make ImageBitmap creation asynchronous crbug.com/258082
1545 RefPtr<ImageBitmap> imageBitmap = ImageBitmap::create(bitmap, IntRect(sx, sy , sw, sh)); 1571 RefPtr<ImageBitmap> imageBitmap = ImageBitmap::create(bitmap, IntRect(sx, sy , sw, sh));
1546 RefPtr<ImageBitmapCallback> callbackLocal = callback; 1572 RefPtr<ImageBitmapCallback> callbackLocal = callback;
1547 scriptExecutionContext()->postTask(ImageBitmapCallback::CallbackTask::create (imageBitmap.release(), callbackLocal)); 1573 scriptExecutionContext()->postTask(ImageBitmapCallback::CallbackTask::create (imageBitmap.release(), callbackLocal));
1548 } 1574 }
1549 1575
1576 void DOMWindow::imageBitmapFinishedLoading(ImageBitmap* bitmap)
1577 {
1578 m_pendingImageBitmaps.remove(bitmap);
1579 }
1580
1550 int DOMWindow::requestAnimationFrame(PassRefPtr<RequestAnimationFrameCallback> c allback) 1581 int DOMWindow::requestAnimationFrame(PassRefPtr<RequestAnimationFrameCallback> c allback)
1551 { 1582 {
1552 callback->m_useLegacyTimeBase = false; 1583 callback->m_useLegacyTimeBase = false;
1553 if (Document* d = document()) 1584 if (Document* d = document())
1554 return d->requestAnimationFrame(callback); 1585 return d->requestAnimationFrame(callback);
1555 return 0; 1586 return 0;
1556 } 1587 }
1557 1588
1558 int DOMWindow::webkitRequestAnimationFrame(PassRefPtr<RequestAnimationFrameCallb ack> callback) 1589 int DOMWindow::webkitRequestAnimationFrame(PassRefPtr<RequestAnimationFrameCallb ack> callback)
1559 { 1590 {
(...skipping 350 matching lines...) Expand 10 before | Expand all | Expand 10 after
1910 1941
1911 Frame* child = frame->tree()->scopedChild(index); 1942 Frame* child = frame->tree()->scopedChild(index);
1912 if (child) 1943 if (child)
1913 return child->domWindow(); 1944 return child->domWindow();
1914 1945
1915 return 0; 1946 return 0;
1916 } 1947 }
1917 1948
1918 1949
1919 } // namespace WebCore 1950 } // namespace WebCore
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698