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" 1246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "base/values.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/app/chrome_command_ids.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/bookmarks/bookmark_model_factory.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/bookmarks/bookmark_utils.h" 1746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "chrome/common/pref_names.h" 1846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "chrome/test/base/testing_pref_service_syncable.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/testing_profile.h" 20cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "components/bookmarks/browser/bookmark_model.h" 2146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "components/bookmarks/browser/bookmark_node.h" 22cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "components/bookmarks/test/bookmark_test_helpers.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/page_navigator.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/test/test_browser_thread.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "grit/generated_resources.h" 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/clipboard/clipboard.h" 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)using base::ASCIIToUTF16; 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::BrowserThread; 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::OpenURLParams; 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::PageNavigator; 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::WebContents; 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// PageNavigator implementation that records the URL. 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TestingPageNavigator : public PageNavigator { 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual WebContents* OpenURL(const OpenURLParams& params) OVERRIDE { 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) urls_.push_back(params.url); 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<GURL> urls_; 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BookmarkContextMenuControllerTest : public testing::Test { 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BookmarkContextMenuControllerTest() 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : ui_thread_(BrowserThread::UI, &message_loop_), 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) file_thread_(BrowserThread::FILE, &message_loop_), 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) model_(NULL) { 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void SetUp() OVERRIDE { 553551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) TestingProfile::Builder builder; 563551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) profile_ = builder.Build(); 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_->CreateBookmarkModel(true); 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) model_ = BookmarkModelFactory::GetForProfile(profile_.get()); 5958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) test::WaitForBookmarkModelToLoad(model_); 6046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) AddTestData(model_); 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void TearDown() OVERRIDE { 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::Clipboard::DestroyClipboardForCurrentThread(); 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Flush the message loop to make application verifiers happy. 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) message_loop_.RunUntilIdle(); 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Creates the following structure: 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // a 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // F1 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // f1a 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // F11 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // f11a 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // F2 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // F3 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // F4 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // f4a 8046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) static void AddTestData(BookmarkModel* model) { 8146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const BookmarkNode* bb_node = model->bookmark_bar_node(); 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string test_base = "file:///c:/tmp/"; 8346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) model->AddURL(bb_node, 0, ASCIIToUTF16("a"), GURL(test_base + "a")); 8446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const BookmarkNode* f1 = model->AddFolder(bb_node, 1, ASCIIToUTF16("F1")); 8546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) model->AddURL(f1, 0, ASCIIToUTF16("f1a"), GURL(test_base + "f1a")); 8646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const BookmarkNode* f11 = model->AddFolder(f1, 1, ASCIIToUTF16("F11")); 8746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) model->AddURL(f11, 0, ASCIIToUTF16("f11a"), GURL(test_base + "f11a")); 8846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) model->AddFolder(bb_node, 2, ASCIIToUTF16("F2")); 8946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) model->AddFolder(bb_node, 3, ASCIIToUTF16("F3")); 9046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const BookmarkNode* f4 = model->AddFolder(bb_node, 4, ASCIIToUTF16("F4")); 9146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) model->AddURL(f4, 0, ASCIIToUTF16("f4a"), GURL(test_base + "f4a")); 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 9446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) protected: 9546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) base::MessageLoopForUI message_loop_; 9646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) content::TestBrowserThread ui_thread_; 9746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) content::TestBrowserThread file_thread_; 9846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) scoped_ptr<TestingProfile> profile_; 9946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) BookmarkModel* model_; 10046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) TestingPageNavigator navigator_; 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests Deleting from the menu. 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BookmarkContextMenuControllerTest, DeleteURL) { 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<const BookmarkNode*> nodes; 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) nodes.push_back(model_->bookmark_bar_node()->GetChild(0)); 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BookmarkContextMenuController controller( 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, NULL, NULL, profile_.get(), NULL, nodes[0]->parent(), nodes); 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url = model_->bookmark_bar_node()->GetChild(0)->url(); 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_REMOVE)); 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Delete the URL. 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) controller.ExecuteCommand(IDC_BOOKMARK_BAR_REMOVE, 0); 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Model shouldn't have URL anymore. 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(model_->IsBookmarked(url)); 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests open all on a folder with a couple of bookmarks. 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BookmarkContextMenuControllerTest, OpenAll) { 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const BookmarkNode* folder = model_->bookmark_bar_node()->GetChild(1); 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::OpenAll(NULL, &navigator_, folder, NEW_FOREGROUND_TAB, NULL); 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Should have navigated to F1's child, but not F11's child. 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(static_cast<size_t>(1), navigator_.urls_.size()); 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(folder->GetChild(0)->url() == navigator_.urls_[0]); 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests the enabled state of the menus when supplied an empty vector. 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BookmarkContextMenuControllerTest, EmptyNodes) { 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BookmarkContextMenuController controller( 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, NULL, NULL, profile_.get(), NULL, model_->other_node(), 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<const BookmarkNode*>()); 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_OPEN_ALL)); 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE( 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_OPEN_ALL_NEW_WINDOW)); 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE( 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_OPEN_ALL_INCOGNITO)); 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_REMOVE)); 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE( 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_ADD_NEW_BOOKMARK)); 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE( 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_NEW_FOLDER)); 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests the enabled state of the menus when supplied a vector with a single 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// url. 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BookmarkContextMenuControllerTest, SingleURL) { 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<const BookmarkNode*> nodes; 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) nodes.push_back(model_->bookmark_bar_node()->GetChild(0)); 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BookmarkContextMenuController controller( 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, NULL, NULL, profile_.get(), NULL, nodes[0]->parent(), nodes); 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_OPEN_ALL)); 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE( 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_OPEN_ALL_NEW_WINDOW)); 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE( 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_OPEN_ALL_INCOGNITO)); 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_REMOVE)); 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE( 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_ADD_NEW_BOOKMARK)); 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE( 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_NEW_FOLDER)); 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests the enabled state of the menus when supplied a vector with multiple 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// urls. 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BookmarkContextMenuControllerTest, MultipleURLs) { 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<const BookmarkNode*> nodes; 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) nodes.push_back(model_->bookmark_bar_node()->GetChild(0)); 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) nodes.push_back(model_->bookmark_bar_node()->GetChild(1)->GetChild(0)); 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BookmarkContextMenuController controller( 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, NULL, NULL, profile_.get(), NULL, nodes[0]->parent(), nodes); 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_OPEN_ALL)); 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE( 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_OPEN_ALL_NEW_WINDOW)); 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE( 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_OPEN_ALL_INCOGNITO)); 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_REMOVE)); 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE( 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_ADD_NEW_BOOKMARK)); 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE( 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_NEW_FOLDER)); 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests the enabled state of the menus when supplied an vector with a single 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// folder. 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BookmarkContextMenuControllerTest, SingleFolder) { 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<const BookmarkNode*> nodes; 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) nodes.push_back(model_->bookmark_bar_node()->GetChild(2)); 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BookmarkContextMenuController controller( 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, NULL, NULL, profile_.get(), NULL, nodes[0]->parent(), nodes); 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_OPEN_ALL)); 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE( 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_OPEN_ALL_NEW_WINDOW)); 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE( 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_OPEN_ALL_INCOGNITO)); 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_REMOVE)); 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE( 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_ADD_NEW_BOOKMARK)); 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE( 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_NEW_FOLDER)); 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests the enabled state of the menus when supplied a vector with multiple 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// folders, all of which are empty. 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BookmarkContextMenuControllerTest, MultipleEmptyFolders) { 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<const BookmarkNode*> nodes; 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) nodes.push_back(model_->bookmark_bar_node()->GetChild(2)); 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) nodes.push_back(model_->bookmark_bar_node()->GetChild(3)); 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BookmarkContextMenuController controller( 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, NULL, NULL, profile_.get(), NULL, nodes[0]->parent(), nodes); 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_OPEN_ALL)); 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE( 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_OPEN_ALL_NEW_WINDOW)); 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE( 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_OPEN_ALL_INCOGNITO)); 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_REMOVE)); 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE( 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_ADD_NEW_BOOKMARK)); 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE( 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_NEW_FOLDER)); 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests the enabled state of the menus when supplied a vector with multiple 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// folders, some of which contain URLs. 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BookmarkContextMenuControllerTest, MultipleFoldersWithURLs) { 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<const BookmarkNode*> nodes; 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) nodes.push_back(model_->bookmark_bar_node()->GetChild(3)); 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) nodes.push_back(model_->bookmark_bar_node()->GetChild(4)); 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BookmarkContextMenuController controller( 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, NULL, NULL, profile_.get(), NULL, nodes[0]->parent(), nodes); 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_OPEN_ALL)); 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE( 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_OPEN_ALL_NEW_WINDOW)); 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE( 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_OPEN_ALL_INCOGNITO)); 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_REMOVE)); 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE( 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_ADD_NEW_BOOKMARK)); 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE( 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_NEW_FOLDER)); 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests the enabled state of open incognito. 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BookmarkContextMenuControllerTest, DisableIncognito) { 24446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Create an incognito Profile. It must be associated with the original 24546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Profile, so that GetOriginalProfile() works as expected. 24646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) TestingProfile::Builder builder; 24746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) builder.SetIncognito(); 24846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) scoped_ptr<TestingProfile> testing_incognito = builder.Build(); 24946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) testing_incognito->SetOriginalProfile(profile_.get()); 25046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) TestingProfile* incognito = testing_incognito.get(); 25146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) profile_->SetOffTheRecordProfile(testing_incognito.PassAs<Profile>()); 25246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 25346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) incognito->CreateBookmarkModel(true); 25446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) BookmarkModel* model = BookmarkModelFactory::GetForProfile(incognito); 25546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) test::WaitForBookmarkModelToLoad(model); 25646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) AddTestData(model); 25746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<const BookmarkNode*> nodes; 25946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) nodes.push_back(model->bookmark_bar_node()->GetChild(0)); 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BookmarkContextMenuController controller( 26146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) NULL, NULL, NULL, incognito, NULL, nodes[0]->parent(), nodes); 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_OPEN_INCOGNITO)); 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE( 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_OPEN_ALL_INCOGNITO)); 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that you can't remove/edit when showing the other node. 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BookmarkContextMenuControllerTest, DisabledItemsWithOtherNode) { 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<const BookmarkNode*> nodes; 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) nodes.push_back(model_->other_node()); 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BookmarkContextMenuController controller( 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, NULL, NULL, profile_.get(), NULL, nodes[0], nodes); 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_EDIT)); 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_REMOVE)); 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests the enabled state of the menus when supplied an empty vector and null 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// parent. 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BookmarkContextMenuControllerTest, EmptyNodesNullParent) { 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BookmarkContextMenuController controller( 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, NULL, NULL, profile_.get(), NULL, NULL, 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<const BookmarkNode*>()); 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_OPEN_ALL)); 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE( 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_OPEN_ALL_NEW_WINDOW)); 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE( 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_OPEN_ALL_INCOGNITO)); 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_REMOVE)); 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE( 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_ADD_NEW_BOOKMARK)); 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE( 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_NEW_FOLDER)); 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests the enabled state of the menus when supplied a vector containing just 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the top-level bookmark bar node. 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BookmarkContextMenuControllerTest, BookmarkBar) { 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<const BookmarkNode*> nodes; 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) nodes.push_back(model_->bookmark_bar_node()); 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BookmarkContextMenuController controller( 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, NULL, NULL, profile_.get(), NULL, nodes[0]->parent(), nodes); 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_OPEN_ALL)); 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE( 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_OPEN_ALL_NEW_WINDOW)); 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE( 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_OPEN_ALL_INCOGNITO)); 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_REMOVE)); 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE( 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_ADD_NEW_BOOKMARK)); 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE( 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_NEW_FOLDER)); 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BookmarkContextMenuControllerTest, CutCopyPasteNode) { 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const BookmarkNode* bb_node = model_->bookmark_bar_node(); 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<const BookmarkNode*> nodes; 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) nodes.push_back(bb_node->GetChild(0)); 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<BookmarkContextMenuController> controller( 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new BookmarkContextMenuController( 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, NULL, NULL, profile_.get(), NULL, nodes[0]->parent(), nodes)); 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(controller->IsCommandIdEnabled(IDC_COPY)); 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(controller->IsCommandIdEnabled(IDC_CUT)); 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Copy the URL. 3252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) controller->ExecuteCommand(IDC_COPY, 0); 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) int old_count = bb_node->child_count(); 3302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) controller->ExecuteCommand(IDC_PASTE, 0); 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(bb_node->GetChild(1)->is_url()); 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(old_count + 1, bb_node->child_count()); 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(bb_node->GetChild(0)->url(), bb_node->GetChild(1)->url()); 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.reset(new BookmarkContextMenuController( 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, NULL, NULL, profile_.get(), NULL, nodes[0]->parent(), nodes)); 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Cut the URL. 3392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) controller->ExecuteCommand(IDC_CUT, 0); 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(bb_node->GetChild(0)->is_url()); 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(bb_node->GetChild(1)->is_folder()); 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(old_count, bb_node->child_count()); 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 34446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 34546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)TEST_F(BookmarkContextMenuControllerTest, 34646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ManagedShowAppsShortcutInBookmarksBar) { 34746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) BookmarkContextMenuController controller( 34846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) NULL, NULL, NULL, profile_.get(), NULL, model_->bookmark_bar_node(), 34946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) std::vector<const BookmarkNode*>()); 35046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 35146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // By default, the pref is not managed and the command is enabled. 35246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) TestingPrefServiceSyncable* prefs = profile_->GetTestingPrefService(); 35346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_FALSE( 35446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) prefs->IsManagedPreference(prefs::kShowAppsShortcutInBookmarkBar)); 35546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE( 35646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_SHOW_APPS_SHORTCUT)); 35746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 35846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Disabling the shorcut by policy disables the command. 35946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) prefs->SetManagedPref(prefs::kShowAppsShortcutInBookmarkBar, 36046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) new base::FundamentalValue(false)); 36146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_FALSE( 36246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_SHOW_APPS_SHORTCUT)); 36346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 36446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // And enabling the shortcut by policy disables the command too. 36546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) prefs->SetManagedPref(prefs::kShowAppsShortcutInBookmarkBar, 36646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) new base::FundamentalValue(true)); 36746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_FALSE( 36846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) controller.IsCommandIdEnabled(IDC_BOOKMARK_BAR_SHOW_APPS_SHORTCUT)); 36946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 370