OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2013 Apple Inc. All rights reserved. | 2 * Copyright (C) 2013 Apple Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
6 * are met: | 6 * are met: |
7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
46 #include "modules/webdatabase/SQLTransactionClient.h" | 46 #include "modules/webdatabase/SQLTransactionClient.h" |
47 #include "modules/webdatabase/SQLTransactionCoordinator.h" | 47 #include "modules/webdatabase/SQLTransactionCoordinator.h" |
48 #include "modules/webdatabase/SQLTransactionErrorCallback.h" | 48 #include "modules/webdatabase/SQLTransactionErrorCallback.h" |
49 #include "modules/webdatabase/sqlite/SQLiteStatement.h" | 49 #include "modules/webdatabase/sqlite/SQLiteStatement.h" |
50 #include "modules/webdatabase/sqlite/SQLiteTransaction.h" | 50 #include "modules/webdatabase/sqlite/SQLiteTransaction.h" |
51 #include "platform/Logging.h" | 51 #include "platform/Logging.h" |
52 #include "platform/heap/SafePoint.h" | 52 #include "platform/heap/SafePoint.h" |
53 #include "platform/weborigin/DatabaseIdentifier.h" | 53 #include "platform/weborigin/DatabaseIdentifier.h" |
54 #include "public/platform/Platform.h" | 54 #include "public/platform/Platform.h" |
55 #include "public/platform/WebDatabaseObserver.h" | 55 #include "public/platform/WebDatabaseObserver.h" |
| 56 #include "wtf/Atomics.h" |
56 | 57 |
57 // Registering "opened" databases with the DatabaseTracker | 58 // Registering "opened" databases with the DatabaseTracker |
58 // ======================================================= | 59 // ======================================================= |
59 // The DatabaseTracker maintains a list of databases that have been | 60 // The DatabaseTracker maintains a list of databases that have been |
60 // "opened" so that the client can call interrupt or delete on every database | 61 // "opened" so that the client can call interrupt or delete on every database |
61 // associated with a DatabaseContext. | 62 // associated with a DatabaseContext. |
62 // | 63 // |
63 // We will only call DatabaseTracker::addOpenDatabase() to add the database | 64 // We will only call DatabaseTracker::addOpenDatabase() to add the database |
64 // to the tracker as opened when we've succeeded in opening the database, | 65 // to the tracker as opened when we've succeeded in opening the database, |
65 // and will set m_opened to true. Similarly, we only call | 66 // and will set m_opened to true. Similarly, we only call |
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
201 return guid; | 202 return guid; |
202 } | 203 } |
203 | 204 |
204 Database::Database(DatabaseContext* databaseContext, const String& name, const S
tring& expectedVersion, const String& displayName, unsigned long estimatedSize) | 205 Database::Database(DatabaseContext* databaseContext, const String& name, const S
tring& expectedVersion, const String& displayName, unsigned long estimatedSize) |
205 : m_databaseContext(databaseContext) | 206 : m_databaseContext(databaseContext) |
206 , m_name(name.isolatedCopy()) | 207 , m_name(name.isolatedCopy()) |
207 , m_expectedVersion(expectedVersion.isolatedCopy()) | 208 , m_expectedVersion(expectedVersion.isolatedCopy()) |
208 , m_displayName(displayName.isolatedCopy()) | 209 , m_displayName(displayName.isolatedCopy()) |
209 , m_estimatedSize(estimatedSize) | 210 , m_estimatedSize(estimatedSize) |
210 , m_guid(0) | 211 , m_guid(0) |
211 , m_opened(false) | 212 , m_opened(0) |
212 , m_new(false) | 213 , m_new(false) |
213 , m_transactionInProgress(false) | 214 , m_transactionInProgress(false) |
214 , m_isTransactionQueueEnabled(true) | 215 , m_isTransactionQueueEnabled(true) |
215 { | 216 { |
216 m_contextThreadSecurityOrigin = m_databaseContext->securityOrigin()->isolate
dCopy(); | 217 m_contextThreadSecurityOrigin = m_databaseContext->securityOrigin()->isolate
dCopy(); |
217 | 218 |
218 m_databaseAuthorizer = DatabaseAuthorizer::create(infoTableName); | 219 m_databaseAuthorizer = DatabaseAuthorizer::create(infoTableName); |
219 | 220 |
220 if (m_name.isNull()) | 221 if (m_name.isNull()) |
221 m_name = ""; | 222 m_name = ""; |
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
362 const char* Database::databaseInfoTableName() | 363 const char* Database::databaseInfoTableName() |
363 { | 364 { |
364 return infoTableName; | 365 return infoTableName; |
365 } | 366 } |
366 | 367 |
367 void Database::closeDatabase() | 368 void Database::closeDatabase() |
368 { | 369 { |
369 if (!m_opened) | 370 if (!m_opened) |
370 return; | 371 return; |
371 | 372 |
| 373 releaseStore(&m_opened, 0); |
372 m_sqliteDatabase.close(); | 374 m_sqliteDatabase.close(); |
373 m_opened = false; | |
374 // See comment at the top this file regarding calling removeOpenDatabase(). | 375 // See comment at the top this file regarding calling removeOpenDatabase(). |
375 DatabaseTracker::tracker().removeOpenDatabase(this); | 376 DatabaseTracker::tracker().removeOpenDatabase(this); |
376 { | 377 { |
377 SafePointAwareMutexLocker locker(guidMutex()); | 378 SafePointAwareMutexLocker locker(guidMutex()); |
378 | 379 |
379 ASSERT(guidCount().contains(m_guid)); | 380 ASSERT(guidCount().contains(m_guid)); |
380 if (guidCount().remove(m_guid)) { | 381 if (guidCount().remove(m_guid)) { |
381 guidToVersionMap().remove(m_guid); | 382 guidToVersionMap().remove(m_guid); |
382 } | 383 } |
383 } | 384 } |
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
523 errorMessage = "unable to open database, version mismatch, '" + m_expect
edVersion + "' does not match the currentVersion of '" + currentVersion + "'"; | 524 errorMessage = "unable to open database, version mismatch, '" + m_expect
edVersion + "' does not match the currentVersion of '" + currentVersion + "'"; |
524 m_sqliteDatabase.close(); | 525 m_sqliteDatabase.close(); |
525 return false; | 526 return false; |
526 } | 527 } |
527 | 528 |
528 ASSERT(m_databaseAuthorizer); | 529 ASSERT(m_databaseAuthorizer); |
529 m_sqliteDatabase.setAuthorizer(m_databaseAuthorizer.get()); | 530 m_sqliteDatabase.setAuthorizer(m_databaseAuthorizer.get()); |
530 | 531 |
531 // See comment at the top this file regarding calling addOpenDatabase(). | 532 // See comment at the top this file regarding calling addOpenDatabase(). |
532 DatabaseTracker::tracker().addOpenDatabase(this); | 533 DatabaseTracker::tracker().addOpenDatabase(this); |
533 m_opened = true; | 534 m_opened = 1; |
534 | 535 |
535 // Declare success: | 536 // Declare success: |
536 error = DatabaseError::None; // Clear the presumed error from above. | 537 error = DatabaseError::None; // Clear the presumed error from above. |
537 onExitCaller.setOpenSucceeded(); | 538 onExitCaller.setOpenSucceeded(); |
538 | 539 |
539 if (m_new && !shouldSetVersionInNewDatabase) { | 540 if (m_new && !shouldSetVersionInNewDatabase) { |
540 // The caller provided a creationCallback which will set the expected | 541 // The caller provided a creationCallback which will set the expected |
541 // version. | 542 // version. |
542 m_expectedVersion = ""; | 543 m_expectedVersion = ""; |
543 } | 544 } |
(...skipping 350 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
894 | 895 |
895 SecurityOrigin* Database::securityOrigin() const | 896 SecurityOrigin* Database::securityOrigin() const |
896 { | 897 { |
897 if (executionContext()->isContextThread()) | 898 if (executionContext()->isContextThread()) |
898 return m_contextThreadSecurityOrigin.get(); | 899 return m_contextThreadSecurityOrigin.get(); |
899 if (databaseContext()->databaseThread()->isDatabaseThread()) | 900 if (databaseContext()->databaseThread()->isDatabaseThread()) |
900 return m_databaseThreadSecurityOrigin.get(); | 901 return m_databaseThreadSecurityOrigin.get(); |
901 return 0; | 902 return 0; |
902 } | 903 } |
903 | 904 |
| 905 bool Database::opened() |
| 906 { |
| 907 return static_cast<bool>(acquireLoad(&m_opened)); |
| 908 } |
| 909 |
904 } // namespace blink | 910 } // namespace blink |
OLD | NEW |