| 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) { |
| 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::SetPermanentNodeVisibile(BookmarkNode::Type type, |
| 534 bool value) { |
| 552 DCHECK(loaded_); | 535 DCHECK(loaded_); |
| 553 static_cast<MobileNode*>(mobile_node_)->set_visible(value); | 536 switch (type) { |
| 537 case BookmarkNode::BOOKMARK_BAR: |
| 538 bookmark_bar_node_->set_visible(value); |
| 539 break; |
| 540 case BookmarkNode::OTHER_NODE: |
| 541 other_node_->set_visible(value); |
| 542 break; |
| 543 case BookmarkNode::MOBILE: |
| 544 mobile_node_->set_visible(value); |
| 545 break; |
| 546 default: |
| 547 NOTREACHED(); |
| 548 } |
| 554 } | 549 } |
| 555 | 550 |
| 556 bool BookmarkModel::IsBookmarkedNoLock(const GURL& url) { | 551 bool BookmarkModel::IsBookmarkedNoLock(const GURL& url) { |
| 557 BookmarkNode tmp_node(url); | 552 BookmarkNode tmp_node(url); |
| 558 return (nodes_ordered_by_url_set_.find(&tmp_node) != | 553 return (nodes_ordered_by_url_set_.find(&tmp_node) != |
| 559 nodes_ordered_by_url_set_.end()); | 554 nodes_ordered_by_url_set_.end()); |
| 560 } | 555 } |
| 561 | 556 |
| 562 void BookmarkModel::RemoveNode(BookmarkNode* node, | 557 void BookmarkModel::RemoveNode(BookmarkNode* node, |
| 563 std::set<GURL>* removed_urls) { | 558 std::set<GURL>* removed_urls) { |
| (...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 733 } | 728 } |
| 734 | 729 |
| 735 bool BookmarkModel::IsValidIndex(const BookmarkNode* parent, | 730 bool BookmarkModel::IsValidIndex(const BookmarkNode* parent, |
| 736 int index, | 731 int index, |
| 737 bool allow_end) { | 732 bool allow_end) { |
| 738 return (parent && parent->is_folder() && | 733 return (parent && parent->is_folder() && |
| 739 (index >= 0 && (index < parent->child_count() || | 734 (index >= 0 && (index < parent->child_count() || |
| 740 (allow_end && index == parent->child_count())))); | 735 (allow_end && index == parent->child_count())))); |
| 741 } | 736 } |
| 742 | 737 |
| 743 BookmarkNode* BookmarkModel::CreatePermanentNode(BookmarkNode::Type type) { | 738 BookmarkPermanentNode* BookmarkModel::CreatePermanentNode( |
| 739 BookmarkNode::Type type) { |
| 744 DCHECK(type == BookmarkNode::BOOKMARK_BAR || | 740 DCHECK(type == BookmarkNode::BOOKMARK_BAR || |
| 745 type == BookmarkNode::OTHER_NODE || | 741 type == BookmarkNode::OTHER_NODE || |
| 746 type == BookmarkNode::MOBILE); | 742 type == BookmarkNode::MOBILE); |
| 747 BookmarkNode* node; | 743 BookmarkPermanentNode* node = |
| 748 if (type == BookmarkNode::MOBILE) { | 744 new BookmarkPermanentNode(generate_next_node_id()); |
| 749 node = new MobileNode(generate_next_node_id()); | 745 if (type == BookmarkNode::MOBILE) |
| 750 node->set_title( | 746 node->set_visible(false); // Mobile node is initially hidden. |
| 751 l10n_util::GetStringUTF16(IDS_BOOKMARK_BAR_MOBILE_FOLDER_NAME)); | 747 |
| 752 } else { | 748 int title_id; |
| 753 node = new BookmarkNode(generate_next_node_id(), GURL()); | 749 switch (type) { |
| 754 if (type == BookmarkNode::BOOKMARK_BAR) { | 750 case BookmarkNode::BOOKMARK_BAR: |
| 755 node->set_title(l10n_util::GetStringUTF16(IDS_BOOKMARK_BAR_FOLDER_NAME)); | 751 title_id = IDS_BOOKMARK_BAR_FOLDER_NAME; |
| 756 } else if (type == BookmarkNode::OTHER_NODE) { | 752 break; |
| 757 node->set_title( | 753 case BookmarkNode::OTHER_NODE: |
| 758 l10n_util::GetStringUTF16(IDS_BOOKMARK_BAR_OTHER_FOLDER_NAME)); | 754 title_id = IDS_BOOKMARK_BAR_OTHER_FOLDER_NAME; |
| 759 } else { | 755 break; |
| 756 case BookmarkNode::MOBILE: |
| 757 title_id = IDS_BOOKMARK_BAR_MOBILE_FOLDER_NAME; |
| 758 break; |
| 759 default: |
| 760 NOTREACHED(); | 760 NOTREACHED(); |
| 761 } | 761 title_id = IDS_BOOKMARK_BAR_FOLDER_NAME; |
| 762 break; |
| 762 } | 763 } |
| 764 node->set_title(l10n_util::GetStringUTF16(title_id)); |
| 763 node->set_type(type); | 765 node->set_type(type); |
| 764 return node; | 766 return node; |
| 765 } | 767 } |
| 766 | 768 |
| 767 void BookmarkModel::OnFaviconDataAvailable( | 769 void BookmarkModel::OnFaviconDataAvailable( |
| 768 FaviconService::Handle handle, | 770 FaviconService::Handle handle, |
| 769 history::FaviconData favicon) { | 771 history::FaviconData favicon) { |
| 770 SkBitmap favicon_bitmap; | 772 SkBitmap favicon_bitmap; |
| 771 BookmarkNode* node = | 773 BookmarkNode* node = |
| 772 load_consumer_.GetClientData( | 774 load_consumer_.GetClientData( |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 849 nodes_ordered_by_url_set_.insert(node); | 851 nodes_ordered_by_url_set_.insert(node); |
| 850 for (int i = 0; i < node->child_count(); ++i) | 852 for (int i = 0; i < node->child_count(); ++i) |
| 851 PopulateNodesByURL(node->GetChild(i)); | 853 PopulateNodesByURL(node->GetChild(i)); |
| 852 } | 854 } |
| 853 | 855 |
| 854 int64 BookmarkModel::generate_next_node_id() { | 856 int64 BookmarkModel::generate_next_node_id() { |
| 855 return next_node_id_++; | 857 return next_node_id_++; |
| 856 } | 858 } |
| 857 | 859 |
| 858 BookmarkLoadDetails* BookmarkModel::CreateLoadDetails() { | 860 BookmarkLoadDetails* BookmarkModel::CreateLoadDetails() { |
| 859 BookmarkNode* bb_node = CreatePermanentNode(BookmarkNode::BOOKMARK_BAR); | 861 BookmarkPermanentNode* bb_node = |
| 860 BookmarkNode* other_node = CreatePermanentNode(BookmarkNode::OTHER_NODE); | 862 CreatePermanentNode(BookmarkNode::BOOKMARK_BAR); |
| 861 BookmarkNode* mobile_node = CreatePermanentNode(BookmarkNode::MOBILE); | 863 BookmarkPermanentNode* other_node = |
| 864 CreatePermanentNode(BookmarkNode::OTHER_NODE); |
| 865 BookmarkPermanentNode* mobile_node = |
| 866 CreatePermanentNode(BookmarkNode::MOBILE); |
| 862 return new BookmarkLoadDetails(bb_node, other_node, mobile_node, | 867 return new BookmarkLoadDetails(bb_node, other_node, mobile_node, |
| 863 new BookmarkIndex(profile_), next_node_id_); | 868 new BookmarkIndex(profile_), next_node_id_); |
| 864 } | 869 } |
| OLD | NEW |