AudioChannelState
AudioChannelServiceChild::GetState(AudioChannelAgent* aAgent, bool aElementHidden)
{
  AudioChannelAgentData* data;
  if (!mAgents.Get(aAgent, &data)) {
    return AUDIO_CHANNEL_STATE_MUTED;
  }

  AudioChannelState state = AUDIO_CHANNEL_STATE_MUTED;
  bool oldElementHidden = data->mElementHidden;

  UpdateChannelType(data->mChannel, CONTENT_PROCESS_ID_MAIN, aElementHidden,
                    oldElementHidden);

  // Update visibility.
  data->mElementHidden = aElementHidden;

  ContentChild* cc = ContentChild::GetSingleton();
  cc->SendAudioChannelGetState(data->mChannel, aElementHidden, oldElementHidden,
                               &state);
  data->mState = state;
  cc->SendAudioChannelChangedNotification();

  return state;
}
bool
AudioChannelServiceChild::GetMuted(AudioChannelAgent* aAgent, bool aElementHidden)
{
  AudioChannelAgentData data;
  if (!mAgents.Get(aAgent, &data)) {
    return true;
  }

  ContentChild *cc = ContentChild::GetSingleton();
  bool muted = true;

  if (cc) {
    cc->SendAudioChannelGetMuted(data.mType, aElementHidden, data.mElementHidden, &muted);
  }

  // Update visibility.
  if (data.mElementHidden != aElementHidden || data.mMuted != muted) {
    data.mElementHidden = aElementHidden;
    data.mMuted = muted;
    mAgents.Put(aAgent, data);
  }

  if (cc) {
    cc->SendAudioChannelChangedNotification();
  }

  return muted;
}