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

Side by Side Diff: chrome/browser/ui/intents/web_intents_model_unittest.cc

Issue 11410040: Delete WebUI for web intents. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Return value from flag for profile disablement Created 8 years, 1 month 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
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "base/file_util.h"
6 #include "base/message_loop.h"
7 #include "base/scoped_temp_dir.h"
8 #include "base/synchronization/waitable_event.h"
9 #include "base/utf_string_conversions.h"
10 #include "base/values.h"
11 #include "chrome/browser/intents/web_intents_registry.h"
12 #include "chrome/browser/ui/intents/web_intents_model.h"
13 #include "chrome/browser/webdata/web_data_service.h"
14 #include "content/public/test/test_browser_thread.h"
15 #include "testing/gtest/include/gtest/gtest.h"
16 #include "ui/base/models/tree_node_model.h"
17
18 using content::BrowserThread;
19
20 class WebIntentsModelTest : public testing::Test {
21 public:
22 WebIntentsModelTest()
23 : ui_thread_(BrowserThread::UI, &message_loop_),
24 db_thread_(BrowserThread::DB) {}
25
26 protected:
27 virtual void SetUp() {
28 db_thread_.Start();
29 wds_ = new WebDataService();
30 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
31 wds_->Init(temp_dir_.path());
32
33 registry_.Initialize(wds_, NULL);
34 }
35
36 virtual void TearDown() {
37 wds_->ShutdownOnUIThread();
38 wds_ = NULL;
39 base::WaitableEvent done(false, false);
40 BrowserThread::PostTask(BrowserThread::DB, FROM_HERE,
41 base::Bind(&base::WaitableEvent::Signal, base::Unretained(&done)));
42 done.Wait();
43 db_thread_.Stop();
44 MessageLoop::current()->PostTask(FROM_HERE, MessageLoop::QuitClosure());
45 MessageLoop::current()->Run();
46 }
47
48 void LoadRegistry() {
49 {
50 webkit_glue::WebIntentServiceData service;
51 service.service_url = GURL("http://www.google.com/share");
52 service.action = ASCIIToUTF16("SHARE");
53 service.type = ASCIIToUTF16("text/url");
54 service.title = ASCIIToUTF16("Google");
55 registry_.RegisterIntentService(service);
56 }
57 {
58 webkit_glue::WebIntentServiceData service;
59 service.service_url = GURL("http://picasaweb.google.com/share");
60 service.action = ASCIIToUTF16("EDIT");
61 service.type = ASCIIToUTF16("image/*");
62 service.title = ASCIIToUTF16("Picasa");
63 registry_.RegisterIntentService(service);
64 }
65 {
66 webkit_glue::WebIntentServiceData service;
67 service.service_url = GURL("http://www.digg.com/share");
68 service.action = ASCIIToUTF16("SHARE");
69 service.type = ASCIIToUTF16("text/url");
70 service.title = ASCIIToUTF16("Digg");
71 registry_.RegisterIntentService(service);
72 }
73 }
74
75 MessageLoopForUI message_loop_;
76 content::TestBrowserThread ui_thread_;
77 content::TestBrowserThread db_thread_;
78 scoped_refptr<WebDataService> wds_;
79 WebIntentsRegistry registry_;
80 ScopedTempDir temp_dir_;
81 };
82
83 class WaitingWebIntentsObserver : public WebIntentsModel::Observer {
84 public:
85 WaitingWebIntentsObserver() : event_(true, false), added_(0) {}
86
87 virtual void TreeModelBeginBatch(WebIntentsModel* model) {}
88
89 virtual void TreeModelEndBatch(WebIntentsModel* model) {
90 event_.Signal();
91 MessageLoop::current()->Quit();
92 }
93
94 virtual void TreeNodesAdded(ui::TreeModel* model,
95 ui::TreeModelNode* parent,
96 int start,
97 int count) {
98 added_++;
99 }
100
101 virtual void TreeNodesRemoved(ui::TreeModel* model,
102 ui::TreeModelNode* node,
103 int start,
104 int count) {
105 }
106
107 virtual void TreeNodeChanged(ui::TreeModel* model, ui::TreeModelNode* node) {
108 }
109
110 void Wait() {
111 MessageLoop::current()->Run();
112 event_.Wait();
113 }
114
115 base::WaitableEvent event_;
116 int added_;
117 };
118
119 TEST_F(WebIntentsModelTest, NodeIDs) {
120 LoadRegistry();
121 WaitingWebIntentsObserver obs;
122 WebIntentsModel intents_model(&registry_);
123 intents_model.AddWebIntentsTreeObserver(&obs);
124 obs.Wait();
125
126 WebIntentsTreeNode* n1 = new WebIntentsTreeNode(ASCIIToUTF16("origin"));
127 intents_model.Add(intents_model.GetRoot(), n1,
128 intents_model.GetRoot()->child_count());
129 EXPECT_EQ(ASCIIToUTF16("origin"), intents_model.GetTreeNodeId(n1));
130
131 WebIntentsTreeNode* ncheck = intents_model.GetTreeNode("origin");
132 EXPECT_EQ(ncheck, n1);
133
134 base::ListValue nodes;
135 intents_model.GetChildNodeList(
136 intents_model.GetTreeNode("www.google.com"), 0, 1, &nodes);
137 EXPECT_EQ(static_cast<size_t>(1), nodes.GetSize());
138 base::DictionaryValue* dict;
139 EXPECT_TRUE(nodes.GetDictionary(0, &dict));
140
141 std::string val;
142 EXPECT_TRUE(dict->GetString("site", &val));
143 EXPECT_EQ("www.google.com", val);
144 EXPECT_TRUE(dict->GetString("name", &val));
145 EXPECT_EQ("Google", val);
146 EXPECT_TRUE(dict->GetString("url", &val));
147 EXPECT_EQ("http://www.google.com/share", val);
148 EXPECT_TRUE(dict->GetString("icon", &val));
149 EXPECT_EQ("http://www.google.com/favicon.ico", val);
150 base::ListValue* types_list;
151 EXPECT_TRUE(dict->GetList("types", &types_list));
152 EXPECT_EQ(static_cast<size_t>(1), types_list->GetSize());
153 EXPECT_TRUE(types_list->GetString(0, &val));
154 EXPECT_EQ("text/url", val);
155 bool bval;
156 EXPECT_TRUE(dict->GetBoolean("blocked", &bval));
157 EXPECT_FALSE(bval);
158 EXPECT_TRUE(dict->GetBoolean("disabled", &bval));
159 EXPECT_FALSE(bval);
160 }
161
162 TEST_F(WebIntentsModelTest, LoadFromWebData) {
163 LoadRegistry();
164 WaitingWebIntentsObserver obs;
165 WebIntentsModel intents_model(&registry_);
166 intents_model.AddWebIntentsTreeObserver(&obs);
167 obs.Wait();
168 EXPECT_EQ(6, obs.added_);
169
170 WebIntentsTreeNode* node = intents_model.GetTreeNode("www.google.com");
171 ASSERT_NE(static_cast<WebIntentsTreeNode*>(NULL), node);
172 EXPECT_EQ(WebIntentsTreeNode::TYPE_ORIGIN, node->Type());
173 EXPECT_EQ(ASCIIToUTF16("www.google.com"), node->GetTitle());
174 EXPECT_EQ(1, node->child_count());
175 node = node->GetChild(0);
176 ASSERT_EQ(WebIntentsTreeNode::TYPE_SERVICE, node->Type());
177 ServiceTreeNode* snode = static_cast<ServiceTreeNode*>(node);
178 EXPECT_EQ(ASCIIToUTF16("Google"), snode->ServiceName());
179 EXPECT_EQ(ASCIIToUTF16("SHARE"), snode->Action());
180 EXPECT_EQ(ASCIIToUTF16("http://www.google.com/share"), snode->ServiceUrl());
181 EXPECT_EQ(static_cast<size_t>(1), snode->Types().GetSize());
182 string16 stype;
183 ASSERT_TRUE(snode->Types().GetString(0, &stype));
184 EXPECT_EQ(ASCIIToUTF16("text/url"), stype);
185
186 node = intents_model.GetTreeNode("www.digg.com");
187 ASSERT_NE(static_cast<WebIntentsTreeNode*>(NULL), node);
188 EXPECT_EQ(WebIntentsTreeNode::TYPE_ORIGIN, node->Type());
189 EXPECT_EQ(ASCIIToUTF16("www.digg.com"), node->GetTitle());
190 }
191
192 TEST_F(WebIntentsModelTest, TestMultipleIntentsOnHost) {
193 LoadRegistry();
194 webkit_glue::WebIntentServiceData service;
195 service.service_url = GURL("http://www.google.com/xedit");
196 service.action = ASCIIToUTF16("XEDIT");
197 service.type = ASCIIToUTF16("text/plain");
198 service.title = ASCIIToUTF16("XEdit");
199 registry_.RegisterIntentService(service);
200
201 WaitingWebIntentsObserver obs;
202 WebIntentsModel intents_model(&registry_);
203 intents_model.AddWebIntentsTreeObserver(&obs);
204 obs.Wait();
205 EXPECT_EQ(7, obs.added_);
206
207 WebIntentsTreeNode* node = intents_model.GetTreeNode("www.google.com");
208 ASSERT_EQ(2, node->child_count());
209 node = node->GetChild(1);
210 ASSERT_EQ(WebIntentsTreeNode::TYPE_SERVICE, node->Type());
211 ASSERT_EQ(WebIntentsTreeNode::TYPE_SERVICE, node->Type());
212 ServiceTreeNode* snode = static_cast<ServiceTreeNode*>(node);
213 EXPECT_EQ(ASCIIToUTF16("XEDIT"), snode->Action());
214 EXPECT_EQ(ASCIIToUTF16("http://www.google.com/xedit"), snode->ServiceUrl());
215 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/intents/web_intents_model.cc ('k') | chrome/browser/ui/webui/options/content_settings_handler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698