1// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "chrome/browser/webdata/logins_table.h"
6
7#include <limits>
8
9#include "base/logging.h"
10#include "components/webdata/common/web_database.h"
11#include "sql/statement.h"
12
13namespace {
14
15WebDatabaseTable::TypeKey GetKey() {
16  // We just need a unique constant. Use the address of a static that
17  // COMDAT folding won't touch in an optimizing linker.
18  static int table_key = 0;
19  return reinterpret_cast<void*>(&table_key);
20}
21
22}  // namespace
23
24LoginsTable* LoginsTable::FromWebDatabase(WebDatabase* db) {
25  return static_cast<LoginsTable*>(db->GetTable(GetKey()));
26}
27
28WebDatabaseTable::TypeKey LoginsTable::GetTypeKey() const {
29  return GetKey();
30}
31
32bool LoginsTable::CreateTablesIfNecessary() {
33  if (db_->DoesTableExist("logins")) {
34    // We don't check for success. It doesn't matter that much.
35    // If we fail we'll just try again later anyway.
36    ignore_result(db_->Execute("DROP TABLE logins"));
37  }
38
39#if defined(OS_WIN)
40  if (!db_->DoesTableExist("ie7_logins")) {
41    if (!db_->Execute("CREATE TABLE ie7_logins ("
42                      "url_hash VARCHAR NOT NULL, "
43                      "password_value BLOB, "
44                      "date_created INTEGER NOT NULL,"
45                      "UNIQUE "
46                      "(url_hash))")) {
47      NOTREACHED();
48      return false;
49    }
50    if (!db_->Execute("CREATE INDEX ie7_logins_hash ON "
51                      "ie7_logins (url_hash)")) {
52      NOTREACHED();
53      return false;
54    }
55  }
56#endif
57
58  return true;
59}
60
61bool LoginsTable::IsSyncable() {
62  return true;
63}
64
65bool LoginsTable::MigrateToVersion(int version,
66                                   bool* update_compatible_version) {
67  return true;
68}
69