1a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Copyright 2014 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/views/bookmarks/bookmark_context_menu.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/prefs/pref_service.h" 13868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/threading/sequenced_worker_pool.h" 155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/values.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/app/chrome_command_ids.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/bookmarks/bookmark_model_factory.h" 185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/browser/bookmarks/chrome_bookmark_client.h" 195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/browser/bookmarks/chrome_bookmark_client_factory.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/bookmarks/bookmark_utils.h" 225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/common/pref_names.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/testing_profile.h" 24cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "components/bookmarks/browser/bookmark_model.h" 25cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "components/bookmarks/test/bookmark_test_helpers.h" 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/page_navigator.h" 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/test/test_browser_thread.h" 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/clipboard/clipboard.h" 30c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "ui/events/platform/platform_event_source.h" 315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "ui/views/controls/menu/menu_item_view.h" 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/views/bookmarks/bookmark_bar_view.h" 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)using base::ASCIIToUTF16; 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::BrowserThread; 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::OpenURLParams; 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::PageNavigator; 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::WebContents; 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// PageNavigator implementation that records the URL. 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TestingPageNavigator : public PageNavigator { 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual WebContents* OpenURL(const OpenURLParams& params) OVERRIDE { 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) urls_.push_back(params.url); 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<GURL> urls_; 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BookmarkContextMenuTest : public testing::Test { 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BookmarkContextMenuTest() 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : ui_thread_(BrowserThread::UI, &message_loop_), 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) file_thread_(BrowserThread::FILE, &message_loop_), 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) model_(NULL) { 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void SetUp() OVERRIDE { 67c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch event_source_ = ui::PlatformEventSource::CreateDefault(); 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_.reset(new TestingProfile()); 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_->CreateBookmarkModel(true); 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) model_ = BookmarkModelFactory::GetForProfile(profile_.get()); 7258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) test::WaitForBookmarkModelToLoad(model_); 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddTestData(); 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void TearDown() OVERRIDE { 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::Clipboard::DestroyClipboardForCurrentThread(); 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::GetBlockingPool()->FlushForTesting(); 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Flush the message loop to make application verifiers happy. 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) message_loop_.RunUntilIdle(); 83c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch event_source_.reset(); 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 87b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) base::MessageLoopForUI message_loop_; 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::TestBrowserThread ui_thread_; 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::TestBrowserThread file_thread_; 90c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch scoped_ptr<ui::PlatformEventSource> event_source_; 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<TestingProfile> profile_; 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BookmarkModel* model_; 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestingPageNavigator navigator_; 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Creates the following structure: 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // a 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // F1 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // f1a 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // -f1b as "chrome://settings" 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // F11 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // f11a 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // F2 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // F3 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // F4 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // f4a 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void AddTestData() { 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const BookmarkNode* bb_node = model_->bookmark_bar_node(); 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string test_base = "file:///c:/tmp/"; 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) model_->AddURL(bb_node, 0, ASCIIToUTF16("a"), GURL(test_base + "a")); 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const BookmarkNode* f1 = model_->AddFolder(bb_node, 1, ASCIIToUTF16("F1")); 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) model_->AddURL(f1, 0, ASCIIToUTF16("f1a"), GURL(test_base + "f1a")); 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) model_->AddURL(f1, 1, ASCIIToUTF16("f1b"), GURL("chrome://settings")); 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const BookmarkNode* f11 = model_->AddFolder(f1, 2, ASCIIToUTF16("F11")); 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) model_->AddURL(f11, 0, ASCIIToUTF16("f11a"), GURL(test_base + "f11a")); 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) model_->AddFolder(bb_node, 2, ASCIIToUTF16("F2")); 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) model_->AddFolder(bb_node, 3, ASCIIToUTF16("F3")); 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const BookmarkNode* f4 = model_->AddFolder(bb_node, 4, ASCIIToUTF16("F4")); 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) model_->AddURL(f4, 0, ASCIIToUTF16("f4a"), GURL(test_base + "f4a")); 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests Deleting from the menu. 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BookmarkContextMenuTest, DeleteURL) { 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<const BookmarkNode*> nodes; 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) nodes.push_back(model_->bookmark_bar_node()->GetChild(0)); 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BookmarkContextMenu controller( 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, NULL, profile_.get(), NULL, nodes[0]->parent(), nodes, false); 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url = model_->bookmark_bar_node()->GetChild(0)->url(); 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(controller.IsCommandEnabled(IDC_BOOKMARK_BAR_REMOVE)); 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Delete the URL. 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) controller.ExecuteCommand(IDC_BOOKMARK_BAR_REMOVE, 0); 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Model shouldn't have URL anymore. 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(model_->IsBookmarked(url)); 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests open all on a folder with a couple of bookmarks. 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BookmarkContextMenuTest, OpenAll) { 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const BookmarkNode* folder = model_->bookmark_bar_node()->GetChild(1); 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::OpenAll(NULL, &navigator_, folder, NEW_FOREGROUND_TAB, NULL); 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Should have navigated to F1's child but not F11's child. 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(static_cast<size_t>(2), navigator_.urls_.size()); 1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(folder->GetChild(0)->url() == navigator_.urls_[0]); 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Tests open all on a folder with a couple of bookmarks in incognito window. 1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(BookmarkContextMenuTest, OpenAllIngonito) { 1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const BookmarkNode* folder = model_->bookmark_bar_node()->GetChild(1); 1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::OpenAll(NULL, &navigator_, folder, OFF_THE_RECORD, NULL); 1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Should have navigated to only f1a but not f2a. 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(static_cast<size_t>(1), navigator_.urls_.size()); 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(folder->GetChild(0)->url() == navigator_.urls_[0]); 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests the enabled state of the menus when supplied an empty vector. 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BookmarkContextMenuTest, EmptyNodes) { 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BookmarkContextMenu controller( 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, NULL, profile_.get(), NULL, model_->other_node(), 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<const BookmarkNode*>(), false); 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(controller.IsCommandEnabled(IDC_BOOKMARK_BAR_OPEN_ALL)); 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE( 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandEnabled(IDC_BOOKMARK_BAR_OPEN_ALL_NEW_WINDOW)); 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE( 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandEnabled(IDC_BOOKMARK_BAR_OPEN_ALL_INCOGNITO)); 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(controller.IsCommandEnabled(IDC_BOOKMARK_BAR_REMOVE)); 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE( 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandEnabled(IDC_BOOKMARK_BAR_ADD_NEW_BOOKMARK)); 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE( 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandEnabled(IDC_BOOKMARK_BAR_NEW_FOLDER)); 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests the enabled state of the menus when supplied a vector with a single 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// url. 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BookmarkContextMenuTest, SingleURL) { 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<const BookmarkNode*> nodes; 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) nodes.push_back(model_->bookmark_bar_node()->GetChild(0)); 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BookmarkContextMenu controller( 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, NULL, profile_.get(), NULL, nodes[0]->parent(), nodes, false); 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(controller.IsCommandEnabled(IDC_BOOKMARK_BAR_OPEN_ALL)); 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE( 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandEnabled(IDC_BOOKMARK_BAR_OPEN_ALL_NEW_WINDOW)); 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(controller.IsCommandEnabled(IDC_BOOKMARK_BAR_OPEN_ALL_INCOGNITO)); 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(controller.IsCommandEnabled(IDC_BOOKMARK_BAR_REMOVE)); 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE( 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandEnabled(IDC_BOOKMARK_BAR_ADD_NEW_BOOKMARK)); 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE( 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandEnabled(IDC_BOOKMARK_BAR_NEW_FOLDER)); 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests the enabled state of the menus when supplied a vector with multiple 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// urls. 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BookmarkContextMenuTest, MultipleURLs) { 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<const BookmarkNode*> nodes; 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) nodes.push_back(model_->bookmark_bar_node()->GetChild(0)); 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) nodes.push_back(model_->bookmark_bar_node()->GetChild(1)->GetChild(0)); 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BookmarkContextMenu controller( 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, NULL, profile_.get(), NULL, nodes[0]->parent(), nodes, false); 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(controller.IsCommandEnabled(IDC_BOOKMARK_BAR_OPEN_ALL)); 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE( 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandEnabled(IDC_BOOKMARK_BAR_OPEN_ALL_NEW_WINDOW)); 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(controller.IsCommandEnabled(IDC_BOOKMARK_BAR_OPEN_ALL_INCOGNITO)); 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(controller.IsCommandEnabled(IDC_BOOKMARK_BAR_REMOVE)); 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE( 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandEnabled(IDC_BOOKMARK_BAR_ADD_NEW_BOOKMARK)); 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE( 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandEnabled(IDC_BOOKMARK_BAR_NEW_FOLDER)); 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests the enabled state of the menus when supplied an vector with a single 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// folder. 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BookmarkContextMenuTest, SingleFolder) { 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<const BookmarkNode*> nodes; 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) nodes.push_back(model_->bookmark_bar_node()->GetChild(2)); 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BookmarkContextMenu controller( 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, NULL, profile_.get(), NULL, nodes[0]->parent(), nodes, false); 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(controller.IsCommandEnabled(IDC_BOOKMARK_BAR_OPEN_ALL)); 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE( 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandEnabled(IDC_BOOKMARK_BAR_OPEN_ALL_NEW_WINDOW)); 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE( 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandEnabled(IDC_BOOKMARK_BAR_OPEN_ALL_INCOGNITO)); 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(controller.IsCommandEnabled(IDC_BOOKMARK_BAR_REMOVE)); 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE( 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandEnabled(IDC_BOOKMARK_BAR_ADD_NEW_BOOKMARK)); 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE( 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandEnabled(IDC_BOOKMARK_BAR_NEW_FOLDER)); 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests the enabled state of the menus when supplied a vector with multiple 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// folders, all of which are empty. 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BookmarkContextMenuTest, MultipleEmptyFolders) { 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<const BookmarkNode*> nodes; 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) nodes.push_back(model_->bookmark_bar_node()->GetChild(2)); 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) nodes.push_back(model_->bookmark_bar_node()->GetChild(3)); 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BookmarkContextMenu controller( 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, NULL, profile_.get(), NULL, nodes[0]->parent(), nodes, false); 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(controller.IsCommandEnabled(IDC_BOOKMARK_BAR_OPEN_ALL)); 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE( 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandEnabled(IDC_BOOKMARK_BAR_OPEN_ALL_NEW_WINDOW)); 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE( 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandEnabled(IDC_BOOKMARK_BAR_OPEN_ALL_INCOGNITO)); 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(controller.IsCommandEnabled(IDC_BOOKMARK_BAR_REMOVE)); 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE( 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandEnabled(IDC_BOOKMARK_BAR_ADD_NEW_BOOKMARK)); 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE( 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandEnabled(IDC_BOOKMARK_BAR_NEW_FOLDER)); 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests the enabled state of the menus when supplied a vector with multiple 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// folders, some of which contain URLs. 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BookmarkContextMenuTest, MultipleFoldersWithURLs) { 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<const BookmarkNode*> nodes; 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) nodes.push_back(model_->bookmark_bar_node()->GetChild(3)); 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) nodes.push_back(model_->bookmark_bar_node()->GetChild(4)); 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BookmarkContextMenu controller( 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, NULL, profile_.get(), NULL, nodes[0]->parent(), nodes, false); 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(controller.IsCommandEnabled(IDC_BOOKMARK_BAR_OPEN_ALL)); 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE( 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandEnabled(IDC_BOOKMARK_BAR_OPEN_ALL_NEW_WINDOW)); 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(controller.IsCommandEnabled(IDC_BOOKMARK_BAR_OPEN_ALL_INCOGNITO)); 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(controller.IsCommandEnabled(IDC_BOOKMARK_BAR_REMOVE)); 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE( 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandEnabled(IDC_BOOKMARK_BAR_ADD_NEW_BOOKMARK)); 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE( 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandEnabled(IDC_BOOKMARK_BAR_NEW_FOLDER)); 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests the enabled state of open incognito. 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BookmarkContextMenuTest, DisableIncognito) { 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<const BookmarkNode*> nodes; 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) nodes.push_back(model_->bookmark_bar_node()->GetChild(0)); 2731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Profile* incognito = profile_->GetOffTheRecordProfile(); 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BookmarkContextMenu controller( 2751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci NULL, NULL, incognito, NULL, nodes[0]->parent(), nodes, false); 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(controller.IsCommandEnabled(IDC_BOOKMARK_BAR_OPEN_INCOGNITO)); 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE( 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandEnabled(IDC_BOOKMARK_BAR_OPEN_ALL_INCOGNITO)); 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that you can't remove/edit when showing the other node. 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BookmarkContextMenuTest, DisabledItemsWithOtherNode) { 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<const BookmarkNode*> nodes; 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) nodes.push_back(model_->other_node()); 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BookmarkContextMenu controller( 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, NULL, profile_.get(), NULL, nodes[0], nodes, false); 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(controller.IsCommandEnabled(IDC_BOOKMARK_BAR_EDIT)); 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(controller.IsCommandEnabled(IDC_BOOKMARK_BAR_REMOVE)); 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests the enabled state of the menus when supplied an empty vector and null 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// parent. 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BookmarkContextMenuTest, EmptyNodesNullParent) { 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BookmarkContextMenu controller( 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, NULL, profile_.get(), NULL, NULL, 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<const BookmarkNode*>(), false); 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(controller.IsCommandEnabled(IDC_BOOKMARK_BAR_OPEN_ALL)); 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE( 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandEnabled(IDC_BOOKMARK_BAR_OPEN_ALL_NEW_WINDOW)); 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE( 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandEnabled(IDC_BOOKMARK_BAR_OPEN_ALL_INCOGNITO)); 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(controller.IsCommandEnabled(IDC_BOOKMARK_BAR_REMOVE)); 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE( 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandEnabled(IDC_BOOKMARK_BAR_ADD_NEW_BOOKMARK)); 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE( 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandEnabled(IDC_BOOKMARK_BAR_NEW_FOLDER)); 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BookmarkContextMenuTest, CutCopyPasteNode) { 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const BookmarkNode* bb_node = model_->bookmark_bar_node(); 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<const BookmarkNode*> nodes; 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) nodes.push_back(bb_node->GetChild(0)); 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<BookmarkContextMenu> controller(new BookmarkContextMenu( 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, NULL, profile_.get(), NULL, nodes[0]->parent(), nodes, false)); 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(controller->IsCommandEnabled(IDC_COPY)); 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(controller->IsCommandEnabled(IDC_CUT)); 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Copy the URL. 3192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) controller->ExecuteCommand(IDC_COPY, 0); 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.reset(new BookmarkContextMenu( 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, NULL, profile_.get(), NULL, nodes[0]->parent(), nodes, false)); 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int old_count = bb_node->child_count(); 3242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) controller->ExecuteCommand(IDC_PASTE, 0); 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(bb_node->GetChild(1)->is_url()); 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(old_count + 1, bb_node->child_count()); 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(bb_node->GetChild(0)->url(), bb_node->GetChild(1)->url()); 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.reset(new BookmarkContextMenu( 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, NULL, profile_.get(), NULL, nodes[0]->parent(), nodes, false)); 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Cut the URL. 3332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) controller->ExecuteCommand(IDC_CUT, 0); 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(bb_node->GetChild(0)->is_url()); 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(bb_node->GetChild(1)->is_folder()); 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(old_count, bb_node->child_count()); 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Tests that the "Show managed bookmarks" option in the context menu is only 3405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// visible if the policy is set. 3415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)TEST_F(BookmarkContextMenuTest, ShowManagedBookmarks) { 3425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Create a BookmarkContextMenu for the bookmarks bar. 3435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const BookmarkNode* bb_node = model_->bookmark_bar_node(); 3445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) std::vector<const BookmarkNode*> nodes; 3455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) nodes.push_back(bb_node->GetChild(0)); 3465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) scoped_ptr<BookmarkContextMenu> controller(new BookmarkContextMenu( 3475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) NULL, NULL, profile_.get(), NULL, nodes[0]->parent(), nodes, false)); 3485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Verify that there are no managed nodes yet. 3505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ChromeBookmarkClient* client = ChromeBookmarkClientFactory::GetForProfile( 3515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) profile_.get()); 3525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_TRUE(client->managed_node()->empty()); 3535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // The context menu should not show the option to "Show managed bookmarks". 3555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_FALSE( 3565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) controller->IsCommandVisible(IDC_BOOKMARK_BAR_SHOW_MANAGED_BOOKMARKS)); 3575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) views::MenuItemView* menu = controller->menu(); 3585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_FALSE(menu->GetMenuItemByID(IDC_BOOKMARK_BAR_SHOW_MANAGED_BOOKMARKS) 3595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ->visible()); 3605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Other options are not affected. 3625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_TRUE(controller->IsCommandVisible(IDC_BOOKMARK_BAR_NEW_FOLDER)); 3635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_TRUE(menu->GetMenuItemByID(IDC_BOOKMARK_BAR_NEW_FOLDER)->visible()); 3645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Now set the managed bookmarks policy. 3665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::DictionaryValue* dict = new base::DictionaryValue; 3675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) dict->SetString("name", "Google"); 3685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) dict->SetString("url", "http://google.com"); 3695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::ListValue list; 3705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) list.Append(dict); 3715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_TRUE(client->managed_node()->empty()); 3721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci profile_->GetPrefs()->Set(bookmarks::prefs::kManagedBookmarks, list); 3735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_FALSE(client->managed_node()->empty()); 3745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // New context menus now show the "Show managed bookmarks" option. 3765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) controller.reset(new BookmarkContextMenu( 3775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) NULL, NULL, profile_.get(), NULL, nodes[0]->parent(), nodes, false)); 3785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_TRUE(controller->IsCommandVisible(IDC_BOOKMARK_BAR_NEW_FOLDER)); 3795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_TRUE( 3805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) controller->IsCommandVisible(IDC_BOOKMARK_BAR_SHOW_MANAGED_BOOKMARKS)); 3815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) menu = controller->menu(); 3825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_TRUE(menu->GetMenuItemByID(IDC_BOOKMARK_BAR_NEW_FOLDER)->visible()); 3835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_TRUE(menu->GetMenuItemByID(IDC_BOOKMARK_BAR_SHOW_MANAGED_BOOKMARKS) 3845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ->visible()); 3855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 386