blob: 1141dd5330850727eb8d56ba57690b54704ab099 [file] [log] [blame]
// Copyright 2022 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 COMPONENTS_USER_NOTES_INTERFACES_USER_NOTES_UI_H_
#define COMPONENTS_USER_NOTES_INTERFACES_USER_NOTES_UI_H_
#include "base/supports_user_data.h"
#include "base/unguessable_token.h"
#include "ui/gfx/geometry/rect.h"
namespace user_notes {
class UserNoteInstance;
// Interface that the UI layer of User Notes must implement. Used by the
// business logic in the service to send commands to the UI.
class UserNotesUI : public base::SupportsUserData::Data {
public:
static const void* UserDataKey() { return &kUserDataKey; }
UserNotesUI() = default;
UserNotesUI(const UserNotesUI&) = delete;
UserNotesUI& operator=(const UserNotesUI&) = delete;
~UserNotesUI() override = default;
// Called when a note in the UI should be scrolled to / brought to the
// foreground, and focused.
virtual void FocusNote(const base::UnguessableToken& guid) = 0;
// Called when the note creation UX should be shown in the UI layer. |bounds|
// corresponds to the location in the webpage where the associated highlight
// is, and should be compared with existing notes in the UI to determine where
// the new note should be inserted.
virtual void StartNoteCreation(UserNoteInstance* instance) = 0;
// Called when the model has changed and the UI should consequently refresh
// the notes it is displaying. The new model must be polled from the active
// tab's primary page.
virtual void Invalidate() = 0;
// Called by the UserNoteService when the user triggers one of the feature's
// entry points, indicating the Notes UI should show itself.
virtual void Show() = 0;
private:
static const int kUserDataKey = 0;
};
} // namespace user_notes
#endif // COMPONENTS_USER_NOTES_INTERFACES_USER_NOTES_UI_H_