Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(908)

Unified Diff: content/renderer/render_frame_impl.cc

Issue 2065513004: Expose flash playback status and volume control to content renderer (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@audio_focus_manager
Patch Set: added TODO Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/renderer/render_frame_impl.cc
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
index f327bc6756e8596333fd0b7248a37e5c5dbcd6c5..2585b04045abf77b138efd2ef6a8258a509927b1 100644
--- a/content/renderer/render_frame_impl.cc
+++ b/content/renderer/render_frame_impl.cc
@@ -116,6 +116,7 @@
#include "content/renderer/navigation_state_impl.h"
#include "content/renderer/notification_permission_dispatcher.h"
#include "content/renderer/pepper/plugin_instance_throttler_impl.h"
+#include "content/renderer/pepper/ppb_audio_impl.h"
#include "content/renderer/presentation/presentation_dispatcher.h"
#include "content/renderer/push_messaging/push_messaging_dispatcher.h"
#include "content/renderer/render_frame_proxy.h"
@@ -1478,6 +1479,9 @@ bool RenderFrameImpl::OnMessageReceived(const IPC::Message& msg) {
IPC_MESSAGE_HANDLER(FrameMsg_ContextMenuClosed, OnContextMenuClosed)
IPC_MESSAGE_HANDLER(FrameMsg_CustomContextMenuAction,
OnCustomContextMenuAction)
+#if defined(ENABLE_PLUGINS)
+ IPC_MESSAGE_HANDLER(FrameMsg_SetPepperVolume, OnSetPepperVolume)
+#endif //defined(ENABLE_PLUGINS)
IPC_MESSAGE_HANDLER(InputMsg_Undo, OnUndo)
IPC_MESSAGE_HANDLER(InputMsg_Redo, OnRedo)
IPC_MESSAGE_HANDLER(InputMsg_Cut, OnCut)
@@ -6188,7 +6192,8 @@ void RenderFrameImpl::PepperInstanceCreated(
PepperPluginInstanceImpl* instance) {
active_pepper_instances_.insert(instance);
- Send(new FrameHostMsg_PepperInstanceCreated(routing_id_));
+ Send(new FrameHostMsg_PepperInstanceCreated(routing_id_,
+ instance->pp_instance()));
}
void RenderFrameImpl::PepperInstanceDeleted(
@@ -6203,7 +6208,8 @@ void RenderFrameImpl::PepperInstanceDeleted(
RenderFrameImpl* const render_frame = instance->render_frame();
if (render_frame)
render_frame->Send(
- new FrameHostMsg_PepperInstanceDeleted(render_frame->GetRoutingID()));
+ new FrameHostMsg_PepperInstanceDeleted(render_frame->GetRoutingID(),
+ instance->pp_instance()));
}
void RenderFrameImpl::PepperFocusChanged(PepperPluginInstanceImpl* instance,
@@ -6218,6 +6224,40 @@ void RenderFrameImpl::PepperFocusChanged(PepperPluginInstanceImpl* instance,
GetRenderWidget()->UpdateSelectionBounds();
}
+void RenderFrameImpl::PepperStartsPlayback(
+ PepperPluginInstanceImpl* instance, PPB_Audio_Impl* ppb_audio) {
+ // Only send start signal for the first PPB_Audio_Impl starts playback.
+ if (pepper_audios_map_[instance->pp_instance()].empty()) {
+ RenderFrameImpl* const render_frame = instance->render_frame();
+ if (render_frame)
+ render_frame->Send(
+ new FrameHostMsg_PepperStartsPlayback(render_frame->GetRoutingID(),
+ instance->pp_instance()));
+ }
+ // TODO(zqzhang): it is unsure that whether a pepper instance can
+ // have multiple audio instances. Currently let the pepper instance
+ // delegates the SetVolume() method of all it's audio instances.
+ pepper_audios_map_[instance->pp_instance()].insert(ppb_audio);
+}
+
+void RenderFrameImpl::PepperStopsPlayback(
+ PepperPluginInstanceImpl* instance, PPB_Audio_Impl* ppb_audio) {
+ pepper_audios_map_[instance->pp_instance()].erase(ppb_audio);
+
+ RenderFrameImpl* const render_frame = instance->render_frame();
+ // Only send stop signal for the last PPB_Audio_Impl stops playback.
+ if (render_frame && pepper_audios_map_[instance->pp_instance()].empty())
+ render_frame->Send(
+ new FrameHostMsg_PepperStopsPlayback(render_frame->GetRoutingID(),
+ instance->pp_instance()));
+}
+
+void RenderFrameImpl::OnSetPepperVolume(int32_t pp_instance, double volume) {
+ if (pepper_audios_map_.count(pp_instance) == 0) return;
+ for (auto ppb_audio : pepper_audios_map_[pp_instance]) {
+ ppb_audio->SetVolume(volume);
+ }
+}
#endif // ENABLE_PLUGINS
void RenderFrameImpl::RenderWidgetSetFocus(bool enable) {

Powered by Google App Engine
This is Rietveld 408576698