| // Copyright 2018 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_SEND_TAB_TO_SELF_SEND_TAB_TO_SELF_MODEL_H_ |
| #define COMPONENTS_SEND_TAB_TO_SELF_SEND_TAB_TO_SELF_MODEL_H_ |
| |
| #include <string> |
| #include <vector> |
| |
| #include "base/observer_list.h" |
| #include "base/time/time.h" |
| #include "components/send_tab_to_self/send_tab_to_self_entry.h" |
| #include "components/send_tab_to_self/send_tab_to_self_model_observer.h" |
| #include "url/gurl.h" |
| |
| namespace send_tab_to_self { |
| |
| // The send tab to self model contains a list of entries of shared urls. |
| // This object should only be accessed from one thread, which is usually the |
| // main thread. |
| class SendTabToSelfModel { |
| public: |
| SendTabToSelfModel(); |
| virtual ~SendTabToSelfModel(); |
| |
| // Returns a vector of entry IDs in the model. |
| virtual std::vector<std::string> GetAllGuids() const = 0; |
| |
| // Delete all entries. |
| virtual void DeleteAllEntries() = 0; |
| |
| // Returns a specific entry. Returns null if the entry does not exist. |
| virtual const SendTabToSelfEntry* GetEntryByGUID( |
| const std::string& guid) const = 0; |
| |
| // Adds |url| at the top of the entries. The entry title will be a |
| // trimmed copy of |title|. Allows clients to modify the state of the model |
| // as driven by user behaviors. |
| // Returns the entry if it was successfully added. |
| virtual const SendTabToSelfEntry* AddEntry( |
| const GURL& url, |
| const std::string& title, |
| base::Time navigation_time, |
| const std::string& target_device_cache_guid) = 0; |
| |
| // Remove entry with |guid| from entries. Allows clients to modify the state |
| // of the model as driven by user behaviors. |
| virtual void DeleteEntry(const std::string& guid) = 0; |
| |
| // Dismiss entry with |guid| from entries. Allows clients to modify the state |
| // of the model as driven by user behaviors. |
| virtual void DismissEntry(const std::string& guid) = 0; |
| |
| // Guarantee that the model is operational and syncing, i.e., the local |
| // database is started and the initial data has been downloaded. |
| // This call and SendTabToSelfModelObserver::SendTabToSelfModelLoaded overlap, |
| // but this call allows non observers to infer if it is safe to interact with |
| // the model without first becoming an observer and creating a new bridge. |
| // This provides a more direct path for classes that would like to modify the |
| // model, but don't need to observe changes in it. |
| virtual bool IsReady() = 0; |
| |
| // Observer registration methods. The model will remove all observers upon |
| // destruction automatically. |
| void AddObserver(SendTabToSelfModelObserver* observer); |
| void RemoveObserver(SendTabToSelfModelObserver* observer); |
| |
| protected: |
| // The observers. |
| base::ObserverList<SendTabToSelfModelObserver>::Unchecked observers_; |
| |
| private: |
| DISALLOW_COPY_AND_ASSIGN(SendTabToSelfModel); |
| }; |
| |
| } // namespace send_tab_to_self |
| |
| #endif // COMPONENTS_SEND_TAB_TO_SELF_SEND_TAB_TO_SELF_MODEL_H |