| Index: chrome/browser/extensions/extension_protocols_unittest.cc
|
| diff --git a/chrome/browser/extensions/extension_protocols_unittest.cc b/chrome/browser/extensions/extension_protocols_unittest.cc
|
| index c9075a396224103345411a48dd277c498924f78d..5c9813d78471bfe3963d6574ece0b456746533d3 100644
|
| --- a/chrome/browser/extensions/extension_protocols_unittest.cc
|
| +++ b/chrome/browser/extensions/extension_protocols_unittest.cc
|
| @@ -6,6 +6,7 @@
|
|
|
| #include "base/file_util.h"
|
| #include "base/message_loop.h"
|
| +#include "base/string_util.h"
|
| #include "base/values.h"
|
| #include "chrome/browser/extensions/extension_info_map.h"
|
| #include "chrome/browser/extensions/extension_protocols.h"
|
| @@ -63,6 +64,27 @@ scoped_refptr<Extension> CreateWebStoreExtension() {
|
| return extension;
|
| }
|
|
|
| +scoped_refptr<Extension> CreateTestResponseHeaderExtension() {
|
| + DictionaryValue manifest;
|
| + manifest.SetString("name", "An extension with web-accessible resources");
|
| + manifest.SetString("version", "2");
|
| +
|
| + ListValue* web_accessible_list = new ListValue();
|
| + web_accessible_list->AppendString("test.dat");
|
| + manifest.Set("web_accessible_resources", web_accessible_list);
|
| +
|
| + base::FilePath path;
|
| + EXPECT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &path));
|
| + path = path.AppendASCII("extensions").AppendASCII("response_headers");
|
| +
|
| + std::string error;
|
| + scoped_refptr<Extension> extension(
|
| + Extension::Create(path, Manifest::UNPACKED, manifest,
|
| + Extension::NO_FLAGS, &error));
|
| + EXPECT_TRUE(extension.get()) << error;
|
| + return extension;
|
| +}
|
| +
|
| class ExtensionProtocolTest : public testing::Test {
|
| public:
|
| ExtensionProtocolTest()
|
| @@ -216,4 +238,38 @@ TEST_F(ExtensionProtocolTest, ComponentResourceRequest) {
|
| }
|
| }
|
|
|
| +// Tests that a URL request for resource from an extension returns a few
|
| +// expected response headers.
|
| +TEST_F(ExtensionProtocolTest, ResourceRequestResponseHeaders) {
|
| + // Register a non-incognito extension protocol handler.
|
| + SetProtocolHandler(false);
|
| +
|
| + scoped_refptr<Extension> extension = CreateTestResponseHeaderExtension();
|
| + extension_info_map_->AddExtension(extension, base::Time::Now(), false);
|
| +
|
| + {
|
| + net::URLRequest request(extension->GetResourceURL("test.dat"),
|
| + &test_delegate_,
|
| + resource_context_.GetRequestContext());
|
| + StartRequest(&request, ResourceType::MEDIA);
|
| + EXPECT_EQ(net::URLRequestStatus::SUCCESS, request.status().status());
|
| +
|
| + // Check that cache-related headers are set.
|
| + std::string etag;
|
| + request.GetResponseHeaderByName("ETag", &etag);
|
| + EXPECT_TRUE(StartsWithASCII(etag, "\"", false));
|
| + EXPECT_TRUE(EndsWith(etag, "\"", false));
|
| +
|
| + std::string revalidation_header;
|
| + request.GetResponseHeaderByName("cache-control", &revalidation_header);
|
| + EXPECT_EQ("no-cache", revalidation_header);
|
| +
|
| + // We set test.dat as web-accessible, so it should have a CORS header.
|
| + std::string access_control;
|
| + request.GetResponseHeaderByName("Access-Control-Allow-Origin",
|
| + &access_control);
|
| + EXPECT_EQ("*", access_control);
|
| + }
|
| +}
|
| +
|
| } // namespace extensions
|
|
|