Changeset 116258 in webkit


Ignore:
Timestamp:
May 6, 2012 6:50:45 PM (12 years ago)
Author:
commit-queue@webkit.org
Message:

[BlackBerry] Autofill backing store implementation upstream
https://bugs.webkit.org/show_bug.cgi?id=85575

Patch by Jonathan Dong <Jonathan Dong> on 2012-05-06
Reviewed by Rob Buis.

Source/WebCore:

Implemented class AutofillBackingStore which is responsible
for handling interaction with autofill database.

Replaced static function
CredentialBackingStore* CredentialBackingStore::instance()
with a helper function
CredentialBackingStore& credentialBackingStore(),
and used DEFINE_STATIC_LOCAL to construct the singleton
object.
Also removed unnecessary function close() and combined with
the destructor of class CredentialBackingStore.

Initial upstream, No new tests.

  • PlatformBlackBerry.cmake:
  • platform/network/blackberry/AutofillBackingStore.cpp: Added.

(WebCore):
(WebCore::autofillBackingStore):
(WebCore::AutofillBackingStore::AutofillBackingStore):
(WebCore::AutofillBackingStore::~AutofillBackingStore):
(WebCore::AutofillBackingStore::open):
(WebCore::AutofillBackingStore::add):
(WebCore::AutofillBackingStore::update):
(WebCore::AutofillBackingStore::contains):
(WebCore::AutofillBackingStore::get):
(WebCore::AutofillBackingStore::clear):

  • platform/network/blackberry/AutofillBackingStore.h: Added.

(WebCore):
(AutofillBackingStore):

  • platform/network/blackberry/CredentialBackingStore.cpp:

(WebCore::credentialBackingStore):
(WebCore::CredentialBackingStore::~CredentialBackingStore):

  • platform/network/blackberry/CredentialBackingStore.h:

(CredentialBackingStore):
(WebCore):

  • platform/network/blackberry/CredentialStorageBlackBerry.cpp:

(WebCore::CredentialStorage::getFromPersistentStorage):

Source/WebKit/blackberry:

Replaced calling static function CredentialBackingStore::instance()
with calling the helper function credentialBackingStore().

  • WebCoreSupport/CredentialManager.cpp:

(WebCore::CredentialManager::autofillAuthenticationChallenge):
(WebCore::CredentialManager::autofillPasswordForms):
(WebCore::CredentialManager::saveCredentialIfConfirmed):
(WebCore::CredentialManager::clearCredentials):
(WebCore::CredentialManager::clearNeverRememberSites):

