// Copyright (c) 2011 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 CHROME_BROWSER_WEBDATA_LOGINS_TABLE_H_
#define CHROME_BROWSER_WEBDATA_LOGINS_TABLE_H_
#pragma once
#include <vector>
#include "chrome/browser/webdata/web_database_table.h"
namespace base {
class Time;
}
namespace webkit_glue {
struct PasswordForm;
}
#if defined(OS_WIN)
struct IE7PasswordInfo;
#endif
// This class manages the logins table within the SQLite database passed to the
// constructor. It expects the following schemas:
//
// Note: The database stores time in seconds, UTC.
//
// logins
// origin_url
// action_url
// username_element
// username_value
// password_element
// password_value
// submit_element
// signon_realm The authority (scheme, host, port).
// ssl_valid SSL status of page containing the form at first
// impression.
// preferred MRU bit.
// date_created This column was added after logins support. "Legacy"
// entries have a value of 0.
// blacklisted_by_user Tracks whether or not the user opted to 'never
// remember'
// passwords for this site.
//
class LoginsTable : public WebDatabaseTable {
public:
LoginsTable(sql::Connection* db, sql::MetaTable* meta_table)
: WebDatabaseTable(db, meta_table) {}
virtual ~LoginsTable() {}
virtual bool Init();
virtual bool IsSyncable();
// Adds |form| to the list of remembered password forms.
bool AddLogin(const webkit_glue::PasswordForm& form);
#if defined(OS_WIN)
// Adds |info| to the list of imported passwords from ie7/ie8.
bool AddIE7Login(const IE7PasswordInfo& info);
// Removes |info| from the list of imported passwords from ie7/ie8.
bool RemoveIE7Login(const IE7PasswordInfo& info);
// Return the ie7/ie8 login matching |info|.
bool GetIE7Login(const IE7PasswordInfo& info, IE7PasswordInfo* result);
#endif
// Updates remembered password form.
bool UpdateLogin(const webkit_glue::PasswordForm& form);
// Removes |form| from the list of remembered password forms.
bool RemoveLogin(const webkit_glue::PasswordForm& form);
// Removes all logins created from |delete_begin| onwards (inclusive) and
// before |delete_end|. You may use a null Time value to do an unbounded
// delete in either direction.
bool RemoveLoginsCreatedBetween(base::Time delete_begin,
base::Time delete_end);
// Loads a list of matching password forms into the specified vector |forms|.
// The list will contain all possibly relevant entries to the observed |form|,
// including blacklisted matches.
bool GetLogins(const webkit_glue::PasswordForm& form,
std::vector<webkit_glue::PasswordForm*>* forms);
// Loads the complete list of password forms into the specified vector |forms|
// if include_blacklisted is true, otherwise only loads those which are
// actually autofill-able; i.e haven't been blacklisted by the user selecting
// the 'Never for this site' button.
bool GetAllLogins(std::vector<webkit_glue::PasswordForm*>* forms,
bool include_blacklisted);
private:
DISALLOW_COPY_AND_ASSIGN(LoginsTable);
};
#endif // CHROME_BROWSER_WEBDATA_LOGINS_TABLE_H_