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

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

Issue 10664037: Moved ExtensionMenuManager and ExtensionMenuItem into extensions namespace (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Merged with latest master Created 8 years, 5 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/json/json_reader.h" 7 #include "base/json/json_reader.h"
8 #include "base/memory/scoped_vector.h" 8 #include "base/memory/scoped_vector.h"
9 #include "base/message_loop.h" 9 #include "base/message_loop.h"
10 #include "base/path_service.h" 10 #include "base/path_service.h"
11 #include "base/scoped_temp_dir.h" 11 #include "base/scoped_temp_dir.h"
12 #include "base/utf_string_conversions.h" 12 #include "base/utf_string_conversions.h"
13 #include "base/values.h" 13 #include "base/values.h"
14 #include "chrome/browser/extensions/extension_event_names.h" 14 #include "chrome/browser/extensions/extension_event_names.h"
15 #include "chrome/browser/extensions/extension_event_router.h" 15 #include "chrome/browser/extensions/extension_event_router.h"
16 #include "chrome/browser/extensions/extension_menu_manager.h" 16 #include "chrome/browser/extensions/menu_manager.h"
17 #include "chrome/browser/extensions/test_extension_prefs.h" 17 #include "chrome/browser/extensions/test_extension_prefs.h"
18 #include "chrome/common/chrome_notification_types.h" 18 #include "chrome/common/chrome_notification_types.h"
19 #include "chrome/common/chrome_paths.h" 19 #include "chrome/common/chrome_paths.h"
20 #include "chrome/common/extensions/extension.h" 20 #include "chrome/common/extensions/extension.h"
21 #include "chrome/common/extensions/extension_constants.h" 21 #include "chrome/common/extensions/extension_constants.h"
22 #include "chrome/test/base/testing_profile.h" 22 #include "chrome/test/base/testing_profile.h"
23 #include "content/public/browser/notification_service.h" 23 #include "content/public/browser/notification_service.h"
24 #include "content/public/common/context_menu_params.h" 24 #include "content/public/common/context_menu_params.h"
25 #include "content/public/test/test_browser_thread.h" 25 #include "content/public/test/test_browser_thread.h"
26 #include "testing/gmock/include/gmock/gmock.h" 26 #include "testing/gmock/include/gmock/gmock.h"
27 #include "testing/gtest/include/gtest/gtest.h" 27 #include "testing/gtest/include/gtest/gtest.h"
28 28
29 using content::BrowserThread; 29 using content::BrowserThread;
30 using extensions::Extension;
31 using testing::_; 30 using testing::_;
32 using testing::AtLeast; 31 using testing::AtLeast;
33 using testing::InSequence; 32 using testing::InSequence;
34 using testing::Return; 33 using testing::Return;
35 using testing::SaveArg; 34 using testing::SaveArg;
36 35
36 namespace extensions {
37
37 // Base class for tests. 38 // Base class for tests.
38 class ExtensionMenuManagerTest : public testing::Test { 39 class MenuManagerTest : public testing::Test {
39 public: 40 public:
40 ExtensionMenuManagerTest() 41 MenuManagerTest() : ui_thread_(BrowserThread::UI, &message_loop_),
41 : ui_thread_(BrowserThread::UI, &message_loop_), 42 file_thread_(BrowserThread::FILE, &message_loop_),
42 file_thread_(BrowserThread::FILE, &message_loop_), 43 manager_(&profile_),
43 manager_(&profile_), 44 next_id_(1) {
44 next_id_(1) {
45 } 45 }
46 46
47 // Returns a test item. 47 // Returns a test item.
48 ExtensionMenuItem* CreateTestItem(Extension* extension) { 48 MenuItem* CreateTestItem(Extension* extension) {
49 ExtensionMenuItem::Type type = ExtensionMenuItem::NORMAL; 49 MenuItem::Type type = MenuItem::NORMAL;
50 ExtensionMenuItem::ContextList contexts(ExtensionMenuItem::ALL); 50 MenuItem::ContextList contexts(MenuItem::ALL);
51 ExtensionMenuItem::Id id(false, extension->id()); 51 MenuItem::Id id(false, extension->id());
52 id.uid = next_id_++; 52 id.uid = next_id_++;
53 return new ExtensionMenuItem(id, "test", false, true, type, contexts); 53 return new MenuItem(id, "test", false, true, type, contexts);
54 } 54 }
55 55
56 // Returns a test item with the given string ID. 56 // Returns a test item with the given string ID.
57 ExtensionMenuItem* CreateTestItemWithID(Extension* extension, 57 MenuItem* CreateTestItemWithID(Extension* extension,
58 const std::string& string_id) { 58 const std::string& string_id) {
59 ExtensionMenuItem::Type type = ExtensionMenuItem::NORMAL; 59 MenuItem::Type type = MenuItem::NORMAL;
60 ExtensionMenuItem::ContextList contexts(ExtensionMenuItem::ALL); 60 MenuItem::ContextList contexts(MenuItem::ALL);
61 ExtensionMenuItem::Id id(false, extension->id()); 61 MenuItem::Id id(false, extension->id());
62 id.string_uid = string_id; 62 id.string_uid = string_id;
63 return new ExtensionMenuItem(id, "test", false, true, type, contexts); 63 return new MenuItem(id, "test", false, true, type, contexts);
64 } 64 }
65 65
66 // Creates and returns a test Extension. The caller does *not* own the return 66 // Creates and returns a test Extension. The caller does *not* own the return
67 // value. 67 // value.
68 Extension* AddExtension(std::string name) { 68 Extension* AddExtension(std::string name) {
69 scoped_refptr<Extension> extension = prefs_.AddExtension(name); 69 scoped_refptr<Extension> extension = prefs_.AddExtension(name);
70 extensions_.push_back(extension); 70 extensions_.push_back(extension);
71 return extension; 71 return extension;
72 } 72 }
73 73
74 protected: 74 protected:
75 TestingProfile profile_; 75 TestingProfile profile_;
76 MessageLoopForUI message_loop_; 76 MessageLoopForUI message_loop_;
77 content::TestBrowserThread ui_thread_; 77 content::TestBrowserThread ui_thread_;
78 content::TestBrowserThread file_thread_; 78 content::TestBrowserThread file_thread_;
79 79
80 ExtensionMenuManager manager_; 80 MenuManager manager_;
81 extensions::ExtensionList extensions_; 81 ExtensionList extensions_;
82 TestExtensionPrefs prefs_; 82 TestExtensionPrefs prefs_;
83 int next_id_; 83 int next_id_;
84 84
85 private: 85 private:
86 DISALLOW_COPY_AND_ASSIGN(ExtensionMenuManagerTest); 86 DISALLOW_COPY_AND_ASSIGN(MenuManagerTest);
87 }; 87 };
88 88
89 // Tests adding, getting, and removing items. 89 // Tests adding, getting, and removing items.
90 TEST_F(ExtensionMenuManagerTest, AddGetRemoveItems) { 90 TEST_F(MenuManagerTest, AddGetRemoveItems) {
91 Extension* extension = AddExtension("test"); 91 Extension* extension = AddExtension("test");
92 92
93 // Add a new item, make sure you can get it back. 93 // Add a new item, make sure you can get it back.
94 ExtensionMenuItem* item1 = CreateTestItem(extension); 94 MenuItem* item1 = CreateTestItem(extension);
95 ASSERT_TRUE(item1 != NULL); 95 ASSERT_TRUE(item1 != NULL);
96 ASSERT_TRUE(manager_.AddContextItem(extension, item1)); 96 ASSERT_TRUE(manager_.AddContextItem(extension, item1));
97 ASSERT_EQ(item1, manager_.GetItemById(item1->id())); 97 ASSERT_EQ(item1, manager_.GetItemById(item1->id()));
98 const ExtensionMenuItem::List* items = 98 const MenuItem::List* items = manager_.MenuItems(item1->extension_id());
99 manager_.MenuItems(item1->extension_id());
100 ASSERT_EQ(1u, items->size()); 99 ASSERT_EQ(1u, items->size());
101 ASSERT_EQ(item1, items->at(0)); 100 ASSERT_EQ(item1, items->at(0));
102 101
103 // Add a second item, make sure it comes back too. 102 // Add a second item, make sure it comes back too.
104 ExtensionMenuItem* item2 = CreateTestItemWithID(extension, "id2"); 103 MenuItem* item2 = CreateTestItemWithID(extension, "id2");
105 ASSERT_TRUE(manager_.AddContextItem(extension, item2)); 104 ASSERT_TRUE(manager_.AddContextItem(extension, item2));
106 ASSERT_EQ(item2, manager_.GetItemById(item2->id())); 105 ASSERT_EQ(item2, manager_.GetItemById(item2->id()));
107 items = manager_.MenuItems(item2->extension_id()); 106 items = manager_.MenuItems(item2->extension_id());
108 ASSERT_EQ(2u, items->size()); 107 ASSERT_EQ(2u, items->size());
109 ASSERT_EQ(item1, items->at(0)); 108 ASSERT_EQ(item1, items->at(0));
110 ASSERT_EQ(item2, items->at(1)); 109 ASSERT_EQ(item2, items->at(1));
111 110
112 // Try adding item 3, then removing it. 111 // Try adding item 3, then removing it.
113 ExtensionMenuItem* item3 = CreateTestItem(extension); 112 MenuItem* item3 = CreateTestItem(extension);
114 ExtensionMenuItem::Id id3 = item3->id(); 113 MenuItem::Id id3 = item3->id();
115 std::string extension_id = item3->extension_id(); 114 std::string extension_id = item3->extension_id();
116 ASSERT_TRUE(manager_.AddContextItem(extension, item3)); 115 ASSERT_TRUE(manager_.AddContextItem(extension, item3));
117 ASSERT_EQ(item3, manager_.GetItemById(id3)); 116 ASSERT_EQ(item3, manager_.GetItemById(id3));
118 ASSERT_EQ(3u, manager_.MenuItems(extension_id)->size()); 117 ASSERT_EQ(3u, manager_.MenuItems(extension_id)->size());
119 ASSERT_TRUE(manager_.RemoveContextMenuItem(id3)); 118 ASSERT_TRUE(manager_.RemoveContextMenuItem(id3));
120 ASSERT_EQ(NULL, manager_.GetItemById(id3)); 119 ASSERT_EQ(NULL, manager_.GetItemById(id3));
121 ASSERT_EQ(2u, manager_.MenuItems(extension_id)->size()); 120 ASSERT_EQ(2u, manager_.MenuItems(extension_id)->size());
122 121
123 // Make sure removing a non-existent item returns false. 122 // Make sure removing a non-existent item returns false.
124 ExtensionMenuItem::Id id(false, extension->id()); 123 MenuItem::Id id(false, extension->id());
125 id.uid = id3.uid + 50; 124 id.uid = id3.uid + 50;
126 ASSERT_FALSE(manager_.RemoveContextMenuItem(id)); 125 ASSERT_FALSE(manager_.RemoveContextMenuItem(id));
127 126
128 // Make sure adding an item with the same string ID returns false. 127 // Make sure adding an item with the same string ID returns false.
129 scoped_ptr<ExtensionMenuItem> item2too( 128 scoped_ptr<MenuItem> item2too(CreateTestItemWithID(extension, "id2"));
130 CreateTestItemWithID(extension, "id2"));
131 ASSERT_FALSE(manager_.AddContextItem(extension, item2too.get())); 129 ASSERT_FALSE(manager_.AddContextItem(extension, item2too.get()));
132 130
133 // But the same string ID should not collide with another extension. 131 // But the same string ID should not collide with another extension.
134 Extension* extension2 = AddExtension("test2"); 132 Extension* extension2 = AddExtension("test2");
135 ExtensionMenuItem* item2other = CreateTestItemWithID(extension2, "id2"); 133 MenuItem* item2other = CreateTestItemWithID(extension2, "id2");
136 ASSERT_TRUE(manager_.AddContextItem(extension2, item2other)); 134 ASSERT_TRUE(manager_.AddContextItem(extension2, item2other));
137 } 135 }
138 136
139 // Test adding/removing child items. 137 // Test adding/removing child items.
140 TEST_F(ExtensionMenuManagerTest, ChildFunctions) { 138 TEST_F(MenuManagerTest, ChildFunctions) {
141 Extension* extension1 = AddExtension("1111"); 139 Extension* extension1 = AddExtension("1111");
142 Extension* extension2 = AddExtension("2222"); 140 Extension* extension2 = AddExtension("2222");
143 Extension* extension3 = AddExtension("3333"); 141 Extension* extension3 = AddExtension("3333");
144 142
145 ExtensionMenuItem* item1 = CreateTestItem(extension1); 143 MenuItem* item1 = CreateTestItem(extension1);
146 ExtensionMenuItem* item2 = CreateTestItem(extension2); 144 MenuItem* item2 = CreateTestItem(extension2);
147 ExtensionMenuItem* item2_child = CreateTestItemWithID(extension2, "2child"); 145 MenuItem* item2_child = CreateTestItemWithID(extension2, "2child");
148 ExtensionMenuItem* item2_grandchild = CreateTestItem(extension2); 146 MenuItem* item2_grandchild = CreateTestItem(extension2);
149 147
150 // This third item we expect to fail inserting, so we use a scoped_ptr to make 148 // This third item we expect to fail inserting, so we use a scoped_ptr to make
151 // sure it gets deleted. 149 // sure it gets deleted.
152 scoped_ptr<ExtensionMenuItem> item3(CreateTestItem(extension3)); 150 scoped_ptr<MenuItem> item3(CreateTestItem(extension3));
153 151
154 // Add in the first two items. 152 // Add in the first two items.
155 ASSERT_TRUE(manager_.AddContextItem(extension1, item1)); 153 ASSERT_TRUE(manager_.AddContextItem(extension1, item1));
156 ASSERT_TRUE(manager_.AddContextItem(extension2, item2)); 154 ASSERT_TRUE(manager_.AddContextItem(extension2, item2));
157 155
158 ExtensionMenuItem::Id id1 = item1->id(); 156 MenuItem::Id id1 = item1->id();
159 ExtensionMenuItem::Id id2 = item2->id(); 157 MenuItem::Id id2 = item2->id();
160 158
161 // Try adding item3 as a child of item2 - this should fail because item3 has 159 // Try adding item3 as a child of item2 - this should fail because item3 has
162 // a different extension id. 160 // a different extension id.
163 ASSERT_FALSE(manager_.AddChildItem(id2, item3.get())); 161 ASSERT_FALSE(manager_.AddChildItem(id2, item3.get()));
164 162
165 // Add item2_child as a child of item2. 163 // Add item2_child as a child of item2.
166 ExtensionMenuItem::Id id2_child = item2_child->id(); 164 MenuItem::Id id2_child = item2_child->id();
167 ASSERT_TRUE(manager_.AddChildItem(id2, item2_child)); 165 ASSERT_TRUE(manager_.AddChildItem(id2, item2_child));
168 ASSERT_EQ(1, item2->child_count()); 166 ASSERT_EQ(1, item2->child_count());
169 ASSERT_EQ(0, item1->child_count()); 167 ASSERT_EQ(0, item1->child_count());
170 ASSERT_EQ(item2_child, manager_.GetItemById(id2_child)); 168 ASSERT_EQ(item2_child, manager_.GetItemById(id2_child));
171 169
172 ASSERT_EQ(1u, manager_.MenuItems(item1->extension_id())->size()); 170 ASSERT_EQ(1u, manager_.MenuItems(item1->extension_id())->size());
173 ASSERT_EQ(item1, manager_.MenuItems(item1->extension_id())->at(0)); 171 ASSERT_EQ(item1, manager_.MenuItems(item1->extension_id())->at(0));
174 172
175 // Add item2_grandchild as a child of item2_child, then remove it. 173 // Add item2_grandchild as a child of item2_child, then remove it.
176 ExtensionMenuItem::Id id2_grandchild = item2_grandchild->id(); 174 MenuItem::Id id2_grandchild = item2_grandchild->id();
177 ASSERT_TRUE(manager_.AddChildItem(id2_child, item2_grandchild)); 175 ASSERT_TRUE(manager_.AddChildItem(id2_child, item2_grandchild));
178 ASSERT_EQ(1, item2->child_count()); 176 ASSERT_EQ(1, item2->child_count());
179 ASSERT_EQ(1, item2_child->child_count()); 177 ASSERT_EQ(1, item2_child->child_count());
180 ASSERT_TRUE(manager_.RemoveContextMenuItem(id2_grandchild)); 178 ASSERT_TRUE(manager_.RemoveContextMenuItem(id2_grandchild));
181 179
182 // We should only get 1 thing back when asking for item2's extension id, since 180 // We should only get 1 thing back when asking for item2's extension id, since
183 // it has a child item. 181 // it has a child item.
184 ASSERT_EQ(1u, manager_.MenuItems(item2->extension_id())->size()); 182 ASSERT_EQ(1u, manager_.MenuItems(item2->extension_id())->size());
185 ASSERT_EQ(item2, manager_.MenuItems(item2->extension_id())->at(0)); 183 ASSERT_EQ(item2, manager_.MenuItems(item2->extension_id())->at(0));
186 184
187 // Remove child2_item. 185 // Remove child2_item.
188 ASSERT_TRUE(manager_.RemoveContextMenuItem(id2_child)); 186 ASSERT_TRUE(manager_.RemoveContextMenuItem(id2_child));
189 ASSERT_EQ(1u, manager_.MenuItems(item2->extension_id())->size()); 187 ASSERT_EQ(1u, manager_.MenuItems(item2->extension_id())->size());
190 ASSERT_EQ(item2, manager_.MenuItems(item2->extension_id())->at(0)); 188 ASSERT_EQ(item2, manager_.MenuItems(item2->extension_id())->at(0));
191 ASSERT_EQ(0, item2->child_count()); 189 ASSERT_EQ(0, item2->child_count());
192 } 190 }
193 191
194 // Tests that deleting a parent properly removes descendants. 192 // Tests that deleting a parent properly removes descendants.
195 TEST_F(ExtensionMenuManagerTest, DeleteParent) { 193 TEST_F(MenuManagerTest, DeleteParent) {
196 Extension* extension = AddExtension("1111"); 194 Extension* extension = AddExtension("1111");
197 195
198 // Set up 5 items to add. 196 // Set up 5 items to add.
199 ExtensionMenuItem* item1 = CreateTestItem(extension); 197 MenuItem* item1 = CreateTestItem(extension);
200 ExtensionMenuItem* item2 = CreateTestItem(extension); 198 MenuItem* item2 = CreateTestItem(extension);
201 ExtensionMenuItem* item3 = CreateTestItemWithID(extension, "id3"); 199 MenuItem* item3 = CreateTestItemWithID(extension, "id3");
202 ExtensionMenuItem* item4 = CreateTestItemWithID(extension, "id4"); 200 MenuItem* item4 = CreateTestItemWithID(extension, "id4");
203 ExtensionMenuItem* item5 = CreateTestItem(extension); 201 MenuItem* item5 = CreateTestItem(extension);
204 ExtensionMenuItem* item6 = CreateTestItem(extension); 202 MenuItem* item6 = CreateTestItem(extension);
205 ExtensionMenuItem::Id item1_id = item1->id(); 203 MenuItem::Id item1_id = item1->id();
206 ExtensionMenuItem::Id item2_id = item2->id(); 204 MenuItem::Id item2_id = item2->id();
207 ExtensionMenuItem::Id item3_id = item3->id(); 205 MenuItem::Id item3_id = item3->id();
208 ExtensionMenuItem::Id item4_id = item4->id(); 206 MenuItem::Id item4_id = item4->id();
209 ExtensionMenuItem::Id item5_id = item5->id(); 207 MenuItem::Id item5_id = item5->id();
210 ExtensionMenuItem::Id item6_id = item6->id(); 208 MenuItem::Id item6_id = item6->id();
211 209
212 // Add the items in the hierarchy 210 // Add the items in the hierarchy
213 // item1 -> item2 -> item3 -> item4 -> item5 -> item6. 211 // item1 -> item2 -> item3 -> item4 -> item5 -> item6.
214 ASSERT_TRUE(manager_.AddContextItem(extension, item1)); 212 ASSERT_TRUE(manager_.AddContextItem(extension, item1));
215 ASSERT_TRUE(manager_.AddChildItem(item1_id, item2)); 213 ASSERT_TRUE(manager_.AddChildItem(item1_id, item2));
216 ASSERT_TRUE(manager_.AddChildItem(item2_id, item3)); 214 ASSERT_TRUE(manager_.AddChildItem(item2_id, item3));
217 ASSERT_TRUE(manager_.AddChildItem(item3_id, item4)); 215 ASSERT_TRUE(manager_.AddChildItem(item3_id, item4));
218 ASSERT_TRUE(manager_.AddChildItem(item4_id, item5)); 216 ASSERT_TRUE(manager_.AddChildItem(item4_id, item5));
219 ASSERT_TRUE(manager_.AddChildItem(item5_id, item6)); 217 ASSERT_TRUE(manager_.AddChildItem(item5_id, item6));
220 ASSERT_EQ(item1, manager_.GetItemById(item1_id)); 218 ASSERT_EQ(item1, manager_.GetItemById(item1_id));
(...skipping 29 matching lines...) Expand all
250 // Now remove item1 and make sure item2 and item3 are gone as well. 248 // Now remove item1 and make sure item2 and item3 are gone as well.
251 ASSERT_TRUE(manager_.RemoveContextMenuItem(item1_id)); 249 ASSERT_TRUE(manager_.RemoveContextMenuItem(item1_id));
252 ASSERT_EQ(NULL, manager_.MenuItems(extension->id())); 250 ASSERT_EQ(NULL, manager_.MenuItems(extension->id()));
253 ASSERT_EQ(0u, manager_.items_by_id_.size()); 251 ASSERT_EQ(0u, manager_.items_by_id_.size());
254 ASSERT_EQ(NULL, manager_.GetItemById(item1_id)); 252 ASSERT_EQ(NULL, manager_.GetItemById(item1_id));
255 ASSERT_EQ(NULL, manager_.GetItemById(item2_id)); 253 ASSERT_EQ(NULL, manager_.GetItemById(item2_id));
256 ASSERT_EQ(NULL, manager_.GetItemById(item3_id)); 254 ASSERT_EQ(NULL, manager_.GetItemById(item3_id));
257 } 255 }
258 256
259 // Tests changing parents. 257 // Tests changing parents.
260 TEST_F(ExtensionMenuManagerTest, ChangeParent) { 258 TEST_F(MenuManagerTest, ChangeParent) {
261 Extension* extension1 = AddExtension("1111"); 259 Extension* extension1 = AddExtension("1111");
262 260
263 // First create two items and add them both to the manager. 261 // First create two items and add them both to the manager.
264 ExtensionMenuItem* item1 = CreateTestItem(extension1); 262 MenuItem* item1 = CreateTestItem(extension1);
265 ExtensionMenuItem* item2 = CreateTestItem(extension1); 263 MenuItem* item2 = CreateTestItem(extension1);
266 264
267 ASSERT_TRUE(manager_.AddContextItem(extension1, item1)); 265 ASSERT_TRUE(manager_.AddContextItem(extension1, item1));
268 ASSERT_TRUE(manager_.AddContextItem(extension1, item2)); 266 ASSERT_TRUE(manager_.AddContextItem(extension1, item2));
269 267
270 const ExtensionMenuItem::List* items = 268 const MenuItem::List* items = manager_.MenuItems(item1->extension_id());
271 manager_.MenuItems(item1->extension_id());
272 ASSERT_EQ(2u, items->size()); 269 ASSERT_EQ(2u, items->size());
273 ASSERT_EQ(item1, items->at(0)); 270 ASSERT_EQ(item1, items->at(0));
274 ASSERT_EQ(item2, items->at(1)); 271 ASSERT_EQ(item2, items->at(1));
275 272
276 // Now create a third item, initially add it as a child of item1, then move 273 // Now create a third item, initially add it as a child of item1, then move
277 // it to be a child of item2. 274 // it to be a child of item2.
278 ExtensionMenuItem* item3 = CreateTestItem(extension1); 275 MenuItem* item3 = CreateTestItem(extension1);
279 276
280 ASSERT_TRUE(manager_.AddChildItem(item1->id(), item3)); 277 ASSERT_TRUE(manager_.AddChildItem(item1->id(), item3));
281 ASSERT_EQ(1, item1->child_count()); 278 ASSERT_EQ(1, item1->child_count());
282 ASSERT_EQ(item3, item1->children()[0]); 279 ASSERT_EQ(item3, item1->children()[0]);
283 280
284 ASSERT_TRUE(manager_.ChangeParent(item3->id(), &item2->id())); 281 ASSERT_TRUE(manager_.ChangeParent(item3->id(), &item2->id()));
285 ASSERT_EQ(0, item1->child_count()); 282 ASSERT_EQ(0, item1->child_count());
286 ASSERT_EQ(1, item2->child_count()); 283 ASSERT_EQ(1, item2->child_count());
287 ASSERT_EQ(item3, item2->children()[0]); 284 ASSERT_EQ(item3, item2->children()[0]);
288 285
(...skipping 30 matching lines...) Expand all
319 ASSERT_TRUE(manager_.ChangeParent(item2->id(), NULL)); 316 ASSERT_TRUE(manager_.ChangeParent(item2->id(), NULL));
320 items = manager_.MenuItems(item1->extension_id()); 317 items = manager_.MenuItems(item1->extension_id());
321 ASSERT_EQ(2u, items->size()); 318 ASSERT_EQ(2u, items->size());
322 ASSERT_EQ(item1, items->at(0)); 319 ASSERT_EQ(item1, items->at(0));
323 ASSERT_EQ(item2, items->at(1)); 320 ASSERT_EQ(item2, items->at(1));
324 ASSERT_EQ(1, item1->child_count()); 321 ASSERT_EQ(1, item1->child_count());
325 ASSERT_EQ(item3, item1->children()[0]); 322 ASSERT_EQ(item3, item1->children()[0]);
326 323
327 // Make sure you can't move a node to be a child of another extension's item. 324 // Make sure you can't move a node to be a child of another extension's item.
328 Extension* extension2 = AddExtension("2222"); 325 Extension* extension2 = AddExtension("2222");
329 ExtensionMenuItem* item4 = CreateTestItem(extension2); 326 MenuItem* item4 = CreateTestItem(extension2);
330 ASSERT_TRUE(manager_.AddContextItem(extension2, item4)); 327 ASSERT_TRUE(manager_.AddContextItem(extension2, item4));
331 ASSERT_FALSE(manager_.ChangeParent(item4->id(), &item1->id())); 328 ASSERT_FALSE(manager_.ChangeParent(item4->id(), &item1->id()));
332 ASSERT_FALSE(manager_.ChangeParent(item1->id(), &item4->id())); 329 ASSERT_FALSE(manager_.ChangeParent(item1->id(), &item4->id()));
333 330
334 // Make sure you can't make an item be it's own parent. 331 // Make sure you can't make an item be it's own parent.
335 ASSERT_FALSE(manager_.ChangeParent(item1->id(), &item1->id())); 332 ASSERT_FALSE(manager_.ChangeParent(item1->id(), &item1->id()));
336 } 333 }
337 334
338 // Tests that we properly remove an extension's menu item when that extension is 335 // Tests that we properly remove an extension's menu item when that extension is
339 // unloaded. 336 // unloaded.
340 TEST_F(ExtensionMenuManagerTest, ExtensionUnloadRemovesMenuItems) { 337 TEST_F(MenuManagerTest, ExtensionUnloadRemovesMenuItems) {
341 content::NotificationService* notifier = 338 content::NotificationService* notifier =
342 content::NotificationService::current(); 339 content::NotificationService::current();
343 ASSERT_TRUE(notifier != NULL); 340 ASSERT_TRUE(notifier != NULL);
344 341
345 // Create a test extension. 342 // Create a test extension.
346 Extension* extension1 = AddExtension("1111"); 343 Extension* extension1 = AddExtension("1111");
347 344
348 // Create an ExtensionMenuItem and put it into the manager. 345 // Create an MenuItem and put it into the manager.
349 ExtensionMenuItem* item1 = CreateTestItem(extension1); 346 MenuItem* item1 = CreateTestItem(extension1);
350 ExtensionMenuItem::Id id1 = item1->id(); 347 MenuItem::Id id1 = item1->id();
351 ASSERT_EQ(extension1->id(), item1->extension_id()); 348 ASSERT_EQ(extension1->id(), item1->extension_id());
352 ASSERT_TRUE(manager_.AddContextItem(extension1, item1)); 349 ASSERT_TRUE(manager_.AddContextItem(extension1, item1));
353 ASSERT_EQ(1u, manager_.MenuItems(extension1->id())->size()); 350 ASSERT_EQ(1u, manager_.MenuItems(extension1->id())->size());
354 351
355 // Create a menu item with a different extension id and add it to the manager. 352 // Create a menu item with a different extension id and add it to the manager.
356 Extension* extension2 = AddExtension("2222"); 353 Extension* extension2 = AddExtension("2222");
357 ExtensionMenuItem* item2 = CreateTestItem(extension2); 354 MenuItem* item2 = CreateTestItem(extension2);
358 ASSERT_NE(item1->extension_id(), item2->extension_id()); 355 ASSERT_NE(item1->extension_id(), item2->extension_id());
359 ASSERT_TRUE(manager_.AddContextItem(extension2, item2)); 356 ASSERT_TRUE(manager_.AddContextItem(extension2, item2));
360 357
361 // Notify that the extension was unloaded, and make sure the right item is 358 // Notify that the extension was unloaded, and make sure the right item is
362 // gone. 359 // gone.
363 extensions::UnloadedExtensionInfo details( 360 UnloadedExtensionInfo details(
364 extension1, extension_misc::UNLOAD_REASON_DISABLE); 361 extension1, extension_misc::UNLOAD_REASON_DISABLE);
365 notifier->Notify(chrome::NOTIFICATION_EXTENSION_UNLOADED, 362 notifier->Notify(chrome::NOTIFICATION_EXTENSION_UNLOADED,
366 content::Source<Profile>(&profile_), 363 content::Source<Profile>(&profile_),
367 content::Details<extensions::UnloadedExtensionInfo>( 364 content::Details<UnloadedExtensionInfo>(
368 &details)); 365 &details));
369 ASSERT_EQ(NULL, manager_.MenuItems(extension1->id())); 366 ASSERT_EQ(NULL, manager_.MenuItems(extension1->id()));
370 ASSERT_EQ(1u, manager_.MenuItems(extension2->id())->size()); 367 ASSERT_EQ(1u, manager_.MenuItems(extension2->id())->size());
371 ASSERT_TRUE(manager_.GetItemById(id1) == NULL); 368 ASSERT_TRUE(manager_.GetItemById(id1) == NULL);
372 ASSERT_TRUE(manager_.GetItemById(item2->id()) != NULL); 369 ASSERT_TRUE(manager_.GetItemById(item2->id()) != NULL);
373 } 370 }
374 371
375 // A mock message service for tests of ExtensionMenuManager::ExecuteCommand. 372 // A mock message service for tests of MenuManager::ExecuteCommand.
376 class MockExtensionEventRouter : public ExtensionEventRouter { 373 class MockExtensionEventRouter : public ExtensionEventRouter {
377 public: 374 public:
378 explicit MockExtensionEventRouter(Profile* profile) : 375 explicit MockExtensionEventRouter(Profile* profile) :
379 ExtensionEventRouter(profile) {} 376 ExtensionEventRouter(profile) {}
380 377
381 MOCK_METHOD6(DispatchEventToExtension, 378 MOCK_METHOD6(DispatchEventToExtension,
382 void(const std::string& extension_id, 379 void(const std::string& extension_id,
383 const std::string& event_name, 380 const std::string& event_name,
384 const std::string& event_args, 381 const std::string& event_args,
385 Profile* source_profile, 382 Profile* source_profile,
386 const GURL& event_url, 383 const GURL& event_url,
387 ExtensionEventRouter::UserGestureState state)); 384 ExtensionEventRouter::UserGestureState state));
388 385
389 386
390 private: 387 private:
391 DISALLOW_COPY_AND_ASSIGN(MockExtensionEventRouter); 388 DISALLOW_COPY_AND_ASSIGN(MockExtensionEventRouter);
392 }; 389 };
393 390
394 // A mock profile for tests of ExtensionMenuManager::ExecuteCommand. 391 // A mock profile for tests of MenuManager::ExecuteCommand.
395 class MockTestingProfile : public TestingProfile { 392 class MockTestingProfile : public TestingProfile {
396 public: 393 public:
397 MockTestingProfile() {} 394 MockTestingProfile() {}
398 MOCK_METHOD0(GetExtensionEventRouter, ExtensionEventRouter*()); 395 MOCK_METHOD0(GetExtensionEventRouter, ExtensionEventRouter*());
399 396
400 private: 397 private:
401 DISALLOW_COPY_AND_ASSIGN(MockTestingProfile); 398 DISALLOW_COPY_AND_ASSIGN(MockTestingProfile);
402 }; 399 };
403 400
404 // Tests the RemoveAll functionality. 401 // Tests the RemoveAll functionality.
405 TEST_F(ExtensionMenuManagerTest, RemoveAll) { 402 TEST_F(MenuManagerTest, RemoveAll) {
406 // Try removing all items for an extension id that doesn't have any items. 403 // Try removing all items for an extension id that doesn't have any items.
407 manager_.RemoveAllContextItems("CCCC"); 404 manager_.RemoveAllContextItems("CCCC");
408 405
409 // Add 2 top-level and one child item for extension 1. 406 // Add 2 top-level and one child item for extension 1.
410 Extension* extension1 = AddExtension("1111"); 407 Extension* extension1 = AddExtension("1111");
411 ExtensionMenuItem* item1 = CreateTestItem(extension1); 408 MenuItem* item1 = CreateTestItem(extension1);
412 ExtensionMenuItem* item2 = CreateTestItem(extension1); 409 MenuItem* item2 = CreateTestItem(extension1);
413 ExtensionMenuItem* item3 = CreateTestItem(extension1); 410 MenuItem* item3 = CreateTestItem(extension1);
414 ASSERT_TRUE(manager_.AddContextItem(extension1, item1)); 411 ASSERT_TRUE(manager_.AddContextItem(extension1, item1));
415 ASSERT_TRUE(manager_.AddContextItem(extension1, item2)); 412 ASSERT_TRUE(manager_.AddContextItem(extension1, item2));
416 ASSERT_TRUE(manager_.AddChildItem(item1->id(), item3)); 413 ASSERT_TRUE(manager_.AddChildItem(item1->id(), item3));
417 414
418 // Add one top-level item for extension 2. 415 // Add one top-level item for extension 2.
419 Extension* extension2 = AddExtension("2222"); 416 Extension* extension2 = AddExtension("2222");
420 ExtensionMenuItem* item4 = CreateTestItem(extension2); 417 MenuItem* item4 = CreateTestItem(extension2);
421 ASSERT_TRUE(manager_.AddContextItem(extension2, item4)); 418 ASSERT_TRUE(manager_.AddContextItem(extension2, item4));
422 419
423 EXPECT_EQ(2u, manager_.MenuItems(extension1->id())->size()); 420 EXPECT_EQ(2u, manager_.MenuItems(extension1->id())->size());
424 EXPECT_EQ(1u, manager_.MenuItems(extension2->id())->size()); 421 EXPECT_EQ(1u, manager_.MenuItems(extension2->id())->size());
425 422
426 // Remove extension2's item. 423 // Remove extension2's item.
427 manager_.RemoveAllContextItems(extension2->id()); 424 manager_.RemoveAllContextItems(extension2->id());
428 EXPECT_EQ(2u, manager_.MenuItems(extension1->id())->size()); 425 EXPECT_EQ(2u, manager_.MenuItems(extension1->id())->size());
429 EXPECT_EQ(NULL, manager_.MenuItems(extension2->id())); 426 EXPECT_EQ(NULL, manager_.MenuItems(extension2->id()));
430 427
431 // Remove extension1's items. 428 // Remove extension1's items.
432 manager_.RemoveAllContextItems(extension1->id()); 429 manager_.RemoveAllContextItems(extension1->id());
433 EXPECT_EQ(NULL, manager_.MenuItems(extension1->id())); 430 EXPECT_EQ(NULL, manager_.MenuItems(extension1->id()));
434 } 431 }
435 432
436 // Tests that removing all items one-by-one doesn't leave an entry around. 433 // Tests that removing all items one-by-one doesn't leave an entry around.
437 TEST_F(ExtensionMenuManagerTest, RemoveOneByOne) { 434 TEST_F(MenuManagerTest, RemoveOneByOne) {
438 // Add 2 test items. 435 // Add 2 test items.
439 Extension* extension1 = AddExtension("1111"); 436 Extension* extension1 = AddExtension("1111");
440 ExtensionMenuItem* item1 = CreateTestItem(extension1); 437 MenuItem* item1 = CreateTestItem(extension1);
441 ExtensionMenuItem* item2 = CreateTestItem(extension1); 438 MenuItem* item2 = CreateTestItem(extension1);
442 ExtensionMenuItem* item3 = CreateTestItemWithID(extension1, "id3"); 439 MenuItem* item3 = CreateTestItemWithID(extension1, "id3");
443 ASSERT_TRUE(manager_.AddContextItem(extension1, item1)); 440 ASSERT_TRUE(manager_.AddContextItem(extension1, item1));
444 ASSERT_TRUE(manager_.AddContextItem(extension1, item2)); 441 ASSERT_TRUE(manager_.AddContextItem(extension1, item2));
445 ASSERT_TRUE(manager_.AddContextItem(extension1, item3)); 442 ASSERT_TRUE(manager_.AddContextItem(extension1, item3));
446 443
447 ASSERT_FALSE(manager_.context_items_.empty()); 444 ASSERT_FALSE(manager_.context_items_.empty());
448 445
449 manager_.RemoveContextMenuItem(item3->id()); 446 manager_.RemoveContextMenuItem(item3->id());
450 manager_.RemoveContextMenuItem(item1->id()); 447 manager_.RemoveContextMenuItem(item1->id());
451 manager_.RemoveContextMenuItem(item2->id()); 448 manager_.RemoveContextMenuItem(item2->id());
452 449
453 ASSERT_TRUE(manager_.context_items_.empty()); 450 ASSERT_TRUE(manager_.context_items_.empty());
454 } 451 }
455 452
456 TEST_F(ExtensionMenuManagerTest, ExecuteCommand) { 453 TEST_F(MenuManagerTest, ExecuteCommand) {
457 MockTestingProfile profile; 454 MockTestingProfile profile;
458 455
459 scoped_ptr<MockExtensionEventRouter> mock_event_router( 456 scoped_ptr<MockExtensionEventRouter> mock_event_router(
460 new MockExtensionEventRouter(&profile)); 457 new MockExtensionEventRouter(&profile));
461 458
462 content::ContextMenuParams params; 459 content::ContextMenuParams params;
463 params.media_type = WebKit::WebContextMenuData::MediaTypeImage; 460 params.media_type = WebKit::WebContextMenuData::MediaTypeImage;
464 params.src_url = GURL("http://foo.bar/image.png"); 461 params.src_url = GURL("http://foo.bar/image.png");
465 params.page_url = GURL("http://foo.bar"); 462 params.page_url = GURL("http://foo.bar");
466 params.selection_text = ASCIIToUTF16("Hello World"); 463 params.selection_text = ASCIIToUTF16("Hello World");
467 params.is_editable = false; 464 params.is_editable = false;
468 465
469 Extension* extension = AddExtension("test"); 466 Extension* extension = AddExtension("test");
470 ExtensionMenuItem* item = CreateTestItem(extension); 467 MenuItem* item = CreateTestItem(extension);
471 ExtensionMenuItem::Id id = item->id(); 468 MenuItem::Id id = item->id();
472 ASSERT_TRUE(manager_.AddContextItem(extension, item)); 469 ASSERT_TRUE(manager_.AddContextItem(extension, item));
473 470
474 EXPECT_CALL(profile, GetExtensionEventRouter()) 471 EXPECT_CALL(profile, GetExtensionEventRouter())
475 .Times(1) 472 .Times(1)
476 .WillOnce(Return(mock_event_router.get())); 473 .WillOnce(Return(mock_event_router.get()));
477 474
478 // Use the magic of googlemock to save a parameter to our mock's 475 // Use the magic of googlemock to save a parameter to our mock's
479 // DispatchEventToExtension method into event_args. 476 // DispatchEventToExtension method into event_args.
480 std::string event_args; 477 std::string event_args;
481 { 478 {
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
531 string16 tmp16; 528 string16 tmp16;
532 ASSERT_TRUE(info->GetString("selectionText", &tmp16)); 529 ASSERT_TRUE(info->GetString("selectionText", &tmp16));
533 ASSERT_EQ(params.selection_text, tmp16); 530 ASSERT_EQ(params.selection_text, tmp16);
534 531
535 bool bool_tmp = true; 532 bool bool_tmp = true;
536 ASSERT_TRUE(info->GetBoolean("editable", &bool_tmp)); 533 ASSERT_TRUE(info->GetBoolean("editable", &bool_tmp));
537 ASSERT_EQ(params.is_editable, bool_tmp); 534 ASSERT_EQ(params.is_editable, bool_tmp);
538 } 535 }
539 536
540 // Test that there is always only one radio item selected. 537 // Test that there is always only one radio item selected.
541 TEST_F(ExtensionMenuManagerTest, SanitizeRadioButtons) { 538 TEST_F(MenuManagerTest, SanitizeRadioButtons) {
542 Extension* extension = AddExtension("test"); 539 Extension* extension = AddExtension("test");
543 540
544 // A single unchecked item should get checked 541 // A single unchecked item should get checked
545 ExtensionMenuItem* item1 = CreateTestItem(extension); 542 MenuItem* item1 = CreateTestItem(extension);
546 543
547 item1->set_type(ExtensionMenuItem::RADIO); 544 item1->set_type(MenuItem::RADIO);
548 item1->SetChecked(false); 545 item1->SetChecked(false);
549 ASSERT_FALSE(item1->checked()); 546 ASSERT_FALSE(item1->checked());
550 manager_.AddContextItem(extension, item1); 547 manager_.AddContextItem(extension, item1);
551 ASSERT_TRUE(item1->checked()); 548 ASSERT_TRUE(item1->checked());
552 549
553 // In a run of two unchecked items, the first should get selected. 550 // In a run of two unchecked items, the first should get selected.
554 item1->SetChecked(false); 551 item1->SetChecked(false);
555 ExtensionMenuItem* item2 = CreateTestItem(extension); 552 MenuItem* item2 = CreateTestItem(extension);
556 item2->set_type(ExtensionMenuItem::RADIO); 553 item2->set_type(MenuItem::RADIO);
557 item2->SetChecked(false); 554 item2->SetChecked(false);
558 ASSERT_FALSE(item1->checked()); 555 ASSERT_FALSE(item1->checked());
559 ASSERT_FALSE(item2->checked()); 556 ASSERT_FALSE(item2->checked());
560 manager_.AddContextItem(extension, item2); 557 manager_.AddContextItem(extension, item2);
561 ASSERT_TRUE(item1->checked()); 558 ASSERT_TRUE(item1->checked());
562 ASSERT_FALSE(item2->checked()); 559 ASSERT_FALSE(item2->checked());
563 560
564 // If multiple items are checked, only the last item should get checked. 561 // If multiple items are checked, only the last item should get checked.
565 item1->SetChecked(true); 562 item1->SetChecked(true);
566 item2->SetChecked(true); 563 item2->SetChecked(true);
567 ASSERT_TRUE(item1->checked()); 564 ASSERT_TRUE(item1->checked());
568 ASSERT_TRUE(item2->checked()); 565 ASSERT_TRUE(item2->checked());
569 manager_.ItemUpdated(item1->id()); 566 manager_.ItemUpdated(item1->id());
570 ASSERT_FALSE(item1->checked()); 567 ASSERT_FALSE(item1->checked());
571 ASSERT_TRUE(item2->checked()); 568 ASSERT_TRUE(item2->checked());
572 569
573 // If the checked item is removed, the new first item should get checked. 570 // If the checked item is removed, the new first item should get checked.
574 item1->SetChecked(false); 571 item1->SetChecked(false);
575 item2->SetChecked(true); 572 item2->SetChecked(true);
576 ASSERT_FALSE(item1->checked()); 573 ASSERT_FALSE(item1->checked());
577 ASSERT_TRUE(item2->checked()); 574 ASSERT_TRUE(item2->checked());
578 manager_.RemoveContextMenuItem(item2->id()); 575 manager_.RemoveContextMenuItem(item2->id());
579 item2 = NULL; 576 item2 = NULL;
580 ASSERT_TRUE(item1->checked()); 577 ASSERT_TRUE(item1->checked());
581 578
582 // If a checked item is added to a run that already has a checked item, 579 // If a checked item is added to a run that already has a checked item,
583 // then the new item should get checked. 580 // then the new item should get checked.
584 item1->SetChecked(true); 581 item1->SetChecked(true);
585 ExtensionMenuItem* new_item = CreateTestItem(extension); 582 MenuItem* new_item = CreateTestItem(extension);
586 new_item->set_type(ExtensionMenuItem::RADIO); 583 new_item->set_type(MenuItem::RADIO);
587 new_item->SetChecked(true); 584 new_item->SetChecked(true);
588 ASSERT_TRUE(item1->checked()); 585 ASSERT_TRUE(item1->checked());
589 ASSERT_TRUE(new_item->checked()); 586 ASSERT_TRUE(new_item->checked());
590 manager_.AddContextItem(extension, new_item); 587 manager_.AddContextItem(extension, new_item);
591 ASSERT_FALSE(item1->checked()); 588 ASSERT_FALSE(item1->checked());
592 ASSERT_TRUE(new_item->checked()); 589 ASSERT_TRUE(new_item->checked());
593 // Make sure that children are checked as well. 590 // Make sure that children are checked as well.
594 ExtensionMenuItem* parent = CreateTestItem(extension); 591 MenuItem* parent = CreateTestItem(extension);
595 manager_.AddContextItem(extension, parent); 592 manager_.AddContextItem(extension, parent);
596 ExtensionMenuItem* child1 = CreateTestItem(extension); 593 MenuItem* child1 = CreateTestItem(extension);
597 child1->set_type(ExtensionMenuItem::RADIO); 594 child1->set_type(MenuItem::RADIO);
598 child1->SetChecked(false); 595 child1->SetChecked(false);
599 ExtensionMenuItem* child2 = CreateTestItem(extension); 596 MenuItem* child2 = CreateTestItem(extension);
600 child2->set_type(ExtensionMenuItem::RADIO); 597 child2->set_type(MenuItem::RADIO);
601 child2->SetChecked(true); 598 child2->SetChecked(true);
602 ASSERT_FALSE(child1->checked()); 599 ASSERT_FALSE(child1->checked());
603 ASSERT_TRUE(child2->checked()); 600 ASSERT_TRUE(child2->checked());
604 601
605 manager_.AddChildItem(parent->id(), child1); 602 manager_.AddChildItem(parent->id(), child1);
606 ASSERT_TRUE(child1->checked()); 603 ASSERT_TRUE(child1->checked());
607 604
608 manager_.AddChildItem(parent->id(), child2); 605 manager_.AddChildItem(parent->id(), child2);
609 ASSERT_FALSE(child1->checked()); 606 ASSERT_FALSE(child1->checked());
610 ASSERT_TRUE(child2->checked()); 607 ASSERT_TRUE(child2->checked());
611 608
612 // Removing the checked item from the children should cause the 609 // Removing the checked item from the children should cause the
613 // remaining child to be checked. 610 // remaining child to be checked.
614 manager_.RemoveContextMenuItem(child2->id()); 611 manager_.RemoveContextMenuItem(child2->id());
615 child2 = NULL; 612 child2 = NULL;
616 ASSERT_TRUE(child1->checked()); 613 ASSERT_TRUE(child1->checked());
617 614
618 // This should NOT cause |new_item| to be deseleted because 615 // This should NOT cause |new_item| to be deseleted because
619 // |parent| will be seperating the two runs of radio items. 616 // |parent| will be seperating the two runs of radio items.
620 manager_.ChangeParent(child1->id(), NULL); 617 manager_.ChangeParent(child1->id(), NULL);
621 ASSERT_TRUE(new_item->checked()); 618 ASSERT_TRUE(new_item->checked());
622 ASSERT_TRUE(child1->checked()); 619 ASSERT_TRUE(child1->checked());
623 620
624 // Removing |parent| should cause only |child1| to be selected. 621 // Removing |parent| should cause only |child1| to be selected.
625 manager_.RemoveContextMenuItem(parent->id()); 622 manager_.RemoveContextMenuItem(parent->id());
626 parent = NULL; 623 parent = NULL;
627 ASSERT_FALSE(new_item->checked()); 624 ASSERT_FALSE(new_item->checked());
628 ASSERT_TRUE(child1->checked()); 625 ASSERT_TRUE(child1->checked());
629 } 626 }
627
628 } // namespace extensions
OLDNEW
« no previous file with comments | « chrome/browser/extensions/menu_manager.cc ('k') | chrome/browser/tab_contents/render_view_context_menu.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698