OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/bookmarks/bookmark_model.h" | 5 #include "chrome/browser/bookmarks/bookmark_model.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <functional> | 8 #include <functional> |
9 | 9 |
10 #include "base/callback.h" | 10 #include "base/callback.h" |
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
187 FOR_EACH_OBSERVER(BookmarkModelObserver, observers_, | 187 FOR_EACH_OBSERVER(BookmarkModelObserver, observers_, |
188 BookmarkImportBeginning(this)); | 188 BookmarkImportBeginning(this)); |
189 } | 189 } |
190 | 190 |
191 void BookmarkModel::EndImportMode() { | 191 void BookmarkModel::EndImportMode() { |
192 FOR_EACH_OBSERVER(BookmarkModelObserver, observers_, | 192 FOR_EACH_OBSERVER(BookmarkModelObserver, observers_, |
193 BookmarkImportEnding(this)); | 193 BookmarkImportEnding(this)); |
194 } | 194 } |
195 | 195 |
196 void BookmarkModel::Remove(const BookmarkNode* parent, int index) { | 196 void BookmarkModel::Remove(const BookmarkNode* parent, int index) { |
197 if (!loaded_ || !IsValidIndex(parent, index, false) || is_root(parent)) { | 197 if (!loaded_ || !IsValidIndex(parent, index, false) || |
| 198 parent == root_node()) { |
198 NOTREACHED(); | 199 NOTREACHED(); |
199 return; | 200 return; |
200 } | 201 } |
201 RemoveAndDeleteNode(AsMutable(parent->GetChild(index))); | 202 RemoveAndDeleteNode(AsMutable(parent->GetChild(index))); |
202 } | 203 } |
203 | 204 |
204 void BookmarkModel::Move(const BookmarkNode* node, | 205 void BookmarkModel::Move(const BookmarkNode* node, |
205 const BookmarkNode* new_parent, | 206 const BookmarkNode* new_parent, |
206 int index) { | 207 int index) { |
207 if (!loaded_ || !node || !IsValidIndex(new_parent, index, true) || | 208 if (!loaded_ || !node || !IsValidIndex(new_parent, index, true) || |
208 is_root(new_parent) || is_permanent_node(node)) { | 209 new_parent == root_node() || is_permanent_node(node)) { |
209 NOTREACHED(); | 210 NOTREACHED(); |
210 return; | 211 return; |
211 } | 212 } |
212 | 213 |
213 if (new_parent->HasAncestor(node)) { | 214 if (new_parent->HasAncestor(node)) { |
214 // Can't make an ancestor of the node be a child of the node. | 215 // Can't make an ancestor of the node be a child of the node. |
215 NOTREACHED(); | 216 NOTREACHED(); |
216 return; | 217 return; |
217 } | 218 } |
218 | 219 |
(...skipping 18 matching lines...) Expand all Loading... |
237 | 238 |
238 FOR_EACH_OBSERVER(BookmarkModelObserver, observers_, | 239 FOR_EACH_OBSERVER(BookmarkModelObserver, observers_, |
239 BookmarkNodeMoved(this, old_parent, old_index, | 240 BookmarkNodeMoved(this, old_parent, old_index, |
240 new_parent, index)); | 241 new_parent, index)); |
241 } | 242 } |
242 | 243 |
243 void BookmarkModel::Copy(const BookmarkNode* node, | 244 void BookmarkModel::Copy(const BookmarkNode* node, |
244 const BookmarkNode* new_parent, | 245 const BookmarkNode* new_parent, |
245 int index) { | 246 int index) { |
246 if (!loaded_ || !node || !IsValidIndex(new_parent, index, true) || | 247 if (!loaded_ || !node || !IsValidIndex(new_parent, index, true) || |
247 is_root(new_parent) || is_permanent_node(node)) { | 248 new_parent == root_node() || is_permanent_node(node)) { |
248 NOTREACHED(); | 249 NOTREACHED(); |
249 return; | 250 return; |
250 } | 251 } |
251 | 252 |
252 if (new_parent->HasAncestor(node)) { | 253 if (new_parent->HasAncestor(node)) { |
253 // Can't make an ancestor of the node be a child of the node. | 254 // Can't make an ancestor of the node be a child of the node. |
254 NOTREACHED(); | 255 NOTREACHED(); |
255 return; | 256 return; |
256 } | 257 } |
257 | 258 |
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
393 } | 394 } |
394 | 395 |
395 const BookmarkNode* BookmarkModel::GetNodeByID(int64 id) { | 396 const BookmarkNode* BookmarkModel::GetNodeByID(int64 id) { |
396 // TODO(sky): TreeNode needs a method that visits all nodes using a predicate. | 397 // TODO(sky): TreeNode needs a method that visits all nodes using a predicate. |
397 return GetNodeByID(&root_, id); | 398 return GetNodeByID(&root_, id); |
398 } | 399 } |
399 | 400 |
400 const BookmarkNode* BookmarkModel::AddFolder(const BookmarkNode* parent, | 401 const BookmarkNode* BookmarkModel::AddFolder(const BookmarkNode* parent, |
401 int index, | 402 int index, |
402 const string16& title) { | 403 const string16& title) { |
403 if (!loaded_ || parent == &root_ || !IsValidIndex(parent, index, true)) { | 404 if (!loaded_ || parent == root_node() || !IsValidIndex(parent, index, true)) { |
404 // Can't add to the root. | 405 // Can't add to the root. |
405 NOTREACHED(); | 406 NOTREACHED(); |
406 return NULL; | 407 return NULL; |
407 } | 408 } |
408 | 409 |
409 BookmarkNode* new_node = new BookmarkNode(generate_next_node_id(), GURL()); | 410 BookmarkNode* new_node = new BookmarkNode(generate_next_node_id(), GURL()); |
410 new_node->set_date_folder_modified(Time::Now()); | 411 new_node->set_date_folder_modified(Time::Now()); |
411 new_node->set_title(title); | 412 new_node->set_title(title); |
412 new_node->set_type(BookmarkNode::FOLDER); | 413 new_node->set_type(BookmarkNode::FOLDER); |
413 | 414 |
414 return AddNode(AsMutable(parent), index, new_node, false); | 415 return AddNode(AsMutable(parent), index, new_node, false); |
415 } | 416 } |
416 | 417 |
417 const BookmarkNode* BookmarkModel::AddURL(const BookmarkNode* parent, | 418 const BookmarkNode* BookmarkModel::AddURL(const BookmarkNode* parent, |
418 int index, | 419 int index, |
419 const string16& title, | 420 const string16& title, |
420 const GURL& url) { | 421 const GURL& url) { |
421 return AddURLWithCreationTime(parent, index, title, url, Time::Now()); | 422 return AddURLWithCreationTime(parent, index, title, url, Time::Now()); |
422 } | 423 } |
423 | 424 |
424 const BookmarkNode* BookmarkModel::AddURLWithCreationTime( | 425 const BookmarkNode* BookmarkModel::AddURLWithCreationTime( |
425 const BookmarkNode* parent, | 426 const BookmarkNode* parent, |
426 int index, | 427 int index, |
427 const string16& title, | 428 const string16& title, |
428 const GURL& url, | 429 const GURL& url, |
429 const Time& creation_time) { | 430 const Time& creation_time) { |
430 if (!loaded_ || !url.is_valid() || is_root(parent) || | 431 if (!loaded_ || !url.is_valid() || parent == root_node() || |
431 !IsValidIndex(parent, index, true)) { | 432 !IsValidIndex(parent, index, true)) { |
432 NOTREACHED(); | 433 NOTREACHED(); |
433 return NULL; | 434 return NULL; |
434 } | 435 } |
435 | 436 |
436 bool was_bookmarked = IsBookmarked(url); | 437 bool was_bookmarked = IsBookmarked(url); |
437 | 438 |
438 SetDateFolderModified(parent, creation_time); | 439 SetDateFolderModified(parent, creation_time); |
439 | 440 |
440 BookmarkNode* new_node = new BookmarkNode(generate_next_node_id(), url); | 441 BookmarkNode* new_node = new BookmarkNode(generate_next_node_id(), url); |
441 new_node->set_title(title); | 442 new_node->set_title(title); |
442 new_node->set_date_added(creation_time); | 443 new_node->set_date_added(creation_time); |
443 new_node->set_type(BookmarkNode::URL); | 444 new_node->set_type(BookmarkNode::URL); |
444 | 445 |
445 { | 446 { |
446 // Only hold the lock for the duration of the insert. | 447 // Only hold the lock for the duration of the insert. |
447 base::AutoLock url_lock(url_lock_); | 448 base::AutoLock url_lock(url_lock_); |
448 nodes_ordered_by_url_set_.insert(new_node); | 449 nodes_ordered_by_url_set_.insert(new_node); |
449 } | 450 } |
450 | 451 |
451 return AddNode(AsMutable(parent), index, new_node, was_bookmarked); | 452 return AddNode(AsMutable(parent), index, new_node, was_bookmarked); |
452 } | 453 } |
453 | 454 |
454 void BookmarkModel::SortChildren(const BookmarkNode* parent) { | 455 void BookmarkModel::SortChildren(const BookmarkNode* parent) { |
455 if (!parent || !parent->is_folder() || is_root(parent) || | 456 if (!parent || !parent->is_folder() || parent == root_node() || |
456 parent->child_count() <= 1) { | 457 parent->child_count() <= 1) { |
457 return; | 458 return; |
458 } | 459 } |
459 | 460 |
460 UErrorCode error = U_ZERO_ERROR; | 461 UErrorCode error = U_ZERO_ERROR; |
461 scoped_ptr<icu::Collator> collator( | 462 scoped_ptr<icu::Collator> collator( |
462 icu::Collator::createInstance( | 463 icu::Collator::createInstance( |
463 icu::Locale(g_browser_process->GetApplicationLocale().c_str()), | 464 icu::Locale(g_browser_process->GetApplicationLocale().c_str()), |
464 error)); | 465 error)); |
465 if (U_FAILURE(error)) | 466 if (U_FAILURE(error)) |
(...skipping 359 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
825 | 826 |
826 void BookmarkModel::SetFileChanged() { | 827 void BookmarkModel::SetFileChanged() { |
827 file_changed_ = true; | 828 file_changed_ = true; |
828 } | 829 } |
829 | 830 |
830 BookmarkLoadDetails* BookmarkModel::CreateLoadDetails() { | 831 BookmarkLoadDetails* BookmarkModel::CreateLoadDetails() { |
831 BookmarkNode* bb_node = CreatePermanentNode(BookmarkNode::BOOKMARK_BAR); | 832 BookmarkNode* bb_node = CreatePermanentNode(BookmarkNode::BOOKMARK_BAR); |
832 BookmarkNode* other_node = CreatePermanentNode(BookmarkNode::OTHER_NODE); | 833 BookmarkNode* other_node = CreatePermanentNode(BookmarkNode::OTHER_NODE); |
833 BookmarkNode* synced_node = CreatePermanentNode(BookmarkNode::SYNCED); | 834 BookmarkNode* synced_node = CreatePermanentNode(BookmarkNode::SYNCED); |
834 return new BookmarkLoadDetails(bb_node, other_node, synced_node, | 835 return new BookmarkLoadDetails(bb_node, other_node, synced_node, |
835 new BookmarkIndex(profile()), next_node_id_); | 836 new BookmarkIndex(profile_), next_node_id_); |
836 } | 837 } |
OLD | NEW |