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

Unified Diff: chrome/browser/extensions/extension_protocols_unittest.cc

Issue 15963003: Generate an etag for chrome-extension:// file requests, so caching can be optional (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: cleanup Created 7 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 side-by-side diff with in-line comments
Download patch
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,
rvargas (doing something else) 2013/06/03 21:12:37 I'm assuming that the extension destructor does cl
jvoung (off chromium) 2013/06/03 22:08:22 It doesn't look like the destructor does anything,
Matt Perry 2013/06/03 22:17:19 Yep, no new files are created by this test.
+ 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

Powered by Google App Engine
This is Rietveld 408576698