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

Side by Side Diff: third_party/WebKit/Source/core/html/canvas/CanvasAsyncBlobCreatorTest.cpp

Issue 2420203002: Implement convertToBlob() in OffscreenCanvas (Closed)
Patch Set: webgl layout test Created 4 years, 2 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 "core/html/canvas/CanvasAsyncBlobCreator.h" 5 #include "core/html/canvas/CanvasAsyncBlobCreator.h"
6 6
7 #include "core/html/ImageData.h" 7 #include "core/html/ImageData.h"
8 #include "core/testing/DummyPageHolder.h" 8 #include "core/testing/DummyPageHolder.h"
9 #include "platform/testing/UnitTestHelpers.h" 9 #include "platform/testing/UnitTestHelpers.h"
10 #include "public/platform/Platform.h" 10 #include "public/platform/Platform.h"
11 #include "testing/gmock/include/gmock/gmock.h" 11 #include "testing/gmock/include/gmock/gmock.h"
12 #include "testing/gtest/include/gtest/gtest.h" 12 #include "testing/gtest/include/gtest/gtest.h"
13 #include "wtf/Functional.h" 13 #include "wtf/Functional.h"
14 14
15 namespace blink { 15 namespace blink {
16 16
17 typedef CanvasAsyncBlobCreator::IdleTaskStatus IdleTaskStatus; 17 typedef CanvasAsyncBlobCreator::IdleTaskStatus IdleTaskStatus;
18 18
19 class MockCanvasAsyncBlobCreator : public CanvasAsyncBlobCreator { 19 class MockCanvasAsyncBlobCreator : public CanvasAsyncBlobCreator {
20 public: 20 public:
21 MockCanvasAsyncBlobCreator(DOMUint8ClampedArray* data, 21 MockCanvasAsyncBlobCreator(DOMUint8ClampedArray* data,
22 const IntSize& size, 22 const IntSize& size,
23 MimeType mimeType, 23 MimeType mimeType,
24 Document& document) 24 Document* document)
25 : CanvasAsyncBlobCreator(data, mimeType, size, nullptr, 0, document) {} 25 : CanvasAsyncBlobCreator(data,
26 mimeType,
27 size,
28 nullptr,
29 0,
30 document,
31 nullptr) {}
26 32
27 CanvasAsyncBlobCreator::IdleTaskStatus idleTaskStatus() { 33 CanvasAsyncBlobCreator::IdleTaskStatus idleTaskStatus() {
28 return m_idleTaskStatus; 34 return m_idleTaskStatus;
29 } 35 }
30 36
31 MOCK_METHOD0(signalTaskSwitchInStartTimeoutEventForTesting, void()); 37 MOCK_METHOD0(signalTaskSwitchInStartTimeoutEventForTesting, void());
32 MOCK_METHOD0(signalTaskSwitchInCompleteTimeoutEventForTesting, void()); 38 MOCK_METHOD0(signalTaskSwitchInCompleteTimeoutEventForTesting, void());
33 39
34 protected: 40 protected:
35 void createBlobAndInvokeCallback() override{}; 41 void createBlobAndInvokeCallback() override{};
(...skipping 19 matching lines...) Expand all
55 61
56 //============================================================================== 62 //==============================================================================
57 //=================================PNG========================================== 63 //=================================PNG==========================================
58 //============================================================================== 64 //==============================================================================
59 65
60 class MockCanvasAsyncBlobCreatorWithoutStartPng 66 class MockCanvasAsyncBlobCreatorWithoutStartPng
61 : public MockCanvasAsyncBlobCreator { 67 : public MockCanvasAsyncBlobCreator {
62 public: 68 public:
63 MockCanvasAsyncBlobCreatorWithoutStartPng(DOMUint8ClampedArray* data, 69 MockCanvasAsyncBlobCreatorWithoutStartPng(DOMUint8ClampedArray* data,
64 const IntSize& size, 70 const IntSize& size,
65 Document& document) 71 Document* document)
66 : MockCanvasAsyncBlobCreator(data, size, MimeTypePng, document) {} 72 : MockCanvasAsyncBlobCreator(data, size, MimeTypePng, document) {}
67 73
68 protected: 74 protected:
69 void scheduleInitiatePngEncoding() override { 75 void scheduleInitiatePngEncoding() override {
70 // Deliberately make scheduleInitiatePngEncoding do nothing so that idle 76 // Deliberately make scheduleInitiatePngEncoding do nothing so that idle
71 // task never starts 77 // task never starts
72 } 78 }
73 }; 79 };
74 80
75 //============================================================================== 81 //==============================================================================
76 82
77 class MockCanvasAsyncBlobCreatorWithoutCompletePng 83 class MockCanvasAsyncBlobCreatorWithoutCompletePng
78 : public MockCanvasAsyncBlobCreator { 84 : public MockCanvasAsyncBlobCreator {
79 public: 85 public:
80 MockCanvasAsyncBlobCreatorWithoutCompletePng(DOMUint8ClampedArray* data, 86 MockCanvasAsyncBlobCreatorWithoutCompletePng(DOMUint8ClampedArray* data,
81 const IntSize& size, 87 const IntSize& size,
82 Document& document) 88 Document* document)
83 : MockCanvasAsyncBlobCreator(data, size, MimeTypePng, document) {} 89 : MockCanvasAsyncBlobCreator(data, size, MimeTypePng, document) {}
84 90
85 protected: 91 protected:
86 void scheduleInitiatePngEncoding() override { 92 void scheduleInitiatePngEncoding() override {
87 Platform::current()->mainThread()->getWebTaskRunner()->postTask( 93 Platform::current()->mainThread()->getWebTaskRunner()->postTask(
88 BLINK_FROM_HERE, 94 BLINK_FROM_HERE,
89 WTF::bind( 95 WTF::bind(
90 &MockCanvasAsyncBlobCreatorWithoutCompletePng::initiatePngEncoding, 96 &MockCanvasAsyncBlobCreatorWithoutCompletePng::initiatePngEncoding,
91 wrapPersistent(this), std::numeric_limits<double>::max())); 97 wrapPersistent(this), std::numeric_limits<double>::max()));
92 } 98 }
93 99
94 void idleEncodeRowsPng(double deadlineSeconds) override { 100 void idleEncodeRowsPng(double deadlineSeconds) override {
95 // Deliberately make idleEncodeRowsPng do nothing so that idle task never 101 // Deliberately make idleEncodeRowsPng do nothing so that idle task never
96 // completes 102 // completes
97 } 103 }
98 }; 104 };
99 105
100 //============================================================================== 106 //==============================================================================
101 //=================================JPEG========================================= 107 //=================================JPEG=========================================
102 //============================================================================== 108 //==============================================================================
103 109
104 class MockCanvasAsyncBlobCreatorWithoutStartJpeg 110 class MockCanvasAsyncBlobCreatorWithoutStartJpeg
105 : public MockCanvasAsyncBlobCreator { 111 : public MockCanvasAsyncBlobCreator {
106 public: 112 public:
107 MockCanvasAsyncBlobCreatorWithoutStartJpeg(DOMUint8ClampedArray* data, 113 MockCanvasAsyncBlobCreatorWithoutStartJpeg(DOMUint8ClampedArray* data,
108 const IntSize& size, 114 const IntSize& size,
109 Document& document) 115 Document* document)
110 : MockCanvasAsyncBlobCreator(data, size, MimeTypeJpeg, document) {} 116 : MockCanvasAsyncBlobCreator(data, size, MimeTypeJpeg, document) {}
111 117
112 protected: 118 protected:
113 void scheduleInitiateJpegEncoding(const double&) override { 119 void scheduleInitiateJpegEncoding(const double&) override {
114 // Deliberately make scheduleInitiateJpegEncoding do nothing so that idle 120 // Deliberately make scheduleInitiateJpegEncoding do nothing so that idle
115 // task never starts 121 // task never starts
116 } 122 }
117 }; 123 };
118 124
119 //============================================================================== 125 //==============================================================================
120 126
121 class MockCanvasAsyncBlobCreatorWithoutCompleteJpeg 127 class MockCanvasAsyncBlobCreatorWithoutCompleteJpeg
122 : public MockCanvasAsyncBlobCreator { 128 : public MockCanvasAsyncBlobCreator {
123 public: 129 public:
124 MockCanvasAsyncBlobCreatorWithoutCompleteJpeg(DOMUint8ClampedArray* data, 130 MockCanvasAsyncBlobCreatorWithoutCompleteJpeg(DOMUint8ClampedArray* data,
125 const IntSize& size, 131 const IntSize& size,
126 Document& document) 132 Document* document)
127 : MockCanvasAsyncBlobCreator(data, size, MimeTypeJpeg, document) {} 133 : MockCanvasAsyncBlobCreator(data, size, MimeTypeJpeg, document) {}
128 134
129 protected: 135 protected:
130 void scheduleInitiateJpegEncoding(const double& quality) override { 136 void scheduleInitiateJpegEncoding(const double& quality) override {
131 Platform::current()->mainThread()->getWebTaskRunner()->postTask( 137 Platform::current()->mainThread()->getWebTaskRunner()->postTask(
132 BLINK_FROM_HERE, 138 BLINK_FROM_HERE,
133 WTF::bind(&MockCanvasAsyncBlobCreatorWithoutCompleteJpeg:: 139 WTF::bind(&MockCanvasAsyncBlobCreatorWithoutCompleteJpeg::
134 initiateJpegEncoding, 140 initiateJpegEncoding,
135 wrapPersistent(this), quality, 141 wrapPersistent(this), quality,
136 std::numeric_limits<double>::max())); 142 std::numeric_limits<double>::max()));
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
173 CanvasAsyncBlobCreatorTest::CanvasAsyncBlobCreatorTest() { 179 CanvasAsyncBlobCreatorTest::CanvasAsyncBlobCreatorTest() {
174 m_dummyPageHolder = DummyPageHolder::create(); 180 m_dummyPageHolder = DummyPageHolder::create();
175 } 181 }
176 182
177 void CanvasAsyncBlobCreatorTest:: 183 void CanvasAsyncBlobCreatorTest::
178 prepareMockCanvasAsyncBlobCreatorWithoutStartPng() { 184 prepareMockCanvasAsyncBlobCreatorWithoutStartPng() {
179 IntSize testSize(20, 20); 185 IntSize testSize(20, 20);
180 ImageData* imageData = ImageData::create(testSize); 186 ImageData* imageData = ImageData::create(testSize);
181 187
182 m_asyncBlobCreator = new MockCanvasAsyncBlobCreatorWithoutStartPng( 188 m_asyncBlobCreator = new MockCanvasAsyncBlobCreatorWithoutStartPng(
183 imageData->data(), testSize, document()); 189 imageData->data(), testSize, &document());
184 } 190 }
185 191
186 void CanvasAsyncBlobCreatorTest:: 192 void CanvasAsyncBlobCreatorTest::
187 prepareMockCanvasAsyncBlobCreatorWithoutCompletePng() { 193 prepareMockCanvasAsyncBlobCreatorWithoutCompletePng() {
188 IntSize testSize(20, 20); 194 IntSize testSize(20, 20);
189 ImageData* imageData = ImageData::create(testSize); 195 ImageData* imageData = ImageData::create(testSize);
190 196
191 m_asyncBlobCreator = new MockCanvasAsyncBlobCreatorWithoutCompletePng( 197 m_asyncBlobCreator = new MockCanvasAsyncBlobCreatorWithoutCompletePng(
192 imageData->data(), testSize, document()); 198 imageData->data(), testSize, &document());
193 } 199 }
194 200
195 void CanvasAsyncBlobCreatorTest::prepareMockCanvasAsyncBlobCreatorFailPng() { 201 void CanvasAsyncBlobCreatorTest::prepareMockCanvasAsyncBlobCreatorFailPng() {
196 IntSize testSize(0, 0); 202 IntSize testSize(0, 0);
197 ImageData* imageData = ImageData::create(testSize); 203 ImageData* imageData = ImageData::create(testSize);
198 204
199 // We reuse the class MockCanvasAsyncBlobCreatorWithoutCompletePng because 205 // We reuse the class MockCanvasAsyncBlobCreatorWithoutCompletePng because
200 // this test case is expected to fail at initialization step before 206 // this test case is expected to fail at initialization step before
201 // completion. 207 // completion.
202 m_asyncBlobCreator = new MockCanvasAsyncBlobCreatorWithoutCompletePng( 208 m_asyncBlobCreator = new MockCanvasAsyncBlobCreatorWithoutCompletePng(
203 imageData->data(), testSize, document()); 209 imageData->data(), testSize, &document());
204 } 210 }
205 211
206 void CanvasAsyncBlobCreatorTest:: 212 void CanvasAsyncBlobCreatorTest::
207 prepareMockCanvasAsyncBlobCreatorWithoutStartJpeg() { 213 prepareMockCanvasAsyncBlobCreatorWithoutStartJpeg() {
208 IntSize testSize(20, 20); 214 IntSize testSize(20, 20);
209 ImageData* imageData = ImageData::create(testSize); 215 ImageData* imageData = ImageData::create(testSize);
210 216
211 m_asyncBlobCreator = new MockCanvasAsyncBlobCreatorWithoutStartJpeg( 217 m_asyncBlobCreator = new MockCanvasAsyncBlobCreatorWithoutStartJpeg(
212 imageData->data(), testSize, document()); 218 imageData->data(), testSize, &document());
213 } 219 }
214 220
215 void CanvasAsyncBlobCreatorTest:: 221 void CanvasAsyncBlobCreatorTest::
216 prepareMockCanvasAsyncBlobCreatorWithoutCompleteJpeg() { 222 prepareMockCanvasAsyncBlobCreatorWithoutCompleteJpeg() {
217 IntSize testSize(20, 20); 223 IntSize testSize(20, 20);
218 ImageData* imageData = ImageData::create(testSize); 224 ImageData* imageData = ImageData::create(testSize);
219 225
220 m_asyncBlobCreator = new MockCanvasAsyncBlobCreatorWithoutCompleteJpeg( 226 m_asyncBlobCreator = new MockCanvasAsyncBlobCreatorWithoutCompleteJpeg(
221 imageData->data(), testSize, document()); 227 imageData->data(), testSize, &document());
222 } 228 }
223 229
224 void CanvasAsyncBlobCreatorTest::prepareMockCanvasAsyncBlobCreatorFailJpeg() { 230 void CanvasAsyncBlobCreatorTest::prepareMockCanvasAsyncBlobCreatorFailJpeg() {
225 IntSize testSize(0, 0); 231 IntSize testSize(0, 0);
226 ImageData* imageData = ImageData::create(testSize); 232 ImageData* imageData = ImageData::create(testSize);
227 233
228 // We reuse the class MockCanvasAsyncBlobCreatorWithoutCompleteJpeg because 234 // We reuse the class MockCanvasAsyncBlobCreatorWithoutCompleteJpeg because
229 // this test case is expected to fail at initialization step before 235 // this test case is expected to fail at initialization step before
230 // completion. 236 // completion.
231 m_asyncBlobCreator = new MockCanvasAsyncBlobCreatorWithoutCompleteJpeg( 237 m_asyncBlobCreator = new MockCanvasAsyncBlobCreatorWithoutCompleteJpeg(
232 imageData->data(), testSize, document()); 238 imageData->data(), testSize, &document());
233 } 239 }
234 240
235 void CanvasAsyncBlobCreatorTest::TearDown() { 241 void CanvasAsyncBlobCreatorTest::TearDown() {
236 m_asyncBlobCreator = nullptr; 242 m_asyncBlobCreator = nullptr;
237 } 243 }
238 244
239 //============================================================================== 245 //==============================================================================
240 246
241 TEST_F(CanvasAsyncBlobCreatorTest, 247 TEST_F(CanvasAsyncBlobCreatorTest,
242 PngIdleTaskNotStartedWhenStartTimeoutEventHappens) { 248 PngIdleTaskNotStartedWhenStartTimeoutEventHappens) {
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
289 } 295 }
290 296
291 // The below 3 unit tests have exactly same workflow as the above 3 unit tests 297 // The below 3 unit tests have exactly same workflow as the above 3 unit tests
292 // except that they are encoding on JPEG image formats instead of PNG. 298 // except that they are encoding on JPEG image formats instead of PNG.
293 TEST_F(CanvasAsyncBlobCreatorTest, 299 TEST_F(CanvasAsyncBlobCreatorTest,
294 JpegIdleTaskNotStartedWhenStartTimeoutEventHappens) { 300 JpegIdleTaskNotStartedWhenStartTimeoutEventHappens) {
295 this->prepareMockCanvasAsyncBlobCreatorWithoutStartJpeg(); 301 this->prepareMockCanvasAsyncBlobCreatorWithoutStartJpeg();
296 EXPECT_CALL(*(asyncBlobCreator()), 302 EXPECT_CALL(*(asyncBlobCreator()),
297 signalTaskSwitchInStartTimeoutEventForTesting()); 303 signalTaskSwitchInStartTimeoutEventForTesting());
298 304
299 this->asyncBlobCreator()->scheduleAsyncBlobCreation(true, 1.0); 305 this->asyncBlobCreator()->scheduleAsyncBlobCreation(1.0);
300 testing::enterRunLoop(); 306 testing::enterRunLoop();
301 307
302 ::testing::Mock::VerifyAndClearExpectations(asyncBlobCreator()); 308 ::testing::Mock::VerifyAndClearExpectations(asyncBlobCreator());
303 EXPECT_EQ(IdleTaskStatus::IdleTaskSwitchedToMainThreadTask, 309 EXPECT_EQ(IdleTaskStatus::IdleTaskSwitchedToMainThreadTask,
304 this->asyncBlobCreator()->idleTaskStatus()); 310 this->asyncBlobCreator()->idleTaskStatus());
305 } 311 }
306 312
307 TEST_F(CanvasAsyncBlobCreatorTest, 313 TEST_F(CanvasAsyncBlobCreatorTest,
308 JpegIdleTaskNotCompletedWhenCompleteTimeoutEventHappens) { 314 JpegIdleTaskNotCompletedWhenCompleteTimeoutEventHappens) {
309 this->prepareMockCanvasAsyncBlobCreatorWithoutCompleteJpeg(); 315 this->prepareMockCanvasAsyncBlobCreatorWithoutCompleteJpeg();
310 EXPECT_CALL(*(asyncBlobCreator()), 316 EXPECT_CALL(*(asyncBlobCreator()),
311 signalTaskSwitchInCompleteTimeoutEventForTesting()); 317 signalTaskSwitchInCompleteTimeoutEventForTesting());
312 318
313 this->asyncBlobCreator()->scheduleAsyncBlobCreation(true, 1.0); 319 this->asyncBlobCreator()->scheduleAsyncBlobCreation(1.0);
314 testing::enterRunLoop(); 320 testing::enterRunLoop();
315 321
316 ::testing::Mock::VerifyAndClearExpectations(asyncBlobCreator()); 322 ::testing::Mock::VerifyAndClearExpectations(asyncBlobCreator());
317 EXPECT_EQ(IdleTaskStatus::IdleTaskSwitchedToMainThreadTask, 323 EXPECT_EQ(IdleTaskStatus::IdleTaskSwitchedToMainThreadTask,
318 this->asyncBlobCreator()->idleTaskStatus()); 324 this->asyncBlobCreator()->idleTaskStatus());
319 } 325 }
320 326
321 TEST_F(CanvasAsyncBlobCreatorTest, 327 TEST_F(CanvasAsyncBlobCreatorTest,
322 JpegIdleTaskFailedWhenStartTimeoutEventHappens) { 328 JpegIdleTaskFailedWhenStartTimeoutEventHappens) {
323 this->prepareMockCanvasAsyncBlobCreatorFailJpeg(); 329 this->prepareMockCanvasAsyncBlobCreatorFailJpeg();
324 330
325 this->asyncBlobCreator()->scheduleAsyncBlobCreation(true, 1.0); 331 this->asyncBlobCreator()->scheduleAsyncBlobCreation(1.0);
326 testing::enterRunLoop(); 332 testing::enterRunLoop();
327 333
328 EXPECT_EQ(IdleTaskStatus::IdleTaskFailed, 334 EXPECT_EQ(IdleTaskStatus::IdleTaskFailed,
329 this->asyncBlobCreator()->idleTaskStatus()); 335 this->asyncBlobCreator()->idleTaskStatus());
330 } 336 }
331 } 337 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698