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 <stddef.h> | 5 #include <stddef.h> |
6 | 6 |
7 #include <memory> | 7 #include <memory> |
8 #include <string> | 8 #include <string> |
9 | 9 |
10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
(...skipping 16 matching lines...) Expand all Loading... |
27 #include "content/public/test/test_browser_thread_bundle.h" | 27 #include "content/public/test/test_browser_thread_bundle.h" |
28 #include "content/public/test/test_utils.h" | 28 #include "content/public/test/test_utils.h" |
29 #include "extensions/browser/content_verifier.h" | 29 #include "extensions/browser/content_verifier.h" |
30 #include "extensions/browser/extension_protocols.h" | 30 #include "extensions/browser/extension_protocols.h" |
31 #include "extensions/browser/info_map.h" | 31 #include "extensions/browser/info_map.h" |
32 #include "extensions/common/constants.h" | 32 #include "extensions/common/constants.h" |
33 #include "extensions/common/extension.h" | 33 #include "extensions/common/extension.h" |
34 #include "extensions/common/extension_builder.h" | 34 #include "extensions/common/extension_builder.h" |
35 #include "extensions/common/file_util.h" | 35 #include "extensions/common/file_util.h" |
36 #include "net/base/request_priority.h" | 36 #include "net/base/request_priority.h" |
| 37 #include "net/traffic_annotation/network_traffic_annotation_test_helper.h" |
37 #include "net/url_request/url_request.h" | 38 #include "net/url_request/url_request.h" |
38 #include "net/url_request/url_request_job_factory_impl.h" | 39 #include "net/url_request/url_request_job_factory_impl.h" |
39 #include "net/url_request/url_request_status.h" | 40 #include "net/url_request/url_request_status.h" |
40 #include "net/url_request/url_request_test_util.h" | 41 #include "net/url_request/url_request_test_util.h" |
41 #include "testing/gtest/include/gtest/gtest.h" | 42 #include "testing/gtest/include/gtest/gtest.h" |
42 | 43 |
43 using content::ResourceType; | 44 using content::ResourceType; |
44 | 45 |
45 namespace extensions { | 46 namespace extensions { |
46 namespace { | 47 namespace { |
(...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
239 int DoRequest(const Extension& extension, const std::string& relative_path) { | 240 int DoRequest(const Extension& extension, const std::string& relative_path) { |
240 if (!extension_info_map_->extensions().Contains(extension.id())) { | 241 if (!extension_info_map_->extensions().Contains(extension.id())) { |
241 extension_info_map_->AddExtension(&extension, | 242 extension_info_map_->AddExtension(&extension, |
242 base::Time::Now(), | 243 base::Time::Now(), |
243 false, // incognito_enabled | 244 false, // incognito_enabled |
244 false); // notifications_disabled | 245 false); // notifications_disabled |
245 } | 246 } |
246 std::unique_ptr<net::URLRequest> request( | 247 std::unique_ptr<net::URLRequest> request( |
247 resource_context_.GetRequestContext()->CreateRequest( | 248 resource_context_.GetRequestContext()->CreateRequest( |
248 extension.GetResourceURL(relative_path), net::DEFAULT_PRIORITY, | 249 extension.GetResourceURL(relative_path), net::DEFAULT_PRIORITY, |
249 &test_delegate_)); | 250 &test_delegate_, TRAFFIC_ANNOTATION_FOR_TESTS)); |
250 StartRequest(request.get(), content::RESOURCE_TYPE_MAIN_FRAME); | 251 StartRequest(request.get(), content::RESOURCE_TYPE_MAIN_FRAME); |
251 return test_delegate_.request_status(); | 252 return test_delegate_.request_status(); |
252 } | 253 } |
253 | 254 |
254 protected: | 255 protected: |
255 content::TestBrowserThreadBundle thread_bundle_; | 256 content::TestBrowserThreadBundle thread_bundle_; |
256 scoped_refptr<InfoMap> extension_info_map_; | 257 scoped_refptr<InfoMap> extension_info_map_; |
257 net::URLRequestJobFactoryImpl job_factory_; | 258 net::URLRequestJobFactoryImpl job_factory_; |
258 const net::URLRequestJobFactory* old_factory_; | 259 const net::URLRequestJobFactory* old_factory_; |
259 net::TestDelegate test_delegate_; | 260 net::TestDelegate test_delegate_; |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
294 extension.get(), base::Time::Now(), cases[i].incognito_enabled, false); | 295 extension.get(), base::Time::Now(), cases[i].incognito_enabled, false); |
295 | 296 |
296 // First test a main frame request. | 297 // First test a main frame request. |
297 { | 298 { |
298 // It doesn't matter that the resource doesn't exist. If the resource | 299 // It doesn't matter that the resource doesn't exist. If the resource |
299 // is blocked, we should see BLOCKED_BY_CLIENT. Otherwise, the request | 300 // is blocked, we should see BLOCKED_BY_CLIENT. Otherwise, the request |
300 // should just fail because the file doesn't exist. | 301 // should just fail because the file doesn't exist. |
301 std::unique_ptr<net::URLRequest> request( | 302 std::unique_ptr<net::URLRequest> request( |
302 resource_context_.GetRequestContext()->CreateRequest( | 303 resource_context_.GetRequestContext()->CreateRequest( |
303 extension->GetResourceURL("404.html"), net::DEFAULT_PRIORITY, | 304 extension->GetResourceURL("404.html"), net::DEFAULT_PRIORITY, |
304 &test_delegate_)); | 305 &test_delegate_, TRAFFIC_ANNOTATION_FOR_TESTS)); |
305 StartRequest(request.get(), content::RESOURCE_TYPE_MAIN_FRAME); | 306 StartRequest(request.get(), content::RESOURCE_TYPE_MAIN_FRAME); |
306 | 307 |
307 if (cases[i].should_allow_main_frame_load) { | 308 if (cases[i].should_allow_main_frame_load) { |
308 EXPECT_EQ(net::ERR_FILE_NOT_FOUND, test_delegate_.request_status()) | 309 EXPECT_EQ(net::ERR_FILE_NOT_FOUND, test_delegate_.request_status()) |
309 << cases[i].name; | 310 << cases[i].name; |
310 } else { | 311 } else { |
311 EXPECT_EQ(net::ERR_BLOCKED_BY_CLIENT, test_delegate_.request_status()) | 312 EXPECT_EQ(net::ERR_BLOCKED_BY_CLIENT, test_delegate_.request_status()) |
312 << cases[i].name; | 313 << cases[i].name; |
313 } | 314 } |
314 } | 315 } |
315 | 316 |
316 // Now do a subframe request. | 317 // Now do a subframe request. |
317 { | 318 { |
318 // With PlzNavigate, the subframe navigation requests are blocked in | 319 // With PlzNavigate, the subframe navigation requests are blocked in |
319 // ExtensionNavigationThrottle which isn't added in this unit test. This | 320 // ExtensionNavigationThrottle which isn't added in this unit test. This |
320 // is tested in an integration test in | 321 // is tested in an integration test in |
321 // ExtensionResourceRequestPolicyTest.IframeNavigateToInaccessible. | 322 // ExtensionResourceRequestPolicyTest.IframeNavigateToInaccessible. |
322 if (!content::IsBrowserSideNavigationEnabled()) { | 323 if (!content::IsBrowserSideNavigationEnabled()) { |
323 std::unique_ptr<net::URLRequest> request( | 324 std::unique_ptr<net::URLRequest> request( |
324 resource_context_.GetRequestContext()->CreateRequest( | 325 resource_context_.GetRequestContext()->CreateRequest( |
325 extension->GetResourceURL("404.html"), net::DEFAULT_PRIORITY, | 326 extension->GetResourceURL("404.html"), net::DEFAULT_PRIORITY, |
326 &test_delegate_)); | 327 &test_delegate_, TRAFFIC_ANNOTATION_FOR_TESTS)); |
327 StartRequest(request.get(), content::RESOURCE_TYPE_SUB_FRAME); | 328 StartRequest(request.get(), content::RESOURCE_TYPE_SUB_FRAME); |
328 | 329 |
329 if (cases[i].should_allow_sub_frame_load) { | 330 if (cases[i].should_allow_sub_frame_load) { |
330 EXPECT_EQ(net::ERR_FILE_NOT_FOUND, test_delegate_.request_status()) | 331 EXPECT_EQ(net::ERR_FILE_NOT_FOUND, test_delegate_.request_status()) |
331 << cases[i].name; | 332 << cases[i].name; |
332 } else { | 333 } else { |
333 EXPECT_EQ(net::ERR_BLOCKED_BY_CLIENT, test_delegate_.request_status()) | 334 EXPECT_EQ(net::ERR_BLOCKED_BY_CLIENT, test_delegate_.request_status()) |
334 << cases[i].name; | 335 << cases[i].name; |
335 } | 336 } |
336 } | 337 } |
(...skipping 21 matching lines...) Expand all Loading... |
358 extension_info_map_->AddExtension(extension.get(), | 359 extension_info_map_->AddExtension(extension.get(), |
359 base::Time::Now(), | 360 base::Time::Now(), |
360 false, | 361 false, |
361 false); | 362 false); |
362 | 363 |
363 // First test it with the extension enabled. | 364 // First test it with the extension enabled. |
364 { | 365 { |
365 std::unique_ptr<net::URLRequest> request( | 366 std::unique_ptr<net::URLRequest> request( |
366 resource_context_.GetRequestContext()->CreateRequest( | 367 resource_context_.GetRequestContext()->CreateRequest( |
367 extension->GetResourceURL("webstore_icon_16.png"), | 368 extension->GetResourceURL("webstore_icon_16.png"), |
368 net::DEFAULT_PRIORITY, &test_delegate_)); | 369 net::DEFAULT_PRIORITY, &test_delegate_, |
| 370 TRAFFIC_ANNOTATION_FOR_TESTS)); |
369 StartRequest(request.get(), content::RESOURCE_TYPE_MEDIA); | 371 StartRequest(request.get(), content::RESOURCE_TYPE_MEDIA); |
370 EXPECT_EQ(net::OK, test_delegate_.request_status()); | 372 EXPECT_EQ(net::OK, test_delegate_.request_status()); |
371 CheckForContentLengthHeader(request.get()); | 373 CheckForContentLengthHeader(request.get()); |
372 } | 374 } |
373 | 375 |
374 // And then test it with the extension disabled. | 376 // And then test it with the extension disabled. |
375 extension_info_map_->RemoveExtension(extension->id(), | 377 extension_info_map_->RemoveExtension(extension->id(), |
376 UnloadedExtensionInfo::REASON_DISABLE); | 378 UnloadedExtensionInfo::REASON_DISABLE); |
377 { | 379 { |
378 std::unique_ptr<net::URLRequest> request( | 380 std::unique_ptr<net::URLRequest> request( |
379 resource_context_.GetRequestContext()->CreateRequest( | 381 resource_context_.GetRequestContext()->CreateRequest( |
380 extension->GetResourceURL("webstore_icon_16.png"), | 382 extension->GetResourceURL("webstore_icon_16.png"), |
381 net::DEFAULT_PRIORITY, &test_delegate_)); | 383 net::DEFAULT_PRIORITY, &test_delegate_, |
| 384 TRAFFIC_ANNOTATION_FOR_TESTS)); |
382 StartRequest(request.get(), content::RESOURCE_TYPE_MEDIA); | 385 StartRequest(request.get(), content::RESOURCE_TYPE_MEDIA); |
383 EXPECT_EQ(net::OK, test_delegate_.request_status()); | 386 EXPECT_EQ(net::OK, test_delegate_.request_status()); |
384 CheckForContentLengthHeader(request.get()); | 387 CheckForContentLengthHeader(request.get()); |
385 } | 388 } |
386 } | 389 } |
387 | 390 |
388 // Tests that a URL request for resource from an extension returns a few | 391 // Tests that a URL request for resource from an extension returns a few |
389 // expected response headers. | 392 // expected response headers. |
390 TEST_F(ExtensionProtocolsTest, ResourceRequestResponseHeaders) { | 393 TEST_F(ExtensionProtocolsTest, ResourceRequestResponseHeaders) { |
391 // Register a non-incognito extension protocol handler. | 394 // Register a non-incognito extension protocol handler. |
392 SetProtocolHandler(false); | 395 SetProtocolHandler(false); |
393 | 396 |
394 scoped_refptr<Extension> extension = CreateTestResponseHeaderExtension(); | 397 scoped_refptr<Extension> extension = CreateTestResponseHeaderExtension(); |
395 extension_info_map_->AddExtension(extension.get(), | 398 extension_info_map_->AddExtension(extension.get(), |
396 base::Time::Now(), | 399 base::Time::Now(), |
397 false, | 400 false, |
398 false); | 401 false); |
399 | 402 |
400 { | 403 { |
401 std::unique_ptr<net::URLRequest> request( | 404 std::unique_ptr<net::URLRequest> request( |
402 resource_context_.GetRequestContext()->CreateRequest( | 405 resource_context_.GetRequestContext()->CreateRequest( |
403 extension->GetResourceURL("test.dat"), net::DEFAULT_PRIORITY, | 406 extension->GetResourceURL("test.dat"), net::DEFAULT_PRIORITY, |
404 &test_delegate_)); | 407 &test_delegate_, TRAFFIC_ANNOTATION_FOR_TESTS)); |
405 StartRequest(request.get(), content::RESOURCE_TYPE_MEDIA); | 408 StartRequest(request.get(), content::RESOURCE_TYPE_MEDIA); |
406 EXPECT_EQ(net::OK, test_delegate_.request_status()); | 409 EXPECT_EQ(net::OK, test_delegate_.request_status()); |
407 | 410 |
408 // Check that cache-related headers are set. | 411 // Check that cache-related headers are set. |
409 std::string etag; | 412 std::string etag; |
410 request->GetResponseHeaderByName("ETag", &etag); | 413 request->GetResponseHeaderByName("ETag", &etag); |
411 EXPECT_TRUE(base::StartsWith(etag, "\"", base::CompareCase::SENSITIVE)); | 414 EXPECT_TRUE(base::StartsWith(etag, "\"", base::CompareCase::SENSITIVE)); |
412 EXPECT_TRUE(base::EndsWith(etag, "\"", base::CompareCase::SENSITIVE)); | 415 EXPECT_TRUE(base::EndsWith(etag, "\"", base::CompareCase::SENSITIVE)); |
413 | 416 |
414 std::string revalidation_header; | 417 std::string revalidation_header; |
(...skipping 20 matching lines...) Expand all Loading... |
435 false, | 438 false, |
436 false); | 439 false); |
437 | 440 |
438 // All MAIN_FRAME requests should succeed. SUB_FRAME requests that are not | 441 // All MAIN_FRAME requests should succeed. SUB_FRAME requests that are not |
439 // explicitly listed in web_accesible_resources or same-origin to the parent | 442 // explicitly listed in web_accesible_resources or same-origin to the parent |
440 // should not succeed. | 443 // should not succeed. |
441 { | 444 { |
442 std::unique_ptr<net::URLRequest> request( | 445 std::unique_ptr<net::URLRequest> request( |
443 resource_context_.GetRequestContext()->CreateRequest( | 446 resource_context_.GetRequestContext()->CreateRequest( |
444 extension->GetResourceURL("test.dat"), net::DEFAULT_PRIORITY, | 447 extension->GetResourceURL("test.dat"), net::DEFAULT_PRIORITY, |
445 &test_delegate_)); | 448 &test_delegate_, TRAFFIC_ANNOTATION_FOR_TESTS)); |
446 StartRequest(request.get(), content::RESOURCE_TYPE_MAIN_FRAME); | 449 StartRequest(request.get(), content::RESOURCE_TYPE_MAIN_FRAME); |
447 EXPECT_EQ(net::OK, test_delegate_.request_status()); | 450 EXPECT_EQ(net::OK, test_delegate_.request_status()); |
448 } | 451 } |
449 { | 452 { |
450 // With PlzNavigate, the subframe navigation requests are blocked in | 453 // With PlzNavigate, the subframe navigation requests are blocked in |
451 // ExtensionNavigationThrottle which isn't added in this unit test. This is | 454 // ExtensionNavigationThrottle which isn't added in this unit test. This is |
452 // tested in an integration test in | 455 // tested in an integration test in |
453 // ExtensionResourceRequestPolicyTest.IframeNavigateToInaccessible. | 456 // ExtensionResourceRequestPolicyTest.IframeNavigateToInaccessible. |
454 if (!content::IsBrowserSideNavigationEnabled()) { | 457 if (!content::IsBrowserSideNavigationEnabled()) { |
455 std::unique_ptr<net::URLRequest> request( | 458 std::unique_ptr<net::URLRequest> request( |
456 resource_context_.GetRequestContext()->CreateRequest( | 459 resource_context_.GetRequestContext()->CreateRequest( |
457 extension->GetResourceURL("test.dat"), net::DEFAULT_PRIORITY, | 460 extension->GetResourceURL("test.dat"), net::DEFAULT_PRIORITY, |
458 &test_delegate_)); | 461 &test_delegate_, TRAFFIC_ANNOTATION_FOR_TESTS)); |
459 StartRequest(request.get(), content::RESOURCE_TYPE_SUB_FRAME); | 462 StartRequest(request.get(), content::RESOURCE_TYPE_SUB_FRAME); |
460 EXPECT_EQ(net::ERR_BLOCKED_BY_CLIENT, test_delegate_.request_status()); | 463 EXPECT_EQ(net::ERR_BLOCKED_BY_CLIENT, test_delegate_.request_status()); |
461 } | 464 } |
462 } | 465 } |
463 | 466 |
464 // And subresource types, such as media, should fail. | 467 // And subresource types, such as media, should fail. |
465 { | 468 { |
466 std::unique_ptr<net::URLRequest> request( | 469 std::unique_ptr<net::URLRequest> request( |
467 resource_context_.GetRequestContext()->CreateRequest( | 470 resource_context_.GetRequestContext()->CreateRequest( |
468 extension->GetResourceURL("test.dat"), net::DEFAULT_PRIORITY, | 471 extension->GetResourceURL("test.dat"), net::DEFAULT_PRIORITY, |
469 &test_delegate_)); | 472 &test_delegate_, TRAFFIC_ANNOTATION_FOR_TESTS)); |
470 StartRequest(request.get(), content::RESOURCE_TYPE_MEDIA); | 473 StartRequest(request.get(), content::RESOURCE_TYPE_MEDIA); |
471 EXPECT_EQ(net::ERR_BLOCKED_BY_CLIENT, test_delegate_.request_status()); | 474 EXPECT_EQ(net::ERR_BLOCKED_BY_CLIENT, test_delegate_.request_status()); |
472 } | 475 } |
473 } | 476 } |
474 | 477 |
475 TEST_F(ExtensionProtocolsTest, MetadataFolder) { | 478 TEST_F(ExtensionProtocolsTest, MetadataFolder) { |
476 SetProtocolHandler(false); | 479 SetProtocolHandler(false); |
477 | 480 |
478 base::FilePath extension_dir = GetTestPath("metadata_folder"); | 481 base::FilePath extension_dir = GetTestPath("metadata_folder"); |
479 std::string error; | 482 std::string error; |
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
593 content_verifier_->OnExtensionLoaded(testing_profile_.get(), extension.get()); | 596 content_verifier_->OnExtensionLoaded(testing_profile_.get(), extension.get()); |
594 // Wait for PostTask to ContentVerifierIOData::AddData() to finish. | 597 // Wait for PostTask to ContentVerifierIOData::AddData() to finish. |
595 content::RunAllPendingInMessageLoop(); | 598 content::RunAllPendingInMessageLoop(); |
596 | 599 |
597 // Request foo.js. | 600 // Request foo.js. |
598 EXPECT_EQ(net::OK, DoRequest(*extension, kFooJs)); | 601 EXPECT_EQ(net::OK, DoRequest(*extension, kFooJs)); |
599 test_job_delegate.WaitForDoneReading(extension->id()); | 602 test_job_delegate.WaitForDoneReading(extension->id()); |
600 } | 603 } |
601 | 604 |
602 } // namespace extensions | 605 } // namespace extensions |
OLD | NEW |