123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- // Copyright 2020 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 WEBLAYER_BROWSER_FAVICON_FAVICON_BACKEND_WRAPPER_H_
- #define WEBLAYER_BROWSER_FAVICON_FAVICON_BACKEND_WRAPPER_H_
- #include <memory>
- #include <vector>
- #include "base/files/file_path.h"
- #include "base/memory/ref_counted.h"
- #include "base/memory/ref_counted_delete_on_sequence.h"
- #include "base/timer/timer.h"
- #include "components/favicon/core/favicon_backend_delegate.h"
- #include "components/favicon_base/favicon_types.h"
- class GURL;
- namespace base {
- class FilePath;
- class SequencedTaskRunner;
- } // namespace base
- namespace favicon {
- class FaviconBackend;
- }
- namespace weblayer {
- // FaviconBackendWrapper runs on a background task-runner and owns the database
- // side of favicons. This class largely delegates to favicon::FaviconBackend.
- class FaviconBackendWrapper
- : public base::RefCountedDeleteOnSequence<FaviconBackendWrapper>,
- public favicon::FaviconBackendDelegate {
- public:
- explicit FaviconBackendWrapper(
- scoped_refptr<base::SequencedTaskRunner> task_runner);
- FaviconBackendWrapper(const FaviconBackendWrapper&) = delete;
- FaviconBackendWrapper& operator=(const FaviconBackendWrapper&) = delete;
- void Init(const base::FilePath& db_path);
- void Shutdown();
- void DeleteAndRecreateDatabase();
- // All of these functions are called by the FaviconServiceImpl. They call
- // through to |favicon_backend_|.
- std::vector<favicon_base::FaviconRawBitmapResult> GetFaviconsForUrl(
- const GURL& page_url,
- const favicon_base::IconTypeSet& icon_types,
- const std::vector<int>& desired_sizes);
- favicon_base::FaviconRawBitmapResult GetLargestFaviconForUrl(
- const GURL& page_url,
- const std::vector<favicon_base::IconTypeSet>& icon_types_list,
- int minimum_size_in_pixels);
- void SetFaviconsOutOfDateForPage(const GURL& page_url);
- void SetFavicons(const base::flat_set<GURL>& page_urls,
- favicon_base::IconType icon_type,
- const GURL& icon_url,
- const std::vector<SkBitmap>& bitmaps);
- void CloneFaviconMappingsForPages(
- const GURL& page_url_to_read,
- const favicon_base::IconTypeSet& icon_types,
- const base::flat_set<GURL>& page_urls_to_write);
- std::vector<favicon_base::FaviconRawBitmapResult> GetFavicon(
- const GURL& icon_url,
- favicon_base::IconType icon_type,
- const std::vector<int>& desired_sizes);
- std::vector<favicon_base::FaviconRawBitmapResult>
- UpdateFaviconMappingsAndFetch(const base::flat_set<GURL>& page_urls,
- const GURL& icon_url,
- favicon_base::IconType icon_type,
- const std::vector<int>& desired_sizes);
- void DeleteFaviconMappings(const base::flat_set<GURL>& page_urls,
- favicon_base::IconType icon_type);
- // favicon::FaviconBackendDelegate:
- std::vector<GURL> GetCachedRecentRedirectsForPage(
- const GURL& page_url) override;
- private:
- friend class base::RefCountedDeleteOnSequence<FaviconBackendWrapper>;
- friend class base::DeleteHelper<FaviconBackendWrapper>;
- friend class FaviconBackendWrapperTest;
- ~FaviconBackendWrapper() override;
- void ScheduleCommit();
- void Commit();
- // Called to expire (remove) out of date icons and restart the timer.
- void OnExpireTimerFired();
- scoped_refptr<base::SequencedTaskRunner> task_runner_;
- // Timer used to delay commits for a short amount of time. This done to
- // batch commits.
- base::OneShotTimer commit_timer_;
- // The real implementation of the backend. If there is a problem
- // initializing the database this will be null.
- std::unique_ptr<favicon::FaviconBackend> favicon_backend_;
- // Timer used to remove items from the database that are likely no longer
- // needed.
- base::OneShotTimer expire_timer_;
- base::FilePath db_path_;
- };
- // These values are here only for tests.
- // Amount of time before favicons are removed. That is, any favicons downloaded
- // before this amount of time are removed.
- constexpr base::TimeDelta kTimeDeltaWhenEntriesAreRemoved = base::Days(30);
- // See comment near kMaxNumberOfEntriesToRemoveAtATime for details on this.
- constexpr base::TimeDelta kTimeDeltaForRunningExpireWithRemainingWork =
- base::Minutes(2);
- } // namespace weblayer
- #endif // WEBLAYER_BROWSER_FAVICON_FAVICON_BACKEND_WRAPPER_H_
|