OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |