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

Side by Side Diff: chrome/browser/extensions/api/web_request/web_request_api_unittest.cc

Issue 10447090: Support Cookie modifications in Declarative WebRequest API (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Split some parts into separate CLs Created 8 years, 5 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <queue> 5 #include <queue>
6 #include <map> 6 #include <map>
7 7
8 #include "base/bind.h" 8 #include "base/bind.h"
9 #include "base/callback.h" 9 #include "base/callback.h"
10 #include "base/file_util.h" 10 #include "base/file_util.h"
(...skipping 30 matching lines...) Expand all
41 using helpers::CalculateOnBeforeRequestDelta; 41 using helpers::CalculateOnBeforeRequestDelta;
42 using helpers::CalculateOnBeforeSendHeadersDelta; 42 using helpers::CalculateOnBeforeSendHeadersDelta;
43 using helpers::CalculateOnHeadersReceivedDelta; 43 using helpers::CalculateOnHeadersReceivedDelta;
44 using helpers::CharListToString; 44 using helpers::CharListToString;
45 using helpers::EventResponseDelta; 45 using helpers::EventResponseDelta;
46 using helpers::EventResponseDeltas; 46 using helpers::EventResponseDeltas;
47 using helpers::EventResponseDeltas; 47 using helpers::EventResponseDeltas;
48 using helpers::InDecreasingExtensionInstallationTimeOrder; 48 using helpers::InDecreasingExtensionInstallationTimeOrder;
49 using helpers::MergeCancelOfResponses; 49 using helpers::MergeCancelOfResponses;
50 using helpers::MergeOnBeforeRequestResponses; 50 using helpers::MergeOnBeforeRequestResponses;
51 using helpers::RequestCookieModification;
52 using helpers::ResponseCookieModification;
51 using helpers::ResponseHeader; 53 using helpers::ResponseHeader;
52 using helpers::ResponseHeaders; 54 using helpers::ResponseHeaders;
53 using helpers::StringToCharList; 55 using helpers::StringToCharList;
54 56
55 namespace { 57 namespace {
56 static void EventHandledOnIOThread( 58 static void EventHandledOnIOThread(
57 void* profile, 59 void* profile,
58 const std::string& extension_id, 60 const std::string& extension_id,
59 const std::string& event_name, 61 const std::string& event_name,
60 const std::string& sub_event_name, 62 const std::string& sub_event_name,
(...skipping 1211 matching lines...) Expand 10 before | Expand all | Expand 10 after
1272 EXPECT_EQ("value 3", header_value); 1274 EXPECT_EQ("value 3", header_value);
1273 ASSERT_TRUE(headers3.GetHeader("key3", &header_value)); 1275 ASSERT_TRUE(headers3.GetHeader("key3", &header_value));
1274 EXPECT_EQ("value 3", header_value); 1276 EXPECT_EQ("value 3", header_value);
1275 ASSERT_TRUE(headers3.GetHeader("key5", &header_value)); 1277 ASSERT_TRUE(headers3.GetHeader("key5", &header_value));
1276 EXPECT_EQ("value 5", header_value); 1278 EXPECT_EQ("value 5", header_value);
1277 EXPECT_EQ(1u, conflicting_extensions.size()); 1279 EXPECT_EQ(1u, conflicting_extensions.size());
1278 EXPECT_TRUE(ContainsKey(conflicting_extensions, "extid2")); 1280 EXPECT_TRUE(ContainsKey(conflicting_extensions, "extid2"));
1279 EXPECT_EQ(3u, capturing_net_log.GetSize()); 1281 EXPECT_EQ(3u, capturing_net_log.GetSize());
1280 } 1282 }
1281 1283
1284 TEST(ExtensionWebRequestHelpersTest,
1285 TestMergeOnBeforeSendHeadersResponses_Cookies) {
1286 net::HttpRequestHeaders base_headers;
1287 base_headers.AddHeaderFromString(
1288 "Cookie: name=value; name2=value2; name3=value3");
1289 net::CapturingBoundNetLog capturing_net_log;
1290 net::BoundNetLog net_log = capturing_net_log.bound();
1291 std::set<std::string> conflicting_extensions;
1292 std::string header_value;
1293 EventResponseDeltas deltas;
1294
1295 linked_ptr<RequestCookieModification> add_cookie =
1296 make_linked_ptr(new RequestCookieModification);
1297 add_cookie->type = helpers::ADD;
1298 add_cookie->modification.reset(new helpers::RequestCookie);
1299 add_cookie->modification->name.reset(new std::string("name4"));
1300 add_cookie->modification->value.reset(new std::string("\"value 4\""));
1301
1302 linked_ptr<RequestCookieModification> add_cookie_2 =
1303 make_linked_ptr(new RequestCookieModification);
1304 add_cookie_2->type = helpers::ADD;
1305 add_cookie_2->modification.reset(new helpers::RequestCookie);
1306 add_cookie_2->modification->name.reset(new std::string("name"));
1307 add_cookie_2->modification->value.reset(new std::string("new value"));
1308
1309 linked_ptr<RequestCookieModification> edit_cookie =
1310 make_linked_ptr(new RequestCookieModification);
1311 edit_cookie->type = helpers::EDIT;
1312 edit_cookie->filter.reset(new helpers::RequestCookie);
1313 edit_cookie->filter->name.reset(new std::string("name2"));
1314 edit_cookie->modification.reset(new helpers::RequestCookie);
1315 edit_cookie->modification->value.reset(new std::string("new value"));
1316
1317 linked_ptr<RequestCookieModification> remove_cookie =
1318 make_linked_ptr(new RequestCookieModification);
1319 remove_cookie->type = helpers::REMOVE;
1320 remove_cookie->filter.reset(new helpers::RequestCookie);
1321 remove_cookie->filter->name.reset(new std::string("name3"));
1322
1323 linked_ptr<RequestCookieModification> operations[] = {
1324 add_cookie, add_cookie_2, edit_cookie, remove_cookie
1325 };
1326
1327 for (size_t i = 0; i < arraysize(operations); ++i) {
1328 linked_ptr<EventResponseDelta> delta(
1329 new EventResponseDelta("extid0", base::Time::FromInternalValue(i * 5)));
1330 delta->request_cookie_modifications.push_back(operations[i]);
1331 deltas.push_back(delta);
1332 }
1333 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
1334 net::HttpRequestHeaders headers1;
1335 headers1.MergeFrom(base_headers);
1336 MergeOnBeforeSendHeadersResponses(
1337 deltas, &headers1, &conflicting_extensions, &net_log);
1338 EXPECT_TRUE(headers1.HasHeader("Cookie"));
1339 ASSERT_TRUE(headers1.GetHeader("Cookie", &header_value));
1340 EXPECT_EQ("name=new value; name2=new value; name4=\"value 4\"", header_value);
1341 EXPECT_EQ(0u, conflicting_extensions.size());
1342 EXPECT_EQ(0u, capturing_net_log.GetSize());
1343 }
1344
1345 TEST(ExtensionWebRequestHelpersTest,
1346 TestMergeCookiesInOnHeadersReceivedResponses) {
1347 net::CapturingBoundNetLog capturing_net_log;
1348 net::BoundNetLog net_log = capturing_net_log.bound();
1349 std::set<std::string> conflicting_extensions;
1350 std::string header_value;
1351 EventResponseDeltas deltas;
1352
1353 char base_headers_string[] =
1354 "HTTP/1.0 200 OK\r\n"
1355 "Foo: Bar\r\n"
1356 "Set-Cookie: name=value; DOMAIN=google.com; Secure\r\n"
1357 "Set-Cookie: name2=value2\r\n"
1358 "Set-Cookie: name3=value3\r\n"
1359 "\r\n";
1360 scoped_refptr<net::HttpResponseHeaders> base_headers(
1361 new net::HttpResponseHeaders(
1362 net::HttpUtil::AssembleRawHeaders(
1363 base_headers_string, sizeof(base_headers_string))));
1364
1365 // Check that we can handle if not touching the response headers.
1366 linked_ptr<EventResponseDelta> d0(
1367 new EventResponseDelta("extid0", base::Time::FromInternalValue(3000)));
1368 deltas.push_back(d0);
1369 scoped_refptr<net::HttpResponseHeaders> new_headers0;
1370 MergeCookiesInOnHeadersReceivedResponses(
1371 deltas, base_headers.get(), &new_headers0, &conflicting_extensions,
1372 &net_log);
1373 EXPECT_FALSE(new_headers0.get());
1374 EXPECT_EQ(0u, conflicting_extensions.size());
1375 EXPECT_EQ(0u, capturing_net_log.GetSize());
1376
1377 linked_ptr<ResponseCookieModification> add_cookie =
1378 make_linked_ptr(new ResponseCookieModification);
1379 add_cookie->type = helpers::ADD;
1380 add_cookie->modification.reset(new helpers::ResponseCookie);
1381 add_cookie->modification->name.reset(new std::string("name4"));
1382 add_cookie->modification->value.reset(new std::string("\"value4\""));
1383
1384 linked_ptr<ResponseCookieModification> edit_cookie =
1385 make_linked_ptr(new ResponseCookieModification);
1386 edit_cookie->type = helpers::EDIT;
1387 edit_cookie->filter.reset(new helpers::ResponseCookie);
1388 edit_cookie->filter->name.reset(new std::string("name2"));
1389 edit_cookie->modification.reset(new helpers::ResponseCookie);
1390 edit_cookie->modification->value.reset(new std::string("new value"));
1391
1392 linked_ptr<ResponseCookieModification> edit_cookie_2 =
1393 make_linked_ptr(new ResponseCookieModification);
1394 edit_cookie_2->type = helpers::EDIT;
1395 edit_cookie_2->filter.reset(new helpers::ResponseCookie);
1396 edit_cookie_2->filter->secure.reset(new bool(false));
1397 edit_cookie_2->modification.reset(new helpers::ResponseCookie);
1398 edit_cookie_2->modification->secure.reset(new bool(true));
1399
1400 linked_ptr<ResponseCookieModification> remove_cookie =
1401 make_linked_ptr(new ResponseCookieModification);
1402 remove_cookie->type = helpers::REMOVE;
1403 remove_cookie->filter.reset(new helpers::ResponseCookie);
1404 remove_cookie->filter->name.reset(new std::string("name3"));
1405
1406 linked_ptr<ResponseCookieModification> operations[] = {
1407 add_cookie, edit_cookie, edit_cookie_2, remove_cookie
1408 };
1409
1410 for (size_t i = 0; i < arraysize(operations); ++i) {
1411 linked_ptr<EventResponseDelta> delta(
1412 new EventResponseDelta("extid0", base::Time::FromInternalValue(i * 5)));
1413 delta->response_cookie_modifications.push_back(operations[i]);
1414 deltas.push_back(delta);
1415 }
1416 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
1417 scoped_refptr<net::HttpResponseHeaders> headers1(
1418 new net::HttpResponseHeaders(
1419 net::HttpUtil::AssembleRawHeaders(
1420 base_headers_string, sizeof(base_headers_string))));
1421 scoped_refptr<net::HttpResponseHeaders> new_headers1;
1422 MergeCookiesInOnHeadersReceivedResponses(
1423 deltas, headers1.get(), &new_headers1, &conflicting_extensions, &net_log);
1424
1425 EXPECT_TRUE(new_headers1->HasHeader("Foo"));
1426 void* iter = NULL;
1427 std::string cookie_string;
1428 std::set<std::string> expected_cookies;
1429 expected_cookies.insert("name=value; domain=google.com; secure");
1430 expected_cookies.insert("name2=value2; secure");
1431 expected_cookies.insert("name3=value3; secure");
1432 expected_cookies.insert("name4=\"value4\"; secure");
1433 std::set<std::string> actual_cookies;
1434 while (new_headers1->EnumerateHeader(&iter, "Set-Cookie", &cookie_string))
1435 actual_cookies.insert(cookie_string);
1436 EXPECT_EQ(expected_cookies, actual_cookies);
1437 EXPECT_EQ(0u, conflicting_extensions.size());
1438 EXPECT_EQ(0u, capturing_net_log.GetSize());
1439 }
1440
1282 TEST(ExtensionWebRequestHelpersTest, TestMergeOnHeadersReceivedResponses) { 1441 TEST(ExtensionWebRequestHelpersTest, TestMergeOnHeadersReceivedResponses) {
1283 net::CapturingBoundNetLog capturing_net_log; 1442 net::CapturingBoundNetLog capturing_net_log;
1284 net::BoundNetLog net_log = capturing_net_log.bound(); 1443 net::BoundNetLog net_log = capturing_net_log.bound();
1285 std::set<std::string> conflicting_extensions; 1444 std::set<std::string> conflicting_extensions;
1286 std::string header_value; 1445 std::string header_value;
1287 EventResponseDeltas deltas; 1446 EventResponseDeltas deltas;
1288 1447
1289 char base_headers_string[] = 1448 char base_headers_string[] =
1290 "HTTP/1.0 200 OK\r\n" 1449 "HTTP/1.0 200 OK\r\n"
1291 "Key1: Value1\r\n" 1450 "Key1: Value1\r\n"
(...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after
1525 // Check that requests are rejected if their first party url is sensitive. 1684 // Check that requests are rejected if their first party url is sensitive.
1526 ASSERT_GE(arraysize(non_sensitive_urls), 1u); 1685 ASSERT_GE(arraysize(non_sensitive_urls), 1u);
1527 GURL non_sensitive_url(non_sensitive_urls[0]); 1686 GURL non_sensitive_url(non_sensitive_urls[0]);
1528 for (size_t i = 0; i < arraysize(sensitive_urls); ++i) { 1687 for (size_t i = 0; i < arraysize(sensitive_urls); ++i) {
1529 TestURLRequest request(non_sensitive_url, NULL, &context); 1688 TestURLRequest request(non_sensitive_url, NULL, &context);
1530 GURL sensitive_url(sensitive_urls[i]); 1689 GURL sensitive_url(sensitive_urls[i]);
1531 request.set_first_party_for_cookies(sensitive_url); 1690 request.set_first_party_for_cookies(sensitive_url);
1532 EXPECT_TRUE(helpers::HideRequest(&request)) << sensitive_urls[i]; 1691 EXPECT_TRUE(helpers::HideRequest(&request)) << sensitive_urls[i];
1533 } 1692 }
1534 } 1693 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698