OLD | NEW |
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 #ifndef NET_COOKIES_COOKIE_STORE_UNITTEST_H_ | 5 #ifndef NET_COOKIES_COOKIE_STORE_UNITTEST_H_ |
6 #define NET_COOKIES_COOKIE_STORE_UNITTEST_H_ | 6 #define NET_COOKIES_COOKIE_STORE_UNITTEST_H_ |
7 | 7 |
8 #include <set> | 8 #include <set> |
9 #include <string> | 9 #include <string> |
10 #include <vector> | 10 #include <vector> |
(...skipping 1379 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1390 TestDeleteAllCreatedBetween, | 1390 TestDeleteAllCreatedBetween, |
1391 TestDeleteAllCreatedBetweenForHost, | 1391 TestDeleteAllCreatedBetweenForHost, |
1392 TestSecure, | 1392 TestSecure, |
1393 NetUtilCookieTest, | 1393 NetUtilCookieTest, |
1394 OverwritePersistentCookie, | 1394 OverwritePersistentCookie, |
1395 CookieOrdering, | 1395 CookieOrdering, |
1396 GetAllCookiesAsync, | 1396 GetAllCookiesAsync, |
1397 DeleteCanonicalCookieAsync, | 1397 DeleteCanonicalCookieAsync, |
1398 DeleteSessionCookie); | 1398 DeleteSessionCookie); |
1399 | 1399 |
1400 template<class CookieStoreTestTraits> | |
1401 class MultiThreadedCookieStoreTest : | |
1402 public CookieStoreTest<CookieStoreTestTraits> { | |
1403 public: | |
1404 MultiThreadedCookieStoreTest() : other_thread_("CMTthread") {} | |
1405 | |
1406 // Helper methods for calling the asynchronous CookieStore methods | |
1407 // from a different thread. | |
1408 | |
1409 void GetCookiesTask(CookieStore* cs, | |
1410 const GURL& url, | |
1411 StringResultCookieCallback* callback) { | |
1412 CookieOptions options; | |
1413 if (!CookieStoreTestTraits::supports_http_only) | |
1414 options.set_include_httponly(); | |
1415 cs->GetCookiesWithOptionsAsync( | |
1416 url, options, | |
1417 base::Bind(&StringResultCookieCallback::Run, | |
1418 base::Unretained(callback))); | |
1419 } | |
1420 | |
1421 void GetCookiesWithOptionsTask(CookieStore* cs, | |
1422 const GURL& url, | |
1423 const CookieOptions& options, | |
1424 StringResultCookieCallback* callback) { | |
1425 cs->GetCookiesWithOptionsAsync( | |
1426 url, options, | |
1427 base::Bind(&StringResultCookieCallback::Run, | |
1428 base::Unretained(callback))); | |
1429 } | |
1430 | |
1431 void SetCookieWithOptionsTask(CookieStore* cs, | |
1432 const GURL& url, | |
1433 const std::string& cookie_line, | |
1434 const CookieOptions& options, | |
1435 ResultSavingCookieCallback<bool>* callback) { | |
1436 cs->SetCookieWithOptionsAsync( | |
1437 url, cookie_line, options, | |
1438 base::Bind( | |
1439 &ResultSavingCookieCallback<bool>::Run, | |
1440 base::Unretained(callback))); | |
1441 } | |
1442 | |
1443 void DeleteCookieTask(CookieStore* cs, | |
1444 const GURL& url, | |
1445 const std::string& cookie_name, | |
1446 NoResultCookieCallback* callback) { | |
1447 cs->DeleteCookieAsync( | |
1448 url, cookie_name, | |
1449 base::Bind(&NoResultCookieCallback::Run, base::Unretained(callback))); | |
1450 } | |
1451 | |
1452 void DeleteSessionCookiesTask(CookieStore* cs, | |
1453 ResultSavingCookieCallback<int>* callback) { | |
1454 cs->DeleteSessionCookiesAsync( | |
1455 base::Bind( | |
1456 &ResultSavingCookieCallback<int>::Run, | |
1457 base::Unretained(callback))); | |
1458 } | |
1459 | |
1460 protected: | |
1461 void RunOnOtherThread(const base::Closure& task) { | |
1462 other_thread_.Start(); | |
1463 other_thread_.task_runner()->PostTask(FROM_HERE, task); | |
1464 other_thread_.Stop(); | |
1465 } | |
1466 | |
1467 Thread other_thread_; | |
1468 }; | |
1469 | |
1470 TYPED_TEST_CASE_P(MultiThreadedCookieStoreTest); | |
1471 | |
1472 // TODO(ycxiao): Eventually, we will need to create a separate thread, create | |
1473 // the cookie store on that thread (or at least its store, i.e., the DB | |
1474 // thread). | |
1475 TYPED_TEST_P(MultiThreadedCookieStoreTest, ThreadCheckGetCookies) { | |
1476 scoped_refptr<CookieStore> cs(this->GetCookieStore()); | |
1477 EXPECT_TRUE(this->SetCookie(cs.get(), this->http_www_google_.url(), "A=B")); | |
1478 this->MatchCookieLines( | |
1479 "A=B", this->GetCookies(cs.get(), this->http_www_google_.url())); | |
1480 StringResultCookieCallback callback(&this->other_thread_); | |
1481 base::Closure task = base::Bind( | |
1482 &MultiThreadedCookieStoreTest<TypeParam>::GetCookiesTask, | |
1483 base::Unretained(this), cs, this->http_www_google_.url(), &callback); | |
1484 this->RunOnOtherThread(task); | |
1485 callback.WaitUntilDone(); | |
1486 EXPECT_EQ("A=B", callback.result()); | |
1487 } | |
1488 | |
1489 TYPED_TEST_P(MultiThreadedCookieStoreTest, ThreadCheckGetCookiesWithOptions) { | |
1490 scoped_refptr<CookieStore> cs(this->GetCookieStore()); | |
1491 CookieOptions options; | |
1492 if (!TypeParam::supports_http_only) | |
1493 options.set_include_httponly(); | |
1494 EXPECT_TRUE(this->SetCookie(cs.get(), this->http_www_google_.url(), "A=B")); | |
1495 this->MatchCookieLines( | |
1496 "A=B", this->GetCookiesWithOptions(cs.get(), this->http_www_google_.url(), | |
1497 options)); | |
1498 StringResultCookieCallback callback(&this->other_thread_); | |
1499 base::Closure task = base::Bind( | |
1500 &MultiThreadedCookieStoreTest<TypeParam>::GetCookiesWithOptionsTask, | |
1501 base::Unretained(this), cs, this->http_www_google_.url(), options, | |
1502 &callback); | |
1503 this->RunOnOtherThread(task); | |
1504 callback.WaitUntilDone(); | |
1505 EXPECT_EQ("A=B", callback.result()); | |
1506 } | |
1507 | |
1508 TYPED_TEST_P(MultiThreadedCookieStoreTest, ThreadCheckSetCookieWithOptions) { | |
1509 scoped_refptr<CookieStore> cs(this->GetCookieStore()); | |
1510 CookieOptions options; | |
1511 if (!TypeParam::supports_http_only) | |
1512 options.set_include_httponly(); | |
1513 EXPECT_TRUE(this->SetCookieWithOptions(cs.get(), this->http_www_google_.url(), | |
1514 "A=B", options)); | |
1515 ResultSavingCookieCallback<bool> callback(&this->other_thread_); | |
1516 base::Closure task = base::Bind( | |
1517 &MultiThreadedCookieStoreTest<TypeParam>::SetCookieWithOptionsTask, | |
1518 base::Unretained(this), cs, this->http_www_google_.url(), "A=B", options, | |
1519 &callback); | |
1520 this->RunOnOtherThread(task); | |
1521 callback.WaitUntilDone(); | |
1522 EXPECT_TRUE(callback.result()); | |
1523 } | |
1524 | |
1525 TYPED_TEST_P(MultiThreadedCookieStoreTest, ThreadCheckDeleteCookie) { | |
1526 scoped_refptr<CookieStore> cs(this->GetCookieStore()); | |
1527 CookieOptions options; | |
1528 if (!TypeParam::supports_http_only) | |
1529 options.set_include_httponly(); | |
1530 EXPECT_TRUE(this->SetCookieWithOptions(cs.get(), this->http_www_google_.url(), | |
1531 "A=B", options)); | |
1532 this->DeleteCookie(cs.get(), this->http_www_google_.url(), "A"); | |
1533 EXPECT_TRUE(this->SetCookieWithOptions(cs.get(), this->http_www_google_.url(), | |
1534 "A=B", options)); | |
1535 NoResultCookieCallback callback(&this->other_thread_); | |
1536 base::Closure task = base::Bind( | |
1537 &MultiThreadedCookieStoreTest<TypeParam>::DeleteCookieTask, | |
1538 base::Unretained(this), cs, this->http_www_google_.url(), "A", &callback); | |
1539 this->RunOnOtherThread(task); | |
1540 callback.WaitUntilDone(); | |
1541 } | |
1542 | |
1543 TYPED_TEST_P(MultiThreadedCookieStoreTest, ThreadCheckDeleteSessionCookies) { | |
1544 scoped_refptr<CookieStore> cs(this->GetCookieStore()); | |
1545 CookieOptions options; | |
1546 if (!TypeParam::supports_http_only) | |
1547 options.set_include_httponly(); | |
1548 EXPECT_TRUE(this->SetCookieWithOptions(cs.get(), this->http_www_google_.url(), | |
1549 "A=B", options)); | |
1550 EXPECT_TRUE(this->SetCookieWithOptions( | |
1551 cs.get(), this->http_www_google_.url(), | |
1552 "B=C; expires=Mon, 18-Apr-22 22:50:13 GMT", options)); | |
1553 EXPECT_EQ(1, this->DeleteSessionCookies(cs.get())); | |
1554 EXPECT_EQ(0, this->DeleteSessionCookies(cs.get())); | |
1555 EXPECT_TRUE(this->SetCookieWithOptions(cs.get(), this->http_www_google_.url(), | |
1556 "A=B", options)); | |
1557 ResultSavingCookieCallback<int> callback(&this->other_thread_); | |
1558 base::Closure task = base::Bind( | |
1559 &MultiThreadedCookieStoreTest<TypeParam>::DeleteSessionCookiesTask, | |
1560 base::Unretained(this), cs, &callback); | |
1561 this->RunOnOtherThread(task); | |
1562 callback.WaitUntilDone(); | |
1563 EXPECT_EQ(1, callback.result()); | |
1564 } | |
1565 | |
1566 REGISTER_TYPED_TEST_CASE_P(MultiThreadedCookieStoreTest, | |
1567 ThreadCheckGetCookies, | |
1568 ThreadCheckGetCookiesWithOptions, | |
1569 ThreadCheckSetCookieWithOptions, | |
1570 ThreadCheckDeleteCookie, | |
1571 ThreadCheckDeleteSessionCookies); | |
1572 | |
1573 } // namespace net | 1400 } // namespace net |
1574 | 1401 |
1575 #endif // NET_COOKIES_COOKIE_STORE_UNITTEST_H_ | 1402 #endif // NET_COOKIES_COOKIE_STORE_UNITTEST_H_ |
OLD | NEW |