#include "third_party/blink/renderer/modules/webdatabase/database.h"
#include <memory>
#include <utility>
#include "base/synchronization/waitable_event.h"
#include "base/thread_annotations.h"
#include "third_party/blink/public/platform/platform.h"
#include "third_party/blink/public/platform/task_type.h"
#include "third_party/blink/renderer/core/execution_context/execution_context.h"
#include "third_party/blink/renderer/core/frame/web_feature.h"
#include "third_party/blink/renderer/core/inspector/console_message.h"
#include "third_party/blink/renderer/core/probe/core_probes.h"
#include "third_party/blink/renderer/modules/webdatabase/change_version_data.h"
#include "third_party/blink/renderer/modules/webdatabase/change_version_wrapper.h"
#include "third_party/blink/renderer/modules/webdatabase/database_authorizer.h"
#include "third_party/blink/renderer/modules/webdatabase/database_context.h"
#include "third_party/blink/renderer/modules/webdatabase/database_task.h"
#include "third_party/blink/renderer/modules/webdatabase/database_thread.h"
#include "third_party/blink/renderer/modules/webdatabase/database_tracker.h"
#include "third_party/blink/renderer/modules/webdatabase/sql_error.h"
#include "third_party/blink/renderer/modules/webdatabase/sql_transaction_backend.h"
#include "third_party/blink/renderer/modules/webdatabase/sql_transaction_client.h"
#include "third_party/blink/renderer/modules/webdatabase/sql_transaction_coordinator.h"
#include "third_party/blink/renderer/modules/webdatabase/sqlite/sqlite_statement.h"
#include "third_party/blink/renderer/modules/webdatabase/sqlite/sqlite_transaction.h"
#include "third_party/blink/renderer/modules/webdatabase/storage_log.h"
#include "third_party/blink/renderer/modules/webdatabase/web_database_host.h"
#include "third_party/blink/renderer/platform/heap/garbage_collected.h"
#include "third_party/blink/renderer/platform/scheduler/public/frame_scheduler.h"
#include "third_party/blink/renderer/platform/scheduler/public/post_cross_thread_task.h"
#include "third_party/blink/renderer/platform/scheduler/public/scheduling_policy.h"
#include "third_party/blink/renderer/platform/wtf/allocator/allocator.h"
#include "third_party/blink/renderer/platform/wtf/cross_thread_functional.h"
namespace blink {
namespace {
class DatabaseVersionCache { … };
DatabaseVersionCache& GetDatabaseVersionCache() { … }
}
static const char kVersionKey[] = …;
static const char kInfoTableName[] = …;
static String FormatErrorMessage(const char* message,
int sqlite_error_code,
const char* sqlite_error_message) { … }
static bool RetrieveTextResultFromDatabase(SQLiteDatabase& db,
const String& query,
String& result_string) { … }
static bool SetTextValueInDatabase(SQLiteDatabase& db,
const String& query,
const String& value) { … }
Database::Database(DatabaseContext* database_context,
const String& name,
const String& expected_version,
const String& display_name)
: … { … }
Database::~Database() { … }
void Database::Trace(Visitor* visitor) const { … }
bool Database::OpenAndVerifyVersion(bool set_version_in_new_database,
DatabaseError& error,
String& error_message,
V8DatabaseCallback* creation_callback) { … }
void Database::RunCreationCallback(
V8DatabaseCallback* creation_callback,
std::unique_ptr<probe::AsyncTaskContext> async_task_context) { … }
void Database::Close() { … }
SQLTransactionBackend* Database::RunTransaction(SQLTransaction* transaction,
bool read_only,
const ChangeVersionData* data) { … }
void Database::InProgressTransactionCompleted() { … }
void Database::ScheduleTransaction() { … }
void Database::ScheduleTransactionStep(SQLTransactionBackend* transaction) { … }
SQLTransactionClient* Database::TransactionClient() const { … }
SQLTransactionCoordinator* Database::TransactionCoordinator() const { … }
const char* Database::DatabaseInfoTableName() { … }
void Database::CloseDatabase() { … }
String Database::version() const { … }
class DoneCreatingDatabaseOnExitCaller { … };
bool Database::PerformOpenAndVerify(bool should_set_version_in_new_database,
DatabaseError& error,
String& error_message) { … }
String Database::StringIdentifier() const { … }
String Database::DisplayName() const { … }
String Database::FileName() const { … }
bool Database::GetVersionFromDatabase(String& version,
bool should_cache_version) { … }
bool Database::SetVersionInDatabase(const String& version,
bool should_cache_version) { … }
void Database::SetExpectedVersion(const String& version) { … }
String Database::GetCachedVersion() const { … }
void Database::SetCachedVersion(const String& actual_version) { … }
bool Database::GetActualVersionForTransaction(String& actual_version) { … }
void Database::DisableAuthorizer() { … }
void Database::EnableAuthorizer() { … }
void Database::SetAuthorizerPermissions(int permissions) { … }
bool Database::LastActionChangedDatabase() { … }
bool Database::LastActionWasInsert() { … }
void Database::ResetDeletes() { … }
bool Database::HadDeletes() { … }
void Database::ResetAuthorizer() { … }
uint64_t Database::MaximumSize() const { … }
void Database::IncrementalVacuumIfNeeded() { … }
void Database::ReportSqliteError(int sqlite_error_code) { … }
void Database::LogErrorMessage(const String& message) { … }
ExecutionContext* Database::GetExecutionContext() const { … }
void Database::CloseImmediately() { … }
void Database::changeVersion(const String& old_version,
const String& new_version,
V8SQLTransactionCallback* callback,
V8SQLTransactionErrorCallback* error_callback,
V8VoidCallback* success_callback) { … }
void Database::transaction(V8SQLTransactionCallback* callback,
V8SQLTransactionErrorCallback* error_callback,
V8VoidCallback* success_callback) { … }
void Database::readTransaction(V8SQLTransactionCallback* callback,
V8SQLTransactionErrorCallback* error_callback,
V8VoidCallback* success_callback) { … }
void Database::PerformTransaction(
SQLTransaction::OnProcessCallback* callback,
SQLTransaction::OnErrorCallback* error_callback,
SQLTransaction::OnSuccessCallback* success_callback) { … }
static void CallTransactionErrorCallback(
SQLTransaction::OnErrorCallback* callback,
std::unique_ptr<SQLErrorData> error_data) { … }
void Database::RunTransaction(
SQLTransaction::OnProcessCallback* callback,
SQLTransaction::OnErrorCallback* error_callback,
SQLTransaction::OnSuccessCallback* success_callback,
bool read_only,
const ChangeVersionData* change_version_data) { … }
void Database::ScheduleTransactionCallback(SQLTransaction* transaction) { … }
Vector<String> Database::PerformGetTableNames() { … }
Vector<String> Database::TableNames() { … }
const SecurityOrigin* Database::GetSecurityOrigin() const { … }
base::SingleThreadTaskRunner* Database::GetDatabaseTaskRunner() const { … }
}