OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "chrome/browser/extensions/extension_browsertest.h" | 5 #include "chrome/browser/extensions/extension_browsertest.h" |
6 #include "chrome/browser/extensions/extension_service.h" | 6 #include "chrome/browser/extensions/extension_service.h" |
7 #include "chrome/browser/extensions/extension_toolbar_model.h" | 7 #include "chrome/browser/extensions/extension_toolbar_model.h" |
8 #include "chrome/browser/profiles/profile.h" | 8 #include "chrome/browser/profiles/profile.h" |
9 #include "chrome/browser/ui/browser.h" | 9 #include "chrome/browser/ui/browser.h" |
10 #include "chrome/common/chrome_switches.h" | 10 #include "chrome/common/chrome_switches.h" |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
43 | 43 |
44 virtual void BrowserActionRemoved(const Extension* extension) { | 44 virtual void BrowserActionRemoved(const Extension* extension) { |
45 removed_count_++; | 45 removed_count_++; |
46 } | 46 } |
47 | 47 |
48 virtual void BrowserActionMoved(const Extension* extension, int index) { | 48 virtual void BrowserActionMoved(const Extension* extension, int index) { |
49 moved_count_++; | 49 moved_count_++; |
50 } | 50 } |
51 | 51 |
52 const Extension* ExtensionAt(int index) { | 52 const Extension* ExtensionAt(int index) { |
53 for (extensions::ExtensionList::iterator i = model_->begin(); | 53 const extensions::ExtensionList& toolbar_items = model_->toolbar_items(); |
54 i < model_->end(); ++i) { | 54 for (extensions::ExtensionList::const_iterator i = toolbar_items.begin(); |
| 55 i < toolbar_items.end(); ++i) { |
55 if (index-- == 0) | 56 if (index-- == 0) |
56 return *i; | 57 return *i; |
57 } | 58 } |
58 return NULL; | 59 return NULL; |
59 } | 60 } |
60 | 61 |
61 protected: | 62 protected: |
62 ExtensionToolbarModel* model_; | 63 ExtensionToolbarModel* model_; |
63 | 64 |
64 int inserted_count_; | 65 int inserted_count_; |
65 int removed_count_; | 66 int removed_count_; |
66 int moved_count_; | 67 int moved_count_; |
67 }; | 68 }; |
68 | 69 |
69 IN_PROC_BROWSER_TEST_F(ExtensionToolbarModelTest, Basic) { | 70 IN_PROC_BROWSER_TEST_F(ExtensionToolbarModelTest, Basic) { |
70 CommandLine::ForCurrentProcess()->AppendSwitch( | 71 CommandLine::ForCurrentProcess()->AppendSwitch( |
71 switches::kEnableExperimentalExtensionApis); | 72 switches::kEnableExperimentalExtensionApis); |
72 | 73 |
73 // Load an extension with no browser action. | 74 // Load an extension with no browser action. |
74 ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII("api_test") | 75 ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII("api_test") |
75 .AppendASCII("browser_action") | 76 .AppendASCII("browser_action") |
76 .AppendASCII("none"))); | 77 .AppendASCII("none"))); |
77 | 78 |
78 // This extension should not be in the model (has no browser action). | 79 // This extension should not be in the model (has no browser action). |
79 EXPECT_EQ(0, inserted_count_); | 80 EXPECT_EQ(0, inserted_count_); |
80 EXPECT_EQ(0u, model_->size()); | 81 EXPECT_EQ(0u, model_->toolbar_items().size()); |
81 ASSERT_EQ(NULL, ExtensionAt(0)); | 82 ASSERT_EQ(NULL, ExtensionAt(0)); |
82 | 83 |
83 // Load an extension with a browser action. | 84 // Load an extension with a browser action. |
84 ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII("api_test") | 85 ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII("api_test") |
85 .AppendASCII("browser_action") | 86 .AppendASCII("browser_action") |
86 .AppendASCII("basics"))); | 87 .AppendASCII("basics"))); |
87 | 88 |
88 // We should now find our extension in the model. | 89 // We should now find our extension in the model. |
89 EXPECT_EQ(1, inserted_count_); | 90 EXPECT_EQ(1, inserted_count_); |
90 EXPECT_EQ(1u, model_->size()); | 91 EXPECT_EQ(1u, model_->toolbar_items().size()); |
91 const Extension* extension = ExtensionAt(0); | 92 const Extension* extension = ExtensionAt(0); |
92 ASSERT_TRUE(NULL != extension); | 93 ASSERT_TRUE(NULL != extension); |
93 EXPECT_STREQ("A browser action with no icon that makes the page red", | 94 EXPECT_STREQ("A browser action with no icon that makes the page red", |
94 extension->name().c_str()); | 95 extension->name().c_str()); |
95 | 96 |
96 // Should be a no-op, but still fires the events. | 97 // Should be a no-op, but still fires the events. |
97 model_->MoveBrowserAction(extension, 0); | 98 model_->MoveBrowserAction(extension, 0); |
98 EXPECT_EQ(1, moved_count_); | 99 EXPECT_EQ(1, moved_count_); |
99 EXPECT_EQ(1u, model_->size()); | 100 EXPECT_EQ(1u, model_->toolbar_items().size()); |
100 const Extension* extension2 = ExtensionAt(0); | 101 const Extension* extension2 = ExtensionAt(0); |
101 EXPECT_EQ(extension, extension2); | 102 EXPECT_EQ(extension, extension2); |
102 | 103 |
103 UnloadExtension(extension->id()); | 104 UnloadExtension(extension->id()); |
104 EXPECT_EQ(1, removed_count_); | 105 EXPECT_EQ(1, removed_count_); |
105 EXPECT_EQ(0u, model_->size()); | 106 EXPECT_EQ(0u, model_->toolbar_items().size()); |
106 EXPECT_EQ(NULL, ExtensionAt(0)); | 107 EXPECT_EQ(NULL, ExtensionAt(0)); |
107 } | 108 } |
108 | 109 |
109 IN_PROC_BROWSER_TEST_F(ExtensionToolbarModelTest, ReorderAndReinsert) { | 110 IN_PROC_BROWSER_TEST_F(ExtensionToolbarModelTest, ReorderAndReinsert) { |
110 CommandLine::ForCurrentProcess()->AppendSwitch( | 111 CommandLine::ForCurrentProcess()->AppendSwitch( |
111 switches::kEnableExperimentalExtensionApis); | 112 switches::kEnableExperimentalExtensionApis); |
112 | 113 |
113 // Load an extension with a browser action. | 114 // Load an extension with a browser action. |
114 FilePath extension_a_path(test_data_dir_.AppendASCII("api_test") | 115 FilePath extension_a_path(test_data_dir_.AppendASCII("api_test") |
115 .AppendASCII("browser_action") | 116 .AppendASCII("browser_action") |
116 .AppendASCII("basics")); | 117 .AppendASCII("basics")); |
117 ASSERT_TRUE(LoadExtension(extension_a_path)); | 118 ASSERT_TRUE(LoadExtension(extension_a_path)); |
118 | 119 |
119 // First extension loaded. | 120 // First extension loaded. |
120 EXPECT_EQ(1, inserted_count_); | 121 EXPECT_EQ(1, inserted_count_); |
121 EXPECT_EQ(1u, model_->size()); | 122 EXPECT_EQ(1u, model_->toolbar_items().size()); |
122 const Extension* extensionA = ExtensionAt(0); | 123 const Extension* extensionA = ExtensionAt(0); |
123 ASSERT_TRUE(NULL != extensionA); | 124 ASSERT_TRUE(NULL != extensionA); |
124 EXPECT_STREQ("A browser action with no icon that makes the page red", | 125 EXPECT_STREQ("A browser action with no icon that makes the page red", |
125 extensionA->name().c_str()); | 126 extensionA->name().c_str()); |
126 | 127 |
127 // Load another extension with a browser action. | 128 // Load another extension with a browser action. |
128 FilePath extension_b_path(test_data_dir_.AppendASCII("api_test") | 129 FilePath extension_b_path(test_data_dir_.AppendASCII("api_test") |
129 .AppendASCII("browser_action") | 130 .AppendASCII("browser_action") |
130 .AppendASCII("popup")); | 131 .AppendASCII("popup")); |
131 ASSERT_TRUE(LoadExtension(extension_b_path)); | 132 ASSERT_TRUE(LoadExtension(extension_b_path)); |
132 | 133 |
133 // Second extension loaded. | 134 // Second extension loaded. |
134 EXPECT_EQ(2, inserted_count_); | 135 EXPECT_EQ(2, inserted_count_); |
135 EXPECT_EQ(2u, model_->size()); | 136 EXPECT_EQ(2u, model_->toolbar_items().size()); |
136 const Extension* extensionB = ExtensionAt(1); | 137 const Extension* extensionB = ExtensionAt(1); |
137 ASSERT_TRUE(NULL != extensionB); | 138 ASSERT_TRUE(NULL != extensionB); |
138 EXPECT_STREQ("Popup tester", extensionB->name().c_str()); | 139 EXPECT_STREQ("Popup tester", extensionB->name().c_str()); |
139 | 140 |
140 // Load yet another extension with a browser action. | 141 // Load yet another extension with a browser action. |
141 FilePath extension_c_path(test_data_dir_.AppendASCII("api_test") | 142 FilePath extension_c_path(test_data_dir_.AppendASCII("api_test") |
142 .AppendASCII("browser_action") | 143 .AppendASCII("browser_action") |
143 .AppendASCII("remove_popup")); | 144 .AppendASCII("remove_popup")); |
144 ASSERT_TRUE(LoadExtension(extension_c_path)); | 145 ASSERT_TRUE(LoadExtension(extension_c_path)); |
145 | 146 |
146 // Third extension loaded. | 147 // Third extension loaded. |
147 EXPECT_EQ(3, inserted_count_); | 148 EXPECT_EQ(3, inserted_count_); |
148 EXPECT_EQ(3u, model_->size()); | 149 EXPECT_EQ(3u, model_->toolbar_items().size()); |
149 const Extension* extensionC = ExtensionAt(2); | 150 const Extension* extensionC = ExtensionAt(2); |
150 ASSERT_TRUE(NULL != extensionC); | 151 ASSERT_TRUE(NULL != extensionC); |
151 EXPECT_STREQ("A page action which removes a popup.", | 152 EXPECT_STREQ("A page action which removes a popup.", |
152 extensionC->name().c_str()); | 153 extensionC->name().c_str()); |
153 | 154 |
154 // Order is now A, B, C. Let's put C first. | 155 // Order is now A, B, C. Let's put C first. |
155 model_->MoveBrowserAction(extensionC, 0); | 156 model_->MoveBrowserAction(extensionC, 0); |
156 EXPECT_EQ(1, moved_count_); | 157 EXPECT_EQ(1, moved_count_); |
157 EXPECT_EQ(3u, model_->size()); | 158 EXPECT_EQ(3u, model_->toolbar_items().size()); |
158 EXPECT_EQ(extensionC, ExtensionAt(0)); | 159 EXPECT_EQ(extensionC, ExtensionAt(0)); |
159 EXPECT_EQ(extensionA, ExtensionAt(1)); | 160 EXPECT_EQ(extensionA, ExtensionAt(1)); |
160 EXPECT_EQ(extensionB, ExtensionAt(2)); | 161 EXPECT_EQ(extensionB, ExtensionAt(2)); |
161 EXPECT_EQ(NULL, ExtensionAt(3)); | 162 EXPECT_EQ(NULL, ExtensionAt(3)); |
162 | 163 |
163 // Order is now C, A, B. Let's put A last. | 164 // Order is now C, A, B. Let's put A last. |
164 model_->MoveBrowserAction(extensionA, 2); | 165 model_->MoveBrowserAction(extensionA, 2); |
165 EXPECT_EQ(2, moved_count_); | 166 EXPECT_EQ(2, moved_count_); |
166 EXPECT_EQ(3u, model_->size()); | 167 EXPECT_EQ(3u, model_->toolbar_items().size()); |
167 EXPECT_EQ(extensionC, ExtensionAt(0)); | 168 EXPECT_EQ(extensionC, ExtensionAt(0)); |
168 EXPECT_EQ(extensionB, ExtensionAt(1)); | 169 EXPECT_EQ(extensionB, ExtensionAt(1)); |
169 EXPECT_EQ(extensionA, ExtensionAt(2)); | 170 EXPECT_EQ(extensionA, ExtensionAt(2)); |
170 EXPECT_EQ(NULL, ExtensionAt(3)); | 171 EXPECT_EQ(NULL, ExtensionAt(3)); |
171 | 172 |
172 // Order is now C, B, A. Let's remove B. | 173 // Order is now C, B, A. Let's remove B. |
173 std::string idB = extensionB->id(); | 174 std::string idB = extensionB->id(); |
174 UnloadExtension(idB); | 175 UnloadExtension(idB); |
175 EXPECT_EQ(1, removed_count_); | 176 EXPECT_EQ(1, removed_count_); |
176 EXPECT_EQ(2u, model_->size()); | 177 EXPECT_EQ(2u, model_->toolbar_items().size()); |
177 EXPECT_EQ(extensionC, ExtensionAt(0)); | 178 EXPECT_EQ(extensionC, ExtensionAt(0)); |
178 EXPECT_EQ(extensionA, ExtensionAt(1)); | 179 EXPECT_EQ(extensionA, ExtensionAt(1)); |
179 EXPECT_EQ(NULL, ExtensionAt(2)); | 180 EXPECT_EQ(NULL, ExtensionAt(2)); |
180 | 181 |
181 // Load extension B again. | 182 // Load extension B again. |
182 ASSERT_TRUE(LoadExtension(extension_b_path)); | 183 ASSERT_TRUE(LoadExtension(extension_b_path)); |
183 | 184 |
184 // Extension B loaded again. | 185 // Extension B loaded again. |
185 EXPECT_EQ(4, inserted_count_); | 186 EXPECT_EQ(4, inserted_count_); |
186 EXPECT_EQ(3u, model_->size()); | 187 EXPECT_EQ(3u, model_->toolbar_items().size()); |
187 // Make sure it gets its old spot in the list. We should get the same | 188 // Make sure it gets its old spot in the list. We should get the same |
188 // extension again, otherwise the order has changed. | 189 // extension again, otherwise the order has changed. |
189 ASSERT_STREQ(idB.c_str(), ExtensionAt(1)->id().c_str()); | 190 ASSERT_STREQ(idB.c_str(), ExtensionAt(1)->id().c_str()); |
190 | 191 |
191 // Unload B again. | 192 // Unload B again. |
192 UnloadExtension(idB); | 193 UnloadExtension(idB); |
193 EXPECT_EQ(2, removed_count_); | 194 EXPECT_EQ(2, removed_count_); |
194 EXPECT_EQ(2u, model_->size()); | 195 EXPECT_EQ(2u, model_->toolbar_items().size()); |
195 EXPECT_EQ(extensionC, ExtensionAt(0)); | 196 EXPECT_EQ(extensionC, ExtensionAt(0)); |
196 EXPECT_EQ(extensionA, ExtensionAt(1)); | 197 EXPECT_EQ(extensionA, ExtensionAt(1)); |
197 EXPECT_EQ(NULL, ExtensionAt(2)); | 198 EXPECT_EQ(NULL, ExtensionAt(2)); |
198 | 199 |
199 // Order is now C, A. Flip it. | 200 // Order is now C, A. Flip it. |
200 model_->MoveBrowserAction(extensionA, 0); | 201 model_->MoveBrowserAction(extensionA, 0); |
201 EXPECT_EQ(3, moved_count_); | 202 EXPECT_EQ(3, moved_count_); |
202 EXPECT_EQ(2u, model_->size()); | 203 EXPECT_EQ(2u, model_->toolbar_items().size()); |
203 EXPECT_EQ(extensionA, ExtensionAt(0)); | 204 EXPECT_EQ(extensionA, ExtensionAt(0)); |
204 EXPECT_EQ(extensionC, ExtensionAt(1)); | 205 EXPECT_EQ(extensionC, ExtensionAt(1)); |
205 EXPECT_EQ(NULL, ExtensionAt(2)); | 206 EXPECT_EQ(NULL, ExtensionAt(2)); |
206 | 207 |
207 // Move A to the location it already occupies. | 208 // Move A to the location it already occupies. |
208 model_->MoveBrowserAction(extensionA, 0); | 209 model_->MoveBrowserAction(extensionA, 0); |
209 EXPECT_EQ(4, moved_count_); | 210 EXPECT_EQ(4, moved_count_); |
210 EXPECT_EQ(2u, model_->size()); | 211 EXPECT_EQ(2u, model_->toolbar_items().size()); |
211 EXPECT_EQ(extensionA, ExtensionAt(0)); | 212 EXPECT_EQ(extensionA, ExtensionAt(0)); |
212 EXPECT_EQ(extensionC, ExtensionAt(1)); | 213 EXPECT_EQ(extensionC, ExtensionAt(1)); |
213 EXPECT_EQ(NULL, ExtensionAt(2)); | 214 EXPECT_EQ(NULL, ExtensionAt(2)); |
214 | 215 |
215 // Order is now A, C. Remove C. | 216 // Order is now A, C. Remove C. |
216 std::string idC = extensionC->id(); | 217 std::string idC = extensionC->id(); |
217 UnloadExtension(idC); | 218 UnloadExtension(idC); |
218 EXPECT_EQ(3, removed_count_); | 219 EXPECT_EQ(3, removed_count_); |
219 EXPECT_EQ(1u, model_->size()); | 220 EXPECT_EQ(1u, model_->toolbar_items().size()); |
220 EXPECT_EQ(extensionA, ExtensionAt(0)); | 221 EXPECT_EQ(extensionA, ExtensionAt(0)); |
221 EXPECT_EQ(NULL, ExtensionAt(1)); | 222 EXPECT_EQ(NULL, ExtensionAt(1)); |
222 | 223 |
223 // Load extension C again. | 224 // Load extension C again. |
224 ASSERT_TRUE(LoadExtension(extension_c_path)); | 225 ASSERT_TRUE(LoadExtension(extension_c_path)); |
225 | 226 |
226 // Extension C loaded again. | 227 // Extension C loaded again. |
227 EXPECT_EQ(5, inserted_count_); | 228 EXPECT_EQ(5, inserted_count_); |
228 EXPECT_EQ(2u, model_->size()); | 229 EXPECT_EQ(2u, model_->toolbar_items().size()); |
229 // Make sure it gets its old spot in the list (at the very end). | 230 // Make sure it gets its old spot in the list (at the very end). |
230 ASSERT_STREQ(idC.c_str(), ExtensionAt(1)->id().c_str()); | 231 ASSERT_STREQ(idC.c_str(), ExtensionAt(1)->id().c_str()); |
231 } | 232 } |
OLD | NEW |