15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 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) 5f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#ifndef COMPONENTS_NACL_BROWSER_NACL_BROKER_HOST_WIN_H_ 6f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define COMPONENTS_NACL_BROWSER_NACL_BROKER_HOST_WIN_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 12bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch#include "base/process/process.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/browser_child_process_host_delegate.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content { 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BrowserChildProcessHost; 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace nacl { 20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class NaClBrokerHost : public content::BrowserChildProcessHostDelegate { 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NaClBrokerHost(); 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~NaClBrokerHost(); 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This function starts the broker process. It needs to be called 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // before loaders can be launched. 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool Init(); 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Send a message to the broker process, causing it to launch 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // a Native Client loader process. 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool LaunchLoader(const std::string& loader_channel_id); 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool LaunchDebugExceptionHandler(int32 pid, 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::ProcessHandle process_handle, 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& startup_info); 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Stop the broker process. 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void StopBroker(); 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if the process has been asked to terminate. If true, this 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // object should no longer be used; it will eventually be destroyed by 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // BrowserChildProcessHostImpl::OnChildDisconnected() 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool IsTerminating() { return is_terminating_; } 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Handler for NaClProcessMsg_LoaderLaunched message 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnLoaderLaunched(const std::string& loader_channel_id, 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::ProcessHandle handle); 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Handler for NaClProcessMsg_DebugExceptionHandlerLaunched message 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnDebugExceptionHandlerLaunched(int32 pid, bool success); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // BrowserChildProcessHostDelegate implementation: 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool OnMessageReceived(const IPC::Message& msg); 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<content::BrowserChildProcessHost> process_; 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_terminating_; 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(NaClBrokerHost); 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 62f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} // namespace nacl 63f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 64f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif // COMPONENTS_NACL_BROWSER_NACL_BROKER_HOST_WIN_H_ 65