| // Copyright 2013 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_PRECACHE_CORE_PRECACHE_DATABASE_H_ |
| #define COMPONENTS_PRECACHE_CORE_PRECACHE_DATABASE_H_ |
| |
| #include "base/basictypes.h" |
| #include "base/memory/ref_counted.h" |
| #include "base/memory/scoped_ptr.h" |
| #include "base/threading/thread_checker.h" |
| |
| class GURL; |
| |
| namespace base { |
| class FilePath; |
| class Time; |
| } |
| |
| namespace sql { |
| class Connection; |
| } |
| |
| namespace precache { |
| |
| class PrecacheURLTable; |
| |
| // Class that tracks information related to precaching. This class can be |
| // constructed or destroyed on any threads, but all other methods must be called |
| // on the same thread (e.g. the DB thread). |
| class PrecacheDatabase : public base::RefCountedThreadSafe<PrecacheDatabase> { |
| public: |
| // A PrecacheDatabase can be constructed on any thread. |
| PrecacheDatabase(); |
| |
| // Initializes the precache database, using the specified database file path. |
| // Init must be called before any other methods. |
| bool Init(const base::FilePath& db_path); |
| |
| // Deletes precache history from the precache URL table that is more than 60 |
| // days older than |current_time|. |
| void DeleteExpiredPrecacheHistory(const base::Time& current_time); |
| |
| // Report precache-related metrics in response to a URL being fetched, where |
| // the fetch was motivated by precaching. |
| void RecordURLPrecached(const GURL& url, const base::Time& fetch_time, |
| int64 size, bool was_cached); |
| |
| // Report precache-related metrics in response to a URL being fetched, where |
| // the fetch was not motivated by precaching. |is_connection_cellular| |
| // indicates whether the current network connection is a cellular network. |
| void RecordURLFetched(const GURL& url, const base::Time& fetch_time, |
| int64 size, bool was_cached, |
| bool is_connection_cellular); |
| |
| private: |
| friend class base::RefCountedThreadSafe<PrecacheDatabase>; |
| friend class PrecacheDatabaseTest; |
| |
| ~PrecacheDatabase(); |
| |
| bool IsDatabaseAccessible() const; |
| |
| scoped_ptr<sql::Connection> db_; |
| |
| // Table that keeps track of URLs that are in the cache because of precaching, |
| // and wouldn't be in the cache otherwise. |
| scoped_ptr<PrecacheURLTable> precache_url_table_; |
| |
| // ThreadChecker used to ensure that all methods other than the constructor |
| // or destructor are called on the same thread. |
| base::ThreadChecker thread_checker_; |
| |
| DISALLOW_COPY_AND_ASSIGN(PrecacheDatabase); |
| }; |
| |
| } // namespace precache |
| |
| #endif // COMPONENTS_PRECACHE_CORE_PRECACHE_DATABASE_H_ |