summaryrefslogtreecommitdiffstats
path: root/net/http
diff options
context:
space:
mode:
Diffstat (limited to 'net/http')
-rw-r--r--net/http/http_request_headers.cc7
-rw-r--r--net/http/http_request_headers.h6
-rw-r--r--net/http/http_request_headers_unittest.cc8
3 files changed, 21 insertions, 0 deletions
diff --git a/net/http/http_request_headers.cc b/net/http/http_request_headers.cc
index fc2ebcd..93ead01 100644
--- a/net/http/http_request_headers.cc
+++ b/net/http/http_request_headers.cc
@@ -76,6 +76,13 @@ void HttpRequestHeaders::Clear() {
headers_.clear();
}
+void HttpRequestHeaders::SetHeaderIfMissing(const base::StringPiece& key,
+ const base::StringPiece& value) {
+ HeaderVector::iterator it = FindHeader(key);
+ if (it == headers_.end())
+ headers_.push_back(HeaderKeyValuePair(key.as_string(), value.as_string()));
+}
+
void HttpRequestHeaders::SetHeader(const base::StringPiece& key,
const base::StringPiece& value) {
HeaderVector::iterator it = FindHeader(key);
diff --git a/net/http/http_request_headers.h b/net/http/http_request_headers.h
index 734194a..2962ae2 100644
--- a/net/http/http_request_headers.h
+++ b/net/http/http_request_headers.h
@@ -95,6 +95,12 @@ class HttpRequestHeaders {
// in the vector remains the same. When comparing |key|, case is ignored.
void SetHeader(const base::StringPiece& key, const base::StringPiece& value);
+ // Sets the header value pair for |key| and |value|, if |key| does not exist.
+ // If |key| already exists, the call is a no-op.
+ // When comparing |key|, case is ignored.
+ void SetHeaderIfMissing(const base::StringPiece& key,
+ const base::StringPiece& value);
+
// Removes the first header that matches (case insensitive) |key|.
void RemoveHeader(const base::StringPiece& key);
diff --git a/net/http/http_request_headers_unittest.cc b/net/http/http_request_headers_unittest.cc
index f3abfbe2..384ceeb 100644
--- a/net/http/http_request_headers_unittest.cc
+++ b/net/http/http_request_headers_unittest.cc
@@ -67,6 +67,14 @@ TEST(HttpRequestHeaders, SetEmptyHeader) {
EXPECT_EQ("Foo: Bar\r\nBar:\r\n\r\n", headers.ToString());
}
+TEST(HttpRequestHeaders, SetHeaderIfMissing) {
+ HttpRequestHeaders headers;
+ headers.SetHeaderIfMissing("Foo", "Bar");
+ EXPECT_EQ("Foo: Bar\r\n\r\n", headers.ToString());
+ headers.SetHeaderIfMissing("Foo", "Baz");
+ EXPECT_EQ("Foo: Bar\r\n\r\n", headers.ToString());
+}
+
TEST(HttpRequestHeaders, RemoveHeader) {
HttpRequestHeaders headers;
headers.SetHeader("Foo", "bar");