// Copyright 2015 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 "sky/shell/android/platform_service_provider_android.h"

#include "base/android/jni_android.h"
#include "base/bind.h"
#include "base/trace_event/trace_event.h"
#include "jni/PlatformServiceProvider_jni.h"
#include "mojo/public/cpp/bindings/interface_request.h"
#include "sky/shell/service_provider.h"

namespace sky {
namespace shell {
namespace {

void CreatePlatformServiceProvider(
    mojo::InterfaceRequest<mojo::ServiceProvider> request) {
  Java_PlatformServiceProvider_create(
      base::android::AttachCurrentThread(),
      base::android::GetApplicationContext(),
      request.PassMessagePipe().release().value());
}

}  // namespace

bool RegisterPlatformServiceProvider(JNIEnv* env) {
  return RegisterNativesImpl(env);
}

mojo::ServiceProviderPtr CreateServiceProvider(
    ServiceProviderContext* context) {
  mojo::MessagePipe pipe;
  context->platform_task_runner->PostTask(
      FROM_HERE,
      base::Bind(CreatePlatformServiceProvider,
                 base::Passed(mojo::MakeRequest<mojo::ServiceProvider>(
                     pipe.handle1.Pass()))));
  return mojo::MakeProxy(
      mojo::InterfacePtrInfo<mojo::ServiceProvider>(pipe.handle0.Pass(), 0u));
}

}  // namespace shell
}  // namespace sky
