| Index: chrome/browser/history/expire_history_backend.h
|
| diff --git a/chrome/browser/history/expire_history_backend.h b/chrome/browser/history/expire_history_backend.h
|
| deleted file mode 100644
|
| index 797596676f37e11578971adcad611d9b9a9af84a..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/history/expire_history_backend.h
|
| +++ /dev/null
|
| @@ -1,271 +0,0 @@
|
| -// Copyright (c) 2012 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_HISTORY_EXPIRE_HISTORY_BACKEND_H_
|
| -#define CHROME_BROWSER_HISTORY_EXPIRE_HISTORY_BACKEND_H_
|
| -
|
| -#include <queue>
|
| -#include <set>
|
| -#include <vector>
|
| -
|
| -#include "base/basictypes.h"
|
| -#include "base/gtest_prod_util.h"
|
| -#include "base/memory/scoped_ptr.h"
|
| -#include "base/memory/weak_ptr.h"
|
| -#include "base/time/time.h"
|
| -#include "components/history/core/browser/history_types.h"
|
| -
|
| -class GURL;
|
| -class TestingProfile;
|
| -
|
| -namespace history {
|
| -
|
| -class HistoryBackendNotifier;
|
| -class HistoryClient;
|
| -class HistoryDatabase;
|
| -class ThumbnailDatabase;
|
| -
|
| -// Encapsulates visit expiration criteria and type of visits to expire.
|
| -class ExpiringVisitsReader {
|
| - public:
|
| - virtual ~ExpiringVisitsReader() {}
|
| - // Populates |visits| from |db|, using provided |end_time| and |max_visits|
|
| - // cap.
|
| - virtual bool Read(base::Time end_time, HistoryDatabase* db,
|
| - VisitVector* visits, int max_visits) const = 0;
|
| -};
|
| -
|
| -typedef std::vector<const ExpiringVisitsReader*> ExpiringVisitsReaders;
|
| -
|
| -// Helper component to HistoryBackend that manages expiration and deleting of
|
| -// history.
|
| -//
|
| -// It will automatically start periodically expiring old history once you call
|
| -// StartExpiringOldStuff().
|
| -class ExpireHistoryBackend {
|
| - public:
|
| - // The delegate pointer must be non-NULL. We will NOT take ownership of it.
|
| - // HistoryClient may be NULL. The HistoryClient is used when expiring URLS so
|
| - // that we don't remove any URLs or favicons that are bookmarked (visits are
|
| - // removed though).
|
| - ExpireHistoryBackend(HistoryBackendNotifier* notifier,
|
| - HistoryClient* history_client);
|
| - ~ExpireHistoryBackend();
|
| -
|
| - // Completes initialization by setting the databases that this class will use.
|
| - void SetDatabases(HistoryDatabase* main_db,
|
| - ThumbnailDatabase* thumb_db);
|
| -
|
| - // Begins periodic expiration of history older than the given threshold. This
|
| - // will continue until the object is deleted.
|
| - void StartExpiringOldStuff(base::TimeDelta expiration_threshold);
|
| -
|
| - // Deletes everything associated with a URL.
|
| - void DeleteURL(const GURL& url);
|
| -
|
| - // Deletes everything associated with each URL in the list.
|
| - void DeleteURLs(const std::vector<GURL>& url);
|
| -
|
| - // Removes all visits to restrict_urls (or all URLs if empty) in the given
|
| - // time range, updating the URLs accordingly.
|
| - void ExpireHistoryBetween(const std::set<GURL>& restrict_urls,
|
| - base::Time begin_time, base::Time end_time);
|
| -
|
| - // Removes all visits to all URLs with the given times, updating the
|
| - // URLs accordingly. |times| must be in reverse chronological order
|
| - // and not contain any duplicates.
|
| - void ExpireHistoryForTimes(const std::vector<base::Time>& times);
|
| -
|
| - // Removes the given list of visits, updating the URLs accordingly (similar to
|
| - // ExpireHistoryBetween(), but affecting a specific set of visits).
|
| - void ExpireVisits(const VisitVector& visits);
|
| -
|
| - // Expires all visits before and including the given time, updating the URLs
|
| - // accordingly. Currently only used for testing.
|
| - void ExpireHistoryBefore(base::Time end_time);
|
| -
|
| - // Returns the current cut-off time before which we will start expiring stuff.
|
| - // Note that this as an absolute time rather than a delta, so the caller
|
| - // should not save it.
|
| - base::Time GetCurrentExpirationTime() const {
|
| - return base::Time::Now() - expiration_threshold_;
|
| - }
|
| -
|
| - private:
|
| - FRIEND_TEST_ALL_PREFIXES(ExpireHistoryTest, DeleteFaviconsIfPossible);
|
| - FRIEND_TEST_ALL_PREFIXES(ExpireHistoryTest, ExpireSomeOldHistory);
|
| - FRIEND_TEST_ALL_PREFIXES(ExpireHistoryTest, ExpiringVisitsReader);
|
| - FRIEND_TEST_ALL_PREFIXES(ExpireHistoryTest, ExpireSomeOldHistoryWithSource);
|
| - friend class ::TestingProfile;
|
| -
|
| - struct DeleteEffects {
|
| - DeleteEffects();
|
| - ~DeleteEffects();
|
| -
|
| - // The time range affected. These can be is_null() to be unbounded in one
|
| - // or both directions.
|
| - base::Time begin_time, end_time;
|
| -
|
| - // The unique URL rows affected by this delete.
|
| - std::map<URLID, URLRow> affected_urls;
|
| -
|
| - // The URLs modified, but not deleted, during this operation.
|
| - URLRows modified_urls;
|
| -
|
| - // The URLs deleted during this operation.
|
| - URLRows deleted_urls;
|
| -
|
| - // All favicon IDs that the deleted URLs had. Favicons will be shared
|
| - // between all URLs with the same favicon, so this is the set of IDs that we
|
| - // will need to check when the delete operations are complete.
|
| - std::set<favicon_base::FaviconID> affected_favicons;
|
| -
|
| - // All favicon urls that were actually deleted from the thumbnail db.
|
| - std::set<GURL> deleted_favicons;
|
| - };
|
| -
|
| - // Deletes the visit-related stuff for all the visits in the given list, and
|
| - // adds the rows for unique URLs affected to the affected_urls list in
|
| - // the dependencies structure.
|
| - void DeleteVisitRelatedInfo(const VisitVector& visits,
|
| - DeleteEffects* effects);
|
| -
|
| - // Finds or deletes dependency information for the given URL. Information that
|
| - // is specific to this URL (URL row, thumbnails, etc.) is deleted.
|
| - //
|
| - // This does not affect the visits! This is used for expiration as well as
|
| - // deleting from the UI, and they handle visits differently.
|
| - //
|
| - // Other information will be collected and returned in the output containers.
|
| - // This includes some of the things deleted that are needed elsewhere, plus
|
| - // some things like favicons that could be shared by many URLs, and need to
|
| - // be checked for deletion (this allows us to delete many URLs with only one
|
| - // check for shared information at the end).
|
| - //
|
| - // Assumes the main_db_ is non-NULL.
|
| - //
|
| - // NOTE: If the url is bookmarked only the segments and text db are updated,
|
| - // everything else is unchanged. This is done so that bookmarks retain their
|
| - // favicons and thumbnails.
|
| - void DeleteOneURL(const URLRow& url_row,
|
| - bool is_bookmarked,
|
| - DeleteEffects* effects);
|
| -
|
| - // Deletes all the URLs in the given vector and handles their dependencies.
|
| - // This will delete starred URLs
|
| - void DeleteURLs(const URLRows& urls, DeleteEffects* effects);
|
| -
|
| - // Expiration involves removing visits, then propagating the visits out from
|
| - // there and delete any orphaned URLs. These will be added to the deleted URLs
|
| - // field of the dependencies and DeleteOneURL will handle deleting out from
|
| - // there. This function does not handle favicons.
|
| - //
|
| - // When a URL is not deleted, the last visit time and the visit and typed
|
| - // counts will be updated.
|
| - //
|
| - // The visits in the given vector should have already been deleted from the
|
| - // database, and the list of affected URLs already be filled into
|
| - // |depenencies->affected_urls|.
|
| - //
|
| - // Starred URLs will not be deleted. The information in the dependencies that
|
| - // DeleteOneURL fills in will be updated, and this function will also delete
|
| - // any now-unused favicons.
|
| - void ExpireURLsForVisits(const VisitVector& visits, DeleteEffects* effects);
|
| -
|
| - // Deletes the favicons listed in |effects->affected_favicons| if they are
|
| - // unsued. Fails silently (we don't care about favicons so much, so don't want
|
| - // to stop everything if it fails). Fills |expired_favicons| with the set of
|
| - // favicon urls that no longer have associated visits and were therefore
|
| - // expired.
|
| - void DeleteFaviconsIfPossible(DeleteEffects* effects);
|
| -
|
| - // Enum representing what type of action resulted in the history DB deletion.
|
| - enum DeletionType {
|
| - // User initiated the deletion from the History UI.
|
| - DELETION_USER_INITIATED,
|
| - // History data was automatically expired due to being more than 90 days
|
| - // old.
|
| - DELETION_EXPIRED
|
| - };
|
| -
|
| - // Broadcasts URL modified and deleted notifications.
|
| - void BroadcastNotifications(DeleteEffects* effects, DeletionType type);
|
| -
|
| - // Schedules a call to DoExpireIteration.
|
| - void ScheduleExpire();
|
| -
|
| - // Calls ExpireSomeOldHistory to expire some amount of old history, according
|
| - // to the items in work queue, and schedules another call to happen in the
|
| - // future.
|
| - void DoExpireIteration();
|
| -
|
| - // Tries to expire the oldest |max_visits| visits from history that are older
|
| - // than |time_threshold|. The return value indicates if we think there might
|
| - // be more history to expire with the current time threshold (it does not
|
| - // indicate success or failure).
|
| - bool ExpireSomeOldHistory(base::Time end_time,
|
| - const ExpiringVisitsReader* reader,
|
| - int max_visits);
|
| -
|
| - // Tries to detect possible bad history or inconsistencies in the database
|
| - // and deletes items. For example, URLs with no visits.
|
| - void ParanoidExpireHistory();
|
| -
|
| - // Returns the HistoryClient, blocking until the bookmarks are loaded. This
|
| - // may return NULL during testing.
|
| - HistoryClient* GetHistoryClient();
|
| -
|
| - // Initializes periodic expiration work queue by populating it with with tasks
|
| - // for all known readers.
|
| - void InitWorkQueue();
|
| -
|
| - // Returns the reader for all visits. This method is only used by the unit
|
| - // tests.
|
| - const ExpiringVisitsReader* GetAllVisitsReader();
|
| -
|
| - // Returns the reader for AUTO_SUBFRAME visits. This method is only used by
|
| - // the unit tests.
|
| - const ExpiringVisitsReader* GetAutoSubframeVisitsReader();
|
| -
|
| - // Non-owning pointer to the notification delegate (guaranteed non-NULL).
|
| - HistoryBackendNotifier* notifier_;
|
| -
|
| - // Non-owning pointers to the databases we deal with (MAY BE NULL).
|
| - HistoryDatabase* main_db_; // Main history database.
|
| - ThumbnailDatabase* thumb_db_; // Thumbnails and favicons.
|
| -
|
| - // The threshold for "old" history where we will automatically delete it.
|
| - base::TimeDelta expiration_threshold_;
|
| -
|
| - // List of all distinct types of readers. This list is used to populate the
|
| - // work queue.
|
| - ExpiringVisitsReaders readers_;
|
| -
|
| - // Work queue for periodic expiration tasks, used by DoExpireIteration() to
|
| - // determine what to do at an iteration, as well as populate it for future
|
| - // iterations.
|
| - std::queue<const ExpiringVisitsReader*> work_queue_;
|
| -
|
| - // Readers for various types of visits.
|
| - // TODO(dglazkov): If you are adding another one, please consider reorganizing
|
| - // into a map.
|
| - scoped_ptr<ExpiringVisitsReader> all_visits_reader_;
|
| - scoped_ptr<ExpiringVisitsReader> auto_subframe_visits_reader_;
|
| -
|
| - // The HistoryClient; may be NULL.
|
| - //
|
| - // Use GetHistoryClient to access this, which makes sure the bookmarks are
|
| - // loaded before returning.
|
| - HistoryClient* history_client_;
|
| -
|
| - // Used to generate runnable methods to do timers on this class. They will be
|
| - // automatically canceled when this class is deleted.
|
| - base::WeakPtrFactory<ExpireHistoryBackend> weak_factory_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(ExpireHistoryBackend);
|
| -};
|
| -
|
| -} // namespace history
|
| -
|
| -#endif // CHROME_BROWSER_HISTORY_EXPIRE_HISTORY_BACKEND_H_
|
|
|