Location:
trunk/Source
Files:
2 added
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r116255 r116258  
     12012-05-06  Jonathan Dong  <jonathan.dong@torchmobile.com.cn>
     2
     3        [BlackBerry] Autofill backing store implementation upstream
     4        https://bugs.webkit.org/show_bug.cgi?id=85575
     5
     6        Reviewed by Rob Buis.
     7
     8        Implemented class AutofillBackingStore which is responsible
     9        for handling interaction with autofill database.
     10
     11        Replaced static function
     12        CredentialBackingStore* CredentialBackingStore::instance()
     13        with a helper function
     14        CredentialBackingStore& credentialBackingStore(),
     15        and used DEFINE_STATIC_LOCAL to construct the singleton
     16        object.
     17        Also removed unnecessary function close() and combined with
     18        the destructor of class CredentialBackingStore.
     19
     20        Initial upstream, No new tests.
     21
     22        * PlatformBlackBerry.cmake:
     23        * platform/network/blackberry/AutofillBackingStore.cpp: Added.
     24        (WebCore):
     25        (WebCore::autofillBackingStore):
     26        (WebCore::AutofillBackingStore::AutofillBackingStore):
     27        (WebCore::AutofillBackingStore::~AutofillBackingStore):
     28        (WebCore::AutofillBackingStore::open):
     29        (WebCore::AutofillBackingStore::add):
     30        (WebCore::AutofillBackingStore::update):
     31        (WebCore::AutofillBackingStore::contains):
     32        (WebCore::AutofillBackingStore::get):
     33        (WebCore::AutofillBackingStore::clear):
     34        * platform/network/blackberry/AutofillBackingStore.h: Added.
     35        (WebCore):
     36        (AutofillBackingStore):
     37        * platform/network/blackberry/CredentialBackingStore.cpp:
     38        (WebCore::credentialBackingStore):
     39        (WebCore::CredentialBackingStore::~CredentialBackingStore):
     40        * platform/network/blackberry/CredentialBackingStore.h:
     41        (CredentialBackingStore):
     42        (WebCore):
     43        * platform/network/blackberry/CredentialStorageBlackBerry.cpp:
     44        (WebCore::CredentialStorage::getFromPersistentStorage):
     45
    1462012-05-06  MORITA Hajime  <morrita@google.com>
    247
  • trunk/Source/WebCore/PlatformBlackBerry.cmake

    r115347 r116258  
    9191    platform/network/MIMESniffing.cpp
    9292    platform/network/ProxyServer.cpp
     93    platform/network/blackberry/AutofillBackingStore.cpp
    9394    platform/network/blackberry/DeferredData.cpp
    9495    platform/network/blackberry/NetworkJob.cpp
  • trunk/Source/WebCore/platform/network/blackberry/CredentialBackingStore.cpp

    r112104 r116258  
    3939namespace WebCore {
    4040
    41 CredentialBackingStore* CredentialBackingStore::instance()
    42 {
    43     static CredentialBackingStore* backingStore = 0;
    44     if (!backingStore) {
    45         backingStore = new CredentialBackingStore;
    46         backingStore->open(pathByAppendingComponent(BlackBerry::Platform::Client::get()->getApplicationDataDirectory().c_str(), "/credentials.db"));
    47     }
     41CredentialBackingStore& credentialBackingStore()
     42{
     43    DEFINE_STATIC_LOCAL(CredentialBackingStore, backingStore, ());
     44    if (!backingStore.m_database.isOpen())
     45        backingStore.open(pathByAppendingComponent(BlackBerry::Platform::Client::get()->getApplicationDataDirectory().c_str(), "/credentials.db"));
    4846    return backingStore;
    4947}
     
    6462
    6563CredentialBackingStore::~CredentialBackingStore()
    66 {
    67     if (m_database.isOpen())
    68         m_database.close();
    69 }
    70 
    71 bool CredentialBackingStore::open(const String& dbPath)
    72 {
    73     ASSERT(!m_database.isOpen());
    74 
    75     HANDLE_SQL_EXEC_FAILURE(!m_database.open(dbPath), false,
    76         "Failed to open database file %s for login database", dbPath.utf8().data());
    77 
    78     if (!m_database.tableExists("logins")) {
    79         HANDLE_SQL_EXEC_FAILURE(!m_database.executeCommand("CREATE TABLE logins (origin_url VARCHAR NOT NULL, host VARCHAR NOT NULL, port INTEGER, service_type INTEGER NOT NULL, realm VARCHAR, auth_scheme INTEGER NOT NULL, username VARCHAR, password BLOB) "),
    80             false, "Failed to create table logins for login database");
    81 
    82         // Create index for table logins.
    83         HANDLE_SQL_EXEC_FAILURE(!m_database.executeCommand("CREATE INDEX logins_index ON logins (host)"),
    84             false, "Failed to create index for table logins");
    85     }
    86 
    87     if (!m_database.tableExists("never_remember")) {
    88         HANDLE_SQL_EXEC_FAILURE(!m_database.executeCommand("CREATE TABLE never_remember (origin_url VARCHAR NOT NULL, host VARCHAR NOT NULL, port INTEGER, service_type INTEGER NOT NULL, realm VARCHAR, auth_scheme INTEGER NOT NULL) "),
    89             false, "Failed to create table never_remember for login database");
    90 
    91         // Create index for table never_remember.
    92         HANDLE_SQL_EXEC_FAILURE(!m_database.executeCommand("CREATE INDEX never_remember_index ON never_remember (host)"),
    93             false, "Failed to create index for table never_remember");
    94     }
    95 
    96     // Prepare the statements.
    97     m_addLoginStatement = new SQLiteStatement(m_database, "INSERT OR REPLACE INTO logins (origin_url, host, port, service_type, realm, auth_scheme, username, password) VALUES (?, ?, ?, ?, ?, ?, ?, ?)");
    98     HANDLE_SQL_EXEC_FAILURE(m_addLoginStatement->prepare() != SQLResultOk,
    99         false, "Failed to prepare addLogin statement");
    100 
    101     m_updateLoginStatement = new SQLiteStatement(m_database, "UPDATE logins SET username = ?, password = ? WHERE origin_url = ? AND host = ? AND port = ? AND service_type = ? AND realm = ? AND auth_scheme = ?");
    102     HANDLE_SQL_EXEC_FAILURE(m_updateLoginStatement->prepare() != SQLResultOk,
    103         false, "Failed to prepare updateLogin statement");
    104 
    105     m_hasLoginStatement = new SQLiteStatement(m_database, "SELECT COUNT(*) FROM logins WHERE origin_url = ? AND host = ? AND port = ? AND service_type = ? AND realm = ? AND auth_scheme = ?");
    106     HANDLE_SQL_EXEC_FAILURE(m_hasLoginStatement->prepare() != SQLResultOk,
    107         false, "Failed to prepare hasLogin statement");
    108 
    109     m_getLoginStatement = new SQLiteStatement(m_database, "SELECT username, password FROM logins WHERE host = ? AND port = ? AND service_type = ? AND realm = ? AND auth_scheme = ?");
    110     HANDLE_SQL_EXEC_FAILURE(m_getLoginStatement->prepare() != SQLResultOk,
    111         false, "Failed to prepare getLogin statement");
    112 
    113     m_getLoginByURLStatement = new SQLiteStatement(m_database, "SELECT username, password FROM logins WHERE origin_url = ?");
    114     HANDLE_SQL_EXEC_FAILURE(m_getLoginByURLStatement->prepare() != SQLResultOk,
    115         false, "Failed to prepare getLoginByURL statement");
    116 
    117     m_removeLoginStatement = new SQLiteStatement(m_database, "DELETE FROM logins WHERE origin_url = ? AND host = ? AND port = ? AND service_type = ? AND realm = ? AND auth_scheme = ?");
    118     HANDLE_SQL_EXEC_FAILURE(m_removeLoginStatement->prepare() != SQLResultOk,
    119         false, "Failed to prepare removeLogin statement");
    120 
    121     m_addNeverRememberStatement = new SQLiteStatement(m_database, "INSERT OR REPLACE INTO never_remember (origin_url, host, port, service_type, realm, auth_scheme) VALUES (?, ?, ?, ?, ?, ?)");
    122     HANDLE_SQL_EXEC_FAILURE(m_addNeverRememberStatement->prepare() != SQLResultOk,
    123         false, "Failed to prepare addNeverRemember statement");
    124 
    125     m_hasNeverRememberStatement = new SQLiteStatement(m_database, "SELECT COUNT(*) FROM never_remember WHERE host = ? AND port = ? AND service_type = ? AND realm = ? AND auth_scheme = ?");
    126     HANDLE_SQL_EXEC_FAILURE(m_hasNeverRememberStatement->prepare() != SQLResultOk,
    127         false, "Failed to prepare hasNeverRemember statement");
    128 
    129     m_getNeverRememberStatement = new SQLiteStatement(m_database, "SELECT origin_url FROM never_remember WHERE host = ? AND port = ? AND service_type = ? AND realm = ? AND auth_scheme = ?");
    130     HANDLE_SQL_EXEC_FAILURE(m_getNeverRememberStatement->prepare() != SQLResultOk,
    131         false, "Failed to prepare getNeverRemember statement");
    132 
    133     m_removeNeverRememberStatement = new SQLiteStatement(m_database, "DELETE FROM never_remember WHERE host = ? AND port = ? AND service_type = ? AND realm = ? AND auth_scheme = ?");
    134     HANDLE_SQL_EXEC_FAILURE(m_removeNeverRememberStatement->prepare() != SQLResultOk,
    135         false, "Failed to prepare removeNeverRemember statement");
    136 
    137     return true;
    138 }
    139 
    140 void CredentialBackingStore::close()
    14164{
    14265    delete m_addLoginStatement;
     
    16588}
    16689
     90bool CredentialBackingStore::open(const String& dbPath)
     91{
     92    ASSERT(!m_database.isOpen());
     93
     94    HANDLE_SQL_EXEC_FAILURE(!m_database.open(dbPath), false,
     95        "Failed to open database file %s for login database", dbPath.utf8().data());
     96
     97    if (!m_database.tableExists("logins")) {
     98        HANDLE_SQL_EXEC_FAILURE(!m_database.executeCommand("CREATE TABLE logins (origin_url VARCHAR NOT NULL, host VARCHAR NOT NULL, port INTEGER, service_type INTEGER NOT NULL, realm VARCHAR, auth_scheme INTEGER NOT NULL, username VARCHAR, password BLOB) "),
     99            false, "Failed to create table logins for login database");
     100
     101        // Create index for table logins.
     102        HANDLE_SQL_EXEC_FAILURE(!m_database.executeCommand("CREATE INDEX logins_index ON logins (host)"),
     103            false, "Failed to create index for table logins");
     104    }
     105
     106    if (!m_database.tableExists("never_remember")) {
     107        HANDLE_SQL_EXEC_FAILURE(!m_database.executeCommand("CREATE TABLE never_remember (origin_url VARCHAR NOT NULL, host VARCHAR NOT NULL, port INTEGER, service_type INTEGER NOT NULL, realm VARCHAR, auth_scheme INTEGER NOT NULL) "),
     108            false, "Failed to create table never_remember for login database");
     109
     110        // Create index for table never_remember.
     111        HANDLE_SQL_EXEC_FAILURE(!m_database.executeCommand("CREATE INDEX never_remember_index ON never_remember (host)"),
     112            false, "Failed to create index for table never_remember");
     113    }
     114
     115    // Prepare the statements.
     116    m_addLoginStatement = new SQLiteStatement(m_database, "INSERT OR REPLACE INTO logins (origin_url, host, port, service_type, realm, auth_scheme, username, password) VALUES (?, ?, ?, ?, ?, ?, ?, ?)");
     117    HANDLE_SQL_EXEC_FAILURE(m_addLoginStatement->prepare() != SQLResultOk,
     118        false, "Failed to prepare addLogin statement");
     119
     120    m_updateLoginStatement = new SQLiteStatement(m_database, "UPDATE logins SET username = ?, password = ? WHERE origin_url = ? AND host = ? AND port = ? AND service_type = ? AND realm = ? AND auth_scheme = ?");
     121    HANDLE_SQL_EXEC_FAILURE(m_updateLoginStatement->prepare() != SQLResultOk,
     122        false, "Failed to prepare updateLogin statement");
     123
     124    m_hasLoginStatement = new SQLiteStatement(m_database, "SELECT COUNT(*) FROM logins WHERE origin_url = ? AND host = ? AND port = ? AND service_type = ? AND realm = ? AND auth_scheme = ?");
     125    HANDLE_SQL_EXEC_FAILURE(m_hasLoginStatement->prepare() != SQLResultOk,
     126        false, "Failed to prepare hasLogin statement");
     127
     128    m_getLoginStatement = new SQLiteStatement(m_database, "SELECT username, password FROM logins WHERE host = ? AND port = ? AND service_type = ? AND realm = ? AND auth_scheme = ?");
     129    HANDLE_SQL_EXEC_FAILURE(m_getLoginStatement->prepare() != SQLResultOk,
     130        false, "Failed to prepare getLogin statement");
     131
     132    m_getLoginByURLStatement = new SQLiteStatement(m_database, "SELECT username, password FROM logins WHERE origin_url = ?");
     133    HANDLE_SQL_EXEC_FAILURE(m_getLoginByURLStatement->prepare() != SQLResultOk,
     134        false, "Failed to prepare getLoginByURL statement");
     135
     136    m_removeLoginStatement = new SQLiteStatement(m_database, "DELETE FROM logins WHERE origin_url = ? AND host = ? AND port = ? AND service_type = ? AND realm = ? AND auth_scheme = ?");
     137    HANDLE_SQL_EXEC_FAILURE(m_removeLoginStatement->prepare() != SQLResultOk,
     138        false, "Failed to prepare removeLogin statement");
     139
     140    m_addNeverRememberStatement = new SQLiteStatement(m_database, "INSERT OR REPLACE INTO never_remember (origin_url, host, port, service_type, realm, auth_scheme) VALUES (?, ?, ?, ?, ?, ?)");
     141    HANDLE_SQL_EXEC_FAILURE(m_addNeverRememberStatement->prepare() != SQLResultOk,
     142        false, "Failed to prepare addNeverRemember statement");
     143
     144    m_hasNeverRememberStatement = new SQLiteStatement(m_database, "SELECT COUNT(*) FROM never_remember WHERE host = ? AND port = ? AND service_type = ? AND realm = ? AND auth_scheme = ?");
     145    HANDLE_SQL_EXEC_FAILURE(m_hasNeverRememberStatement->prepare() != SQLResultOk,
     146        false, "Failed to prepare hasNeverRemember statement");
     147
     148    m_getNeverRememberStatement = new SQLiteStatement(m_database, "SELECT origin_url FROM never_remember WHERE host = ? AND port = ? AND service_type = ? AND realm = ? AND auth_scheme = ?");
     149    HANDLE_SQL_EXEC_FAILURE(m_getNeverRememberStatement->prepare() != SQLResultOk,
     150        false, "Failed to prepare getNeverRemember statement");
     151
     152    m_removeNeverRememberStatement = new SQLiteStatement(m_database, "DELETE FROM never_remember WHERE host = ? AND port = ? AND service_type = ? AND realm = ? AND auth_scheme = ?");
     153    HANDLE_SQL_EXEC_FAILURE(m_removeNeverRememberStatement->prepare() != SQLResultOk,
     154        false, "Failed to prepare removeNeverRemember statement");
     155
     156    return true;
     157}
     158
    167159bool CredentialBackingStore::addLogin(const KURL& url, const ProtectionSpace& protectionSpace, const Credential& credential)
    168160{
  • trunk/Source/WebCore/platform/network/blackberry/CredentialBackingStore.h

    r109697 r116258  
    3232class CredentialBackingStore {
    3333public:
    34     static CredentialBackingStore* instance();
     34    friend CredentialBackingStore& credentialBackingStore();
     35
    3536    ~CredentialBackingStore();
    3637    bool open(const String& dbPath);
    37     void close();
    3838    bool addLogin(const KURL&, const ProtectionSpace&, const Credential&);
    3939    bool updateLogin(const KURL&, const ProtectionSpace&, const Credential&);
     
    6767};
    6868
     69CredentialBackingStore& credentialBackingStore();
     70
    6971} // namespace WebCore
    7072
  • trunk/Source/WebCore/platform/network/blackberry/CredentialStorageBlackBerry.cpp

    r101668 r116258  
    3131{
    3232#if ENABLE(BLACKBERRY_CREDENTIAL_PERSIST)
    33     return CredentialBackingStore::instance()->getLogin(protectionSpace);
     33    return credentialBackingStore().getLogin(protectionSpace);
    3434#else
    3535    UNUSED_PARAM(protectionSpace);
  • trunk/Source/WebKit/blackberry/ChangeLog

    r116241 r116258  
     12012-05-06  Jonathan Dong  <jonathan.dong@torchmobile.com.cn>
     2
     3        [BlackBerry] Autofill backing store implementation upstream
     4        https://bugs.webkit.org/show_bug.cgi?id=85575
     5
     6        Reviewed by Rob Buis.
     7
     8        Replaced calling static function CredentialBackingStore::instance()
     9        with calling the helper function credentialBackingStore().
     10
     11        * WebCoreSupport/CredentialManager.cpp:
     12        (WebCore::CredentialManager::autofillAuthenticationChallenge):
     13        (WebCore::CredentialManager::autofillPasswordForms):
     14        (WebCore::CredentialManager::saveCredentialIfConfirmed):
     15        (WebCore::CredentialManager::clearCredentials):
     16        (WebCore::CredentialManager::clearNeverRememberSites):
     17
    1182012-05-06  Jonathan Dong  <jonathan.dong@torchmobile.com.cn>
    219
  • trunk/Source/WebKit/blackberry/WebCoreSupport/CredentialManager.cpp

    r111811 r116258  
    4444void CredentialManager::autofillAuthenticationChallenge(const ProtectionSpace& protectionSpace, WebString& username, WebString& password)
    4545{
    46     if (CredentialBackingStore::instance()->hasNeverRemember(protectionSpace))
     46    if (credentialBackingStore().hasNeverRemember(protectionSpace))
    4747        return;
    4848
    49     Credential savedCredential = CredentialBackingStore::instance()->getLogin(protectionSpace);
     49    Credential savedCredential = credentialBackingStore().getLogin(protectionSpace);
    5050    username = savedCredential.user();
    5151    password = savedCredential.password();
     
    6262        if (node && node->isHTMLElement()) {
    6363            CredentialTransformData data(static_cast<HTMLFormElement*>(node));
    64             if (!data.isValid() || !CredentialBackingStore::instance()->hasLogin(data.url(), data.protectionSpace()))
     64            if (!data.isValid() || !credentialBackingStore().hasLogin(data.url(), data.protectionSpace()))
    6565                continue;
    66             Credential savedCredential = CredentialBackingStore::instance()->getLogin(data.url());
     66            Credential savedCredential = credentialBackingStore().getLogin(data.url());
    6767            data.setCredential(savedCredential);
    6868        }
     
    7474    ASSERT(pageClient);
    7575
    76     if (!data.isValid() || data.credential().isEmpty() || CredentialBackingStore::instance()->hasNeverRemember(data.protectionSpace()))
     76    if (!data.isValid() || data.credential().isEmpty() || credentialBackingStore().hasNeverRemember(data.protectionSpace()))
    7777        return;
    7878
    79     Credential savedCredential = CredentialBackingStore::instance()->getLogin(data.url());
     79    Credential savedCredential = credentialBackingStore().getLogin(data.url());
    8080    if (savedCredential == data.credential())
    8181        return;
     
    8484    if (type == PageClientBlackBerry::SaveCredentialYes) {
    8585        if (savedCredential.isEmpty())
    86             CredentialBackingStore::instance()->addLogin(data.url(), data.protectionSpace(), data.credential());
     86            credentialBackingStore().addLogin(data.url(), data.protectionSpace(), data.credential());
    8787        else
    88             CredentialBackingStore::instance()->updateLogin(data.url(), data.protectionSpace(), data.credential());
     88            credentialBackingStore().updateLogin(data.url(), data.protectionSpace(), data.credential());
    8989    } else if (type == PageClientBlackBerry::SaveCredentialNeverForThisSite) {
    90         CredentialBackingStore::instance()->addNeverRemember(data.url(), data.protectionSpace());
    91         CredentialBackingStore::instance()->removeLogin(data.url(), data.protectionSpace());
     90        credentialBackingStore().addNeverRemember(data.url(), data.protectionSpace());
     91        credentialBackingStore().removeLogin(data.url(), data.protectionSpace());
    9292    }
    9393}
     
    9595void CredentialManager::clearCredentials()
    9696{
    97     CredentialBackingStore::instance()->clearLogins();
     97    credentialBackingStore().clearLogins();
    9898}
    9999
    100100void CredentialManager::clearNeverRememberSites()
    101101{
    102     CredentialBackingStore::instance()->clearNeverRemember();
     102    credentialBackingStore().clearNeverRemember();
    103103}
    104104
Note: See TracChangeset for help on using the changeset viewer.