// Copyright 2013 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 "base/message_loop/message_loop.h"
#include "gin/public/isolate_holder.h"
#include "mojo/apps/js/mojo_runner_delegate.h"
#include "mojo/common/bindings_support_impl.h"
#include "mojo/public/gles2/gles2.h"
#include "mojo/public/system/core_cpp.h"
#include "mojo/public/system/macros.h"

#if defined(WIN32)
#if !defined(CDECL)
#define CDECL __cdecl
#endif
#define MOJO_APPS_JS_EXPORT __declspec(dllexport)
#else
#define CDECL
#define MOJO_APPS_JS_EXPORT __attribute__((visibility("default")))
#endif

namespace mojo {
namespace apps {

void Start(MojoHandle pipe, const std::string& module) {
  base::MessageLoop loop;

  gin::IsolateHolder instance;
  MojoRunnerDelegate delegate;
  gin::Runner runner(&delegate, instance.isolate());
  delegate.Start(&runner, pipe, module);

  base::MessageLoop::current()->Run();
}

}  // namespace apps
}  // namespace mojo

extern "C" MOJO_APPS_JS_EXPORT MojoResult CDECL MojoMain(MojoHandle pipe) {
  mojo::common::BindingsSupportImpl bindings_support;
  mojo::BindingsSupport::Set(&bindings_support);
  MojoGLES2Initialize();

  mojo::apps::Start(pipe, "mojo/apps/js/main");

  MojoGLES2Terminate();
  mojo::BindingsSupport::Set(NULL);
  return MOJO_RESULT_OK;
}
