summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoroshima@chromium.org <oshima@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-06-15 05:03:01 +0000
committeroshima@chromium.org <oshima@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-06-15 05:03:01 +0000
commit17d4f9705877c3e53acf068b0a3264ae6ac6f607 (patch)
treea8344a16f4fabc20bf3c34cf8606d2f79237df9d
parent5841576e6063be2a66556077accbee0663d1bc42 (diff)
downloadchromium_src-17d4f9705877c3e53acf068b0a3264ae6ac6f607.zip
chromium_src-17d4f9705877c3e53acf068b0a3264ae6ac6f607.tar.gz
chromium_src-17d4f9705877c3e53acf068b0a3264ae6ac6f607.tar.bz2
Do not try to shutdown when XIOError happens during startup.
BUG=245371 Review URL: https://chromiumcodereview.appspot.com/17084014 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@206561 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/chrome_browser_main.cc10
-rw-r--r--chrome/browser/chrome_browser_main_x11.cc7
-rw-r--r--chrome/browser/chrome_browser_main_x11.h12
3 files changed, 21 insertions, 8 deletions
diff --git a/chrome/browser/chrome_browser_main.cc b/chrome/browser/chrome_browser_main.cc
index 6f36b65..856e4f2 100644
--- a/chrome/browser/chrome_browser_main.cc
+++ b/chrome/browser/chrome_browser_main.cc
@@ -708,6 +708,9 @@ DLLEXPORT void __cdecl RelaunchChromeBrowserWithNewCommandLineIfNeeded() {
// content::BrowserMainParts implementation ------------------------------------
void ChromeBrowserMainParts::PreEarlyInitialization() {
+#if defined(USE_X11)
+ SetBrowserX11ErrorHandlersPreEarlyInitialization();
+#endif
TRACE_EVENT0("startup", "ChromeBrowserMainParts::PreEarlyInitialization");
for (size_t i = 0; i < chrome_extra_parts_.size(); ++i)
chrome_extra_parts_[i]->PreEarlyInitialization();
@@ -735,6 +738,9 @@ void ChromeBrowserMainParts::PostMainMessageLoopStart() {
TRACE_EVENT0("startup", "ChromeBrowserMainParts::PostMainMessageLoopStart");
for (size_t i = 0; i < chrome_extra_parts_.size(); ++i)
chrome_extra_parts_[i]->PostMainMessageLoopStart();
+#if defined(USE_X11)
+ SetBrowserX11ErrorHandlersPostMainMessageLoopStart();
+#endif
}
int ChromeBrowserMainParts::PreCreateThreads() {
@@ -1201,10 +1207,6 @@ int ChromeBrowserMainParts::PreMainMessageLoopRunImpl() {
}
#endif // !defined(OS_ANDROID)
-#if defined(USE_X11)
- SetBrowserX11ErrorHandlers();
-#endif
-
// Desktop construction occurs here, (required before profile creation).
PreProfileInit();
diff --git a/chrome/browser/chrome_browser_main_x11.cc b/chrome/browser/chrome_browser_main_x11.cc
index a8b833a..a88981b 100644
--- a/chrome/browser/chrome_browser_main_x11.cc
+++ b/chrome/browser/chrome_browser_main_x11.cc
@@ -96,7 +96,12 @@ int DoUninstallTasks(bool chrome_still_running) {
return content::RESULT_CODE_NORMAL_EXIT;
}
-void SetBrowserX11ErrorHandlers() {
+void SetBrowserX11ErrorHandlersPreEarlyInitialization() {
+ // Use default error handlers during startup.
+ ui::SetX11ErrorHandlers(NULL, NULL);
+}
+
+void SetBrowserX11ErrorHandlersPostMainMessageLoopStart() {
// Set up error handlers to make sure profile gets written if X server
// goes away.
ui::SetX11ErrorHandlers(BrowserX11ErrorHandler, BrowserX11IOErrorHandler);
diff --git a/chrome/browser/chrome_browser_main_x11.h b/chrome/browser/chrome_browser_main_x11.h
index f3f923a..5255cd1 100644
--- a/chrome/browser/chrome_browser_main_x11.h
+++ b/chrome/browser/chrome_browser_main_x11.h
@@ -7,9 +7,15 @@
#ifndef CHROME_BROWSER_CHROME_BROWSER_MAIN_X11_H_
#define CHROME_BROWSER_CHROME_BROWSER_MAIN_X11_H_
-// Installs the X11 error handlers for the browser process. This will
-// allow us to exit cleanly if X exits before us.
-void SetBrowserX11ErrorHandlers();
+// Installs the X11 error handlers for the browser process used during
+// startup. They simply print error messages and exit because
+// we can't shutdown properly while creating and initializing services.
+void SetBrowserX11ErrorHandlersPreEarlyInitialization();
+
+// Installs the X11 error handlers for the browser process after the
+// main message loop has started. This will allow us to exit cleanly
+// if X exits before us.
+void SetBrowserX11ErrorHandlersPostMainMessageLoopStart();
// Installs empty X11 error handlers. This avoids calling into the message-loop
// in case an X11 erro happens while the message-loop is being destroyed.