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

Unified Diff: chrome/browser/bookmarks/bookmark_bar_model.h

Issue 1912: Renames BoomarkBarModel to BookmarkModel. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 12 years, 3 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/bookmarks/bookmark_bar_model.h
===================================================================
--- chrome/browser/bookmarks/bookmark_bar_model.h (revision 1988)
+++ chrome/browser/bookmarks/bookmark_bar_model.h (working copy)
@@ -1,435 +0,0 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_BROWSER_BOOKMARKS_BOOKMARK_BAR_MODEL_H_
-#define CHROME_BROWSER_BOOKMARKS_BOOKMARK_BAR_MODEL_H_
-
-#include "base/lock.h"
-#include "base/observer_list.h"
-#include "base/scoped_handle.h"
-#include "chrome/browser/bookmarks/bookmark_service.h"
-#include "chrome/browser/bookmarks/bookmark_storage.h"
-#include "chrome/browser/cancelable_request.h"
-#include "chrome/browser/history/history.h"
-#include "chrome/browser/history/history_types.h"
-#include "chrome/common/notification_service.h"
-#include "chrome/views/tree_node_model.h"
-#include "googleurl/src/gurl.h"
-#include "skia/include/SkBitmap.h"
-
-class BookmarkBarModel;
-class BookmarkCodec;
-class Profile;
-
-namespace history {
-class StarredURLDatabase;
-}
-
-// BookmarkBarNode ------------------------------------------------------------
-
-// BookmarkBarNode contains information about a starred entry: title, URL,
-// favicon, star id and type. BookmarkBarNodes are returned from a
-// BookmarkBarModel.
-//
-class BookmarkBarNode : public ChromeViews::TreeNode<BookmarkBarNode> {
- friend class BookmarkBarModel;
- friend class BookmarkCodec;
- friend class history::StarredURLDatabase;
- FRIEND_TEST(BookmarkBarModelTest, MostRecentlyAddedEntries);
-
- public:
- BookmarkBarNode(BookmarkBarModel* model, const GURL& url);
- virtual ~BookmarkBarNode() {}
-
- // Returns the favicon for the this node. If the favicon has not yet been
- // loaded it is loaded and the observer of the model notified when done.
- const SkBitmap& GetFavIcon();
-
- // Returns the URL.
- const GURL& GetURL() const { return url_; }
-
- // Returns a unique id for this node.
- //
- // NOTE: this id is only unique for the session and NOT unique across
- // sessions. Don't persist it!
- int id() const { return id_; }
-
- // Returns the type of this node.
- history::StarredEntry::Type GetType() const { return type_; }
-
- // Called when the favicon becomes invalid.
- void InvalidateFavicon() {
- loaded_favicon_ = false;
- favicon_ = SkBitmap();
- }
-
- // Returns the time the bookmark/group was added.
- Time date_added() const { return date_added_; }
-
- // Returns the last time the group was modified. This is only maintained
- // for folders (including the bookmark and other folder).
- Time date_group_modified() const { return date_group_modified_; }
-
- // Convenience for testing if this nodes represents a group. A group is
- // a node whose type is not URL.
- bool is_folder() const { return type_ != history::StarredEntry::URL; }
-
- // Is this a URL?
- bool is_url() const { return type_ == history::StarredEntry::URL; }
-
- // TODO(sky): Consider adding last visit time here, it'll greatly simplify
- // HistoryContentsProvider.
-
- private:
- // Resets the properties of the node from the supplied entry.
- void Reset(const history::StarredEntry& entry);
-
- // The model. This is NULL when created by StarredURLDatabase for migration.
- BookmarkBarModel* model_;
-
- // Unique identifier for this node.
- const int id_;
-
- // Whether the favicon has been loaded.
- bool loaded_favicon_;
-
- // The favicon.
- SkBitmap favicon_;
-
- // If non-zero, it indicates we're loading the favicon and this is the handle
- // from the HistoryService.
- HistoryService::Handle favicon_load_handle_;
-
- // The URL. BookmarkBarModel maintains maps off this URL, it is important that
- // it not change once the node has been created.
- const GURL url_;
-
- // Type of node.
- // TODO(sky): bug 1256202, convert this into a type defined here.
- history::StarredEntry::Type type_;
-
- // Date we were created.
- Time date_added_;
-
- // Time last modified. Only used for groups.
- Time date_group_modified_;
-
- DISALLOW_EVIL_CONSTRUCTORS(BookmarkBarNode);
-};
-
-
-// BookmarkBarModelObserver ---------------------------------------------------
-
-// Observer for the BookmarkBarModel.
-//
-class BookmarkBarModelObserver {
- public:
- // Invoked when the model has finished loading.
- virtual void Loaded(BookmarkBarModel* model) = 0;
-
- // Invoked from the destructor of the BookmarkBarModel.
- virtual void BookmarkModelBeingDeleted(BookmarkBarModel* model) { }
-
- // Invoked when a node has moved.
- virtual void BookmarkNodeMoved(BookmarkBarModel* model,
- BookmarkBarNode* old_parent,
- int old_index,
- BookmarkBarNode* new_parent,
- int new_index) = 0;
-
- // Invoked when a node has been added.
- virtual void BookmarkNodeAdded(BookmarkBarModel* model,
- BookmarkBarNode* parent,
- int index) = 0;
-
- // Invoked when a node has been removed, the item may still be starred though.
- virtual void BookmarkNodeRemoved(BookmarkBarModel* model,
- BookmarkBarNode* parent,
- int index) = 0;
-
- // Invoked when the title or favicon of a node has changed.
- virtual void BookmarkNodeChanged(BookmarkBarModel* model,
- BookmarkBarNode* node) = 0;
-
- // Invoked when a favicon has finished loading.
- virtual void BookmarkNodeFavIconLoaded(BookmarkBarModel* model,
- BookmarkBarNode* node) = 0;
-};
-
-// BookmarkBarModel -----------------------------------------------------------
-
-// BookmarkBarModel provides a directed acyclic graph of the starred entries
-// and groups. Two graphs are provided for the two entry points: those on
-// the bookmark bar, and those in the other folder.
-//
-// The methods of BookmarkBarModel update the internal structure immediately
-// and update the backend in the background.
-//
-// An observer may be attached to observer relevant events.
-//
-// You should NOT directly create a BookmarkBarModel, instead go through the
-// Profile.
-
-// TODO(sky): rename to BookmarkModel.
-class BookmarkBarModel : public NotificationObserver, public BookmarkService {
- friend class BookmarkBarNode;
- friend class BookmarkBarModelTest;
- friend class BookmarkStorage;
-
- public:
- explicit BookmarkBarModel(Profile* profile);
- virtual ~BookmarkBarModel();
-
- // Loads the bookmarks. This is called by Profile upon creation of the
- // BookmarkBarModel. You need not invoke this directly.
- void Load();
-
- // Returns the root node. The bookmark bar node and other node are children of
- // the root node.
- BookmarkBarNode* root_node() { return &root_; }
-
- // Returns the bookmark bar node.
- BookmarkBarNode* GetBookmarkBarNode() { return bookmark_bar_node_; }
-
- // Returns the 'other' node.
- BookmarkBarNode* other_node() { return other_node_; }
-
- // Returns the parent the last node was added to. This never returns NULL
- // (as long as the model is loaded).
- BookmarkBarNode* GetParentForNewNodes();
-
- // Returns a vector containing up to |max_count| of the most recently
- // modified groups. This never returns an empty vector.
- std::vector<BookmarkBarNode*> GetMostRecentlyModifiedGroups(size_t max_count);
-
- // Returns the most recently added bookmarks.
- void GetMostRecentlyAddedEntries(size_t count,
- std::vector<BookmarkBarNode*>* nodes);
-
- // Used by GetBookmarksMatchingText to return a matching node and the location
- // of the match in the title.
- struct TitleMatch {
- BookmarkBarNode* node;
-
- // Location of the matching words in the title of the node.
- Snippet::MatchPositions match_positions;
- };
-
- // Returns the bookmarks whose title contains text. At most |max_count|
- // matches are returned in |matches|.
- void GetBookmarksMatchingText(const std::wstring& text,
- size_t max_count,
- std::vector<TitleMatch>* matches);
-
- void AddObserver(BookmarkBarModelObserver* observer) {
- observers_.AddObserver(observer);
- }
-
- void RemoveObserver(BookmarkBarModelObserver* observer) {
- observers_.RemoveObserver(observer);
- }
-
- // Unstars or deletes the specified entry. Removing a group entry recursively
- // unstars all nodes. Observers are notified immediately.
- void Remove(BookmarkBarNode* parent, int index);
-
- // Moves the specified entry to a new location.
- void Move(BookmarkBarNode* node, BookmarkBarNode* new_parent, int index);
-
- // Sets the title of the specified node.
- void SetTitle(BookmarkBarNode* node, const std::wstring& title);
-
- // Returns true if the model finished loading.
- bool IsLoaded() { return loaded_; }
-
- // Returns the node with the specified URL, or NULL if there is no node with
- // the specified URL. This method is thread safe.
- BookmarkBarNode* GetNodeByURL(const GURL& url);
-
- // Returns all the bookmarked urls. This method is thread safe.
- virtual void GetBookmarks(std::vector<GURL>* urls);
-
- // Returns true if there is a bookmark for the specified URL. This method is
- // thread safe. See BookmarkService for more details on this.
- virtual bool IsBookmarked(const GURL& url) {
- return GetNodeByURL(url) != NULL;
- }
-
- // Blocks until loaded; this is NOT invoked on the main thread. See
- // BookmarkService for more details on this.
- virtual void BlockTillLoaded();
-
- // Returns the node with the specified id, or NULL if there is no node with
- // the specified id.
- BookmarkBarNode* GetNodeByID(int id);
-
- // Adds a new group node at the specified position.
- BookmarkBarNode* AddGroup(BookmarkBarNode* parent,
- int index,
- const std::wstring& title);
-
- // Adds a url at the specified position. If there is already a node with the
- // specified URL, it is moved to the new position.
- BookmarkBarNode* AddURL(BookmarkBarNode* parent,
- int index,
- const std::wstring& title,
- const GURL& url);
-
- // Adds a url with a specific creation date.
- BookmarkBarNode* AddURLWithCreationTime(BookmarkBarNode* parent,
- int index,
- const std::wstring& title,
- const GURL& url,
- const Time& creation_time);
-
- // This is the convenience that makes sure the url is starred or not
- // starred. If the URL is not currently starred, it is added to the
- // most recent parent.
- void SetURLStarred(const GURL& url,
- const std::wstring& title,
- bool is_starred);
-
- // Resets the 'date modified' time of the node to 0. This is used during
- // importing to exclude the newly created groups from showing up in the
- // combobox of most recently modified groups.
- void ResetDateGroupModified(BookmarkBarNode* node);
-
- private:
- // Used to order BookmarkBarNodes by URL.
- class NodeURLComparator {
- public:
- bool operator()(BookmarkBarNode* n1, BookmarkBarNode* n2) const {
- return n1->GetURL() < n2->GetURL();
- }
- };
-
- // Overriden to notify the observer the favicon has been loaded.
- void FavIconLoaded(BookmarkBarNode* node);
-
- // Removes the node from internal maps and recurces through all children. If
- // the node is a url, its url is added to removed_urls.
- //
- // This does NOT delete the node.
- void RemoveNode(BookmarkBarNode* node, std::set<GURL>* removed_urls);
-
- // Callback from BookmarkStorage that it has finished loading. This method
- // may be hit twice. In particular, on construction BookmarkBarModel asks
- // BookmarkStorage to load the bookmarks. BookmarkStorage invokes this method
- // with loaded_from_history false and file_exists indicating whether the
- // bookmarks file exists. If the file doesn't exist, we query history. When
- // history calls us back (OnHistoryDone) we then ask BookmarkStorage to load
- // from the migration file. BookmarkStorage again invokes this method, but
- // with |loaded_from_history| true.
- void OnBookmarkStorageLoadedBookmarks(bool file_exists,
- bool loaded_from_history);
-
- // Used for migrating bookmarks from history to standalone file.
- //
- // Callback from history that it is done with an empty request. This is used
- // if there is no bookmarks file. Once done, we attempt to load from the
- // temporary file creating during migration.
- void OnHistoryDone();
-
- // Invoked when loading is finished. Sets loaded_ and notifies observers.
- void DoneLoading();
-
- // Populates nodes_ordered_by_url_set_ from root.
- void PopulateNodesByURL(BookmarkBarNode* node);
-
- // Removes the node from its parent, sends notification, and deletes it.
- // type specifies how the node should be removed.
- void RemoveAndDeleteNode(BookmarkBarNode* delete_me);
-
- // Adds the node at the specified position, and sends notification.
- BookmarkBarNode* AddNode(BookmarkBarNode* parent,
- int index,
- BookmarkBarNode* node);
-
- // Implementation of GetNodeByID.
- BookmarkBarNode* GetNodeByID(BookmarkBarNode* node, int id);
-
- // Returns true if the parent and index are valid.
- bool IsValidIndex(BookmarkBarNode* parent, int index, bool allow_end);
-
- // Sets the date modified time of the specified node.
- void SetDateGroupModified(BookmarkBarNode* parent, const Time time);
-
- // Creates the bookmark bar/other nodes. These call into
- // CreateRootNodeFromStarredEntry.
- void CreateBookmarkBarNode();
- void CreateOtherBookmarksNode();
-
- // Creates a root node (either the bookmark bar node or other node) from the
- // specified starred entry.
- BookmarkBarNode* CreateRootNodeFromStarredEntry(
- const history::StarredEntry& entry);
-
- // Notification that a favicon has finished loading. If we can decode the
- // favicon, FaviconLoaded is invoked.
- void OnFavIconDataAvailable(
- HistoryService::Handle handle,
- bool know_favicon,
- scoped_refptr<RefCountedBytes> data,
- bool expired,
- GURL icon_url);
-
- // Invoked from the node to load the favicon. Requests the favicon from the
- // history service.
- void LoadFavIcon(BookmarkBarNode* node);
-
- // If we're waiting on a favicon for node, the load request is canceled.
- void CancelPendingFavIconLoadRequests(BookmarkBarNode* node);
-
- // Returns up to count of the most recently modified groups. This may not
- // add anything.
- void GetMostRecentlyModifiedGroupNodes(BookmarkBarNode* parent,
- size_t count,
- std::vector<BookmarkBarNode*>* nodes);
-
- // NotificationObserver.
- virtual void Observe(NotificationType type,
- const NotificationSource& source,
- const NotificationDetails& details);
-
- Profile* profile_;
-
- // Whether the initial set of data has been loaded.
- bool loaded_;
-
- // The root node. This contains the bookmark bar node and the 'other' node as
- // children.
- BookmarkBarNode root_;
-
- BookmarkBarNode* bookmark_bar_node_;
- BookmarkBarNode* other_node_;
-
- // The observers.
- ObserverList<BookmarkBarModelObserver> observers_;
-
- // Set of nodes ordered by URL. This is not a map to avoid copying the
- // urls.
- // WARNING: nodes_ordered_by_url_set_ is accessed on multiple threads. As
- // such, be sure and wrap all usage of it around url_lock_.
- typedef std::set<BookmarkBarNode*,NodeURLComparator> NodesOrderedByURLSet;
- NodesOrderedByURLSet nodes_ordered_by_url_set_;
- Lock url_lock_;
-
- // Used for loading favicons and the empty history request.
- CancelableRequestConsumerT<BookmarkBarNode*, NULL> load_consumer_;
-
- // Reads/writes bookmarks to disk.
- scoped_refptr<BookmarkStorage> store_;
-
- // Have we installed a listener on the NotificationService for
- // NOTIFY_HISTORY_LOADED? A listener is installed if the bookmarks file
- // doesn't exist and the history service hasn't finished loading.
- bool waiting_for_history_load_;
-
- // Handle to event signaled when loading is done.
- ScopedHandle loaded_signal_;
-
- DISALLOW_COPY_AND_ASSIGN(BookmarkBarModel);
-};
-
-#endif // CHROME_BROWSER_BOOKMARKS_BOOKMARK_BAR_MODEL_H_

Powered by Google App Engine
This is Rietveld 408576698