Chromium Code Reviews| 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..1fdd301b815c0c3bf9a73c1c18389b3b36ce5095 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,39 @@ 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); |
|
Matt Perry
2013/06/03 18:13:55
nit: looks like this doesn't need to wrap
jvoung (off chromium)
2013/06/03 20:21:52
Done.
|
| + |
| + { |
| + 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 |