1116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Copyright 2014 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#ifndef COMPONENTS_HISTORY_CORE_BROWSER_IN_MEMORY_DATABASE_H_
6116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#define COMPONENTS_HISTORY_CORE_BROWSER_IN_MEMORY_DATABASE_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h"
9116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/history/core/browser/url_database.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sql/connection.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace base {
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class FilePath;
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace history {
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Class used for a fast in-memory cache of typed URLs. Used for inline
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// autocomplete since it is fast enough to be called synchronously as the user
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// is typing.
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class InMemoryDatabase : public URLDatabase {
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  InMemoryDatabase();
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~InMemoryDatabase();
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Creates an empty in-memory database.
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool InitFromScratch();
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Initializes the database by directly slurping the data from the given
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // file. Conceptually, the InMemoryHistoryBackend should do the populating
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // after this object does some common initialization, but that would be
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // much slower.
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool InitFromDisk(const base::FilePath& history_name);
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Implemented for URLDatabase.
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual sql::Connection& GetDB() OVERRIDE;
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Initializes the database connection, this is the shared code between
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // InitFromScratch() and InitFromDisk() above. Returns true on success.
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool InitDB();
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sql::Connection db_;
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(InMemoryDatabase);
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace history
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif  // COMPONENTS_HISTORY_CORE_BROWSER_IN_MEMORY_DATABASE_H_
52