Chromium Code Reviews| OLD | NEW |
|---|---|
| 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" |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 60 class MockCanvasAsyncBlobCreatorWithoutStartPng | 60 class MockCanvasAsyncBlobCreatorWithoutStartPng |
| 61 : public MockCanvasAsyncBlobCreator { | 61 : public MockCanvasAsyncBlobCreator { |
| 62 public: | 62 public: |
| 63 MockCanvasAsyncBlobCreatorWithoutStartPng(DOMUint8ClampedArray* data, | 63 MockCanvasAsyncBlobCreatorWithoutStartPng(DOMUint8ClampedArray* data, |
| 64 const IntSize& size, | 64 const IntSize& size, |
| 65 Document& document) | 65 Document& document) |
| 66 : MockCanvasAsyncBlobCreator(data, size, MimeTypePng, document) {} | 66 : MockCanvasAsyncBlobCreator(data, size, MimeTypePng, document) {} |
| 67 | 67 |
| 68 protected: | 68 protected: |
| 69 void scheduleInitiatePngEncoding() override { | 69 void scheduleInitiatePngEncoding() override { |
| 70 // Deliberately make scheduleInitiatePngEncoding do nothing so that idle tas k never starts | 70 // Deliberately make scheduleInitiatePngEncoding do nothing so that idle |
| 71 // task never starts | |
| 71 } | 72 } |
| 72 }; | 73 }; |
| 73 | 74 |
| 74 //============================================================================== | 75 //============================================================================== |
| 75 | 76 |
| 76 class MockCanvasAsyncBlobCreatorWithoutCompletePng | 77 class MockCanvasAsyncBlobCreatorWithoutCompletePng |
| 77 : public MockCanvasAsyncBlobCreator { | 78 : public MockCanvasAsyncBlobCreator { |
| 78 public: | 79 public: |
| 79 MockCanvasAsyncBlobCreatorWithoutCompletePng(DOMUint8ClampedArray* data, | 80 MockCanvasAsyncBlobCreatorWithoutCompletePng(DOMUint8ClampedArray* data, |
| 80 const IntSize& size, | 81 const IntSize& size, |
| 81 Document& document) | 82 Document& document) |
| 82 : MockCanvasAsyncBlobCreator(data, size, MimeTypePng, document) {} | 83 : MockCanvasAsyncBlobCreator(data, size, MimeTypePng, document) {} |
| 83 | 84 |
| 84 protected: | 85 protected: |
| 85 void scheduleInitiatePngEncoding() override { | 86 void scheduleInitiatePngEncoding() override { |
| 86 Platform::current()->mainThread()->getWebTaskRunner()->postTask( | 87 Platform::current()->mainThread()->getWebTaskRunner()->postTask( |
| 87 BLINK_FROM_HERE, | 88 BLINK_FROM_HERE, |
| 88 WTF::bind( | 89 WTF::bind( |
| 89 &MockCanvasAsyncBlobCreatorWithoutCompletePng::initiatePngEncoding, | 90 &MockCanvasAsyncBlobCreatorWithoutCompletePng::initiatePngEncoding, |
| 90 wrapPersistent(this), std::numeric_limits<double>::max())); | 91 wrapPersistent(this), std::numeric_limits<double>::max())); |
| 91 } | 92 } |
| 92 | 93 |
| 93 void idleEncodeRowsPng(double deadlineSeconds) override { | 94 void idleEncodeRowsPng(double deadlineSeconds) override { |
| 94 // Deliberately make idleEncodeRowsPng do nothing so that idle task never co mpletes | 95 // Deliberately make idleEncodeRowsPng do nothing so that idle task never |
| 96 // completes | |
| 95 } | 97 } |
| 96 }; | 98 }; |
| 97 | 99 |
| 98 //============================================================================== | 100 //============================================================================== |
| 99 //=================================JPEG========================================= | 101 //=================================JPEG========================================= |
| 100 //============================================================================== | 102 //============================================================================== |
| 101 | 103 |
| 102 class MockCanvasAsyncBlobCreatorWithoutStartJpeg | 104 class MockCanvasAsyncBlobCreatorWithoutStartJpeg |
| 103 : public MockCanvasAsyncBlobCreator { | 105 : public MockCanvasAsyncBlobCreator { |
| 104 public: | 106 public: |
| 105 MockCanvasAsyncBlobCreatorWithoutStartJpeg(DOMUint8ClampedArray* data, | 107 MockCanvasAsyncBlobCreatorWithoutStartJpeg(DOMUint8ClampedArray* data, |
| 106 const IntSize& size, | 108 const IntSize& size, |
| 107 Document& document) | 109 Document& document) |
| 108 : MockCanvasAsyncBlobCreator(data, size, MimeTypeJpeg, document) {} | 110 : MockCanvasAsyncBlobCreator(data, size, MimeTypeJpeg, document) {} |
| 109 | 111 |
| 110 protected: | 112 protected: |
| 111 void scheduleInitiateJpegEncoding(const double&) override { | 113 void scheduleInitiateJpegEncoding(const double&) override { |
| 112 // Deliberately make scheduleInitiateJpegEncoding do nothing so that idle ta sk never starts | 114 // Deliberately make scheduleInitiateJpegEncoding do nothing so that idle |
| 115 // task never starts | |
| 113 } | 116 } |
| 114 }; | 117 }; |
| 115 | 118 |
| 116 //============================================================================== | 119 //============================================================================== |
| 117 | 120 |
| 118 class MockCanvasAsyncBlobCreatorWithoutCompleteJpeg | 121 class MockCanvasAsyncBlobCreatorWithoutCompleteJpeg |
| 119 : public MockCanvasAsyncBlobCreator { | 122 : public MockCanvasAsyncBlobCreator { |
| 120 public: | 123 public: |
| 121 MockCanvasAsyncBlobCreatorWithoutCompleteJpeg(DOMUint8ClampedArray* data, | 124 MockCanvasAsyncBlobCreatorWithoutCompleteJpeg(DOMUint8ClampedArray* data, |
| 122 const IntSize& size, | 125 const IntSize& size, |
| 123 Document& document) | 126 Document& document) |
| 124 : MockCanvasAsyncBlobCreator(data, size, MimeTypeJpeg, document) {} | 127 : MockCanvasAsyncBlobCreator(data, size, MimeTypeJpeg, document) {} |
| 125 | 128 |
| 126 protected: | 129 protected: |
| 127 void scheduleInitiateJpegEncoding(const double& quality) override { | 130 void scheduleInitiateJpegEncoding(const double& quality) override { |
| 128 Platform::current()->mainThread()->getWebTaskRunner()->postTask( | 131 Platform::current()->mainThread()->getWebTaskRunner()->postTask( |
| 129 BLINK_FROM_HERE, | 132 BLINK_FROM_HERE, |
| 130 WTF::bind(&MockCanvasAsyncBlobCreatorWithoutCompleteJpeg:: | 133 WTF::bind(&MockCanvasAsyncBlobCreatorWithoutCompleteJpeg:: |
| 131 initiateJpegEncoding, | 134 initiateJpegEncoding, |
| 132 wrapPersistent(this), quality, | 135 wrapPersistent(this), quality, |
| 133 std::numeric_limits<double>::max())); | 136 std::numeric_limits<double>::max())); |
| 134 } | 137 } |
| 135 | 138 |
| 136 void idleEncodeRowsJpeg(double deadlineSeconds) override { | 139 void idleEncodeRowsJpeg(double deadlineSeconds) override { |
| 137 // Deliberately make idleEncodeRowsJpeg do nothing so that idle task never c ompletes | 140 // Deliberately make idleEncodeRowsJpeg do nothing so that idle task never |
| 141 // completes | |
| 138 } | 142 } |
| 139 }; | 143 }; |
| 140 | 144 |
| 141 //============================================================================== | 145 //============================================================================== |
| 142 | 146 |
| 143 class CanvasAsyncBlobCreatorTest : public ::testing::Test { | 147 class CanvasAsyncBlobCreatorTest : public ::testing::Test { |
| 144 public: | 148 public: |
| 145 // Png unit tests | 149 // Png unit tests |
| 146 void prepareMockCanvasAsyncBlobCreatorWithoutStartPng(); | 150 void prepareMockCanvasAsyncBlobCreatorWithoutStartPng(); |
| 147 void prepareMockCanvasAsyncBlobCreatorWithoutCompletePng(); | 151 void prepareMockCanvasAsyncBlobCreatorWithoutCompletePng(); |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 185 ImageData* imageData = ImageData::create(testSize); | 189 ImageData* imageData = ImageData::create(testSize); |
| 186 | 190 |
| 187 m_asyncBlobCreator = new MockCanvasAsyncBlobCreatorWithoutCompletePng( | 191 m_asyncBlobCreator = new MockCanvasAsyncBlobCreatorWithoutCompletePng( |
| 188 imageData->data(), testSize, document()); | 192 imageData->data(), testSize, document()); |
| 189 } | 193 } |
| 190 | 194 |
| 191 void CanvasAsyncBlobCreatorTest::prepareMockCanvasAsyncBlobCreatorFailPng() { | 195 void CanvasAsyncBlobCreatorTest::prepareMockCanvasAsyncBlobCreatorFailPng() { |
| 192 IntSize testSize(0, 0); | 196 IntSize testSize(0, 0); |
| 193 ImageData* imageData = ImageData::create(testSize); | 197 ImageData* imageData = ImageData::create(testSize); |
| 194 | 198 |
| 195 // We reuse the class MockCanvasAsyncBlobCreatorWithoutCompletePng because thi s | 199 // We reuse the class MockCanvasAsyncBlobCreatorWithoutCompletePng because |
| 200 // this | |
| 196 // test case is expected to fail at initialization step before completion. | 201 // test case is expected to fail at initialization step before completion. |
| 197 m_asyncBlobCreator = new MockCanvasAsyncBlobCreatorWithoutCompletePng( | 202 m_asyncBlobCreator = new MockCanvasAsyncBlobCreatorWithoutCompletePng( |
| 198 imageData->data(), testSize, document()); | 203 imageData->data(), testSize, document()); |
| 199 } | 204 } |
| 200 | 205 |
| 201 void CanvasAsyncBlobCreatorTest:: | 206 void CanvasAsyncBlobCreatorTest:: |
| 202 prepareMockCanvasAsyncBlobCreatorWithoutStartJpeg() { | 207 prepareMockCanvasAsyncBlobCreatorWithoutStartJpeg() { |
| 203 IntSize testSize(20, 20); | 208 IntSize testSize(20, 20); |
| 204 ImageData* imageData = ImageData::create(testSize); | 209 ImageData* imageData = ImageData::create(testSize); |
| 205 | 210 |
| 206 m_asyncBlobCreator = new MockCanvasAsyncBlobCreatorWithoutStartJpeg( | 211 m_asyncBlobCreator = new MockCanvasAsyncBlobCreatorWithoutStartJpeg( |
| 207 imageData->data(), testSize, document()); | 212 imageData->data(), testSize, document()); |
| 208 } | 213 } |
| 209 | 214 |
| 210 void CanvasAsyncBlobCreatorTest:: | 215 void CanvasAsyncBlobCreatorTest:: |
| 211 prepareMockCanvasAsyncBlobCreatorWithoutCompleteJpeg() { | 216 prepareMockCanvasAsyncBlobCreatorWithoutCompleteJpeg() { |
| 212 IntSize testSize(20, 20); | 217 IntSize testSize(20, 20); |
| 213 ImageData* imageData = ImageData::create(testSize); | 218 ImageData* imageData = ImageData::create(testSize); |
| 214 | 219 |
| 215 m_asyncBlobCreator = new MockCanvasAsyncBlobCreatorWithoutCompleteJpeg( | 220 m_asyncBlobCreator = new MockCanvasAsyncBlobCreatorWithoutCompleteJpeg( |
| 216 imageData->data(), testSize, document()); | 221 imageData->data(), testSize, document()); |
| 217 } | 222 } |
| 218 | 223 |
| 219 void CanvasAsyncBlobCreatorTest::prepareMockCanvasAsyncBlobCreatorFailJpeg() { | 224 void CanvasAsyncBlobCreatorTest::prepareMockCanvasAsyncBlobCreatorFailJpeg() { |
| 220 IntSize testSize(0, 0); | 225 IntSize testSize(0, 0); |
| 221 ImageData* imageData = ImageData::create(testSize); | 226 ImageData* imageData = ImageData::create(testSize); |
| 222 | 227 |
| 223 // We reuse the class MockCanvasAsyncBlobCreatorWithoutCompleteJpeg because th is | 228 // We reuse the class MockCanvasAsyncBlobCreatorWithoutCompleteJpeg because |
| 229 // this | |
|
Justin Novosad
2016/10/03 18:13:11
This one is weird
| |
| 224 // test case is expected to fail at initialization step before completion. | 230 // test case is expected to fail at initialization step before completion. |
| 225 m_asyncBlobCreator = new MockCanvasAsyncBlobCreatorWithoutCompleteJpeg( | 231 m_asyncBlobCreator = new MockCanvasAsyncBlobCreatorWithoutCompleteJpeg( |
| 226 imageData->data(), testSize, document()); | 232 imageData->data(), testSize, document()); |
| 227 } | 233 } |
| 228 | 234 |
| 229 void CanvasAsyncBlobCreatorTest::TearDown() { | 235 void CanvasAsyncBlobCreatorTest::TearDown() { |
| 230 m_asyncBlobCreator = nullptr; | 236 m_asyncBlobCreator = nullptr; |
| 231 } | 237 } |
| 232 | 238 |
| 233 //============================================================================== | 239 //============================================================================== |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 316 JpegIdleTaskFailedWhenStartTimeoutEventHappens) { | 322 JpegIdleTaskFailedWhenStartTimeoutEventHappens) { |
| 317 this->prepareMockCanvasAsyncBlobCreatorFailJpeg(); | 323 this->prepareMockCanvasAsyncBlobCreatorFailJpeg(); |
| 318 | 324 |
| 319 this->asyncBlobCreator()->scheduleAsyncBlobCreation(true, 1.0); | 325 this->asyncBlobCreator()->scheduleAsyncBlobCreation(true, 1.0); |
| 320 testing::enterRunLoop(); | 326 testing::enterRunLoop(); |
| 321 | 327 |
| 322 EXPECT_EQ(IdleTaskStatus::IdleTaskFailed, | 328 EXPECT_EQ(IdleTaskStatus::IdleTaskFailed, |
| 323 this->asyncBlobCreator()->idleTaskStatus()); | 329 this->asyncBlobCreator()->idleTaskStatus()); |
| 324 } | 330 } |
| 325 } | 331 } |
| OLD | NEW |