| 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 26 matching lines...) Expand all Loading... |
| 37 #include "public/platform/Platform.h" | 37 #include "public/platform/Platform.h" |
| 38 #include "testing/gtest/include/gtest/gtest.h" | 38 #include "testing/gtest/include/gtest/gtest.h" |
| 39 #include "wtf/OwnPtr.h" | 39 #include "wtf/OwnPtr.h" |
| 40 | 40 |
| 41 namespace blink { | 41 namespace blink { |
| 42 | 42 |
| 43 class MemoryCacheTest : public ::testing::Test { | 43 class MemoryCacheTest : public ::testing::Test { |
| 44 public: | 44 public: |
| 45 class FakeDecodedResource : public Resource { | 45 class FakeDecodedResource : public Resource { |
| 46 public: | 46 public: |
| 47 static RefPtrWillBeRawPtr<FakeDecodedResource> create(const ResourceRequ
est& request, Type type) | 47 static RawPtr<FakeDecodedResource> create(const ResourceRequest& request
, Type type) |
| 48 { | 48 { |
| 49 return adoptRefWillBeNoop(new FakeDecodedResource(request, type, Res
ourceLoaderOptions())); | 49 return new FakeDecodedResource(request, type, ResourceLoaderOptions(
)); |
| 50 } | 50 } |
| 51 | 51 |
| 52 virtual void appendData(const char* data, size_t len) | 52 virtual void appendData(const char* data, size_t len) |
| 53 { | 53 { |
| 54 Resource::appendData(data, len); | 54 Resource::appendData(data, len); |
| 55 setDecodedSize(this->size()); | 55 setDecodedSize(this->size()); |
| 56 } | 56 } |
| 57 | 57 |
| 58 protected: | 58 protected: |
| 59 FakeDecodedResource(const ResourceRequest& request, Type type, const Res
ourceLoaderOptions& options) | 59 FakeDecodedResource(const ResourceRequest& request, Type type, const Res
ourceLoaderOptions& options) |
| 60 : Resource(request, type, options) | 60 : Resource(request, type, options) |
| 61 { | 61 { |
| 62 } | 62 } |
| 63 | 63 |
| 64 void destroyDecodedDataIfPossible() override | 64 void destroyDecodedDataIfPossible() override |
| 65 { | 65 { |
| 66 setDecodedSize(0); | 66 setDecodedSize(0); |
| 67 } | 67 } |
| 68 }; | 68 }; |
| 69 | 69 |
| 70 class FakeResource : public Resource { | 70 class FakeResource : public Resource { |
| 71 public: | 71 public: |
| 72 static RefPtrWillBeRawPtr<FakeResource> create(const ResourceRequest& re
quest, Type type) | 72 static RawPtr<FakeResource> create(const ResourceRequest& request, Type
type) |
| 73 { | 73 { |
| 74 return adoptRefWillBeNoop(new FakeResource(request, type, ResourceLo
aderOptions())); | 74 return new FakeResource(request, type, ResourceLoaderOptions()); |
| 75 } | 75 } |
| 76 | 76 |
| 77 void fakeEncodedSize(size_t size) | 77 void fakeEncodedSize(size_t size) |
| 78 { | 78 { |
| 79 setEncodedSize(size); | 79 setEncodedSize(size); |
| 80 } | 80 } |
| 81 | 81 |
| 82 private: | 82 private: |
| 83 FakeResource(const ResourceRequest& request, Type type, const ResourceLo
aderOptions& options) | 83 FakeResource(const ResourceRequest& request, Type type, const ResourceLo
aderOptions& options) |
| 84 : Resource(request, type, options) | 84 : Resource(request, type, options) |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 116 | 116 |
| 117 TEST_F(MemoryCacheTest, VeryLargeResourceAccounting) | 117 TEST_F(MemoryCacheTest, VeryLargeResourceAccounting) |
| 118 { | 118 { |
| 119 const size_t sizeMax = ~static_cast<size_t>(0); | 119 const size_t sizeMax = ~static_cast<size_t>(0); |
| 120 const size_t totalCapacity = sizeMax / 4; | 120 const size_t totalCapacity = sizeMax / 4; |
| 121 const size_t minDeadCapacity = sizeMax / 16; | 121 const size_t minDeadCapacity = sizeMax / 16; |
| 122 const size_t maxDeadCapacity = sizeMax / 8; | 122 const size_t maxDeadCapacity = sizeMax / 8; |
| 123 const size_t resourceSize1 = sizeMax / 16; | 123 const size_t resourceSize1 = sizeMax / 16; |
| 124 const size_t resourceSize2 = sizeMax / 20; | 124 const size_t resourceSize2 = sizeMax / 20; |
| 125 memoryCache()->setCapacities(minDeadCapacity, maxDeadCapacity, totalCapacity
); | 125 memoryCache()->setCapacities(minDeadCapacity, maxDeadCapacity, totalCapacity
); |
| 126 RefPtrWillBeRawPtr<FakeResource> cachedResource = | 126 RawPtr<FakeResource> cachedResource = |
| 127 FakeResource::create(ResourceRequest("http://test/resource"), Resource::
Raw); | 127 FakeResource::create(ResourceRequest("http://test/resource"), Resource::
Raw); |
| 128 cachedResource->fakeEncodedSize(resourceSize1); | 128 cachedResource->fakeEncodedSize(resourceSize1); |
| 129 | 129 |
| 130 ASSERT_EQ(0u, memoryCache()->deadSize()); | 130 ASSERT_EQ(0u, memoryCache()->deadSize()); |
| 131 ASSERT_EQ(0u, memoryCache()->liveSize()); | 131 ASSERT_EQ(0u, memoryCache()->liveSize()); |
| 132 memoryCache()->add(cachedResource.get()); | 132 memoryCache()->add(cachedResource.get()); |
| 133 ASSERT_EQ(cachedResource->size(), memoryCache()->deadSize()); | 133 ASSERT_EQ(cachedResource->size(), memoryCache()->deadSize()); |
| 134 ASSERT_EQ(0u, memoryCache()->liveSize()); | 134 ASSERT_EQ(0u, memoryCache()->liveSize()); |
| 135 | 135 |
| 136 MockResourceClient client(cachedResource); | 136 MockResourceClient client(cachedResource); |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 173 ASSERT_EQ(resource1->size() + resource2->size(), memoryCache()->deadSize()); | 173 ASSERT_EQ(resource1->size() + resource2->size(), memoryCache()->deadSize()); |
| 174 ASSERT_EQ(0u, memoryCache()->liveSize()); | 174 ASSERT_EQ(0u, memoryCache()->liveSize()); |
| 175 | 175 |
| 176 memoryCache()->prune(); | 176 memoryCache()->prune(); |
| 177 ASSERT_EQ(0u, memoryCache()->deadSize()); | 177 ASSERT_EQ(0u, memoryCache()->deadSize()); |
| 178 ASSERT_EQ(0u, memoryCache()->liveSize()); | 178 ASSERT_EQ(0u, memoryCache()->liveSize()); |
| 179 } | 179 } |
| 180 | 180 |
| 181 TEST_F(MemoryCacheTest, DeadResourceEviction_Basic) | 181 TEST_F(MemoryCacheTest, DeadResourceEviction_Basic) |
| 182 { | 182 { |
| 183 RefPtrWillBeRawPtr<Resource> resource1 = | 183 RawPtr<Resource> resource1 = |
| 184 Resource::create(ResourceRequest("http://test/resource1"), Resource::Raw
); | 184 Resource::create(ResourceRequest("http://test/resource1"), Resource::Raw
); |
| 185 RefPtrWillBeRawPtr<Resource> resource2 = | 185 RawPtr<Resource> resource2 = |
| 186 Resource::create(ResourceRequest("http://test/resource2"), Resource::Raw
); | 186 Resource::create(ResourceRequest("http://test/resource2"), Resource::Raw
); |
| 187 TestDeadResourceEviction(resource1.get(), resource2.get()); | 187 TestDeadResourceEviction(resource1.get(), resource2.get()); |
| 188 } | 188 } |
| 189 | 189 |
| 190 TEST_F(MemoryCacheTest, DeadResourceEviction_MultipleResourceMaps) | 190 TEST_F(MemoryCacheTest, DeadResourceEviction_MultipleResourceMaps) |
| 191 { | 191 { |
| 192 RefPtrWillBeRawPtr<Resource> resource1 = | 192 RawPtr<Resource> resource1 = |
| 193 Resource::create(ResourceRequest("http://test/resource1"), Resource::Raw
); | 193 Resource::create(ResourceRequest("http://test/resource1"), Resource::Raw
); |
| 194 RefPtrWillBeRawPtr<Resource> resource2 = | 194 RawPtr<Resource> resource2 = |
| 195 Resource::create(ResourceRequest("http://test/resource2"), Resource::Raw
); | 195 Resource::create(ResourceRequest("http://test/resource2"), Resource::Raw
); |
| 196 resource2->setCacheIdentifier("foo"); | 196 resource2->setCacheIdentifier("foo"); |
| 197 TestDeadResourceEviction(resource1.get(), resource2.get()); | 197 TestDeadResourceEviction(resource1.get(), resource2.get()); |
| 198 } | 198 } |
| 199 | 199 |
| 200 static void runTask1(Resource* live, Resource* dead) | 200 static void runTask1(Resource* live, Resource* dead) |
| 201 { | 201 { |
| 202 // The resource size has to be nonzero for this test to be meaningful, but | 202 // The resource size has to be nonzero for this test to be meaningful, but |
| 203 // we do not rely on it having any particular value. | 203 // we do not rely on it having any particular value. |
| 204 ASSERT_GT(live->size(), 0u); | 204 ASSERT_GT(live->size(), 0u); |
| (...skipping 29 matching lines...) Expand all Loading... |
| 234 const unsigned minDeadCapacity = 0; | 234 const unsigned minDeadCapacity = 0; |
| 235 const unsigned maxDeadCapacity = 0; | 235 const unsigned maxDeadCapacity = 0; |
| 236 memoryCache()->setCapacities(minDeadCapacity, maxDeadCapacity, totalCapacity
); | 236 memoryCache()->setCapacities(minDeadCapacity, maxDeadCapacity, totalCapacity
); |
| 237 const char data[6] = "abcde"; | 237 const char data[6] = "abcde"; |
| 238 cachedDeadResource->appendData(data, 3u); | 238 cachedDeadResource->appendData(data, 3u); |
| 239 cachedDeadResource->finish(); | 239 cachedDeadResource->finish(); |
| 240 MockResourceClient client(cachedLiveResource); | 240 MockResourceClient client(cachedLiveResource); |
| 241 cachedLiveResource->appendData(data, 4u); | 241 cachedLiveResource->appendData(data, 4u); |
| 242 cachedLiveResource->finish(); | 242 cachedLiveResource->finish(); |
| 243 | 243 |
| 244 Platform::current()->currentThread()->getWebTaskRunner()->postTask(BLINK_FRO
M_HERE, bind(&runTask1, PassRefPtrWillBeRawPtr<Resource>(cachedLiveResource), Pa
ssRefPtrWillBeRawPtr<Resource>(cachedDeadResource))); | 244 Platform::current()->currentThread()->getWebTaskRunner()->postTask(BLINK_FRO
M_HERE, bind(&runTask1, RawPtr<Resource>(cachedLiveResource), RawPtr<Resource>(c
achedDeadResource))); |
| 245 Platform::current()->currentThread()->getWebTaskRunner()->postTask(BLINK_FRO
M_HERE, bind(&runTask2, cachedLiveResource->encodedSize() + cachedLiveResource->
overheadSize())); | 245 Platform::current()->currentThread()->getWebTaskRunner()->postTask(BLINK_FRO
M_HERE, bind(&runTask2, cachedLiveResource->encodedSize() + cachedLiveResource->
overheadSize())); |
| 246 testing::runPendingTasks(); | 246 testing::runPendingTasks(); |
| 247 } | 247 } |
| 248 | 248 |
| 249 // Verified that when ordering a prune in a runLoop task, the prune | 249 // Verified that when ordering a prune in a runLoop task, the prune |
| 250 // is deferred to the end of the task. | 250 // is deferred to the end of the task. |
| 251 TEST_F(MemoryCacheTest, LiveResourceEvictionAtEndOfTask_Basic) | 251 TEST_F(MemoryCacheTest, LiveResourceEvictionAtEndOfTask_Basic) |
| 252 { | 252 { |
| 253 RefPtrWillBeRawPtr<Resource> cachedDeadResource = | 253 RawPtr<Resource> cachedDeadResource = |
| 254 Resource::create(ResourceRequest("hhtp://foo"), Resource::Raw); | 254 Resource::create(ResourceRequest("hhtp://foo"), Resource::Raw); |
| 255 RefPtrWillBeRawPtr<Resource> cachedLiveResource = | 255 RawPtr<Resource> cachedLiveResource = |
| 256 FakeDecodedResource::create(ResourceRequest("http://test/resource"), Res
ource::Raw); | 256 FakeDecodedResource::create(ResourceRequest("http://test/resource"), Res
ource::Raw); |
| 257 TestLiveResourceEvictionAtEndOfTask(cachedDeadResource.get(), cachedLiveReso
urce.get()); | 257 TestLiveResourceEvictionAtEndOfTask(cachedDeadResource.get(), cachedLiveReso
urce.get()); |
| 258 } | 258 } |
| 259 | 259 |
| 260 TEST_F(MemoryCacheTest, LiveResourceEvictionAtEndOfTask_MultipleResourceMaps) | 260 TEST_F(MemoryCacheTest, LiveResourceEvictionAtEndOfTask_MultipleResourceMaps) |
| 261 { | 261 { |
| 262 { | 262 { |
| 263 RefPtrWillBeRawPtr<Resource> cachedDeadResource = | 263 RawPtr<Resource> cachedDeadResource = |
| 264 Resource::create(ResourceRequest("hhtp://foo"), Resource::Raw); | 264 Resource::create(ResourceRequest("hhtp://foo"), Resource::Raw); |
| 265 cachedDeadResource->setCacheIdentifier("foo"); | 265 cachedDeadResource->setCacheIdentifier("foo"); |
| 266 RefPtrWillBeRawPtr<Resource> cachedLiveResource = | 266 RawPtr<Resource> cachedLiveResource = |
| 267 FakeDecodedResource::create(ResourceRequest("http://test/resource"),
Resource::Raw); | 267 FakeDecodedResource::create(ResourceRequest("http://test/resource"),
Resource::Raw); |
| 268 TestLiveResourceEvictionAtEndOfTask(cachedDeadResource.get(), cachedLive
Resource.get()); | 268 TestLiveResourceEvictionAtEndOfTask(cachedDeadResource.get(), cachedLive
Resource.get()); |
| 269 memoryCache()->evictResources(); | 269 memoryCache()->evictResources(); |
| 270 } | 270 } |
| 271 { | 271 { |
| 272 RefPtrWillBeRawPtr<Resource> cachedDeadResource = | 272 RawPtr<Resource> cachedDeadResource = |
| 273 Resource::create(ResourceRequest("hhtp://foo"), Resource::Raw); | 273 Resource::create(ResourceRequest("hhtp://foo"), Resource::Raw); |
| 274 RefPtrWillBeRawPtr<Resource> cachedLiveResource = | 274 RawPtr<Resource> cachedLiveResource = |
| 275 FakeDecodedResource::create(ResourceRequest("http://test/resource"),
Resource::Raw); | 275 FakeDecodedResource::create(ResourceRequest("http://test/resource"),
Resource::Raw); |
| 276 cachedLiveResource->setCacheIdentifier("foo"); | 276 cachedLiveResource->setCacheIdentifier("foo"); |
| 277 TestLiveResourceEvictionAtEndOfTask(cachedDeadResource.get(), cachedLive
Resource.get()); | 277 TestLiveResourceEvictionAtEndOfTask(cachedDeadResource.get(), cachedLive
Resource.get()); |
| 278 memoryCache()->evictResources(); | 278 memoryCache()->evictResources(); |
| 279 } | 279 } |
| 280 { | 280 { |
| 281 RefPtrWillBeRawPtr<Resource> cachedDeadResource = | 281 RawPtr<Resource> cachedDeadResource = |
| 282 Resource::create(ResourceRequest("hhtp://test/resource"), Resource::
Raw); | 282 Resource::create(ResourceRequest("hhtp://test/resource"), Resource::
Raw); |
| 283 cachedDeadResource->setCacheIdentifier("foo"); | 283 cachedDeadResource->setCacheIdentifier("foo"); |
| 284 RefPtrWillBeRawPtr<Resource> cachedLiveResource = | 284 RawPtr<Resource> cachedLiveResource = |
| 285 FakeDecodedResource::create(ResourceRequest("http://test/resource"),
Resource::Raw); | 285 FakeDecodedResource::create(ResourceRequest("http://test/resource"),
Resource::Raw); |
| 286 cachedLiveResource->setCacheIdentifier("bar"); | 286 cachedLiveResource->setCacheIdentifier("bar"); |
| 287 TestLiveResourceEvictionAtEndOfTask(cachedDeadResource.get(), cachedLive
Resource.get()); | 287 TestLiveResourceEvictionAtEndOfTask(cachedDeadResource.get(), cachedLive
Resource.get()); |
| 288 memoryCache()->evictResources(); | 288 memoryCache()->evictResources(); |
| 289 } | 289 } |
| 290 } | 290 } |
| 291 | 291 |
| 292 // Verifies that cached resources are evicted immediately after release when | 292 // Verifies that cached resources are evicted immediately after release when |
| 293 // the total dead resource size is more than double the dead resource capacity. | 293 // the total dead resource size is more than double the dead resource capacity. |
| 294 static void TestClientRemoval(Resource* resource1, Resource* resource2) | 294 static void TestClientRemoval(Resource* resource1, Resource* resource2) |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 329 ASSERT_GT(resource1->decodedSize(), 0u); | 329 ASSERT_GT(resource1->decodedSize(), 0u); |
| 330 ASSERT_GT(resource2->decodedSize(), 0u); | 330 ASSERT_GT(resource2->decodedSize(), 0u); |
| 331 ASSERT_EQ(memoryCache()->deadSize(), resource1->size()); | 331 ASSERT_EQ(memoryCache()->deadSize(), resource1->size()); |
| 332 ASSERT_EQ(memoryCache()->liveSize(), 0u); | 332 ASSERT_EQ(memoryCache()->liveSize(), 0u); |
| 333 ASSERT_TRUE(memoryCache()->contains(resource1)); | 333 ASSERT_TRUE(memoryCache()->contains(resource1)); |
| 334 ASSERT_FALSE(memoryCache()->contains(resource2)); | 334 ASSERT_FALSE(memoryCache()->contains(resource2)); |
| 335 } | 335 } |
| 336 | 336 |
| 337 TEST_F(MemoryCacheTest, ClientRemoval_Basic) | 337 TEST_F(MemoryCacheTest, ClientRemoval_Basic) |
| 338 { | 338 { |
| 339 RefPtrWillBeRawPtr<Resource> resource1 = | 339 RawPtr<Resource> resource1 = |
| 340 FakeDecodedResource::create(ResourceRequest("http://foo.com"), Resource:
:Raw); | 340 FakeDecodedResource::create(ResourceRequest("http://foo.com"), Resource:
:Raw); |
| 341 RefPtrWillBeRawPtr<Resource> resource2 = | 341 RawPtr<Resource> resource2 = |
| 342 FakeDecodedResource::create(ResourceRequest("http://test/resource"), Res
ource::Raw); | 342 FakeDecodedResource::create(ResourceRequest("http://test/resource"), Res
ource::Raw); |
| 343 TestClientRemoval(resource1.get(), resource2.get()); | 343 TestClientRemoval(resource1.get(), resource2.get()); |
| 344 } | 344 } |
| 345 | 345 |
| 346 TEST_F(MemoryCacheTest, ClientRemoval_MultipleResourceMaps) | 346 TEST_F(MemoryCacheTest, ClientRemoval_MultipleResourceMaps) |
| 347 { | 347 { |
| 348 { | 348 { |
| 349 RefPtrWillBeRawPtr<Resource> resource1 = | 349 RawPtr<Resource> resource1 = |
| 350 FakeDecodedResource::create(ResourceRequest("http://foo.com"), Resou
rce::Raw); | 350 FakeDecodedResource::create(ResourceRequest("http://foo.com"), Resou
rce::Raw); |
| 351 resource1->setCacheIdentifier("foo"); | 351 resource1->setCacheIdentifier("foo"); |
| 352 RefPtrWillBeRawPtr<Resource> resource2 = | 352 RawPtr<Resource> resource2 = |
| 353 FakeDecodedResource::create(ResourceRequest("http://test/resource"),
Resource::Raw); | 353 FakeDecodedResource::create(ResourceRequest("http://test/resource"),
Resource::Raw); |
| 354 TestClientRemoval(resource1.get(), resource2.get()); | 354 TestClientRemoval(resource1.get(), resource2.get()); |
| 355 memoryCache()->evictResources(); | 355 memoryCache()->evictResources(); |
| 356 } | 356 } |
| 357 { | 357 { |
| 358 RefPtrWillBeRawPtr<Resource> resource1 = | 358 RawPtr<Resource> resource1 = |
| 359 FakeDecodedResource::create(ResourceRequest("http://foo.com"), Resou
rce::Raw); | 359 FakeDecodedResource::create(ResourceRequest("http://foo.com"), Resou
rce::Raw); |
| 360 RefPtrWillBeRawPtr<Resource> resource2 = | 360 RawPtr<Resource> resource2 = |
| 361 FakeDecodedResource::create(ResourceRequest("http://test/resource"),
Resource::Raw); | 361 FakeDecodedResource::create(ResourceRequest("http://test/resource"),
Resource::Raw); |
| 362 resource2->setCacheIdentifier("foo"); | 362 resource2->setCacheIdentifier("foo"); |
| 363 TestClientRemoval(resource1.get(), resource2.get()); | 363 TestClientRemoval(resource1.get(), resource2.get()); |
| 364 memoryCache()->evictResources(); | 364 memoryCache()->evictResources(); |
| 365 } | 365 } |
| 366 { | 366 { |
| 367 RefPtrWillBeRawPtr<Resource> resource1 = | 367 RawPtr<Resource> resource1 = |
| 368 FakeDecodedResource::create(ResourceRequest("http://test/resource"),
Resource::Raw); | 368 FakeDecodedResource::create(ResourceRequest("http://test/resource"),
Resource::Raw); |
| 369 resource1->setCacheIdentifier("foo"); | 369 resource1->setCacheIdentifier("foo"); |
| 370 RefPtrWillBeRawPtr<Resource> resource2 = | 370 RawPtr<Resource> resource2 = |
| 371 FakeDecodedResource::create(ResourceRequest("http://test/resource"),
Resource::Raw); | 371 FakeDecodedResource::create(ResourceRequest("http://test/resource"),
Resource::Raw); |
| 372 resource2->setCacheIdentifier("bar"); | 372 resource2->setCacheIdentifier("bar"); |
| 373 TestClientRemoval(resource1.get(), resource2.get()); | 373 TestClientRemoval(resource1.get(), resource2.get()); |
| 374 memoryCache()->evictResources(); | 374 memoryCache()->evictResources(); |
| 375 } | 375 } |
| 376 } | 376 } |
| 377 | 377 |
| 378 TEST_F(MemoryCacheTest, RemoveDuringRevalidation) | 378 TEST_F(MemoryCacheTest, RemoveDuringRevalidation) |
| 379 { | 379 { |
| 380 RefPtrWillBeRawPtr<FakeResource> resource1 = FakeResource::create(ResourceRe
quest("http://test/resource"), Resource::Raw); | 380 RawPtr<FakeResource> resource1 = FakeResource::create(ResourceRequest("http:
//test/resource"), Resource::Raw); |
| 381 memoryCache()->add(resource1.get()); | 381 memoryCache()->add(resource1.get()); |
| 382 | 382 |
| 383 RefPtrWillBeRawPtr<FakeResource> resource2 = FakeResource::create(ResourceRe
quest("http://test/resource"), Resource::Raw); | 383 RawPtr<FakeResource> resource2 = FakeResource::create(ResourceRequest("http:
//test/resource"), Resource::Raw); |
| 384 memoryCache()->remove(resource1.get()); | 384 memoryCache()->remove(resource1.get()); |
| 385 memoryCache()->add(resource2.get()); | 385 memoryCache()->add(resource2.get()); |
| 386 EXPECT_TRUE(memoryCache()->contains(resource2.get())); | 386 EXPECT_TRUE(memoryCache()->contains(resource2.get())); |
| 387 EXPECT_FALSE(memoryCache()->contains(resource1.get())); | 387 EXPECT_FALSE(memoryCache()->contains(resource1.get())); |
| 388 | 388 |
| 389 RefPtrWillBeRawPtr<FakeResource> resource3 = FakeResource::create(ResourceRe
quest("http://test/resource"), Resource::Raw); | 389 RawPtr<FakeResource> resource3 = FakeResource::create(ResourceRequest("http:
//test/resource"), Resource::Raw); |
| 390 memoryCache()->remove(resource2.get()); | 390 memoryCache()->remove(resource2.get()); |
| 391 memoryCache()->add(resource3.get()); | 391 memoryCache()->add(resource3.get()); |
| 392 EXPECT_TRUE(memoryCache()->contains(resource3.get())); | 392 EXPECT_TRUE(memoryCache()->contains(resource3.get())); |
| 393 EXPECT_FALSE(memoryCache()->contains(resource2.get())); | 393 EXPECT_FALSE(memoryCache()->contains(resource2.get())); |
| 394 } | 394 } |
| 395 | 395 |
| 396 TEST_F(MemoryCacheTest, ResourceMapIsolation) | 396 TEST_F(MemoryCacheTest, ResourceMapIsolation) |
| 397 { | 397 { |
| 398 RefPtrWillBeRawPtr<FakeResource> resource1 = FakeResource::create(ResourceRe
quest("http://test/resource"), Resource::Raw); | 398 RawPtr<FakeResource> resource1 = FakeResource::create(ResourceRequest("http:
//test/resource"), Resource::Raw); |
| 399 memoryCache()->add(resource1.get()); | 399 memoryCache()->add(resource1.get()); |
| 400 | 400 |
| 401 RefPtrWillBeRawPtr<FakeResource> resource2 = FakeResource::create(ResourceRe
quest("http://test/resource"), Resource::Raw); | 401 RawPtr<FakeResource> resource2 = FakeResource::create(ResourceRequest("http:
//test/resource"), Resource::Raw); |
| 402 resource2->setCacheIdentifier("foo"); | 402 resource2->setCacheIdentifier("foo"); |
| 403 memoryCache()->add(resource2.get()); | 403 memoryCache()->add(resource2.get()); |
| 404 EXPECT_TRUE(memoryCache()->contains(resource1.get())); | 404 EXPECT_TRUE(memoryCache()->contains(resource1.get())); |
| 405 EXPECT_TRUE(memoryCache()->contains(resource2.get())); | 405 EXPECT_TRUE(memoryCache()->contains(resource2.get())); |
| 406 | 406 |
| 407 const KURL url = KURL(ParsedURLString, "http://test/resource"); | 407 const KURL url = KURL(ParsedURLString, "http://test/resource"); |
| 408 EXPECT_EQ(resource1.get(), memoryCache()->resourceForURL(url)); | 408 EXPECT_EQ(resource1.get(), memoryCache()->resourceForURL(url)); |
| 409 EXPECT_EQ(resource1.get(), memoryCache()->resourceForURL(url, memoryCache()-
>defaultCacheIdentifier())); | 409 EXPECT_EQ(resource1.get(), memoryCache()->resourceForURL(url, memoryCache()-
>defaultCacheIdentifier())); |
| 410 EXPECT_EQ(resource2.get(), memoryCache()->resourceForURL(url, "foo")); | 410 EXPECT_EQ(resource2.get(), memoryCache()->resourceForURL(url, "foo")); |
| 411 EXPECT_EQ(0, memoryCache()->resourceForURL(KURL())); | 411 EXPECT_EQ(0, memoryCache()->resourceForURL(KURL())); |
| 412 | 412 |
| 413 RefPtrWillBeRawPtr<FakeResource> resource3 = FakeResource::create(ResourceRe
quest("http://test/resource"), Resource::Raw); | 413 RawPtr<FakeResource> resource3 = FakeResource::create(ResourceRequest("http:
//test/resource"), Resource::Raw); |
| 414 resource3->setCacheIdentifier("foo"); | 414 resource3->setCacheIdentifier("foo"); |
| 415 memoryCache()->remove(resource2.get()); | 415 memoryCache()->remove(resource2.get()); |
| 416 memoryCache()->add(resource3.get()); | 416 memoryCache()->add(resource3.get()); |
| 417 EXPECT_TRUE(memoryCache()->contains(resource1.get())); | 417 EXPECT_TRUE(memoryCache()->contains(resource1.get())); |
| 418 EXPECT_FALSE(memoryCache()->contains(resource2.get())); | 418 EXPECT_FALSE(memoryCache()->contains(resource2.get())); |
| 419 EXPECT_TRUE(memoryCache()->contains(resource3.get())); | 419 EXPECT_TRUE(memoryCache()->contains(resource3.get())); |
| 420 | 420 |
| 421 WillBeHeapVector<RawPtrWillBeMember<Resource>> resources = memoryCache()->re
sourcesForURL(url); | 421 HeapVector<Member<Resource>> resources = memoryCache()->resourcesForURL(url)
; |
| 422 EXPECT_EQ(2u, resources.size()); | 422 EXPECT_EQ(2u, resources.size()); |
| 423 | 423 |
| 424 memoryCache()->evictResources(); | 424 memoryCache()->evictResources(); |
| 425 EXPECT_FALSE(memoryCache()->contains(resource1.get())); | 425 EXPECT_FALSE(memoryCache()->contains(resource1.get())); |
| 426 EXPECT_FALSE(memoryCache()->contains(resource3.get())); | 426 EXPECT_FALSE(memoryCache()->contains(resource3.get())); |
| 427 } | 427 } |
| 428 | 428 |
| 429 } // namespace blink | 429 } // namespace blink |
| OLD | NEW |