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_SERVICE_WIN_H_ 6f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define COMPONENTS_NACL_BROWSER_NACL_BROKER_SERVICE_WIN_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <map> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/singleton.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/weak_ptr.h" 13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "components/nacl/browser/nacl_broker_host_win.h" 14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace nacl { 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class NaClProcessHost; 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class NaClBrokerService { 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the NaClBrokerService singleton. 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static NaClBrokerService* GetInstance(); 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Can be called several times, must be called before LaunchLoader. 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool StartBroker(); 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Send a message to the broker process, causing it to launch 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // a Native Client loader process. 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool LaunchLoader(base::WeakPtr<NaClProcessHost> client, 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& loader_channel_id); 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called by NaClBrokerHost to notify the service that a loader was launched. 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnLoaderLaunched(const std::string& channel_id, 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::ProcessHandle handle); 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called by NaClProcessHost when a loader process is terminated 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnLoaderDied(); 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool LaunchDebugExceptionHandler(base::WeakPtr<NaClProcessHost> client, 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32 pid, 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::ProcessHandle process_handle, 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& startup_info); 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called by NaClBrokerHost to notify the service that a debug 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // exception handler was started. 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnDebugExceptionHandlerLaunched(int32 pid, bool success); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef std::map<std::string, base::WeakPtr<NaClProcessHost> > 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PendingLaunchesMap; 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef std::map<int, base::WeakPtr<NaClProcessHost> > 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PendingDebugExceptionHandlersMap; 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) friend struct DefaultSingletonTraits<NaClBrokerService>; 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NaClBrokerService(); 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~NaClBrokerService() {} 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NaClBrokerHost* GetBrokerHost(); 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int loaders_running_; 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PendingLaunchesMap pending_launches_; 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PendingDebugExceptionHandlersMap pending_debuggers_; 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(NaClBrokerService); 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 68f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} // namespace nacl 69f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 70f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif // COMPONENTS_NACL_BROWSER_NACL_BROKER_SERVICE_WIN_H_ 71