1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "chrome/browser/bookmark_bar_context_menu_controller.h"
6 #include "chrome/browser/bookmarks/bookmark_model.h"
7 #include "chrome/browser/profile.h"
8 #include "chrome/browser/views/bookmark_bar_view.h"
9 #include "chrome/common/pref_names.h"
10 #include "chrome/common/pref_service.h"
11 #include "chrome/browser/page_navigator.h"
12 #include "chrome/test/testing_profile.h"
13 #include "testing/gtest/include/gtest/gtest.h"
15 #include "generated_resources.h"
19 // PageNavigator implementation that records the URL.
20 class TestingPageNavigator
: public PageNavigator
{
22 virtual void OpenURL(const GURL
& url
,
23 WindowOpenDisposition disposition
,
24 PageTransition::Type transition
) {
28 std::vector
<GURL
> urls_
;
33 class BookmarkBarContextMenuControllerTest
: public testing::Test
{
35 BookmarkBarContextMenuControllerTest()
36 : bb_view_(NULL
), model_(NULL
) {
39 virtual void SetUp() {
40 BookmarkBarView::testing_
= true;
42 profile_
.reset(new TestingProfile());
43 profile_
->set_has_history_service(true);
44 profile_
->CreateBookmarkModel(true);
46 model_
= profile_
->GetBookmarkModel();
48 bb_view_
.reset(new BookmarkBarView(profile_
.get(), NULL
));
49 bb_view_
->SetPageNavigator(&navigator_
);
54 virtual void TearDown() {
55 BookmarkBarView::testing_
= false;
57 // Flush the message loop to make Purify happy.
58 message_loop_
.RunAllPending();
62 MessageLoopForUI message_loop_
;
63 scoped_ptr
<TestingProfile
> profile_
;
64 BookmarkModel
* model_
;
65 scoped_ptr
<BookmarkBarView
> bb_view_
;
66 TestingPageNavigator navigator_
;
69 // Creates the following structure:
77 std::string test_base
= "file:///c:/tmp/";
79 model_
->AddURL(model_
->GetBookmarkBarNode(), 0, L
"a",
80 GURL(test_base
+ "a"));
82 model_
->AddGroup(model_
->GetBookmarkBarNode(), 1, L
"F1");
83 model_
->AddURL(f1
, 0, L
"f1a", GURL(test_base
+ "f1a"));
84 BookmarkNode
* f11
= model_
->AddGroup(f1
, 1, L
"F11");
85 model_
->AddURL(f11
, 0, L
"f11a", GURL(test_base
+ "f11a"));
86 model_
->AddGroup(model_
->GetBookmarkBarNode(), 2, L
"F2");
90 // Tests Deleting from the menu.
91 TEST_F(BookmarkBarContextMenuControllerTest
, DeleteURL
) {
92 BookmarkBarContextMenuController
controller(
93 bb_view_
.get(), model_
->GetBookmarkBarNode()->GetChild(0));
94 GURL url
= model_
->GetBookmarkBarNode()->GetChild(0)->GetURL();
95 ASSERT_TRUE(controller
.IsCommandEnabled(IDS_BOOKMARK_BAR_REMOVE
));
97 controller
.ExecuteCommand(IDS_BOOKMARK_BAR_REMOVE
);
98 // Model shouldn't have URL anymore.
99 ASSERT_FALSE(model_
->IsBookmarked(url
));
102 // Tests open all on a folder with a couple of bookmarks.
103 TEST_F(BookmarkBarContextMenuControllerTest
, OpenAll
) {
104 BookmarkNode
* folder
= model_
->GetBookmarkBarNode()->GetChild(1);
105 BookmarkBarContextMenuController
controller(bb_view_
.get(), folder
);
106 ASSERT_TRUE(controller
.IsCommandEnabled(IDS_BOOMARK_BAR_OPEN_ALL
));
107 ASSERT_TRUE(controller
.IsCommandEnabled(IDS_BOOMARK_BAR_OPEN_ALL_INCOGNITO
));
108 ASSERT_TRUE(controller
.IsCommandEnabled(IDS_BOOMARK_BAR_OPEN_ALL_NEW_WINDOW
));
110 controller
.ExecuteCommand(IDS_BOOMARK_BAR_OPEN_ALL
);
111 // Should have navigated to F1's children.
112 ASSERT_EQ(2, navigator_
.urls_
.size());
113 ASSERT_TRUE(folder
->GetChild(0)->GetURL() == navigator_
.urls_
[0]);
114 ASSERT_TRUE(folder
->GetChild(1)->GetChild(0)->GetURL() ==
115 navigator_
.urls_
[1]);
117 // Make sure incognito is disabled when OTR.
118 profile_
->set_off_the_record(true);
119 ASSERT_TRUE(controller
.IsCommandEnabled(IDS_BOOMARK_BAR_OPEN_ALL
));
120 ASSERT_FALSE(controller
.IsCommandEnabled(IDS_BOOMARK_BAR_OPEN_ALL_INCOGNITO
));
122 controller
.IsCommandEnabled(IDS_BOOMARK_BAR_OPEN_ALL_NEW_WINDOW
));
125 // Tests that menus are appropriately disabled for empty folders.
126 TEST_F(BookmarkBarContextMenuControllerTest
, DisableForEmptyFolder
) {
127 BookmarkNode
* folder
= model_
->GetBookmarkBarNode()->GetChild(2);
128 BookmarkBarContextMenuController
controller(bb_view_
.get(), folder
);
129 EXPECT_FALSE(controller
.IsCommandEnabled(IDS_BOOMARK_BAR_OPEN_ALL
));
131 controller
.IsCommandEnabled(IDS_BOOMARK_BAR_OPEN_ALL_NEW_WINDOW
));
134 // Tests the enabled state of open incognito.
135 TEST_F(BookmarkBarContextMenuControllerTest
, DisableIncognito
) {
136 BookmarkBarContextMenuController
controller(
137 bb_view_
.get(), model_
->GetBookmarkBarNode()->GetChild(0));
138 EXPECT_TRUE(controller
.IsCommandEnabled(IDS_BOOMARK_BAR_OPEN_INCOGNITO
));
139 profile_
->set_off_the_record(true);
140 EXPECT_FALSE(controller
.IsCommandEnabled(IDS_BOOMARK_BAR_OPEN_INCOGNITO
));