1558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch// Copyright 2013 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#ifndef COMPONENTS_NACL_BROKER_NACL_BROKER_LISTENER_H_ 6558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#define COMPONENTS_NACL_BROKER_NACL_BROKER_LISTENER_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 9a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch#include "base/process/process.h" 10a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch#include "components/nacl/common/nacl_types.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/common/sandboxed_process_launcher_delegate.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ipc/ipc_listener.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace IPC { 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class Channel; 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The BrokerThread class represents the thread that handles the messages from 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the browser process and starts NaCl loader processes. 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class NaClBrokerListener : public content::SandboxedProcessLauncherDelegate, 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public IPC::Listener { 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NaClBrokerListener(); 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~NaClBrokerListener(); 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Listen(); 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // content::SandboxedProcessLauncherDelegate implementation: 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void PreSpawnTarget(sandbox::TargetPolicy* policy, 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool* success) OVERRIDE; 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // IPC::Listener implementation. 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnChannelConnected(int32 peer_pid) OVERRIDE; 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool OnMessageReceived(const IPC::Message& msg) OVERRIDE; 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnChannelError() OVERRIDE; 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnLaunchLoaderThroughBroker(const std::string& loader_channel_id); 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnLaunchDebugExceptionHandler(int32 pid, 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::ProcessHandle process_handle, 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& startup_info); 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnStopBroker(); 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::ProcessHandle browser_handle_; 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<IPC::Channel> channel_; 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(NaClBrokerListener); 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 50558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#endif // COMPONENTS_NACL_BROKER_NACL_BROKER_LISTENER_H_ 51