diff options
author | ian@chromium.org <ian@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-11-06 04:58:48 +0000 |
---|---|---|
committer | ian@chromium.org <ian@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-11-06 04:58:48 +0000 |
commit | dce516200cbac6100f0268c5f036e8dbddf4f8ac (patch) | |
tree | 9e758547e48369576b568c8dd46d69fb8a75f958 /chrome/browser/cookies_tree_model_unittest.cc | |
parent | 91c836e0591bd3c3d874eb18d2403ce927e6be6a (diff) | |
download | chromium_src-dce516200cbac6100f0268c5f036e8dbddf4f8ac.zip chromium_src-dce516200cbac6100f0268c5f036e8dbddf4f8ac.tar.gz chromium_src-dce516200cbac6100f0268c5f036e8dbddf4f8ac.tar.bz2 |
Converting the Cookies options page from a TableView to a TreeView
so that we can add in Database, LocalStorage, and Appcache next
to the cookies for an origin.
BUG=26713
TEST=cookies_tree_model_unittest.cc
Review URL: http://codereview.chromium.org/365005
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@31207 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/cookies_tree_model_unittest.cc')
-rw-r--r-- | chrome/browser/cookies_tree_model_unittest.cc | 290 |
1 files changed, 290 insertions, 0 deletions
diff --git a/chrome/browser/cookies_tree_model_unittest.cc b/chrome/browser/cookies_tree_model_unittest.cc new file mode 100644 index 0000000..43575f5 --- /dev/null +++ b/chrome/browser/cookies_tree_model_unittest.cc @@ -0,0 +1,290 @@ +// Copyright (c) 2009 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/cookies_tree_model.h" + +#include <string> + +#include "app/l10n_util.h" +#include "chrome/browser/net/url_request_context_getter.h" +#include "chrome/test/testing_profile.h" +#include "net/url_request/url_request_context.h" +#include "testing/gtest/include/gtest/gtest.h" + + +namespace { + +class TestURLRequestContext : public URLRequestContext { + public: + TestURLRequestContext() { + cookie_store_ = new net::CookieMonster(); + } +}; + +class TestURLRequestContextGetter : public URLRequestContextGetter { + public: + virtual URLRequestContext* GetURLRequestContext() { + if (!context_) + context_ = new TestURLRequestContext(); + return context_.get(); + } + private: + scoped_refptr<URLRequestContext> context_; +}; + +class CookieTestingProfile : public TestingProfile { + public: + virtual URLRequestContextGetter* GetRequestContext() { + if (!url_request_context_getter_.get()) + url_request_context_getter_ = new TestURLRequestContextGetter; + return url_request_context_getter_.get(); + } + virtual ~CookieTestingProfile() {} + + net::CookieMonster* GetCookieMonster() { + return GetRequestContext()->GetCookieStore()->GetCookieMonster(); + } + + private: + scoped_refptr<URLRequestContextGetter> url_request_context_getter_; +}; + + + +class CookiesTreeModelTest : public testing::Test { + public: + virtual void SetUp() { + profile_.reset(new CookieTestingProfile()); + } + + // Get the cookie names in the cookie list, as a comma seperated string. + // (Note that the CookieMonster cookie list is sorted by domain.) + // Ex: + // monster->SetCookie(GURL("http://b"), "X=1") + // monster->SetCookie(GURL("http://a"), "Y=1") + // EXPECT_STREQ("Y,X", GetMonsterCookies(monster).c_str()); + std::string GetMonsterCookies(net::CookieMonster* monster) { + std::vector<std::string> parts; + net::CookieMonster::CookieList cookie_list = monster->GetAllCookies(); + for (size_t i = 0; i < cookie_list.size(); ++i) + parts.push_back(cookie_list[i].second.Name()); + return JoinString(parts, ','); + } + + std::string GetCookiesOfChildren(const CookieTreeNode* node) { + if (node->GetChildCount()) { + std::string retval; + for (int i = 0; i < node->GetChildCount(); ++i) { + retval += GetCookiesOfChildren(node->GetChild(i)); + } + return retval; + } else { + if (node->GetDetailedInfo().node_type == + CookieTreeNode::DetailedInfo::TYPE_COOKIE) + return node->GetDetailedInfo().cookie->second.Name() + ","; + else + return ""; + } + } + // Get the cookie names displayed in the view (if we had one) in the order + // they are displayed, as a comma seperated string. + // Ex: EXPECT_STREQ("X,Y", GetDisplayedCookies(cookies_view).c_str()); + std::string GetDisplayedCookies(CookiesTreeModel* cookies_model) { + CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>( + cookies_model->GetRoot()); + std::string retval = GetCookiesOfChildren(root); + if (retval.length() && retval[retval.length() - 1] == ',') + retval.erase(retval.length() - 1); + return retval; + } + + // do not call on the root + void DeleteCookie(CookieTreeNode* node) { + node->DeleteStoredObjects(); + // find the parent and index + CookieTreeNode* parent_node = node->GetParent(); + DCHECK(parent_node); + int ct_node_index = parent_node->IndexOfChild(node); + delete parent_node->GetModel()->Remove(parent_node, ct_node_index); + } + protected: + MessageLoopForUI message_loop_; + scoped_ptr<CookieTestingProfile> profile_; +}; + + +TEST_F(CookiesTreeModelTest, RemoveAll) { + net::CookieMonster* monster = profile_->GetCookieMonster(); + monster->SetCookie(GURL("http://foo"), "A=1"); + monster->SetCookie(GURL("http://foo2"), "B=1"); + CookiesTreeModel cookies_model(profile_.get()); + + // Reset the selection of the first row. + { + SCOPED_TRACE("Before removing"); + EXPECT_EQ(GetMonsterCookies(monster), GetDisplayedCookies(&cookies_model)); + } + + cookies_model.DeleteAllCookies(); + { + SCOPED_TRACE("After removing"); + EXPECT_EQ(1, cookies_model.GetRoot()->GetTotalNodeCount()); + EXPECT_EQ(0, cookies_model.GetRoot()->GetChildCount()); + EXPECT_EQ(std::string(""), GetMonsterCookies(monster)); + EXPECT_EQ(GetMonsterCookies(monster), GetDisplayedCookies(&cookies_model)); + } +} + +TEST_F(CookiesTreeModelTest, Remove) { + net::CookieMonster* monster = profile_->GetCookieMonster(); + monster->SetCookie(GURL("http://foo1"), "A=1"); + monster->SetCookie(GURL("http://foo2"), "B=1"); + monster->SetCookie(GURL("http://foo3"), "C=1"); + CookiesTreeModel cookies_model(profile_.get()); + + { + SCOPED_TRACE("Initial State 3 cookies"); + // 10 because there's the root, then foo1 -> cookies -> a, + // foo2 -> cookies -> b, foo3 -> cookies -> c + EXPECT_EQ(10, cookies_model.GetRoot()->GetTotalNodeCount()); + } + DeleteCookie(cookies_model.GetRoot()->GetChild(0)); + { + SCOPED_TRACE("First origin removed"); + EXPECT_STREQ("B,C", GetMonsterCookies(monster).c_str()); + EXPECT_STREQ("B,C", GetDisplayedCookies(&cookies_model).c_str()); + EXPECT_EQ(7, cookies_model.GetRoot()->GetTotalNodeCount()); + } +} + +TEST_F(CookiesTreeModelTest, RemoveCookiesNode) { + net::CookieMonster* monster = profile_->GetCookieMonster(); + monster->SetCookie(GURL("http://foo1"), "A=1"); + monster->SetCookie(GURL("http://foo2"), "B=1"); + monster->SetCookie(GURL("http://foo3"), "C=1"); + CookiesTreeModel cookies_model(profile_.get()); + + { + SCOPED_TRACE("Initial State 3 cookies"); + // 10 because there's the root, then foo1 -> cookies -> a, + // foo2 -> cookies -> b, foo3 -> cookies -> c + EXPECT_EQ(10, cookies_model.GetRoot()->GetTotalNodeCount()); + } + DeleteCookie(cookies_model.GetRoot()->GetChild(0)->GetChild(0)); + { + SCOPED_TRACE("First origin removed"); + EXPECT_STREQ("B,C", GetMonsterCookies(monster).c_str()); + EXPECT_STREQ("B,C", GetDisplayedCookies(&cookies_model).c_str()); + // 8 because in this case, the origin remains, although the COOKIES + // node beneath it has been deleted. So, we have + // root -> foo1 -> cookies -> a, foo2, foo3 -> cookies -> c + EXPECT_EQ(8, cookies_model.GetRoot()->GetTotalNodeCount()); + } +} + +TEST_F(CookiesTreeModelTest, RemoveCookieNode) { + net::CookieMonster* monster = profile_->GetCookieMonster(); + monster->SetCookie(GURL("http://foo1"), "A=1"); + monster->SetCookie(GURL("http://foo2"), "B=1"); + monster->SetCookie(GURL("http://foo3"), "C=1"); + CookiesTreeModel cookies_model(profile_.get()); + + { + SCOPED_TRACE("Initial State 3 cookies"); + // 10 because there's the root, then foo1 -> cookies -> a, + // foo2 -> cookies -> b, foo3 -> cookies -> c + EXPECT_EQ(10, cookies_model.GetRoot()->GetTotalNodeCount()); + } + DeleteCookie(cookies_model.GetRoot()->GetChild(1)->GetChild(0)); + { + SCOPED_TRACE("Second origin COOKIES node removed"); + EXPECT_STREQ("A,C", GetMonsterCookies(monster).c_str()); + EXPECT_STREQ("A,C", GetDisplayedCookies(&cookies_model).c_str()); + // 8 because in this case, the origin remains, although the COOKIES + // node beneath it has been deleted. So, we have + // root -> foo1 -> cookies -> a, foo2, foo3 -> cookies -> c + EXPECT_EQ(8, cookies_model.GetRoot()->GetTotalNodeCount()); + } +} + +TEST_F(CookiesTreeModelTest, RemoveSingleCookieNode) { + net::CookieMonster* monster = profile_->GetCookieMonster(); + monster->SetCookie(GURL("http://foo1"), "A=1"); + monster->SetCookie(GURL("http://foo2"), "B=1"); + monster->SetCookie(GURL("http://foo3"), "C=1"); + monster->SetCookie(GURL("http://foo3"), "D=1"); + CookiesTreeModel cookies_model(profile_.get()); + + { + SCOPED_TRACE("Initial State 4 cookies"); + // 11 because there's the root, then foo1 -> cookies -> a, + // foo2 -> cookies -> b, foo3 -> cookies -> c,d + EXPECT_EQ(11, cookies_model.GetRoot()->GetTotalNodeCount()); + EXPECT_STREQ("A,B,C,D", GetMonsterCookies(monster).c_str()); + EXPECT_STREQ("A,B,C,D", GetDisplayedCookies(&cookies_model).c_str()); + } + DeleteCookie(cookies_model.GetRoot()->GetChild(2)); + { + SCOPED_TRACE("Third origin removed"); + EXPECT_STREQ("A,B", GetMonsterCookies(monster).c_str()); + EXPECT_STREQ("A,B", GetDisplayedCookies(&cookies_model).c_str()); + EXPECT_EQ(7, cookies_model.GetRoot()->GetTotalNodeCount()); + } +} + +TEST_F(CookiesTreeModelTest, RemoveSingleCookieNodeOf3) { + net::CookieMonster* monster = profile_->GetCookieMonster(); + monster->SetCookie(GURL("http://foo1"), "A=1"); + monster->SetCookie(GURL("http://foo2"), "B=1"); + monster->SetCookie(GURL("http://foo3"), "C=1"); + monster->SetCookie(GURL("http://foo3"), "D=1"); + monster->SetCookie(GURL("http://foo3"), "E=1"); + CookiesTreeModel cookies_model(profile_.get()); + + { + SCOPED_TRACE("Initial State 5 cookies"); + // 11 because there's the root, then foo1 -> cookies -> a, + // foo2 -> cookies -> b, foo3 -> cookies -> c,d,e + EXPECT_EQ(12, cookies_model.GetRoot()->GetTotalNodeCount()); + EXPECT_STREQ("A,B,C,D,E", GetMonsterCookies(monster).c_str()); + EXPECT_STREQ("A,B,C,D,E", GetDisplayedCookies(&cookies_model).c_str()); + } + DeleteCookie(cookies_model.GetRoot()->GetChild(2)->GetChild(0)-> + GetChild(1)); + { + SCOPED_TRACE("Middle cookie in third origin removed"); + EXPECT_STREQ("A,B,C,E", GetMonsterCookies(monster).c_str()); + EXPECT_STREQ("A,B,C,E", GetDisplayedCookies(&cookies_model).c_str()); + EXPECT_EQ(11, cookies_model.GetRoot()->GetTotalNodeCount()); + } +} + +TEST_F(CookiesTreeModelTest, RemoveSecondOrigin) { + net::CookieMonster* monster = profile_->GetCookieMonster(); + monster->SetCookie(GURL("http://foo1"), "A=1"); + monster->SetCookie(GURL("http://foo2"), "B=1"); + monster->SetCookie(GURL("http://foo3"), "C=1"); + monster->SetCookie(GURL("http://foo3"), "D=1"); + monster->SetCookie(GURL("http://foo3"), "E=1"); + CookiesTreeModel cookies_model(profile_.get()); + + { + SCOPED_TRACE("Initial State 5 cookies"); + // 11 because there's the root, then foo1 -> cookies -> a, + // foo2 -> cookies -> b, foo3 -> cookies -> c,d,e + EXPECT_EQ(12, cookies_model.GetRoot()->GetTotalNodeCount()); + EXPECT_STREQ("A,B,C,D,E", GetMonsterCookies(monster).c_str()); + EXPECT_STREQ("A,B,C,D,E", GetDisplayedCookies(&cookies_model).c_str()); + } + DeleteCookie(cookies_model.GetRoot()->GetChild(1)); + { + SCOPED_TRACE("Second origin removed"); + EXPECT_STREQ("A,C,D,E", GetMonsterCookies(monster).c_str()); + EXPECT_STREQ("A,C,D,E", GetDisplayedCookies(&cookies_model).c_str()); + // Left with root -> foo1 -> cookies -> a, foo3 -> cookies -> c,d,e + EXPECT_EQ(9, cookies_model.GetRoot()->GetTotalNodeCount()); + } +} + +} // namespace |