// 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.

#ifndef SERVICES_REAPER_REAPER_BINDING_H_
#define SERVICES_REAPER_REAPER_BINDING_H_

#include "mojo/public/cpp/bindings/interface_request.h"
#include "mojo/public/cpp/bindings/strong_binding.h"
#include "services/reaper/reaper.mojom.h"
#include "services/reaper/transfer.mojom.h"
#include "url/gurl.h"

namespace reaper {

class ReaperImpl;

// ReaperBinding stores the authorative identity (as provided by the shell) of
// the connecting application, then forwards calls onto the real implementation.
class ReaperBinding : public Reaper {
 public:
  ReaperBinding(const GURL& caller_url,
                ReaperImpl* impl,
                mojo::InterfaceRequest<Reaper> request);

 protected:
  ~ReaperBinding() override = default;

 private:
  // Reaper
  void GetApplicationSecret(
      const mojo::Callback<void(uint64)>& callback) override;
  void CreateReference(uint32 source_node, uint32 target_node) override;
  void DropNode(uint32 node) override;
  void StartTransfer(uint32 node,
                     mojo::InterfaceRequest<Transfer> request) override;
  void Ping(const mojo::Closure& callback) override;

  GURL caller_url_;
  ReaperImpl* impl_;
  mojo::StrongBinding<Reaper> binding_;

  DISALLOW_COPY_AND_ASSIGN(ReaperBinding);
};

}  // namespace reaper

#endif  // SERVICES_REAPER_REAPER_BINDING_H_
