// Copyright 2014 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 "chromecast/renderer/cast_render_process_observer.h"

#include "build/build_config.h"
#include "chromecast/renderer/media/capabilities_message_filter.h"
#include "chromecast/renderer/media/cma_message_filter_proxy.h"
#include "content/public/renderer/render_thread.h"

namespace chromecast {
namespace shell {

CastRenderProcessObserver::CastRenderProcessObserver() {
  content::RenderThread* thread = content::RenderThread::Get();
  thread->AddObserver(this);
  CreateCustomFilters();
}

CastRenderProcessObserver::~CastRenderProcessObserver() {
  // CastRenderProcessObserver outlives content::RenderThread.
  // No need to explicitly call RemoveObserver in teardown.
}

void CastRenderProcessObserver::CreateCustomFilters() {
  content::RenderThread* thread = content::RenderThread::Get();
#if !defined(OS_ANDROID)
  cma_message_filter_proxy_ =
      new media::CmaMessageFilterProxy(thread->GetIOMessageLoopProxy());
  thread->AddFilter(cma_message_filter_proxy_.get());
#endif  // !defined(OS_ANDROID)
  capabilities_message_filter_ = new CapabilitiesMessageFilter;
  thread->AddFilter(capabilities_message_filter_.get());
}

void CastRenderProcessObserver::OnRenderProcessShutdown() {
  content::RenderThread* thread = content::RenderThread::Get();
#if !defined(OS_ANDROID)
  if (cma_message_filter_proxy_.get()) {
    thread->RemoveFilter(cma_message_filter_proxy_.get());
    cma_message_filter_proxy_ = nullptr;
  }
#endif  // !defined(OS_ANDROID)
  if (capabilities_message_filter_.get()) {
    thread->RemoveFilter(capabilities_message_filter_.get());
    capabilities_message_filter_ = nullptr;
  }
}

}  // namespace shell
}  // namespace chromecast
