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

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

Issue 186213003: <webview>: Context menu API implementation CL. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: sync @tott Created 6 years, 9 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
OLDNEW
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 #include <vector> 5 #include <vector>
6 6
7 #include "base/files/scoped_temp_dir.h" 7 #include "base/files/scoped_temp_dir.h"
8 #include "base/json/json_reader.h" 8 #include "base/json/json_reader.h"
9 #include "base/memory/scoped_vector.h" 9 #include "base/memory/scoped_vector.h"
10 #include "base/message_loop/message_loop.h" 10 #include "base/message_loop/message_loop.h"
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
55 55
56 virtual void TearDown() OVERRIDE { 56 virtual void TearDown() OVERRIDE {
57 prefs_.pref_service()->CommitPendingWrite(); 57 prefs_.pref_service()->CommitPendingWrite();
58 message_loop_.RunUntilIdle(); 58 message_loop_.RunUntilIdle();
59 } 59 }
60 60
61 // Returns a test item. 61 // Returns a test item.
62 MenuItem* CreateTestItem(Extension* extension, bool incognito = false) { 62 MenuItem* CreateTestItem(Extension* extension, bool incognito = false) {
63 MenuItem::Type type = MenuItem::NORMAL; 63 MenuItem::Type type = MenuItem::NORMAL;
64 MenuItem::ContextList contexts(MenuItem::ALL); 64 MenuItem::ContextList contexts(MenuItem::ALL);
65 MenuItem::Id id(incognito, extension->id()); 65 const MenuItem::ExtensionKey key(extension->id());
66 MenuItem::Id id(incognito, key);
66 id.uid = next_id_++; 67 id.uid = next_id_++;
67 return new MenuItem(id, "test", false, true, type, contexts); 68 return new MenuItem(id, "test", false, true, type, contexts);
68 } 69 }
69 70
70 // Returns a test item with the given string ID. 71 // Returns a test item with the given string ID.
71 MenuItem* CreateTestItemWithID(Extension* extension, 72 MenuItem* CreateTestItemWithID(Extension* extension,
72 const std::string& string_id) { 73 const std::string& string_id) {
73 MenuItem::Type type = MenuItem::NORMAL; 74 MenuItem::Type type = MenuItem::NORMAL;
74 MenuItem::ContextList contexts(MenuItem::ALL); 75 MenuItem::ContextList contexts(MenuItem::ALL);
75 MenuItem::Id id(false, extension->id()); 76 const MenuItem::ExtensionKey key(extension->id());
77 MenuItem::Id id(false, key);
76 id.string_uid = string_id; 78 id.string_uid = string_id;
77 return new MenuItem(id, "test", false, true, type, contexts); 79 return new MenuItem(id, "test", false, true, type, contexts);
78 } 80 }
79 81
80 // Creates and returns a test Extension. The caller does *not* own the return 82 // Creates and returns a test Extension. The caller does *not* own the return
81 // value. 83 // value.
82 Extension* AddExtension(std::string name) { 84 Extension* AddExtension(std::string name) {
83 scoped_refptr<Extension> extension = prefs_.AddExtension(name); 85 scoped_refptr<Extension> extension = prefs_.AddExtension(name);
84 extensions_.push_back(extension); 86 extensions_.push_back(extension);
85 return extension.get(); 87 return extension.get();
(...skipping 16 matching lines...) Expand all
102 104
103 // Tests adding, getting, and removing items. 105 // Tests adding, getting, and removing items.
104 TEST_F(MenuManagerTest, AddGetRemoveItems) { 106 TEST_F(MenuManagerTest, AddGetRemoveItems) {
105 Extension* extension = AddExtension("test"); 107 Extension* extension = AddExtension("test");
106 108
107 // Add a new item, make sure you can get it back. 109 // Add a new item, make sure you can get it back.
108 MenuItem* item1 = CreateTestItem(extension); 110 MenuItem* item1 = CreateTestItem(extension);
109 ASSERT_TRUE(item1 != NULL); 111 ASSERT_TRUE(item1 != NULL);
110 ASSERT_TRUE(manager_.AddContextItem(extension, item1)); 112 ASSERT_TRUE(manager_.AddContextItem(extension, item1));
111 ASSERT_EQ(item1, manager_.GetItemById(item1->id())); 113 ASSERT_EQ(item1, manager_.GetItemById(item1->id()));
112 const MenuItem::List* items = manager_.MenuItems(item1->extension_id()); 114 const MenuItem::List* items = manager_.MenuItems(item1->id().extension_key);
113 ASSERT_EQ(1u, items->size()); 115 ASSERT_EQ(1u, items->size());
114 ASSERT_EQ(item1, items->at(0)); 116 ASSERT_EQ(item1, items->at(0));
115 117
116 // Add a second item, make sure it comes back too. 118 // Add a second item, make sure it comes back too.
117 MenuItem* item2 = CreateTestItemWithID(extension, "id2"); 119 MenuItem* item2 = CreateTestItemWithID(extension, "id2");
118 ASSERT_TRUE(manager_.AddContextItem(extension, item2)); 120 ASSERT_TRUE(manager_.AddContextItem(extension, item2));
119 ASSERT_EQ(item2, manager_.GetItemById(item2->id())); 121 ASSERT_EQ(item2, manager_.GetItemById(item2->id()));
120 items = manager_.MenuItems(item2->extension_id()); 122 items = manager_.MenuItems(item2->id().extension_key);
121 ASSERT_EQ(2u, items->size()); 123 ASSERT_EQ(2u, items->size());
122 ASSERT_EQ(item1, items->at(0)); 124 ASSERT_EQ(item1, items->at(0));
123 ASSERT_EQ(item2, items->at(1)); 125 ASSERT_EQ(item2, items->at(1));
124 126
125 // Try adding item 3, then removing it. 127 // Try adding item 3, then removing it.
126 MenuItem* item3 = CreateTestItem(extension); 128 MenuItem* item3 = CreateTestItem(extension);
127 MenuItem::Id id3 = item3->id(); 129 MenuItem::Id id3 = item3->id();
128 std::string extension_id = item3->extension_id(); 130 const MenuItem::ExtensionKey extension_key3(item3->id().extension_key);
129 ASSERT_TRUE(manager_.AddContextItem(extension, item3)); 131 ASSERT_TRUE(manager_.AddContextItem(extension, item3));
130 ASSERT_EQ(item3, manager_.GetItemById(id3)); 132 ASSERT_EQ(item3, manager_.GetItemById(id3));
131 ASSERT_EQ(3u, manager_.MenuItems(extension_id)->size()); 133 ASSERT_EQ(3u, manager_.MenuItems(extension_key3)->size());
132 ASSERT_TRUE(manager_.RemoveContextMenuItem(id3)); 134 ASSERT_TRUE(manager_.RemoveContextMenuItem(id3));
133 ASSERT_EQ(NULL, manager_.GetItemById(id3)); 135 ASSERT_EQ(NULL, manager_.GetItemById(id3));
134 ASSERT_EQ(2u, manager_.MenuItems(extension_id)->size()); 136 ASSERT_EQ(2u, manager_.MenuItems(extension_key3)->size());
135 137
136 // Make sure removing a non-existent item returns false. 138 // Make sure removing a non-existent item returns false.
137 MenuItem::Id id(false, extension->id()); 139 const MenuItem::ExtensionKey key(extension->id());
140 MenuItem::Id id(false, key);
138 id.uid = id3.uid + 50; 141 id.uid = id3.uid + 50;
139 ASSERT_FALSE(manager_.RemoveContextMenuItem(id)); 142 ASSERT_FALSE(manager_.RemoveContextMenuItem(id));
140 143
141 // Make sure adding an item with the same string ID returns false. 144 // Make sure adding an item with the same string ID returns false.
142 scoped_ptr<MenuItem> item2too(CreateTestItemWithID(extension, "id2")); 145 scoped_ptr<MenuItem> item2too(CreateTestItemWithID(extension, "id2"));
143 ASSERT_FALSE(manager_.AddContextItem(extension, item2too.get())); 146 ASSERT_FALSE(manager_.AddContextItem(extension, item2too.get()));
144 147
145 // But the same string ID should not collide with another extension. 148 // But the same string ID should not collide with another extension.
146 Extension* extension2 = AddExtension("test2"); 149 Extension* extension2 = AddExtension("test2");
147 MenuItem* item2other = CreateTestItemWithID(extension2, "id2"); 150 MenuItem* item2other = CreateTestItemWithID(extension2, "id2");
(...skipping 26 matching lines...) Expand all
174 // a different extension id. 177 // a different extension id.
175 ASSERT_FALSE(manager_.AddChildItem(id2, item3.get())); 178 ASSERT_FALSE(manager_.AddChildItem(id2, item3.get()));
176 179
177 // Add item2_child as a child of item2. 180 // Add item2_child as a child of item2.
178 MenuItem::Id id2_child = item2_child->id(); 181 MenuItem::Id id2_child = item2_child->id();
179 ASSERT_TRUE(manager_.AddChildItem(id2, item2_child)); 182 ASSERT_TRUE(manager_.AddChildItem(id2, item2_child));
180 ASSERT_EQ(1, item2->child_count()); 183 ASSERT_EQ(1, item2->child_count());
181 ASSERT_EQ(0, item1->child_count()); 184 ASSERT_EQ(0, item1->child_count());
182 ASSERT_EQ(item2_child, manager_.GetItemById(id2_child)); 185 ASSERT_EQ(item2_child, manager_.GetItemById(id2_child));
183 186
184 ASSERT_EQ(1u, manager_.MenuItems(item1->extension_id())->size()); 187 ASSERT_EQ(1u, manager_.MenuItems(item1->id().extension_key)->size());
185 ASSERT_EQ(item1, manager_.MenuItems(item1->extension_id())->at(0)); 188 ASSERT_EQ(item1, manager_.MenuItems(item1->id().extension_key)->at(0));
186 189
187 // Add item2_grandchild as a child of item2_child, then remove it. 190 // Add item2_grandchild as a child of item2_child, then remove it.
188 MenuItem::Id id2_grandchild = item2_grandchild->id(); 191 MenuItem::Id id2_grandchild = item2_grandchild->id();
189 ASSERT_TRUE(manager_.AddChildItem(id2_child, item2_grandchild)); 192 ASSERT_TRUE(manager_.AddChildItem(id2_child, item2_grandchild));
190 ASSERT_EQ(1, item2->child_count()); 193 ASSERT_EQ(1, item2->child_count());
191 ASSERT_EQ(1, item2_child->child_count()); 194 ASSERT_EQ(1, item2_child->child_count());
192 ASSERT_TRUE(manager_.RemoveContextMenuItem(id2_grandchild)); 195 ASSERT_TRUE(manager_.RemoveContextMenuItem(id2_grandchild));
193 196
194 // We should only get 1 thing back when asking for item2's extension id, since 197 // We should only get 1 thing back when asking for item2's extension id, since
195 // it has a child item. 198 // it has a child item.
196 ASSERT_EQ(1u, manager_.MenuItems(item2->extension_id())->size()); 199 ASSERT_EQ(1u, manager_.MenuItems(item2->id().extension_key)->size());
197 ASSERT_EQ(item2, manager_.MenuItems(item2->extension_id())->at(0)); 200 ASSERT_EQ(item2, manager_.MenuItems(item2->id().extension_key)->at(0));
198 201
199 // Remove child2_item. 202 // Remove child2_item.
200 ASSERT_TRUE(manager_.RemoveContextMenuItem(id2_child)); 203 ASSERT_TRUE(manager_.RemoveContextMenuItem(id2_child));
201 ASSERT_EQ(1u, manager_.MenuItems(item2->extension_id())->size()); 204 ASSERT_EQ(1u, manager_.MenuItems(item2->id().extension_key)->size());
202 ASSERT_EQ(item2, manager_.MenuItems(item2->extension_id())->at(0)); 205 ASSERT_EQ(item2, manager_.MenuItems(item2->id().extension_key)->at(0));
203 ASSERT_EQ(0, item2->child_count()); 206 ASSERT_EQ(0, item2->child_count());
204 } 207 }
205 208
206 TEST_F(MenuManagerTest, PopulateFromValue) { 209 TEST_F(MenuManagerTest, PopulateFromValue) {
207 Extension* extension = AddExtension("test"); 210 Extension* extension = AddExtension("test");
208 211
209 bool incognito = true; 212 bool incognito = true;
210 int type = MenuItem::CHECKBOX; 213 int type = MenuItem::CHECKBOX;
211 std::string title("TITLE"); 214 std::string title("TITLE");
212 bool checked = true; 215 bool checked = true;
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
277 MenuItem* item3 = CreateTestItemWithID(extension, "id3"); 280 MenuItem* item3 = CreateTestItemWithID(extension, "id3");
278 MenuItem* item4 = CreateTestItemWithID(extension, "id4"); 281 MenuItem* item4 = CreateTestItemWithID(extension, "id4");
279 MenuItem* item5 = CreateTestItem(extension); 282 MenuItem* item5 = CreateTestItem(extension);
280 MenuItem* item6 = CreateTestItem(extension); 283 MenuItem* item6 = CreateTestItem(extension);
281 MenuItem::Id item1_id = item1->id(); 284 MenuItem::Id item1_id = item1->id();
282 MenuItem::Id item2_id = item2->id(); 285 MenuItem::Id item2_id = item2->id();
283 MenuItem::Id item3_id = item3->id(); 286 MenuItem::Id item3_id = item3->id();
284 MenuItem::Id item4_id = item4->id(); 287 MenuItem::Id item4_id = item4->id();
285 MenuItem::Id item5_id = item5->id(); 288 MenuItem::Id item5_id = item5->id();
286 MenuItem::Id item6_id = item6->id(); 289 MenuItem::Id item6_id = item6->id();
290 const MenuItem::ExtensionKey key(extension->id());
287 291
288 // Add the items in the hierarchy 292 // Add the items in the hierarchy
289 // item1 -> item2 -> item3 -> item4 -> item5 -> item6. 293 // item1 -> item2 -> item3 -> item4 -> item5 -> item6.
290 ASSERT_TRUE(manager_.AddContextItem(extension, item1)); 294 ASSERT_TRUE(manager_.AddContextItem(extension, item1));
291 ASSERT_TRUE(manager_.AddChildItem(item1_id, item2)); 295 ASSERT_TRUE(manager_.AddChildItem(item1_id, item2));
292 ASSERT_TRUE(manager_.AddChildItem(item2_id, item3)); 296 ASSERT_TRUE(manager_.AddChildItem(item2_id, item3));
293 ASSERT_TRUE(manager_.AddChildItem(item3_id, item4)); 297 ASSERT_TRUE(manager_.AddChildItem(item3_id, item4));
294 ASSERT_TRUE(manager_.AddChildItem(item4_id, item5)); 298 ASSERT_TRUE(manager_.AddChildItem(item4_id, item5));
295 ASSERT_TRUE(manager_.AddChildItem(item5_id, item6)); 299 ASSERT_TRUE(manager_.AddChildItem(item5_id, item6));
296 ASSERT_EQ(item1, manager_.GetItemById(item1_id)); 300 ASSERT_EQ(item1, manager_.GetItemById(item1_id));
297 ASSERT_EQ(item2, manager_.GetItemById(item2_id)); 301 ASSERT_EQ(item2, manager_.GetItemById(item2_id));
298 ASSERT_EQ(item3, manager_.GetItemById(item3_id)); 302 ASSERT_EQ(item3, manager_.GetItemById(item3_id));
299 ASSERT_EQ(item4, manager_.GetItemById(item4_id)); 303 ASSERT_EQ(item4, manager_.GetItemById(item4_id));
300 ASSERT_EQ(item5, manager_.GetItemById(item5_id)); 304 ASSERT_EQ(item5, manager_.GetItemById(item5_id));
301 ASSERT_EQ(item6, manager_.GetItemById(item6_id)); 305 ASSERT_EQ(item6, manager_.GetItemById(item6_id));
302 ASSERT_EQ(1u, manager_.MenuItems(extension->id())->size()); 306 ASSERT_EQ(1u, manager_.MenuItems(key)->size());
303 ASSERT_EQ(6u, manager_.items_by_id_.size()); 307 ASSERT_EQ(6u, manager_.items_by_id_.size());
304 308
305 // Remove item6 (a leaf node). 309 // Remove item6 (a leaf node).
306 ASSERT_TRUE(manager_.RemoveContextMenuItem(item6_id)); 310 ASSERT_TRUE(manager_.RemoveContextMenuItem(item6_id));
307 ASSERT_EQ(item1, manager_.GetItemById(item1_id)); 311 ASSERT_EQ(item1, manager_.GetItemById(item1_id));
308 ASSERT_EQ(item2, manager_.GetItemById(item2_id)); 312 ASSERT_EQ(item2, manager_.GetItemById(item2_id));
309 ASSERT_EQ(item3, manager_.GetItemById(item3_id)); 313 ASSERT_EQ(item3, manager_.GetItemById(item3_id));
310 ASSERT_EQ(item4, manager_.GetItemById(item4_id)); 314 ASSERT_EQ(item4, manager_.GetItemById(item4_id));
311 ASSERT_EQ(item5, manager_.GetItemById(item5_id)); 315 ASSERT_EQ(item5, manager_.GetItemById(item5_id));
312 ASSERT_EQ(NULL, manager_.GetItemById(item6_id)); 316 ASSERT_EQ(NULL, manager_.GetItemById(item6_id));
313 ASSERT_EQ(1u, manager_.MenuItems(extension->id())->size()); 317 ASSERT_EQ(1u, manager_.MenuItems(key)->size());
314 ASSERT_EQ(5u, manager_.items_by_id_.size()); 318 ASSERT_EQ(5u, manager_.items_by_id_.size());
315 319
316 // Remove item4 and make sure item5 is gone as well. 320 // Remove item4 and make sure item5 is gone as well.
317 ASSERT_TRUE(manager_.RemoveContextMenuItem(item4_id)); 321 ASSERT_TRUE(manager_.RemoveContextMenuItem(item4_id));
318 ASSERT_EQ(item1, manager_.GetItemById(item1_id)); 322 ASSERT_EQ(item1, manager_.GetItemById(item1_id));
319 ASSERT_EQ(item2, manager_.GetItemById(item2_id)); 323 ASSERT_EQ(item2, manager_.GetItemById(item2_id));
320 ASSERT_EQ(item3, manager_.GetItemById(item3_id)); 324 ASSERT_EQ(item3, manager_.GetItemById(item3_id));
321 ASSERT_EQ(NULL, manager_.GetItemById(item4_id)); 325 ASSERT_EQ(NULL, manager_.GetItemById(item4_id));
322 ASSERT_EQ(NULL, manager_.GetItemById(item5_id)); 326 ASSERT_EQ(NULL, manager_.GetItemById(item5_id));
323 ASSERT_EQ(1u, manager_.MenuItems(extension->id())->size()); 327 ASSERT_EQ(1u, manager_.MenuItems(key)->size());
324 ASSERT_EQ(3u, manager_.items_by_id_.size()); 328 ASSERT_EQ(3u, manager_.items_by_id_.size());
325 329
326 // Now remove item1 and make sure item2 and item3 are gone as well. 330 // Now remove item1 and make sure item2 and item3 are gone as well.
327 ASSERT_TRUE(manager_.RemoveContextMenuItem(item1_id)); 331 ASSERT_TRUE(manager_.RemoveContextMenuItem(item1_id));
328 ASSERT_EQ(NULL, manager_.MenuItems(extension->id())); 332 ASSERT_EQ(NULL, manager_.MenuItems(key));
329 ASSERT_EQ(0u, manager_.items_by_id_.size()); 333 ASSERT_EQ(0u, manager_.items_by_id_.size());
330 ASSERT_EQ(NULL, manager_.GetItemById(item1_id)); 334 ASSERT_EQ(NULL, manager_.GetItemById(item1_id));
331 ASSERT_EQ(NULL, manager_.GetItemById(item2_id)); 335 ASSERT_EQ(NULL, manager_.GetItemById(item2_id));
332 ASSERT_EQ(NULL, manager_.GetItemById(item3_id)); 336 ASSERT_EQ(NULL, manager_.GetItemById(item3_id));
333 } 337 }
334 338
335 // Tests changing parents. 339 // Tests changing parents.
336 TEST_F(MenuManagerTest, ChangeParent) { 340 TEST_F(MenuManagerTest, ChangeParent) {
337 Extension* extension1 = AddExtension("1111"); 341 Extension* extension1 = AddExtension("1111");
338 342
339 // First create two items and add them both to the manager. 343 // First create two items and add them both to the manager.
340 MenuItem* item1 = CreateTestItem(extension1); 344 MenuItem* item1 = CreateTestItem(extension1);
341 MenuItem* item2 = CreateTestItem(extension1); 345 MenuItem* item2 = CreateTestItem(extension1);
342 346
343 ASSERT_TRUE(manager_.AddContextItem(extension1, item1)); 347 ASSERT_TRUE(manager_.AddContextItem(extension1, item1));
344 ASSERT_TRUE(manager_.AddContextItem(extension1, item2)); 348 ASSERT_TRUE(manager_.AddContextItem(extension1, item2));
345 349
346 const MenuItem::List* items = manager_.MenuItems(item1->extension_id()); 350 const MenuItem::List* items = manager_.MenuItems(item1->id().extension_key);
347 ASSERT_EQ(2u, items->size()); 351 ASSERT_EQ(2u, items->size());
348 ASSERT_EQ(item1, items->at(0)); 352 ASSERT_EQ(item1, items->at(0));
349 ASSERT_EQ(item2, items->at(1)); 353 ASSERT_EQ(item2, items->at(1));
350 354
351 // Now create a third item, initially add it as a child of item1, then move 355 // Now create a third item, initially add it as a child of item1, then move
352 // it to be a child of item2. 356 // it to be a child of item2.
353 MenuItem* item3 = CreateTestItem(extension1); 357 MenuItem* item3 = CreateTestItem(extension1);
354 358
355 ASSERT_TRUE(manager_.AddChildItem(item1->id(), item3)); 359 ASSERT_TRUE(manager_.AddChildItem(item1->id(), item3));
356 ASSERT_EQ(1, item1->child_count()); 360 ASSERT_EQ(1, item1->child_count());
357 ASSERT_EQ(item3, item1->children()[0]); 361 ASSERT_EQ(item3, item1->children()[0]);
358 362
359 ASSERT_TRUE(manager_.ChangeParent(item3->id(), &item2->id())); 363 ASSERT_TRUE(manager_.ChangeParent(item3->id(), &item2->id()));
360 ASSERT_EQ(0, item1->child_count()); 364 ASSERT_EQ(0, item1->child_count());
361 ASSERT_EQ(1, item2->child_count()); 365 ASSERT_EQ(1, item2->child_count());
362 ASSERT_EQ(item3, item2->children()[0]); 366 ASSERT_EQ(item3, item2->children()[0]);
363 367
364 // Move item2 to be a child of item1. 368 // Move item2 to be a child of item1.
365 ASSERT_TRUE(manager_.ChangeParent(item2->id(), &item1->id())); 369 ASSERT_TRUE(manager_.ChangeParent(item2->id(), &item1->id()));
366 ASSERT_EQ(1, item1->child_count()); 370 ASSERT_EQ(1, item1->child_count());
367 ASSERT_EQ(item2, item1->children()[0]); 371 ASSERT_EQ(item2, item1->children()[0]);
368 ASSERT_EQ(1, item2->child_count()); 372 ASSERT_EQ(1, item2->child_count());
369 ASSERT_EQ(item3, item2->children()[0]); 373 ASSERT_EQ(item3, item2->children()[0]);
370 374
371 // Since item2 was a top-level item but is no longer, we should only have 1 375 // Since item2 was a top-level item but is no longer, we should only have 1
372 // top-level item. 376 // top-level item.
373 items = manager_.MenuItems(item1->extension_id()); 377 items = manager_.MenuItems(item1->id().extension_key);
374 ASSERT_EQ(1u, items->size()); 378 ASSERT_EQ(1u, items->size());
375 ASSERT_EQ(item1, items->at(0)); 379 ASSERT_EQ(item1, items->at(0));
376 380
377 // Move item3 back to being a child of item1, so it's now a sibling of item2. 381 // Move item3 back to being a child of item1, so it's now a sibling of item2.
378 ASSERT_TRUE(manager_.ChangeParent(item3->id(), &item1->id())); 382 ASSERT_TRUE(manager_.ChangeParent(item3->id(), &item1->id()));
379 ASSERT_EQ(2, item1->child_count()); 383 ASSERT_EQ(2, item1->child_count());
380 ASSERT_EQ(item2, item1->children()[0]); 384 ASSERT_EQ(item2, item1->children()[0]);
381 ASSERT_EQ(item3, item1->children()[1]); 385 ASSERT_EQ(item3, item1->children()[1]);
382 386
383 // Try switching item3 to be the parent of item1 - this should fail. 387 // Try switching item3 to be the parent of item1 - this should fail.
384 ASSERT_FALSE(manager_.ChangeParent(item1->id(), &item3->id())); 388 ASSERT_FALSE(manager_.ChangeParent(item1->id(), &item3->id()));
385 ASSERT_EQ(0, item3->child_count()); 389 ASSERT_EQ(0, item3->child_count());
386 ASSERT_EQ(2, item1->child_count()); 390 ASSERT_EQ(2, item1->child_count());
387 ASSERT_EQ(item2, item1->children()[0]); 391 ASSERT_EQ(item2, item1->children()[0]);
388 ASSERT_EQ(item3, item1->children()[1]); 392 ASSERT_EQ(item3, item1->children()[1]);
389 items = manager_.MenuItems(item1->extension_id()); 393 items = manager_.MenuItems(item1->id().extension_key);
390 ASSERT_EQ(1u, items->size()); 394 ASSERT_EQ(1u, items->size());
391 ASSERT_EQ(item1, items->at(0)); 395 ASSERT_EQ(item1, items->at(0));
392 396
393 // Move item2 to be a top-level item. 397 // Move item2 to be a top-level item.
394 ASSERT_TRUE(manager_.ChangeParent(item2->id(), NULL)); 398 ASSERT_TRUE(manager_.ChangeParent(item2->id(), NULL));
395 items = manager_.MenuItems(item1->extension_id()); 399 items = manager_.MenuItems(item1->id().extension_key);
396 ASSERT_EQ(2u, items->size()); 400 ASSERT_EQ(2u, items->size());
397 ASSERT_EQ(item1, items->at(0)); 401 ASSERT_EQ(item1, items->at(0));
398 ASSERT_EQ(item2, items->at(1)); 402 ASSERT_EQ(item2, items->at(1));
399 ASSERT_EQ(1, item1->child_count()); 403 ASSERT_EQ(1, item1->child_count());
400 ASSERT_EQ(item3, item1->children()[0]); 404 ASSERT_EQ(item3, item1->children()[0]);
401 405
402 // Make sure you can't move a node to be a child of another extension's item. 406 // Make sure you can't move a node to be a child of another extension's item.
403 Extension* extension2 = AddExtension("2222"); 407 Extension* extension2 = AddExtension("2222");
404 MenuItem* item4 = CreateTestItem(extension2); 408 MenuItem* item4 = CreateTestItem(extension2);
405 ASSERT_TRUE(manager_.AddContextItem(extension2, item4)); 409 ASSERT_TRUE(manager_.AddContextItem(extension2, item4));
(...skipping 12 matching lines...) Expand all
418 ASSERT_TRUE(notifier != NULL); 422 ASSERT_TRUE(notifier != NULL);
419 423
420 // Create a test extension. 424 // Create a test extension.
421 Extension* extension1 = AddExtension("1111"); 425 Extension* extension1 = AddExtension("1111");
422 426
423 // Create an MenuItem and put it into the manager. 427 // Create an MenuItem and put it into the manager.
424 MenuItem* item1 = CreateTestItem(extension1); 428 MenuItem* item1 = CreateTestItem(extension1);
425 MenuItem::Id id1 = item1->id(); 429 MenuItem::Id id1 = item1->id();
426 ASSERT_EQ(extension1->id(), item1->extension_id()); 430 ASSERT_EQ(extension1->id(), item1->extension_id());
427 ASSERT_TRUE(manager_.AddContextItem(extension1, item1)); 431 ASSERT_TRUE(manager_.AddContextItem(extension1, item1));
428 ASSERT_EQ(1u, manager_.MenuItems(extension1->id())->size()); 432 ASSERT_EQ(
433 1u, manager_.MenuItems(MenuItem::ExtensionKey(extension1->id()))->size());
429 434
430 // Create a menu item with a different extension id and add it to the manager. 435 // Create a menu item with a different extension id and add it to the manager.
431 Extension* extension2 = AddExtension("2222"); 436 Extension* extension2 = AddExtension("2222");
432 MenuItem* item2 = CreateTestItem(extension2); 437 MenuItem* item2 = CreateTestItem(extension2);
433 ASSERT_NE(item1->extension_id(), item2->extension_id()); 438 ASSERT_NE(item1->extension_id(), item2->extension_id());
434 ASSERT_TRUE(manager_.AddContextItem(extension2, item2)); 439 ASSERT_TRUE(manager_.AddContextItem(extension2, item2));
435 440
436 // Notify that the extension was unloaded, and make sure the right item is 441 // Notify that the extension was unloaded, and make sure the right item is
437 // gone. 442 // gone.
438 UnloadedExtensionInfo details( 443 UnloadedExtensionInfo details(
439 extension1, UnloadedExtensionInfo::REASON_DISABLE); 444 extension1, UnloadedExtensionInfo::REASON_DISABLE);
440 notifier->Notify(chrome::NOTIFICATION_EXTENSION_UNLOADED, 445 notifier->Notify(chrome::NOTIFICATION_EXTENSION_UNLOADED,
441 content::Source<Profile>(&profile_), 446 content::Source<Profile>(&profile_),
442 content::Details<UnloadedExtensionInfo>( 447 content::Details<UnloadedExtensionInfo>(
443 &details)); 448 &details));
444 ASSERT_EQ(NULL, manager_.MenuItems(extension1->id())); 449 ASSERT_EQ(NULL, manager_.MenuItems(MenuItem::ExtensionKey(extension1->id())));
445 ASSERT_EQ(1u, manager_.MenuItems(extension2->id())->size()); 450 ASSERT_EQ(
451 1u, manager_.MenuItems(MenuItem::ExtensionKey(extension2->id()))->size());
446 ASSERT_TRUE(manager_.GetItemById(id1) == NULL); 452 ASSERT_TRUE(manager_.GetItemById(id1) == NULL);
447 ASSERT_TRUE(manager_.GetItemById(item2->id()) != NULL); 453 ASSERT_TRUE(manager_.GetItemById(item2->id()) != NULL);
448 } 454 }
449 455
450 // A mock message service for tests of MenuManager::ExecuteCommand. 456 // A mock message service for tests of MenuManager::ExecuteCommand.
451 class MockEventRouter : public EventRouter { 457 class MockEventRouter : public EventRouter {
452 public: 458 public:
453 explicit MockEventRouter(Profile* profile) : EventRouter(profile, NULL) {} 459 explicit MockEventRouter(Profile* profile) : EventRouter(profile, NULL) {}
454 460
455 MOCK_METHOD6(DispatchEventToExtensionMock, 461 MOCK_METHOD6(DispatchEventToExtensionMock,
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
493 }; 499 };
494 500
495 BrowserContextKeyedService* BuildMockExtensionSystem( 501 BrowserContextKeyedService* BuildMockExtensionSystem(
496 content::BrowserContext* profile) { 502 content::BrowserContext* profile) {
497 return new MockExtensionSystem(static_cast<Profile*>(profile)); 503 return new MockExtensionSystem(static_cast<Profile*>(profile));
498 } 504 }
499 505
500 // Tests the RemoveAll functionality. 506 // Tests the RemoveAll functionality.
501 TEST_F(MenuManagerTest, RemoveAll) { 507 TEST_F(MenuManagerTest, RemoveAll) {
502 // Try removing all items for an extension id that doesn't have any items. 508 // Try removing all items for an extension id that doesn't have any items.
503 manager_.RemoveAllContextItems("CCCC"); 509 manager_.RemoveAllContextItems(MenuItem::ExtensionKey("CCCC"));
504 510
505 // Add 2 top-level and one child item for extension 1. 511 // Add 2 top-level and one child item for extension 1.
506 Extension* extension1 = AddExtension("1111"); 512 Extension* extension1 = AddExtension("1111");
507 MenuItem* item1 = CreateTestItem(extension1); 513 MenuItem* item1 = CreateTestItem(extension1);
508 MenuItem* item2 = CreateTestItem(extension1); 514 MenuItem* item2 = CreateTestItem(extension1);
509 MenuItem* item3 = CreateTestItem(extension1); 515 MenuItem* item3 = CreateTestItem(extension1);
510 ASSERT_TRUE(manager_.AddContextItem(extension1, item1)); 516 ASSERT_TRUE(manager_.AddContextItem(extension1, item1));
511 ASSERT_TRUE(manager_.AddContextItem(extension1, item2)); 517 ASSERT_TRUE(manager_.AddContextItem(extension1, item2));
512 ASSERT_TRUE(manager_.AddChildItem(item1->id(), item3)); 518 ASSERT_TRUE(manager_.AddChildItem(item1->id(), item3));
513 519
514 // Add one top-level item for extension 2. 520 // Add one top-level item for extension 2.
515 Extension* extension2 = AddExtension("2222"); 521 Extension* extension2 = AddExtension("2222");
516 MenuItem* item4 = CreateTestItem(extension2); 522 MenuItem* item4 = CreateTestItem(extension2);
517 ASSERT_TRUE(manager_.AddContextItem(extension2, item4)); 523 ASSERT_TRUE(manager_.AddContextItem(extension2, item4));
518 524
519 EXPECT_EQ(2u, manager_.MenuItems(extension1->id())->size()); 525 const MenuItem::ExtensionKey key1(extension1->id());
520 EXPECT_EQ(1u, manager_.MenuItems(extension2->id())->size()); 526 const MenuItem::ExtensionKey key2(extension2->id());
527 EXPECT_EQ(2u, manager_.MenuItems(key1)->size());
528 EXPECT_EQ(1u, manager_.MenuItems(key2)->size());
521 529
522 // Remove extension2's item. 530 // Remove extension2's item.
523 manager_.RemoveAllContextItems(extension2->id()); 531 manager_.RemoveAllContextItems(key2);
524 EXPECT_EQ(2u, manager_.MenuItems(extension1->id())->size()); 532 EXPECT_EQ(2u, manager_.MenuItems(key1)->size());
525 EXPECT_EQ(NULL, manager_.MenuItems(extension2->id())); 533 EXPECT_EQ(NULL, manager_.MenuItems(key2));
526 534
527 // Remove extension1's items. 535 // Remove extension1's items.
528 manager_.RemoveAllContextItems(extension1->id()); 536 manager_.RemoveAllContextItems(key1);
529 EXPECT_EQ(NULL, manager_.MenuItems(extension1->id())); 537 EXPECT_EQ(NULL, manager_.MenuItems(key1));
530 } 538 }
531 539
532 // Tests that removing all items one-by-one doesn't leave an entry around. 540 // Tests that removing all items one-by-one doesn't leave an entry around.
533 TEST_F(MenuManagerTest, RemoveOneByOne) { 541 TEST_F(MenuManagerTest, RemoveOneByOne) {
534 // Add 2 test items. 542 // Add 2 test items.
535 Extension* extension1 = AddExtension("1111"); 543 Extension* extension1 = AddExtension("1111");
536 MenuItem* item1 = CreateTestItem(extension1); 544 MenuItem* item1 = CreateTestItem(extension1);
537 MenuItem* item2 = CreateTestItem(extension1); 545 MenuItem* item2 = CreateTestItem(extension1);
538 MenuItem* item3 = CreateTestItemWithID(extension1, "id3"); 546 MenuItem* item3 = CreateTestItemWithID(extension1, "id3");
539 ASSERT_TRUE(manager_.AddContextItem(extension1, item1)); 547 ASSERT_TRUE(manager_.AddContextItem(extension1, item1));
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after
741 MenuItem* item6 = CreateTestItem(extension1); 749 MenuItem* item6 = CreateTestItem(extension1);
742 ASSERT_TRUE(manager_.AddContextItem(extension1, item4)); 750 ASSERT_TRUE(manager_.AddContextItem(extension1, item4));
743 ASSERT_TRUE(manager_.AddContextItem(extension1, item5)); 751 ASSERT_TRUE(manager_.AddContextItem(extension1, item5));
744 ASSERT_TRUE(manager_.AddChildItem(item4->id(), item6)); 752 ASSERT_TRUE(manager_.AddChildItem(item4->id(), item6));
745 753
746 // Add one top-level item for extension 2. 754 // Add one top-level item for extension 2.
747 Extension* extension2 = AddExtension("2222"); 755 Extension* extension2 = AddExtension("2222");
748 MenuItem* item7 = CreateTestItem(extension2); 756 MenuItem* item7 = CreateTestItem(extension2);
749 ASSERT_TRUE(manager_.AddContextItem(extension2, item7)); 757 ASSERT_TRUE(manager_.AddContextItem(extension2, item7));
750 758
751 EXPECT_EQ(4u, manager_.MenuItems(extension1->id())->size()); 759 const MenuItem::ExtensionKey key1(extension1->id());
752 EXPECT_EQ(1u, manager_.MenuItems(extension2->id())->size()); 760 const MenuItem::ExtensionKey key2(extension2->id());
761 EXPECT_EQ(4u, manager_.MenuItems(key1)->size());
762 EXPECT_EQ(1u, manager_.MenuItems(key2)->size());
753 763
754 // Remove all context menu items with incognito true. 764 // Remove all context menu items with incognito true.
755 manager_.RemoveAllIncognitoContextItems(); 765 manager_.RemoveAllIncognitoContextItems();
756 EXPECT_EQ(2u, manager_.MenuItems(extension1->id())->size()); 766 EXPECT_EQ(2u, manager_.MenuItems(key1)->size());
757 EXPECT_EQ(1u, manager_.MenuItems(extension2->id())->size()); 767 EXPECT_EQ(1u, manager_.MenuItems(key2)->size());
758 } 768 }
759 769
760 } // namespace extensions 770 } // namespace extensions
OLDNEW
« no previous file with comments | « chrome/browser/extensions/menu_manager.cc ('k') | chrome/browser/guestview/webview/context_menu_content_type_webview.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698