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

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

Issue 1775613002: Throw a RangeError exception from get/createImageData when out of memory (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 9 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/CanvasRenderingContext2D.h" 5 #include "modules/canvas2d/CanvasRenderingContext2D.h"
6 6
7 #include "core/frame/FrameView.h" 7 #include "core/frame/FrameView.h"
8 #include "core/frame/Settings.h" 8 #include "core/frame/Settings.h"
9 #include "core/html/HTMLCanvasElement.h" 9 #include "core/html/HTMLCanvasElement.h"
10 #include "core/html/HTMLDocument.h" 10 #include "core/html/HTMLDocument.h"
(...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after
209 EXPECT_EQ(50, imageData->height()); 209 EXPECT_EQ(50, imageData->height());
210 210
211 for (unsigned i = 0; i < imageData->data()->length(); ++i) 211 for (unsigned i = 0; i < imageData->data()->length(); ++i)
212 imageData->data()->data()[i] = 255; 212 imageData->data()->data()[i] = 255;
213 213
214 EXPECT_EQ(255, imageData->data()->data()[32]); 214 EXPECT_EQ(255, imageData->data()->data()[32]);
215 215
216 // createImageData(imageData) should create a new ImageData of the same size as 'imageData' 216 // createImageData(imageData) should create a new ImageData of the same size as 'imageData'
217 // but filled with transparent black 217 // but filled with transparent black
218 218
219 ImageData* sameSizeImageData = context2d()->createImageData(imageData); 219 ImageData* sameSizeImageData = context2d()->createImageData(imageData, excep tionState);
220 EXPECT_FALSE(exceptionState.hadException());
220 EXPECT_EQ(100, sameSizeImageData->width()); 221 EXPECT_EQ(100, sameSizeImageData->width());
221 EXPECT_EQ(50, sameSizeImageData->height()); 222 EXPECT_EQ(50, sameSizeImageData->height());
222 EXPECT_EQ(0, sameSizeImageData->data()->data()[32]); 223 EXPECT_EQ(0, sameSizeImageData->data()->data()[32]);
223 224
224 // createImageData(width, height) takes the absolute magnitude of the size a rguments 225 // createImageData(width, height) takes the absolute magnitude of the size a rguments
225 226
226 ImageData* imgdata1 = context2d()->createImageData(10, 20, exceptionState); 227 ImageData* imgdata1 = context2d()->createImageData(10, 20, exceptionState);
227 EXPECT_FALSE(exceptionState.hadException()); 228 EXPECT_FALSE(exceptionState.hadException());
228 ImageData* imgdata2 = context2d()->createImageData(-10, 20, exceptionState); 229 ImageData* imgdata2 = context2d()->createImageData(-10, 20, exceptionState);
229 EXPECT_FALSE(exceptionState.hadException()); 230 EXPECT_FALSE(exceptionState.hadException());
230 ImageData* imgdata3 = context2d()->createImageData(10, -20, exceptionState); 231 ImageData* imgdata3 = context2d()->createImageData(10, -20, exceptionState);
231 EXPECT_FALSE(exceptionState.hadException()); 232 EXPECT_FALSE(exceptionState.hadException());
232 ImageData* imgdata4 = context2d()->createImageData(-10, -20, exceptionState) ; 233 ImageData* imgdata4 = context2d()->createImageData(-10, -20, exceptionState) ;
233 EXPECT_FALSE(exceptionState.hadException()); 234 EXPECT_FALSE(exceptionState.hadException());
234 235
235 EXPECT_EQ((unsigned)800, imgdata1->data()->length()); 236 EXPECT_EQ((unsigned)800, imgdata1->data()->length());
236 EXPECT_EQ((unsigned)800, imgdata2->data()->length()); 237 EXPECT_EQ((unsigned)800, imgdata2->data()->length());
237 EXPECT_EQ((unsigned)800, imgdata3->data()->length()); 238 EXPECT_EQ((unsigned)800, imgdata3->data()->length());
238 EXPECT_EQ((unsigned)800, imgdata4->data()->length()); 239 EXPECT_EQ((unsigned)800, imgdata4->data()->length());
239 } 240 }
240 241
242 TEST_F(CanvasRenderingContext2DAPITest, CreateImageDataTooBig)
243 {
244 createContext(NonOpaque);
245 NonThrowableExceptionState exceptionState;
246 ImageData* tooBigImageData = context2d()->createImageData(1000000, 1000000, exceptionState);
247 EXPECT_EQ(nullptr, tooBigImageData);
248 EXPECT_TRUE(exceptionState.hadException());
249 EXPECT_EQ(V8RangeError, exceptionState.code());
250 }
251
252 TEST_F(CanvasRenderingContext2DAPITest, GetImageDataTooBig)
253 {
254 createContext(NonOpaque);
255 NonThrowableExceptionState exceptionState;
256 ImageData* imageData = context2d()->getImageData(0, 0, 1000000, 1000000, exc eptionState);
257 EXPECT_EQ(nullptr, imageData);
258 EXPECT_TRUE(exceptionState.hadException());
259 EXPECT_EQ(V8RangeError, exceptionState.code());
260 }
261
241 void resetCanvasForAccessibilityRectTest(HTMLDocument& document) 262 void resetCanvasForAccessibilityRectTest(HTMLDocument& document)
242 { 263 {
243 document.documentElement()->setInnerHTML( 264 document.documentElement()->setInnerHTML(
244 "<canvas id='canvas' style='position:absolute; top:0px; left:0px; paddin g:10px; margin:5px;'>" 265 "<canvas id='canvas' style='position:absolute; top:0px; left:0px; paddin g:10px; margin:5px;'>"
245 "<button id='button'></button></canvas>", ASSERT_NO_EXCEPTION); 266 "<button id='button'></button></canvas>", ASSERT_NO_EXCEPTION);
246 document.settings()->setAccessibilityEnabled(true); 267 document.settings()->setAccessibilityEnabled(true);
247 HTMLCanvasElement* canvas = toHTMLCanvasElement(document.getElementById("can vas")); 268 HTMLCanvasElement* canvas = toHTMLCanvasElement(document.getElementById("can vas"));
248 269
249 String canvasType("2d"); 270 String canvasType("2d");
250 CanvasContextCreationAttributes attributes; 271 CanvasContextCreationAttributes attributes;
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
297 AXObjectCacheImpl* axObjectCache = toAXObjectCacheImpl(document().existingAX ObjectCache()); 318 AXObjectCacheImpl* axObjectCache = toAXObjectCacheImpl(document().existingAX ObjectCache());
298 AXObject* axObject = axObjectCache->getOrCreate(buttonElement); 319 AXObject* axObject = axObjectCache->getOrCreate(buttonElement);
299 320
300 EXPECT_EQ(25, axObject->elementRect().x().toInt()); 321 EXPECT_EQ(25, axObject->elementRect().x().toInt());
301 EXPECT_EQ(25, axObject->elementRect().y().toInt()); 322 EXPECT_EQ(25, axObject->elementRect().y().toInt());
302 EXPECT_EQ(40, axObject->elementRect().width().toInt()); 323 EXPECT_EQ(40, axObject->elementRect().width().toInt());
303 EXPECT_EQ(40, axObject->elementRect().height().toInt()); 324 EXPECT_EQ(40, axObject->elementRect().height().toInt());
304 } 325 }
305 326
306 } // namespace blink 327 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698