blob: 918c2c0bba838a31e4fa36bc55ae9c825c10e2c5 [file] [log] [blame]
// 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 COMPONENTS_ARC_ARC_BRIDGE_BOOTSTRAP_H_
#define COMPONENTS_ARC_ARC_BRIDGE_BOOTSTRAP_H_
#include <memory>
#include "base/macros.h"
#include "base/sequenced_task_runner.h"
#include "base/single_thread_task_runner.h"
#include "components/arc/common/arc_bridge.mojom.h"
namespace arc {
// Starts the ARC instance and bootstraps the bridge connection.
// Clients should implement the Delegate to be notified upon communications
// being available.
class ArcBridgeBootstrap {
public:
class Delegate {
public:
virtual void OnConnectionEstablished(
mojom::ArcBridgeInstancePtr instance_ptr) = 0;
virtual void OnStopped() = 0;
};
// Creates a default instance of ArcBridgeBootstrap.
static std::unique_ptr<ArcBridgeBootstrap> Create();
virtual ~ArcBridgeBootstrap() = default;
// This must be called before calling Start() or Stop(). |delegate| is owned
// by the caller and must outlive this instance.
void set_delegate(Delegate* delegate) { delegate_ = delegate; }
// Starts and bootstraps a connection with the instance. The Delegate's
// OnConnectionEstablished() will be called if the bootstrapping is
// successful, or OnStopped() if it is not.
virtual void Start() = 0;
// Stops the currently-running instance.
virtual void Stop() = 0;
protected:
ArcBridgeBootstrap() = default;
// Owned by the caller.
Delegate* delegate_ = nullptr;
private:
DISALLOW_COPY_AND_ASSIGN(ArcBridgeBootstrap);
};
} // namespace arc
#endif // COMPONENTS_ARC_ARC_BRIDGE_BOOTSTRAP_H_