Chromium Code Reviews| Index: chrome/browser/ui/tabs/tab_strip_model.cc |
| diff --git a/chrome/browser/ui/tabs/tab_strip_model.cc b/chrome/browser/ui/tabs/tab_strip_model.cc |
| index b7c60fbf90b974ee96176bae87dab73caad7e934..5d8e60dced924cd6c0857676644f8006d18c93b0 100644 |
| --- a/chrome/browser/ui/tabs/tab_strip_model.cc |
| +++ b/chrome/browser/ui/tabs/tab_strip_model.cc |
| @@ -19,6 +19,7 @@ |
| #include "chrome/browser/ui/tab_contents/core_tab_helper_delegate.h" |
| #include "chrome/browser/ui/tabs/tab_strip_model_delegate.h" |
| #include "chrome/browser/ui/tabs/tab_strip_model_order_controller.h" |
| +#include "chrome/browser/ui/tabs/tab_utils.h" |
| #include "chrome/browser/ui/web_contents_sizer.h" |
| #include "chrome/common/url_constants.h" |
| #include "components/web_modal/popup_manager.h" |
| @@ -701,6 +702,18 @@ bool TabStripModel::IsTabPinned(int index) const { |
| return contents_data_[index]->pinned(); |
| } |
| +void TabStripModel::SetTabAudioMuted(int index, bool mute) { |
|
sky
2014/09/23 22:58:17
Move this and IsTabAudioMuted into tab_util. My ra
miu
2014/09/24 22:34:15
Done. Agreed; I wasn't encapsulating this functio
sky
2014/09/25 19:25:04
Can you also move the setters? Long term TabStripM
miu
2014/09/25 22:49:36
Done.
|
| + content::WebContents* const contents = GetWebContentsAt(index); |
| + if (!contents || !chrome::CanToggleAudioMute(contents)) |
| + return; |
| + contents->SetAudioMuted(mute); |
| +} |
| + |
| +bool TabStripModel::IsTabAudioMuted(int index) const { |
| + content::WebContents* const contents = GetWebContentsAt(index); |
| + return contents && contents->IsAudioMuted(); |
| +} |
| + |
| bool TabStripModel::IsMiniTab(int index) const { |
| return IsTabPinned(index) || IsAppTab(index); |
| } |
| @@ -919,6 +932,18 @@ bool TabStripModel::IsContextMenuCommandEnabled( |
| return false; |
| } |
| + case CommandToggleTabAudioMuted: { |
| + if (!chrome::IsTabAudioMutingFeatureEnabled()) |
|
sky
2014/09/23 22:58:17
Does this check matter here?
miu
2014/09/24 22:34:15
Done since the CanToggleAudioMute() should return
|
| + return false; |
| + std::vector<int> indices = GetIndicesForCommand(context_index); |
| + for (size_t i = 0; i < indices.size(); ++i) { |
| + WebContents* const tab = GetWebContentsAt(indices[i]); |
| + if (!tab || !chrome::CanToggleAudioMute(tab)) |
|
sky
2014/09/23 22:58:17
You shouldn't need the !tab here, at which point y
miu
2014/09/24 22:34:15
Done.
|
| + return false; |
| + } |
| + return true; |
| + } |
| + |
| case CommandBookmarkAllTabs: |
| return browser_defaults::bookmarks_enabled && |
| delegate_->CanBookmarkAllTabs(); |
| @@ -1026,6 +1051,18 @@ void TabStripModel::ExecuteContextMenuCommand( |
| break; |
| } |
| + case CommandToggleTabAudioMuted: { |
| + const bool mute = WillContextMenuMute(context_index); |
| + if (mute) |
| + content::RecordAction(UserMetricsAction("TabContextMenu_MuteTabs")); |
| + else |
| + content::RecordAction(UserMetricsAction("TabContextMenu_UnmuteTabs")); |
| + std::vector<int> indices = GetIndicesForCommand(context_index); |
| + for (size_t i = 0; i < indices.size(); ++i) |
| + SetTabAudioMuted(indices[i], mute); |
| + break; |
| + } |
| + |
| case CommandBookmarkAllTabs: { |
| content::RecordAction( |
| UserMetricsAction("TabContextMenu_BookmarkAllTabs")); |
| @@ -1091,6 +1128,16 @@ bool TabStripModel::WillContextMenuPin(int index) { |
| return !all_pinned; |
| } |
| +bool TabStripModel::WillContextMenuMute(int index) { |
|
sky
2014/09/23 22:58:17
Move this to tab_util and make it take a const std
miu
2014/09/24 22:34:15
Done.
|
| + std::vector<int> indices = GetIndicesForCommand(index); |
| + // If all tabs are muted, then we unmute, otherwise we mute. |
| + for (size_t i = 0; i < indices.size(); ++i) { |
| + if (!IsTabAudioMuted(indices[i])) |
| + return true; |
| + } |
| + return false; |
| +} |
| + |
| // static |
| bool TabStripModel::ContextMenuCommandToBrowserCommand(int cmd_id, |
| int* browser_cmd) { |