blob: e748818a2a3c05af116ba8c7b417033800ef89d9 [file] [log] [blame]
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/ui/cocoa/bookmarks/bookmark_model_observer_for_cocoa.h"
BookmarkModelObserverForCocoa::BookmarkModelObserverForCocoa(
BookmarkModel* model,
ChangeCallback callback) {
DCHECK(model);
callback_.reset(Block_copy(callback));
model_ = model;
model_->AddObserver(this);
}
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(YES);
}
void BookmarkModelObserverForCocoa::BookmarkNodeMoved(
BookmarkModel* model,
const BookmarkNode* old_parent,
int old_index,
const BookmarkNode* new_parent,
int new_index) {
// Editors often have a tree of parents, so movement of folders
// must cause a cancel.
Notify(NO);
}
void BookmarkModelObserverForCocoa::BookmarkNodeRemoved(
BookmarkModel* model,
const BookmarkNode* parent,
int old_index,
const BookmarkNode* node) {
// See comment in BookmarkNodeMoved.
Notify(YES);
}
void BookmarkModelObserverForCocoa::BookmarkAllNodesRemoved(
BookmarkModel* model) {
Notify(YES);
}
void BookmarkModelObserverForCocoa::BookmarkNodeChanged(
BookmarkModel* model,
const BookmarkNode* node) {
if (!nodes_.size() || nodes_.find(node) != nodes_.end())
Notify(NO);
}
void BookmarkModelObserverForCocoa::Notify(BOOL deleted) {
callback_.get()(deleted);
}