1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108
|
// Copyright 2012 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_UI_BOOKMARKS_BOOKMARK_TAB_HELPER_H_
#define CHROME_BROWSER_UI_BOOKMARKS_BOOKMARK_TAB_HELPER_H_
#include "base/memory/raw_ptr.h"
#include "base/observer_list.h"
#include "components/bookmarks/browser/base_bookmark_model_observer.h"
#include "content/public/browser/reload_type.h"
#include "content/public/browser/web_contents_observer.h"
#include "content/public/browser/web_contents_user_data.h"
class BookmarkTabHelperObserver;
namespace bookmarks {
class BookmarkModel;
struct BookmarkNodeData;
} // namespace bookmarks
namespace content {
class WebContents;
}
// Per-tab class to manage bookmarks.
class BookmarkTabHelper
: public bookmarks::BaseBookmarkModelObserver,
public content::WebContentsObserver,
public content::WebContentsUserData<BookmarkTabHelper> {
public:
// Interface for forwarding bookmark drag and drop to extenstions.
class BookmarkDrag {
public:
virtual void OnDragEnter(const bookmarks::BookmarkNodeData& data) = 0;
virtual void OnDragOver(const bookmarks::BookmarkNodeData& data) = 0;
virtual void OnDragLeave(const bookmarks::BookmarkNodeData& data) = 0;
virtual void OnDrop(const bookmarks::BookmarkNodeData& data) = 0;
protected:
virtual ~BookmarkDrag() = default;
};
BookmarkTabHelper(const BookmarkTabHelper&) = delete;
BookmarkTabHelper& operator=(const BookmarkTabHelper&) = delete;
~BookmarkTabHelper() override;
// It is up to callers to call set_bookmark_drag_delegate(NULL) when
// |bookmark_drag| is deleted since this class does not take ownership of
// |bookmark_drag|.
void set_bookmark_drag_delegate(BookmarkDrag* bookmark_drag) {
bookmark_drag_ = bookmark_drag;
}
BookmarkDrag* bookmark_drag_delegate() { return bookmark_drag_; }
bool is_starred() const { return is_starred_; }
void AddObserver(BookmarkTabHelperObserver* observer);
void RemoveObserver(BookmarkTabHelperObserver* observer);
bool HasObserver(BookmarkTabHelperObserver* observer) const;
private:
friend class content::WebContentsUserData<BookmarkTabHelper>;
explicit BookmarkTabHelper(content::WebContents* web_contents);
// Updates the starred state from the BookmarkModel. If the state has changed,
// the delegate is notified.
void UpdateStarredStateForCurrentURL();
// Overridden from bookmarks::BaseBookmarkModelObserver:
void BookmarkModelChanged() override;
void BookmarkModelLoaded(bool ids_reassigned) override;
void BookmarkNodeAdded(const bookmarks::BookmarkNode* parent,
size_t index,
bool added_by_user) override;
void BookmarkNodeRemoved(const bookmarks::BookmarkNode* parent,
size_t old_index,
const bookmarks::BookmarkNode* node,
const std::set<GURL>& removed_urls,
const base::Location& location) override;
void BookmarkAllUserNodesRemoved(const std::set<GURL>& removed_urls,
const base::Location& location) override;
void BookmarkNodeChanged(const bookmarks::BookmarkNode* node) override;
// Overridden from content::WebContentsObserver:
void DidStartNavigation(
content::NavigationHandle* navigation_handle) override;
void DidFinishNavigation(
content::NavigationHandle* navigation_handle) override;
// Whether the current URL is starred.
bool is_starred_;
raw_ptr<bookmarks::BookmarkModel, DanglingUntriaged> bookmark_model_;
// A list of observers notified when when the url starred changed.
base::ObserverList<BookmarkTabHelperObserver>::Unchecked observers_;
// The BookmarkDrag is used to forward bookmark drag and drop events to
// extensions.
raw_ptr<BookmarkDrag, AcrossTasksDanglingUntriaged> bookmark_drag_;
WEB_CONTENTS_USER_DATA_KEY_DECL();
};
#endif // CHROME_BROWSER_UI_BOOKMARKS_BOOKMARK_TAB_HELPER_H_
|