// 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 "base/macros.h"
#include "base/memory/ref_counted.h"
#include "base/message_loop/message_loop.h"
#include "base/threading/sequenced_worker_pool.h"
#include "mojo/application/application_runner_chromium.h"
#include "mojo/public/c/system/main.h"
#include "mojo/public/cpp/application/application_connection.h"
#include "mojo/public/cpp/application/application_delegate.h"
#include "mojo/services/native_support/interfaces/process.mojom.h"
#include "services/native_support/process_impl.h"

namespace native_support {

// TODO(vtl): Having to manually choose an arbitrary number is dumb.
const size_t kMaxWorkerThreads = 16;

class NativeSupportApp : public mojo::ApplicationDelegate {
 public:
  NativeSupportApp() {}
  ~NativeSupportApp() override {
    if (worker_pool_)
      worker_pool_->Shutdown();
  }

 private:
  // |mojo::ApplicationDelegate| override:
  bool ConfigureIncomingConnection(
      mojo::ApplicationConnection* connection) override {
    connection->GetServiceProviderImpl().AddService<Process>([this](
        const mojo::ConnectionContext& connection_context,
        mojo::InterfaceRequest<Process> process_request) {
      if (!worker_pool_) {
        worker_pool_ = new base::SequencedWorkerPool(kMaxWorkerThreads,
                                                     "NativeSupportWorker");
      }
      new ProcessImpl(worker_pool_, connection_context, process_request.Pass());
    });
    return true;
  }

  scoped_refptr<base::SequencedWorkerPool> worker_pool_;

  DISALLOW_COPY_AND_ASSIGN(NativeSupportApp);
};

}  // namespace native_support

MojoResult MojoMain(MojoHandle application_request) {
  mojo::ApplicationRunnerChromium runner(
      new native_support::NativeSupportApp());
  // We need an I/O message loop, since we'll want to watch FDs.
  runner.set_message_loop_type(base::MessageLoop::TYPE_IO);
  return runner.Run(application_request);
}
