// Copyright (c) 2012 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 CONTENT_RENDERER_PEPPER_PPB_BROKER_IMPL_H_ #define CONTENT_RENDERER_PEPPER_PPB_BROKER_IMPL_H_ #include "base/basictypes.h" #include "base/compiler_specific.h" #include "base/memory/weak_ptr.h" #include "base/process/process.h" #include "ipc/ipc_listener.h" #include "ppapi/c/pp_completion_callback.h" #include "ppapi/c/trusted/ppb_broker_trusted.h" #include "ppapi/shared_impl/resource.h" #include "ppapi/shared_impl/tracked_callback.h" #include "ppapi/thunk/ppb_broker_api.h" class GURL; namespace IPC { struct ChannelHandle; } namespace content { class PepperBroker; class PPB_Broker_Impl : public ppapi::Resource, public ppapi::thunk::PPB_Broker_API, public IPC::Listener, public base::SupportsWeakPtr { public: explicit PPB_Broker_Impl(PP_Instance instance); // Resource override. virtual ppapi::thunk::PPB_Broker_API* AsPPB_Broker_API() OVERRIDE; // PPB_BrokerTrusted implementation. virtual int32_t Connect( scoped_refptr connect_callback) OVERRIDE; virtual int32_t GetHandle(int32_t* handle) OVERRIDE; // Returns the URL of the document this plug-in runs in. This is necessary to // decide whether to grant access to the PPAPI broker. GURL GetDocumentUrl(); void BrokerConnected(int32_t handle, int32_t result); private: virtual ~PPB_Broker_Impl(); // IPC::Listener implementation. virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; void OnPpapiBrokerChannelCreated(base::ProcessId broker_pid, const IPC::ChannelHandle& handle); void OnPpapiBrokerPermissionResult(bool result); // PluginDelegate ppapi broker object. // We don't own this pointer but are responsible for calling Disconnect on it. PepperBroker* broker_; // Callback invoked from BrokerConnected. scoped_refptr connect_callback_; // Pipe handle for the plugin instance to use to communicate with the broker. // Never owned by this object. int32_t pipe_handle_; int routing_id_; DISALLOW_COPY_AND_ASSIGN(PPB_Broker_Impl); }; } // namespace content #endif // CONTENT_RENDERER_PEPPER_PPB_BROKER_IMPL_H_