Home | History | Annotate | Download | only in nacl_host
      1 // Copyright (c) 2011 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 CHROME_BROWSER_NACL_HOST_NACL_PROCESS_HOST_H_
      6 #define CHROME_BROWSER_NACL_HOST_NACL_PROCESS_HOST_H_
      7 #pragma once
      8 
      9 #include "build/build_config.h"
     10 
     11 #include "base/memory/ref_counted.h"
     12 #include "chrome/common/nacl_types.h"
     13 #include "content/browser/browser_child_process_host.h"
     14 
     15 class ChromeRenderMessageFilter;
     16 
     17 // Represents the browser side of the browser <--> NaCl communication
     18 // channel. There will be one NaClProcessHost per NaCl process
     19 // The browser is responsible for starting the NaCl process
     20 // when requested by the renderer.
     21 // After that, most of the communication is directly between NaCl plugin
     22 // running in the renderer and NaCl processes.
     23 class NaClProcessHost : public BrowserChildProcessHost {
     24  public:
     25   explicit NaClProcessHost(const std::wstring& url);
     26   ~NaClProcessHost();
     27 
     28   // Initialize the new NaCl process, returning true on success.
     29   bool Launch(ChromeRenderMessageFilter* chrome_render_message_filter,
     30               int socket_count,
     31               IPC::Message* reply_msg);
     32 
     33   virtual bool OnMessageReceived(const IPC::Message& msg);
     34 
     35   void OnProcessLaunchedByBroker(base::ProcessHandle handle);
     36 
     37  protected:
     38   virtual base::TerminationStatus GetChildTerminationStatus(int* exit_code);
     39   virtual void OnChildDied();
     40 
     41  private:
     42   // Internal class that holds the nacl::Handle objecs so that
     43   // nacl_process_host.h doesn't include NaCl headers.  Needed since it's
     44   // included by src\content, which can't depend on the NaCl gyp file because it
     45   // depends on chrome.gyp (circular dependency).
     46   struct NaClInternal;
     47 
     48   bool LaunchSelLdr();
     49 
     50   void SendStartMessage();
     51 
     52   virtual void OnProcessLaunched();
     53 
     54   virtual bool CanShutdown();
     55 
     56  private:
     57   // The ChromeRenderMessageFilter that requested this NaCl process.  We use
     58   // this for sending the reply once the process has started.
     59   scoped_refptr<ChromeRenderMessageFilter> chrome_render_message_filter_;
     60 
     61   // The reply message to send.
     62   IPC::Message* reply_msg_;
     63 
     64   // Socket pairs for the NaCl process and renderer.
     65   scoped_ptr<NaClInternal> internal_;
     66 
     67   // Windows platform flag
     68   bool running_on_wow64_;
     69 
     70   DISALLOW_COPY_AND_ASSIGN(NaClProcessHost);
     71 };
     72 
     73 #endif  // CHROME_BROWSER_NACL_HOST_NACL_PROCESS_HOST_H_
     74