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

Side by Side Diff: third_party/WebKit/Source/modules/canvas2d/BaseRenderingContext2D.cpp

Issue 1928043002: Add drawImage() originClean() getSecurityOrigin() to OffscreenCanvas (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: drawImage API added to interface listing Created 4 years, 7 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
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "modules/canvas2d/BaseRenderingContext2D.h" 5 #include "modules/canvas2d/BaseRenderingContext2D.h"
6 6
7 #include "bindings/core/v8/ExceptionMessages.h" 7 #include "bindings/core/v8/ExceptionMessages.h"
8 #include "bindings/core/v8/ExceptionState.h" 8 #include "bindings/core/v8/ExceptionState.h"
9 #include "bindings/core/v8/ExceptionStatePlaceholder.h" 9 #include "bindings/core/v8/ExceptionStatePlaceholder.h"
10 #include "core/css/parser/CSSParser.h" 10 #include "core/css/parser/CSSParser.h"
(...skipping 840 matching lines...) Expand 10 before | Expand all | Expand 10 after
851 if (static_cast<ImageBitmap*>(value.getAsImageBitmap())->isNeutered()) { 851 if (static_cast<ImageBitmap*>(value.getAsImageBitmap())->isNeutered()) {
852 exceptionState.throwDOMException(InvalidStateError, String::format(" The image source is detached")); 852 exceptionState.throwDOMException(InvalidStateError, String::format(" The image source is detached"));
853 return nullptr; 853 return nullptr;
854 } 854 }
855 return value.getAsImageBitmap(); 855 return value.getAsImageBitmap();
856 } 856 }
857 ASSERT_NOT_REACHED(); 857 ASSERT_NOT_REACHED();
858 return nullptr; 858 return nullptr;
859 } 859 }
860 860
861 void BaseRenderingContext2D::drawImage(const CanvasImageSourceUnion& imageSource , double x, double y, ExceptionState& exceptionState) 861 void BaseRenderingContext2D::drawImage(ExecutionContext* executionContext, const CanvasImageSourceUnion& imageSource, double x, double y, ExceptionState& except ionState)
862 { 862 {
863 CanvasImageSource* imageSourceInternal = toImageSourceInternal(imageSource, exceptionState); 863 CanvasImageSource* imageSourceInternal = toImageSourceInternal(imageSource, exceptionState);
864 if (!imageSourceInternal) 864 if (!imageSourceInternal)
865 return; 865 return;
866 FloatSize defaultObjectSize(width(), height()); 866 FloatSize defaultObjectSize(width(), height());
867 FloatSize sourceRectSize = imageSourceInternal->elementSize(defaultObjectSiz e); 867 FloatSize sourceRectSize = imageSourceInternal->elementSize(defaultObjectSiz e);
868 FloatSize destRectSize = imageSourceInternal->defaultDestinationSize(default ObjectSize); 868 FloatSize destRectSize = imageSourceInternal->defaultDestinationSize(default ObjectSize);
869 drawImage(imageSourceInternal, 0, 0, sourceRectSize.width(), sourceRectSize. height(), x, y, destRectSize.width(), destRectSize.height(), exceptionState); 869 drawImage(executionContext, imageSourceInternal, 0, 0, sourceRectSize.width( ), sourceRectSize.height(), x, y, destRectSize.width(), destRectSize.height(), e xceptionState);
870 } 870 }
871 871
872 void BaseRenderingContext2D::drawImage(const CanvasImageSourceUnion& imageSource , 872 void BaseRenderingContext2D::drawImage(ExecutionContext* executionContext, const CanvasImageSourceUnion& imageSource,
873 double x, double y, double width, double height, ExceptionState& exceptionSt ate) 873 double x, double y, double width, double height, ExceptionState& exceptionSt ate)
874 { 874 {
875 CanvasImageSource* imageSourceInternal = toImageSourceInternal(imageSource, exceptionState); 875 CanvasImageSource* imageSourceInternal = toImageSourceInternal(imageSource, exceptionState);
876 if (!imageSourceInternal) 876 if (!imageSourceInternal)
877 return; 877 return;
878 FloatSize defaultObjectSize(this->width(), this->height()); 878 FloatSize defaultObjectSize(this->width(), this->height());
879 FloatSize sourceRectSize = imageSourceInternal->elementSize(defaultObjectSiz e); 879 FloatSize sourceRectSize = imageSourceInternal->elementSize(defaultObjectSiz e);
880 drawImage(imageSourceInternal, 0, 0, sourceRectSize.width(), sourceRectSize. height(), x, y, width, height, exceptionState); 880 drawImage(executionContext, imageSourceInternal, 0, 0, sourceRectSize.width( ), sourceRectSize.height(), x, y, width, height, exceptionState);
881 } 881 }
882 882
883 void BaseRenderingContext2D::drawImage(const CanvasImageSourceUnion& imageSource , 883 void BaseRenderingContext2D::drawImage(ExecutionContext* executionContext, const CanvasImageSourceUnion& imageSource,
884 double sx, double sy, double sw, double sh, 884 double sx, double sy, double sw, double sh,
885 double dx, double dy, double dw, double dh, ExceptionState& exceptionState) 885 double dx, double dy, double dw, double dh, ExceptionState& exceptionState)
886 { 886 {
887 CanvasImageSource* imageSourceInternal = toImageSourceInternal(imageSource, exceptionState); 887 CanvasImageSource* imageSourceInternal = toImageSourceInternal(imageSource, exceptionState);
888 if (!imageSourceInternal) 888 if (!imageSourceInternal)
889 return; 889 return;
890 drawImage(imageSourceInternal, sx, sy, sw, sh, dx, dy, dw, dh, exceptionStat e); 890 drawImage(executionContext, imageSourceInternal, sx, sy, sw, sh, dx, dy, dw, dh, exceptionState);
891 } 891 }
892 892
893 bool BaseRenderingContext2D::shouldDrawImageAntialiased(const FloatRect& destRec t) const 893 bool BaseRenderingContext2D::shouldDrawImageAntialiased(const FloatRect& destRec t) const
894 { 894 {
895 if (!state().shouldAntialias()) 895 if (!state().shouldAntialias())
896 return false; 896 return false;
897 SkCanvas* c = drawingCanvas(); 897 SkCanvas* c = drawingCanvas();
898 ASSERT(c); 898 ASSERT(c);
899 899
900 const SkMatrix &ctm = c->getTotalMatrix(); 900 const SkMatrix &ctm = c->getTotalMatrix();
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
974 if (imageSource->isCanvasElement()) { 974 if (imageSource->isCanvasElement()) {
975 HTMLCanvasElement* canvas = static_cast<HTMLCanvasElement*>(imageSource) ; 975 HTMLCanvasElement* canvas = static_cast<HTMLCanvasElement*>(imageSource) ;
976 if (canvas->isAnimated2D()) { 976 if (canvas->isAnimated2D()) {
977 *reason = DisableDeferralReasonDrawImageOfAnimated2dCanvas; 977 *reason = DisableDeferralReasonDrawImageOfAnimated2dCanvas;
978 return true; 978 return true;
979 } 979 }
980 } 980 }
981 return false; 981 return false;
982 } 982 }
983 983
984 void BaseRenderingContext2D::drawImage(CanvasImageSource* imageSource, 984 void BaseRenderingContext2D::drawImage(ExecutionContext* executionContext, Canva sImageSource* imageSource,
985 double sx, double sy, double sw, double sh, 985 double sx, double sy, double sw, double sh,
986 double dx, double dy, double dw, double dh, ExceptionState& exceptionState) 986 double dx, double dy, double dw, double dh, ExceptionState& exceptionState)
987 { 987 {
988 if (!drawingCanvas()) 988 if (!drawingCanvas())
989 return; 989 return;
990 990
991 RefPtr<Image> image; 991 RefPtr<Image> image;
992 FloatSize defaultObjectSize(width(), height()); 992 FloatSize defaultObjectSize(width(), height());
993 SourceImageStatus sourceImageStatus = InvalidSourceImageStatus; 993 SourceImageStatus sourceImageStatus = InvalidSourceImageStatus;
994 if (!imageSource->isVideoElement()) { 994 if (!imageSource->isVideoElement()) {
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
1045 1045
1046 if (imageSize.width() * imageSize.height() > width() * height() * ExpensiveC anvasHeuristicParameters::ExpensiveImageSizeRatio) 1046 if (imageSize.width() * imageSize.height() > width() * height() * ExpensiveC anvasHeuristicParameters::ExpensiveImageSizeRatio)
1047 isExpensive = true; 1047 isExpensive = true;
1048 1048
1049 if (isExpensive) { 1049 if (isExpensive) {
1050 ImageBuffer* buffer = imageBuffer(); 1050 ImageBuffer* buffer = imageBuffer();
1051 if (buffer) 1051 if (buffer)
1052 buffer->setHasExpensiveOp(); 1052 buffer->setHasExpensiveOp();
1053 } 1053 }
1054 1054
1055 if (originClean() && wouldTaintOrigin(imageSource, nullptr)) 1055 if (originClean() && wouldTaintOrigin(imageSource, executionContext))
1056 setOriginTainted(); 1056 setOriginTainted();
1057 } 1057 }
1058 1058
1059 void BaseRenderingContext2D::clearCanvas() 1059 void BaseRenderingContext2D::clearCanvas()
1060 { 1060 {
1061 FloatRect canvasRect(0, 0, width(), height()); 1061 FloatRect canvasRect(0, 0, width(), height());
1062 checkOverdraw(canvasRect, 0, CanvasRenderingContext2DState::NoImage, ClipFil l); 1062 checkOverdraw(canvasRect, 0, CanvasRenderingContext2DState::NoImage, ClipFil l);
1063 SkCanvas* c = drawingCanvas(); 1063 SkCanvas* c = drawingCanvas();
1064 if (c) 1064 if (c)
1065 c->clear(hasAlpha() ? SK_ColorTRANSPARENT : SK_ColorBLACK); 1065 c->clear(hasAlpha() ? SK_ColorTRANSPARENT : SK_ColorBLACK);
(...skipping 16 matching lines...) Expand all
1082 { 1082 {
1083 if (r0 < 0 || r1 < 0) { 1083 if (r0 < 0 || r1 < 0) {
1084 exceptionState.throwDOMException(IndexSizeError, String::format("The %s provided is less than 0.", r0 < 0 ? "r0" : "r1")); 1084 exceptionState.throwDOMException(IndexSizeError, String::format("The %s provided is less than 0.", r0 < 0 ? "r0" : "r1"));
1085 return nullptr; 1085 return nullptr;
1086 } 1086 }
1087 1087
1088 CanvasGradient* gradient = CanvasGradient::create(FloatPoint(x0, y0), r0, Fl oatPoint(x1, y1), r1); 1088 CanvasGradient* gradient = CanvasGradient::create(FloatPoint(x0, y0), r0, Fl oatPoint(x1, y1), r1);
1089 return gradient; 1089 return gradient;
1090 } 1090 }
1091 1091
1092 CanvasPattern* BaseRenderingContext2D::createPattern(ScriptState* scriptState, c onst CanvasImageSourceUnion& imageSource, const String& repetitionType, Exceptio nState& exceptionState) 1092 CanvasPattern* BaseRenderingContext2D::createPattern(ExecutionContext* execution Context, const CanvasImageSourceUnion& imageSource, const String& repetitionType , ExceptionState& exceptionState)
1093 { 1093 {
1094 Pattern::RepeatMode repeatMode = CanvasPattern::parseRepetitionType(repetiti onType, exceptionState); 1094 Pattern::RepeatMode repeatMode = CanvasPattern::parseRepetitionType(repetiti onType, exceptionState);
1095 if (exceptionState.hadException()) 1095 if (exceptionState.hadException())
1096 return nullptr; 1096 return nullptr;
1097 1097
1098 SourceImageStatus status; 1098 SourceImageStatus status;
1099 CanvasImageSource* imageSourceInternal = toImageSourceInternal(imageSource, exceptionState); 1099 CanvasImageSource* imageSourceInternal = toImageSourceInternal(imageSource, exceptionState);
1100 if (!imageSourceInternal) 1100 if (!imageSourceInternal)
1101 return nullptr; 1101 return nullptr;
1102 FloatSize defaultObjectSize(width(), height()); 1102 FloatSize defaultObjectSize(width(), height());
(...skipping 12 matching lines...) Expand all
1115 imageForRendering = Image::nullImage(); 1115 imageForRendering = Image::nullImage();
1116 break; 1116 break;
1117 case IncompleteSourceImageStatus: 1117 case IncompleteSourceImageStatus:
1118 return nullptr; 1118 return nullptr;
1119 default: 1119 default:
1120 ASSERT_NOT_REACHED(); 1120 ASSERT_NOT_REACHED();
1121 return nullptr; 1121 return nullptr;
1122 } 1122 }
1123 ASSERT(imageForRendering); 1123 ASSERT(imageForRendering);
1124 1124
1125 bool originClean = !wouldTaintOrigin(imageSourceInternal, scriptState); 1125 bool originClean = !wouldTaintOrigin(imageSourceInternal, executionContext);
1126 1126
1127 return CanvasPattern::create(imageForRendering.release(), repeatMode, origin Clean); 1127 return CanvasPattern::create(imageForRendering.release(), repeatMode, origin Clean);
1128 } 1128 }
1129 1129
1130 bool BaseRenderingContext2D::computeDirtyRect(const FloatRect& localRect, SkIRec t* dirtyRect) 1130 bool BaseRenderingContext2D::computeDirtyRect(const FloatRect& localRect, SkIRec t* dirtyRect)
1131 { 1131 {
1132 SkIRect clipBounds; 1132 SkIRect clipBounds;
1133 if (!drawingCanvas()->getClipDeviceBounds(&clipBounds)) 1133 if (!drawingCanvas()->getClipDeviceBounds(&clipBounds))
1134 return false; 1134 return false;
1135 return computeDirtyRect(localRect, clipBounds, dirtyRect); 1135 return computeDirtyRect(localRect, clipBounds, dirtyRect);
(...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after
1386 1386
1387 imageBuffer()->willOverwriteCanvas(); 1387 imageBuffer()->willOverwriteCanvas();
1388 } 1388 }
1389 1389
1390 DEFINE_TRACE(BaseRenderingContext2D) 1390 DEFINE_TRACE(BaseRenderingContext2D)
1391 { 1391 {
1392 visitor->trace(m_stateStack); 1392 visitor->trace(m_stateStack);
1393 } 1393 }
1394 1394
1395 } // namespace blink 1395 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698