Chromium Code Reviews| 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/bind.h" | 10 #include "base/bind.h" |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 92 collator_, n1->GetTitle(), n2->GetTitle()) == UCOL_LESS; | 92 collator_, n1->GetTitle(), n2->GetTitle()) == UCOL_LESS; |
| 93 } | 93 } |
| 94 // Types differ, sort such that folders come first. | 94 // Types differ, sort such that folders come first. |
| 95 return n1->is_folder(); | 95 return n1->is_folder(); |
| 96 } | 96 } |
| 97 | 97 |
| 98 private: | 98 private: |
| 99 icu::Collator* collator_; | 99 icu::Collator* collator_; |
| 100 }; | 100 }; |
| 101 | 101 |
| 102 // MobileNode ------------------------------------------------------------------ | 102 } // namespace |
| 103 | 103 |
| 104 // The visibility of the mobile node changes based on sync state, requiring a | 104 // BookmarkPermanentNode ------------------------------------------------------- |
| 105 // special subclass. | |
| 106 class MobileNode : public BookmarkNode { | |
| 107 public: | |
| 108 explicit MobileNode(int64 id); | |
| 109 virtual ~MobileNode(); | |
| 110 | 105 |
| 111 void set_visible(bool value) { visible_ = value; } | 106 BookmarkPermanentNode::BookmarkPermanentNode(int64 id) |
| 112 | |
| 113 // BookmarkNode overrides: | |
| 114 virtual bool IsVisible() const OVERRIDE; | |
| 115 | |
| 116 private: | |
| 117 bool visible_; | |
| 118 | |
| 119 DISALLOW_COPY_AND_ASSIGN(MobileNode); | |
| 120 }; | |
| 121 | |
| 122 MobileNode::MobileNode(int64 id) | |
| 123 : BookmarkNode(id, GURL()), | 107 : BookmarkNode(id, GURL()), |
| 124 visible_(false) { | 108 visible_(true) { |
|
noyau (Ping after 24h)
2011/12/07 10:27:56
Maybe I do not understand the code enough, but it
sky
2011/12/07 16:36:53
See line 733. The mobile node is special cased.
noyau (Ping after 24h)
2011/12/07 16:49:33
Ah, I missed that line!
| |
| 125 } | 109 } |
| 126 | 110 |
| 127 MobileNode::~MobileNode() { | 111 BookmarkPermanentNode::~BookmarkPermanentNode() { |
| 128 } | 112 } |
| 129 | 113 |
| 130 bool MobileNode::IsVisible() const { | 114 bool BookmarkPermanentNode::IsVisible() const { |
| 131 return visible_ || !empty(); | 115 return visible_ || !empty(); |
| 132 } | 116 } |
| 133 | 117 |
| 134 } // namespace | |
| 135 | |
| 136 // BookmarkModel -------------------------------------------------------------- | 118 // BookmarkModel -------------------------------------------------------------- |
| 137 | 119 |
| 138 BookmarkModel::BookmarkModel(Profile* profile) | 120 BookmarkModel::BookmarkModel(Profile* profile) |
| 139 : profile_(profile), | 121 : profile_(profile), |
| 140 loaded_(false), | 122 loaded_(false), |
| 141 file_changed_(false), | 123 file_changed_(false), |
| 142 root_(GURL()), | 124 root_(GURL()), |
| 143 bookmark_bar_node_(NULL), | 125 bookmark_bar_node_(NULL), |
| 144 other_node_(NULL), | 126 other_node_(NULL), |
| 145 mobile_node_(NULL), | 127 mobile_node_(NULL), |
| (...skipping 395 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 541 return; | 523 return; |
| 542 | 524 |
| 543 index_->GetBookmarksWithTitlesMatching(text, max_count, matches); | 525 index_->GetBookmarksWithTitlesMatching(text, max_count, matches); |
| 544 } | 526 } |
| 545 | 527 |
| 546 void BookmarkModel::ClearStore() { | 528 void BookmarkModel::ClearStore() { |
| 547 registrar_.RemoveAll(); | 529 registrar_.RemoveAll(); |
| 548 store_ = NULL; | 530 store_ = NULL; |
| 549 } | 531 } |
| 550 | 532 |
| 551 void BookmarkModel::SetMobileFolderVisible(bool value) { | 533 void BookmarkModel::SetMobileFolderVisible(bool value) { |
|
noyau (Ping after 24h)
2011/12/07 09:45:22
Maybe revisiting this method to be SetFolderVisibl
sky
2011/12/07 16:36:53
Will do.
| |
| 552 DCHECK(loaded_); | 534 DCHECK(loaded_); |
| 553 static_cast<MobileNode*>(mobile_node_)->set_visible(value); | 535 mobile_node_->set_visible(value); |
| 554 } | 536 } |
| 555 | 537 |
| 556 bool BookmarkModel::IsBookmarkedNoLock(const GURL& url) { | 538 bool BookmarkModel::IsBookmarkedNoLock(const GURL& url) { |
| 557 BookmarkNode tmp_node(url); | 539 BookmarkNode tmp_node(url); |
| 558 return (nodes_ordered_by_url_set_.find(&tmp_node) != | 540 return (nodes_ordered_by_url_set_.find(&tmp_node) != |
| 559 nodes_ordered_by_url_set_.end()); | 541 nodes_ordered_by_url_set_.end()); |
| 560 } | 542 } |
| 561 | 543 |
| 562 void BookmarkModel::RemoveNode(BookmarkNode* node, | 544 void BookmarkModel::RemoveNode(BookmarkNode* node, |
| 563 std::set<GURL>* removed_urls) { | 545 std::set<GURL>* removed_urls) { |
| (...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 733 } | 715 } |
| 734 | 716 |
| 735 bool BookmarkModel::IsValidIndex(const BookmarkNode* parent, | 717 bool BookmarkModel::IsValidIndex(const BookmarkNode* parent, |
| 736 int index, | 718 int index, |
| 737 bool allow_end) { | 719 bool allow_end) { |
| 738 return (parent && parent->is_folder() && | 720 return (parent && parent->is_folder() && |
| 739 (index >= 0 && (index < parent->child_count() || | 721 (index >= 0 && (index < parent->child_count() || |
| 740 (allow_end && index == parent->child_count())))); | 722 (allow_end && index == parent->child_count())))); |
| 741 } | 723 } |
| 742 | 724 |
| 743 BookmarkNode* BookmarkModel::CreatePermanentNode(BookmarkNode::Type type) { | 725 BookmarkPermanentNode* BookmarkModel::CreatePermanentNode( |
| 726 BookmarkNode::Type type) { | |
| 744 DCHECK(type == BookmarkNode::BOOKMARK_BAR || | 727 DCHECK(type == BookmarkNode::BOOKMARK_BAR || |
| 745 type == BookmarkNode::OTHER_NODE || | 728 type == BookmarkNode::OTHER_NODE || |
| 746 type == BookmarkNode::MOBILE); | 729 type == BookmarkNode::MOBILE); |
| 747 BookmarkNode* node; | 730 BookmarkPermanentNode* node = |
| 748 if (type == BookmarkNode::MOBILE) { | 731 new BookmarkPermanentNode(generate_next_node_id()); |
| 749 node = new MobileNode(generate_next_node_id()); | 732 if (type == BookmarkNode::MOBILE) |
| 750 node->set_title( | 733 node->set_visible(false); // Mobile node is initially hidden. |
| 751 l10n_util::GetStringUTF16(IDS_BOOKMARK_BAR_MOBILE_FOLDER_NAME)); | 734 |
| 752 } else { | 735 int title_id; |
| 753 node = new BookmarkNode(generate_next_node_id(), GURL()); | 736 switch (type) { |
| 754 if (type == BookmarkNode::BOOKMARK_BAR) { | 737 case BookmarkNode::BOOKMARK_BAR: |
| 755 node->set_title(l10n_util::GetStringUTF16(IDS_BOOKMARK_BAR_FOLDER_NAME)); | 738 title_id = IDS_BOOKMARK_BAR_FOLDER_NAME; |
| 756 } else if (type == BookmarkNode::OTHER_NODE) { | 739 break; |
| 757 node->set_title( | 740 case BookmarkNode::OTHER_NODE: |
| 758 l10n_util::GetStringUTF16(IDS_BOOKMARK_BAR_OTHER_FOLDER_NAME)); | 741 title_id = IDS_BOOKMARK_BAR_OTHER_FOLDER_NAME; |
| 759 } else { | 742 break; |
| 743 case BookmarkNode::MOBILE: | |
| 744 title_id = IDS_BOOKMARK_BAR_MOBILE_FOLDER_NAME; | |
| 745 break; | |
| 746 default: | |
| 760 NOTREACHED(); | 747 NOTREACHED(); |
| 761 } | 748 title_id = IDS_BOOKMARK_BAR_FOLDER_NAME; |
| 749 break; | |
| 762 } | 750 } |
| 751 node->set_title(l10n_util::GetStringUTF16(title_id)); | |
| 763 node->set_type(type); | 752 node->set_type(type); |
| 764 return node; | 753 return node; |
| 765 } | 754 } |
| 766 | 755 |
| 767 void BookmarkModel::OnFaviconDataAvailable( | 756 void BookmarkModel::OnFaviconDataAvailable( |
| 768 FaviconService::Handle handle, | 757 FaviconService::Handle handle, |
| 769 history::FaviconData favicon) { | 758 history::FaviconData favicon) { |
| 770 SkBitmap favicon_bitmap; | 759 SkBitmap favicon_bitmap; |
| 771 BookmarkNode* node = | 760 BookmarkNode* node = |
| 772 load_consumer_.GetClientData( | 761 load_consumer_.GetClientData( |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 849 nodes_ordered_by_url_set_.insert(node); | 838 nodes_ordered_by_url_set_.insert(node); |
| 850 for (int i = 0; i < node->child_count(); ++i) | 839 for (int i = 0; i < node->child_count(); ++i) |
| 851 PopulateNodesByURL(node->GetChild(i)); | 840 PopulateNodesByURL(node->GetChild(i)); |
| 852 } | 841 } |
| 853 | 842 |
| 854 int64 BookmarkModel::generate_next_node_id() { | 843 int64 BookmarkModel::generate_next_node_id() { |
| 855 return next_node_id_++; | 844 return next_node_id_++; |
| 856 } | 845 } |
| 857 | 846 |
| 858 BookmarkLoadDetails* BookmarkModel::CreateLoadDetails() { | 847 BookmarkLoadDetails* BookmarkModel::CreateLoadDetails() { |
| 859 BookmarkNode* bb_node = CreatePermanentNode(BookmarkNode::BOOKMARK_BAR); | 848 BookmarkPermanentNode* bb_node = |
| 860 BookmarkNode* other_node = CreatePermanentNode(BookmarkNode::OTHER_NODE); | 849 CreatePermanentNode(BookmarkNode::BOOKMARK_BAR); |
| 861 BookmarkNode* mobile_node = CreatePermanentNode(BookmarkNode::MOBILE); | 850 BookmarkPermanentNode* other_node = |
| 851 CreatePermanentNode(BookmarkNode::OTHER_NODE); | |
| 852 BookmarkPermanentNode* mobile_node = | |
| 853 CreatePermanentNode(BookmarkNode::MOBILE); | |
| 862 return new BookmarkLoadDetails(bb_node, other_node, mobile_node, | 854 return new BookmarkLoadDetails(bb_node, other_node, mobile_node, |
| 863 new BookmarkIndex(profile_), next_node_id_); | 855 new BookmarkIndex(profile_), next_node_id_); |
| 864 } | 856 } |
| OLD | NEW |