1// Copyright (c) 2012 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.
4
5#include "chrome/browser/ui/tabs/tab_menu_model.h"
6
7#include "base/command_line.h"
8#include "chrome/browser/ui/tabs/tab_strip_model.h"
9#include "chrome/browser/ui/tabs/tab_strip_model_delegate.h"
10#include "chrome/browser/ui/tabs/tab_utils.h"
11#include "chrome/grit/generated_resources.h"
12
13TabMenuModel::TabMenuModel(ui::SimpleMenuModel::Delegate* delegate,
14                           TabStripModel* tab_strip,
15                           int index)
16    : ui::SimpleMenuModel(delegate) {
17  Build(tab_strip, index);
18}
19
20void TabMenuModel::Build(TabStripModel* tab_strip, int index) {
21  bool affects_multiple_tabs =
22      (tab_strip->IsTabSelected(index) &&
23       tab_strip->selection_model().selected_indices().size() > 1);
24  AddItemWithStringId(TabStripModel::CommandNewTab, IDS_TAB_CXMENU_NEWTAB);
25  AddSeparator(ui::NORMAL_SEPARATOR);
26  AddItemWithStringId(TabStripModel::CommandReload, IDS_TAB_CXMENU_RELOAD);
27  AddItemWithStringId(TabStripModel::CommandDuplicate,
28                      IDS_TAB_CXMENU_DUPLICATE);
29  bool will_pin = tab_strip->WillContextMenuPin(index);
30  if (affects_multiple_tabs) {
31    AddItemWithStringId(
32        TabStripModel::CommandTogglePinned,
33        will_pin ? IDS_TAB_CXMENU_PIN_TABS : IDS_TAB_CXMENU_UNPIN_TABS);
34  } else {
35    AddItemWithStringId(
36        TabStripModel::CommandTogglePinned,
37        will_pin ? IDS_TAB_CXMENU_PIN_TAB : IDS_TAB_CXMENU_UNPIN_TAB);
38  }
39  if (chrome::IsTabAudioMutingFeatureEnabled()) {
40    if (affects_multiple_tabs) {
41      const bool will_mute = !chrome::AreAllTabsMuted(
42          *tab_strip, tab_strip->selection_model().selected_indices());
43      AddItemWithStringId(
44          TabStripModel::CommandToggleTabAudioMuted,
45          will_mute ? IDS_TAB_CXMENU_AUDIO_MUTE_TABS :
46              IDS_TAB_CXMENU_AUDIO_UNMUTE_TABS);
47    } else {
48      const bool will_mute =
49          !chrome::IsTabAudioMuted(tab_strip->GetWebContentsAt(index));
50      AddItemWithStringId(
51          TabStripModel::CommandToggleTabAudioMuted,
52          will_mute ? IDS_TAB_CXMENU_AUDIO_MUTE_TAB :
53              IDS_TAB_CXMENU_AUDIO_UNMUTE_TAB);
54    }
55  }
56  AddSeparator(ui::NORMAL_SEPARATOR);
57  if (affects_multiple_tabs) {
58    AddItemWithStringId(TabStripModel::CommandCloseTab,
59                        IDS_TAB_CXMENU_CLOSETABS);
60  } else {
61    AddItemWithStringId(TabStripModel::CommandCloseTab,
62                        IDS_TAB_CXMENU_CLOSETAB);
63  }
64  AddItemWithStringId(TabStripModel::CommandCloseOtherTabs,
65                      IDS_TAB_CXMENU_CLOSEOTHERTABS);
66  AddItemWithStringId(TabStripModel::CommandCloseTabsToRight,
67                      IDS_TAB_CXMENU_CLOSETABSTORIGHT);
68  AddSeparator(ui::NORMAL_SEPARATOR);
69  const bool is_window = tab_strip->delegate()->GetRestoreTabType() ==
70      TabStripModelDelegate::RESTORE_WINDOW;
71  AddItemWithStringId(TabStripModel::CommandRestoreTab,
72                      is_window ? IDS_RESTORE_WINDOW : IDS_RESTORE_TAB);
73  AddItemWithStringId(TabStripModel::CommandBookmarkAllTabs,
74                      IDS_TAB_CXMENU_BOOKMARK_ALL_TABS);
75}
76