Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef CHROME_BROWSER_CRASH_HANDLER_HOST_LINUX_H_ | 5 #ifndef CHROME_BROWSER_CRASH_HANDLER_HOST_LINUX_H_ |
| 6 #define CHROME_BROWSER_CRASH_HANDLER_HOST_LINUX_H_ | 6 #define CHROME_BROWSER_CRASH_HANDLER_HOST_LINUX_H_ |
| 7 | 7 |
| 8 #include "base/compiler_specific.h" | 8 #include "base/compiler_specific.h" |
| 9 #include "base/message_loop.h" | 9 #include "base/message_loop.h" |
| 10 | 10 |
| 11 #if defined(USE_LINUX_BREAKPAD) | |
| 12 #include <sys/types.h> | 11 #include <sys/types.h> |
|
Lei Zhang
2013/07/15 20:55:35
ditto, sort all the #includes
jam
2013/07/15 21:15:28
Done.
| |
| 13 | 12 |
| 14 #include <string> | 13 #include <string> |
| 15 | 14 |
| 16 #include "base/memory/scoped_ptr.h" | 15 #include "base/memory/scoped_ptr.h" |
| 17 | 16 |
| 18 struct BreakpadInfo; | 17 struct BreakpadInfo; |
| 19 | 18 |
| 20 namespace base { | 19 namespace base { |
| 21 class Thread; | 20 class Thread; |
| 22 } | 21 } |
| 23 #endif // defined(USE_LINUX_BREAKPAD) | |
| 24 | 22 |
| 25 template <typename T> struct DefaultSingletonTraits; | 23 template <typename T> struct DefaultSingletonTraits; |
| 26 | 24 |
| 27 // This is the base class for singleton objects which crash dump renderers and | 25 // This is the base class for singleton objects which crash dump renderers and |
| 28 // plugins on Linux or Android. We perform the crash dump from the browser | 26 // plugins on Linux or Android. We perform the crash dump from the browser |
| 29 // because it allows us to be outside the sandbox. | 27 // because it allows us to be outside the sandbox. |
| 30 // | 28 // |
| 31 // PluginCrashHandlerHostLinux and RendererCrashHandlerHostLinux are | 29 // PluginCrashHandlerHostLinux and RendererCrashHandlerHostLinux are |
| 32 // singletons that handle plugin and renderer crashes, respectively. | 30 // singletons that handle plugin and renderer crashes, respectively. |
| 33 // | 31 // |
| 34 // Processes signal that they need to be dumped by sending a datagram over a | 32 // Processes signal that they need to be dumped by sending a datagram over a |
| 35 // UNIX domain socket. All processes of the same type share the client end of | 33 // UNIX domain socket. All processes of the same type share the client end of |
| 36 // this socket which is installed in their descriptor table before exec. | 34 // this socket which is installed in their descriptor table before exec. |
| 37 class CrashHandlerHostLinux : public base::MessageLoopForIO::Watcher, | 35 class CrashHandlerHostLinux : public base::MessageLoopForIO::Watcher, |
| 38 public base::MessageLoop::DestructionObserver { | 36 public base::MessageLoop::DestructionObserver { |
| 39 public: | 37 public: |
| 40 // Get the file descriptor which processes should be given in order to signal | 38 // Get the file descriptor which processes should be given in order to signal |
| 41 // crashes to the browser. | 39 // crashes to the browser. |
| 42 int GetDeathSignalSocket() const { | 40 int GetDeathSignalSocket() const { |
| 43 return process_socket_; | 41 return process_socket_; |
| 44 } | 42 } |
| 45 | 43 |
| 46 // MessagePumbLibevent::Watcher impl: | 44 // MessagePumbLibevent::Watcher impl: |
| 47 virtual void OnFileCanWriteWithoutBlocking(int fd) OVERRIDE; | 45 virtual void OnFileCanWriteWithoutBlocking(int fd) OVERRIDE; |
| 48 virtual void OnFileCanReadWithoutBlocking(int fd) OVERRIDE; | 46 virtual void OnFileCanReadWithoutBlocking(int fd) OVERRIDE; |
| 49 | 47 |
| 50 // MessageLoop::DestructionObserver impl: | 48 // MessageLoop::DestructionObserver impl: |
| 51 virtual void WillDestroyCurrentMessageLoop() OVERRIDE; | 49 virtual void WillDestroyCurrentMessageLoop() OVERRIDE; |
| 52 | 50 |
| 53 #if defined(USE_LINUX_BREAKPAD) | |
| 54 // Whether we are shutting down or not. | 51 // Whether we are shutting down or not. |
| 55 bool IsShuttingDown() const; | 52 bool IsShuttingDown() const; |
| 56 #endif | |
| 57 | 53 |
| 58 protected: | 54 protected: |
| 59 CrashHandlerHostLinux(); | 55 CrashHandlerHostLinux(); |
| 60 virtual ~CrashHandlerHostLinux(); | 56 virtual ~CrashHandlerHostLinux(); |
| 61 | 57 |
| 62 #if defined(USE_LINUX_BREAKPAD) | |
| 63 // Only called in concrete subclasses. | 58 // Only called in concrete subclasses. |
| 64 void InitCrashUploaderThread(); | 59 void InitCrashUploaderThread(); |
| 65 | 60 |
| 66 std::string process_type_; | 61 std::string process_type_; |
| 67 #endif | |
| 68 | 62 |
| 69 private: | 63 private: |
| 70 void Init(); | 64 void Init(); |
| 71 | 65 |
| 72 #if defined(USE_LINUX_BREAKPAD) | |
| 73 // This is here on purpose to make CrashHandlerHostLinux abstract. | 66 // This is here on purpose to make CrashHandlerHostLinux abstract. |
| 74 virtual void SetProcessType() = 0; | 67 virtual void SetProcessType() = 0; |
| 75 | 68 |
| 76 // Do work on the FILE thread for OnFileCanReadWithoutBlocking(). | 69 // Do work on the FILE thread for OnFileCanReadWithoutBlocking(). |
| 77 void WriteDumpFile(BreakpadInfo* info, | 70 void WriteDumpFile(BreakpadInfo* info, |
| 78 pid_t crashing_pid, | 71 pid_t crashing_pid, |
| 79 char* crash_context, | 72 char* crash_context, |
| 80 int signal_fd); | 73 int signal_fd); |
| 81 | 74 |
| 82 // Continue OnFileCanReadWithoutBlocking()'s work on the IO thread. | 75 // Continue OnFileCanReadWithoutBlocking()'s work on the IO thread. |
| 83 void QueueCrashDumpTask(BreakpadInfo* info, int signal_fd); | 76 void QueueCrashDumpTask(BreakpadInfo* info, int signal_fd); |
| 84 #endif | |
| 85 | 77 |
| 86 int process_socket_; | 78 int process_socket_; |
| 87 int browser_socket_; | 79 int browser_socket_; |
| 88 | 80 |
| 89 #if defined(USE_LINUX_BREAKPAD) | |
| 90 base::MessageLoopForIO::FileDescriptorWatcher file_descriptor_watcher_; | 81 base::MessageLoopForIO::FileDescriptorWatcher file_descriptor_watcher_; |
| 91 scoped_ptr<base::Thread> uploader_thread_; | 82 scoped_ptr<base::Thread> uploader_thread_; |
| 92 bool shutting_down_; | 83 bool shutting_down_; |
| 93 #endif | |
| 94 | 84 |
| 95 #if defined(ADDRESS_SANITIZER) | 85 #if defined(ADDRESS_SANITIZER) |
| 96 char* asan_report_str_; | 86 char* asan_report_str_; |
| 97 #endif | 87 #endif |
| 98 | 88 |
| 99 DISALLOW_COPY_AND_ASSIGN(CrashHandlerHostLinux); | 89 DISALLOW_COPY_AND_ASSIGN(CrashHandlerHostLinux); |
| 100 }; | 90 }; |
| 101 | 91 |
| 102 class ExtensionCrashHandlerHostLinux : public CrashHandlerHostLinux { | 92 class ExtensionCrashHandlerHostLinux : public CrashHandlerHostLinux { |
| 103 public: | 93 public: |
| 104 // Returns the singleton instance. | 94 // Returns the singleton instance. |
| 105 static ExtensionCrashHandlerHostLinux* GetInstance(); | 95 static ExtensionCrashHandlerHostLinux* GetInstance(); |
| 106 | 96 |
| 107 private: | 97 private: |
| 108 friend struct DefaultSingletonTraits<ExtensionCrashHandlerHostLinux>; | 98 friend struct DefaultSingletonTraits<ExtensionCrashHandlerHostLinux>; |
| 109 ExtensionCrashHandlerHostLinux(); | 99 ExtensionCrashHandlerHostLinux(); |
| 110 virtual ~ExtensionCrashHandlerHostLinux(); | 100 virtual ~ExtensionCrashHandlerHostLinux(); |
| 111 | 101 |
| 112 #if defined(USE_LINUX_BREAKPAD) | |
| 113 virtual void SetProcessType() OVERRIDE; | 102 virtual void SetProcessType() OVERRIDE; |
| 114 #endif | |
| 115 | 103 |
| 116 DISALLOW_COPY_AND_ASSIGN(ExtensionCrashHandlerHostLinux); | 104 DISALLOW_COPY_AND_ASSIGN(ExtensionCrashHandlerHostLinux); |
| 117 }; | 105 }; |
| 118 | 106 |
| 119 class GpuCrashHandlerHostLinux : public CrashHandlerHostLinux { | 107 class GpuCrashHandlerHostLinux : public CrashHandlerHostLinux { |
| 120 public: | 108 public: |
| 121 // Returns the singleton instance. | 109 // Returns the singleton instance. |
| 122 static GpuCrashHandlerHostLinux* GetInstance(); | 110 static GpuCrashHandlerHostLinux* GetInstance(); |
| 123 | 111 |
| 124 private: | 112 private: |
| 125 friend struct DefaultSingletonTraits<GpuCrashHandlerHostLinux>; | 113 friend struct DefaultSingletonTraits<GpuCrashHandlerHostLinux>; |
| 126 GpuCrashHandlerHostLinux(); | 114 GpuCrashHandlerHostLinux(); |
| 127 virtual ~GpuCrashHandlerHostLinux(); | 115 virtual ~GpuCrashHandlerHostLinux(); |
| 128 | 116 |
| 129 #if defined(USE_LINUX_BREAKPAD) | |
| 130 virtual void SetProcessType() OVERRIDE; | 117 virtual void SetProcessType() OVERRIDE; |
| 131 #endif | |
| 132 | 118 |
| 133 DISALLOW_COPY_AND_ASSIGN(GpuCrashHandlerHostLinux); | 119 DISALLOW_COPY_AND_ASSIGN(GpuCrashHandlerHostLinux); |
| 134 }; | 120 }; |
| 135 | 121 |
| 136 class PluginCrashHandlerHostLinux : public CrashHandlerHostLinux { | 122 class PluginCrashHandlerHostLinux : public CrashHandlerHostLinux { |
| 137 public: | 123 public: |
| 138 // Returns the singleton instance. | 124 // Returns the singleton instance. |
| 139 static PluginCrashHandlerHostLinux* GetInstance(); | 125 static PluginCrashHandlerHostLinux* GetInstance(); |
| 140 | 126 |
| 141 private: | 127 private: |
| 142 friend struct DefaultSingletonTraits<PluginCrashHandlerHostLinux>; | 128 friend struct DefaultSingletonTraits<PluginCrashHandlerHostLinux>; |
| 143 PluginCrashHandlerHostLinux(); | 129 PluginCrashHandlerHostLinux(); |
| 144 virtual ~PluginCrashHandlerHostLinux(); | 130 virtual ~PluginCrashHandlerHostLinux(); |
| 145 | 131 |
| 146 #if defined(USE_LINUX_BREAKPAD) | |
| 147 virtual void SetProcessType() OVERRIDE; | 132 virtual void SetProcessType() OVERRIDE; |
| 148 #endif | |
| 149 | 133 |
| 150 DISALLOW_COPY_AND_ASSIGN(PluginCrashHandlerHostLinux); | 134 DISALLOW_COPY_AND_ASSIGN(PluginCrashHandlerHostLinux); |
| 151 }; | 135 }; |
| 152 | 136 |
| 153 class PpapiCrashHandlerHostLinux : public CrashHandlerHostLinux { | 137 class PpapiCrashHandlerHostLinux : public CrashHandlerHostLinux { |
| 154 public: | 138 public: |
| 155 // Returns the singleton instance. | 139 // Returns the singleton instance. |
| 156 static PpapiCrashHandlerHostLinux* GetInstance(); | 140 static PpapiCrashHandlerHostLinux* GetInstance(); |
| 157 | 141 |
| 158 private: | 142 private: |
| 159 friend struct DefaultSingletonTraits<PpapiCrashHandlerHostLinux>; | 143 friend struct DefaultSingletonTraits<PpapiCrashHandlerHostLinux>; |
| 160 PpapiCrashHandlerHostLinux(); | 144 PpapiCrashHandlerHostLinux(); |
| 161 virtual ~PpapiCrashHandlerHostLinux(); | 145 virtual ~PpapiCrashHandlerHostLinux(); |
| 162 | 146 |
| 163 #if defined(USE_LINUX_BREAKPAD) | |
| 164 virtual void SetProcessType() OVERRIDE; | 147 virtual void SetProcessType() OVERRIDE; |
| 165 #endif | |
| 166 | 148 |
| 167 DISALLOW_COPY_AND_ASSIGN(PpapiCrashHandlerHostLinux); | 149 DISALLOW_COPY_AND_ASSIGN(PpapiCrashHandlerHostLinux); |
| 168 }; | 150 }; |
| 169 | 151 |
| 170 class RendererCrashHandlerHostLinux : public CrashHandlerHostLinux { | 152 class RendererCrashHandlerHostLinux : public CrashHandlerHostLinux { |
| 171 public: | 153 public: |
| 172 // Returns the singleton instance. | 154 // Returns the singleton instance. |
| 173 static RendererCrashHandlerHostLinux* GetInstance(); | 155 static RendererCrashHandlerHostLinux* GetInstance(); |
| 174 | 156 |
| 175 private: | 157 private: |
| 176 friend struct DefaultSingletonTraits<RendererCrashHandlerHostLinux>; | 158 friend struct DefaultSingletonTraits<RendererCrashHandlerHostLinux>; |
| 177 RendererCrashHandlerHostLinux(); | 159 RendererCrashHandlerHostLinux(); |
| 178 virtual ~RendererCrashHandlerHostLinux(); | 160 virtual ~RendererCrashHandlerHostLinux(); |
| 179 | 161 |
| 180 #if defined(USE_LINUX_BREAKPAD) | |
| 181 virtual void SetProcessType() OVERRIDE; | 162 virtual void SetProcessType() OVERRIDE; |
| 182 #endif | |
| 183 | 163 |
| 184 DISALLOW_COPY_AND_ASSIGN(RendererCrashHandlerHostLinux); | 164 DISALLOW_COPY_AND_ASSIGN(RendererCrashHandlerHostLinux); |
| 185 }; | 165 }; |
| 186 | 166 |
| 187 #endif // CHROME_BROWSER_CRASH_HANDLER_HOST_LINUX_H_ | 167 #endif // CHROME_BROWSER_CRASH_HANDLER_HOST_LINUX_H_ |
| OLD | NEW |