Commit 7defb4f0 authored by rogerta@chromium.org's avatar rogerta@chromium.org

Fix crash on startup because function returned before creating required

members.  Finnur fixed a similar crash about a month ago (crrev.com/116316),
so I added some DCHECK()s to help prevent this in the future.

BUG=110234
TEST=This may happen when ResourceBundle::InitSharedInstanceWithLocale()
returns an empty string.  Not sure if there are other scenarios that would
cause this crash.
Review URL: https://chromiumcodereview.appspot.com/9317095

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@120788 0039d316-1c4b-4281-b951-d872f2087c98
parent 45e52d41
...@@ -1111,6 +1111,9 @@ void ChromeBrowserMainParts::PostMainMessageLoopStart() { ...@@ -1111,6 +1111,9 @@ void ChromeBrowserMainParts::PostMainMessageLoopStart() {
int ChromeBrowserMainParts::PreCreateThreads() { int ChromeBrowserMainParts::PreCreateThreads() {
result_code_ = PreCreateThreadsImpl(); result_code_ = PreCreateThreadsImpl();
// These members must be initialized before returning from this function.
DCHECK(master_prefs_.get());
DCHECK(browser_init_.get());
return result_code_; return result_code_;
} }
...@@ -1160,6 +1163,10 @@ int ChromeBrowserMainParts::PreCreateThreadsImpl() { ...@@ -1160,6 +1163,10 @@ int ChromeBrowserMainParts::PreCreateThreadsImpl() {
local_state_ = InitializeLocalState(parsed_command_line(), local_state_ = InitializeLocalState(parsed_command_line(),
is_first_run_); is_first_run_);
// These members must be initialized before returning from this function.
master_prefs_.reset(new first_run::MasterPrefs);
browser_init_.reset(new BrowserInit);
// If we're running tests (ui_task is non-null), then the ResourceBundle // If we're running tests (ui_task is non-null), then the ResourceBundle
// has already been initialized. // has already been initialized.
if (parameters().ui_task) { if (parameters().ui_task) {
...@@ -1195,10 +1202,6 @@ int ChromeBrowserMainParts::PreCreateThreadsImpl() { ...@@ -1195,10 +1202,6 @@ int ChromeBrowserMainParts::PreCreateThreadsImpl() {
g_set_application_name(l10n_util::GetStringUTF8(IDS_PRODUCT_NAME).c_str()); g_set_application_name(l10n_util::GetStringUTF8(IDS_PRODUCT_NAME).c_str());
#endif #endif
// These members must be initialized before returning from this function.
master_prefs_.reset(new first_run::MasterPrefs);
browser_init_.reset(new BrowserInit);
std::string try_chrome = std::string try_chrome =
parsed_command_line().GetSwitchValueASCII(switches::kTryChromeAgain); parsed_command_line().GetSwitchValueASCII(switches::kTryChromeAgain);
if (!try_chrome.empty()) { if (!try_chrome.empty()) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment