Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(153)

Side by Side Diff: chrome/browser/bookmarks/bookmark_model.cc

Issue 8828006: Makes all permanent nodes share the same node class so that visibility (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/browser/bookmarks/bookmark_model.h ('k') | chrome/browser/bookmarks/bookmark_storage.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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 }
OLDNEW
« no previous file with comments | « chrome/browser/bookmarks/bookmark_model.h ('k') | chrome/browser/bookmarks/bookmark_storage.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698