Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(226)

Side by Side Diff: chrome/app/chrome_dll_main.cc

Issue 2716007: Linux: Catch X errors and force a crash.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « app/x11_util.cc ('k') | chrome/gpu/gpu_thread.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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 // TODO(port): the ifdefs in here are a first step towards trying to determine 5 // TODO(port): the ifdefs in here are a first step towards trying to determine
6 // the correct abstraction for all the OS functionality required at this 6 // the correct abstraction for all the OS functionality required at this
7 // stage of process initialization. It should not be taken as a final 7 // stage of process initialization. It should not be taken as a final
8 // abstraction. 8 // abstraction.
9 9
10 #include "build/build_config.h" 10 #include "build/build_config.h"
11 11
12 #if defined(OS_WIN) 12 #if defined(OS_WIN)
13 #include <algorithm> 13 #include <algorithm>
14 #include <atlbase.h> 14 #include <atlbase.h>
15 #include <atlapp.h> 15 #include <atlapp.h>
16 #include <malloc.h> 16 #include <malloc.h>
17 #include <new.h> 17 #include <new.h>
18 #elif defined(OS_POSIX) 18 #elif defined(OS_POSIX)
19 #include <locale.h> 19 #include <locale.h>
20 #include <signal.h> 20 #include <signal.h>
21 #include <sys/stat.h> 21 #include <sys/stat.h>
22 #include <sys/types.h> 22 #include <sys/types.h>
23 #include <unistd.h> 23 #include <unistd.h>
24 #endif 24 #endif
25 25
26 #if defined(OS_POSIX) && !defined(OS_MACOSX) 26 #if defined(USE_X11)
27 #include <gdk/gdk.h> 27 #include <gdk/gdk.h>
28 #include <glib.h> 28 #include <glib.h>
29 #include <gtk/gtk.h> 29 #include <gtk/gtk.h>
30 #include <stdlib.h> 30 #include <stdlib.h>
31 #include <string.h> 31 #include <string.h>
32 #endif 32 #endif
33 33
34 #include "app/app_paths.h" 34 #include "app/app_paths.h"
35 #include "app/app_switches.h" 35 #include "app/app_switches.h"
36 #include "app/resource_bundle.h" 36 #include "app/resource_bundle.h"
(...skipping 20 matching lines...) Expand all
57 #include "chrome/common/logging_chrome.h" 57 #include "chrome/common/logging_chrome.h"
58 #include "chrome/common/main_function_params.h" 58 #include "chrome/common/main_function_params.h"
59 #include "chrome/common/sandbox_init_wrapper.h" 59 #include "chrome/common/sandbox_init_wrapper.h"
60 #include "chrome/common/url_constants.h" 60 #include "chrome/common/url_constants.h"
61 #include "ipc/ipc_switches.h" 61 #include "ipc/ipc_switches.h"
62 62
63 #if defined(USE_NSS) 63 #if defined(USE_NSS)
64 #include "base/nss_util.h" 64 #include "base/nss_util.h"
65 #endif 65 #endif
66 66
67 #if defined(USE_X11)
68 #include "app/x11_util.h"
69 #endif
70
67 #if defined(OS_LINUX) 71 #if defined(OS_LINUX)
68 #include "chrome/browser/renderer_host/render_sandbox_host_linux.h" 72 #include "chrome/browser/renderer_host/render_sandbox_host_linux.h"
69 #include "chrome/browser/zygote_host_linux.h" 73 #include "chrome/browser/zygote_host_linux.h"
70 #endif 74 #endif
71 75
72 #if defined(OS_MACOSX) 76 #if defined(OS_MACOSX)
73 #include "app/l10n_util_mac.h" 77 #include "app/l10n_util_mac.h"
74 #include "base/mac_util.h" 78 #include "base/mac_util.h"
75 #include "chrome/common/chrome_paths_internal.h" 79 #include "chrome/common/chrome_paths_internal.h"
76 #include "chrome/app/breakpad_mac.h" 80 #include "chrome/app/breakpad_mac.h"
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
195 // some apps fail to properly escape arguments. 199 // some apps fail to properly escape arguments.
196 bool HasDeprecatedArguments(const std::wstring& command_line) { 200 bool HasDeprecatedArguments(const std::wstring& command_line) {
197 const wchar_t kChromeHtml[] = L"chromehtml:"; 201 const wchar_t kChromeHtml[] = L"chromehtml:";
198 std::wstring command_line_lower = command_line; 202 std::wstring command_line_lower = command_line;
199 // We are only searching for ASCII characters so this is OK. 203 // We are only searching for ASCII characters so this is OK.
200 StringToLowerASCII(&command_line_lower); 204 StringToLowerASCII(&command_line_lower);
201 std::wstring::size_type pos = command_line_lower.find(kChromeHtml); 205 std::wstring::size_type pos = command_line_lower.find(kChromeHtml);
202 return (pos != std::wstring::npos); 206 return (pos != std::wstring::npos);
203 } 207 }
204 208
205 #endif // OS_WIN 209 #endif // defined(OS_WIN)
206 210
207 #if defined(OS_POSIX) && !defined(OS_MACOSX) 211 #if defined(USE_X11)
208 static void GLibLogHandler(const gchar* log_domain, 212 static void GLibLogHandler(const gchar* log_domain,
209 GLogLevelFlags log_level, 213 GLogLevelFlags log_level,
210 const gchar* message, 214 const gchar* message,
211 gpointer userdata) { 215 gpointer userdata) {
212 if (!log_domain) 216 if (!log_domain)
213 log_domain = "<unknown>"; 217 log_domain = "<unknown>";
214 if (!message) 218 if (!message)
215 message = "<no message>"; 219 message = "<no message>";
216 220
217 if (strstr(message, "Loading IM context type") || 221 if (strstr(message, "Loading IM context type") ||
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
252 g_log_set_handler(kLogDomains[i], 256 g_log_set_handler(kLogDomains[i],
253 static_cast<GLogLevelFlags>(G_LOG_FLAG_RECURSION | 257 static_cast<GLogLevelFlags>(G_LOG_FLAG_RECURSION |
254 G_LOG_FLAG_FATAL | 258 G_LOG_FLAG_FATAL |
255 G_LOG_LEVEL_ERROR | 259 G_LOG_LEVEL_ERROR |
256 G_LOG_LEVEL_CRITICAL | 260 G_LOG_LEVEL_CRITICAL |
257 G_LOG_LEVEL_WARNING), 261 G_LOG_LEVEL_WARNING),
258 GLibLogHandler, 262 GLibLogHandler,
259 NULL); 263 NULL);
260 } 264 }
261 } 265 }
266 #endif // defined(USE_X11)
262 267
268 #if defined(OS_LINUX)
263 static void AdjustLinuxOOMScore(const std::string& process_type) { 269 static void AdjustLinuxOOMScore(const std::string& process_type) {
264 const int kMiscScore = 7; 270 const int kMiscScore = 7;
265 const int kPluginScore = 10; 271 const int kPluginScore = 10;
266 int score = -1; 272 int score = -1;
267 273
268 if (process_type == switches::kPluginProcess) { 274 if (process_type == switches::kPluginProcess) {
269 score = kPluginScore; 275 score = kPluginScore;
270 } else if (process_type == switches::kUtilityProcess || 276 } else if (process_type == switches::kUtilityProcess ||
271 process_type == switches::kWorkerProcess || 277 process_type == switches::kWorkerProcess ||
272 process_type == switches::kGpuProcess || 278 process_type == switches::kGpuProcess ||
(...skipping 13 matching lines...) Expand all
286 LOG(WARNING) << "process type '" << process_type << "' " 292 LOG(WARNING) << "process type '" << process_type << "' "
287 << "should go through the zygote."; 293 << "should go through the zygote.";
288 // When debugging, these process types can end up being run directly. 294 // When debugging, these process types can end up being run directly.
289 return; 295 return;
290 } else { 296 } else {
291 NOTREACHED() << "Unknown process type"; 297 NOTREACHED() << "Unknown process type";
292 } 298 }
293 if (score > -1) 299 if (score > -1)
294 base::AdjustOOMScore(base::GetCurrentProcId(), score); 300 base::AdjustOOMScore(base::GetCurrentProcId(), score);
295 } 301 }
296 #endif // defined(OS_POSIX) && !defined(OS_MACOSX) 302 #endif // defined(OS_LINUX)
297 303
298 // Register the invalid param handler and pure call handler to be able to 304 // Register the invalid param handler and pure call handler to be able to
299 // notify breakpad when it happens. 305 // notify breakpad when it happens.
300 void RegisterInvalidParamHandler() { 306 void RegisterInvalidParamHandler() {
301 #if defined(OS_WIN) 307 #if defined(OS_WIN)
302 _set_invalid_parameter_handler(InvalidParameter); 308 _set_invalid_parameter_handler(InvalidParameter);
303 _set_purecall_handler(PureCall); 309 _set_purecall_handler(PureCall);
304 // Gather allocation failure. 310 // Gather allocation failure.
305 std::set_new_handler(&OnNoMemory); 311 std::set_new_handler(&OnNoMemory);
306 // Also enable the new handler for malloc() based failures. 312 // Also enable the new handler for malloc() based failures.
(...skipping 390 matching lines...) Expand 10 before | Expand all | Expand 10 after
697 // sources. The language should have been passed in to us from the 703 // sources. The language should have been passed in to us from the
698 // browser process as a command line flag. 704 // browser process as a command line flag.
699 DCHECK(parsed_command_line.HasSwitch(switches::kLang) || 705 DCHECK(parsed_command_line.HasSwitch(switches::kLang) ||
700 process_type == switches::kZygoteProcess); 706 process_type == switches::kZygoteProcess);
701 ResourceBundle::InitSharedInstance(std::wstring()); 707 ResourceBundle::InitSharedInstance(std::wstring());
702 708
703 #if defined(OS_MACOSX) 709 #if defined(OS_MACOSX)
704 // Update the process name (need resources to get the strings, so 710 // Update the process name (need resources to get the strings, so
705 // only do this when ResourcesBundle has been initialized). 711 // only do this when ResourcesBundle has been initialized).
706 SetMacProcessName(process_type); 712 SetMacProcessName(process_type);
707 #endif // defined(OS_MACOSX) 713 #endif // defined(OS_MACOSX)
708
709 } 714 }
710 715
711 if (!process_type.empty()) 716 if (!process_type.empty())
712 CommonSubprocessInit(); 717 CommonSubprocessInit();
713 718
714 #if defined(OS_MACOSX) 719 #if defined(OS_MACOSX)
715 // On OS X the renderer sandbox needs to be initialized later in the startup 720 // On OS X the renderer sandbox needs to be initialized later in the startup
716 // sequence in RendererMainPlatformDelegate::PlatformInitialize(). 721 // sequence in RendererMainPlatformDelegate::PlatformInitialize().
717 if (process_type != switches::kRendererProcess && 722 if (process_type != switches::kRendererProcess &&
718 process_type != switches::kExtensionProcess) { 723 process_type != switches::kExtensionProcess) {
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
829 g_thread_init(NULL); 834 g_thread_init(NULL);
830 // Glib type system initialization. Needed at least for gconf, 835 // Glib type system initialization. Needed at least for gconf,
831 // used in net/proxy/proxy_config_service_linux.cc. Most likely 836 // used in net/proxy/proxy_config_service_linux.cc. Most likely
832 // this is superfluous as gtk_init() ought to do this. It's 837 // this is superfluous as gtk_init() ought to do this. It's
833 // definitely harmless, so retained as a reminder of this 838 // definitely harmless, so retained as a reminder of this
834 // requirement for gconf. 839 // requirement for gconf.
835 g_type_init(); 840 g_type_init();
836 // gtk_init() can change |argc| and |argv|. 841 // gtk_init() can change |argc| and |argv|.
837 gtk_init(&argc, &argv); 842 gtk_init(&argc, &argv);
838 SetUpGLibLogHandler(); 843 SetUpGLibLogHandler();
844
845 x11_util::SetX11ErrorHandlers();
839 #endif // defined(OS_LINUX) 846 #endif // defined(OS_LINUX)
840 847
841 rv = BrowserMain(main_params); 848 rv = BrowserMain(main_params);
842 } else { 849 } else {
843 NOTREACHED() << "Unknown process type"; 850 NOTREACHED() << "Unknown process type";
844 } 851 }
845 852
846 if (SubprocessNeedsResourceBundle(process_type)) 853 if (SubprocessNeedsResourceBundle(process_type))
847 ResourceBundle::CleanupSharedInstance(); 854 ResourceBundle::CleanupSharedInstance();
848 855
849 #if defined(OS_WIN) 856 #if defined(OS_WIN)
850 #ifdef _CRTDBG_MAP_ALLOC 857 #ifdef _CRTDBG_MAP_ALLOC
851 _CrtDumpMemoryLeaks(); 858 _CrtDumpMemoryLeaks();
852 #endif // _CRTDBG_MAP_ALLOC 859 #endif // _CRTDBG_MAP_ALLOC
853 860
854 _Module.Term(); 861 _Module.Term();
855 #endif 862 #endif
856 863
857 logging::CleanupChromeLogging(); 864 logging::CleanupChromeLogging();
858 865
859 #if defined(OS_MACOSX) && defined(GOOGLE_CHROME_BUILD) 866 #if defined(OS_MACOSX) && defined(GOOGLE_CHROME_BUILD)
860 // TODO(mark): See the TODO(mark) above at InitCrashReporter. 867 // TODO(mark): See the TODO(mark) above at InitCrashReporter.
861 DestructCrashReporter(); 868 DestructCrashReporter();
862 #endif // OS_MACOSX && GOOGLE_CHROME_BUILD 869 #endif // OS_MACOSX && GOOGLE_CHROME_BUILD
863 870
864 return rv; 871 return rv;
865 } 872 }
OLDNEW
« no previous file with comments | « app/x11_util.cc ('k') | chrome/gpu/gpu_thread.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698