diff options
author | sky@google.com <sky@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-09-04 03:35:33 +0000 |
---|---|---|
committer | sky@google.com <sky@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-09-04 03:35:33 +0000 |
commit | c919469b3dfc6ea110fdc2218c014599babfd6e9 (patch) | |
tree | 648bd6033dc8bd83c69f1275bae3e0da4b893051 /chrome/browser/views/bookmark_bar_view.cc | |
parent | 023b66d1d8e7fcb99a6ae7dfbed1ce998d3c6882 (diff) | |
download | chromium_src-c919469b3dfc6ea110fdc2218c014599babfd6e9.zip chromium_src-c919469b3dfc6ea110fdc2218c014599babfd6e9.tar.gz chromium_src-c919469b3dfc6ea110fdc2218c014599babfd6e9.tar.bz2 |
Fixes crash in BookmarkBarView. If the HistoryService fails to load it
was possible for BookmarkBarView to deref NULL (the model_
field). There is no point in having the BookmarkBarView wait for
history to load now though, so I've taken this out which makes it
impossible to get in this situation.
BUG=1356168
TEST=make sure bookmarks still work correctly
Review URL: http://codereview.chromium.org/426
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@1709 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/views/bookmark_bar_view.cc')
-rw-r--r-- | chrome/browser/views/bookmark_bar_view.cc | 60 |
1 files changed, 26 insertions, 34 deletions
diff --git a/chrome/browser/views/bookmark_bar_view.cc b/chrome/browser/views/bookmark_bar_view.cc index 64e4489..b5a952f 100644 --- a/chrome/browser/views/bookmark_bar_view.cc +++ b/chrome/browser/views/bookmark_bar_view.cc @@ -672,20 +672,17 @@ void BookmarkBarView::SetProfile(Profile* profile) { NotificationService* ns = NotificationService::current(); Source<Profile> ns_source(profile_->GetOriginalProfile()); - ns->AddObserver(this, NOTIFY_HISTORY_CREATED, ns_source); ns->AddObserver(this, NOTIFY_BOOKMARK_BUBBLE_SHOWN, ns_source); ns->AddObserver(this, NOTIFY_BOOKMARK_BUBBLE_HIDDEN, ns_source); ns->AddObserver(this, NOTIFY_BOOKMARK_BAR_VISIBILITY_PREF_CHANGED, NotificationService::AllSources()); - if (!profile->HasHistoryService()) { - // The history service hasn't been loaded yet. We don't want to trigger - // loading it. Instead we install an observer that is notified when the - // history service has loaded. - model_ = NULL; - } else { - ProfileHasValidHistoryService(); - } + model_ = profile_->GetBookmarkBarModel(); + model_->AddObserver(this); + if (model_->IsLoaded()) + Loaded(model_); + // else case: we'll receive notification back from the BookmarkBarModel when + // done loading, then we'll populate the bar. } void BookmarkBarView::SetPageNavigator(PageNavigator* navigator) { @@ -1121,6 +1118,7 @@ void BookmarkBarView::Init() { SetContextMenuController(this); size_animation_.reset(new SlideAnimation(this)); + size_animation_->SetSlideDuration(4000); } MenuButton* BookmarkBarView::CreateOtherBookmarkedButton() { @@ -1439,37 +1437,31 @@ void BookmarkBarView::Observe(NotificationType type, const NotificationSource& source, const NotificationDetails& details) { DCHECK(profile_); - if (type == NOTIFY_BOOKMARK_BAR_VISIBILITY_PREF_CHANGED) { - if (IsAlwaysShown()) { - size_animation_->Show(); - } else { - size_animation_->Hide(); - } - } else if (type == NOTIFY_HISTORY_CREATED) { - ProfileHasValidHistoryService(); - } else if (type == NOTIFY_BOOKMARK_BUBBLE_SHOWN) { - StopThrobbing(true); - bubble_url_ = *(Details<GURL>(details).ptr()); - StartThrobbing(); - } else if (type == NOTIFY_BOOKMARK_BUBBLE_HIDDEN) { - StopThrobbing(false); - bubble_url_ = GURL(); - } -} + switch (type) { + case NOTIFY_BOOKMARK_BAR_VISIBILITY_PREF_CHANGED: + if (IsAlwaysShown()) { + size_animation_->Show(); + } else { + size_animation_->Hide(); + } + break; -void BookmarkBarView::ProfileHasValidHistoryService() { - DCHECK(profile_); - model_ = profile_->GetBookmarkBarModel(); - DCHECK(model_); - model_->AddObserver(this); - if (model_->IsLoaded()) - Loaded(model_); + case NOTIFY_BOOKMARK_BUBBLE_SHOWN: + StopThrobbing(true); + bubble_url_ = *(Details<GURL>(details).ptr()); + StartThrobbing(); + break; + + case NOTIFY_BOOKMARK_BUBBLE_HIDDEN: + StopThrobbing(false); + bubble_url_ = GURL(); + break; + } } void BookmarkBarView::RemoveNotificationObservers() { NotificationService* ns = NotificationService::current(); Source<Profile> ns_source(profile_->GetOriginalProfile()); - ns->RemoveObserver(this, NOTIFY_HISTORY_CREATED, ns_source); ns->RemoveObserver(this, NOTIFY_BOOKMARK_BUBBLE_SHOWN, ns_source); ns->RemoveObserver(this, NOTIFY_BOOKMARK_BUBBLE_HIDDEN, ns_source); ns->RemoveObserver(this, NOTIFY_BOOKMARK_BAR_VISIBILITY_PREF_CHANGED, |