Index: chrome/browser/ui/cocoa/bookmarks/bookmark_model_observer_for_cocoa.mm |
diff --git a/chrome/browser/ui/cocoa/bookmarks/bookmark_model_observer_for_cocoa.mm b/chrome/browser/ui/cocoa/bookmarks/bookmark_model_observer_for_cocoa.mm |
index eba59699d05e295bc6e2ec8828a2912dc3d9fc50..e748818a2a3c05af116ba8c7b417033800ef89d9 100644 |
--- a/chrome/browser/ui/cocoa/bookmarks/bookmark_model_observer_for_cocoa.mm |
+++ b/chrome/browser/ui/cocoa/bookmarks/bookmark_model_observer_for_cocoa.mm |
@@ -5,15 +5,11 @@ |
#include "chrome/browser/ui/cocoa/bookmarks/bookmark_model_observer_for_cocoa.h" |
BookmarkModelObserverForCocoa::BookmarkModelObserverForCocoa( |
- const BookmarkNode* node, |
BookmarkModel* model, |
- NSObject* object, |
- SEL selector) { |
+ ChangeCallback callback) { |
DCHECK(model); |
- node_ = node; |
+ callback_.reset(Block_copy(callback)); |
model_ = model; |
- object_ = object; |
- selector_ = selector; |
model_->AddObserver(this); |
} |
@@ -21,9 +17,19 @@ BookmarkModelObserverForCocoa::~BookmarkModelObserverForCocoa() { |
model_->RemoveObserver(this); |
} |
+void BookmarkModelObserverForCocoa::StartObservingNode( |
+ const BookmarkNode* node) { |
+ nodes_.insert(node); |
+} |
+ |
+void BookmarkModelObserverForCocoa::StopObservingNode( |
+ const BookmarkNode* node) { |
+ nodes_.erase(node); |
+} |
+ |
void BookmarkModelObserverForCocoa::BookmarkModelBeingDeleted( |
BookmarkModel* model) { |
- Notify(); |
+ Notify(YES); |
} |
void BookmarkModelObserverForCocoa::BookmarkNodeMoved( |
@@ -34,7 +40,7 @@ void BookmarkModelObserverForCocoa::BookmarkNodeMoved( |
int new_index) { |
// Editors often have a tree of parents, so movement of folders |
// must cause a cancel. |
- Notify(); |
+ Notify(NO); |
} |
void BookmarkModelObserverForCocoa::BookmarkNodeRemoved( |
@@ -43,27 +49,21 @@ void BookmarkModelObserverForCocoa::BookmarkNodeRemoved( |
int old_index, |
const BookmarkNode* node) { |
// See comment in BookmarkNodeMoved. |
- Notify(); |
+ Notify(YES); |
} |
void BookmarkModelObserverForCocoa::BookmarkAllNodesRemoved( |
BookmarkModel* model) { |
- Notify(); |
+ Notify(YES); |
} |
void BookmarkModelObserverForCocoa::BookmarkNodeChanged( |
BookmarkModel* model, |
const BookmarkNode* node) { |
- if ((node_ == node) || (!node_)) |
- Notify(); |
-} |
- |
-void BookmarkModelObserverForCocoa::ExtensiveBookmarkChangesBeginning( |
- BookmarkModel* model) { |
- // Be conservative. |
- Notify(); |
+ if (!nodes_.size() || nodes_.find(node) != nodes_.end()) |
+ Notify(NO); |
} |
-void BookmarkModelObserverForCocoa::Notify() { |
- [object_ performSelector:selector_ withObject:nil]; |
+void BookmarkModelObserverForCocoa::Notify(BOOL deleted) { |
+ callback_.get()(deleted); |
} |