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

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

Issue 242693003: Introduce BookmarkClient interface to abstract embedder (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 6 years, 8 months 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
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 #ifndef CHROME_BROWSER_BOOKMARKS_BOOKMARK_MODEL_H_ 5 #ifndef CHROME_BROWSER_BOOKMARKS_BOOKMARK_MODEL_H_
6 #define CHROME_BROWSER_BOOKMARKS_BOOKMARK_MODEL_H_ 6 #define CHROME_BROWSER_BOOKMARKS_BOOKMARK_MODEL_H_
7 7
8 #include <map> 8 #include <map>
9 #include <set> 9 #include <set>
10 #include <vector> 10 #include <vector>
11 11
12 #include "base/basictypes.h" 12 #include "base/basictypes.h"
13 #include "base/compiler_specific.h" 13 #include "base/compiler_specific.h"
14 #include "base/memory/ref_counted.h" 14 #include "base/memory/ref_counted.h"
15 #include "base/memory/scoped_ptr.h" 15 #include "base/memory/scoped_ptr.h"
16 #include "base/observer_list.h" 16 #include "base/observer_list.h"
17 #include "base/strings/string16.h" 17 #include "base/strings/string16.h"
18 #include "base/synchronization/lock.h" 18 #include "base/synchronization/lock.h"
19 #include "base/synchronization/waitable_event.h" 19 #include "base/synchronization/waitable_event.h"
20 #include "base/task/cancelable_task_tracker.h" 20 #include "components/bookmarks/core/browser/bookmark_client.h"
21 #include "components/bookmarks/core/browser/bookmark_node.h" 21 #include "components/bookmarks/core/browser/bookmark_node.h"
22 #include "components/bookmarks/core/browser/bookmark_service.h" 22 #include "components/bookmarks/core/browser/bookmark_service.h"
23 #include "components/favicon_base/favicon_types.h"
24 #include "components/keyed_service/core/keyed_service.h"
25 #include "content/public/browser/notification_observer.h"
26 #include "content/public/browser/notification_registrar.h"
27 #include "ui/gfx/image/image.h" 23 #include "ui/gfx/image/image.h"
28 #include "url/gurl.h" 24 #include "url/gurl.h"
29 25
30 class BookmarkExpandedStateTracker; 26 class BookmarkExpandedStateTracker;
31 class BookmarkIndex; 27 class BookmarkIndex;
32 class BookmarkLoadDetails; 28 class BookmarkLoadDetails;
33 class BookmarkModelObserver; 29 class BookmarkModelObserver;
34 class BookmarkStorage; 30 class BookmarkStorage;
35 struct BookmarkMatch; 31 struct BookmarkMatch;
36 class Profile; 32 class PrefService;
37 class ScopedGroupBookmarkActions; 33 class ScopedGroupBookmarkActions;
38 34
39 namespace base { 35 namespace base {
36 class FilePath;
40 class SequencedTaskRunner; 37 class SequencedTaskRunner;
41 } 38 }
42 39
43 namespace chrome { 40 namespace favicon_base {
44 struct FaviconImageResult; 41 struct FaviconImageResult;
45 } 42 }
46 43
44 namespace test {
45 class TestBookmarkClient;
46 }
47
47 // BookmarkModel -------------------------------------------------------------- 48 // BookmarkModel --------------------------------------------------------------
48 49
49 // BookmarkModel provides a directed acyclic graph of URLs and folders. 50 // BookmarkModel provides a directed acyclic graph of URLs and folders.
50 // Three graphs are provided for the three entry points: those on the 'bookmarks 51 // Three graphs are provided for the three entry points: those on the 'bookmarks
51 // bar', those in the 'other bookmarks' folder and those in the 'mobile' folder. 52 // bar', those in the 'other bookmarks' folder and those in the 'mobile' folder.
52 // 53 //
53 // An observer may be attached to observe relevant events. 54 // An observer may be attached to observe relevant events.
54 // 55 //
55 // You should NOT directly create a BookmarkModel, instead go through the 56 // You should NOT directly create a BookmarkModel, instead go through the
56 // BookmarkModelFactory. 57 // BookmarkModelFactory.
57 class BookmarkModel : public content::NotificationObserver, 58 class BookmarkModel : public BookmarkService {
58 public BookmarkService,
59 public KeyedService {
60 public: 59 public:
61 // |index_urls| says whether URLs should be stored in the BookmarkIndex 60 // |index_urls| says whether URLs should be stored in the BookmarkIndex
62 // in addition to bookmark titles. 61 // in addition to bookmark titles.
63 BookmarkModel(Profile* profile, bool index_urls); 62 BookmarkModel(BookmarkClient* client, bool index_urls);
64 virtual ~BookmarkModel(); 63 virtual ~BookmarkModel();
65 64
66 // Invoked prior to destruction to release any necessary resources. 65 // Invoked prior to destruction to release any necessary resources.
67 virtual void Shutdown() OVERRIDE; 66 void Shutdown();
68 67
69 // Loads the bookmarks. This is called upon creation of the 68 // Loads the bookmarks. This is called upon creation of the
70 // BookmarkModel. You need not invoke this directly. 69 // BookmarkModel. You need not invoke this directly.
71 // All load operations will be executed on |task_runner|. 70 // All load operations will be executed on |io_task_runner| and the completion
72 void Load(const scoped_refptr<base::SequencedTaskRunner>& task_runner); 71 // callback will be called from |ui_task_runner|.
72 void Load(PrefService* pref_service,
73 const std::string& accept_languages,
74 const base::FilePath& profile_path,
75 const scoped_refptr<base::SequencedTaskRunner>& io_task_runner,
76 const scoped_refptr<base::SequencedTaskRunner>& ui_task_runner);
73 77
74 // Returns true if the model finished loading. 78 // Returns true if the model finished loading.
75 bool loaded() const { return loaded_; } 79 bool loaded() const { return loaded_; }
76 80
77 // Returns the root node. The 'bookmark bar' node and 'other' node are 81 // Returns the root node. The 'bookmark bar' node and 'other' node are
78 // children of the root node. 82 // children of the root node.
79 const BookmarkNode* root_node() const { return &root_; } 83 const BookmarkNode* root_node() const { return &root_; }
80 84
81 // Returns the 'bookmark bar' node. This is NULL until loaded. 85 // Returns the 'bookmark bar' node. This is NULL until loaded.
82 const BookmarkNode* bookmark_bar_node() const { return bookmark_bar_node_; } 86 const BookmarkNode* bookmark_bar_node() const { return bookmark_bar_node_; }
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
242 const std::string& value); 246 const std::string& value);
243 void SetNodeMetaInfoMap(const BookmarkNode* node, 247 void SetNodeMetaInfoMap(const BookmarkNode* node,
244 const BookmarkNode::MetaInfoMap& meta_info_map); 248 const BookmarkNode::MetaInfoMap& meta_info_map);
245 void DeleteNodeMetaInfo(const BookmarkNode* node, 249 void DeleteNodeMetaInfo(const BookmarkNode* node,
246 const std::string& key); 250 const std::string& key);
247 251
248 // Sets the sync transaction version of |node|. 252 // Sets the sync transaction version of |node|.
249 void SetNodeSyncTransactionVersion(const BookmarkNode* node, 253 void SetNodeSyncTransactionVersion(const BookmarkNode* node,
250 int64 sync_transaction_version); 254 int64 sync_transaction_version);
251 255
252 // Returns the profile that corresponds to this BookmarkModel. 256 // Notify BookmarkModel that the favicons for |urls| have changed and have to
253 Profile* profile() { return profile_; } 257 // be refetched. This notification is sent by BookmarkClient.
258 void OnFaviconChanged(const std::set<GURL>& urls);
259
260 // Returns the client used by this BookmarkModel.
261 BookmarkClient* client() const { return client_; }
254 262
255 private: 263 private:
256 friend class BookmarkCodecTest; 264 friend class BookmarkCodecTest;
257 friend class BookmarkModelTest; 265 friend class BookmarkModelTest;
258 friend class BookmarkStorage; 266 friend class BookmarkStorage;
259 friend class ScopedGroupBookmarkActions; 267 friend class ScopedGroupBookmarkActions;
268 friend class test::TestBookmarkClient;
260 269
261 // Used to order BookmarkNodes by URL. 270 // Used to order BookmarkNodes by URL.
262 class NodeURLComparator { 271 class NodeURLComparator {
263 public: 272 public:
264 bool operator()(const BookmarkNode* n1, const BookmarkNode* n2) const { 273 bool operator()(const BookmarkNode* n1, const BookmarkNode* n2) const {
265 return n1->url() < n2->url(); 274 return n1->url() < n2->url();
266 } 275 }
267 }; 276 };
268 277
269 // Implementation of IsBookmarked. Before calling this the caller must obtain 278 // Implementation of IsBookmarked. Before calling this the caller must obtain
(...skipping 20 matching lines...) Expand all
290 void RemoveNodeAndGetRemovedUrls(BookmarkNode* node, 299 void RemoveNodeAndGetRemovedUrls(BookmarkNode* node,
291 std::set<GURL>* removed_urls); 300 std::set<GURL>* removed_urls);
292 301
293 // Removes the node from its parent, sends notification, and deletes it. 302 // Removes the node from its parent, sends notification, and deletes it.
294 // type specifies how the node should be removed. 303 // type specifies how the node should be removed.
295 void RemoveAndDeleteNode(BookmarkNode* delete_me); 304 void RemoveAndDeleteNode(BookmarkNode* delete_me);
296 305
297 // Remove |node| from |nodes_ordered_by_url_set_|. 306 // Remove |node| from |nodes_ordered_by_url_set_|.
298 void RemoveNodeFromURLSet(BookmarkNode* node); 307 void RemoveNodeFromURLSet(BookmarkNode* node);
299 308
300 // Notifies the history backend about urls of removed bookmarks.
301 void NotifyHistoryAboutRemovedBookmarks(
302 const std::set<GURL>& removed_bookmark_urls) const;
303
304 // Adds the |node| at |parent| in the specified |index| and notifies its 309 // Adds the |node| at |parent| in the specified |index| and notifies its
305 // observers. 310 // observers.
306 BookmarkNode* AddNode(BookmarkNode* parent, 311 BookmarkNode* AddNode(BookmarkNode* parent,
307 int index, 312 int index,
308 BookmarkNode* node); 313 BookmarkNode* node);
309 314
310 // Returns true if the parent and index are valid. 315 // Returns true if the parent and index are valid.
311 bool IsValidIndex(const BookmarkNode* parent, int index, bool allow_end); 316 bool IsValidIndex(const BookmarkNode* parent, int index, bool allow_end);
312 317
313 // Creates one of the possible permanent nodes (bookmark bar node, other node 318 // Creates one of the possible permanent nodes (bookmark bar node, other node
(...skipping 14 matching lines...) Expand all
328 void FaviconLoaded(const BookmarkNode* node); 333 void FaviconLoaded(const BookmarkNode* node);
329 334
330 // If we're waiting on a favicon for node, the load request is canceled. 335 // If we're waiting on a favicon for node, the load request is canceled.
331 void CancelPendingFaviconLoadRequests(BookmarkNode* node); 336 void CancelPendingFaviconLoadRequests(BookmarkNode* node);
332 337
333 // Notifies the observers that a set of changes initiated by a single user 338 // Notifies the observers that a set of changes initiated by a single user
334 // action is about to happen and has completed. 339 // action is about to happen and has completed.
335 void BeginGroupedChanges(); 340 void BeginGroupedChanges();
336 void EndGroupedChanges(); 341 void EndGroupedChanges();
337 342
338 // content::NotificationObserver:
339 virtual void Observe(int type,
340 const content::NotificationSource& source,
341 const content::NotificationDetails& details) OVERRIDE;
342
343 // Generates and returns the next node ID. 343 // Generates and returns the next node ID.
344 int64 generate_next_node_id(); 344 int64 generate_next_node_id();
345 345
346 // Sets the maximum node ID to the given value. 346 // Sets the maximum node ID to the given value.
347 // This is used by BookmarkCodec to report the maximum ID after it's done 347 // This is used by BookmarkCodec to report the maximum ID after it's done
348 // decoding since during decoding codec assigns node IDs. 348 // decoding since during decoding codec assigns node IDs.
349 void set_next_node_id(int64 id) { next_node_id_ = id; } 349 void set_next_node_id(int64 id) { next_node_id_ = id; }
350 350
351 // Creates and returns a new BookmarkLoadDetails. It's up to the caller to 351 // Creates and returns a new BookmarkLoadDetails. It's up to the caller to
352 // delete the returned object. 352 // delete the returned object.
353 BookmarkLoadDetails* CreateLoadDetails(); 353 BookmarkLoadDetails* CreateLoadDetails(const std::string& accept_languages);
354 354
355 content::NotificationRegistrar registrar_; 355 BookmarkClient* const client_;
356
357 Profile* profile_;
358 356
359 // Whether the initial set of data has been loaded. 357 // Whether the initial set of data has been loaded.
360 bool loaded_; 358 bool loaded_;
361 359
362 // The root node. This contains the bookmark bar node and the 'other' node as 360 // The root node. This contains the bookmark bar node and the 'other' node as
363 // children. 361 // children.
364 BookmarkNode root_; 362 BookmarkNode root_;
365 363
366 BookmarkPermanentNode* bookmark_bar_node_; 364 BookmarkPermanentNode* bookmark_bar_node_;
367 BookmarkPermanentNode* other_node_; 365 BookmarkPermanentNode* other_node_;
(...skipping 29 matching lines...) Expand all
397 395
398 // See description of IsDoingExtensiveChanges above. 396 // See description of IsDoingExtensiveChanges above.
399 int extensive_changes_; 397 int extensive_changes_;
400 398
401 scoped_ptr<BookmarkExpandedStateTracker> expanded_state_tracker_; 399 scoped_ptr<BookmarkExpandedStateTracker> expanded_state_tracker_;
402 400
403 DISALLOW_COPY_AND_ASSIGN(BookmarkModel); 401 DISALLOW_COPY_AND_ASSIGN(BookmarkModel);
404 }; 402 };
405 403
406 #endif // CHROME_BROWSER_BOOKMARKS_BOOKMARK_MODEL_H_ 404 #endif // CHROME_BROWSER_BOOKMARKS_BOOKMARK_MODEL_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698