mirror of
https://bitbucket.org/chromiumembedded/cef
synced 2025-02-03 12:37:36 +01:00
Fix duplicate entries in CefRequest header map (issue #1840)
This commit is contained in:
parent
1b7c5303ce
commit
e1aa8cc109
@ -147,25 +147,28 @@ blink::WebString FilePathStringToWebString(
|
||||
// Read |headers| into |map|.
|
||||
void GetHeaderMap(const net::HttpRequestHeaders& headers,
|
||||
CefRequest::HeaderMap& map) {
|
||||
map.clear();
|
||||
|
||||
if (headers.IsEmpty())
|
||||
return;
|
||||
|
||||
net::HttpRequestHeaders::Iterator it(headers);
|
||||
do {
|
||||
while (it.GetNext()) {
|
||||
const std::string& name = it.name();
|
||||
|
||||
// Do not include Referer in the header map.
|
||||
if (!base::LowerCaseEqualsASCII(name, kReferrerLowerCase))
|
||||
map.insert(std::make_pair(name, it.value()));
|
||||
} while (it.GetNext());
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
// Read |request| into |map|. If a Referer value is specified populate
|
||||
// |referrer|.
|
||||
void GetHeaderMap(const blink::WebURLRequest& request,
|
||||
CefRequest::HeaderMap& map,
|
||||
CefString& referrer) {
|
||||
map.clear();
|
||||
|
||||
class HeaderVisitor : public blink::WebHTTPHeaderVisitor {
|
||||
public:
|
||||
HeaderVisitor(CefRequest::HeaderMap* map, CefString* referrer)
|
||||
@ -195,6 +198,8 @@ void GetHeaderMap(const blink::WebURLRequest& request,
|
||||
// Read |source| into |map|.
|
||||
void GetHeaderMap(const CefRequest::HeaderMap& source,
|
||||
CefRequest::HeaderMap& map) {
|
||||
map.clear();
|
||||
|
||||
CefRequest::HeaderMap::const_iterator it = source.begin();
|
||||
for (; it != source.end(); ++it) {
|
||||
const CefString& name = it->first;
|
||||
|
@ -8,11 +8,15 @@
|
||||
#include "tests/unittests/test_util.h"
|
||||
#include "testing/gtest/include/gtest/gtest.h"
|
||||
|
||||
void TestMapEqual(CefRequest::HeaderMap& map1,
|
||||
CefRequest::HeaderMap& map2,
|
||||
void TestMapEqual(const CefRequest::HeaderMap& map1,
|
||||
const CefRequest::HeaderMap& map2,
|
||||
bool allowExtras) {
|
||||
if (!allowExtras)
|
||||
EXPECT_EQ(map1.size(), map2.size());
|
||||
|
||||
TestMapNoDuplicates(map1);
|
||||
TestMapNoDuplicates(map2);
|
||||
|
||||
CefRequest::HeaderMap::const_iterator it1, it2;
|
||||
|
||||
for (it1 = map1.begin(); it1 != map1.end(); ++it1) {
|
||||
@ -25,6 +29,17 @@ void TestMapEqual(CefRequest::HeaderMap& map1,
|
||||
}
|
||||
}
|
||||
|
||||
void TestMapNoDuplicates(const CefRequest::HeaderMap& map) {
|
||||
CefRequest::HeaderMap::const_iterator it1 = map.begin();
|
||||
for (; it1 != map.end(); ++it1) {
|
||||
CefRequest::HeaderMap::const_iterator it2 = it1;
|
||||
for (++it2; it2 != map.end(); ++it2) {
|
||||
EXPECT_FALSE(it1->first == it2->first && it1->second == it2->second) <<
|
||||
"Duplicate entry for " << it1->first << ": " << it1->second;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void TestPostDataElementEqual(CefRefPtr<CefPostDataElement> elem1,
|
||||
CefRefPtr<CefPostDataElement> elem2) {
|
||||
EXPECT_TRUE(elem1.get());
|
||||
|
@ -14,10 +14,13 @@
|
||||
// Test that CefRequest::HeaderMap objects are equal
|
||||
// If |allowExtras| is true then additional header fields will be allowed in
|
||||
// |map2|.
|
||||
void TestMapEqual(CefRequest::HeaderMap& map1,
|
||||
CefRequest::HeaderMap& map2,
|
||||
void TestMapEqual(const CefRequest::HeaderMap& map1,
|
||||
const CefRequest::HeaderMap& map2,
|
||||
bool allowExtras);
|
||||
|
||||
// Test that the CefRequest::HeaderMap object contains no duplicate entries.
|
||||
void TestMapNoDuplicates(const CefRequest::HeaderMap& map);
|
||||
|
||||
// Test that CefPostDataElement objects are equal
|
||||
void TestPostDataElementEqual(CefRefPtr<CefPostDataElement> elem1,
|
||||
CefRefPtr<CefPostDataElement> elem2);
|
||||
|
Loading…
x
Reference in New Issue
Block a user