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 15 matching lines...) Expand all Loading... |
26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
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 "config.h" | 31 #include "config.h" |
32 #include "core/fetch/ResourceFetcher.h" | 32 #include "core/fetch/ResourceFetcher.h" |
33 | 33 |
34 #include "core/fetch/FetchInitiatorInfo.h" | 34 #include "core/fetch/FetchInitiatorInfo.h" |
35 #include "core/fetch/FetchRequest.h" | 35 #include "core/fetch/FetchRequest.h" |
36 #include "core/fetch/ImageResource.h" | |
37 #include "core/fetch/MemoryCache.h" | 36 #include "core/fetch/MemoryCache.h" |
38 #include "core/fetch/ResourcePtr.h" | 37 #include "core/fetch/ResourcePtr.h" |
| 38 #include "platform/exported/WrappedResourceResponse.h" |
39 #include "platform/heap/Handle.h" | 39 #include "platform/heap/Handle.h" |
40 #include "platform/network/ResourceRequest.h" | 40 #include "platform/network/ResourceRequest.h" |
| 41 #include "platform/testing/URLTestHelpers.h" |
41 #include "platform/weborigin/KURL.h" | 42 #include "platform/weborigin/KURL.h" |
42 #include "public/platform/Platform.h" | 43 #include "public/platform/Platform.h" |
43 #include "public/platform/WebURLResponse.h" | 44 #include "public/platform/WebURLResponse.h" |
44 #include "public/platform/WebUnitTestSupport.h" | 45 #include "public/platform/WebUnitTestSupport.h" |
45 #include <gtest/gtest.h> | 46 #include <gtest/gtest.h> |
46 | 47 |
47 namespace blink { | 48 namespace blink { |
48 | 49 |
49 class ResourceFetcherTestMockFetchContext : public FetchContext { | 50 class ResourceFetcherTestMockFetchContext : public FetchContext { |
50 public: | 51 public: |
(...skipping 17 matching lines...) Expand all Loading... |
68 { } | 69 { } |
69 | 70 |
70 CachePolicy m_policy; | 71 CachePolicy m_policy; |
71 }; | 72 }; |
72 | 73 |
73 class ResourceFetcherTest : public ::testing::Test { | 74 class ResourceFetcherTest : public ::testing::Test { |
74 }; | 75 }; |
75 | 76 |
76 class TestResourceFactory : public ResourceFactory { | 77 class TestResourceFactory : public ResourceFactory { |
77 public: | 78 public: |
78 TestResourceFactory() | 79 TestResourceFactory(Resource::Type type = Resource::Raw) |
79 : ResourceFactory(Resource::Image) { } | 80 : ResourceFactory(type) { } |
80 | 81 |
81 Resource* create(const ResourceRequest& request, const String& charset) cons
t override | 82 Resource* create(const ResourceRequest& request, const String& charset) cons
t override |
82 { | 83 { |
83 return new Resource(request, Resource::Image); | 84 return new Resource(request, type()); |
84 } | 85 } |
85 }; | 86 }; |
86 | 87 |
87 TEST_F(ResourceFetcherTest, StartLoadAfterFrameDetach) | 88 TEST_F(ResourceFetcherTest, StartLoadAfterFrameDetach) |
88 { | 89 { |
89 KURL secureURL(ParsedURLString, "https://secureorigin.test/image.png"); | 90 KURL secureURL(ParsedURLString, "https://secureorigin.test/image.png"); |
90 // Try to request a url. The request should fail, no resource should be retu
rned, | 91 // Try to request a url. The request should fail, no resource should be retu
rned, |
91 // and no resource should be present in the cache. | 92 // and no resource should be present in the cache. |
92 ResourceFetcher* fetcher = ResourceFetcher::create(nullptr); | 93 ResourceFetcher* fetcher = ResourceFetcher::create(nullptr); |
93 FetchRequest fetchRequest = FetchRequest(ResourceRequest(secureURL), FetchIn
itiatorInfo()); | 94 FetchRequest fetchRequest = FetchRequest(ResourceRequest(secureURL), FetchIn
itiatorInfo()); |
(...skipping 10 matching lines...) Expand all Loading... |
104 ResourcePtr<Resource> resource = new Resource(url, Resource::Image); | 105 ResourcePtr<Resource> resource = new Resource(url, Resource::Image); |
105 memoryCache()->add(resource.get()); | 106 memoryCache()->add(resource.get()); |
106 ResourceResponse response; | 107 ResourceResponse response; |
107 response.setURL(url); | 108 response.setURL(url); |
108 response.setHTTPStatusCode(200); | 109 response.setHTTPStatusCode(200); |
109 response.setHTTPHeaderField("Cache-Control", "max-age=3600"); | 110 response.setHTTPHeaderField("Cache-Control", "max-age=3600"); |
110 resource->responseReceived(response, nullptr); | 111 resource->responseReceived(response, nullptr); |
111 resource->finish(); | 112 resource->finish(); |
112 | 113 |
113 FetchRequest fetchRequest = FetchRequest(url, FetchInitiatorInfo()); | 114 FetchRequest fetchRequest = FetchRequest(url, FetchInitiatorInfo()); |
114 ResourcePtr<Resource> newResource = fetcher->requestResource(fetchRequest, T
estResourceFactory()); | 115 ResourcePtr<Resource> newResource = fetcher->requestResource(fetchRequest, T
estResourceFactory(Resource::Image)); |
115 EXPECT_EQ(resource, newResource); | 116 EXPECT_EQ(resource, newResource); |
116 memoryCache()->remove(resource.get()); | 117 memoryCache()->remove(resource.get()); |
117 } | 118 } |
118 | 119 |
119 | 120 |
120 TEST_F(ResourceFetcherTest, Vary) | 121 TEST_F(ResourceFetcherTest, Vary) |
121 { | 122 { |
122 ResourceFetcher* fetcher = ResourceFetcher::create(ResourceFetcherTestMockFe
tchContext::create()); | 123 ResourceFetcher* fetcher = ResourceFetcher::create(ResourceFetcherTestMockFe
tchContext::create()); |
123 | 124 |
124 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.html"); | 125 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.html"); |
125 ResourcePtr<Resource> resource = new Resource(url, Resource::Image); | 126 ResourcePtr<Resource> resource = new Resource(url, Resource::Raw); |
126 memoryCache()->add(resource.get()); | 127 memoryCache()->add(resource.get()); |
127 ResourceResponse response; | 128 ResourceResponse response; |
128 response.setURL(url); | 129 response.setURL(url); |
129 response.setHTTPStatusCode(200); | 130 response.setHTTPStatusCode(200); |
130 response.setHTTPHeaderField("Cache-Control", "max-age=3600"); | 131 response.setHTTPHeaderField("Cache-Control", "max-age=3600"); |
131 response.setHTTPHeaderField("Vary", "*"); | 132 response.setHTTPHeaderField("Vary", "*"); |
132 resource->responseReceived(response, nullptr); | 133 resource->responseReceived(response, nullptr); |
133 resource->finish(); | 134 resource->finish(); |
134 ASSERT_TRUE(resource->hasVaryHeader()); | 135 ASSERT_TRUE(resource->hasVaryHeader()); |
135 | 136 |
136 FetchRequest fetchRequest = FetchRequest(url, FetchInitiatorInfo()); | 137 FetchRequest fetchRequest = FetchRequest(url, FetchInitiatorInfo()); |
137 Platform::current()->unitTestSupport()->registerMockedURL(url, WebURLRespons
e(), ""); | 138 Platform::current()->unitTestSupport()->registerMockedURL(url, WebURLRespons
e(), ""); |
138 ResourcePtr<Resource> newResource = fetcher->requestResource(fetchRequest, T
estResourceFactory()); | 139 ResourcePtr<Resource> newResource = fetcher->requestResource(fetchRequest, T
estResourceFactory()); |
139 EXPECT_NE(resource, newResource); | 140 EXPECT_NE(resource, newResource); |
140 | 141 |
141 memoryCache()->remove(newResource.get()); | 142 memoryCache()->remove(newResource.get()); |
142 Platform::current()->unitTestSupport()->unregisterMockedURL(url); | 143 Platform::current()->unitTestSupport()->unregisterMockedURL(url); |
143 } | 144 } |
144 | 145 |
145 TEST_F(ResourceFetcherTest, VaryOnBack) | 146 TEST_F(ResourceFetcherTest, VaryOnBack) |
146 { | 147 { |
147 ResourceFetcherTestMockFetchContext* context = ResourceFetcherTestMockFetchC
ontext::create(); | 148 ResourceFetcherTestMockFetchContext* context = ResourceFetcherTestMockFetchC
ontext::create(); |
148 context->setCachePolicy(CachePolicyHistoryBuffer); | 149 context->setCachePolicy(CachePolicyHistoryBuffer); |
149 ResourceFetcher* fetcher = ResourceFetcher::create(context); | 150 ResourceFetcher* fetcher = ResourceFetcher::create(context); |
150 | 151 |
151 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.html"); | 152 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.html"); |
152 ResourcePtr<Resource> resource = new Resource(url, Resource::Image); | 153 ResourcePtr<Resource> resource = new Resource(url, Resource::Raw); |
153 memoryCache()->add(resource.get()); | 154 memoryCache()->add(resource.get()); |
154 ResourceResponse response; | 155 ResourceResponse response; |
155 response.setURL(url); | 156 response.setURL(url); |
156 response.setHTTPStatusCode(200); | 157 response.setHTTPStatusCode(200); |
157 response.setHTTPHeaderField("Cache-Control", "max-age=3600"); | 158 response.setHTTPHeaderField("Cache-Control", "max-age=3600"); |
158 response.setHTTPHeaderField("Vary", "*"); | 159 response.setHTTPHeaderField("Vary", "*"); |
159 resource->responseReceived(response, nullptr); | 160 resource->responseReceived(response, nullptr); |
160 resource->finish(); | 161 resource->finish(); |
161 ASSERT_TRUE(resource->hasVaryHeader()); | 162 ASSERT_TRUE(resource->hasVaryHeader()); |
162 | 163 |
163 FetchRequest fetchRequest = FetchRequest(url, FetchInitiatorInfo()); | 164 FetchRequest fetchRequest = FetchRequest(url, FetchInitiatorInfo()); |
164 Platform::current()->unitTestSupport()->registerMockedURL(url, WebURLRespons
e(), ""); | |
165 ResourcePtr<Resource> newResource = fetcher->requestResource(fetchRequest, T
estResourceFactory()); | 165 ResourcePtr<Resource> newResource = fetcher->requestResource(fetchRequest, T
estResourceFactory()); |
166 EXPECT_NE(resource, newResource); | 166 EXPECT_EQ(resource, newResource); |
| 167 |
| 168 memoryCache()->remove(newResource.get()); |
| 169 } |
| 170 |
| 171 TEST_F(ResourceFetcherTest, VaryImage) |
| 172 { |
| 173 ResourceFetcher* fetcher = ResourceFetcher::create(ResourceFetcherTestMockFe
tchContext::create()); |
| 174 |
| 175 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.html"); |
| 176 ResourceResponse response; |
| 177 response.setURL(url); |
| 178 response.setHTTPStatusCode(200); |
| 179 response.setHTTPHeaderField("Cache-Control", "max-age=3600"); |
| 180 response.setHTTPHeaderField("Vary", "*"); |
| 181 URLTestHelpers::registerMockedURLLoadWithCustomResponse(url, "white-1x1.png"
, WebString::fromUTF8(""), WrappedResourceResponse(response)); |
| 182 |
| 183 FetchRequest fetchRequestOriginal = FetchRequest(url, FetchInitiatorInfo()); |
| 184 ResourcePtr<Resource> resource = fetcher->requestResource(fetchRequestOrigin
al, TestResourceFactory(Resource::Image)); |
| 185 ASSERT_TRUE(resource.get()); |
| 186 Platform::current()->unitTestSupport()->serveAsynchronousMockedRequests(); |
| 187 ASSERT_TRUE(resource->hasVaryHeader()); |
| 188 |
| 189 FetchRequest fetchRequest = FetchRequest(url, FetchInitiatorInfo()); |
| 190 ResourcePtr<Resource> newResource = fetcher->requestResource(fetchRequest, T
estResourceFactory(Resource::Image)); |
| 191 EXPECT_EQ(resource, newResource); |
167 | 192 |
168 memoryCache()->remove(newResource.get()); | 193 memoryCache()->remove(newResource.get()); |
169 Platform::current()->unitTestSupport()->unregisterMockedURL(url); | 194 Platform::current()->unitTestSupport()->unregisterMockedURL(url); |
170 } | 195 } |
171 | 196 |
172 TEST_F(ResourceFetcherTest, RevalidateWhileLoading) | 197 TEST_F(ResourceFetcherTest, RevalidateWhileLoading) |
173 { | 198 { |
174 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.html"); | 199 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.html"); |
175 Platform::current()->unitTestSupport()->registerMockedURL(url, WebURLRespons
e(), ""); | 200 Platform::current()->unitTestSupport()->registerMockedURL(url, WebURLRespons
e(), ""); |
176 | 201 |
177 ResourceFetcher* fetcher1 = ResourceFetcher::create(ResourceFetcherTestMockF
etchContext::create()); | 202 ResourceFetcher* fetcher1 = ResourceFetcher::create(ResourceFetcherTestMockF
etchContext::create()); |
178 ResourceRequest request1(url); | 203 ResourceRequest request1(url); |
179 request1.setHTTPHeaderField("Cache-control", "no-cache"); | 204 request1.setHTTPHeaderField("Cache-control", "no-cache"); |
180 FetchRequest fetchRequest1 = FetchRequest(request1, FetchInitiatorInfo()); | 205 FetchRequest fetchRequest1 = FetchRequest(request1, FetchInitiatorInfo()); |
181 ResourcePtr<Resource> resource1 = fetcher1->requestResource(fetchRequest1, T
estResourceFactory()); | 206 ResourcePtr<Resource> resource1 = fetcher1->requestResource(fetchRequest1, T
estResourceFactory(Resource::Image)); |
182 ResourceResponse response; | 207 ResourceResponse response; |
183 response.setURL(url); | 208 response.setURL(url); |
184 response.setHTTPStatusCode(200); | 209 response.setHTTPStatusCode(200); |
185 response.setHTTPHeaderField("Cache-Control", "max-age=3600"); | 210 response.setHTTPHeaderField("Cache-Control", "max-age=3600"); |
186 response.setHTTPHeaderField("etag", "1234567890"); | 211 response.setHTTPHeaderField("etag", "1234567890"); |
187 resource1->responseReceived(response, nullptr); | 212 resource1->responseReceived(response, nullptr); |
188 resource1->finish(); | 213 resource1->finish(); |
189 | 214 |
190 ResourceFetcherTestMockFetchContext* context = ResourceFetcherTestMockFetchC
ontext::create(); | 215 ResourceFetcherTestMockFetchContext* context = ResourceFetcherTestMockFetchC
ontext::create(); |
191 context->setCachePolicy(CachePolicyRevalidate); | 216 context->setCachePolicy(CachePolicyRevalidate); |
192 ResourceFetcher* fetcher2 = ResourceFetcher::create(context); | 217 ResourceFetcher* fetcher2 = ResourceFetcher::create(context); |
193 FetchRequest fetchRequest2(url, FetchInitiatorInfo()); | 218 FetchRequest fetchRequest2(url, FetchInitiatorInfo()); |
194 ResourcePtr<Resource> resource2 = fetcher2->requestResource(fetchRequest2, T
estResourceFactory()); | 219 ResourcePtr<Resource> resource2 = fetcher2->requestResource(fetchRequest2, T
estResourceFactory(Resource::Image)); |
195 EXPECT_EQ(resource1, resource2); | 220 EXPECT_EQ(resource1, resource2); |
196 } | 221 } |
197 | 222 |
198 } // namespace blink | 223 } // namespace blink |
OLD | NEW |