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

Unified Diff: chrome/browser/ui/views/bookmarks/bookmark_menu_delegate_unittest.cc

Issue 1005873012: Makes bookmark menu lazily create menus and removes limits (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: review feedback Created 5 years, 9 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/views/bookmarks/bookmark_menu_delegate_unittest.cc
diff --git a/chrome/browser/ui/views/bookmarks/bookmark_menu_delegate_unittest.cc b/chrome/browser/ui/views/bookmarks/bookmark_menu_delegate_unittest.cc
index 571f387ffd9be7e3bbd82cb2aaf32956c3a4b4d3..d7dd524b4ce1c59bee74f437a6c63c7ddada6d35 100644
--- a/chrome/browser/ui/views/bookmarks/bookmark_menu_delegate_unittest.cc
+++ b/chrome/browser/ui/views/bookmarks/bookmark_menu_delegate_unittest.cc
@@ -46,30 +46,52 @@ class BookmarkMenuDelegateTest : public BrowserWithTestWindowTest {
}
protected:
- void NewDelegate(int min_menu_id, int max_menu_id) {
+ void NewDelegate() {
// Destroy current menu if available, see comments in TearDown().
if (bookmark_menu_delegate_.get())
views::MenuRunner menu_runner(bookmark_menu_delegate_->menu(), 0);
bookmark_menu_delegate_.reset(
- new BookmarkMenuDelegate(browser(), NULL, NULL,
- min_menu_id, max_menu_id));
+ new BookmarkMenuDelegate(browser(), nullptr, nullptr));
}
- void NewAndInitDelegateForPermanent(int min_menu_id,
- int max_menu_id) {
+ void NewAndInitDelegateForPermanent() {
const BookmarkNode* node = model_->bookmark_bar_node();
- NewDelegate(min_menu_id, max_menu_id);
+ NewDelegate();
bookmark_menu_delegate_->Init(&test_delegate_, NULL, node, 0,
BookmarkMenuDelegate::SHOW_PERMANENT_FOLDERS,
BOOKMARK_LAUNCH_LOCATION_NONE);
}
+ const BookmarkNode* GetNodeForMenuItem(views::MenuItemView* menu) {
+ const auto& node_map = bookmark_menu_delegate_->menu_id_to_node_map_;
+ auto iter = node_map.find(menu->GetCommand());
+ return (iter == node_map.end()) ? nullptr : iter->second;
+ }
+
+ int next_menu_id() { return bookmark_menu_delegate_->next_menu_id_; }
+
+ // Forces all the menus to load by way of invoking WillShowMenu() on all menu
+ // items of tyep SUBMENU.
+ void LoadAllMenus() { LoadAllMenus(bookmark_menu_delegate_->menu()); }
+
BookmarkModel* model_;
scoped_ptr<BookmarkMenuDelegate> bookmark_menu_delegate_;
private:
+ void LoadAllMenus(views::MenuItemView* menu) {
+ EXPECT_EQ(views::MenuItemView::SUBMENU, menu->GetType());
+
+ for (int i = 0; i < menu->GetSubmenu()->GetMenuItemCount(); ++i) {
+ views::MenuItemView* child = menu->GetSubmenu()->GetMenuItemAt(i);
+ if (child->GetType() == views::MenuItemView::SUBMENU) {
+ bookmark_menu_delegate_->WillShowMenu(child);
+ LoadAllMenus(child);
+ }
+ }
+ }
+
std::string base_path() const { return "file:///c:/tmp/"; }
// Creates the following structure:
@@ -107,124 +129,60 @@ class BookmarkMenuDelegateTest : public BrowserWithTestWindowTest {
DISALLOW_COPY_AND_ASSIGN(BookmarkMenuDelegateTest);
};
+TEST_F(BookmarkMenuDelegateTest, VerifyLazyLoad) {
+ NewAndInitDelegateForPermanent();
+ views::MenuItemView* root_item = bookmark_menu_delegate_->menu();
+ ASSERT_TRUE(root_item->HasSubmenu());
+ EXPECT_EQ(4, root_item->GetSubmenu()->GetMenuItemCount());
+ EXPECT_EQ(5, root_item->GetSubmenu()->child_count()); // Includes separator.
+ views::MenuItemView* f1_item = root_item->GetSubmenu()->GetMenuItemAt(1);
+ ASSERT_TRUE(f1_item->HasSubmenu());
+ // f1 hasn't been loaded yet.
+ EXPECT_EQ(0, f1_item->GetSubmenu()->GetMenuItemCount());
+ // Will show triggers a load.
+ int next_id_before_load = next_menu_id();
+ bookmark_menu_delegate_->WillShowMenu(f1_item);
+ // f1 should have loaded its children.
+ EXPECT_EQ(next_id_before_load + 2, next_menu_id());
+ ASSERT_EQ(2, f1_item->GetSubmenu()->GetMenuItemCount());
+ const BookmarkNode* f1_node = model_->bookmark_bar_node()->GetChild(1);
+ EXPECT_EQ(f1_node->GetChild(0),
+ GetNodeForMenuItem(f1_item->GetSubmenu()->GetMenuItemAt(0)));
+ EXPECT_EQ(f1_node->GetChild(1),
+ GetNodeForMenuItem(f1_item->GetSubmenu()->GetMenuItemAt(1)));
+
+ // F11 shouldn't have loaded yet.
+ views::MenuItemView* f11_item = f1_item->GetSubmenu()->GetMenuItemAt(1);
+ ASSERT_TRUE(f11_item->HasSubmenu());
+ EXPECT_EQ(0, f11_item->GetSubmenu()->GetMenuItemCount());
+
+ next_id_before_load = next_menu_id();
+ bookmark_menu_delegate_->WillShowMenu(f11_item);
+ // Invoke WillShowMenu() twice to make sure the second call doesn't cause
+ // problems.
+ bookmark_menu_delegate_->WillShowMenu(f11_item);
+ // F11 should have loaded its single child (f11a).
+ EXPECT_EQ(next_id_before_load + 1, next_menu_id());
+
+ ASSERT_EQ(1, f11_item->GetSubmenu()->GetMenuItemCount());
+ const BookmarkNode* f11_node = f1_node->GetChild(1);
+ EXPECT_EQ(f11_node->GetChild(0),
+ GetNodeForMenuItem(f11_item->GetSubmenu()->GetMenuItemAt(0)));
+}
+
// Verifies WillRemoveBookmarks() doesn't attempt to access MenuItemViews that
// have since been deleted.
TEST_F(BookmarkMenuDelegateTest, RemoveBookmarks) {
views::MenuDelegate test_delegate;
const BookmarkNode* node = model_->bookmark_bar_node()->GetChild(1);
- NewDelegate(0, kint32max);
+ NewDelegate();
bookmark_menu_delegate_->Init(&test_delegate, NULL, node, 0,
BookmarkMenuDelegate::HIDE_PERMANENT_FOLDERS,
BOOKMARK_LAUNCH_LOCATION_NONE);
+ LoadAllMenus();
std::vector<const BookmarkNode*> nodes_to_remove;
nodes_to_remove.push_back(node->GetChild(1));
bookmark_menu_delegate_->WillRemoveBookmarks(nodes_to_remove);
nodes_to_remove.clear();
bookmark_menu_delegate_->DidRemoveBookmarks();
}
-
-// Verifies menu ID's of items in menu fall within the specified range.
-TEST_F(BookmarkMenuDelegateTest, MenuIdRange) {
- // Start with maximum menu Id of 10 - the number of items that AddTestData()
- // populated. Everything should be created.
- NewAndInitDelegateForPermanent(0, 10);
- views::MenuItemView* root_item = bookmark_menu_delegate_->menu();
- ASSERT_TRUE(root_item->HasSubmenu());
- EXPECT_EQ(4, root_item->GetSubmenu()->GetMenuItemCount());
- EXPECT_EQ(5, root_item->GetSubmenu()->child_count()); // Includes separator.
- views::MenuItemView* F1_item = root_item->GetSubmenu()->GetMenuItemAt(1);
- ASSERT_TRUE(F1_item->HasSubmenu());
- EXPECT_EQ(2, F1_item->GetSubmenu()->GetMenuItemCount());
- views::MenuItemView* F11_item = F1_item->GetSubmenu()->GetMenuItemAt(1);
- ASSERT_TRUE(F11_item->HasSubmenu());
- EXPECT_EQ(1, F11_item->GetSubmenu()->GetMenuItemCount());
- views::MenuItemView* other_item = root_item->GetSubmenu()->GetMenuItemAt(3);
- ASSERT_TRUE(other_item->HasSubmenu());
- EXPECT_EQ(2, other_item->GetSubmenu()->GetMenuItemCount());
- views::MenuItemView* OF1_item = other_item->GetSubmenu()->GetMenuItemAt(1);
- ASSERT_TRUE(OF1_item->HasSubmenu());
- EXPECT_EQ(1, OF1_item->GetSubmenu()->GetMenuItemCount());
-
- // Reduce maximum 9. "of1a" item should not be created.
- NewAndInitDelegateForPermanent(0, 9);
- root_item = bookmark_menu_delegate_->menu();
- EXPECT_EQ(4, root_item->GetSubmenu()->GetMenuItemCount());
- EXPECT_EQ(5, root_item->GetSubmenu()->child_count()); // Includes separator.
- other_item = root_item->GetSubmenu()->GetMenuItemAt(3);
- OF1_item = other_item->GetSubmenu()->GetMenuItemAt(1);
- EXPECT_EQ(0, OF1_item->GetSubmenu()->GetMenuItemCount());
-
- // Reduce maximum 8. "OF1" submenu should not be created.
- NewAndInitDelegateForPermanent(0, 8);
- root_item = bookmark_menu_delegate_->menu();
- EXPECT_EQ(4, root_item->GetSubmenu()->GetMenuItemCount());
- EXPECT_EQ(5, root_item->GetSubmenu()->child_count()); // Includes separator.
- other_item = root_item->GetSubmenu()->GetMenuItemAt(3);
- EXPECT_EQ(1, other_item->GetSubmenu()->GetMenuItemCount());
-
- // Reduce maximum 7. "Other" submenu should be empty.
- NewAndInitDelegateForPermanent(0, 7);
- root_item = bookmark_menu_delegate_->menu();
- EXPECT_EQ(4, root_item->GetSubmenu()->GetMenuItemCount());
- EXPECT_EQ(5, root_item->GetSubmenu()->child_count()); // Includes separator.
- other_item = root_item->GetSubmenu()->GetMenuItemAt(3);
- EXPECT_EQ(0, other_item->GetSubmenu()->GetMenuItemCount());
-
- // Reduce maximum to 6. "Other" submenu should not be created, and no
- // separator.
- NewAndInitDelegateForPermanent(0, 6);
- root_item = bookmark_menu_delegate_->menu();
- EXPECT_EQ(3, root_item->GetSubmenu()->GetMenuItemCount());
- EXPECT_EQ(3, root_item->GetSubmenu()->child_count()); // No separator.
-
- // Reduce maximum 5. "F2" and "Other" submenus shouldn't be created.
- NewAndInitDelegateForPermanent(0, 5);
- root_item = bookmark_menu_delegate_->menu();
- EXPECT_EQ(2, root_item->GetSubmenu()->GetMenuItemCount());
- EXPECT_EQ(2, root_item->GetSubmenu()->child_count()); // No separator.
- F1_item = root_item->GetSubmenu()->GetMenuItemAt(1);
- F11_item = F1_item->GetSubmenu()->GetMenuItemAt(1);
- EXPECT_EQ(1, F11_item->GetSubmenu()->GetMenuItemCount());
-
- // Reduce maximum to 4. "f11a" item and "F2" and "Other" submenus should
- // not be created.
- NewAndInitDelegateForPermanent(0, 4);
- root_item = bookmark_menu_delegate_->menu();
- EXPECT_EQ(2, root_item->GetSubmenu()->GetMenuItemCount());
- EXPECT_EQ(2, root_item->GetSubmenu()->child_count()); // No separator.
- F1_item = root_item->GetSubmenu()->GetMenuItemAt(1);
- F11_item = F1_item->GetSubmenu()->GetMenuItemAt(1);
- EXPECT_EQ(0, F11_item->GetSubmenu()->GetMenuItemCount());
-
- // Reduce maximum to 3. "F11", "F2" and "Other" submenus should not be
- // created.
- NewAndInitDelegateForPermanent(0, 3);
- root_item = bookmark_menu_delegate_->menu();
- EXPECT_EQ(2, root_item->GetSubmenu()->GetMenuItemCount());
- EXPECT_EQ(2, root_item->GetSubmenu()->child_count()); // No separator.
- F1_item = root_item->GetSubmenu()->GetMenuItemAt(1);
- EXPECT_EQ(views::MenuItemView::SUBMENU, F1_item->GetType());
- EXPECT_EQ(1, F1_item->GetSubmenu()->GetMenuItemCount());
-
- // Reduce maximum 2. Only "a" item and empty "F1" submenu should be created.
- NewAndInitDelegateForPermanent(0, 2);
- root_item = bookmark_menu_delegate_->menu();
- EXPECT_EQ(2, root_item->GetSubmenu()->GetMenuItemCount());
- EXPECT_EQ(2, root_item->GetSubmenu()->child_count()); // No separator.
- F1_item = root_item->GetSubmenu()->GetMenuItemAt(1);
- EXPECT_EQ(views::MenuItemView::SUBMENU, F1_item->GetType());
- EXPECT_EQ(0, F1_item->GetSubmenu()->GetMenuItemCount());
-
- // Reduce maximum to 1. Only "a" item should be created.
- NewAndInitDelegateForPermanent(0, 1);
- root_item = bookmark_menu_delegate_->menu();
- EXPECT_EQ(1, root_item->GetSubmenu()->GetMenuItemCount());
- EXPECT_EQ(1, root_item->GetSubmenu()->child_count()); // No separator.
-
- // Verify correct handling of integer overflow with range, set kint32max as
- // maximum and 1 less as minimum. Only "a" item should be created.
- NewAndInitDelegateForPermanent(kint32max - 1, kint32max);
- root_item = bookmark_menu_delegate_->menu();
- EXPECT_EQ(1, root_item->GetSubmenu()->GetMenuItemCount());
- EXPECT_EQ(1, root_item->GetSubmenu()->child_count()); // No separator.
-}
« no previous file with comments | « chrome/browser/ui/views/bookmarks/bookmark_menu_delegate.cc ('k') | chrome/browser/ui/views/toolbar/wrench_menu.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698