From fd6159afa2356ec37405265aca2e4375df3b8d3a Mon Sep 17 00:00:00 2001 From: "mnissler@chromium.org" Date: Fri, 3 Sep 2010 09:38:39 +0000 Subject: Gracefully handle the case of empty preference file names in PrefValueStore. BUG=53917 TEST=Instead of crashing, chrome should display a message if it cannot determine the local state file. Review URL: http://codereview.chromium.org/3322005 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@58471 0039d316-1c4b-4281-b951-d872f2087c98 --- chrome/browser/browser_process_impl.cc | 2 +- chrome/browser/prefs/pref_value_store.cc | 8 +++----- chrome/common/json_pref_store.cc | 5 ++++- chrome/common/pref_store.h | 4 ++-- 4 files changed, 10 insertions(+), 9 deletions(-) diff --git a/chrome/browser/browser_process_impl.cc b/chrome/browser/browser_process_impl.cc index 885e390..472464f 100644 --- a/chrome/browser/browser_process_impl.cc +++ b/chrome/browser/browser_process_impl.cc @@ -605,7 +605,7 @@ void BrowserProcessImpl::CreateLocalState() { FilePath local_state_path; PathService::Get(chrome::FILE_LOCAL_STATE, &local_state_path); local_state_.reset(PrefService::CreatePrefService(local_state_path, NULL)); - } +} void BrowserProcessImpl::CreateIconManager() { DCHECK(!created_icon_manager_ && icon_manager_.get() == NULL); diff --git a/chrome/browser/prefs/pref_value_store.cc b/chrome/browser/prefs/pref_value_store.cc index 6ab4b8f..501f1e1 100644 --- a/chrome/browser/prefs/pref_value_store.cc +++ b/chrome/browser/prefs/pref_value_store.cc @@ -23,11 +23,9 @@ PrefValueStore* PrefValueStore::CreatePrefValueStore( JsonPrefStore* user = NULL; ConfigurationPolicyPrefStore* recommended = NULL; - if (!pref_filename.empty()) { - user = new JsonPrefStore( - pref_filename, - ChromeThread::GetMessageLoopProxyForThread(ChromeThread::FILE)); - } + user = new JsonPrefStore( + pref_filename, + ChromeThread::GetMessageLoopProxyForThread(ChromeThread::FILE)); if (!user_only) { managed = ConfigurationPolicyPrefStore::CreateManagedPolicyPrefStore(); diff --git a/chrome/common/json_pref_store.cc b/chrome/common/json_pref_store.cc index 9acfcb2d..d68307f 100644 --- a/chrome/common/json_pref_store.cc +++ b/chrome/common/json_pref_store.cc @@ -31,6 +31,10 @@ JsonPrefStore::~JsonPrefStore() { } PrefStore::PrefReadError JsonPrefStore::ReadPrefs() { + if (path_.empty()) { + read_only_ = true; + return PREF_READ_ERROR_FILE_NOT_SPECIFIED; + } JSONFileValueSerializer serializer(path_); int error_code = 0; @@ -127,4 +131,3 @@ bool JsonPrefStore::SerializeData(std::string* output) { scoped_ptr copy(prefs_->DeepCopyWithoutEmptyChildren()); return serializer.Serialize(*(copy.get())); } - diff --git a/chrome/common/pref_store.h b/chrome/common/pref_store.h index d5acd89..727c020 100644 --- a/chrome/common/pref_store.h +++ b/chrome/common/pref_store.h @@ -27,7 +27,8 @@ class PrefStore { PREF_READ_ERROR_FILE_LOCKED, PREF_READ_ERROR_NO_FILE, PREF_READ_ERROR_JSON_REPEAT, - PREF_READ_ERROR_OTHER + PREF_READ_ERROR_OTHER, + PREF_READ_ERROR_FILE_NOT_SPECIFIED }; virtual ~PrefStore() { } @@ -47,4 +48,3 @@ class PrefStore { }; #endif // CHROME_COMMON_PREF_STORE_H_ - -- cgit v1.1