87 lines
2.7 KiB
C++
87 lines
2.7 KiB
C++
// Copyright 2014 The Chromium Authors
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
#ifndef COMPONENTS_NACL_RENDERER_MANIFEST_SERVICE_CHANNEL_H_
|
|
#define COMPONENTS_NACL_RENDERER_MANIFEST_SERVICE_CHANNEL_H_
|
|
|
|
#include <stdint.h>
|
|
|
|
#include <memory>
|
|
|
|
#include "base/files/file.h"
|
|
#include "base/functional/callback.h"
|
|
#include "base/memory/weak_ptr.h"
|
|
#include "base/process/process.h"
|
|
#include "base/synchronization/lock.h"
|
|
#include "ipc/ipc_listener.h"
|
|
|
|
namespace base {
|
|
class WaitableEvent;
|
|
} // namespace base
|
|
|
|
namespace IPC {
|
|
struct ChannelHandle;
|
|
class Message;
|
|
class SyncChannel;
|
|
} // namespace IPC
|
|
|
|
namespace nacl {
|
|
|
|
class ManifestServiceChannel : public IPC::Listener {
|
|
public:
|
|
typedef base::OnceCallback<void(base::File, uint64_t, uint64_t)>
|
|
OpenResourceCallback;
|
|
|
|
class Delegate {
|
|
public:
|
|
virtual ~Delegate() {}
|
|
|
|
// Called when PPAPI initialization in the NaCl plugin is finished.
|
|
virtual void StartupInitializationComplete() = 0;
|
|
|
|
// Called when irt_open_resource() is invoked in the NaCl plugin.
|
|
// Upon completion, callback is invoked with the file.
|
|
virtual void OpenResource(const std::string& key,
|
|
OpenResourceCallback callback) = 0;
|
|
};
|
|
|
|
ManifestServiceChannel(const IPC::ChannelHandle& handle,
|
|
base::OnceCallback<void(int32_t)> connected_callback,
|
|
std::unique_ptr<Delegate> delegate,
|
|
base::WaitableEvent* waitable_event);
|
|
|
|
ManifestServiceChannel(const ManifestServiceChannel&) = delete;
|
|
ManifestServiceChannel& operator=(const ManifestServiceChannel&) = delete;
|
|
|
|
~ManifestServiceChannel() override;
|
|
|
|
void Send(IPC::Message* message);
|
|
|
|
// Listener implementation.
|
|
bool OnMessageReceived(const IPC::Message& message) override;
|
|
void OnChannelConnected(int32_t peer_pid) override;
|
|
void OnChannelError() override;
|
|
|
|
private:
|
|
void OnStartupInitializationComplete();
|
|
void OnOpenResource(const std::string& key, IPC::Message* reply);
|
|
void DidOpenResource(IPC::Message* reply,
|
|
base::File file,
|
|
uint64_t token_lo,
|
|
uint64_t token_hi);
|
|
base::OnceCallback<void(int32_t)> connected_callback_;
|
|
std::unique_ptr<Delegate> delegate_;
|
|
std::unique_ptr<IPC::SyncChannel> channel_;
|
|
|
|
base::ProcessId peer_pid_;
|
|
|
|
// Note: This should remain the last member so it'll be destroyed and
|
|
// invalidate the weak pointers before any other members are destroyed.
|
|
base::WeakPtrFactory<ManifestServiceChannel> weak_ptr_factory_{this};
|
|
};
|
|
|
|
} // namespace nacl
|
|
|
|
#endif // COMPONENTS_NACL_RENDERER_MANIFEST_SERVICE_CHANNEL_H_
|