| // Copyright 2016 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_BROWSING_DATA_BROWSING_DATA_MEDIA_LICENSE_HELPER_H_ |
| #define CHROME_BROWSER_BROWSING_DATA_BROWSING_DATA_MEDIA_LICENSE_HELPER_H_ |
| |
| #include <stdint.h> |
| #include <list> |
| |
| #include "base/callback.h" |
| #include "base/memory/ref_counted.h" |
| #include "base/time/time.h" |
| #include "url/gurl.h" |
| |
| namespace storage { |
| class FileSystemContext; |
| } |
| |
| // Defines an interface for classes that deal with aggregating and deleting |
| // media licenses. |
| // BrowsingDataMediaLicenseHelper instances for a specific profile should |
| // be created via the static Create method. Each instance will lazily fetch |
| // data when a client calls StartFetching from the UI thread, and will |
| // notify the client via a supplied callback when the data is available. |
| // |
| // The client's callback is passed a list of MediaLicenseInfo objects |
| // containing usage information for each origin's media licenses. |
| class BrowsingDataMediaLicenseHelper |
| : public base::RefCountedThreadSafe<BrowsingDataMediaLicenseHelper> { |
| public: |
| // Detailed information about a media license, including it's origin GURL |
| // and the amount of data (in bytes). |
| struct MediaLicenseInfo { |
| MediaLicenseInfo(const GURL& origin, |
| int64_t size, |
| base::Time last_modified_time); |
| MediaLicenseInfo(const MediaLicenseInfo& other); |
| ~MediaLicenseInfo(); |
| |
| // The origin for which the information is relevant. |
| GURL origin; |
| // Size (in bytes). |
| int64_t size; |
| // Last modified time. |
| base::Time last_modified_time; |
| }; |
| |
| using FetchCallback = |
| base::Callback<void(const std::list<MediaLicenseInfo>&)>; |
| |
| // Creates a BrowsingDataMediaLicenseHelper instance for the media |
| // licenses stored in |profile|'s user data directory. The |
| // BrowsingDataMediaLicenseHelper object will hold a reference to the |
| // Profile that's passed in, but is not responsible for destroying it. |
| // |
| // The BrowsingDataMediaLicenseHelper will not change the profile itself, |
| // but can modify data it contains (by removing media licenses). |
| static BrowsingDataMediaLicenseHelper* Create( |
| storage::FileSystemContext* file_system_context); |
| |
| // Starts the process of fetching media license data, which will call |
| // |callback| upon completion, passing it a constant list of |
| // MediaLicenseInfo objects. StartFetching must be called only in the UI |
| // thread; the provided Callback will likewise be executed asynchronously |
| // on the UI thread. Obtaining the data will occur asynchronously on the |
| // FILE thread. |
| virtual void StartFetching(const FetchCallback& callback) = 0; |
| |
| // Deletes any media licenses associated with |origin| from the disk. |
| // Deletion will occur asynchronously on the FILE thread, but this function |
| // must be called only on the UI thread. |
| virtual void DeleteMediaLicenseOrigin(const GURL& origin) = 0; |
| |
| protected: |
| friend class base::RefCountedThreadSafe<BrowsingDataMediaLicenseHelper>; |
| |
| BrowsingDataMediaLicenseHelper() {} |
| virtual ~BrowsingDataMediaLicenseHelper() {} |
| }; |
| |
| #endif // CHROME_BROWSER_BROWSING_DATA_BROWSING_DATA_MEDIA_LICENSE_HELPER_H_ |