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

Side by Side Diff: chrome/browser/extensions/extension_menu_manager_unittest.cc

Issue 2867008: Show extension icons next to their top-level context menu items.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years, 6 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) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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 <vector> 5 #include <vector>
6 6
7 #include "base/json/json_reader.h" 7 #include "base/json/json_reader.h"
8 #include "base/path_service.h" 8 #include "base/path_service.h"
9 #include "base/scoped_temp_dir.h" 9 #include "base/scoped_temp_dir.h"
10 #include "base/values.h" 10 #include "base/values.h"
11 #include "chrome/browser/extensions/extension_menu_manager.h" 11 #include "chrome/browser/extensions/extension_menu_manager.h"
12 #include "chrome/browser/extensions/extension_message_service.h" 12 #include "chrome/browser/extensions/extension_message_service.h"
13 #include "chrome/browser/extensions/test_extension_prefs.h"
13 #include "chrome/common/chrome_paths.h" 14 #include "chrome/common/chrome_paths.h"
14 #include "chrome/common/extensions/extension.h" 15 #include "chrome/common/extensions/extension.h"
15 #include "chrome/common/extensions/extension_constants.h" 16 #include "chrome/common/extensions/extension_constants.h"
16 #include "chrome/common/notification_service.h" 17 #include "chrome/common/notification_service.h"
17 #include "chrome/test/testing_profile.h" 18 #include "chrome/test/testing_profile.h"
18 #include "testing/gtest/include/gtest/gtest.h" 19 #include "testing/gtest/include/gtest/gtest.h"
19 #include "testing/gmock/include/gmock/gmock.h" 20 #include "testing/gmock/include/gmock/gmock.h"
20 #include "webkit/glue/context_menu.h" 21 #include "webkit/glue/context_menu.h"
21 22
22 using testing::_; 23 using testing::_;
23 using testing::AtLeast; 24 using testing::AtLeast;
24 using testing::Return; 25 using testing::Return;
25 using testing::SaveArg; 26 using testing::SaveArg;
26 27
27 // Base class for tests. 28 // Base class for tests.
28 class ExtensionMenuManagerTest : public testing::Test { 29 class ExtensionMenuManagerTest : public testing::Test {
29 public: 30 public:
30 ExtensionMenuManagerTest() {} 31 ExtensionMenuManagerTest() {}
31 ~ExtensionMenuManagerTest() {} 32 ~ExtensionMenuManagerTest() {}
32 33
33 // Returns a test item with some default values you can override if you want 34 // Returns a test item.
34 // to by passing in |properties| (currently just extension_id). Caller owns 35 static ExtensionMenuItem* CreateTestItem(Extension* extension) {
35 // the return value and is responsible for freeing it.
36 static ExtensionMenuItem* CreateTestItem(DictionaryValue* properties) {
37 std::string extension_id = "0123456789"; // A default dummy value.
38 if (properties && properties->HasKey(L"extension_id"))
39 EXPECT_TRUE(properties->GetString(L"extension_id", &extension_id));
40
41 ExtensionMenuItem::Type type = ExtensionMenuItem::NORMAL; 36 ExtensionMenuItem::Type type = ExtensionMenuItem::NORMAL;
42 ExtensionMenuItem::ContextList contexts(ExtensionMenuItem::ALL); 37 ExtensionMenuItem::ContextList contexts(ExtensionMenuItem::ALL);
43 ExtensionMenuItem::ContextList enabled_contexts = contexts; 38 ExtensionMenuItem::ContextList enabled_contexts = contexts;
44 std::string title = "test"; 39 return new ExtensionMenuItem(extension->id(), "test", false, type, contexts,
40 enabled_contexts);
41 }
45 42
46 return new ExtensionMenuItem(extension_id, title, false, type, contexts, 43 // Creates and returns a test Extension. The caller does *not* own the return
47 enabled_contexts); 44 // value.
45 Extension* AddExtension(std::string name) {
46 return prefs_.AddExtension(name);
48 } 47 }
49 48
50 protected: 49 protected:
51 ExtensionMenuManager manager_; 50 ExtensionMenuManager manager_;
51 TestExtensionPrefs prefs_;
52 52
53 private: 53 private:
54 DISALLOW_COPY_AND_ASSIGN(ExtensionMenuManagerTest); 54 DISALLOW_COPY_AND_ASSIGN(ExtensionMenuManagerTest);
55 }; 55 };
56 56
57 // Tests adding, getting, and removing items. 57 // Tests adding, getting, and removing items.
58 TEST_F(ExtensionMenuManagerTest, AddGetRemoveItems) { 58 TEST_F(ExtensionMenuManagerTest, AddGetRemoveItems) {
59 Extension* extension = AddExtension("test");
60
59 // Add a new item, make sure you can get it back. 61 // Add a new item, make sure you can get it back.
60 ExtensionMenuItem* item1 = CreateTestItem(NULL); 62 ExtensionMenuItem* item1 = CreateTestItem(extension);
61 ASSERT_TRUE(item1 != NULL); 63 ASSERT_TRUE(item1 != NULL);
62 int id1 = manager_.AddContextItem(item1); // Ownership transferred. 64 int id1 = manager_.AddContextItem(extension, item1);
63 ASSERT_GT(id1, 0); 65 ASSERT_GT(id1, 0);
64 ASSERT_EQ(item1, manager_.GetItemById(id1)); 66 ASSERT_EQ(item1, manager_.GetItemById(id1));
65 const ExtensionMenuItem::List* items = 67 const ExtensionMenuItem::List* items =
66 manager_.MenuItems(item1->extension_id()); 68 manager_.MenuItems(item1->extension_id());
67 ASSERT_EQ(1u, items->size()); 69 ASSERT_EQ(1u, items->size());
68 ASSERT_EQ(item1, items->at(0)); 70 ASSERT_EQ(item1, items->at(0));
69 71
70 // Add a second item, make sure it comes back too. 72 // Add a second item, make sure it comes back too.
71 ExtensionMenuItem* item2 = CreateTestItem(NULL); 73 ExtensionMenuItem* item2 = CreateTestItem(extension);
72 int id2 = manager_.AddContextItem(item2); // Ownership transferred. 74 int id2 = manager_.AddContextItem(extension, item2);
73 ASSERT_GT(id2, 0); 75 ASSERT_GT(id2, 0);
74 ASSERT_NE(id1, id2); 76 ASSERT_NE(id1, id2);
75 ASSERT_EQ(item2, manager_.GetItemById(id2)); 77 ASSERT_EQ(item2, manager_.GetItemById(id2));
76 items = manager_.MenuItems(item2->extension_id()); 78 items = manager_.MenuItems(item2->extension_id());
77 ASSERT_EQ(2u, items->size()); 79 ASSERT_EQ(2u, items->size());
78 ASSERT_EQ(item1, items->at(0)); 80 ASSERT_EQ(item1, items->at(0));
79 ASSERT_EQ(item2, items->at(1)); 81 ASSERT_EQ(item2, items->at(1));
80 82
81 // Try adding item 3, then removing it. 83 // Try adding item 3, then removing it.
82 ExtensionMenuItem* item3 = CreateTestItem(NULL); 84 ExtensionMenuItem* item3 = CreateTestItem(extension);
83 std::string extension_id = item3->extension_id(); 85 std::string extension_id = item3->extension_id();
84 int id3 = manager_.AddContextItem(item3); // Ownership transferred. 86 int id3 = manager_.AddContextItem(extension, item3);
85 ASSERT_GT(id3, 0); 87 ASSERT_GT(id3, 0);
86 ASSERT_EQ(item3, manager_.GetItemById(id3)); 88 ASSERT_EQ(item3, manager_.GetItemById(id3));
87 ASSERT_EQ(3u, manager_.MenuItems(extension_id)->size()); 89 ASSERT_EQ(3u, manager_.MenuItems(extension_id)->size());
88 ASSERT_TRUE(manager_.RemoveContextMenuItem(id3)); 90 ASSERT_TRUE(manager_.RemoveContextMenuItem(id3));
89 ASSERT_EQ(NULL, manager_.GetItemById(id3)); 91 ASSERT_EQ(NULL, manager_.GetItemById(id3));
90 ASSERT_EQ(2u, manager_.MenuItems(extension_id)->size()); 92 ASSERT_EQ(2u, manager_.MenuItems(extension_id)->size());
91 93
92 // Make sure removing a non-existent item returns false. 94 // Make sure removing a non-existent item returns false.
93 ASSERT_FALSE(manager_.RemoveContextMenuItem(5)); 95 ASSERT_FALSE(manager_.RemoveContextMenuItem(5));
94 } 96 }
95 97
96 // Test adding/removing child items. 98 // Test adding/removing child items.
97 TEST_F(ExtensionMenuManagerTest, ChildFunctions) { 99 TEST_F(ExtensionMenuManagerTest, ChildFunctions) {
98 DictionaryValue properties; 100 Extension* extension1 = AddExtension("1111");
99 properties.SetString(L"extension_id", "1111"); 101 Extension* extension2 = AddExtension("2222");
100 ExtensionMenuItem* item1 = CreateTestItem(&properties); 102 Extension* extension3 = AddExtension("3333");
101 103
102 properties.SetString(L"extension_id", "2222"); 104 ExtensionMenuItem* item1 = CreateTestItem(extension1);
103 ExtensionMenuItem* item2 = CreateTestItem(&properties); 105 ExtensionMenuItem* item2 = CreateTestItem(extension2);
104 ExtensionMenuItem* item2_child = CreateTestItem(&properties); 106 ExtensionMenuItem* item2_child = CreateTestItem(extension2);
105 ExtensionMenuItem* item2_grandchild = CreateTestItem(&properties); 107 ExtensionMenuItem* item2_grandchild = CreateTestItem(extension2);
106 108
107 // This third item we expect to fail inserting, so we use a scoped_ptr to make 109 // This third item we expect to fail inserting, so we use a scoped_ptr to make
108 // sure it gets deleted. 110 // sure it gets deleted.
109 properties.SetString(L"extension_id", "3333"); 111 scoped_ptr<ExtensionMenuItem> item3(CreateTestItem(extension3));
110 scoped_ptr<ExtensionMenuItem> item3(CreateTestItem(&properties));
111 112
112 // Add in the first two items. 113 // Add in the first two items.
113 int id1 = manager_.AddContextItem(item1); // Ownership transferred. 114 int id1 = manager_.AddContextItem(extension1, item1);
114 int id2 = manager_.AddContextItem(item2); // Ownership transferred. 115 int id2 = manager_.AddContextItem(extension2, item2);
115 116
116 ASSERT_NE(id1, id2); 117 ASSERT_NE(id1, id2);
117 118
118 // Try adding item3 as a child of item2 - this should fail because item3 has 119 // Try adding item3 as a child of item2 - this should fail because item3 has
119 // a different extension id. 120 // a different extension id.
120 ASSERT_EQ(0, manager_.AddChildItem(id2, item3.get())); 121 ASSERT_EQ(0, manager_.AddChildItem(id2, item3.get()));
121 122
122 // Add item2_child as a child of item2. 123 // Add item2_child as a child of item2.
123 int id2_child = manager_.AddChildItem(id2, item2_child); 124 int id2_child = manager_.AddChildItem(id2, item2_child);
124 ASSERT_GT(id2_child, 0); 125 ASSERT_GT(id2_child, 0);
(...skipping 18 matching lines...) Expand all
143 144
144 // Remove child2_item. 145 // Remove child2_item.
145 ASSERT_TRUE(manager_.RemoveContextMenuItem(id2_child)); 146 ASSERT_TRUE(manager_.RemoveContextMenuItem(id2_child));
146 ASSERT_EQ(1u, manager_.MenuItems(item2->extension_id())->size()); 147 ASSERT_EQ(1u, manager_.MenuItems(item2->extension_id())->size());
147 ASSERT_EQ(item2, manager_.MenuItems(item2->extension_id())->at(0)); 148 ASSERT_EQ(item2, manager_.MenuItems(item2->extension_id())->at(0));
148 ASSERT_EQ(0, item2->child_count()); 149 ASSERT_EQ(0, item2->child_count());
149 } 150 }
150 151
151 // Tests changing parents. 152 // Tests changing parents.
152 TEST_F(ExtensionMenuManagerTest, ChangeParent) { 153 TEST_F(ExtensionMenuManagerTest, ChangeParent) {
154 Extension* extension1 = AddExtension("1111");
155
153 // First create two items and add them both to the manager. 156 // First create two items and add them both to the manager.
154 ExtensionMenuItem* item1 = CreateTestItem(NULL); 157 ExtensionMenuItem* item1 = CreateTestItem(extension1);
155 ExtensionMenuItem* item2 = CreateTestItem(NULL); 158 ExtensionMenuItem* item2 = CreateTestItem(extension1);
156 159
157 int id1 = manager_.AddContextItem(item1); 160 int id1 = manager_.AddContextItem(extension1, item1);
158 ASSERT_GT(id1, 0); 161 ASSERT_GT(id1, 0);
159 int id2 = manager_.AddContextItem(item2); 162 int id2 = manager_.AddContextItem(extension1, item2);
160 ASSERT_GT(id2, 0); 163 ASSERT_GT(id2, 0);
161 164
162 const ExtensionMenuItem::List* items = 165 const ExtensionMenuItem::List* items =
163 manager_.MenuItems(item1->extension_id()); 166 manager_.MenuItems(item1->extension_id());
164 ASSERT_EQ(2u, items->size()); 167 ASSERT_EQ(2u, items->size());
165 ASSERT_EQ(item1, items->at(0)); 168 ASSERT_EQ(item1, items->at(0));
166 ASSERT_EQ(item2, items->at(1)); 169 ASSERT_EQ(item2, items->at(1));
167 170
168 // Now create a third item, initially add it as a child of item1, then move 171 // Now create a third item, initially add it as a child of item1, then move
169 // it to be a child of item2. 172 // it to be a child of item2.
170 ExtensionMenuItem* item3 = CreateTestItem(NULL); 173 ExtensionMenuItem* item3 = CreateTestItem(extension1);
171 174
172 int id3 = manager_.AddChildItem(id1, item3); 175 int id3 = manager_.AddChildItem(id1, item3);
173 ASSERT_GT(id3, 0); 176 ASSERT_GT(id3, 0);
174 ASSERT_EQ(1, item1->child_count()); 177 ASSERT_EQ(1, item1->child_count());
175 ASSERT_EQ(item3, item1->children()[0]); 178 ASSERT_EQ(item3, item1->children()[0]);
176 179
177 ASSERT_TRUE(manager_.ChangeParent(id3, id2)); 180 ASSERT_TRUE(manager_.ChangeParent(id3, id2));
178 ASSERT_EQ(0, item1->child_count()); 181 ASSERT_EQ(0, item1->child_count());
179 ASSERT_EQ(1, item2->child_count()); 182 ASSERT_EQ(1, item2->child_count());
180 ASSERT_EQ(item3, item2->children()[0]); 183 ASSERT_EQ(item3, item2->children()[0]);
(...skipping 30 matching lines...) Expand all
211 // Move item2 to be a top-level item. 214 // Move item2 to be a top-level item.
212 ASSERT_TRUE(manager_.ChangeParent(id2, 0)); 215 ASSERT_TRUE(manager_.ChangeParent(id2, 0));
213 items = manager_.MenuItems(item1->extension_id()); 216 items = manager_.MenuItems(item1->extension_id());
214 ASSERT_EQ(2u, items->size()); 217 ASSERT_EQ(2u, items->size());
215 ASSERT_EQ(item1, items->at(0)); 218 ASSERT_EQ(item1, items->at(0));
216 ASSERT_EQ(item2, items->at(1)); 219 ASSERT_EQ(item2, items->at(1));
217 ASSERT_EQ(1, item1->child_count()); 220 ASSERT_EQ(1, item1->child_count());
218 ASSERT_EQ(item3, item1->children()[0]); 221 ASSERT_EQ(item3, item1->children()[0]);
219 222
220 // Make sure you can't move a node to be a child of another extension's item. 223 // Make sure you can't move a node to be a child of another extension's item.
221 DictionaryValue properties; 224 Extension* extension2 = AddExtension("2222");
222 properties.SetString(L"extension_id", "4444"); 225 ExtensionMenuItem* item4 = CreateTestItem(extension2);
223 ExtensionMenuItem* item4 = CreateTestItem(&properties); 226 int id4 = manager_.AddContextItem(extension2, item4);
224 int id4 = manager_.AddContextItem(item4);
225 ASSERT_GT(id4, 0); 227 ASSERT_GT(id4, 0);
226 ASSERT_FALSE(manager_.ChangeParent(id4, id1)); 228 ASSERT_FALSE(manager_.ChangeParent(id4, id1));
227 ASSERT_FALSE(manager_.ChangeParent(id1, id4)); 229 ASSERT_FALSE(manager_.ChangeParent(id1, id4));
228 230
229 // Make sure you can't make an item be it's own parent. 231 // Make sure you can't make an item be it's own parent.
230 ASSERT_FALSE(manager_.ChangeParent(id1, id1)); 232 ASSERT_FALSE(manager_.ChangeParent(id1, id1));
231 } 233 }
232 234
233 // Tests that we properly remove an extension's menu item when that extension is 235 // Tests that we properly remove an extension's menu item when that extension is
234 // unloaded. 236 // unloaded.
235 TEST_F(ExtensionMenuManagerTest, ExtensionUnloadRemovesMenuItems) { 237 TEST_F(ExtensionMenuManagerTest, ExtensionUnloadRemovesMenuItems) {
236 ScopedTempDir temp_dir;
237 ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
238
239 NotificationService* notifier = NotificationService::current(); 238 NotificationService* notifier = NotificationService::current();
240 ASSERT_TRUE(notifier != NULL); 239 ASSERT_TRUE(notifier != NULL);
241 240
242 // Create a test extension. 241 // Create a test extension.
243 DictionaryValue extension_properties; 242 Extension* extension1 = AddExtension("1111");
244 extension_properties.SetString(extension_manifest_keys::kVersion, "1");
245 extension_properties.SetString(extension_manifest_keys::kName, "Test");
246 Extension extension(temp_dir.path().AppendASCII("extension"));
247 std::string errors;
248 ASSERT_TRUE(extension.InitFromValue(extension_properties,
249 false, // No public key required.
250 &errors)) << errors;
251 243
252 // Create an ExtensionMenuItem and put it into the manager. 244 // Create an ExtensionMenuItem and put it into the manager.
253 DictionaryValue item_properties; 245 ExtensionMenuItem* item1 = CreateTestItem(extension1);
254 item_properties.SetString(L"extension_id", extension.id()); 246 ASSERT_EQ(extension1->id(), item1->extension_id());
255 ExtensionMenuItem* item1 = CreateTestItem(&item_properties); 247 int id1 = manager_.AddContextItem(extension1, item1);
256 ASSERT_EQ(extension.id(), item1->extension_id());
257 int id1 = manager_.AddContextItem(item1); // Ownership transferred.
258 ASSERT_GT(id1, 0); 248 ASSERT_GT(id1, 0);
259 ASSERT_EQ(1u, manager_.MenuItems(extension.id())->size()); 249 ASSERT_EQ(1u, manager_.MenuItems(extension1->id())->size());
260 250
261 // Create a menu item with a different extension id and add it to the manager. 251 // Create a menu item with a different extension id and add it to the manager.
262 std::string alternate_extension_id = "0000"; 252 Extension* extension2 = AddExtension("2222");
263 item_properties.SetString(L"extension_id", alternate_extension_id); 253 ExtensionMenuItem* item2 = CreateTestItem(extension2);
264 ExtensionMenuItem* item2 = CreateTestItem(&item_properties);
265 ASSERT_NE(item1->extension_id(), item2->extension_id()); 254 ASSERT_NE(item1->extension_id(), item2->extension_id());
266 int id2 = manager_.AddContextItem(item2); // Ownership transferred. 255 int id2 = manager_.AddContextItem(extension2, item2);
267 ASSERT_GT(id2, 0); 256 ASSERT_GT(id2, 0);
268 257
269 // Notify that the extension was unloaded, and make sure the right item is 258 // Notify that the extension was unloaded, and make sure the right item is
270 // gone. 259 // gone.
271 notifier->Notify(NotificationType::EXTENSION_UNLOADED, 260 notifier->Notify(NotificationType::EXTENSION_UNLOADED,
272 Source<Profile>(NULL), 261 Source<Profile>(NULL),
273 Details<Extension>(&extension)); 262 Details<Extension>(extension1));
274 ASSERT_EQ(NULL, manager_.MenuItems(extension.id())); 263 ASSERT_EQ(NULL, manager_.MenuItems(extension1->id()));
275 ASSERT_EQ(1u, manager_.MenuItems(alternate_extension_id)->size()); 264 ASSERT_EQ(1u, manager_.MenuItems(extension2->id())->size());
276 ASSERT_TRUE(manager_.GetItemById(id1) == NULL); 265 ASSERT_TRUE(manager_.GetItemById(id1) == NULL);
277 ASSERT_TRUE(manager_.GetItemById(id2) != NULL); 266 ASSERT_TRUE(manager_.GetItemById(id2) != NULL);
278 } 267 }
279 268
280 // A mock message service for tests of ExtensionMenuManager::ExecuteCommand. 269 // A mock message service for tests of ExtensionMenuManager::ExecuteCommand.
281 class MockExtensionMessageService : public ExtensionMessageService { 270 class MockExtensionMessageService : public ExtensionMessageService {
282 public: 271 public:
283 explicit MockExtensionMessageService(Profile* profile) : 272 explicit MockExtensionMessageService(Profile* profile) :
284 ExtensionMessageService(profile) {} 273 ExtensionMessageService(profile) {}
285 274
(...skipping 15 matching lines...) Expand all
301 290
302 private: 291 private:
303 DISALLOW_COPY_AND_ASSIGN(MockTestingProfile); 292 DISALLOW_COPY_AND_ASSIGN(MockTestingProfile);
304 }; 293 };
305 294
306 // Tests the RemoveAll functionality. 295 // Tests the RemoveAll functionality.
307 TEST_F(ExtensionMenuManagerTest, RemoveAll) { 296 TEST_F(ExtensionMenuManagerTest, RemoveAll) {
308 // Try removing all items for an extension id that doesn't have any items. 297 // Try removing all items for an extension id that doesn't have any items.
309 manager_.RemoveAllContextItems("CCCC"); 298 manager_.RemoveAllContextItems("CCCC");
310 299
311 // Add 2 top-level and one child item for extension id AAAA. 300 // Add 2 top-level and one child item for extension 1.
312 DictionaryValue properties; 301 Extension* extension1 = AddExtension("1111");
313 properties.SetString(L"extension_id", "AAAA"); 302 ExtensionMenuItem* item1 = CreateTestItem(extension1);
314 ExtensionMenuItem* item1 = CreateTestItem(&properties); 303 ExtensionMenuItem* item2 = CreateTestItem(extension1);
315 ExtensionMenuItem* item2 = CreateTestItem(&properties); 304 ExtensionMenuItem* item3 = CreateTestItem(extension1);
316 ExtensionMenuItem* item3 = CreateTestItem(&properties); 305 int id1 = manager_.AddContextItem(extension1, item1);
317 int id1 = manager_.AddContextItem(item1); 306 int id2 = manager_.AddContextItem(extension1, item2);
318 int id2 = manager_.AddContextItem(item2);
319 EXPECT_GT(id1, 0); 307 EXPECT_GT(id1, 0);
320 EXPECT_GT(id2, 0); 308 EXPECT_GT(id2, 0);
321 int id3 = manager_.AddChildItem(id1, item3); 309 int id3 = manager_.AddChildItem(id1, item3);
322 EXPECT_GT(id3, 0); 310 EXPECT_GT(id3, 0);
323 311
324 // Add one top-level item for extension id BBBB. 312 // Add one top-level item for extension 2.
325 properties.SetString(L"extension_id", "BBBB"); 313 Extension* extension2 = AddExtension("2222");
326 ExtensionMenuItem* item4 = CreateTestItem(&properties); 314 ExtensionMenuItem* item4 = CreateTestItem(extension2);
327 manager_.AddContextItem(item4); 315 manager_.AddContextItem(extension2, item4);
328 316
329 EXPECT_EQ(2u, manager_.MenuItems("AAAA")->size()); 317 EXPECT_EQ(2u, manager_.MenuItems(extension1->id())->size());
330 EXPECT_EQ(1u, manager_.MenuItems("BBBB")->size()); 318 EXPECT_EQ(1u, manager_.MenuItems(extension2->id())->size());
331 319
332 // Remove the BBBB item. 320 // Remove extension2's item.
333 manager_.RemoveAllContextItems("BBBB"); 321 manager_.RemoveAllContextItems(extension2->id());
334 EXPECT_EQ(2u, manager_.MenuItems("AAAA")->size()); 322 EXPECT_EQ(2u, manager_.MenuItems(extension1->id())->size());
335 EXPECT_EQ(NULL, manager_.MenuItems("BBBB")); 323 EXPECT_EQ(NULL, manager_.MenuItems(extension2->id()));
336 324
337 // Remove the AAAA items. 325 // Remove extension1's items.
338 manager_.RemoveAllContextItems("AAAA"); 326 manager_.RemoveAllContextItems(extension1->id());
339 EXPECT_EQ(NULL, manager_.MenuItems("AAAA")); 327 EXPECT_EQ(NULL, manager_.MenuItems(extension1->id()));
340 } 328 }
341 329
342 TEST_F(ExtensionMenuManagerTest, ExecuteCommand) { 330 TEST_F(ExtensionMenuManagerTest, ExecuteCommand) {
343 MessageLoopForUI message_loop; 331 MessageLoopForUI message_loop;
344 ChromeThread ui_thread(ChromeThread::UI, &message_loop); 332 ChromeThread ui_thread(ChromeThread::UI, &message_loop);
345 333
346 MockTestingProfile profile; 334 MockTestingProfile profile;
347 335
348 scoped_refptr<MockExtensionMessageService> mock_message_service = 336 scoped_refptr<MockExtensionMessageService> mock_message_service =
349 new MockExtensionMessageService(&profile); 337 new MockExtensionMessageService(&profile);
350 338
351 ContextMenuParams params; 339 ContextMenuParams params;
352 params.media_type = WebKit::WebContextMenuData::MediaTypeImage; 340 params.media_type = WebKit::WebContextMenuData::MediaTypeImage;
353 params.src_url = GURL("http://foo.bar/image.png"); 341 params.src_url = GURL("http://foo.bar/image.png");
354 params.page_url = GURL("http://foo.bar"); 342 params.page_url = GURL("http://foo.bar");
355 params.selection_text = L"Hello World"; 343 params.selection_text = L"Hello World";
356 params.is_editable = false; 344 params.is_editable = false;
357 345
358 ExtensionMenuItem* item = CreateTestItem(NULL); 346 Extension* extension = AddExtension("test");
359 int id = manager_.AddContextItem(item); // Ownership transferred. 347 ExtensionMenuItem* item = CreateTestItem(extension);
348 int id = manager_.AddContextItem(extension, item);
360 ASSERT_GT(id, 0); 349 ASSERT_GT(id, 0);
361 350
362 EXPECT_CALL(profile, GetExtensionMessageService()) 351 EXPECT_CALL(profile, GetExtensionMessageService())
363 .Times(1) 352 .Times(1)
364 .WillOnce(Return(mock_message_service.get())); 353 .WillOnce(Return(mock_message_service.get()));
365 354
366 EXPECT_CALL(profile, IsOffTheRecord()) 355 EXPECT_CALL(profile, IsOffTheRecord())
367 .Times(AtLeast(1)) 356 .Times(AtLeast(1))
368 .WillRepeatedly(Return(false)); 357 .WillRepeatedly(Return(false));
369 358
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
406 ASSERT_EQ(params.page_url.spec(), tmp); 395 ASSERT_EQ(params.page_url.spec(), tmp);
407 396
408 std::wstring wide_tmp; 397 std::wstring wide_tmp;
409 ASSERT_TRUE(info->GetString(L"selectionText", &wide_tmp)); 398 ASSERT_TRUE(info->GetString(L"selectionText", &wide_tmp));
410 ASSERT_EQ(params.selection_text, wide_tmp); 399 ASSERT_EQ(params.selection_text, wide_tmp);
411 400
412 bool bool_tmp = true; 401 bool bool_tmp = true;
413 ASSERT_TRUE(info->GetBoolean(L"editable", &bool_tmp)); 402 ASSERT_TRUE(info->GetBoolean(L"editable", &bool_tmp));
414 ASSERT_EQ(params.is_editable, bool_tmp); 403 ASSERT_EQ(params.is_editable, bool_tmp);
415 } 404 }
OLDNEW
« no previous file with comments | « chrome/browser/extensions/extension_menu_manager.cc ('k') | chrome/browser/extensions/extension_protocols.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698