diff options
-rw-r--r-- | chrome/browser/tab_contents/render_view_context_menu.cc | 9 | ||||
-rw-r--r-- | chrome/common/render_messages.h | 4 | ||||
-rw-r--r-- | webkit/glue/context_menu.h | 5 | ||||
-rw-r--r-- | webkit/glue/context_menu_client_impl.cc | 2 |
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, |