blob: 1351383f53667373a6ce00e06f57bbb69700f45c [file] [log] [blame]
// 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_