// 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 "build/build_config.h"

#include <stdint.h>

#include "base/message_loop/message_loop.h"
#include "base/run_loop.h"
#include "base/threading/thread.h"
#include "ipc/ipc_logging.h"
#include "ppapi/nacl_irt/irt_interfaces.h"
#include "ppapi/nacl_irt/irt_ppapi.h"
#include "ppapi/nacl_irt/plugin_startup.h"
#include "ppapi/nacl_irt/ppapi_dispatcher.h"
#include "ppapi/nacl_irt/public/irt_ppapi.h"
#include "ppapi/proxy/plugin_globals.h"
#include "ppapi/shared_impl/ppb_audio_shared.h"

static struct PP_StartFunctions g_pp_functions;

void PpapiPluginRegisterThreadCreator(
    const struct PP_ThreadFunctions* thread_functions) {
  // Initialize all classes that need to create threads that call back into
  // user code.
  ppapi::PPB_Audio_Shared::SetThreadFunctions(thread_functions);
}

int irt_ppapi_start(const struct PP_StartFunctions* funcs) {
  g_pp_functions = *funcs;

  base::MessageLoop loop;
  ppapi::proxy::PluginGlobals plugin_globals(
      scoped_refptr<base::TaskRunner>(ppapi::GetIOThread()->task_runner()));

  ppapi::PpapiDispatcher ppapi_dispatcher(
      ppapi::GetIOThread()->task_runner(), ppapi::GetShutdownEvent(),
      ppapi::GetBrowserIPCChannelHandle(),
      ppapi::GetRendererIPCChannelHandle());
  plugin_globals.SetPluginProxyDelegate(&ppapi_dispatcher);

  base::RunLoop().Run();

  return 0;
}

int32_t PPP_InitializeModule(PP_Module module_id,
                             PPB_GetInterface get_browser_interface) {
  return g_pp_functions.PPP_InitializeModule(module_id, get_browser_interface);
}

void PPP_ShutdownModule(void) {
  g_pp_functions.PPP_ShutdownModule();
}

const void* PPP_GetInterface(const char* interface_name) {
  return g_pp_functions.PPP_GetInterface(interface_name);
}

const struct nacl_irt_ppapihook nacl_irt_ppapihook = {
  irt_ppapi_start,
  PpapiPluginRegisterThreadCreator,
};
