summaryrefslogtreecommitdiff
path: root/Source/WebCore/inspector/InspectorDatabaseAgent.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebCore/inspector/InspectorDatabaseAgent.cpp')
-rw-r--r--Source/WebCore/inspector/InspectorDatabaseAgent.cpp240
1 files changed, 109 insertions, 131 deletions
diff --git a/Source/WebCore/inspector/InspectorDatabaseAgent.cpp b/Source/WebCore/inspector/InspectorDatabaseAgent.cpp
index 2861ed570..509018617 100644
--- a/Source/WebCore/inspector/InspectorDatabaseAgent.cpp
+++ b/Source/WebCore/inspector/InspectorDatabaseAgent.cpp
@@ -1,5 +1,6 @@
/*
* Copyright (C) 2010 Google Inc. All rights reserved.
+ * Copyright (C) 2015 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -10,7 +11,7 @@
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
- * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of
+ * 3. Neither the name of Apple Inc. ("Apple") nor the names of
* its contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
@@ -27,16 +28,10 @@
*/
#include "config.h"
-
-#if ENABLE(INSPECTOR) && ENABLE(SQL_DATABASE)
-
#include "InspectorDatabaseAgent.h"
#include "Database.h"
-#include "ExceptionCode.h"
-#include "ExceptionCodePlaceholder.h"
#include "InspectorDatabaseResource.h"
-#include "InspectorWebFrontendDispatchers.h"
#include "InstrumentingAgents.h"
#include "SQLError.h"
#include "SQLResultSet.h"
@@ -48,142 +43,137 @@
#include "SQLTransactionErrorCallback.h"
#include "SQLValue.h"
#include "VoidCallback.h"
+#include <inspector/InspectorFrontendRouter.h>
#include <inspector/InspectorValues.h>
#include <wtf/Vector.h>
-typedef Inspector::InspectorDatabaseBackendDispatcherHandler::ExecuteSQLCallback ExecuteSQLCallback;
-
using namespace Inspector;
namespace WebCore {
+using ExecuteSQLCallback = Inspector::DatabaseBackendDispatcherHandler::ExecuteSQLCallback;
+
namespace {
-void reportTransactionFailed(ExecuteSQLCallback* requestCallback, SQLError* error)
+void reportTransactionFailed(ExecuteSQLCallback& requestCallback, SQLError* error)
{
- RefPtr<Inspector::TypeBuilder::Database::Error> errorObject = Inspector::TypeBuilder::Database::Error::create()
+ auto errorObject = Inspector::Protocol::Database::Error::create()
.setMessage(error->message())
- .setCode(error->code());
- requestCallback->sendSuccess(nullptr, nullptr, errorObject.release());
+ .setCode(error->code())
+ .release();
+ requestCallback.sendSuccess(nullptr, nullptr, WTFMove(errorObject));
}
-class StatementCallback : public SQLStatementCallback {
+class StatementCallback final : public SQLStatementCallback {
public:
- static PassRefPtr<StatementCallback> create(PassRefPtr<ExecuteSQLCallback> requestCallback)
+ static Ref<StatementCallback> create(Ref<ExecuteSQLCallback>&& requestCallback)
{
- return adoptRef(new StatementCallback(requestCallback));
+ return adoptRef(*new StatementCallback(WTFMove(requestCallback)));
}
- virtual ~StatementCallback() { }
+private:
+ StatementCallback(Ref<ExecuteSQLCallback>&& requestCallback)
+ : m_requestCallback(WTFMove(requestCallback)) { }
- virtual bool handleEvent(SQLTransaction*, SQLResultSet* resultSet) override
+ bool handleEvent(SQLTransaction*, SQLResultSet* resultSet) final
{
- SQLResultSetRowList* rowList = resultSet->rows();
-
- RefPtr<Inspector::TypeBuilder::Array<String>> columnNames = Inspector::TypeBuilder::Array<String>::create();
- const Vector<String>& columns = rowList->columnNames();
- for (size_t i = 0; i < columns.size(); ++i)
- columnNames->addItem(columns[i]);
-
- RefPtr<Inspector::TypeBuilder::Array<InspectorValue>> values = Inspector::TypeBuilder::Array<InspectorValue>::create();
- const Vector<SQLValue>& data = rowList->values();
- for (size_t i = 0; i < data.size(); ++i) {
- const SQLValue& value = rowList->values()[i];
- switch (value.type()) {
- case SQLValue::StringValue: values->addItem(InspectorString::create(value.string())); break;
- case SQLValue::NumberValue: values->addItem(InspectorBasicValue::create(value.number())); break;
- case SQLValue::NullValue: values->addItem(InspectorValue::null()); break;
- }
+ auto& rowList = resultSet->rows();
+
+ auto columnNames = Inspector::Protocol::Array<String>::create();
+ for (auto& column : rowList.columnNames())
+ columnNames->addItem(column);
+
+ auto values = Inspector::Protocol::Array<InspectorValue>::create();
+ for (auto& value : rowList.values()) {
+ auto inspectorValue = WTF::switchOn(value,
+ [] (const std::nullptr_t&) { return InspectorValue::null(); },
+ [] (const String& string) { return InspectorValue::create(string); },
+ [] (double number) { return InspectorValue::create(number); }
+ );
+ values->addItem(WTFMove(inspectorValue));
}
- m_requestCallback->sendSuccess(columnNames.release(), values.release(), nullptr);
+ m_requestCallback->sendSuccess(WTFMove(columnNames), WTFMove(values), nullptr);
return true;
}
-private:
- StatementCallback(PassRefPtr<ExecuteSQLCallback> requestCallback)
- : m_requestCallback(requestCallback) { }
- RefPtr<ExecuteSQLCallback> m_requestCallback;
+ Ref<ExecuteSQLCallback> m_requestCallback;
};
-class StatementErrorCallback : public SQLStatementErrorCallback {
+class StatementErrorCallback final : public SQLStatementErrorCallback {
public:
- static PassRefPtr<StatementErrorCallback> create(PassRefPtr<ExecuteSQLCallback> requestCallback)
+ static Ref<StatementErrorCallback> create(Ref<ExecuteSQLCallback>&& requestCallback)
{
- return adoptRef(new StatementErrorCallback(requestCallback));
+ return adoptRef(*new StatementErrorCallback(WTFMove(requestCallback)));
}
- virtual ~StatementErrorCallback() { }
+private:
+ StatementErrorCallback(Ref<ExecuteSQLCallback>&& requestCallback)
+ : m_requestCallback(WTFMove(requestCallback)) { }
- virtual bool handleEvent(SQLTransaction*, SQLError* error) override
+ bool handleEvent(SQLTransaction*, SQLError* error) final
{
- reportTransactionFailed(m_requestCallback.get(), error);
- return true;
+ reportTransactionFailed(m_requestCallback.copyRef(), error);
+ return true;
}
-private:
- StatementErrorCallback(PassRefPtr<ExecuteSQLCallback> requestCallback)
- : m_requestCallback(requestCallback) { }
- RefPtr<ExecuteSQLCallback> m_requestCallback;
+ Ref<ExecuteSQLCallback> m_requestCallback;
};
-class TransactionCallback : public SQLTransactionCallback {
+class TransactionCallback final : public SQLTransactionCallback {
public:
- static PassRefPtr<TransactionCallback> create(const String& sqlStatement, PassRefPtr<ExecuteSQLCallback> requestCallback)
+ static Ref<TransactionCallback> create(const String& sqlStatement, Ref<ExecuteSQLCallback>&& requestCallback)
{
- return adoptRef(new TransactionCallback(sqlStatement, requestCallback));
+ return adoptRef(*new TransactionCallback(sqlStatement, WTFMove(requestCallback)));
}
- virtual ~TransactionCallback() { }
+private:
+ TransactionCallback(const String& sqlStatement, Ref<ExecuteSQLCallback>&& requestCallback)
+ : m_sqlStatement(sqlStatement)
+ , m_requestCallback(WTFMove(requestCallback)) { }
- virtual bool handleEvent(SQLTransaction* transaction) override
+ bool handleEvent(SQLTransaction* transaction) final
{
if (!m_requestCallback->isActive())
return true;
- Vector<SQLValue> sqlValues;
- RefPtr<SQLStatementCallback> callback(StatementCallback::create(m_requestCallback.get()));
- RefPtr<SQLStatementErrorCallback> errorCallback(StatementErrorCallback::create(m_requestCallback.get()));
- transaction->executeSQL(m_sqlStatement, sqlValues, callback.release(), errorCallback.release(), IGNORE_EXCEPTION);
+ Ref<SQLStatementCallback> callback(StatementCallback::create(m_requestCallback.copyRef()));
+ Ref<SQLStatementErrorCallback> errorCallback(StatementErrorCallback::create(m_requestCallback.copyRef()));
+ transaction->executeSql(m_sqlStatement, { }, WTFMove(callback), WTFMove(errorCallback));
return true;
}
-private:
- TransactionCallback(const String& sqlStatement, PassRefPtr<ExecuteSQLCallback> requestCallback)
- : m_sqlStatement(sqlStatement)
- , m_requestCallback(requestCallback) { }
+
String m_sqlStatement;
- RefPtr<ExecuteSQLCallback> m_requestCallback;
+ Ref<ExecuteSQLCallback> m_requestCallback;
};
-class TransactionErrorCallback : public SQLTransactionErrorCallback {
+class TransactionErrorCallback final : public SQLTransactionErrorCallback {
public:
- static PassRefPtr<TransactionErrorCallback> create(PassRefPtr<ExecuteSQLCallback> requestCallback)
+ static Ref<TransactionErrorCallback> create(Ref<ExecuteSQLCallback>&& requestCallback)
{
- return adoptRef(new TransactionErrorCallback(requestCallback));
+ return adoptRef(*new TransactionErrorCallback(WTFMove(requestCallback)));
}
- virtual ~TransactionErrorCallback() { }
+private:
+ TransactionErrorCallback(Ref<ExecuteSQLCallback>&& requestCallback)
+ : m_requestCallback(WTFMove(requestCallback)) { }
- virtual bool handleEvent(SQLError* error) override
+ bool handleEvent(SQLError* error) final
{
reportTransactionFailed(m_requestCallback.get(), error);
return true;
}
-private:
- TransactionErrorCallback(PassRefPtr<ExecuteSQLCallback> requestCallback)
- : m_requestCallback(requestCallback) { }
- RefPtr<ExecuteSQLCallback> m_requestCallback;
+
+ Ref<ExecuteSQLCallback> m_requestCallback;
};
-class TransactionSuccessCallback : public VoidCallback {
+class TransactionSuccessCallback final : public VoidCallback {
public:
- static PassRefPtr<TransactionSuccessCallback> create()
+ static Ref<TransactionSuccessCallback> create()
{
- return adoptRef(new TransactionSuccessCallback());
+ return adoptRef(*new TransactionSuccessCallback());
}
- virtual ~TransactionSuccessCallback() { }
-
- virtual bool handleEvent() override { return false; }
+ bool handleEvent() final { return false; }
private:
TransactionSuccessCallback() { }
@@ -191,17 +181,17 @@ private:
} // namespace
-void InspectorDatabaseAgent::didOpenDatabase(PassRefPtr<Database> database, const String& domain, const String& name, const String& version)
+void InspectorDatabaseAgent::didOpenDatabase(RefPtr<Database>&& database, const String& domain, const String& name, const String& version)
{
- if (InspectorDatabaseResource* resource = findByFileName(database->fileName())) {
- resource->setDatabase(database);
+ if (auto* resource = findByFileName(database->fileName())) {
+ resource->setDatabase(WTFMove(database));
return;
}
- RefPtr<InspectorDatabaseResource> resource = InspectorDatabaseResource::create(database, domain, name, version);
- m_resources.set(resource->id(), resource);
+ auto resource = InspectorDatabaseResource::create(WTFMove(database), domain, name, version);
+ m_resources.add(resource->id(), resource.ptr());
// Resources are only bound while visible.
- if (m_frontendDispatcher && m_enabled)
+ if (m_enabled)
resource->bind(m_frontendDispatcher.get());
}
@@ -210,115 +200,103 @@ void InspectorDatabaseAgent::clearResources()
m_resources.clear();
}
-InspectorDatabaseAgent::InspectorDatabaseAgent(InstrumentingAgents* instrumentingAgents)
- : InspectorAgentBase(ASCIILiteral("Database"), instrumentingAgents)
- , m_enabled(false)
+InspectorDatabaseAgent::InspectorDatabaseAgent(WebAgentContext& context)
+ : InspectorAgentBase(ASCIILiteral("Database"), context)
+ , m_frontendDispatcher(std::make_unique<Inspector::DatabaseFrontendDispatcher>(context.frontendRouter))
+ , m_backendDispatcher(Inspector::DatabaseBackendDispatcher::create(context.backendDispatcher, this))
{
- m_instrumentingAgents->setInspectorDatabaseAgent(this);
+ m_instrumentingAgents.setInspectorDatabaseAgent(this);
}
InspectorDatabaseAgent::~InspectorDatabaseAgent()
{
- m_instrumentingAgents->setInspectorDatabaseAgent(nullptr);
+ m_instrumentingAgents.setInspectorDatabaseAgent(nullptr);
}
-void InspectorDatabaseAgent::didCreateFrontendAndBackend(Inspector::InspectorFrontendChannel* frontendChannel, InspectorBackendDispatcher* backendDispatcher)
+void InspectorDatabaseAgent::didCreateFrontendAndBackend(Inspector::FrontendRouter*, Inspector::BackendDispatcher*)
{
- m_frontendDispatcher = std::make_unique<InspectorDatabaseFrontendDispatcher>(frontendChannel);
- m_backendDispatcher = InspectorDatabaseBackendDispatcher::create(backendDispatcher, this);
}
-void InspectorDatabaseAgent::willDestroyFrontendAndBackend(InspectorDisconnectReason)
+void InspectorDatabaseAgent::willDestroyFrontendAndBackend(Inspector::DisconnectReason)
{
- m_frontendDispatcher = nullptr;
- m_backendDispatcher.clear();
-
- disable(nullptr);
+ ErrorString unused;
+ disable(unused);
}
-void InspectorDatabaseAgent::enable(ErrorString*)
+void InspectorDatabaseAgent::enable(ErrorString&)
{
if (m_enabled)
return;
m_enabled = true;
- DatabaseResourcesMap::iterator databasesEnd = m_resources.end();
- for (DatabaseResourcesMap::iterator it = m_resources.begin(); it != databasesEnd; ++it)
- it->value->bind(m_frontendDispatcher.get());
+ for (auto& resource : m_resources.values())
+ resource->bind(m_frontendDispatcher.get());
}
-void InspectorDatabaseAgent::disable(ErrorString*)
+void InspectorDatabaseAgent::disable(ErrorString&)
{
if (!m_enabled)
return;
m_enabled = false;
}
-void InspectorDatabaseAgent::getDatabaseTableNames(ErrorString* error, const String& databaseId, RefPtr<Inspector::TypeBuilder::Array<String>>& names)
+void InspectorDatabaseAgent::getDatabaseTableNames(ErrorString& error, const String& databaseId, RefPtr<Inspector::Protocol::Array<String>>& names)
{
if (!m_enabled) {
- *error = "Database agent is not enabled";
+ error = ASCIILiteral("Database agent is not enabled");
return;
}
- names = Inspector::TypeBuilder::Array<String>::create();
+ names = Inspector::Protocol::Array<String>::create();
- Database* database = databaseForId(databaseId);
- if (database) {
- Vector<String> tableNames = database->tableNames();
- unsigned length = tableNames.size();
- for (unsigned i = 0; i < length; ++i)
- names->addItem(tableNames[i]);
+ if (auto* database = databaseForId(databaseId)) {
+ for (auto& tableName : database->tableNames())
+ names->addItem(tableName);
}
}
-void InspectorDatabaseAgent::executeSQL(ErrorString*, const String& databaseId, const String& query, PassRefPtr<ExecuteSQLCallback> prpRequestCallback)
+void InspectorDatabaseAgent::executeSQL(ErrorString&, const String& databaseId, const String& query, Ref<ExecuteSQLCallback>&& requestCallback)
{
- RefPtr<ExecuteSQLCallback> requestCallback = prpRequestCallback;
-
if (!m_enabled) {
requestCallback->sendFailure("Database agent is not enabled");
return;
}
- Database* database = databaseForId(databaseId);
+ auto* database = databaseForId(databaseId);
if (!database) {
requestCallback->sendFailure("Database not found");
return;
}
- RefPtr<SQLTransactionCallback> callback(TransactionCallback::create(query, requestCallback.get()));
- RefPtr<SQLTransactionErrorCallback> errorCallback(TransactionErrorCallback::create(requestCallback.get()));
- RefPtr<VoidCallback> successCallback(TransactionSuccessCallback::create());
- database->transaction(callback.release(), errorCallback.release(), successCallback.release());
+ database->transaction(TransactionCallback::create(query, requestCallback.copyRef()),
+ TransactionErrorCallback::create(requestCallback.copyRef()),
+ TransactionSuccessCallback::create());
}
String InspectorDatabaseAgent::databaseId(Database* database)
{
- for (DatabaseResourcesMap::iterator it = m_resources.begin(); it != m_resources.end(); ++it) {
- if (it->value->database() == database)
- return it->key;
+ for (auto& resource : m_resources) {
+ if (resource.value->database() == database)
+ return resource.key;
}
return String();
}
InspectorDatabaseResource* InspectorDatabaseAgent::findByFileName(const String& fileName)
{
- for (DatabaseResourcesMap::iterator it = m_resources.begin(); it != m_resources.end(); ++it) {
- if (it->value->database()->fileName() == fileName)
- return it->value.get();
+ for (auto& resource : m_resources.values()) {
+ if (resource->database()->fileName() == fileName)
+ return resource.get();
}
return nullptr;
}
Database* InspectorDatabaseAgent::databaseForId(const String& databaseId)
{
- DatabaseResourcesMap::iterator it = m_resources.find(databaseId);
- if (it == m_resources.end())
+ auto* resource = m_resources.get(databaseId);
+ if (!resource)
return nullptr;
- return it->value->database();
+ return resource->database();
}
} // namespace WebCore
-
-#endif // ENABLE(INSPECTOR) && ENABLE(SQL_DATABASE)