Index: chrome/browser/profiles/profile_impl.cc |
=================================================================== |
--- chrome/browser/profiles/profile_impl.cc (revision 137731) |
+++ chrome/browser/profiles/profile_impl.cc (working copy) |
@@ -20,7 +20,7 @@ |
#include "chrome/browser/autocomplete/autocomplete_classifier.h" |
#include "chrome/browser/background/background_contents_service_factory.h" |
#include "chrome/browser/background/background_mode_manager.h" |
-#include "chrome/browser/bookmarks/bookmark_model.h" |
+#include "chrome/browser/bookmarks/bookmark_model_factory.h" |
#include "chrome/browser/browser_process.h" |
#include "chrome/browser/chrome_plugin_service_filter.h" |
#include "chrome/browser/content_settings/cookie_settings.h" |
@@ -40,6 +40,7 @@ |
#include "chrome/browser/favicon/favicon_service.h" |
#include "chrome/browser/geolocation/chrome_geolocation_permission_context.h" |
#include "chrome/browser/history/history.h" |
+#include "chrome/browser/history/history_service_factory.h" |
#include "chrome/browser/history/shortcuts_backend.h" |
#include "chrome/browser/history/top_sites.h" |
#include "chrome/browser/instant/instant_controller.h" |
@@ -224,7 +225,6 @@ |
new VisitedLinkEventListener(this))), |
ALLOW_THIS_IN_INITIALIZER_LIST(io_data_(this)), |
host_content_settings_map_(NULL), |
- history_service_created_(false), |
favicon_service_created_(false), |
clear_local_state_on_exit_(false), |
start_time_(Time::Now()), |
@@ -519,29 +519,6 @@ |
if (top_sites_.get()) |
top_sites_->Shutdown(); |
- if (bookmark_bar_model_.get()) { |
- // It's possible that bookmarks haven't loaded and history is waiting for |
- // bookmarks to complete loading. In such a situation history can't shutdown |
- // (meaning if we invoked history_service_->Cleanup now, we would |
- // deadlock). To break the deadlock we tell BookmarkModel it's about to be |
- // deleted so that it can release the signal history is waiting on, allowing |
- // history to shutdown (history_service_->Cleanup to complete). In such a |
- // scenario history sees an incorrect view of bookmarks, but it's better |
- // than a deadlock. |
- bookmark_bar_model_->Cleanup(); |
- } |
- |
- if (history_service_.get()) |
- history_service_->Cleanup(); |
- |
- // HistoryService may call into the BookmarkModel, as such we need to |
sky
2012/05/21 14:23:06
How is this handled now?
rpetterson
2012/05/21 18:01:49
HistoryService is marked as being dependent on the
sky
2012/05/21 20:37:17
What you have is fine. I just wanted to make sure
|
- // delete HistoryService before the BookmarkModel. The destructor for |
- // HistoryService will join with HistoryService's backend thread so that |
- // by the time the destructor has finished we're sure it will no longer call |
- // into the BookmarkModel. |
- history_service_ = NULL; |
- bookmark_bar_model_.reset(); |
- |
// FaviconService depends on HistoryServce so make sure we delete |
// HistoryService first. |
favicon_service_.reset(); |
@@ -794,23 +771,11 @@ |
} |
HistoryService* ProfileImpl::GetHistoryService(ServiceAccessType sat) { |
- // If saving history is disabled, only allow explicit access. |
- if (GetPrefs()->GetBoolean(prefs::kSavingBrowserHistoryDisabled) && |
- sat != EXPLICIT_ACCESS) |
- return NULL; |
- |
- if (!history_service_created_) { |
- history_service_created_ = true; |
- scoped_refptr<HistoryService> history(new HistoryService(this)); |
- if (!history->Init(GetPath(), GetBookmarkModel())) |
- return NULL; |
- history_service_.swap(history); |
- } |
- return history_service_.get(); |
+ return HistoryServiceFactory::GetForProfile(this, sat).get(); |
} |
HistoryService* ProfileImpl::GetHistoryServiceWithoutCreating() { |
- return history_service_.get(); |
+ return HistoryServiceFactory::GetForProfileIfExists(this).get(); |
} |
AutocompleteClassifier* ProfileImpl::GetAutocompleteClassifier() { |
@@ -845,11 +810,7 @@ |
} |
BookmarkModel* ProfileImpl::GetBookmarkModel() { |
- if (!bookmark_bar_model_.get()) { |
- bookmark_bar_model_.reset(new BookmarkModel(this)); |
- bookmark_bar_model_->Load(); |
- } |
- return bookmark_bar_model_.get(); |
+ return BookmarkModelFactory::GetForProfile(this); |
} |
ProtocolHandlerRegistry* ProfileImpl::GetProtocolHandlerRegistry() { |