OLD | NEW |
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 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 "app/l10n_util.h" | 7 #include "app/l10n_util.h" |
8 #include "base/gfx/png_decoder.h" | 8 #include "base/gfx/png_decoder.h" |
9 #include "base/scoped_vector.h" | 9 #include "base/scoped_vector.h" |
10 #include "build/build_config.h" | 10 #include "build/build_config.h" |
(...skipping 26 matching lines...) Expand all Loading... |
37 | 37 |
38 BookmarkNode::BookmarkNode(int id, const GURL& url) | 38 BookmarkNode::BookmarkNode(int id, const GURL& url) |
39 : url_(url){ | 39 : url_(url){ |
40 Initialize(id); | 40 Initialize(id); |
41 } | 41 } |
42 | 42 |
43 void BookmarkNode::Initialize(int id) { | 43 void BookmarkNode::Initialize(int id) { |
44 id_ = id; | 44 id_ = id; |
45 loaded_favicon_ = false; | 45 loaded_favicon_ = false; |
46 favicon_load_handle_ = 0; | 46 favicon_load_handle_ = 0; |
47 type_ = !url_.is_empty() ? history::StarredEntry::URL : | 47 type_ = !url_.is_empty() ? URL : BOOKMARK_BAR; |
48 history::StarredEntry::BOOKMARK_BAR; | |
49 date_added_ = Time::Now(); | 48 date_added_ = Time::Now(); |
50 } | 49 } |
51 | 50 |
52 void BookmarkNode::Reset(const history::StarredEntry& entry) { | 51 void BookmarkNode::Reset(const history::StarredEntry& entry) { |
53 DCHECK(entry.type != history::StarredEntry::URL || | 52 DCHECK(entry.type != history::StarredEntry::URL || entry.url == url_); |
54 entry.url == url_); | |
55 | 53 |
56 favicon_ = SkBitmap(); | 54 favicon_ = SkBitmap(); |
57 type_ = entry.type; | 55 switch (entry.type) { |
| 56 case history::StarredEntry::URL: |
| 57 type_ = BookmarkNode::URL; |
| 58 break; |
| 59 case history::StarredEntry::USER_GROUP: |
| 60 type_ = BookmarkNode::FOLDER; |
| 61 break; |
| 62 case history::StarredEntry::BOOKMARK_BAR: |
| 63 type_ = BookmarkNode::BOOKMARK_BAR; |
| 64 break; |
| 65 case history::StarredEntry::OTHER: |
| 66 type_ = BookmarkNode::OTHER_NODE; |
| 67 break; |
| 68 default: |
| 69 NOTREACHED(); |
| 70 } |
58 date_added_ = entry.date_added; | 71 date_added_ = entry.date_added; |
59 date_group_modified_ = entry.date_group_modified; | 72 date_group_modified_ = entry.date_group_modified; |
60 SetTitle(entry.title); | 73 SetTitle(entry.title); |
61 } | 74 } |
62 | 75 |
63 // BookmarkModel -------------------------------------------------------------- | 76 // BookmarkModel -------------------------------------------------------------- |
64 | 77 |
65 namespace { | 78 namespace { |
66 | 79 |
67 // Constant for persist IDs prefernece. | 80 // Constant for persist IDs prefernece. |
(...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
280 if (!loaded_ || parent == &root_ || !IsValidIndex(parent, index, true)) { | 293 if (!loaded_ || parent == &root_ || !IsValidIndex(parent, index, true)) { |
281 // Can't add to the root. | 294 // Can't add to the root. |
282 NOTREACHED(); | 295 NOTREACHED(); |
283 return NULL; | 296 return NULL; |
284 } | 297 } |
285 | 298 |
286 BookmarkNode* new_node = new BookmarkNode(generate_next_node_id(), | 299 BookmarkNode* new_node = new BookmarkNode(generate_next_node_id(), |
287 GURL()); | 300 GURL()); |
288 new_node->set_date_group_modified(Time::Now()); | 301 new_node->set_date_group_modified(Time::Now()); |
289 new_node->SetTitle(title); | 302 new_node->SetTitle(title); |
290 new_node->SetType(history::StarredEntry::USER_GROUP); | 303 new_node->SetType(BookmarkNode::FOLDER); |
291 | 304 |
292 return AddNode(AsMutable(parent), index, new_node, false); | 305 return AddNode(AsMutable(parent), index, new_node, false); |
293 } | 306 } |
294 | 307 |
295 const BookmarkNode* BookmarkModel::AddURL(const BookmarkNode* parent, | 308 const BookmarkNode* BookmarkModel::AddURL(const BookmarkNode* parent, |
296 int index, | 309 int index, |
297 const std::wstring& title, | 310 const std::wstring& title, |
298 const GURL& url) { | 311 const GURL& url) { |
299 return AddURLWithCreationTime(parent, index, title, url, Time::Now()); | 312 return AddURLWithCreationTime(parent, index, title, url, Time::Now()); |
300 } | 313 } |
(...skipping 10 matching lines...) Expand all Loading... |
311 return NULL; | 324 return NULL; |
312 } | 325 } |
313 | 326 |
314 bool was_bookmarked = IsBookmarked(url); | 327 bool was_bookmarked = IsBookmarked(url); |
315 | 328 |
316 SetDateGroupModified(parent, creation_time); | 329 SetDateGroupModified(parent, creation_time); |
317 | 330 |
318 BookmarkNode* new_node = new BookmarkNode(generate_next_node_id(), url); | 331 BookmarkNode* new_node = new BookmarkNode(generate_next_node_id(), url); |
319 new_node->SetTitle(title); | 332 new_node->SetTitle(title); |
320 new_node->set_date_added(creation_time); | 333 new_node->set_date_added(creation_time); |
321 new_node->SetType(history::StarredEntry::URL); | 334 new_node->SetType(BookmarkNode::URL); |
322 | 335 |
323 { | 336 { |
324 // Only hold the lock for the duration of the insert. | 337 // Only hold the lock for the duration of the insert. |
325 AutoLock url_lock(url_lock_); | 338 AutoLock url_lock(url_lock_); |
326 nodes_ordered_by_url_set_.insert(new_node); | 339 nodes_ordered_by_url_set_.insert(new_node); |
327 } | 340 } |
328 | 341 |
329 return AddNode(AsMutable(parent), index, new_node, was_bookmarked); | 342 return AddNode(AsMutable(parent), index, new_node, was_bookmarked); |
330 } | 343 } |
331 | 344 |
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
420 BookmarkNodeFavIconLoaded(this, node)); | 433 BookmarkNodeFavIconLoaded(this, node)); |
421 } | 434 } |
422 | 435 |
423 void BookmarkModel::RemoveNode(BookmarkNode* node, | 436 void BookmarkModel::RemoveNode(BookmarkNode* node, |
424 std::set<GURL>* removed_urls) { | 437 std::set<GURL>* removed_urls) { |
425 if (!loaded_ || !node || is_permanent_node(node)) { | 438 if (!loaded_ || !node || is_permanent_node(node)) { |
426 NOTREACHED(); | 439 NOTREACHED(); |
427 return; | 440 return; |
428 } | 441 } |
429 | 442 |
430 if (node->GetType() == history::StarredEntry::URL) { | 443 if (node->GetType() == BookmarkNode::URL) { |
431 // NOTE: this is called in such a way that url_lock_ is already held. As | 444 // NOTE: this is called in such a way that url_lock_ is already held. As |
432 // such, this doesn't explicitly grab the lock. | 445 // such, this doesn't explicitly grab the lock. |
433 NodesOrderedByURLSet::iterator i = nodes_ordered_by_url_set_.find(node); | 446 NodesOrderedByURLSet::iterator i = nodes_ordered_by_url_set_.find(node); |
434 DCHECK(i != nodes_ordered_by_url_set_.end()); | 447 DCHECK(i != nodes_ordered_by_url_set_.end()); |
435 // i points to the first node with the URL, advance until we find the | 448 // i points to the first node with the URL, advance until we find the |
436 // node we're removing. | 449 // node we're removing. |
437 while (*i != node) | 450 while (*i != node) |
438 ++i; | 451 ++i; |
439 nodes_ordered_by_url_set_.erase(i); | 452 nodes_ordered_by_url_set_.erase(i); |
440 removed_urls->insert(node->GetURL()); | 453 removed_urls->insert(node->GetURL()); |
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
551 parent->Add(index, node); | 564 parent->Add(index, node); |
552 | 565 |
553 if (store_.get()) | 566 if (store_.get()) |
554 store_->ScheduleSave(); | 567 store_->ScheduleSave(); |
555 | 568 |
556 FOR_EACH_OBSERVER(BookmarkModelObserver, observers_, | 569 FOR_EACH_OBSERVER(BookmarkModelObserver, observers_, |
557 BookmarkNodeAdded(this, parent, index)); | 570 BookmarkNodeAdded(this, parent, index)); |
558 | 571 |
559 index_->Add(node); | 572 index_->Add(node); |
560 | 573 |
561 if (node->GetType() == history::StarredEntry::URL && !was_bookmarked) { | 574 if (node->GetType() == BookmarkNode::URL && !was_bookmarked) { |
562 history::URLsStarredDetails details(true); | 575 history::URLsStarredDetails details(true); |
563 details.changed_urls.insert(node->GetURL()); | 576 details.changed_urls.insert(node->GetURL()); |
564 NotificationService::current()->Notify( | 577 NotificationService::current()->Notify( |
565 NotificationType::URLS_STARRED, | 578 NotificationType::URLS_STARRED, |
566 Source<Profile>(profile_), | 579 Source<Profile>(profile_), |
567 Details<history::URLsStarredDetails>(&details)); | 580 Details<history::URLsStarredDetails>(&details)); |
568 } | 581 } |
569 return node; | 582 return node; |
570 } | 583 } |
571 | 584 |
572 void BookmarkModel::BlockTillLoaded() { | 585 void BookmarkModel::BlockTillLoaded() { |
573 loaded_signal_.Wait(); | 586 loaded_signal_.Wait(); |
574 } | 587 } |
575 | 588 |
576 const BookmarkNode* BookmarkModel::GetNodeByID(const BookmarkNode* node, | 589 const BookmarkNode* BookmarkModel::GetNodeByID(const BookmarkNode* node, |
577 int id) { | 590 int id) { |
578 if (node->id() == id) | 591 if (node->id() == id) |
579 return node; | 592 return node; |
580 | 593 |
581 for (int i = 0; i < node->GetChildCount(); ++i) { | 594 for (int i = 0, child_count = node->GetChildCount(); i < child_count; ++i) { |
582 const BookmarkNode* result = GetNodeByID(node->GetChild(i), id); | 595 const BookmarkNode* result = GetNodeByID(node->GetChild(i), id); |
583 if (result) | 596 if (result) |
584 return result; | 597 return result; |
585 } | 598 } |
586 return NULL; | 599 return NULL; |
587 } | 600 } |
588 | 601 |
589 bool BookmarkModel::IsValidIndex(const BookmarkNode* parent, | 602 bool BookmarkModel::IsValidIndex(const BookmarkNode* parent, |
590 int index, | 603 int index, |
591 bool allow_end) { | 604 bool allow_end) { |
592 return (parent && parent->is_folder() && | 605 return (parent && parent->is_folder() && |
593 (index >= 0 && (index < parent->GetChildCount() || | 606 (index >= 0 && (index < parent->GetChildCount() || |
594 (allow_end && index == parent->GetChildCount())))); | 607 (allow_end && index == parent->GetChildCount())))); |
595 } | 608 } |
596 | 609 |
597 void BookmarkModel::SetDateGroupModified(const BookmarkNode* parent, | 610 void BookmarkModel::SetDateGroupModified(const BookmarkNode* parent, |
598 const Time time) { | 611 const Time time) { |
599 DCHECK(parent); | 612 DCHECK(parent); |
600 AsMutable(parent)->set_date_group_modified(time); | 613 AsMutable(parent)->set_date_group_modified(time); |
601 | 614 |
602 if (store_.get()) | 615 if (store_.get()) |
603 store_->ScheduleSave(); | 616 store_->ScheduleSave(); |
604 } | 617 } |
605 | 618 |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
641 DCHECK(node); | 654 DCHECK(node); |
642 node->set_favicon_load_handle(0); | 655 node->set_favicon_load_handle(0); |
643 if (know_favicon && data.get() && | 656 if (know_favicon && data.get() && |
644 PNGDecoder::Decode(&data->data, &fav_icon)) { | 657 PNGDecoder::Decode(&data->data, &fav_icon)) { |
645 node->set_favicon(fav_icon); | 658 node->set_favicon(fav_icon); |
646 FavIconLoaded(node); | 659 FavIconLoaded(node); |
647 } | 660 } |
648 } | 661 } |
649 | 662 |
650 void BookmarkModel::LoadFavIcon(BookmarkNode* node) { | 663 void BookmarkModel::LoadFavIcon(BookmarkNode* node) { |
651 if (node->GetType() != history::StarredEntry::URL) | 664 if (node->GetType() != BookmarkNode::URL) |
652 return; | 665 return; |
653 | 666 |
654 DCHECK(node->GetURL().is_valid()); | 667 DCHECK(node->GetURL().is_valid()); |
655 HistoryService* history_service = | 668 HistoryService* history_service = |
656 profile_->GetHistoryService(Profile::EXPLICIT_ACCESS); | 669 profile_->GetHistoryService(Profile::EXPLICIT_ACCESS); |
657 if (!history_service) | 670 if (!history_service) |
658 return; | 671 return; |
659 | 672 |
660 HistoryService::Handle handle = history_service->GetFavIconForURL( | 673 HistoryService::Handle handle = history_service->GetFavIconForURL( |
661 node->GetURL(), &load_consumer_, | 674 node->GetURL(), &load_consumer_, |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
740 if (!pref_service->IsPrefRegistered(kPrefPersistIDs)) | 753 if (!pref_service->IsPrefRegistered(kPrefPersistIDs)) |
741 pref_service->RegisterBooleanPref(kPrefPersistIDs, false); | 754 pref_service->RegisterBooleanPref(kPrefPersistIDs, false); |
742 } | 755 } |
743 | 756 |
744 void BookmarkModel::LoadPreferences() { | 757 void BookmarkModel::LoadPreferences() { |
745 if (!profile_) | 758 if (!profile_) |
746 return; | 759 return; |
747 PrefService* pref_service = profile_->GetPrefs(); | 760 PrefService* pref_service = profile_->GetPrefs(); |
748 persist_ids_ = pref_service->GetBoolean(kPrefPersistIDs); | 761 persist_ids_ = pref_service->GetBoolean(kPrefPersistIDs); |
749 } | 762 } |
OLD | NEW |