blob: 88d80f11bd02c441888e1403291875582f4b4e00 [file] [log] [blame]
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "content/renderer/pepper/pepper_audio_controller.h"
#include "content/renderer/pepper/pepper_plugin_instance_impl.h"
#include "content/renderer/pepper/ppb_audio_impl.h"
#include "content/renderer/render_frame_impl.h"
namespace content {
PepperAudioController::PepperAudioController(
PepperPluginInstanceImpl* instance)
: instance_(instance) {
DCHECK(instance_);
}
PepperAudioController::~PepperAudioController() {
if (instance_)
OnPepperInstanceDeleted();
}
void PepperAudioController::AddInstance(PPB_Audio_Impl* audio) {
if (!instance_)
return;
if (ppb_audios_.count(audio))
return;
if (ppb_audios_.empty()) {
RenderFrameImpl* render_frame = instance_->render_frame();
if (render_frame)
render_frame->PepperStartsPlayback(instance_);
}
ppb_audios_.insert(audio);
}
void PepperAudioController::RemoveInstance(PPB_Audio_Impl* audio) {
if (!instance_)
return;
if (!ppb_audios_.count(audio))
return;
ppb_audios_.erase(audio);
if (ppb_audios_.empty())
NotifyPlaybackStopsOnEmpty();
}
void PepperAudioController::SetVolume(double volume) {
if (!instance_)
return;
for (auto* ppb_audio : ppb_audios_)
ppb_audio->SetVolume(volume);
}
void PepperAudioController::OnPepperInstanceDeleted() {
DCHECK(instance_);
if (!ppb_audios_.empty())
NotifyPlaybackStopsOnEmpty();
ppb_audios_.clear();
instance_ = nullptr;
}
void PepperAudioController::NotifyPlaybackStopsOnEmpty() {
DCHECK(instance_);
RenderFrameImpl* render_frame = instance_->render_frame();
if (render_frame)
render_frame->PepperStopsPlayback(instance_);
}
} // namespace content