bookmark_context_menu_controller_unittest.cc revision 58537e28ecd584eab876aee8be7156509866d23a
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/bookmarks/bookmark_context_menu_controller.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 1058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "base/message_loop/message_loop.h" 11868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/app/chrome_command_ids.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/bookmarks/bookmark_model.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/bookmarks/bookmark_model_factory.h" 1558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/bookmarks/bookmark_test_helpers.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/bookmarks/bookmark_utils.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/testing_profile.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/page_navigator.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/test/test_browser_thread.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "grit/generated_resources.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/clipboard/clipboard.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::BrowserThread; 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::OpenURLParams; 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::PageNavigator; 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::WebContents; 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// PageNavigator implementation that records the URL. 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TestingPageNavigator : public PageNavigator { 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual WebContents* OpenURL(const OpenURLParams& params) OVERRIDE { 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) urls_.push_back(params.url); 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<GURL> urls_; 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BookmarkContextMenuControllerTest : public testing::Test { 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BookmarkContextMenuControllerTest() 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : ui_thread_(BrowserThread::UI, &message_loop_), 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) file_thread_(BrowserThread::FILE, &message_loop_), 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) model_(NULL) { 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void SetUp() OVERRIDE { 503551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) Reset(false); 513551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 523551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) void Reset(bool incognito) { 533551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) TestingProfile::Builder builder; 543551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) if (incognito) 553551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) builder.SetIncognito(); 563551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) profile_ = builder.Build(); 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_->CreateBookmarkModel(true); 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) model_ = BookmarkModelFactory::GetForProfile(profile_.get()); 6058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) test::WaitForBookmarkModelToLoad(model_); 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddTestData(); 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void TearDown() OVERRIDE { 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::Clipboard::DestroyClipboardForCurrentThread(); 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Flush the message loop to make application verifiers happy. 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) message_loop_.RunUntilIdle(); 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 73b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) base::MessageLoopForUI message_loop_; 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::TestBrowserThread ui_thread_; 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::TestBrowserThread file_thread_; 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<TestingProfile> profile_; 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BookmarkModel* model_; 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestingPageNavigator navigator_; 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Creates the following structure: 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // a 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // F1 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // f1a 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // F11 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // f11a 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // F2 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // F3 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // F4 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // f4a 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void AddTestData() { 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const BookmarkNode* bb_node = model_->bookmark_bar_node(); 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string test_base = "file:///c:/tmp/"; 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) model_->AddURL(bb_node, 0, ASCIIToUTF16("a"), GURL(test_base + "a")); 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const BookmarkNode* f1 = model_->AddFolder(bb_node, 1, ASCIIToUTF16("F1")); 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) model_->AddURL(f1, 0, ASCIIToUTF16("f1a"), GURL(test_base + "f1a")); 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const BookmarkNode* f11 = model_->AddFolder(f1, 1, ASCIIToUTF16("F11")); 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) model_->AddURL(f11, 0, ASCIIToUTF16("f11a"), GURL(test_base + "f11a")); 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) model_->AddFolder(bb_node, 2, ASCIIToUTF16("F2")); 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) model_->AddFolder(bb_node, 3, ASCIIToUTF16("F3")); 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const BookmarkNode* f4 = model_->AddFolder(bb_node, 4, ASCIIToUTF16("F4")); 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) model_->AddURL(f4, 0, ASCIIToUTF16("f4a"), GURL(test_base + "f4a")); 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests Deleting from the menu. 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BookmarkContextMenuControllerTest, DeleteURL) { 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<const BookmarkNode*> nodes; 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) nodes.push_back(model_->bookmark_bar_node()->GetChild(0)); 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BookmarkContextMenuController controller( 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, NULL, NULL, profile_.get(), NULL, nodes[0]->parent(), nodes); 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url = model_->bookmark_bar_node()->GetChild(0)->url(); 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_REMOVE)); 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Delete the URL. 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) controller.ExecuteCommand(IDC_BOOKMARK_BAR_REMOVE, 0); 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Model shouldn't have URL anymore. 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(model_->IsBookmarked(url)); 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests open all on a folder with a couple of bookmarks. 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BookmarkContextMenuControllerTest, OpenAll) { 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const BookmarkNode* folder = model_->bookmark_bar_node()->GetChild(1); 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::OpenAll(NULL, &navigator_, folder, NEW_FOREGROUND_TAB, NULL); 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Should have navigated to F1's child, but not F11's child. 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(static_cast<size_t>(1), navigator_.urls_.size()); 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(folder->GetChild(0)->url() == navigator_.urls_[0]); 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests the enabled state of the menus when supplied an empty vector. 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BookmarkContextMenuControllerTest, EmptyNodes) { 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BookmarkContextMenuController controller( 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, NULL, NULL, profile_.get(), NULL, model_->other_node(), 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<const BookmarkNode*>()); 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_OPEN_ALL)); 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE( 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_OPEN_ALL_NEW_WINDOW)); 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE( 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_OPEN_ALL_INCOGNITO)); 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_REMOVE)); 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE( 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_ADD_NEW_BOOKMARK)); 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE( 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_NEW_FOLDER)); 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests the enabled state of the menus when supplied a vector with a single 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// url. 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BookmarkContextMenuControllerTest, SingleURL) { 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<const BookmarkNode*> nodes; 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) nodes.push_back(model_->bookmark_bar_node()->GetChild(0)); 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BookmarkContextMenuController controller( 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, NULL, NULL, profile_.get(), NULL, nodes[0]->parent(), nodes); 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_OPEN_ALL)); 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE( 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_OPEN_ALL_NEW_WINDOW)); 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE( 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_OPEN_ALL_INCOGNITO)); 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_REMOVE)); 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE( 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_ADD_NEW_BOOKMARK)); 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE( 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_NEW_FOLDER)); 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests the enabled state of the menus when supplied a vector with multiple 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// urls. 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BookmarkContextMenuControllerTest, MultipleURLs) { 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<const BookmarkNode*> nodes; 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) nodes.push_back(model_->bookmark_bar_node()->GetChild(0)); 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) nodes.push_back(model_->bookmark_bar_node()->GetChild(1)->GetChild(0)); 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BookmarkContextMenuController controller( 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, NULL, NULL, profile_.get(), NULL, nodes[0]->parent(), nodes); 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_OPEN_ALL)); 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE( 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_OPEN_ALL_NEW_WINDOW)); 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE( 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_OPEN_ALL_INCOGNITO)); 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_REMOVE)); 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE( 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_ADD_NEW_BOOKMARK)); 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE( 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_NEW_FOLDER)); 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests the enabled state of the menus when supplied an vector with a single 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// folder. 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BookmarkContextMenuControllerTest, SingleFolder) { 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<const BookmarkNode*> nodes; 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) nodes.push_back(model_->bookmark_bar_node()->GetChild(2)); 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BookmarkContextMenuController controller( 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, NULL, NULL, profile_.get(), NULL, nodes[0]->parent(), nodes); 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_OPEN_ALL)); 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE( 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_OPEN_ALL_NEW_WINDOW)); 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE( 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_OPEN_ALL_INCOGNITO)); 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_REMOVE)); 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE( 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_ADD_NEW_BOOKMARK)); 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE( 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_NEW_FOLDER)); 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests the enabled state of the menus when supplied a vector with multiple 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// folders, all of which are empty. 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BookmarkContextMenuControllerTest, MultipleEmptyFolders) { 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<const BookmarkNode*> nodes; 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) nodes.push_back(model_->bookmark_bar_node()->GetChild(2)); 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) nodes.push_back(model_->bookmark_bar_node()->GetChild(3)); 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BookmarkContextMenuController controller( 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, NULL, NULL, profile_.get(), NULL, nodes[0]->parent(), nodes); 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_OPEN_ALL)); 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE( 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_OPEN_ALL_NEW_WINDOW)); 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE( 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_OPEN_ALL_INCOGNITO)); 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_REMOVE)); 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE( 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_ADD_NEW_BOOKMARK)); 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE( 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_NEW_FOLDER)); 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests the enabled state of the menus when supplied a vector with multiple 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// folders, some of which contain URLs. 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BookmarkContextMenuControllerTest, MultipleFoldersWithURLs) { 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<const BookmarkNode*> nodes; 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) nodes.push_back(model_->bookmark_bar_node()->GetChild(3)); 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) nodes.push_back(model_->bookmark_bar_node()->GetChild(4)); 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BookmarkContextMenuController controller( 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, NULL, NULL, profile_.get(), NULL, nodes[0]->parent(), nodes); 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_OPEN_ALL)); 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE( 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_OPEN_ALL_NEW_WINDOW)); 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE( 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_OPEN_ALL_INCOGNITO)); 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_REMOVE)); 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE( 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_ADD_NEW_BOOKMARK)); 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE( 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_NEW_FOLDER)); 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests the enabled state of open incognito. 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BookmarkContextMenuControllerTest, DisableIncognito) { 2473551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // Create a new incognito profile. 2483551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) Reset(true); 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<const BookmarkNode*> nodes; 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) nodes.push_back(model_->bookmark_bar_node()->GetChild(0)); 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BookmarkContextMenuController controller( 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, NULL, NULL, profile_.get(), NULL, nodes[0]->parent(), nodes); 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_OPEN_INCOGNITO)); 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE( 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_OPEN_ALL_INCOGNITO)); 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that you can't remove/edit when showing the other node. 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BookmarkContextMenuControllerTest, DisabledItemsWithOtherNode) { 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<const BookmarkNode*> nodes; 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) nodes.push_back(model_->other_node()); 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BookmarkContextMenuController controller( 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, NULL, NULL, profile_.get(), NULL, nodes[0], nodes); 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_EDIT)); 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_REMOVE)); 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests the enabled state of the menus when supplied an empty vector and null 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// parent. 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BookmarkContextMenuControllerTest, EmptyNodesNullParent) { 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BookmarkContextMenuController controller( 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, NULL, NULL, profile_.get(), NULL, NULL, 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<const BookmarkNode*>()); 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_OPEN_ALL)); 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE( 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_OPEN_ALL_NEW_WINDOW)); 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE( 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_OPEN_ALL_INCOGNITO)); 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_REMOVE)); 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE( 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_ADD_NEW_BOOKMARK)); 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE( 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_NEW_FOLDER)); 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests the enabled state of the menus when supplied a vector containing just 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the top-level bookmark bar node. 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BookmarkContextMenuControllerTest, BookmarkBar) { 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<const BookmarkNode*> nodes; 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) nodes.push_back(model_->bookmark_bar_node()); 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BookmarkContextMenuController controller( 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, NULL, NULL, profile_.get(), NULL, nodes[0]->parent(), nodes); 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_OPEN_ALL)); 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE( 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_OPEN_ALL_NEW_WINDOW)); 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE( 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_OPEN_ALL_INCOGNITO)); 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_REMOVE)); 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE( 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_ADD_NEW_BOOKMARK)); 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE( 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_NEW_FOLDER)); 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BookmarkContextMenuControllerTest, CutCopyPasteNode) { 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const BookmarkNode* bb_node = model_->bookmark_bar_node(); 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<const BookmarkNode*> nodes; 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) nodes.push_back(bb_node->GetChild(0)); 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<BookmarkContextMenuController> controller( 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new BookmarkContextMenuController( 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, NULL, NULL, profile_.get(), NULL, nodes[0]->parent(), nodes)); 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(controller->IsCommandIdEnabled(IDC_COPY)); 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(controller->IsCommandIdEnabled(IDC_CUT)); 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Copy the URL. 3162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) controller->ExecuteCommand(IDC_COPY, 0); 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.reset(new BookmarkContextMenuController( 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, NULL, NULL, profile_.get(), NULL, nodes[0]->parent(), nodes)); 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int old_count = bb_node->child_count(); 3212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) controller->ExecuteCommand(IDC_PASTE, 0); 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(bb_node->GetChild(1)->is_url()); 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(old_count + 1, bb_node->child_count()); 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(bb_node->GetChild(0)->url(), bb_node->GetChild(1)->url()); 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.reset(new BookmarkContextMenuController( 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, NULL, NULL, profile_.get(), NULL, nodes[0]->parent(), nodes)); 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Cut the URL. 3302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) controller->ExecuteCommand(IDC_CUT, 0); 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(bb_node->GetChild(0)->is_url()); 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(bb_node->GetChild(1)->is_folder()); 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(old_count, bb_node->child_count()); 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 335