| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (c) 2014, Google Inc. All rights reserved. | 2 * Copyright (c) 2014, 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 16 matching lines...) Expand all Loading... |
| 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| 29 */ | 29 */ |
| 30 | 30 |
| 31 #include "core/fetch/FetchContext.h" | 31 #include "core/fetch/FetchContext.h" |
| 32 #include "core/fetch/ImageResource.h" | 32 #include "core/fetch/ImageResource.h" |
| 33 #include "core/fetch/MemoryCache.h" | 33 #include "core/fetch/MemoryCache.h" |
| 34 #include "core/fetch/RawResource.h" | 34 #include "core/fetch/RawResource.h" |
| 35 #include "core/fetch/Resource.h" | 35 #include "core/fetch/Resource.h" |
| 36 #include "core/fetch/ResourceFetcher.h" | 36 #include "core/fetch/ResourceFetcher.h" |
| 37 #include "core/fetch/ResourcePtr.h" | |
| 38 #include "platform/network/ResourceRequest.h" | 37 #include "platform/network/ResourceRequest.h" |
| 39 #include "platform/testing/TestingPlatformSupport.h" | 38 #include "platform/testing/TestingPlatformSupport.h" |
| 40 #include "public/platform/Platform.h" | 39 #include "public/platform/Platform.h" |
| 41 #include "testing/gtest/include/gtest/gtest.h" | 40 #include "testing/gtest/include/gtest/gtest.h" |
| 42 #include "wtf/OwnPtr.h" | 41 #include "wtf/OwnPtr.h" |
| 43 #include "wtf/RefPtr.h" | 42 #include "wtf/RefPtr.h" |
| 44 | 43 |
| 45 namespace blink { | 44 namespace blink { |
| 46 | 45 |
| 47 // An URL for the original request. | 46 // An URL for the original request. |
| (...skipping 22 matching lines...) Expand all Loading... |
| 70 MockFetchContext() { } | 69 MockFetchContext() { } |
| 71 }; | 70 }; |
| 72 | 71 |
| 73 class CachingCorrectnessTest : public ::testing::Test { | 72 class CachingCorrectnessTest : public ::testing::Test { |
| 74 protected: | 73 protected: |
| 75 void advanceClock(double seconds) | 74 void advanceClock(double seconds) |
| 76 { | 75 { |
| 77 m_proxyPlatform.advanceClock(seconds); | 76 m_proxyPlatform.advanceClock(seconds); |
| 78 } | 77 } |
| 79 | 78 |
| 80 ResourcePtr<Resource> resourceFromResourceResponse(ResourceResponse response
, Resource::Type type = Resource::Raw) | 79 PassRefPtrWillBeRawPtr<Resource> resourceFromResourceResponse(ResourceRespon
se response, Resource::Type type = Resource::Raw) |
| 81 { | 80 { |
| 82 if (response.url().isNull()) | 81 if (response.url().isNull()) |
| 83 response.setURL(KURL(ParsedURLString, kResourceURL)); | 82 response.setURL(KURL(ParsedURLString, kResourceURL)); |
| 84 ResourcePtr<Resource> resource; | 83 RefPtrWillBeRawPtr<Resource> resource = nullptr; |
| 85 switch (type) { | 84 switch (type) { |
| 86 case Resource::Raw: | 85 case Resource::Raw: |
| 87 resource = new Resource(ResourceRequest(response.url()), type); | 86 resource = Resource::create(ResourceRequest(response.url()), type); |
| 88 break; | 87 break; |
| 89 case Resource::Image: | 88 case Resource::Image: |
| 90 resource = new ImageResource(ResourceRequest(response.url()), nullpt
r); | 89 resource = ImageResource::create(ResourceRequest(response.url()), nu
llptr); |
| 91 break; | 90 break; |
| 92 default: | 91 default: |
| 93 EXPECT_TRUE(false) << "'Unreachable' code was reached"; | 92 EXPECT_TRUE(false) << "'Unreachable' code was reached"; |
| 94 return nullptr; | 93 return nullptr; |
| 95 } | 94 } |
| 96 resource->setResponse(response); | 95 resource->setResponse(response); |
| 97 memoryCache()->add(resource.get()); | 96 memoryCache()->add(resource.get()); |
| 98 | 97 |
| 99 return resource; | 98 return resource; |
| 100 } | 99 } |
| 101 | 100 |
| 102 ResourcePtr<Resource> resourceFromResourceRequest(ResourceRequest request, R
esource::Type type = Resource::Raw) | 101 PassRefPtrWillBeRawPtr<Resource> resourceFromResourceRequest(ResourceRequest
request, Resource::Type type = Resource::Raw) |
| 103 { | 102 { |
| 104 if (request.url().isNull()) | 103 if (request.url().isNull()) |
| 105 request.setURL(KURL(ParsedURLString, kResourceURL)); | 104 request.setURL(KURL(ParsedURLString, kResourceURL)); |
| 106 ResourcePtr<Resource> resource = | 105 RefPtrWillBeRawPtr<Resource> resource = |
| 107 new Resource(request, type); | 106 Resource::create(request, type); |
| 108 resource->setResponse(ResourceResponse(KURL(ParsedURLString, kResourceUR
L), "text/html", 0, nullAtom, String())); | 107 resource->setResponse(ResourceResponse(KURL(ParsedURLString, kResourceUR
L), "text/html", 0, nullAtom, String())); |
| 109 memoryCache()->add(resource.get()); | 108 memoryCache()->add(resource.get()); |
| 110 | 109 |
| 111 return resource; | 110 return resource; |
| 112 } | 111 } |
| 113 | 112 |
| 114 ResourcePtr<Resource> fetch() | 113 PassRefPtrWillBeRawPtr<Resource> fetch() |
| 115 { | 114 { |
| 116 FetchRequest fetchRequest(ResourceRequest(KURL(ParsedURLString, kResourc
eURL)), FetchInitiatorInfo()); | 115 FetchRequest fetchRequest(ResourceRequest(KURL(ParsedURLString, kResourc
eURL)), FetchInitiatorInfo()); |
| 117 return RawResource::fetchSynchronously(fetchRequest, fetcher()); | 116 return RawResource::fetchSynchronously(fetchRequest, fetcher()); |
| 118 } | 117 } |
| 119 | 118 |
| 120 ResourcePtr<Resource> fetchImage() | 119 PassRefPtrWillBeRawPtr<Resource> fetchImage() |
| 121 { | 120 { |
| 122 FetchRequest fetchRequest(ResourceRequest(KURL(ParsedURLString, kResourc
eURL)), FetchInitiatorInfo()); | 121 FetchRequest fetchRequest(ResourceRequest(KURL(ParsedURLString, kResourc
eURL)), FetchInitiatorInfo()); |
| 123 return ImageResource::fetch(fetchRequest, fetcher()); | 122 return ImageResource::fetch(fetchRequest, fetcher()); |
| 124 } | 123 } |
| 125 | 124 |
| 126 ResourceFetcher* fetcher() const { return m_fetcher.get(); } | 125 ResourceFetcher* fetcher() const { return m_fetcher.get(); } |
| 127 | 126 |
| 128 private: | 127 private: |
| 129 // A simple platform that mocks out the clock, for cache freshness testing. | 128 // A simple platform that mocks out the clock, for cache freshness testing. |
| 130 class ProxyPlatform : public TestingPlatformSupport { | 129 class ProxyPlatform : public TestingPlatformSupport { |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 168 Persistent<ResourceFetcher> m_fetcher; | 167 Persistent<ResourceFetcher> m_fetcher; |
| 169 }; | 168 }; |
| 170 | 169 |
| 171 TEST_F(CachingCorrectnessTest, FreshFromLastModified) | 170 TEST_F(CachingCorrectnessTest, FreshFromLastModified) |
| 172 { | 171 { |
| 173 ResourceResponse fresh200Response; | 172 ResourceResponse fresh200Response; |
| 174 fresh200Response.setHTTPStatusCode(200); | 173 fresh200Response.setHTTPStatusCode(200); |
| 175 fresh200Response.setHTTPHeaderField("Date", kOriginalRequestDateAsString); | 174 fresh200Response.setHTTPHeaderField("Date", kOriginalRequestDateAsString); |
| 176 fresh200Response.setHTTPHeaderField("Last-Modified", kOneDayBeforeOriginalRe
quest); | 175 fresh200Response.setHTTPHeaderField("Last-Modified", kOneDayBeforeOriginalRe
quest); |
| 177 | 176 |
| 178 ResourcePtr<Resource> fresh200 = resourceFromResourceResponse(fresh200Respon
se); | 177 RefPtrWillBeRawPtr<Resource> fresh200 = resourceFromResourceResponse(fresh20
0Response); |
| 179 | 178 |
| 180 // Advance the clock within the implicit freshness period of this resource b
efore we make a request. | 179 // Advance the clock within the implicit freshness period of this resource b
efore we make a request. |
| 181 advanceClock(600.); | 180 advanceClock(600.); |
| 182 | 181 |
| 183 ResourcePtr<Resource> fetched = fetch(); | 182 RefPtrWillBeRawPtr<Resource> fetched = fetch(); |
| 184 EXPECT_EQ(fresh200, fetched); | 183 EXPECT_EQ(fresh200, fetched); |
| 185 } | 184 } |
| 186 | 185 |
| 187 TEST_F(CachingCorrectnessTest, FreshFromExpires) | 186 TEST_F(CachingCorrectnessTest, FreshFromExpires) |
| 188 { | 187 { |
| 189 ResourceResponse fresh200Response; | 188 ResourceResponse fresh200Response; |
| 190 fresh200Response.setHTTPStatusCode(200); | 189 fresh200Response.setHTTPStatusCode(200); |
| 191 fresh200Response.setHTTPHeaderField("Date", kOriginalRequestDateAsString); | 190 fresh200Response.setHTTPHeaderField("Date", kOriginalRequestDateAsString); |
| 192 fresh200Response.setHTTPHeaderField("Expires", kOneDayAfterOriginalRequest); | 191 fresh200Response.setHTTPHeaderField("Expires", kOneDayAfterOriginalRequest); |
| 193 | 192 |
| 194 ResourcePtr<Resource> fresh200 = resourceFromResourceResponse(fresh200Respon
se); | 193 RefPtrWillBeRawPtr<Resource> fresh200 = resourceFromResourceResponse(fresh20
0Response); |
| 195 | 194 |
| 196 // Advance the clock within the freshness period of this resource before we
make a request. | 195 // Advance the clock within the freshness period of this resource before we
make a request. |
| 197 advanceClock(24. * 60. * 60. - 15.); | 196 advanceClock(24. * 60. * 60. - 15.); |
| 198 | 197 |
| 199 ResourcePtr<Resource> fetched = fetch(); | 198 RefPtrWillBeRawPtr<Resource> fetched = fetch(); |
| 200 EXPECT_EQ(fresh200, fetched); | 199 EXPECT_EQ(fresh200, fetched); |
| 201 } | 200 } |
| 202 | 201 |
| 203 TEST_F(CachingCorrectnessTest, FreshFromMaxAge) | 202 TEST_F(CachingCorrectnessTest, FreshFromMaxAge) |
| 204 { | 203 { |
| 205 ResourceResponse fresh200Response; | 204 ResourceResponse fresh200Response; |
| 206 fresh200Response.setHTTPStatusCode(200); | 205 fresh200Response.setHTTPStatusCode(200); |
| 207 fresh200Response.setHTTPHeaderField("Date", kOriginalRequestDateAsString); | 206 fresh200Response.setHTTPHeaderField("Date", kOriginalRequestDateAsString); |
| 208 fresh200Response.setHTTPHeaderField("Cache-Control", "max-age=600"); | 207 fresh200Response.setHTTPHeaderField("Cache-Control", "max-age=600"); |
| 209 | 208 |
| 210 ResourcePtr<Resource> fresh200 = resourceFromResourceResponse(fresh200Respon
se); | 209 RefPtrWillBeRawPtr<Resource> fresh200 = resourceFromResourceResponse(fresh20
0Response); |
| 211 | 210 |
| 212 // Advance the clock within the freshness period of this resource before we
make a request. | 211 // Advance the clock within the freshness period of this resource before we
make a request. |
| 213 advanceClock(500.); | 212 advanceClock(500.); |
| 214 | 213 |
| 215 ResourcePtr<Resource> fetched = fetch(); | 214 RefPtrWillBeRawPtr<Resource> fetched = fetch(); |
| 216 EXPECT_EQ(fresh200, fetched); | 215 EXPECT_EQ(fresh200, fetched); |
| 217 } | 216 } |
| 218 | 217 |
| 219 // The strong validator causes a revalidation to be launched, and the proxy and
original resources leak because of their reference loop. | 218 // The strong validator causes a revalidation to be launched, and the proxy and
original resources leak because of their reference loop. |
| 220 TEST_F(CachingCorrectnessTest, DISABLED_ExpiredFromLastModified) | 219 TEST_F(CachingCorrectnessTest, DISABLED_ExpiredFromLastModified) |
| 221 { | 220 { |
| 222 ResourceResponse expired200Response; | 221 ResourceResponse expired200Response; |
| 223 expired200Response.setHTTPStatusCode(200); | 222 expired200Response.setHTTPStatusCode(200); |
| 224 expired200Response.setHTTPHeaderField("Date", kOriginalRequestDateAsString); | 223 expired200Response.setHTTPHeaderField("Date", kOriginalRequestDateAsString); |
| 225 expired200Response.setHTTPHeaderField("Last-Modified", kOneDayBeforeOriginal
Request); | 224 expired200Response.setHTTPHeaderField("Last-Modified", kOneDayBeforeOriginal
Request); |
| 226 | 225 |
| 227 ResourcePtr<Resource> expired200 = resourceFromResourceResponse(expired200Re
sponse); | 226 RefPtrWillBeRawPtr<Resource> expired200 = resourceFromResourceResponse(expir
ed200Response); |
| 228 | 227 |
| 229 // Advance the clock beyond the implicit freshness period. | 228 // Advance the clock beyond the implicit freshness period. |
| 230 advanceClock(24. * 60. * 60. * 0.2); | 229 advanceClock(24. * 60. * 60. * 0.2); |
| 231 | 230 |
| 232 ResourcePtr<Resource> fetched = fetch(); | 231 RefPtrWillBeRawPtr<Resource> fetched = fetch(); |
| 233 EXPECT_NE(expired200, fetched); | 232 EXPECT_NE(expired200, fetched); |
| 234 } | 233 } |
| 235 | 234 |
| 236 TEST_F(CachingCorrectnessTest, ExpiredFromExpires) | 235 TEST_F(CachingCorrectnessTest, ExpiredFromExpires) |
| 237 { | 236 { |
| 238 ResourceResponse expired200Response; | 237 ResourceResponse expired200Response; |
| 239 expired200Response.setHTTPStatusCode(200); | 238 expired200Response.setHTTPStatusCode(200); |
| 240 expired200Response.setHTTPHeaderField("Date", kOriginalRequestDateAsString); | 239 expired200Response.setHTTPHeaderField("Date", kOriginalRequestDateAsString); |
| 241 expired200Response.setHTTPHeaderField("Expires", kOneDayAfterOriginalRequest
); | 240 expired200Response.setHTTPHeaderField("Expires", kOneDayAfterOriginalRequest
); |
| 242 | 241 |
| 243 ResourcePtr<Resource> expired200 = resourceFromResourceResponse(expired200Re
sponse); | 242 RefPtrWillBeRawPtr<Resource> expired200 = resourceFromResourceResponse(expir
ed200Response); |
| 244 | 243 |
| 245 // Advance the clock within the expiredness period of this resource before w
e make a request. | 244 // Advance the clock within the expiredness period of this resource before w
e make a request. |
| 246 advanceClock(24. * 60. * 60. + 15.); | 245 advanceClock(24. * 60. * 60. + 15.); |
| 247 | 246 |
| 248 ResourcePtr<Resource> fetched = fetch(); | 247 RefPtrWillBeRawPtr<Resource> fetched = fetch(); |
| 249 EXPECT_NE(expired200, fetched); | 248 EXPECT_NE(expired200, fetched); |
| 250 } | 249 } |
| 251 | 250 |
| 252 // If the image hasn't been loaded in this "document" before, then it shouldn't
have list of available images logic. | 251 // If the image hasn't been loaded in this "document" before, then it shouldn't
have list of available images logic. |
| 253 TEST_F(CachingCorrectnessTest, NewImageExpiredFromExpires) | 252 TEST_F(CachingCorrectnessTest, NewImageExpiredFromExpires) |
| 254 { | 253 { |
| 255 ResourceResponse expired200Response; | 254 ResourceResponse expired200Response; |
| 256 expired200Response.setHTTPStatusCode(200); | 255 expired200Response.setHTTPStatusCode(200); |
| 257 expired200Response.setHTTPHeaderField("Date", kOriginalRequestDateAsString); | 256 expired200Response.setHTTPHeaderField("Date", kOriginalRequestDateAsString); |
| 258 expired200Response.setHTTPHeaderField("Expires", kOneDayAfterOriginalRequest
); | 257 expired200Response.setHTTPHeaderField("Expires", kOneDayAfterOriginalRequest
); |
| 259 | 258 |
| 260 ResourcePtr<Resource> expired200 = resourceFromResourceResponse(expired200Re
sponse, Resource::Image); | 259 RefPtrWillBeRawPtr<Resource> expired200 = resourceFromResourceResponse(expir
ed200Response, Resource::Image); |
| 261 | 260 |
| 262 // Advance the clock within the expiredness period of this resource before w
e make a request. | 261 // Advance the clock within the expiredness period of this resource before w
e make a request. |
| 263 advanceClock(24. * 60. * 60. + 15.); | 262 advanceClock(24. * 60. * 60. + 15.); |
| 264 | 263 |
| 265 ResourcePtr<Resource> fetched = fetchImage(); | 264 RefPtrWillBeRawPtr<Resource> fetched = fetchImage(); |
| 266 EXPECT_NE(expired200, fetched); | 265 EXPECT_NE(expired200, fetched); |
| 267 } | 266 } |
| 268 | 267 |
| 269 // If the image has been loaded in this "document" before, then it should have l
ist of available images logic, and so | 268 // If the image has been loaded in this "document" before, then it should have l
ist of available images logic, and so |
| 270 // normal cache testing should be bypassed. | 269 // normal cache testing should be bypassed. |
| 271 TEST_F(CachingCorrectnessTest, ReuseImageExpiredFromExpires) | 270 TEST_F(CachingCorrectnessTest, ReuseImageExpiredFromExpires) |
| 272 { | 271 { |
| 273 ResourceResponse expired200Response; | 272 ResourceResponse expired200Response; |
| 274 expired200Response.setHTTPStatusCode(200); | 273 expired200Response.setHTTPStatusCode(200); |
| 275 expired200Response.setHTTPHeaderField("Date", kOriginalRequestDateAsString); | 274 expired200Response.setHTTPHeaderField("Date", kOriginalRequestDateAsString); |
| 276 expired200Response.setHTTPHeaderField("Expires", kOneDayAfterOriginalRequest
); | 275 expired200Response.setHTTPHeaderField("Expires", kOneDayAfterOriginalRequest
); |
| 277 | 276 |
| 278 ResourcePtr<Resource> expired200 = resourceFromResourceResponse(expired200Re
sponse, Resource::Image); | 277 RefPtrWillBeRawPtr<Resource> expired200 = resourceFromResourceResponse(expir
ed200Response, Resource::Image); |
| 279 | 278 |
| 280 // Advance the clock within the freshness period, and make a request to add
this image to the document resources. | 279 // Advance the clock within the freshness period, and make a request to add
this image to the document resources. |
| 281 advanceClock(15.); | 280 advanceClock(15.); |
| 282 ResourcePtr<Resource> firstFetched = fetchImage(); | 281 RefPtrWillBeRawPtr<Resource> firstFetched = fetchImage(); |
| 283 EXPECT_EQ(expired200, firstFetched); | 282 EXPECT_EQ(expired200, firstFetched); |
| 284 | 283 |
| 285 // Advance the clock within the expiredness period of this resource before w
e make a request. | 284 // Advance the clock within the expiredness period of this resource before w
e make a request. |
| 286 advanceClock(24. * 60. * 60. + 15.); | 285 advanceClock(24. * 60. * 60. + 15.); |
| 287 | 286 |
| 288 ResourcePtr<Resource> fetched = fetchImage(); | 287 RefPtrWillBeRawPtr<Resource> fetched = fetchImage(); |
| 289 EXPECT_EQ(expired200, fetched); | 288 EXPECT_EQ(expired200, fetched); |
| 290 } | 289 } |
| 291 | 290 |
| 292 TEST_F(CachingCorrectnessTest, ExpiredFromMaxAge) | 291 TEST_F(CachingCorrectnessTest, ExpiredFromMaxAge) |
| 293 { | 292 { |
| 294 ResourceResponse expired200Response; | 293 ResourceResponse expired200Response; |
| 295 expired200Response.setHTTPStatusCode(200); | 294 expired200Response.setHTTPStatusCode(200); |
| 296 expired200Response.setHTTPHeaderField("Date", kOriginalRequestDateAsString); | 295 expired200Response.setHTTPHeaderField("Date", kOriginalRequestDateAsString); |
| 297 expired200Response.setHTTPHeaderField("Cache-Control", "max-age=600"); | 296 expired200Response.setHTTPHeaderField("Cache-Control", "max-age=600"); |
| 298 | 297 |
| 299 ResourcePtr<Resource> expired200 = resourceFromResourceResponse(expired200Re
sponse); | 298 RefPtrWillBeRawPtr<Resource> expired200 = resourceFromResourceResponse(expir
ed200Response); |
| 300 | 299 |
| 301 // Advance the clock within the expiredness period of this resource before w
e make a request. | 300 // Advance the clock within the expiredness period of this resource before w
e make a request. |
| 302 advanceClock(700.); | 301 advanceClock(700.); |
| 303 | 302 |
| 304 ResourcePtr<Resource> fetched = fetch(); | 303 RefPtrWillBeRawPtr<Resource> fetched = fetch(); |
| 305 EXPECT_NE(expired200, fetched); | 304 EXPECT_NE(expired200, fetched); |
| 306 } | 305 } |
| 307 | 306 |
| 308 TEST_F(CachingCorrectnessTest, FreshButNoCache) | 307 TEST_F(CachingCorrectnessTest, FreshButNoCache) |
| 309 { | 308 { |
| 310 ResourceResponse fresh200NocacheResponse; | 309 ResourceResponse fresh200NocacheResponse; |
| 311 fresh200NocacheResponse.setHTTPStatusCode(200); | 310 fresh200NocacheResponse.setHTTPStatusCode(200); |
| 312 fresh200NocacheResponse.setHTTPHeaderField(HTTPNames::Date, kOriginalRequest
DateAsString); | 311 fresh200NocacheResponse.setHTTPHeaderField(HTTPNames::Date, kOriginalRequest
DateAsString); |
| 313 fresh200NocacheResponse.setHTTPHeaderField(HTTPNames::Expires, kOneDayAfterO
riginalRequest); | 312 fresh200NocacheResponse.setHTTPHeaderField(HTTPNames::Expires, kOneDayAfterO
riginalRequest); |
| 314 fresh200NocacheResponse.setHTTPHeaderField(HTTPNames::Cache_Control, "no-cac
he"); | 313 fresh200NocacheResponse.setHTTPHeaderField(HTTPNames::Cache_Control, "no-cac
he"); |
| 315 | 314 |
| 316 ResourcePtr<Resource> fresh200Nocache = resourceFromResourceResponse(fresh20
0NocacheResponse); | 315 RefPtrWillBeRawPtr<Resource> fresh200Nocache = resourceFromResourceResponse(
fresh200NocacheResponse); |
| 317 | 316 |
| 318 // Advance the clock within the freshness period of this resource before we
make a request. | 317 // Advance the clock within the freshness period of this resource before we
make a request. |
| 319 advanceClock(24. * 60. * 60. - 15.); | 318 advanceClock(24. * 60. * 60. - 15.); |
| 320 | 319 |
| 321 ResourcePtr<Resource> fetched = fetch(); | 320 RefPtrWillBeRawPtr<Resource> fetched = fetch(); |
| 322 EXPECT_NE(fresh200Nocache, fetched); | 321 EXPECT_NE(fresh200Nocache, fetched); |
| 323 } | 322 } |
| 324 | 323 |
| 325 TEST_F(CachingCorrectnessTest, RequestWithNoCahe) | 324 TEST_F(CachingCorrectnessTest, RequestWithNoCahe) |
| 326 { | 325 { |
| 327 ResourceRequest noCacheRequest; | 326 ResourceRequest noCacheRequest; |
| 328 noCacheRequest.setHTTPHeaderField(HTTPNames::Cache_Control, "no-cache"); | 327 noCacheRequest.setHTTPHeaderField(HTTPNames::Cache_Control, "no-cache"); |
| 329 ResourcePtr<Resource> noCacheResource = resourceFromResourceRequest(noCacheR
equest); | 328 RefPtrWillBeRawPtr<Resource> noCacheResource = resourceFromResourceRequest(n
oCacheRequest); |
| 330 ResourcePtr<Resource> fetched = fetch(); | 329 RefPtrWillBeRawPtr<Resource> fetched = fetch(); |
| 331 EXPECT_NE(noCacheResource, fetched); | 330 EXPECT_NE(noCacheResource, fetched); |
| 332 } | 331 } |
| 333 | 332 |
| 334 TEST_F(CachingCorrectnessTest, FreshButNoStore) | 333 TEST_F(CachingCorrectnessTest, FreshButNoStore) |
| 335 { | 334 { |
| 336 ResourceResponse fresh200NostoreResponse; | 335 ResourceResponse fresh200NostoreResponse; |
| 337 fresh200NostoreResponse.setHTTPStatusCode(200); | 336 fresh200NostoreResponse.setHTTPStatusCode(200); |
| 338 fresh200NostoreResponse.setHTTPHeaderField(HTTPNames::Date, kOriginalRequest
DateAsString); | 337 fresh200NostoreResponse.setHTTPHeaderField(HTTPNames::Date, kOriginalRequest
DateAsString); |
| 339 fresh200NostoreResponse.setHTTPHeaderField(HTTPNames::Expires, kOneDayAfterO
riginalRequest); | 338 fresh200NostoreResponse.setHTTPHeaderField(HTTPNames::Expires, kOneDayAfterO
riginalRequest); |
| 340 fresh200NostoreResponse.setHTTPHeaderField(HTTPNames::Cache_Control, "no-sto
re"); | 339 fresh200NostoreResponse.setHTTPHeaderField(HTTPNames::Cache_Control, "no-sto
re"); |
| 341 | 340 |
| 342 ResourcePtr<Resource> fresh200Nostore = resourceFromResourceResponse(fresh20
0NostoreResponse); | 341 RefPtrWillBeRawPtr<Resource> fresh200Nostore = resourceFromResourceResponse(
fresh200NostoreResponse); |
| 343 | 342 |
| 344 // Advance the clock within the freshness period of this resource before we
make a request. | 343 // Advance the clock within the freshness period of this resource before we
make a request. |
| 345 advanceClock(24. * 60. * 60. - 15.); | 344 advanceClock(24. * 60. * 60. - 15.); |
| 346 | 345 |
| 347 ResourcePtr<Resource> fetched = fetch(); | 346 RefPtrWillBeRawPtr<Resource> fetched = fetch(); |
| 348 EXPECT_NE(fresh200Nostore, fetched); | 347 EXPECT_NE(fresh200Nostore, fetched); |
| 349 } | 348 } |
| 350 | 349 |
| 351 TEST_F(CachingCorrectnessTest, RequestWithNoStore) | 350 TEST_F(CachingCorrectnessTest, RequestWithNoStore) |
| 352 { | 351 { |
| 353 ResourceRequest noStoreRequest; | 352 ResourceRequest noStoreRequest; |
| 354 noStoreRequest.setHTTPHeaderField(HTTPNames::Cache_Control, "no-store"); | 353 noStoreRequest.setHTTPHeaderField(HTTPNames::Cache_Control, "no-store"); |
| 355 ResourcePtr<Resource> noStoreResource = resourceFromResourceRequest(noStoreR
equest); | 354 RefPtrWillBeRawPtr<Resource> noStoreResource = resourceFromResourceRequest(n
oStoreRequest); |
| 356 ResourcePtr<Resource> fetched = fetch(); | 355 RefPtrWillBeRawPtr<Resource> fetched = fetch(); |
| 357 EXPECT_NE(noStoreResource, fetched); | 356 EXPECT_NE(noStoreResource, fetched); |
| 358 } | 357 } |
| 359 | 358 |
| 360 // FIXME: Determine if ignoring must-revalidate for blink is correct behaviour. | 359 // FIXME: Determine if ignoring must-revalidate for blink is correct behaviour. |
| 361 // See crbug.com/340088 . | 360 // See crbug.com/340088 . |
| 362 TEST_F(CachingCorrectnessTest, DISABLED_FreshButMustRevalidate) | 361 TEST_F(CachingCorrectnessTest, DISABLED_FreshButMustRevalidate) |
| 363 { | 362 { |
| 364 ResourceResponse fresh200MustRevalidateResponse; | 363 ResourceResponse fresh200MustRevalidateResponse; |
| 365 fresh200MustRevalidateResponse.setHTTPStatusCode(200); | 364 fresh200MustRevalidateResponse.setHTTPStatusCode(200); |
| 366 fresh200MustRevalidateResponse.setHTTPHeaderField(HTTPNames::Date, kOriginal
RequestDateAsString); | 365 fresh200MustRevalidateResponse.setHTTPHeaderField(HTTPNames::Date, kOriginal
RequestDateAsString); |
| 367 fresh200MustRevalidateResponse.setHTTPHeaderField(HTTPNames::Expires, kOneDa
yAfterOriginalRequest); | 366 fresh200MustRevalidateResponse.setHTTPHeaderField(HTTPNames::Expires, kOneDa
yAfterOriginalRequest); |
| 368 fresh200MustRevalidateResponse.setHTTPHeaderField(HTTPNames::Cache_Control,
"must-revalidate"); | 367 fresh200MustRevalidateResponse.setHTTPHeaderField(HTTPNames::Cache_Control,
"must-revalidate"); |
| 369 | 368 |
| 370 ResourcePtr<Resource> fresh200MustRevalidate = resourceFromResourceResponse(
fresh200MustRevalidateResponse); | 369 RefPtrWillBeRawPtr<Resource> fresh200MustRevalidate = resourceFromResourceRe
sponse(fresh200MustRevalidateResponse); |
| 371 | 370 |
| 372 // Advance the clock within the freshness period of this resource before we
make a request. | 371 // Advance the clock within the freshness period of this resource before we
make a request. |
| 373 advanceClock(24. * 60. * 60. - 15.); | 372 advanceClock(24. * 60. * 60. - 15.); |
| 374 | 373 |
| 375 ResourcePtr<Resource> fetched = fetch(); | 374 RefPtrWillBeRawPtr<Resource> fetched = fetch(); |
| 376 EXPECT_NE(fresh200MustRevalidate, fetched); | 375 EXPECT_NE(fresh200MustRevalidate, fetched); |
| 377 } | 376 } |
| 378 | 377 |
| 379 TEST_F(CachingCorrectnessTest, FreshWithFreshRedirect) | 378 TEST_F(CachingCorrectnessTest, FreshWithFreshRedirect) |
| 380 { | 379 { |
| 381 KURL redirectUrl(ParsedURLString, kResourceURL); | 380 KURL redirectUrl(ParsedURLString, kResourceURL); |
| 382 const char redirectTargetUrlString[] = "http://redirect-target.com"; | 381 const char redirectTargetUrlString[] = "http://redirect-target.com"; |
| 383 KURL redirectTargetUrl(ParsedURLString, redirectTargetUrlString); | 382 KURL redirectTargetUrl(ParsedURLString, redirectTargetUrlString); |
| 384 | 383 |
| 385 ResourcePtr<Resource> firstResource = new Resource(ResourceRequest(redirectU
rl), Resource::Raw); | 384 RefPtrWillBeRawPtr<Resource> firstResource = Resource::create(ResourceReques
t(redirectUrl), Resource::Raw); |
| 386 | 385 |
| 387 ResourceResponse fresh301Response; | 386 ResourceResponse fresh301Response; |
| 388 fresh301Response.setURL(redirectUrl); | 387 fresh301Response.setURL(redirectUrl); |
| 389 fresh301Response.setHTTPStatusCode(301); | 388 fresh301Response.setHTTPStatusCode(301); |
| 390 fresh301Response.setHTTPHeaderField(HTTPNames::Date, kOriginalRequestDateAsS
tring); | 389 fresh301Response.setHTTPHeaderField(HTTPNames::Date, kOriginalRequestDateAsS
tring); |
| 391 fresh301Response.setHTTPHeaderField(HTTPNames::Location, redirectTargetUrlSt
ring); | 390 fresh301Response.setHTTPHeaderField(HTTPNames::Location, redirectTargetUrlSt
ring); |
| 392 fresh301Response.setHTTPHeaderField(HTTPNames::Cache_Control, "max-age=600")
; | 391 fresh301Response.setHTTPHeaderField(HTTPNames::Cache_Control, "max-age=600")
; |
| 393 | 392 |
| 394 // Add the redirect to our request. | 393 // Add the redirect to our request. |
| 395 ResourceRequest redirectRequest = ResourceRequest(redirectTargetUrl); | 394 ResourceRequest redirectRequest = ResourceRequest(redirectTargetUrl); |
| 396 firstResource->willFollowRedirect(redirectRequest, fresh301Response); | 395 firstResource->willFollowRedirect(redirectRequest, fresh301Response); |
| 397 | 396 |
| 398 // Add the final response to our request. | 397 // Add the final response to our request. |
| 399 ResourceResponse fresh200Response; | 398 ResourceResponse fresh200Response; |
| 400 fresh200Response.setURL(redirectTargetUrl); | 399 fresh200Response.setURL(redirectTargetUrl); |
| 401 fresh200Response.setHTTPStatusCode(200); | 400 fresh200Response.setHTTPStatusCode(200); |
| 402 fresh200Response.setHTTPHeaderField(HTTPNames::Date, kOriginalRequestDateAsS
tring); | 401 fresh200Response.setHTTPHeaderField(HTTPNames::Date, kOriginalRequestDateAsS
tring); |
| 403 fresh200Response.setHTTPHeaderField(HTTPNames::Expires, kOneDayAfterOriginal
Request); | 402 fresh200Response.setHTTPHeaderField(HTTPNames::Expires, kOneDayAfterOriginal
Request); |
| 404 | 403 |
| 405 firstResource->setResponse(fresh200Response); | 404 firstResource->setResponse(fresh200Response); |
| 406 memoryCache()->add(firstResource.get()); | 405 memoryCache()->add(firstResource.get()); |
| 407 | 406 |
| 408 advanceClock(500.); | 407 advanceClock(500.); |
| 409 | 408 |
| 410 ResourcePtr<Resource> fetched = fetch(); | 409 RefPtrWillBeRawPtr<Resource> fetched = fetch(); |
| 411 EXPECT_EQ(firstResource, fetched); | 410 EXPECT_EQ(firstResource, fetched); |
| 412 } | 411 } |
| 413 | 412 |
| 414 TEST_F(CachingCorrectnessTest, FreshWithStaleRedirect) | 413 TEST_F(CachingCorrectnessTest, FreshWithStaleRedirect) |
| 415 { | 414 { |
| 416 KURL redirectUrl(ParsedURLString, kResourceURL); | 415 KURL redirectUrl(ParsedURLString, kResourceURL); |
| 417 const char redirectTargetUrlString[] = "http://redirect-target.com"; | 416 const char redirectTargetUrlString[] = "http://redirect-target.com"; |
| 418 KURL redirectTargetUrl(ParsedURLString, redirectTargetUrlString); | 417 KURL redirectTargetUrl(ParsedURLString, redirectTargetUrlString); |
| 419 | 418 |
| 420 ResourcePtr<Resource> firstResource = new Resource(ResourceRequest(redirectU
rl), Resource::Raw); | 419 RefPtrWillBeRawPtr<Resource> firstResource = Resource::create(ResourceReques
t(redirectUrl), Resource::Raw); |
| 421 | 420 |
| 422 ResourceResponse stale301Response; | 421 ResourceResponse stale301Response; |
| 423 stale301Response.setURL(redirectUrl); | 422 stale301Response.setURL(redirectUrl); |
| 424 stale301Response.setHTTPStatusCode(301); | 423 stale301Response.setHTTPStatusCode(301); |
| 425 stale301Response.setHTTPHeaderField(HTTPNames::Date, kOriginalRequestDateAsS
tring); | 424 stale301Response.setHTTPHeaderField(HTTPNames::Date, kOriginalRequestDateAsS
tring); |
| 426 stale301Response.setHTTPHeaderField(HTTPNames::Location, redirectTargetUrlSt
ring); | 425 stale301Response.setHTTPHeaderField(HTTPNames::Location, redirectTargetUrlSt
ring); |
| 427 | 426 |
| 428 // Add the redirect to our request. | 427 // Add the redirect to our request. |
| 429 ResourceRequest redirectRequest = ResourceRequest(redirectTargetUrl); | 428 ResourceRequest redirectRequest = ResourceRequest(redirectTargetUrl); |
| 430 firstResource->willFollowRedirect(redirectRequest, stale301Response); | 429 firstResource->willFollowRedirect(redirectRequest, stale301Response); |
| 431 | 430 |
| 432 // Add the final response to our request. | 431 // Add the final response to our request. |
| 433 ResourceResponse fresh200Response; | 432 ResourceResponse fresh200Response; |
| 434 fresh200Response.setURL(redirectTargetUrl); | 433 fresh200Response.setURL(redirectTargetUrl); |
| 435 fresh200Response.setHTTPStatusCode(200); | 434 fresh200Response.setHTTPStatusCode(200); |
| 436 fresh200Response.setHTTPHeaderField(HTTPNames::Date, kOriginalRequestDateAsS
tring); | 435 fresh200Response.setHTTPHeaderField(HTTPNames::Date, kOriginalRequestDateAsS
tring); |
| 437 fresh200Response.setHTTPHeaderField(HTTPNames::Expires, kOneDayAfterOriginal
Request); | 436 fresh200Response.setHTTPHeaderField(HTTPNames::Expires, kOneDayAfterOriginal
Request); |
| 438 | 437 |
| 439 firstResource->setResponse(fresh200Response); | 438 firstResource->setResponse(fresh200Response); |
| 440 memoryCache()->add(firstResource.get()); | 439 memoryCache()->add(firstResource.get()); |
| 441 | 440 |
| 442 advanceClock(500.); | 441 advanceClock(500.); |
| 443 | 442 |
| 444 ResourcePtr<Resource> fetched = fetch(); | 443 RefPtrWillBeRawPtr<Resource> fetched = fetch(); |
| 445 EXPECT_NE(firstResource, fetched); | 444 EXPECT_NE(firstResource, fetched); |
| 446 } | 445 } |
| 447 | 446 |
| 448 TEST_F(CachingCorrectnessTest, PostToSameURLTwice) | 447 TEST_F(CachingCorrectnessTest, PostToSameURLTwice) |
| 449 { | 448 { |
| 450 ResourceRequest request1(KURL(ParsedURLString, kResourceURL)); | 449 ResourceRequest request1(KURL(ParsedURLString, kResourceURL)); |
| 451 request1.setHTTPMethod(HTTPNames::POST); | 450 request1.setHTTPMethod(HTTPNames::POST); |
| 452 ResourcePtr<Resource> resource1 = new Resource(ResourceRequest(request1.url(
)), Resource::Raw); | 451 RefPtrWillBeRawPtr<Resource> resource1 = Resource::create(ResourceRequest(re
quest1.url()), Resource::Raw); |
| 453 resource1->setLoading(true); | 452 resource1->setLoading(true); |
| 454 memoryCache()->add(resource1.get()); | 453 memoryCache()->add(resource1.get()); |
| 455 | 454 |
| 456 ResourceRequest request2(KURL(ParsedURLString, kResourceURL)); | 455 ResourceRequest request2(KURL(ParsedURLString, kResourceURL)); |
| 457 request2.setHTTPMethod(HTTPNames::POST); | 456 request2.setHTTPMethod(HTTPNames::POST); |
| 458 FetchRequest fetch2(request2, FetchInitiatorInfo()); | 457 FetchRequest fetch2(request2, FetchInitiatorInfo()); |
| 459 ResourcePtr<Resource> resource2 = RawResource::fetchSynchronously(fetch2, fe
tcher()); | 458 RefPtrWillBeRawPtr<Resource> resource2 = RawResource::fetchSynchronously(fet
ch2, fetcher()); |
| 460 | 459 |
| 461 EXPECT_EQ(resource2, memoryCache()->resourceForURL(request2.url())); | 460 EXPECT_EQ(resource2, memoryCache()->resourceForURL(request2.url())); |
| 462 EXPECT_NE(resource1, resource2); | 461 EXPECT_NE(resource1, resource2); |
| 463 } | 462 } |
| 464 | 463 |
| 465 TEST_F(CachingCorrectnessTest, 302RedirectNotImplicitlyFresh) | 464 TEST_F(CachingCorrectnessTest, 302RedirectNotImplicitlyFresh) |
| 466 { | 465 { |
| 467 KURL redirectUrl(ParsedURLString, kResourceURL); | 466 KURL redirectUrl(ParsedURLString, kResourceURL); |
| 468 const char redirectTargetUrlString[] = "http://redirect-target.com"; | 467 const char redirectTargetUrlString[] = "http://redirect-target.com"; |
| 469 KURL redirectTargetUrl(ParsedURLString, redirectTargetUrlString); | 468 KURL redirectTargetUrl(ParsedURLString, redirectTargetUrlString); |
| 470 | 469 |
| 471 ResourcePtr<Resource> firstResource = new Resource(ResourceRequest(redirectU
rl), Resource::Raw); | 470 RefPtrWillBeRawPtr<Resource> firstResource = Resource::create(ResourceReques
t(redirectUrl), Resource::Raw); |
| 472 | 471 |
| 473 ResourceResponse fresh302Response; | 472 ResourceResponse fresh302Response; |
| 474 fresh302Response.setURL(redirectUrl); | 473 fresh302Response.setURL(redirectUrl); |
| 475 fresh302Response.setHTTPStatusCode(302); | 474 fresh302Response.setHTTPStatusCode(302); |
| 476 fresh302Response.setHTTPHeaderField(HTTPNames::Date, kOriginalRequestDateAsS
tring); | 475 fresh302Response.setHTTPHeaderField(HTTPNames::Date, kOriginalRequestDateAsS
tring); |
| 477 fresh302Response.setHTTPHeaderField(HTTPNames::Last_Modified, kOneDayBeforeO
riginalRequest); | 476 fresh302Response.setHTTPHeaderField(HTTPNames::Last_Modified, kOneDayBeforeO
riginalRequest); |
| 478 fresh302Response.setHTTPHeaderField(HTTPNames::Location, redirectTargetUrlSt
ring); | 477 fresh302Response.setHTTPHeaderField(HTTPNames::Location, redirectTargetUrlSt
ring); |
| 479 | 478 |
| 480 // Add the redirect to our request. | 479 // Add the redirect to our request. |
| 481 ResourceRequest redirectRequest = ResourceRequest(redirectTargetUrl); | 480 ResourceRequest redirectRequest = ResourceRequest(redirectTargetUrl); |
| 482 firstResource->willFollowRedirect(redirectRequest, fresh302Response); | 481 firstResource->willFollowRedirect(redirectRequest, fresh302Response); |
| 483 | 482 |
| 484 // Add the final response to our request. | 483 // Add the final response to our request. |
| 485 ResourceResponse fresh200Response; | 484 ResourceResponse fresh200Response; |
| 486 fresh200Response.setURL(redirectTargetUrl); | 485 fresh200Response.setURL(redirectTargetUrl); |
| 487 fresh200Response.setHTTPStatusCode(200); | 486 fresh200Response.setHTTPStatusCode(200); |
| 488 fresh200Response.setHTTPHeaderField(HTTPNames::Date, kOriginalRequestDateAsS
tring); | 487 fresh200Response.setHTTPHeaderField(HTTPNames::Date, kOriginalRequestDateAsS
tring); |
| 489 fresh200Response.setHTTPHeaderField(HTTPNames::Expires, kOneDayAfterOriginal
Request); | 488 fresh200Response.setHTTPHeaderField(HTTPNames::Expires, kOneDayAfterOriginal
Request); |
| 490 | 489 |
| 491 firstResource->setResponse(fresh200Response); | 490 firstResource->setResponse(fresh200Response); |
| 492 memoryCache()->add(firstResource.get()); | 491 memoryCache()->add(firstResource.get()); |
| 493 | 492 |
| 494 advanceClock(500.); | 493 advanceClock(500.); |
| 495 | 494 |
| 496 ResourcePtr<Resource> fetched = fetch(); | 495 RefPtrWillBeRawPtr<Resource> fetched = fetch(); |
| 497 EXPECT_NE(firstResource, fetched); | 496 EXPECT_NE(firstResource, fetched); |
| 498 } | 497 } |
| 499 | 498 |
| 500 TEST_F(CachingCorrectnessTest, 302RedirectExplicitlyFreshMaxAge) | 499 TEST_F(CachingCorrectnessTest, 302RedirectExplicitlyFreshMaxAge) |
| 501 { | 500 { |
| 502 KURL redirectUrl(ParsedURLString, kResourceURL); | 501 KURL redirectUrl(ParsedURLString, kResourceURL); |
| 503 const char redirectTargetUrlString[] = "http://redirect-target.com"; | 502 const char redirectTargetUrlString[] = "http://redirect-target.com"; |
| 504 KURL redirectTargetUrl(ParsedURLString, redirectTargetUrlString); | 503 KURL redirectTargetUrl(ParsedURLString, redirectTargetUrlString); |
| 505 | 504 |
| 506 ResourcePtr<Resource> firstResource = new Resource(ResourceRequest(redirectU
rl), Resource::Raw); | 505 RefPtrWillBeRawPtr<Resource> firstResource = Resource::create(ResourceReques
t(redirectUrl), Resource::Raw); |
| 507 | 506 |
| 508 ResourceResponse fresh302Response; | 507 ResourceResponse fresh302Response; |
| 509 fresh302Response.setURL(redirectUrl); | 508 fresh302Response.setURL(redirectUrl); |
| 510 fresh302Response.setHTTPStatusCode(302); | 509 fresh302Response.setHTTPStatusCode(302); |
| 511 fresh302Response.setHTTPHeaderField(HTTPNames::Date, kOriginalRequestDateAsS
tring); | 510 fresh302Response.setHTTPHeaderField(HTTPNames::Date, kOriginalRequestDateAsS
tring); |
| 512 fresh302Response.setHTTPHeaderField(HTTPNames::Cache_Control, "max-age=600")
; | 511 fresh302Response.setHTTPHeaderField(HTTPNames::Cache_Control, "max-age=600")
; |
| 513 fresh302Response.setHTTPHeaderField(HTTPNames::Location, redirectTargetUrlSt
ring); | 512 fresh302Response.setHTTPHeaderField(HTTPNames::Location, redirectTargetUrlSt
ring); |
| 514 | 513 |
| 515 // Add the redirect to our request. | 514 // Add the redirect to our request. |
| 516 ResourceRequest redirectRequest = ResourceRequest(redirectTargetUrl); | 515 ResourceRequest redirectRequest = ResourceRequest(redirectTargetUrl); |
| 517 firstResource->willFollowRedirect(redirectRequest, fresh302Response); | 516 firstResource->willFollowRedirect(redirectRequest, fresh302Response); |
| 518 | 517 |
| 519 // Add the final response to our request. | 518 // Add the final response to our request. |
| 520 ResourceResponse fresh200Response; | 519 ResourceResponse fresh200Response; |
| 521 fresh200Response.setURL(redirectTargetUrl); | 520 fresh200Response.setURL(redirectTargetUrl); |
| 522 fresh200Response.setHTTPStatusCode(200); | 521 fresh200Response.setHTTPStatusCode(200); |
| 523 fresh200Response.setHTTPHeaderField(HTTPNames::Date, kOriginalRequestDateAsS
tring); | 522 fresh200Response.setHTTPHeaderField(HTTPNames::Date, kOriginalRequestDateAsS
tring); |
| 524 fresh200Response.setHTTPHeaderField(HTTPNames::Expires, kOneDayAfterOriginal
Request); | 523 fresh200Response.setHTTPHeaderField(HTTPNames::Expires, kOneDayAfterOriginal
Request); |
| 525 | 524 |
| 526 firstResource->setResponse(fresh200Response); | 525 firstResource->setResponse(fresh200Response); |
| 527 memoryCache()->add(firstResource.get()); | 526 memoryCache()->add(firstResource.get()); |
| 528 | 527 |
| 529 advanceClock(500.); | 528 advanceClock(500.); |
| 530 | 529 |
| 531 ResourcePtr<Resource> fetched = fetch(); | 530 RefPtrWillBeRawPtr<Resource> fetched = fetch(); |
| 532 EXPECT_EQ(firstResource, fetched); | 531 EXPECT_EQ(firstResource, fetched); |
| 533 } | 532 } |
| 534 | 533 |
| 535 TEST_F(CachingCorrectnessTest, 302RedirectExplicitlyFreshExpires) | 534 TEST_F(CachingCorrectnessTest, 302RedirectExplicitlyFreshExpires) |
| 536 { | 535 { |
| 537 KURL redirectUrl(ParsedURLString, kResourceURL); | 536 KURL redirectUrl(ParsedURLString, kResourceURL); |
| 538 const char redirectTargetUrlString[] = "http://redirect-target.com"; | 537 const char redirectTargetUrlString[] = "http://redirect-target.com"; |
| 539 KURL redirectTargetUrl(ParsedURLString, redirectTargetUrlString); | 538 KURL redirectTargetUrl(ParsedURLString, redirectTargetUrlString); |
| 540 | 539 |
| 541 ResourcePtr<Resource> firstResource = new Resource(ResourceRequest(redirectU
rl), Resource::Raw); | 540 RefPtrWillBeRawPtr<Resource> firstResource = Resource::create(ResourceReques
t(redirectUrl), Resource::Raw); |
| 542 | 541 |
| 543 ResourceResponse fresh302Response; | 542 ResourceResponse fresh302Response; |
| 544 fresh302Response.setURL(redirectUrl); | 543 fresh302Response.setURL(redirectUrl); |
| 545 fresh302Response.setHTTPStatusCode(302); | 544 fresh302Response.setHTTPStatusCode(302); |
| 546 fresh302Response.setHTTPHeaderField(HTTPNames::Date, kOriginalRequestDateAsS
tring); | 545 fresh302Response.setHTTPHeaderField(HTTPNames::Date, kOriginalRequestDateAsS
tring); |
| 547 fresh302Response.setHTTPHeaderField(HTTPNames::Expires, kOneDayAfterOriginal
Request); | 546 fresh302Response.setHTTPHeaderField(HTTPNames::Expires, kOneDayAfterOriginal
Request); |
| 548 fresh302Response.setHTTPHeaderField(HTTPNames::Location, redirectTargetUrlSt
ring); | 547 fresh302Response.setHTTPHeaderField(HTTPNames::Location, redirectTargetUrlSt
ring); |
| 549 | 548 |
| 550 // Add the redirect to our request. | 549 // Add the redirect to our request. |
| 551 ResourceRequest redirectRequest = ResourceRequest(redirectTargetUrl); | 550 ResourceRequest redirectRequest = ResourceRequest(redirectTargetUrl); |
| 552 firstResource->willFollowRedirect(redirectRequest, fresh302Response); | 551 firstResource->willFollowRedirect(redirectRequest, fresh302Response); |
| 553 | 552 |
| 554 // Add the final response to our request. | 553 // Add the final response to our request. |
| 555 ResourceResponse fresh200Response; | 554 ResourceResponse fresh200Response; |
| 556 fresh200Response.setURL(redirectTargetUrl); | 555 fresh200Response.setURL(redirectTargetUrl); |
| 557 fresh200Response.setHTTPStatusCode(200); | 556 fresh200Response.setHTTPStatusCode(200); |
| 558 fresh200Response.setHTTPHeaderField(HTTPNames::Date, kOriginalRequestDateAsS
tring); | 557 fresh200Response.setHTTPHeaderField(HTTPNames::Date, kOriginalRequestDateAsS
tring); |
| 559 fresh200Response.setHTTPHeaderField(HTTPNames::Expires, kOneDayAfterOriginal
Request); | 558 fresh200Response.setHTTPHeaderField(HTTPNames::Expires, kOneDayAfterOriginal
Request); |
| 560 | 559 |
| 561 firstResource->setResponse(fresh200Response); | 560 firstResource->setResponse(fresh200Response); |
| 562 memoryCache()->add(firstResource.get()); | 561 memoryCache()->add(firstResource.get()); |
| 563 | 562 |
| 564 advanceClock(500.); | 563 advanceClock(500.); |
| 565 | 564 |
| 566 ResourcePtr<Resource> fetched = fetch(); | 565 RefPtrWillBeRawPtr<Resource> fetched = fetch(); |
| 567 EXPECT_EQ(firstResource, fetched); | 566 EXPECT_EQ(firstResource, fetched); |
| 568 } | 567 } |
| 569 | 568 |
| 570 } // namespace blink | 569 } // namespace blink |
| OLD | NEW |