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" |
11 #include "chrome/browser/bookmarks/bookmark_index.h" | 11 #include "chrome/browser/bookmarks/bookmark_index.h" |
12 #include "chrome/browser/bookmarks/bookmark_utils.h" | 12 #include "chrome/browser/bookmarks/bookmark_utils.h" |
13 #include "chrome/browser/bookmarks/bookmark_storage.h" | 13 #include "chrome/browser/bookmarks/bookmark_storage.h" |
14 #include "chrome/browser/browser_process.h" | 14 #include "chrome/browser/browser_process.h" |
15 #include "chrome/browser/profile.h" | 15 #include "chrome/browser/profile.h" |
16 #include "chrome/common/notification_service.h" | 16 #include "chrome/common/notification_service.h" |
| 17 #include "chrome/common/pref_service.h" |
17 #include "grit/generated_resources.h" | 18 #include "grit/generated_resources.h" |
18 | 19 |
19 using base::Time; | 20 using base::Time; |
20 | 21 |
21 // BookmarkNode --------------------------------------------------------------- | 22 // BookmarkNode --------------------------------------------------------------- |
22 | 23 |
23 BookmarkNode::BookmarkNode(const GURL& url) | 24 BookmarkNode::BookmarkNode(const GURL& url) |
24 : url_(url) { | 25 : url_(url) { |
25 Initialize(0); | 26 Initialize(0); |
26 } | 27 } |
(...skipping 20 matching lines...) Expand all Loading... |
47 type_ = entry.type; | 48 type_ = entry.type; |
48 date_added_ = entry.date_added; | 49 date_added_ = entry.date_added; |
49 date_group_modified_ = entry.date_group_modified; | 50 date_group_modified_ = entry.date_group_modified; |
50 SetTitle(entry.title); | 51 SetTitle(entry.title); |
51 } | 52 } |
52 | 53 |
53 // BookmarkModel -------------------------------------------------------------- | 54 // BookmarkModel -------------------------------------------------------------- |
54 | 55 |
55 namespace { | 56 namespace { |
56 | 57 |
| 58 // Constant for persist IDs prefernece. |
| 59 const wchar_t kPrefPersistIDs[] = L"bookmarks.persist_ids"; |
| 60 |
57 // Comparator used when sorting bookmarks. Folders are sorted first, then | 61 // Comparator used when sorting bookmarks. Folders are sorted first, then |
58 // bookmarks. | 62 // bookmarks. |
59 class SortComparator : public std::binary_function<BookmarkNode*, | 63 class SortComparator : public std::binary_function<BookmarkNode*, |
60 BookmarkNode*, | 64 BookmarkNode*, |
61 bool> { | 65 bool> { |
62 public: | 66 public: |
63 explicit SortComparator(Collator* collator) : collator_(collator) { } | 67 explicit SortComparator(Collator* collator) : collator_(collator) { } |
64 | 68 |
65 // Returns true if lhs preceeds rhs. | 69 // Returns true if lhs preceeds rhs. |
66 bool operator() (BookmarkNode* n1, BookmarkNode* n2) { | 70 bool operator() (BookmarkNode* n1, BookmarkNode* n2) { |
(...skipping 10 matching lines...) Expand all Loading... |
77 | 81 |
78 private: | 82 private: |
79 Collator* collator_; | 83 Collator* collator_; |
80 }; | 84 }; |
81 | 85 |
82 } // namespace | 86 } // namespace |
83 | 87 |
84 BookmarkModel::BookmarkModel(Profile* profile) | 88 BookmarkModel::BookmarkModel(Profile* profile) |
85 : profile_(profile), | 89 : profile_(profile), |
86 loaded_(false), | 90 loaded_(false), |
| 91 persist_ids_(false), |
87 root_(GURL()), | 92 root_(GURL()), |
88 bookmark_bar_node_(NULL), | 93 bookmark_bar_node_(NULL), |
89 other_node_(NULL), | 94 other_node_(NULL), |
90 next_node_id_(1), | 95 next_node_id_(1), |
91 observers_(ObserverList<BookmarkModelObserver>::NOTIFY_EXISTING_ONLY), | 96 observers_(ObserverList<BookmarkModelObserver>::NOTIFY_EXISTING_ONLY), |
92 loaded_signal_(TRUE, FALSE) { | 97 loaded_signal_(TRUE, FALSE) { |
93 if (!profile_) { | 98 if (!profile_) { |
94 // Profile is null during testing. | 99 // Profile is null during testing. |
95 DoneLoading(CreateLoadDetails()); | 100 DoneLoading(CreateLoadDetails()); |
96 } | 101 } |
| 102 RegisterPreferences(); |
| 103 LoadPreferences(); |
97 } | 104 } |
98 | 105 |
99 BookmarkModel::~BookmarkModel() { | 106 BookmarkModel::~BookmarkModel() { |
100 FOR_EACH_OBSERVER(BookmarkModelObserver, observers_, | 107 FOR_EACH_OBSERVER(BookmarkModelObserver, observers_, |
101 BookmarkModelBeingDeleted(this)); | 108 BookmarkModelBeingDeleted(this)); |
102 | 109 |
103 if (store_) { | 110 if (store_) { |
104 // The store maintains a reference back to us. We need to tell it we're gone | 111 // The store maintains a reference back to us. We need to tell it we're gone |
105 // so that it doesn't try and invoke a method back on us again. | 112 // so that it doesn't try and invoke a method back on us again. |
106 store_->BookmarkModelDeleted(); | 113 store_->BookmarkModelDeleted(); |
(...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
370 return; | 377 return; |
371 | 378 |
372 index_->GetBookmarksWithTitlesMatching(text, max_count, matches); | 379 index_->GetBookmarksWithTitlesMatching(text, max_count, matches); |
373 } | 380 } |
374 | 381 |
375 void BookmarkModel::ClearStore() { | 382 void BookmarkModel::ClearStore() { |
376 registrar_.RemoveAll(); | 383 registrar_.RemoveAll(); |
377 store_ = NULL; | 384 store_ = NULL; |
378 } | 385 } |
379 | 386 |
| 387 void BookmarkModel::SetPersistIDs(bool value) { |
| 388 if (value == persist_ids_) |
| 389 return; |
| 390 persist_ids_ = value; |
| 391 if (profile_) { |
| 392 PrefService* pref_service = profile_->GetPrefs(); |
| 393 pref_service->SetBoolean(kPrefPersistIDs, persist_ids_); |
| 394 } |
| 395 } |
| 396 |
380 bool BookmarkModel::IsBookmarkedNoLock(const GURL& url) { | 397 bool BookmarkModel::IsBookmarkedNoLock(const GURL& url) { |
381 BookmarkNode tmp_node(url); | 398 BookmarkNode tmp_node(url); |
382 return (nodes_ordered_by_url_set_.find(&tmp_node) != | 399 return (nodes_ordered_by_url_set_.find(&tmp_node) != |
383 nodes_ordered_by_url_set_.end()); | 400 nodes_ordered_by_url_set_.end()); |
384 } | 401 } |
385 | 402 |
386 void BookmarkModel::FavIconLoaded(BookmarkNode* node) { | 403 void BookmarkModel::FavIconLoaded(BookmarkNode* node) { |
387 // Send out notification to the observer. | 404 // Send out notification to the observer. |
388 FOR_EACH_OBSERVER(BookmarkModelObserver, observers_, | 405 FOR_EACH_OBSERVER(BookmarkModelObserver, observers_, |
389 BookmarkNodeFavIconLoaded(this, node)); | 406 BookmarkNodeFavIconLoaded(this, node)); |
(...skipping 292 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
682 int BookmarkModel::generate_next_node_id() { | 699 int BookmarkModel::generate_next_node_id() { |
683 return next_node_id_++; | 700 return next_node_id_++; |
684 } | 701 } |
685 | 702 |
686 BookmarkStorage::LoadDetails* BookmarkModel::CreateLoadDetails() { | 703 BookmarkStorage::LoadDetails* BookmarkModel::CreateLoadDetails() { |
687 BookmarkNode* bb_node = CreateBookmarkNode(); | 704 BookmarkNode* bb_node = CreateBookmarkNode(); |
688 BookmarkNode* other_folder_node = CreateOtherBookmarksNode(); | 705 BookmarkNode* other_folder_node = CreateOtherBookmarksNode(); |
689 return new BookmarkStorage::LoadDetails( | 706 return new BookmarkStorage::LoadDetails( |
690 bb_node, other_folder_node, new BookmarkIndex(), next_node_id_); | 707 bb_node, other_folder_node, new BookmarkIndex(), next_node_id_); |
691 } | 708 } |
| 709 |
| 710 void BookmarkModel::RegisterPreferences() { |
| 711 if (!profile_) |
| 712 return; |
| 713 PrefService* pref_service = profile_->GetPrefs(); |
| 714 if (!pref_service->IsPrefRegistered(kPrefPersistIDs)) |
| 715 pref_service->RegisterBooleanPref(kPrefPersistIDs, false); |
| 716 } |
| 717 |
| 718 void BookmarkModel::LoadPreferences() { |
| 719 if (!profile_) |
| 720 return; |
| 721 PrefService* pref_service = profile_->GetPrefs(); |
| 722 persist_ids_ = pref_service->GetBoolean(kPrefPersistIDs); |
| 723 } |
OLD | NEW |