OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include <string> | 5 #include <string> |
6 | 6 |
7 #include "base/file_util.h" | 7 #include "base/file_util.h" |
| 8 #include "base/memory/scoped_ptr.h" |
8 #include "base/message_loop/message_loop.h" | 9 #include "base/message_loop/message_loop.h" |
9 #include "base/strings/string_number_conversions.h" | 10 #include "base/strings/string_number_conversions.h" |
10 #include "base/strings/string_util.h" | 11 #include "base/strings/string_util.h" |
11 #include "base/values.h" | 12 #include "base/values.h" |
12 #include "chrome/common/chrome_paths.h" | 13 #include "chrome/common/chrome_paths.h" |
13 //#include "chrome/common/url_constants.h" | 14 //#include "chrome/common/url_constants.h" |
14 #include "content/public/browser/resource_request_info.h" | 15 #include "content/public/browser/resource_request_info.h" |
15 #include "content/public/test/mock_resource_context.h" | 16 #include "content/public/test/mock_resource_context.h" |
16 #include "content/public/test/test_browser_thread_bundle.h" | 17 #include "content/public/test/test_browser_thread_bundle.h" |
17 #include "extensions/browser/extension_protocols.h" | 18 #include "extensions/browser/extension_protocols.h" |
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
170 scoped_refptr<Extension> extension = | 171 scoped_refptr<Extension> extension = |
171 CreateTestExtension(cases[i].name, cases[i].incognito_split_mode); | 172 CreateTestExtension(cases[i].name, cases[i].incognito_split_mode); |
172 extension_info_map_->AddExtension( | 173 extension_info_map_->AddExtension( |
173 extension.get(), base::Time::Now(), cases[i].incognito_enabled, false); | 174 extension.get(), base::Time::Now(), cases[i].incognito_enabled, false); |
174 | 175 |
175 // First test a main frame request. | 176 // First test a main frame request. |
176 { | 177 { |
177 // It doesn't matter that the resource doesn't exist. If the resource | 178 // It doesn't matter that the resource doesn't exist. If the resource |
178 // is blocked, we should see ADDRESS_UNREACHABLE. Otherwise, the request | 179 // is blocked, we should see ADDRESS_UNREACHABLE. Otherwise, the request |
179 // should just fail because the file doesn't exist. | 180 // should just fail because the file doesn't exist. |
180 net::URLRequest request(extension->GetResourceURL("404.html"), | 181 scoped_ptr<net::URLRequest> request( |
181 net::DEFAULT_PRIORITY, | 182 resource_context_.GetRequestContext()->CreateRequest( |
182 &test_delegate_, | 183 extension->GetResourceURL("404.html"), |
183 resource_context_.GetRequestContext()); | 184 net::DEFAULT_PRIORITY, |
184 StartRequest(&request, content::RESOURCE_TYPE_MAIN_FRAME); | 185 &test_delegate_, |
185 EXPECT_EQ(net::URLRequestStatus::FAILED, request.status().status()); | 186 NULL)); |
| 187 StartRequest(request.get(), content::RESOURCE_TYPE_MAIN_FRAME); |
| 188 EXPECT_EQ(net::URLRequestStatus::FAILED, request->status().status()); |
186 | 189 |
187 if (cases[i].should_allow_main_frame_load) { | 190 if (cases[i].should_allow_main_frame_load) { |
188 EXPECT_EQ(net::ERR_FILE_NOT_FOUND, request.status().error()) << | 191 EXPECT_EQ(net::ERR_FILE_NOT_FOUND, request->status().error()) << |
189 cases[i].name; | 192 cases[i].name; |
190 } else { | 193 } else { |
191 EXPECT_EQ(net::ERR_ADDRESS_UNREACHABLE, request.status().error()) << | 194 EXPECT_EQ(net::ERR_ADDRESS_UNREACHABLE, request->status().error()) << |
192 cases[i].name; | 195 cases[i].name; |
193 } | 196 } |
194 } | 197 } |
195 | 198 |
196 // Now do a subframe request. | 199 // Now do a subframe request. |
197 { | 200 { |
198 net::URLRequest request(extension->GetResourceURL("404.html"), | 201 scoped_ptr<net::URLRequest> request( |
199 net::DEFAULT_PRIORITY, | 202 resource_context_.GetRequestContext()->CreateRequest( |
200 &test_delegate_, | 203 extension->GetResourceURL("404.html"), |
201 resource_context_.GetRequestContext()); | 204 net::DEFAULT_PRIORITY, |
202 StartRequest(&request, content::RESOURCE_TYPE_SUB_FRAME); | 205 &test_delegate_, |
203 EXPECT_EQ(net::URLRequestStatus::FAILED, request.status().status()); | 206 NULL)); |
| 207 StartRequest(request.get(), content::RESOURCE_TYPE_SUB_FRAME); |
| 208 EXPECT_EQ(net::URLRequestStatus::FAILED, request->status().status()); |
204 | 209 |
205 if (cases[i].should_allow_sub_frame_load) { | 210 if (cases[i].should_allow_sub_frame_load) { |
206 EXPECT_EQ(net::ERR_FILE_NOT_FOUND, request.status().error()) << | 211 EXPECT_EQ(net::ERR_FILE_NOT_FOUND, request->status().error()) << |
207 cases[i].name; | 212 cases[i].name; |
208 } else { | 213 } else { |
209 EXPECT_EQ(net::ERR_ADDRESS_UNREACHABLE, request.status().error()) << | 214 EXPECT_EQ(net::ERR_ADDRESS_UNREACHABLE, request->status().error()) << |
210 cases[i].name; | 215 cases[i].name; |
211 } | 216 } |
212 } | 217 } |
213 } | 218 } |
214 } | 219 } |
215 | 220 |
216 void CheckForContentLengthHeader(net::URLRequest* request) { | 221 void CheckForContentLengthHeader(net::URLRequest* request) { |
217 std::string content_length; | 222 std::string content_length; |
218 request->GetResponseHeaderByName(net::HttpRequestHeaders::kContentLength, | 223 request->GetResponseHeaderByName(net::HttpRequestHeaders::kContentLength, |
219 &content_length); | 224 &content_length); |
(...skipping 10 matching lines...) Expand all Loading... |
230 SetProtocolHandler(false); | 235 SetProtocolHandler(false); |
231 | 236 |
232 scoped_refptr<Extension> extension = CreateWebStoreExtension(); | 237 scoped_refptr<Extension> extension = CreateWebStoreExtension(); |
233 extension_info_map_->AddExtension(extension.get(), | 238 extension_info_map_->AddExtension(extension.get(), |
234 base::Time::Now(), | 239 base::Time::Now(), |
235 false, | 240 false, |
236 false); | 241 false); |
237 | 242 |
238 // First test it with the extension enabled. | 243 // First test it with the extension enabled. |
239 { | 244 { |
240 net::URLRequest request(extension->GetResourceURL("webstore_icon_16.png"), | 245 scoped_ptr<net::URLRequest> request( |
241 net::DEFAULT_PRIORITY, | 246 resource_context_.GetRequestContext()->CreateRequest( |
242 &test_delegate_, | 247 extension->GetResourceURL("webstore_icon_16.png"), |
243 resource_context_.GetRequestContext()); | 248 net::DEFAULT_PRIORITY, |
244 StartRequest(&request, content::RESOURCE_TYPE_MEDIA); | 249 &test_delegate_, |
245 EXPECT_EQ(net::URLRequestStatus::SUCCESS, request.status().status()); | 250 NULL)); |
246 CheckForContentLengthHeader(&request); | 251 StartRequest(request.get(), content::RESOURCE_TYPE_MEDIA); |
| 252 EXPECT_EQ(net::URLRequestStatus::SUCCESS, request->status().status()); |
| 253 CheckForContentLengthHeader(request.get()); |
247 } | 254 } |
248 | 255 |
249 // And then test it with the extension disabled. | 256 // And then test it with the extension disabled. |
250 extension_info_map_->RemoveExtension(extension->id(), | 257 extension_info_map_->RemoveExtension(extension->id(), |
251 UnloadedExtensionInfo::REASON_DISABLE); | 258 UnloadedExtensionInfo::REASON_DISABLE); |
252 { | 259 { |
253 net::URLRequest request(extension->GetResourceURL("webstore_icon_16.png"), | 260 scoped_ptr<net::URLRequest> request( |
254 net::DEFAULT_PRIORITY, | 261 resource_context_.GetRequestContext()->CreateRequest( |
255 &test_delegate_, | 262 extension->GetResourceURL("webstore_icon_16.png"), |
256 resource_context_.GetRequestContext()); | 263 net::DEFAULT_PRIORITY, |
257 StartRequest(&request, content::RESOURCE_TYPE_MEDIA); | 264 &test_delegate_, |
258 EXPECT_EQ(net::URLRequestStatus::SUCCESS, request.status().status()); | 265 NULL)); |
259 CheckForContentLengthHeader(&request); | 266 StartRequest(request.get(), content::RESOURCE_TYPE_MEDIA); |
| 267 EXPECT_EQ(net::URLRequestStatus::SUCCESS, request->status().status()); |
| 268 CheckForContentLengthHeader(request.get()); |
260 } | 269 } |
261 } | 270 } |
262 | 271 |
263 // Tests that a URL request for resource from an extension returns a few | 272 // Tests that a URL request for resource from an extension returns a few |
264 // expected response headers. | 273 // expected response headers. |
265 TEST_F(ExtensionProtocolTest, ResourceRequestResponseHeaders) { | 274 TEST_F(ExtensionProtocolTest, ResourceRequestResponseHeaders) { |
266 // Register a non-incognito extension protocol handler. | 275 // Register a non-incognito extension protocol handler. |
267 SetProtocolHandler(false); | 276 SetProtocolHandler(false); |
268 | 277 |
269 scoped_refptr<Extension> extension = CreateTestResponseHeaderExtension(); | 278 scoped_refptr<Extension> extension = CreateTestResponseHeaderExtension(); |
270 extension_info_map_->AddExtension(extension.get(), | 279 extension_info_map_->AddExtension(extension.get(), |
271 base::Time::Now(), | 280 base::Time::Now(), |
272 false, | 281 false, |
273 false); | 282 false); |
274 | 283 |
275 { | 284 { |
276 net::URLRequest request(extension->GetResourceURL("test.dat"), | 285 scoped_ptr<net::URLRequest> request( |
277 net::DEFAULT_PRIORITY, | 286 resource_context_.GetRequestContext()->CreateRequest( |
278 &test_delegate_, | 287 extension->GetResourceURL("test.dat"), |
279 resource_context_.GetRequestContext()); | 288 net::DEFAULT_PRIORITY, |
280 StartRequest(&request, content::RESOURCE_TYPE_MEDIA); | 289 &test_delegate_, |
281 EXPECT_EQ(net::URLRequestStatus::SUCCESS, request.status().status()); | 290 NULL)); |
| 291 StartRequest(request.get(), content::RESOURCE_TYPE_MEDIA); |
| 292 EXPECT_EQ(net::URLRequestStatus::SUCCESS, request->status().status()); |
282 | 293 |
283 // Check that cache-related headers are set. | 294 // Check that cache-related headers are set. |
284 std::string etag; | 295 std::string etag; |
285 request.GetResponseHeaderByName("ETag", &etag); | 296 request->GetResponseHeaderByName("ETag", &etag); |
286 EXPECT_TRUE(StartsWithASCII(etag, "\"", false)); | 297 EXPECT_TRUE(StartsWithASCII(etag, "\"", false)); |
287 EXPECT_TRUE(EndsWith(etag, "\"", false)); | 298 EXPECT_TRUE(EndsWith(etag, "\"", false)); |
288 | 299 |
289 std::string revalidation_header; | 300 std::string revalidation_header; |
290 request.GetResponseHeaderByName("cache-control", &revalidation_header); | 301 request->GetResponseHeaderByName("cache-control", &revalidation_header); |
291 EXPECT_EQ("no-cache", revalidation_header); | 302 EXPECT_EQ("no-cache", revalidation_header); |
292 | 303 |
293 // We set test.dat as web-accessible, so it should have a CORS header. | 304 // We set test.dat as web-accessible, so it should have a CORS header. |
294 std::string access_control; | 305 std::string access_control; |
295 request.GetResponseHeaderByName("Access-Control-Allow-Origin", | 306 request->GetResponseHeaderByName("Access-Control-Allow-Origin", |
296 &access_control); | 307 &access_control); |
297 EXPECT_EQ("*", access_control); | 308 EXPECT_EQ("*", access_control); |
298 } | 309 } |
299 } | 310 } |
300 | 311 |
301 // Tests that a URL request for main frame or subframe from an extension | 312 // Tests that a URL request for main frame or subframe from an extension |
302 // succeeds, but subresources fail. See http://crbug.com/312269. | 313 // succeeds, but subresources fail. See http://crbug.com/312269. |
303 TEST_F(ExtensionProtocolTest, AllowFrameRequests) { | 314 TEST_F(ExtensionProtocolTest, AllowFrameRequests) { |
304 // Register a non-incognito extension protocol handler. | 315 // Register a non-incognito extension protocol handler. |
305 SetProtocolHandler(false); | 316 SetProtocolHandler(false); |
306 | 317 |
307 scoped_refptr<Extension> extension = CreateTestExtension("foo", false); | 318 scoped_refptr<Extension> extension = CreateTestExtension("foo", false); |
308 extension_info_map_->AddExtension(extension.get(), | 319 extension_info_map_->AddExtension(extension.get(), |
309 base::Time::Now(), | 320 base::Time::Now(), |
310 false, | 321 false, |
311 false); | 322 false); |
312 | 323 |
313 // All MAIN_FRAME and SUB_FRAME requests should succeed. | 324 // All MAIN_FRAME and SUB_FRAME requests should succeed. |
314 { | 325 { |
315 net::URLRequest request(extension->GetResourceURL("test.dat"), | 326 scoped_ptr<net::URLRequest> request( |
316 net::DEFAULT_PRIORITY, | 327 resource_context_.GetRequestContext()->CreateRequest( |
317 &test_delegate_, | 328 extension->GetResourceURL("test.dat"), |
318 resource_context_.GetRequestContext()); | 329 net::DEFAULT_PRIORITY, |
319 StartRequest(&request, content::RESOURCE_TYPE_MAIN_FRAME); | 330 &test_delegate_, |
320 EXPECT_EQ(net::URLRequestStatus::SUCCESS, request.status().status()); | 331 NULL)); |
| 332 StartRequest(request.get(), content::RESOURCE_TYPE_MAIN_FRAME); |
| 333 EXPECT_EQ(net::URLRequestStatus::SUCCESS, request->status().status()); |
321 } | 334 } |
322 { | 335 { |
323 net::URLRequest request(extension->GetResourceURL("test.dat"), | 336 scoped_ptr<net::URLRequest> request( |
324 net::DEFAULT_PRIORITY, | 337 resource_context_.GetRequestContext()->CreateRequest( |
325 &test_delegate_, | 338 extension->GetResourceURL("test.dat"), |
326 resource_context_.GetRequestContext()); | 339 net::DEFAULT_PRIORITY, |
327 StartRequest(&request, content::RESOURCE_TYPE_SUB_FRAME); | 340 &test_delegate_, |
328 EXPECT_EQ(net::URLRequestStatus::SUCCESS, request.status().status()); | 341 NULL)); |
| 342 StartRequest(request.get(), content::RESOURCE_TYPE_SUB_FRAME); |
| 343 EXPECT_EQ(net::URLRequestStatus::SUCCESS, request->status().status()); |
329 } | 344 } |
330 | 345 |
331 // And subresource types, such as media, should fail. | 346 // And subresource types, such as media, should fail. |
332 { | 347 { |
333 net::URLRequest request(extension->GetResourceURL("test.dat"), | 348 scoped_ptr<net::URLRequest> request( |
334 net::DEFAULT_PRIORITY, | 349 resource_context_.GetRequestContext()->CreateRequest( |
335 &test_delegate_, | 350 extension->GetResourceURL("test.dat"), |
336 resource_context_.GetRequestContext()); | 351 net::DEFAULT_PRIORITY, |
337 StartRequest(&request, content::RESOURCE_TYPE_MEDIA); | 352 &test_delegate_, |
338 EXPECT_EQ(net::URLRequestStatus::FAILED, request.status().status()); | 353 NULL)); |
| 354 StartRequest(request.get(), content::RESOURCE_TYPE_MEDIA); |
| 355 EXPECT_EQ(net::URLRequestStatus::FAILED, request->status().status()); |
339 } | 356 } |
340 } | 357 } |
341 | 358 |
342 } // namespace extensions | 359 } // namespace extensions |
OLD | NEW |