OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2013, Google Inc. All rights reserved. | 2 * Copyright (c) 2013, Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
6 * met: | 6 * met: |
7 * | 7 * |
8 * * Redistributions of source code must retain the above copyright | 8 * * 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 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
(...skipping 1107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1118 EXPECT_EQ(Resource::Pending, image->getStatus()); | 1118 EXPECT_EQ(Resource::Pending, image->getStatus()); |
1119 EXPECT_FALSE(image->isPlaceholder()); | 1119 EXPECT_FALSE(image->isPlaceholder()); |
1120 EXPECT_EQ(nullAtom, image->resourceRequest().httpHeaderField("range")); | 1120 EXPECT_EQ(nullAtom, image->resourceRequest().httpHeaderField("range")); |
1121 EXPECT_EQ(static_cast<int>(WebCachePolicy::UseProtocolCachePolicy), | 1121 EXPECT_EQ(static_cast<int>(WebCachePolicy::UseProtocolCachePolicy), |
1122 static_cast<int>(image->resourceRequest().getCachePolicy())); | 1122 static_cast<int>(image->resourceRequest().getCachePolicy())); |
1123 | 1123 |
1124 image->loader()->cancel(); | 1124 image->loader()->cancel(); |
1125 } | 1125 } |
1126 | 1126 |
1127 TEST(ImageResourceTest, PeriodicFlushTest) { | 1127 TEST(ImageResourceTest, PeriodicFlushTest) { |
1128 TestingPlatformSupportWithMockScheduler platform; | 1128 ScopedTestingPlatformSupport<TestingPlatformSupportWithMockScheduler> |
| 1129 platform(new TestingPlatformSupportWithMockScheduler); |
1129 KURL testURL(ParsedURLString, "http://www.test.com/cancelTest.html"); | 1130 KURL testURL(ParsedURLString, "http://www.test.com/cancelTest.html"); |
1130 URLTestHelpers::registerMockedURLLoad(testURL, "cancelTest.html", | 1131 URLTestHelpers::registerMockedURLLoad(testURL, "cancelTest.html", |
1131 "text/html"); | 1132 "text/html"); |
1132 ResourceRequest request = ResourceRequest(testURL); | 1133 ResourceRequest request = ResourceRequest(testURL); |
1133 ImageResource* cachedImage = ImageResource::create(request); | 1134 ImageResource* cachedImage = ImageResource::create(request); |
1134 cachedImage->setStatus(Resource::Pending); | 1135 cachedImage->setStatus(Resource::Pending); |
1135 | 1136 |
1136 Persistent<MockImageResourceClient> client = | 1137 Persistent<MockImageResourceClient> client = |
1137 new MockImageResourceClient(cachedImage); | 1138 new MockImageResourceClient(cachedImage); |
1138 | 1139 |
1139 // Send the image response. | 1140 // Send the image response. |
1140 ResourceResponse resourceResponse(KURL(), "image/jpeg", sizeof(kJpegImage2), | 1141 ResourceResponse resourceResponse(KURL(), "image/jpeg", sizeof(kJpegImage2), |
1141 nullAtom, String()); | 1142 nullAtom, String()); |
1142 resourceResponse.addHTTPHeaderField("chrome-proxy", "q=low"); | 1143 resourceResponse.addHTTPHeaderField("chrome-proxy", "q=low"); |
1143 | 1144 |
1144 cachedImage->responseReceived(resourceResponse, nullptr); | 1145 cachedImage->responseReceived(resourceResponse, nullptr); |
1145 | 1146 |
1146 // This is number is sufficiently large amount of bytes necessary for the | 1147 // This is number is sufficiently large amount of bytes necessary for the |
1147 // image to be created (since the size is known). This was determined by | 1148 // image to be created (since the size is known). This was determined by |
1148 // appending one byte at a time (with flushes) until the image was decoded. | 1149 // appending one byte at a time (with flushes) until the image was decoded. |
1149 size_t meaningfulImageSize = 280; | 1150 size_t meaningfulImageSize = 280; |
1150 cachedImage->appendData(reinterpret_cast<const char*>(kJpegImage2), | 1151 cachedImage->appendData(reinterpret_cast<const char*>(kJpegImage2), |
1151 meaningfulImageSize); | 1152 meaningfulImageSize); |
1152 size_t bytesSent = meaningfulImageSize; | 1153 size_t bytesSent = meaningfulImageSize; |
1153 | 1154 |
1154 EXPECT_FALSE(cachedImage->errorOccurred()); | 1155 EXPECT_FALSE(cachedImage->errorOccurred()); |
1155 EXPECT_TRUE(cachedImage->getContent()->hasImage()); | 1156 EXPECT_TRUE(cachedImage->getContent()->hasImage()); |
1156 EXPECT_EQ(1, client->imageChangedCount()); | 1157 EXPECT_EQ(1, client->imageChangedCount()); |
1157 | 1158 |
1158 platform.runForPeriodSeconds(1.); | 1159 platform->runForPeriodSeconds(1.); |
1159 platform.advanceClockSeconds(1.); | 1160 platform->advanceClockSeconds(1.); |
1160 | 1161 |
1161 // Sanity check that we created an image after appending |meaningfulImageSize| | 1162 // Sanity check that we created an image after appending |meaningfulImageSize| |
1162 // bytes just once. | 1163 // bytes just once. |
1163 EXPECT_FALSE(cachedImage->errorOccurred()); | 1164 EXPECT_FALSE(cachedImage->errorOccurred()); |
1164 ASSERT_TRUE(cachedImage->getContent()->hasImage()); | 1165 ASSERT_TRUE(cachedImage->getContent()->hasImage()); |
1165 EXPECT_EQ(1, client->imageChangedCount()); | 1166 EXPECT_EQ(1, client->imageChangedCount()); |
1166 | 1167 |
1167 for (int flushCount = 1; flushCount <= 3; ++flushCount) { | 1168 for (int flushCount = 1; flushCount <= 3; ++flushCount) { |
1168 // For each of the iteration that appends data, we don't expect | 1169 // For each of the iteration that appends data, we don't expect |
1169 // |imageChangeCount()| to change, since the time is adjusted by 0.2001 | 1170 // |imageChangeCount()| to change, since the time is adjusted by 0.2001 |
1170 // seconds (it's greater than 0.2 to avoid double precision problems). | 1171 // seconds (it's greater than 0.2 to avoid double precision problems). |
1171 // After 5 appends, we breach the flush interval and the flush count | 1172 // After 5 appends, we breach the flush interval and the flush count |
1172 // increases. | 1173 // increases. |
1173 for (int i = 0; i < 5; ++i) { | 1174 for (int i = 0; i < 5; ++i) { |
1174 SCOPED_TRACE(i); | 1175 SCOPED_TRACE(i); |
1175 cachedImage->appendData( | 1176 cachedImage->appendData( |
1176 reinterpret_cast<const char*>(kJpegImage2) + bytesSent, 1); | 1177 reinterpret_cast<const char*>(kJpegImage2) + bytesSent, 1); |
1177 | 1178 |
1178 EXPECT_FALSE(cachedImage->errorOccurred()); | 1179 EXPECT_FALSE(cachedImage->errorOccurred()); |
1179 ASSERT_TRUE(cachedImage->getContent()->hasImage()); | 1180 ASSERT_TRUE(cachedImage->getContent()->hasImage()); |
1180 EXPECT_EQ(flushCount, client->imageChangedCount()); | 1181 EXPECT_EQ(flushCount, client->imageChangedCount()); |
1181 | 1182 |
1182 ++bytesSent; | 1183 ++bytesSent; |
1183 platform.runForPeriodSeconds(0.2001); | 1184 platform->runForPeriodSeconds(0.2001); |
1184 } | 1185 } |
1185 } | 1186 } |
1186 | 1187 |
1187 // Increasing time by a large number only causes one extra flush. | 1188 // Increasing time by a large number only causes one extra flush. |
1188 platform.runForPeriodSeconds(10.); | 1189 platform->runForPeriodSeconds(10.); |
1189 platform.advanceClockSeconds(10.); | 1190 platform->advanceClockSeconds(10.); |
1190 EXPECT_FALSE(cachedImage->errorOccurred()); | 1191 EXPECT_FALSE(cachedImage->errorOccurred()); |
1191 ASSERT_TRUE(cachedImage->getContent()->hasImage()); | 1192 ASSERT_TRUE(cachedImage->getContent()->hasImage()); |
1192 EXPECT_FALSE(cachedImage->getContent()->getImage()->isNull()); | 1193 EXPECT_FALSE(cachedImage->getContent()->getImage()->isNull()); |
1193 EXPECT_EQ(4, client->imageChangedCount()); | 1194 EXPECT_EQ(4, client->imageChangedCount()); |
1194 | 1195 |
1195 // Append the rest of the data and finish (which causes another flush). | 1196 // Append the rest of the data and finish (which causes another flush). |
1196 cachedImage->appendData( | 1197 cachedImage->appendData( |
1197 reinterpret_cast<const char*>(kJpegImage2) + bytesSent, | 1198 reinterpret_cast<const char*>(kJpegImage2) + bytesSent, |
1198 sizeof(kJpegImage2) - bytesSent); | 1199 sizeof(kJpegImage2) - bytesSent); |
1199 cachedImage->finish(); | 1200 cachedImage->finish(); |
1200 | 1201 |
1201 EXPECT_FALSE(cachedImage->errorOccurred()); | 1202 EXPECT_FALSE(cachedImage->errorOccurred()); |
1202 ASSERT_TRUE(cachedImage->getContent()->hasImage()); | 1203 ASSERT_TRUE(cachedImage->getContent()->hasImage()); |
1203 EXPECT_FALSE(cachedImage->getContent()->getImage()->isNull()); | 1204 EXPECT_FALSE(cachedImage->getContent()->getImage()->isNull()); |
1204 EXPECT_EQ(5, client->imageChangedCount()); | 1205 EXPECT_EQ(5, client->imageChangedCount()); |
1205 EXPECT_TRUE(client->notifyFinishedCalled()); | 1206 EXPECT_TRUE(client->notifyFinishedCalled()); |
1206 EXPECT_TRUE(cachedImage->getContent()->getImage()->isBitmapImage()); | 1207 EXPECT_TRUE(cachedImage->getContent()->getImage()->isBitmapImage()); |
1207 EXPECT_EQ(50, cachedImage->getContent()->getImage()->width()); | 1208 EXPECT_EQ(50, cachedImage->getContent()->getImage()->width()); |
1208 EXPECT_EQ(50, cachedImage->getContent()->getImage()->height()); | 1209 EXPECT_EQ(50, cachedImage->getContent()->getImage()->height()); |
1209 | 1210 |
1210 WTF::setTimeFunctionsForTesting(nullptr); | 1211 WTF::setTimeFunctionsForTesting(nullptr); |
1211 } | 1212 } |
1212 | 1213 |
1213 } // namespace | 1214 } // namespace |
1214 } // namespace blink | 1215 } // namespace blink |
OLD | NEW |