| 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 #import <AppKit/AppKit.h> | 5 #import <AppKit/AppKit.h> |
| 6 | 6 |
| 7 #include "base/strings/string16.h" | 7 #include "base/strings/string16.h" |
| 8 #include "base/strings/string_util.h" | 8 #include "base/strings/string_util.h" |
| 9 #include "base/strings/utf_string_conversions.h" | 9 #include "base/strings/utf_string_conversions.h" |
| 10 #include "chrome/app/chrome_command_ids.h" | 10 #include "chrome/app/chrome_command_ids.h" |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 59 | 59 |
| 60 void InvalidateMenu() { bridge_->InvalidateMenu(); } | 60 void InvalidateMenu() { bridge_->InvalidateMenu(); } |
| 61 bool menu_is_valid() { return bridge_->menuIsValid_; } | 61 bool menu_is_valid() { return bridge_->menuIsValid_; } |
| 62 | 62 |
| 63 void AddNodeToMenu(BookmarkMenuBridge* bridge, | 63 void AddNodeToMenu(BookmarkMenuBridge* bridge, |
| 64 const BookmarkNode* root, | 64 const BookmarkNode* root, |
| 65 NSMenu* menu) { | 65 NSMenu* menu) { |
| 66 bridge->AddNodeToMenu(root, menu, true); | 66 bridge->AddNodeToMenu(root, menu, true); |
| 67 } | 67 } |
| 68 | 68 |
| 69 void AddItemToMenu(BookmarkMenuBridge* bridge, | |
| 70 int command_id, | |
| 71 int message_id, | |
| 72 const BookmarkNode* node, | |
| 73 NSMenu* menu, | |
| 74 bool enable) { | |
| 75 bridge->AddItemToMenu(command_id, message_id, node, menu, enable); | |
| 76 } | |
| 77 | |
| 78 NSMenuItem* MenuItemForNode(BookmarkMenuBridge* bridge, | 69 NSMenuItem* MenuItemForNode(BookmarkMenuBridge* bridge, |
| 79 const BookmarkNode* node) { | 70 const BookmarkNode* node) { |
| 80 return bridge->MenuItemForNode(node); | 71 return bridge->MenuItemForNode(node); |
| 81 } | 72 } |
| 82 | 73 |
| 83 NSMenuItem* AddTestMenuItem(NSMenu *menu, NSString *title, SEL selector) { | 74 NSMenuItem* AddTestMenuItem(NSMenu *menu, NSString *title, SEL selector) { |
| 84 NSMenuItem* item = [[[NSMenuItem alloc] initWithTitle:title | 75 NSMenuItem* item = [[[NSMenuItem alloc] initWithTitle:title |
| 85 action:nullptr | 76 action:nullptr |
| 86 keyEquivalent:@""] autorelease]; | 77 keyEquivalent:@""] autorelease]; |
| 87 if (selector) | 78 if (selector) |
| 88 [item setAction:selector]; | 79 [item setAction:selector]; |
| 89 [menu addItem:item]; | 80 [menu addItem:item]; |
| 90 return item; | 81 return item; |
| 91 } | 82 } |
| 92 std::unique_ptr<TestBookmarkMenuBridge> bridge_; | 83 std::unique_ptr<TestBookmarkMenuBridge> bridge_; |
| 93 }; | 84 }; |
| 94 | 85 |
| 95 TEST_F(BookmarkMenuBridgeTest, TestBookmarkMenuAutoSeparator) { | 86 TEST_F(BookmarkMenuBridgeTest, TestBookmarkMenuAutoSeparator) { |
| 96 BookmarkModel* model = bridge_->GetBookmarkModel(); | 87 BookmarkModel* model = bridge_->GetBookmarkModel(); |
| 97 bridge_->BookmarkModelLoaded(model, false); | 88 bridge_->BookmarkModelLoaded(model, false); |
| 98 NSMenu* menu = bridge_->menu_; | 89 NSMenu* menu = bridge_->menu_; |
| 99 bridge_->UpdateMenu(menu); | 90 bridge_->UpdateMenu(menu); |
| 100 // The bare menu after loading used to have a separator and an | 91 // The bare menu after loading used to have a separator and an |
| 101 // "Other Bookmarks" submenu, but we no longer show those items if the | 92 // "Other Bookmarks" submenu, but we no longer show those items if the |
| 102 // "Other Bookmarks" submenu would be empty. | 93 // "Other Bookmarks" submenu would be empty. |
| 103 EXPECT_EQ(0, [menu numberOfItems]); | 94 EXPECT_EQ(0, [menu numberOfItems]); |
| 104 // Add a bookmark and reload and there should be 8 items: the previous | 95 // Add a bookmark and reload and there should be 2 items: |
| 105 // menu contents plus two new separator, the new bookmark and three | 96 // a new separator and the new bookmark. |
| 106 // versions of 'Open All Bookmarks' menu items. | |
| 107 const BookmarkNode* parent = model->bookmark_bar_node(); | 97 const BookmarkNode* parent = model->bookmark_bar_node(); |
| 108 const char* url = "http://www.zim-bop-a-dee.com/"; | 98 const char* url = "http://www.zim-bop-a-dee.com/"; |
| 109 model->AddURL(parent, 0, ASCIIToUTF16("Bookmark"), GURL(url)); | 99 model->AddURL(parent, 0, ASCIIToUTF16("Bookmark"), GURL(url)); |
| 110 bridge_->UpdateMenu(menu); | 100 bridge_->UpdateMenu(menu); |
| 111 EXPECT_EQ(6, [menu numberOfItems]); | 101 EXPECT_EQ(2, [menu numberOfItems]); |
| 112 // Remove the new bookmark and reload and we should have 2 items again | 102 // Remove the new bookmark and reload and we should have 0 items again |
| 113 // because the separator should have been removed as well. | 103 // because the separator should have been removed as well. |
| 114 model->Remove(parent->GetChild(0)); | 104 model->Remove(parent->GetChild(0)); |
| 115 bridge_->UpdateMenu(menu); | 105 bridge_->UpdateMenu(menu); |
| 116 EXPECT_EQ(0, [menu numberOfItems]); | 106 EXPECT_EQ(0, [menu numberOfItems]); |
| 117 } | 107 } |
| 118 | 108 |
| 119 // Test that ClearBookmarkMenu() removes all bookmark menus. | 109 // Test that ClearBookmarkMenu() removes all bookmark menus. |
| 120 TEST_F(BookmarkMenuBridgeTest, TestClearBookmarkMenu) { | 110 TEST_F(BookmarkMenuBridgeTest, TestClearBookmarkMenu) { |
| 121 NSMenu* menu = bridge_->menu_; | 111 NSMenu* menu = bridge_->menu_; |
| 122 | 112 |
| (...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 234 // e.g. http://foo becomes http://foo/) | 224 // e.g. http://foo becomes http://foo/) |
| 235 EXPECT_GE([[short_item toolTip] length], strlen(short_url) - 3); | 225 EXPECT_GE([[short_item toolTip] length], strlen(short_url) - 3); |
| 236 EXPECT_GE([[long_item toolTip] length], strlen(long_url) - 3); | 226 EXPECT_GE([[long_item toolTip] length], strlen(long_url) - 3); |
| 237 | 227 |
| 238 // Make sure the favicon is non-nil (should be either the default site | 228 // Make sure the favicon is non-nil (should be either the default site |
| 239 // icon or a favicon, if present). | 229 // icon or a favicon, if present). |
| 240 EXPECT_TRUE([short_item image]); | 230 EXPECT_TRUE([short_item image]); |
| 241 EXPECT_TRUE([long_item image]); | 231 EXPECT_TRUE([long_item image]); |
| 242 } | 232 } |
| 243 | 233 |
| 244 // Test that AddItemToMenu() properly added versions of | |
| 245 // 'Open All Bookmarks' as menu items. | |
| 246 TEST_F(BookmarkMenuBridgeTest, TestAddItemToMenu) { | |
| 247 NSString* title; | |
| 248 NSMenuItem* item; | |
| 249 NSMenu* menu = bridge_->menu_; | |
| 250 | |
| 251 BookmarkModel* model = bridge_->GetBookmarkModel(); | |
| 252 const BookmarkNode* root = model->bookmark_bar_node(); | |
| 253 EXPECT_TRUE(model && root); | |
| 254 EXPECT_EQ(0, [menu numberOfItems]); | |
| 255 | |
| 256 AddItemToMenu(bridge_.get(), IDC_BOOKMARK_BAR_OPEN_ALL, | |
| 257 IDS_BOOKMARK_BAR_OPEN_ALL_COUNT, root, menu, true); | |
| 258 AddItemToMenu(bridge_.get(), IDC_BOOKMARK_BAR_OPEN_ALL_NEW_WINDOW, | |
| 259 IDS_BOOKMARK_BAR_OPEN_ALL_COUNT_NEW_WINDOW, root, menu, true); | |
| 260 AddItemToMenu(bridge_.get(), IDC_BOOKMARK_BAR_OPEN_ALL_INCOGNITO, | |
| 261 IDS_BOOKMARK_BAR_OPEN_INCOGNITO, root, menu, true); | |
| 262 EXPECT_EQ(3, [menu numberOfItems]); | |
| 263 | |
| 264 title = l10n_util::GetPluralNSStringF(IDS_BOOKMARK_BAR_OPEN_ALL_COUNT, 0); | |
| 265 item = [menu itemWithTitle:title]; | |
| 266 EXPECT_TRUE(item); | |
| 267 EXPECT_EQ(@selector(openAllBookmarks:), [item action]); | |
| 268 EXPECT_TRUE([item isEnabled]); | |
| 269 | |
| 270 title = l10n_util::GetPluralNSStringF( | |
| 271 IDS_BOOKMARK_BAR_OPEN_ALL_COUNT_NEW_WINDOW, 0); | |
| 272 item = [menu itemWithTitle:title]; | |
| 273 EXPECT_TRUE(item); | |
| 274 EXPECT_EQ(@selector(openAllBookmarksNewWindow:), [item action]); | |
| 275 EXPECT_TRUE([item isEnabled]); | |
| 276 | |
| 277 title = l10n_util::GetPluralNSStringF(IDS_BOOKMARK_BAR_OPEN_INCOGNITO, 0); | |
| 278 item = [menu itemWithTitle:title]; | |
| 279 EXPECT_TRUE(item); | |
| 280 EXPECT_EQ(@selector(openAllBookmarksIncognitoWindow:), [item action]); | |
| 281 EXPECT_TRUE([item isEnabled]); | |
| 282 | |
| 283 ClearBookmarkMenu(bridge_.get(), menu); | |
| 284 EXPECT_EQ(0, [menu numberOfItems]); | |
| 285 | |
| 286 AddItemToMenu(bridge_.get(), IDC_BOOKMARK_BAR_OPEN_ALL, | |
| 287 IDS_BOOKMARK_BAR_OPEN_ALL_COUNT, root, menu, false); | |
| 288 AddItemToMenu(bridge_.get(), IDC_BOOKMARK_BAR_OPEN_ALL_NEW_WINDOW, | |
| 289 IDS_BOOKMARK_BAR_OPEN_ALL_COUNT_NEW_WINDOW, root, menu, false); | |
| 290 AddItemToMenu(bridge_.get(), IDC_BOOKMARK_BAR_OPEN_ALL_INCOGNITO, | |
| 291 IDS_BOOKMARK_BAR_OPEN_INCOGNITO, root, menu, false); | |
| 292 EXPECT_EQ(3, [menu numberOfItems]); | |
| 293 | |
| 294 title = l10n_util::GetPluralNSStringF(IDS_BOOKMARK_BAR_OPEN_ALL_COUNT, 0); | |
| 295 item = [menu itemWithTitle:title]; | |
| 296 EXPECT_TRUE(item); | |
| 297 EXPECT_EQ(nil, [item action]); | |
| 298 EXPECT_FALSE([item isEnabled]); | |
| 299 | |
| 300 title = l10n_util::GetPluralNSStringF( | |
| 301 IDS_BOOKMARK_BAR_OPEN_ALL_COUNT_NEW_WINDOW, 0); | |
| 302 item = [menu itemWithTitle:title]; | |
| 303 EXPECT_TRUE(item); | |
| 304 EXPECT_EQ(nil, [item action]); | |
| 305 EXPECT_FALSE([item isEnabled]); | |
| 306 | |
| 307 title = l10n_util::GetPluralNSStringF(IDS_BOOKMARK_BAR_OPEN_INCOGNITO, 0); | |
| 308 item = [menu itemWithTitle:title]; | |
| 309 EXPECT_TRUE(item); | |
| 310 EXPECT_EQ(nil, [item action]); | |
| 311 EXPECT_FALSE([item isEnabled]); | |
| 312 } | |
| 313 | |
| 314 // Makes sure our internal map of BookmarkNode to NSMenuItem works. | 234 // Makes sure our internal map of BookmarkNode to NSMenuItem works. |
| 315 TEST_F(BookmarkMenuBridgeTest, TestGetMenuItemForNode) { | 235 TEST_F(BookmarkMenuBridgeTest, TestGetMenuItemForNode) { |
| 316 base::string16 empty; | 236 base::string16 empty; |
| 317 NSMenu* menu = bridge_->menu_; | 237 NSMenu* menu = bridge_->menu_; |
| 318 | 238 |
| 319 BookmarkModel* model = bridge_->GetBookmarkModel(); | 239 BookmarkModel* model = bridge_->GetBookmarkModel(); |
| 320 const BookmarkNode* bookmark_bar = model->bookmark_bar_node(); | 240 const BookmarkNode* bookmark_bar = model->bookmark_bar_node(); |
| 321 const BookmarkNode* root = model->AddFolder(bookmark_bar, 0, empty); | 241 const BookmarkNode* root = model->AddFolder(bookmark_bar, 0, empty); |
| 322 EXPECT_TRUE(model && root); | 242 EXPECT_TRUE(model && root); |
| 323 | 243 |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 395 EXPECT_TRUE([item image]); | 315 EXPECT_TRUE([item image]); |
| 396 | 316 |
| 397 model->SetTitle(node, ASCIIToUTF16("New Title")); | 317 model->SetTitle(node, ASCIIToUTF16("New Title")); |
| 398 | 318 |
| 399 item = [menu itemWithTitle:@"Test Item"]; | 319 item = [menu itemWithTitle:@"Test Item"]; |
| 400 EXPECT_FALSE(item); | 320 EXPECT_FALSE(item); |
| 401 item = [menu itemWithTitle:@"New Title"]; | 321 item = [menu itemWithTitle:@"New Title"]; |
| 402 EXPECT_TRUE(item); | 322 EXPECT_TRUE(item); |
| 403 } | 323 } |
| 404 | 324 |
| OLD | NEW |