Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(138)

Side by Side Diff: third_party/WebKit/Source/core/fetch/RawResourceTest.cpp

Issue 1998073002: Move some ResourceClients for testing to Oilpan heap (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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 "core/fetch/RawResource.h" 31 #include "core/fetch/RawResource.h"
32 32
33 #include "core/fetch/MemoryCache.h" 33 #include "core/fetch/MemoryCache.h"
34 #include "core/fetch/ResourceFetcher.h" 34 #include "core/fetch/ResourceFetcher.h"
35 #include "platform/SharedBuffer.h" 35 #include "platform/SharedBuffer.h"
36 #include "platform/heap/Handle.h"
36 #include "platform/testing/UnitTestHelpers.h" 37 #include "platform/testing/UnitTestHelpers.h"
37 #include "public/platform/Platform.h" 38 #include "public/platform/Platform.h"
38 #include "public/platform/WebURL.h" 39 #include "public/platform/WebURL.h"
39 #include "public/platform/WebURLResponse.h" 40 #include "public/platform/WebURLResponse.h"
40 #include "testing/gtest/include/gtest/gtest.h" 41 #include "testing/gtest/include/gtest/gtest.h"
41 42
42 namespace blink { 43 namespace blink {
43 44
44 TEST(RawResourceTest, DontIgnoreAcceptForCacheReuse) 45 TEST(RawResourceTest, DontIgnoreAcceptForCacheReuse)
45 { 46 {
46 ResourceRequest jpegRequest; 47 ResourceRequest jpegRequest;
47 jpegRequest.setHTTPAccept("image/jpeg"); 48 jpegRequest.setHTTPAccept("image/jpeg");
48 49
49 RawResource* jpegResource(RawResource::create(jpegRequest, Resource::Raw)); 50 RawResource* jpegResource(RawResource::create(jpegRequest, Resource::Raw));
50 51
51 ResourceRequest pngRequest; 52 ResourceRequest pngRequest;
52 pngRequest.setHTTPAccept("image/png"); 53 pngRequest.setHTTPAccept("image/png");
53 54
54 ASSERT_FALSE(jpegResource->canReuse(pngRequest)); 55 ASSERT_FALSE(jpegResource->canReuse(pngRequest));
55 } 56 }
56 57
57 class DummyClient final : public RawResourceClient { 58 class DummyClient final : public GarbageCollectedFinalized<DummyClient>, public RawResourceClient {
58 public: 59 public:
59 DummyClient() : m_called(false) {} 60 DummyClient() : m_called(false) {}
60 ~DummyClient() override {} 61 ~DummyClient() override {}
61 62
62 // ResourceClient implementation. 63 // ResourceClient implementation.
63 void notifyFinished(Resource* resource) override 64 void notifyFinished(Resource* resource) override
64 { 65 {
65 m_called = true; 66 m_called = true;
66 } 67 }
67 String debugName() const override { return "DummyClient"; } 68 String debugName() const override { return "DummyClient"; }
68 69
69 void dataReceived(Resource*, const char* data, size_t length) override 70 void dataReceived(Resource*, const char* data, size_t length) override
70 { 71 {
71 m_data.append(data, length); 72 m_data.append(data, length);
72 } 73 }
73 74
74 bool called() { return m_called; } 75 bool called() { return m_called; }
75 const Vector<char>& data() { return m_data; } 76 const Vector<char>& data() { return m_data; }
77 DEFINE_INLINE_TRACE() {}
78
76 private: 79 private:
77 bool m_called; 80 bool m_called;
78 Vector<char> m_data; 81 Vector<char> m_data;
79 }; 82 };
80 83
81 // This client adds another client when notified. 84 // This client adds another client when notified.
82 class AddingClient : public RawResourceClient { 85 class AddingClient final : public GarbageCollectedFinalized<AddingClient>, publi c RawResourceClient {
83 public: 86 public:
84 AddingClient(DummyClient* client, Resource* resource) 87 AddingClient(DummyClient* client, Resource* resource)
85 : m_dummyClient(client) 88 : m_dummyClient(client)
86 , m_resource(resource) 89 , m_resource(resource)
87 , m_removeClientTimer(this, &AddingClient::removeClient) {} 90 , m_removeClientTimer(this, &AddingClient::removeClient) {}
88 91
89 ~AddingClient() override {} 92 ~AddingClient() override {}
90 93
91 // ResourceClient implementation. 94 // ResourceClient implementation.
92 void notifyFinished(Resource* resource) override 95 void notifyFinished(Resource* resource) override
93 { 96 {
94 // First schedule an asynchronous task to remove the client. 97 // First schedule an asynchronous task to remove the client.
95 // We do not expect the client to be called. 98 // We do not expect the client to be called.
96 m_removeClientTimer.startOneShot(0, BLINK_FROM_HERE); 99 m_removeClientTimer.startOneShot(0, BLINK_FROM_HERE);
97 resource->addClient(m_dummyClient); 100 resource->addClient(m_dummyClient);
98 } 101 }
99 String debugName() const override { return "AddingClient"; } 102 String debugName() const override { return "AddingClient"; }
100 103
101 void removeClient(Timer<AddingClient>* timer) 104 void removeClient(Timer<AddingClient>* timer)
102 { 105 {
103 m_resource->removeClient(m_dummyClient); 106 m_resource->removeClient(m_dummyClient);
104 } 107 }
108
109 DEFINE_INLINE_VIRTUAL_TRACE()
110 {
111 visitor->trace(m_dummyClient);
112 visitor->trace(m_resource);
113 }
114
105 private: 115 private:
106 DummyClient* m_dummyClient; 116 Member<DummyClient> m_dummyClient;
107 Persistent<Resource> m_resource; 117 Member<Resource> m_resource;
108 Timer<AddingClient> m_removeClientTimer; 118 Timer<AddingClient> m_removeClientTimer;
109 }; 119 };
110 120
111 TEST(RawResourceTest, RevalidationSucceeded) 121 TEST(RawResourceTest, RevalidationSucceeded)
112 { 122 {
113 Resource* resource = RawResource::create(ResourceRequest("data:text/html,"), Resource::Raw); 123 Resource* resource = RawResource::create(ResourceRequest("data:text/html,"), Resource::Raw);
114 ResourceResponse response; 124 ResourceResponse response;
115 response.setHTTPStatusCode(200); 125 response.setHTTPStatusCode(200);
116 resource->responseReceived(response, nullptr); 126 resource->responseReceived(response, nullptr);
117 const char data[5] = "abcd"; 127 const char data[5] = "abcd";
118 resource->appendData(data, 4); 128 resource->appendData(data, 4);
119 resource->finish(); 129 resource->finish();
120 memoryCache()->add(resource); 130 memoryCache()->add(resource);
121 131
122 // Simulate a successful revalidation. 132 // Simulate a successful revalidation.
123 resource->setRevalidatingRequest(ResourceRequest("data:text/html,")); 133 resource->setRevalidatingRequest(ResourceRequest("data:text/html,"));
124 134
125 OwnPtr<DummyClient> client = adoptPtr(new DummyClient); 135 Persistent<DummyClient> client = new DummyClient;
126 resource->addClient(client.get()); 136 resource->addClient(client);
127 137
128 ResourceResponse revalidatingResponse; 138 ResourceResponse revalidatingResponse;
129 revalidatingResponse.setHTTPStatusCode(304); 139 revalidatingResponse.setHTTPStatusCode(304);
130 resource->responseReceived(revalidatingResponse, nullptr); 140 resource->responseReceived(revalidatingResponse, nullptr);
131 EXPECT_FALSE(resource->isCacheValidator()); 141 EXPECT_FALSE(resource->isCacheValidator());
132 EXPECT_EQ(200, resource->response().httpStatusCode()); 142 EXPECT_EQ(200, resource->response().httpStatusCode());
133 EXPECT_EQ(4u, resource->resourceBuffer()->size()); 143 EXPECT_EQ(4u, resource->resourceBuffer()->size());
134 EXPECT_EQ(memoryCache()->resourceForURL(KURL(ParsedURLString, "data:text/htm l,")), resource); 144 EXPECT_EQ(memoryCache()->resourceForURL(KURL(ParsedURLString, "data:text/htm l,")), resource);
135 memoryCache()->remove(resource); 145 memoryCache()->remove(resource);
136 146
137 resource->removeClient(client.get()); 147 resource->removeClient(client);
138 EXPECT_FALSE(resource->hasClientsOrObservers()); 148 EXPECT_FALSE(resource->hasClientsOrObservers());
139 EXPECT_FALSE(client->called()); 149 EXPECT_FALSE(client->called());
140 EXPECT_EQ("abcd", String(client->data().data(), client->data().size())); 150 EXPECT_EQ("abcd", String(client->data().data(), client->data().size()));
141 } 151 }
142 152
143 TEST(RawResourceTest, RevalidationSucceededForResourceWithoutBody) 153 TEST(RawResourceTest, RevalidationSucceededForResourceWithoutBody)
144 { 154 {
145 Resource* resource = RawResource::create(ResourceRequest("data:text/html,"), Resource::Raw); 155 Resource* resource = RawResource::create(ResourceRequest("data:text/html,"), Resource::Raw);
146 ResourceResponse response; 156 ResourceResponse response;
147 response.setHTTPStatusCode(200); 157 response.setHTTPStatusCode(200);
148 resource->responseReceived(response, nullptr); 158 resource->responseReceived(response, nullptr);
149 resource->finish(); 159 resource->finish();
150 memoryCache()->add(resource); 160 memoryCache()->add(resource);
151 161
152 // Simulate a successful revalidation. 162 // Simulate a successful revalidation.
153 resource->setRevalidatingRequest(ResourceRequest("data:text/html,")); 163 resource->setRevalidatingRequest(ResourceRequest("data:text/html,"));
154 164
155 OwnPtr<DummyClient> client = adoptPtr(new DummyClient); 165 Persistent<DummyClient> client = new DummyClient;
156 resource->addClient(client.get()); 166 resource->addClient(client);
157 167
158 ResourceResponse revalidatingResponse; 168 ResourceResponse revalidatingResponse;
159 revalidatingResponse.setHTTPStatusCode(304); 169 revalidatingResponse.setHTTPStatusCode(304);
160 resource->responseReceived(revalidatingResponse, nullptr); 170 resource->responseReceived(revalidatingResponse, nullptr);
161 EXPECT_FALSE(resource->isCacheValidator()); 171 EXPECT_FALSE(resource->isCacheValidator());
162 EXPECT_EQ(200, resource->response().httpStatusCode()); 172 EXPECT_EQ(200, resource->response().httpStatusCode());
163 EXPECT_EQ(nullptr, resource->resourceBuffer()); 173 EXPECT_EQ(nullptr, resource->resourceBuffer());
164 EXPECT_EQ(memoryCache()->resourceForURL(KURL(ParsedURLString, "data:text/htm l,")), resource); 174 EXPECT_EQ(memoryCache()->resourceForURL(KURL(ParsedURLString, "data:text/htm l,")), resource);
165 memoryCache()->remove(resource); 175 memoryCache()->remove(resource);
166 176
167 resource->removeClient(client.get()); 177 resource->removeClient(client);
168 EXPECT_FALSE(resource->hasClientsOrObservers()); 178 EXPECT_FALSE(resource->hasClientsOrObservers());
169 EXPECT_FALSE(client->called()); 179 EXPECT_FALSE(client->called());
170 EXPECT_EQ(0u, client->data().size()); 180 EXPECT_EQ(0u, client->data().size());
171 } 181 }
172 182
173 TEST(RawResourceTest, RevalidationSucceededUpdateHeaders) 183 TEST(RawResourceTest, RevalidationSucceededUpdateHeaders)
174 { 184 {
175 Resource* resource = RawResource::create(ResourceRequest("data:text/html,"), Resource::Raw); 185 Resource* resource = RawResource::create(ResourceRequest("data:text/html,"), Resource::Raw);
176 ResourceResponse response; 186 ResourceResponse response;
177 response.setHTTPStatusCode(200); 187 response.setHTTPStatusCode(200);
(...skipping 12 matching lines...) Expand all
190 200
191 // Validate that these headers pre-update. 201 // Validate that these headers pre-update.
192 EXPECT_EQ("keep-alive value", resource->response().httpHeaderField("keep-ali ve")); 202 EXPECT_EQ("keep-alive value", resource->response().httpHeaderField("keep-ali ve"));
193 EXPECT_EQ("expires value", resource->response().httpHeaderField("expires")); 203 EXPECT_EQ("expires value", resource->response().httpHeaderField("expires"));
194 EXPECT_EQ("last-modified value", resource->response().httpHeaderField("last- modified")); 204 EXPECT_EQ("last-modified value", resource->response().httpHeaderField("last- modified"));
195 EXPECT_EQ("proxy-authenticate value", resource->response().httpHeaderField(" proxy-authenticate")); 205 EXPECT_EQ("proxy-authenticate value", resource->response().httpHeaderField(" proxy-authenticate"));
196 EXPECT_EQ("proxy-authenticate value", resource->response().httpHeaderField(" proxy-authenticate")); 206 EXPECT_EQ("proxy-authenticate value", resource->response().httpHeaderField(" proxy-authenticate"));
197 EXPECT_EQ("proxy-connection value", resource->response().httpHeaderField("pr oxy-connection")); 207 EXPECT_EQ("proxy-connection value", resource->response().httpHeaderField("pr oxy-connection"));
198 EXPECT_EQ("custom value", resource->response().httpHeaderField("x-custom")); 208 EXPECT_EQ("custom value", resource->response().httpHeaderField("x-custom"));
199 209
200 OwnPtr<DummyClient> client = adoptPtr(new DummyClient); 210 Persistent<DummyClient> client = new DummyClient;
201 resource->addClient(client.get()); 211 resource->addClient(client.get());
202 212
203 // Perform a revalidation step. 213 // Perform a revalidation step.
204 ResourceResponse revalidatingResponse; 214 ResourceResponse revalidatingResponse;
205 revalidatingResponse.setHTTPStatusCode(304); 215 revalidatingResponse.setHTTPStatusCode(304);
206 // Headers that aren't copied with an 304 code. 216 // Headers that aren't copied with an 304 code.
207 revalidatingResponse.addHTTPHeaderField("keep-alive", "garbage"); 217 revalidatingResponse.addHTTPHeaderField("keep-alive", "garbage");
208 revalidatingResponse.addHTTPHeaderField("expires", "garbage"); 218 revalidatingResponse.addHTTPHeaderField("expires", "garbage");
209 revalidatingResponse.addHTTPHeaderField("last-modified", "garbage"); 219 revalidatingResponse.addHTTPHeaderField("last-modified", "garbage");
210 revalidatingResponse.addHTTPHeaderField("proxy-authenticate", "garbage"); 220 revalidatingResponse.addHTTPHeaderField("proxy-authenticate", "garbage");
211 revalidatingResponse.addHTTPHeaderField("proxy-connection", "garbage"); 221 revalidatingResponse.addHTTPHeaderField("proxy-connection", "garbage");
212 // Header that is updated with 304 code. 222 // Header that is updated with 304 code.
213 revalidatingResponse.addHTTPHeaderField("x-custom", "updated"); 223 revalidatingResponse.addHTTPHeaderField("x-custom", "updated");
214 resource->responseReceived(revalidatingResponse, nullptr); 224 resource->responseReceived(revalidatingResponse, nullptr);
215 225
216 // Validate the original response. 226 // Validate the original response.
217 EXPECT_EQ(200, resource->response().httpStatusCode()); 227 EXPECT_EQ(200, resource->response().httpStatusCode());
218 228
219 // Validate that these headers are not updated. 229 // Validate that these headers are not updated.
220 EXPECT_EQ("keep-alive value", resource->response().httpHeaderField("keep-ali ve")); 230 EXPECT_EQ("keep-alive value", resource->response().httpHeaderField("keep-ali ve"));
221 EXPECT_EQ("expires value", resource->response().httpHeaderField("expires")); 231 EXPECT_EQ("expires value", resource->response().httpHeaderField("expires"));
222 EXPECT_EQ("last-modified value", resource->response().httpHeaderField("last- modified")); 232 EXPECT_EQ("last-modified value", resource->response().httpHeaderField("last- modified"));
223 EXPECT_EQ("proxy-authenticate value", resource->response().httpHeaderField(" proxy-authenticate")); 233 EXPECT_EQ("proxy-authenticate value", resource->response().httpHeaderField(" proxy-authenticate"));
224 EXPECT_EQ("proxy-authenticate value", resource->response().httpHeaderField(" proxy-authenticate")); 234 EXPECT_EQ("proxy-authenticate value", resource->response().httpHeaderField(" proxy-authenticate"));
225 EXPECT_EQ("proxy-connection value", resource->response().httpHeaderField("pr oxy-connection")); 235 EXPECT_EQ("proxy-connection value", resource->response().httpHeaderField("pr oxy-connection"));
226 EXPECT_EQ("updated", resource->response().httpHeaderField("x-custom")); 236 EXPECT_EQ("updated", resource->response().httpHeaderField("x-custom"));
227 237
228 memoryCache()->remove(resource); 238 memoryCache()->remove(resource);
229 239
230 resource->removeClient(client.get()); 240 resource->removeClient(client);
231 EXPECT_FALSE(resource->hasClientsOrObservers()); 241 EXPECT_FALSE(resource->hasClientsOrObservers());
232 EXPECT_FALSE(client->called()); 242 EXPECT_FALSE(client->called());
233 EXPECT_EQ(0u, client->data().size()); 243 EXPECT_EQ(0u, client->data().size());
234 } 244 }
235 245
236 TEST(RawResourceTest, AddClientDuringCallback) 246 TEST(RawResourceTest, AddClientDuringCallback)
237 { 247 {
238 Resource* raw = RawResource::create(ResourceRequest("data:text/html,"), Reso urce::Raw); 248 Resource* raw = RawResource::create(ResourceRequest("data:text/html,"), Reso urce::Raw);
239 249
240 // Create a non-null response. 250 // Create a non-null response.
241 ResourceResponse response = raw->response(); 251 ResourceResponse response = raw->response();
242 response.setURL(KURL(ParsedURLString, "http://600.613/")); 252 response.setURL(KURL(ParsedURLString, "http://600.613/"));
243 raw->setResponse(response); 253 raw->setResponse(response);
244 raw->finish(); 254 raw->finish();
245 EXPECT_FALSE(raw->response().isNull()); 255 EXPECT_FALSE(raw->response().isNull());
246 256
247 OwnPtr<DummyClient> dummyClient = adoptPtr(new DummyClient()); 257 Persistent<DummyClient> dummyClient = new DummyClient();
248 OwnPtr<AddingClient> addingClient = adoptPtr(new AddingClient(dummyClient.ge t(), raw)); 258 Persistent<AddingClient> addingClient = new AddingClient(dummyClient.get(), raw);
249 raw->addClient(addingClient.get()); 259 raw->addClient(addingClient);
250 testing::runPendingTasks(); 260 testing::runPendingTasks();
251 raw->removeClient(addingClient.get()); 261 raw->removeClient(addingClient);
252 EXPECT_FALSE(dummyClient->called()); 262 EXPECT_FALSE(dummyClient->called());
253 EXPECT_FALSE(raw->hasClientsOrObservers()); 263 EXPECT_FALSE(raw->hasClientsOrObservers());
254 } 264 }
255 265
256 // This client removes another client when notified. 266 // This client removes another client when notified.
257 class RemovingClient : public RawResourceClient { 267 class RemovingClient : public GarbageCollectedFinalized<RemovingClient>, public RawResourceClient {
258 public: 268 public:
259 RemovingClient(DummyClient* client) 269 RemovingClient(DummyClient* client)
260 : m_dummyClient(client) {} 270 : m_dummyClient(client) {}
261 271
262 ~RemovingClient() override {} 272 ~RemovingClient() override {}
263 273
264 // ResourceClient implementation. 274 // ResourceClient implementation.
265 void notifyFinished(Resource* resource) override 275 void notifyFinished(Resource* resource) override
266 { 276 {
267 resource->removeClient(m_dummyClient); 277 resource->removeClient(m_dummyClient);
268 resource->removeClient(this); 278 resource->removeClient(this);
269 } 279 }
270 String debugName() const override { return "RemovingClient"; } 280 String debugName() const override { return "RemovingClient"; }
281 DEFINE_INLINE_TRACE()
282 {
283 visitor->trace(m_dummyClient);
284 }
285
271 private: 286 private:
272 DummyClient* m_dummyClient; 287 Member<DummyClient> m_dummyClient;
273 }; 288 };
274 289
275 TEST(RawResourceTest, RemoveClientDuringCallback) 290 TEST(RawResourceTest, RemoveClientDuringCallback)
276 { 291 {
277 Resource* raw = RawResource::create(ResourceRequest("data:text/html,"), Reso urce::Raw); 292 Resource* raw = RawResource::create(ResourceRequest("data:text/html,"), Reso urce::Raw);
278 293
279 // Create a non-null response. 294 // Create a non-null response.
280 ResourceResponse response = raw->response(); 295 ResourceResponse response = raw->response();
281 response.setURL(KURL(ParsedURLString, "http://600.613/")); 296 response.setURL(KURL(ParsedURLString, "http://600.613/"));
282 raw->setResponse(response); 297 raw->setResponse(response);
283 raw->finish(); 298 raw->finish();
284 EXPECT_FALSE(raw->response().isNull()); 299 EXPECT_FALSE(raw->response().isNull());
285 300
286 OwnPtr<DummyClient> dummyClient = adoptPtr(new DummyClient()); 301 Persistent<DummyClient> dummyClient = new DummyClient();
287 OwnPtr<RemovingClient> removingClient = adoptPtr(new RemovingClient(dummyCli ent.get())); 302 Persistent<RemovingClient> removingClient = new RemovingClient(dummyClient.g et());
288 raw->addClient(dummyClient.get()); 303 raw->addClient(dummyClient);
289 raw->addClient(removingClient.get()); 304 raw->addClient(removingClient);
290 testing::runPendingTasks(); 305 testing::runPendingTasks();
291 EXPECT_FALSE(raw->hasClientsOrObservers()); 306 EXPECT_FALSE(raw->hasClientsOrObservers());
292 } 307 }
293 308
294 TEST(RawResourceTest, CanReuseDevToolsEmulateNetworkConditionsClientIdHeader) 309 TEST(RawResourceTest, CanReuseDevToolsEmulateNetworkConditionsClientIdHeader)
295 { 310 {
296 ResourceRequest request("data:text/html,"); 311 ResourceRequest request("data:text/html,");
297 request.setHTTPHeaderField(HTTPNames::X_DevTools_Emulate_Network_Conditions_ Client_Id, "Foo"); 312 request.setHTTPHeaderField(HTTPNames::X_DevTools_Emulate_Network_Conditions_ Client_Id, "Foo");
298 Resource* raw = RawResource::create(request, Resource::Raw); 313 Resource* raw = RawResource::create(request, Resource::Raw);
299 EXPECT_TRUE(raw->canReuse(ResourceRequest("data:text/html,"))); 314 EXPECT_TRUE(raw->canReuse(ResourceRequest("data:text/html,")));
300 } 315 }
301 316
302 } // namespace blink 317 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698