forked from mirrors/gecko-dev
		
	 af7d5859d7
			
		
	
	
		af7d5859d7
		
	
	
	
	
		
			
			dom/media/ipc/RDDProcessManager.cpp(320,21): error: comparison of integers of different signs: 'base::ProcessId' (aka 'unsigned long') and 'int' [-Werror,-Wsign-compare]
      gpuProcessPid != -1 ? gpuProcessPid : base::GetCurrentProcId();
      ~~~~~~~~~~~~~ ^  ~~
dom/media/ipc/RDDProcessManager.cpp(332,21): error: comparison of integers of different signs: 'base::ProcessId' (aka 'unsigned long') and 'int' [-Werror,-Wsign-compare]
  if (gpuProcessPid != -1) {
      ~~~~~~~~~~~~~ ^  ~~
gfx/layers/ipc/SharedSurfacesParent.cpp(360,38): error: comparison of integers of different signs: 'base::ProcessId' (aka 'unsigned long') and 'int' [-Werror,-Wsign-compare]
    if (!gpm || gpm->GPUProcessPid() != -1) {
                ~~~~~~~~~~~~~~~~~~~~ ^  ~~
ipc/glue/MessageChannel.cpp(2145,13): error: comparison of integers of different signs: 'int32_t' (aka 'int') and 'const base::ProcessId' (aka 'const unsigned long') [-Werror,-Wsign-compare]
    if (pid != base::kInvalidProcessId &&
        ~~~ ^  ~~~~~~~~~~~~~~~~~~~~~~~
Differential Revision: https://phabricator.services.mozilla.com/D144688
		
	
			
		
			
				
	
	
		
			152 lines
		
	
	
	
		
			4.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			152 lines
		
	
	
	
		
			4.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 | |
| /* This Source Code Form is subject to the terms of the Mozilla Public
 | |
|  * License, v. 2.0. If a copy of the MPL was not distributed with this
 | |
|  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 | |
| 
 | |
| #ifndef mozilla_net_SocketProcessHost_h
 | |
| #define mozilla_net_SocketProcessHost_h
 | |
| 
 | |
| #include "mozilla/Maybe.h"
 | |
| #include "mozilla/UniquePtr.h"
 | |
| #include "mozilla/ipc/GeckoChildProcessHost.h"
 | |
| #include "mozilla/MemoryReportingProcess.h"
 | |
| #include "mozilla/ipc/TaskFactory.h"
 | |
| 
 | |
| namespace mozilla {
 | |
| 
 | |
| #if defined(XP_LINUX) && defined(MOZ_SANDBOX)
 | |
| class SandboxBroker;
 | |
| #endif
 | |
| 
 | |
| namespace net {
 | |
| 
 | |
| class SocketProcessParent;
 | |
| 
 | |
| // SocketProcessHost is the "parent process" container for a subprocess handle
 | |
| // and IPC connection. It owns the parent process IPDL actor, which in this
 | |
| // case, is a SocketProcessParent.
 | |
| // SocketProcessHost is allocated and managed by nsIOService in parent process.
 | |
| class SocketProcessHost final : public mozilla::ipc::GeckoChildProcessHost {
 | |
|   friend class SocketProcessParent;
 | |
| 
 | |
|  public:
 | |
|   class Listener {
 | |
|    public:
 | |
|     NS_INLINE_DECL_THREADSAFE_REFCOUNTING(Listener)
 | |
| 
 | |
|     // Called when the process of launching the process is complete.
 | |
|     virtual void OnProcessLaunchComplete(SocketProcessHost* aHost,
 | |
|                                          bool aSucceeded) = 0;
 | |
| 
 | |
|     // Called when the channel is closed but Shutdown() is not invoked.
 | |
|     virtual void OnProcessUnexpectedShutdown(SocketProcessHost* aHost) = 0;
 | |
| 
 | |
|    protected:
 | |
|     virtual ~Listener() = default;
 | |
|   };
 | |
| 
 | |
|   explicit SocketProcessHost(Listener* listener);
 | |
| 
 | |
|   // Launch the socket process asynchronously.
 | |
|   // The OnProcessLaunchComplete listener callback will be invoked
 | |
|   // either when a connection has been established, or if a connection
 | |
|   // could not be established due to an asynchronous error.
 | |
|   bool Launch();
 | |
| 
 | |
|   // Inform the socket process that it should clean up its resources and shut
 | |
|   // down. This initiates an asynchronous shutdown sequence. After this method
 | |
|   // returns, it is safe for the caller to forget its pointer to the
 | |
|   // SocketProcessHost.
 | |
|   void Shutdown();
 | |
| 
 | |
|   // Return the actor for the top-level actor of the process. Return null if
 | |
|   // the process is not connected.
 | |
|   SocketProcessParent* GetActor() const {
 | |
|     MOZ_ASSERT(NS_IsMainThread());
 | |
| 
 | |
|     return mSocketProcessParent.get();
 | |
|   }
 | |
| 
 | |
|   bool IsConnected() const {
 | |
|     MOZ_ASSERT(NS_IsMainThread());
 | |
| 
 | |
|     return !!mSocketProcessParent;
 | |
|   }
 | |
| 
 | |
|   // Called on the IO thread.
 | |
|   void OnChannelConnected(base::ProcessId peer_pid) override;
 | |
|   void OnChannelError() override;
 | |
| 
 | |
| #if defined(XP_MACOSX) && defined(MOZ_SANDBOX)
 | |
|   // Return the sandbox type to be used with this process type.
 | |
|   static MacSandboxType GetMacSandboxType();
 | |
| #endif
 | |
| 
 | |
|  private:
 | |
|   ~SocketProcessHost();
 | |
| 
 | |
|   // Called on the main thread.
 | |
|   void OnChannelConnectedTask();
 | |
|   void OnChannelErrorTask();
 | |
| 
 | |
|   // Called on the main thread after a connection has been established.
 | |
|   void InitAfterConnect(bool aSucceeded);
 | |
| 
 | |
|   // Called on the main thread when the mSocketParent actor is shutting down.
 | |
|   void OnChannelClosed();
 | |
| 
 | |
|   void DestroyProcess();
 | |
| 
 | |
| #if defined(XP_MACOSX) && defined(MOZ_SANDBOX)
 | |
|   static bool sLaunchWithMacSandbox;
 | |
| 
 | |
|   // Sandbox the Socket process at launch for all instances
 | |
|   bool IsMacSandboxLaunchEnabled() override { return sLaunchWithMacSandbox; }
 | |
| 
 | |
|   // Override so we can turn on Socket process-specific sandbox logging
 | |
|   bool FillMacSandboxInfo(MacSandboxInfo& aInfo) override;
 | |
| #endif
 | |
| 
 | |
|   DISALLOW_COPY_AND_ASSIGN(SocketProcessHost);
 | |
| 
 | |
|   RefPtr<Listener> mListener;
 | |
|   mozilla::Maybe<mozilla::ipc::TaskFactory<SocketProcessHost>> mTaskFactory;
 | |
| 
 | |
|   enum class LaunchPhase { Unlaunched, Waiting, Complete };
 | |
|   LaunchPhase mLaunchPhase;
 | |
| 
 | |
|   UniquePtr<SocketProcessParent> mSocketProcessParent;
 | |
|   // mShutdownRequested is set to true only when Shutdown() is called.
 | |
|   // If mShutdownRequested is false and the IPC channel is closed,
 | |
|   // OnProcessUnexpectedShutdown will be invoked.
 | |
|   bool mShutdownRequested;
 | |
|   bool mChannelClosed;
 | |
| 
 | |
| #if defined(XP_LINUX) && defined(MOZ_SANDBOX)
 | |
|   UniquePtr<SandboxBroker> mSandboxBroker;
 | |
| #endif
 | |
| };
 | |
| 
 | |
| class SocketProcessMemoryReporter : public MemoryReportingProcess {
 | |
|  public:
 | |
|   NS_INLINE_DECL_THREADSAFE_REFCOUNTING(SocketProcessMemoryReporter, override)
 | |
| 
 | |
|   SocketProcessMemoryReporter() = default;
 | |
| 
 | |
|   bool IsAlive() const override;
 | |
| 
 | |
|   bool SendRequestMemoryReport(
 | |
|       const uint32_t& aGeneration, const bool& aAnonymize,
 | |
|       const bool& aMinimizeMemoryUsage,
 | |
|       const Maybe<mozilla::ipc::FileDescriptor>& aDMDFile) override;
 | |
| 
 | |
|   int32_t Pid() const override;
 | |
| 
 | |
|  protected:
 | |
|   virtual ~SocketProcessMemoryReporter() = default;
 | |
| };
 | |
| 
 | |
| }  // namespace net
 | |
| }  // namespace mozilla
 | |
| 
 | |
| #endif  // mozilla_net_SocketProcessHost_h
 |