| Index: components/precache/core/precache_database.h
 | 
| diff --git a/components/precache/core/precache_database.h b/components/precache/core/precache_database.h
 | 
| new file mode 100644
 | 
| index 0000000000000000000000000000000000000000..1351383f53667373a6ce00e06f57bbb69700f45c
 | 
| --- /dev/null
 | 
| +++ b/components/precache/core/precache_database.h
 | 
| @@ -0,0 +1,79 @@
 | 
| +// 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_
 | 
| 
 |