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