| // Copyright 2020 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef IOS_CHROME_BROWSER_SNAPSHOTS_MODEL_SNAPSHOT_BROWSER_AGENT_H_ |
| #define IOS_CHROME_BROWSER_SNAPSHOTS_MODEL_SNAPSHOT_BROWSER_AGENT_H_ |
| |
| #import <string> |
| #import <vector> |
| |
| #import "base/memory/raw_ptr.h" |
| #import "ios/chrome/browser/shared/model/browser/browser_observer.h" |
| #import "ios/chrome/browser/shared/model/browser/browser_user_data.h" |
| #import "ios/chrome/browser/shared/model/web_state_list/web_state_list_observer.h" |
| #import "ios/chrome/browser/snapshots/model/snapshot_id.h" |
| |
| @class SnapshotStorageWrapper; |
| |
| // Associates a SnapshotStorage to a Browser. |
| class SnapshotBrowserAgent : public BrowserObserver, |
| public WebStateListObserver, |
| public BrowserUserData<SnapshotBrowserAgent> { |
| public: |
| SnapshotBrowserAgent(const SnapshotBrowserAgent&) = delete; |
| SnapshotBrowserAgent& operator=(const SnapshotBrowserAgent&) = delete; |
| |
| ~SnapshotBrowserAgent() override; |
| |
| // Set a session identification string that will be used to locate the |
| // snapshots directory. Setting this more than once on the same agent is |
| // probably a programming error. |
| void SetSessionID(const std::string& identifier); |
| |
| // Maintains the snapshots storage including purging unused images and |
| // performing any necessary migrations. |
| void PerformStorageMaintenance(); |
| |
| // Permanently removes all snapshots. |
| void RemoveAllSnapshots(); |
| |
| SnapshotStorageWrapper* snapshot_storage() { return snapshot_storage_; } |
| |
| private: |
| friend class BrowserUserData<SnapshotBrowserAgent>; |
| BROWSER_USER_DATA_KEY_DECL(); |
| |
| explicit SnapshotBrowserAgent(Browser* browser); |
| |
| // BrowserObserver methods |
| void BrowserDestroyed(Browser* browser) override; |
| |
| // WebStateListObserver methods |
| void WebStateListDidChange(WebStateList* web_state_list, |
| const WebStateListChange& change, |
| const WebStateListStatus& status) override; |
| void WillBeginBatchOperation(WebStateList* web_state_list) override; |
| void BatchOperationEnded(WebStateList* web_state_list) override; |
| |
| // Helper methods to set a snapshot storage for `web_state`. |
| void InsertWebState(web::WebState* web_state); |
| void DetachWebState(web::WebState* web_state); |
| |
| // Migrates the snapshot storage if a folder exists in the old snapshots |
| // storage location. |
| void MigrateStorageIfNecessary(); |
| |
| // Purges the snapshots folder of unused snapshots. |
| void PurgeUnusedSnapshots(); |
| |
| // Returns the snapshot IDs of all the WebStates in the Browser. |
| std::vector<SnapshotID> GetSnapshotIDs(); |
| |
| __strong SnapshotStorageWrapper* snapshot_storage_; |
| |
| raw_ptr<Browser> browser_ = nullptr; |
| }; |
| |
| #endif // IOS_CHROME_BROWSER_SNAPSHOTS_MODEL_SNAPSHOT_BROWSER_AGENT_H_ |