summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/browser/tab_contents/render_view_context_menu.cc9
-rw-r--r--chrome/common/render_messages.h4
-rw-r--r--webkit/glue/context_menu.h5
-rw-r--r--webkit/glue/context_menu_client_impl.cc2
4 files changed, 16 insertions, 4 deletions
diff --git a/chrome/browser/tab_contents/render_view_context_menu.cc b/chrome/browser/tab_contents/render_view_context_menu.cc
index 75d02c0..62cfdbc 100644
--- a/chrome/browser/tab_contents/render_view_context_menu.cc
+++ b/chrome/browser/tab_contents/render_view_context_menu.cc
@@ -317,12 +317,17 @@ bool RenderViewContextMenu::IsItemCommandEnabled(int id) const {
// error state.
case IDS_CONTENT_CONTEXT_PLAY:
case IDS_CONTENT_CONTEXT_PAUSE:
- case IDS_CONTENT_CONTEXT_MUTE:
- case IDS_CONTENT_CONTEXT_UNMUTE:
case IDS_CONTENT_CONTEXT_LOOP:
return (params_.media_params.player_state &
ContextMenuMediaParams::IN_ERROR) == 0;
+ // Mute and unmute should also be disabled if the player has no audio.
+ case IDS_CONTENT_CONTEXT_MUTE:
+ case IDS_CONTENT_CONTEXT_UNMUTE:
+ return params_.media_params.has_audio &&
+ (params_.media_params.player_state &
+ ContextMenuMediaParams::IN_ERROR) == 0;
+
case IDS_CONTENT_CONTEXT_SAVESCREENSHOTAS:
// TODO(ajwong): Enable save screenshot after we actually implement
// this.
diff --git a/chrome/common/render_messages.h b/chrome/common/render_messages.h
index ee8c751..af0e901 100644
--- a/chrome/common/render_messages.h
+++ b/chrome/common/render_messages.h
@@ -879,10 +879,12 @@ struct ParamTraits<ContextMenuMediaParams> {
typedef ContextMenuMediaParams param_type;
static void Write(Message* m, const param_type& p) {
WriteParam(m, p.player_state);
+ WriteParam(m, p.has_audio);
}
static bool Read(const Message* m, void** iter, param_type* p) {
return
- ReadParam(m, iter, &p->player_state);
+ ReadParam(m, iter, &p->player_state) &&
+ ReadParam(m, iter, &p->has_audio);
}
};
diff --git a/webkit/glue/context_menu.h b/webkit/glue/context_menu.h
index bdeba6c..e4b556b 100644
--- a/webkit/glue/context_menu.h
+++ b/webkit/glue/context_menu.h
@@ -82,8 +82,11 @@ struct ContextMenuMediaParams {
// playing, muted, etc.
int32 player_state;
+ // Whether a playable audio track is present.
+ bool has_audio;
+
ContextMenuMediaParams()
- : player_state(NO_STATE) {
+ : player_state(NO_STATE), has_audio(false) {
}
};
diff --git a/webkit/glue/context_menu_client_impl.cc b/webkit/glue/context_menu_client_impl.cc
index b32b572..ca2dee8 100644
--- a/webkit/glue/context_menu_client_impl.cc
+++ b/webkit/glue/context_menu_client_impl.cc
@@ -207,6 +207,8 @@ WebCore::PlatformMenuDescription
if (media_element->supportsSave()) {
media_params.player_state |= ContextMenuMediaParams::CAN_SAVE;
}
+
+ media_params.has_audio = media_element->hasAudio();
}
// If it's not a link, an image, a media element, or an image/media link,