| 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 |