1 // Copyright 2014 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef COMPONENTS_NACL_RENDERER_MANIFEST_SERVICE_CHANNEL_H_ 6 #define COMPONENTS_NACL_RENDERER_MANIFEST_SERVICE_CHANNEL_H_ 7 8 #include "base/callback.h" 9 #include "base/files/file.h" 10 #include "base/macros.h" 11 #include "base/memory/scoped_ptr.h" 12 #include "base/memory/weak_ptr.h" 13 #include "base/process/process.h" 14 #include "base/synchronization/lock.h" 15 #include "ipc/ipc_listener.h" 16 17 namespace base { 18 class WaitableEvent; 19 } // namespace base 20 21 namespace IPC { 22 struct ChannelHandle; 23 class Message; 24 class SyncChannel; 25 } // namespace IPC 26 27 namespace nacl { 28 29 class ManifestServiceChannel : public IPC::Listener { 30 public: 31 typedef base::Callback<void(base::File, uint64_t, uint64_t)> 32 OpenResourceCallback; 33 34 class Delegate { 35 public: 36 virtual ~Delegate() {} 37 38 // Called when PPAPI initialization in the NaCl plugin is finished. 39 virtual void StartupInitializationComplete() = 0; 40 41 // Called when irt_open_resource() is invoked in the NaCl plugin. 42 // Upon completion, callback is invoked with the file. 43 virtual void OpenResource( 44 const std::string& key, 45 const OpenResourceCallback& callback) = 0; 46 }; 47 48 ManifestServiceChannel( 49 const IPC::ChannelHandle& handle, 50 const base::Callback<void(int32_t)>& connected_callback, 51 scoped_ptr<Delegate> delegate, 52 base::WaitableEvent* waitable_event); 53 virtual ~ManifestServiceChannel(); 54 55 void Send(IPC::Message* message); 56 57 // Listener implementation. 58 virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; 59 virtual void OnChannelConnected(int32 peer_pid) OVERRIDE; 60 virtual void OnChannelError() OVERRIDE; 61 62 private: 63 void OnStartupInitializationComplete(); 64 void OnOpenResource(const std::string& key, IPC::Message* reply); 65 void DidOpenResource(IPC::Message* reply, 66 base::File file, 67 uint64_t token_lo, 68 uint64_t token_hi); 69 base::Callback<void(int32_t)> connected_callback_; 70 scoped_ptr<Delegate> delegate_; 71 scoped_ptr<IPC::SyncChannel> channel_; 72 73 base::ProcessId peer_pid_; 74 75 // Note: This should remain the last member so it'll be destroyed and 76 // invalidate the weak pointers before any other members are destroyed. 77 base::WeakPtrFactory<ManifestServiceChannel> weak_ptr_factory_; 78 79 DISALLOW_COPY_AND_ASSIGN(ManifestServiceChannel); 80 }; 81 82 } // namespace nacl 83 84 #endif // COMPONENTS_NACL_RENDERER_MANIFEST_SERVICE_CHANNEL_H_ 85