summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
authorchron@chromium.org <chron@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-08-22 01:32:07 +0000
committerchron@chromium.org <chron@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-08-22 01:32:07 +0000
commit5f9b8adb8c5911a62ded2737b58088dfd88bf65b (patch)
tree60e78c4b60741ff4b6366f68be2c27bff0411379 /chrome
parent841c523f75dd0fae0d178b84b1b9f438354dab20 (diff)
downloadchromium_src-5f9b8adb8c5911a62ded2737b58088dfd88bf65b.zip
chromium_src-5f9b8adb8c5911a62ded2737b58088dfd88bf65b.tar.gz
chromium_src-5f9b8adb8c5911a62ded2737b58088dfd88bf65b.tar.bz2
Add support to glue and syncAPI for header setting. (second try)
Review URL: http://codereview.chromium.org/174269 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@24062 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
-rw-r--r--chrome/browser/sync/engine/syncapi.h3
-rw-r--r--chrome/browser/sync/glue/http_bridge.cc7
-rw-r--r--chrome/browser/sync/glue/http_bridge.h6
-rw-r--r--chrome/browser/sync/glue/http_bridge_unittest.cc62
4 files changed, 60 insertions, 18 deletions
diff --git a/chrome/browser/sync/engine/syncapi.h b/chrome/browser/sync/engine/syncapi.h
index 3b02004..b922318 100644
--- a/chrome/browser/sync/engine/syncapi.h
+++ b/chrome/browser/sync/engine/syncapi.h
@@ -620,6 +620,9 @@ class HttpPostProviderInterface {
// may be used.
virtual void SetUserAgent(const char* user_agent) = 0;
+ // Add additional headers to the request.
+ virtual void SetExtraRequestHeaders(const char * headers) = 0;
+
// Set the URL to POST to.
virtual void SetURL(const char* url, int port) = 0;
diff --git a/chrome/browser/sync/glue/http_bridge.cc b/chrome/browser/sync/glue/http_bridge.cc
index ff613e2c..719e89c 100644
--- a/chrome/browser/sync/glue/http_bridge.cc
+++ b/chrome/browser/sync/glue/http_bridge.cc
@@ -107,6 +107,12 @@ void HttpBridge::SetUserAgent(const char* user_agent) {
context_for_request_->set_user_agent(user_agent);
}
+void HttpBridge::SetExtraRequestHeaders(const char * headers) {
+ DCHECK(extra_headers_.empty())
+ << "HttpBridge::SetExtraRequestHeaders called twice.";
+ extra_headers_.assign(headers);
+}
+
void HttpBridge::SetURL(const char* url, int port) {
DCHECK_EQ(MessageLoop::current(), created_on_loop_);
DCHECK(!request_completed_);
@@ -177,6 +183,7 @@ void HttpBridge::MakeAsynchronousPost() {
url_poster_ = new URLFetcher(url_for_request_, URLFetcher::POST, this);
url_poster_->set_request_context(context_for_request_);
url_poster_->set_upload_data(content_type_, request_content_);
+ url_poster_->set_extra_request_headers(extra_headers_);
if (use_io_loop_for_testing_)
url_poster_->set_io_loop(io_loop_);
diff --git a/chrome/browser/sync/glue/http_bridge.h b/chrome/browser/sync/glue/http_bridge.h
index 184a040..bb2af84 100644
--- a/chrome/browser/sync/glue/http_bridge.h
+++ b/chrome/browser/sync/glue/http_bridge.h
@@ -62,6 +62,10 @@ class HttpBridge : public base::RefCountedThreadSafe<HttpBridge>,
URLRequestContext::GetUserAgent(url) : user_agent_;
}
+ virtual bool AllowSendingCookies(const URLRequest* request) const {
+ return false; // Never send cookies.
+ }
+
private:
std::string user_agent_;
@@ -73,6 +77,7 @@ class HttpBridge : public base::RefCountedThreadSafe<HttpBridge>,
// sync_api::HttpPostProvider implementation.
virtual void SetUserAgent(const char* user_agent);
+ virtual void SetExtraRequestHeaders(const char* headers);
virtual void SetURL(const char* url, int port);
virtual void SetPostPayload(const char* content_type, int content_length,
const char* content);
@@ -130,6 +135,7 @@ class HttpBridge : public base::RefCountedThreadSafe<HttpBridge>,
// POST payload information.
std::string content_type_;
std::string request_content_;
+ std::string extra_headers_;
// Cached response data.
bool request_completed_;
diff --git a/chrome/browser/sync/glue/http_bridge_unittest.cc b/chrome/browser/sync/glue/http_bridge_unittest.cc
index 63da13a..342bc7c 100644
--- a/chrome/browser/sync/glue/http_bridge_unittest.cc
+++ b/chrome/browser/sync/glue/http_bridge_unittest.cc
@@ -75,9 +75,9 @@ class ShuntedHttpBridge : public HttpBridge {
private:
void CallOnURLFetchComplete() {
ASSERT_TRUE(MessageLoop::current() == test_->io_thread_loop());
- // We return one cookie and a dummy content response.
+ // We return no cookies and a dummy content response.
ResponseCookies cookies;
- cookies.push_back("cookie1");
+
std::string response_content = "success!";
OnURLFetchComplete(NULL, GURL("www.google.com"), URLRequestStatus(),
200, cookies, response_content);
@@ -100,13 +100,8 @@ TEST_F(HttpBridgeTest, TestMakeSynchronousPostShunted) {
EXPECT_TRUE(success);
EXPECT_EQ(200, response_code);
EXPECT_EQ(0, os_error);
- EXPECT_EQ(1, http_bridge->GetResponseCookieCount());
- // TODO(timsteele): This is a valid test condition, it's just temporarily
- // broken so that HttpBridge satisfies the ServerConnectionManager.
-#if FIXED_SYNC_BACKEND_COOKIE_PARSING
- EXPECT_EQ(std::string("cookie1"),
- std::string(http_bridge->GetResponseCookieAt(0)));
-#endif
+ EXPECT_EQ(0, http_bridge->GetResponseCookieCount());
+
EXPECT_EQ(8, http_bridge->GetResponseContentLength());
EXPECT_EQ(std::string("success!"),
std::string(http_bridge->GetResponseContent()));
@@ -138,7 +133,7 @@ TEST_F(HttpBridgeTest, TestMakeSynchronousPostLiveWithPayload) {
}
// Full round-trip test of the HttpBridge, using custom UA string and
-// multiple request cookies.
+// multiple request cookies. Cookies should not come back.
TEST_F(HttpBridgeTest, TestMakeSynchronousPostLiveComprehensive) {
scoped_refptr<HTTPTestServer> server = HTTPTestServer::CreateServer(kDocRoot,
NULL);
@@ -162,14 +157,45 @@ TEST_F(HttpBridgeTest, TestMakeSynchronousPostLiveComprehensive) {
EXPECT_EQ(0, os_error);
EXPECT_EQ(0, http_bridge->GetResponseCookieCount());
std::string response = http_bridge->GetResponseContent();
-// TODO(timsteele): This is a valid test condition, it's just temporarily
-// broken so that HttpBridge satisfies the ServerConnectionManager; the format
-// seems to be surprising the TestServer, because it isn't echoing the headers
-// properly.
-#if FIXED_SYNCER_BACKEND_COOKIE_PARSING
- EXPECT_NE(std::string::npos, response.find("Cookie: foo=bar; baz=boo"));
- EXPECT_NE(std::string::npos, response.find("User-Agent: bob"));
-#endif
+
+ EXPECT_EQ(std::string::npos, response.find("Cookie:"));
+ // TODO(chron): Renable this check and figure out why headers
+ // aren't echoing right.
+ // This is currently broken in header parsing from the echo
+ // server for some reason.
+ // EXPECT_NE(std::string::npos, response.find("User-Agent: bob"));
+ EXPECT_NE(std::string::npos, response.find(test_payload.c_str()));
+}
+
+// TODO(chron): Renable this check and figure out why headers
+// aren't echoing right.
+// Test over the wire whether our extra request headers come back.
+// Use default UA string and a test payload.
+TEST_F(HttpBridgeTest, DISABLED_TestExtraRequestHeaders) {
+ scoped_refptr<HTTPTestServer> server = HTTPTestServer::CreateServer(kDocRoot,
+ NULL);
+ ASSERT_TRUE(NULL != server.get());
+ scoped_refptr<HttpBridge> http_bridge(BuildBridge());
+
+ GURL echo_header = server->TestServerPage("echoall");
+
+ http_bridge->SetURL(echo_header.spec().c_str(), echo_header.IntPort());
+ http_bridge->SetExtraRequestHeaders("test:fnord");
+
+ std::string test_payload = "###TEST PAYLOAD###";
+ http_bridge->SetPostPayload("text/html", test_payload.length() + 1,
+ test_payload.c_str());
+
+ int os_error = 0;
+ int response_code = 0;
+ bool success = http_bridge->MakeSynchronousPost(&os_error, &response_code);
+ EXPECT_TRUE(success);
+ EXPECT_EQ(200, response_code);
+ EXPECT_EQ(0, os_error);
+ EXPECT_EQ(0, http_bridge->GetResponseCookieCount());
+ std::string response = http_bridge->GetResponseContent();
+
+ EXPECT_NE(std::string::npos, response.find("fnord"));
EXPECT_NE(std::string::npos, response.find(test_payload.c_str()));
}