summaryrefslogtreecommitdiffstats
path: root/chrome/browser/cookies_tree_model_unittest.cc
diff options
context:
space:
mode:
authorian@chromium.org <ian@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-11-06 04:58:48 +0000
committerian@chromium.org <ian@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-11-06 04:58:48 +0000
commitdce516200cbac6100f0268c5f036e8dbddf4f8ac (patch)
tree9e758547e48369576b568c8dd46d69fb8a75f958 /chrome/browser/cookies_tree_model_unittest.cc
parent91c836e0591bd3c3d874eb18d2403ce927e6be6a (diff)
downloadchromium_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.cc290
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