Skip to content

Commit

Permalink
Fix build with ENABLE(DATABASE_PROCESS) and !ENABLE(INDEXED_DATABASE)
Browse files Browse the repository at this point in the history
https://bugs.webkit.org/show_bug.cgi?id=146550

Patch by Emanuele Aina <emanuele.aina@collabora.com> on 2015-09-02
Reviewed by Brady Eidson.

Given that INDEXED_DATABASE at the moment is the only user of
DATABASE_PROCESS, their guards got inevitably mixed up with various
levels of consistency. Since the --no-indexed-database flag from
build-webkit leaves DATABASE_PROCESS enabled, this resulted in build
failures.

* DatabaseProcess/DatabaseProcess.cpp:
* DatabaseProcess/DatabaseToWebProcessConnection.cpp:
* Shared/Databases/DatabaseProcessCreationParameters.cpp:
* Shared/Databases/DatabaseProcessCreationParameters.h:
* UIProcess/WebProcessPool.cpp:
* WebProcess/Databases/WebToDatabaseProcessConnection.cpp:
* WebProcess/Databases/WebToDatabaseProcessConnection.h:
Add missing ENABLE(INDEXED_DATABASE) guards and moved the
misplaced ones.

* DatabaseProcess/DatabaseProcess.h:
Ditto, and also add a forward declaration for SecurityOriginData since
with INDEXED_DATABASE off SecurityOriginData.h is no longer included
by way of UniqueIDBDatabaseIdentifier.h.

Canonical link: https://commits.webkit.org/166822@main
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@189244 268f45cc-cd09-0410-ab3c-d52691b4dbfc
  • Loading branch information
em- authored and ossy-szeged committed Sep 2, 2015
1 parent 9fb4f08 commit bad6a88
Show file tree
Hide file tree
Showing 9 changed files with 86 additions and 10 deletions.
28 changes: 28 additions & 0 deletions Source/WebKit2/ChangeLog
@@ -1,3 +1,31 @@
2015-09-02 Emanuele Aina <emanuele.aina@collabora.com>

Fix build with ENABLE(DATABASE_PROCESS) and !ENABLE(INDEXED_DATABASE)
https://bugs.webkit.org/show_bug.cgi?id=146550

Reviewed by Brady Eidson.

Given that INDEXED_DATABASE at the moment is the only user of
DATABASE_PROCESS, their guards got inevitably mixed up with various
levels of consistency. Since the --no-indexed-database flag from
build-webkit leaves DATABASE_PROCESS enabled, this resulted in build
failures.

* DatabaseProcess/DatabaseProcess.cpp:
* DatabaseProcess/DatabaseToWebProcessConnection.cpp:
* Shared/Databases/DatabaseProcessCreationParameters.cpp:
* Shared/Databases/DatabaseProcessCreationParameters.h:
* UIProcess/WebProcessPool.cpp:
* WebProcess/Databases/WebToDatabaseProcessConnection.cpp:
* WebProcess/Databases/WebToDatabaseProcessConnection.h:
Add missing ENABLE(INDEXED_DATABASE) guards and moved the
misplaced ones.

* DatabaseProcess/DatabaseProcess.h:
Ditto, and also add a forward declaration for SecurityOriginData since
with INDEXED_DATABASE off SecurityOriginData.h is no longer included
by way of UniqueIDBDatabaseIdentifier.h.

2015-09-01 Brian Burg <bburg@apple.com>

Web Inspector: opt the Inspector process out of page visibility-based process suppression when running tests
Expand Down
18 changes: 18 additions & 0 deletions Source/WebKit2/DatabaseProcess/DatabaseProcess.cpp
Expand Up @@ -95,6 +95,7 @@ void DatabaseProcess::didReceiveInvalidMessage(IPC::Connection&, IPC::StringRefe
RunLoop::current().stop();
}

#if ENABLE(INDEXED_DATABASE)
RefPtr<UniqueIDBDatabase> DatabaseProcess::getOrCreateUniqueIDBDatabase(const UniqueIDBDatabaseIdentifier& identifier)
{
auto addResult = m_idbDatabases.add(identifier, nullptr);
Expand All @@ -114,9 +115,11 @@ void DatabaseProcess::removeUniqueIDBDatabase(const UniqueIDBDatabase& database)

m_idbDatabases.remove(identifier);
}
#endif

void DatabaseProcess::initializeDatabaseProcess(const DatabaseProcessCreationParameters& parameters)
{
#if ENABLE(INDEXED_DATABASE)
// *********
// IMPORTANT: Do not change the directory structure for indexed databases on disk without first consulting a reviewer from Apple (<rdar://problem/17454712>)
// *********
Expand All @@ -125,12 +128,15 @@ void DatabaseProcess::initializeDatabaseProcess(const DatabaseProcessCreationPar
SandboxExtension::consumePermanently(parameters.indexedDatabaseDirectoryExtensionHandle);

ensureIndexedDatabaseRelativePathExists(StringImpl::empty());
#endif
}

#if ENABLE(INDEXED_DATABASE)
void DatabaseProcess::ensureIndexedDatabaseRelativePathExists(const String& relativePath)
{
postDatabaseTask(createAsyncTask(*this, &DatabaseProcess::ensurePathExists, absoluteIndexedDatabasePathFromDatabaseRelativePath(relativePath)));
}
#endif

void DatabaseProcess::ensurePathExists(const String& path)
{
Expand All @@ -140,12 +146,14 @@ void DatabaseProcess::ensurePathExists(const String& path)
LOG_ERROR("Failed to make all directories for path '%s'", path.utf8().data());
}

#if ENABLE(INDEXED_DATABASE)
String DatabaseProcess::absoluteIndexedDatabasePathFromDatabaseRelativePath(const String& relativePath)
{
// FIXME: pathByAppendingComponent() was originally designed to append individual atomic components.
// We don't have a function designed to append a multi-component subpath, but we should.
return pathByAppendingComponent(m_indexedDatabaseDirectory, relativePath);
}
#endif

void DatabaseProcess::postDatabaseTask(std::unique_ptr<AsyncTask> task)
{
Expand Down Expand Up @@ -224,6 +232,7 @@ void DatabaseProcess::fetchWebsiteData(SessionID, uint64_t websiteDataTypes, uin
parentProcessConnection()->send(Messages::DatabaseProcessProxy::DidFetchWebsiteData(callbackID, websiteData), 0);
}));

#if ENABLE(INDEXED_DATABASE)
if (websiteDataTypes & WebsiteDataTypeIndexedDBDatabases) {
// FIXME: Pick the right database store based on the session ID.
postDatabaseTask(std::make_unique<AsyncTask>([callbackAggregator, websiteDataTypes, this] {
Expand All @@ -236,6 +245,7 @@ void DatabaseProcess::fetchWebsiteData(SessionID, uint64_t websiteDataTypes, uin
});
}));
}
#endif
}

void DatabaseProcess::deleteWebsiteData(WebCore::SessionID, uint64_t websiteDataTypes, std::chrono::system_clock::time_point modifiedSince, uint64_t callbackID)
Expand All @@ -260,13 +270,15 @@ void DatabaseProcess::deleteWebsiteData(WebCore::SessionID, uint64_t websiteData
parentProcessConnection()->send(Messages::DatabaseProcessProxy::DidDeleteWebsiteData(callbackID), 0);
}));

#if ENABLE(INDEXED_DATABASE)
if (websiteDataTypes & WebsiteDataTypeIndexedDBDatabases) {
postDatabaseTask(std::make_unique<AsyncTask>([this, callbackAggregator, modifiedSince] {

deleteIndexedDatabaseEntriesModifiedSince(modifiedSince);
RunLoop::main().dispatch([callbackAggregator] { });
}));
}
#endif
}

void DatabaseProcess::deleteWebsiteDataForOrigins(WebCore::SessionID, uint64_t websiteDataTypes, const Vector<SecurityOriginData>& securityOriginDatas, uint64_t callbackID)
Expand All @@ -291,6 +303,7 @@ void DatabaseProcess::deleteWebsiteDataForOrigins(WebCore::SessionID, uint64_t w
parentProcessConnection()->send(Messages::DatabaseProcessProxy::DidDeleteWebsiteDataForOrigins(callbackID), 0);
}));

#if ENABLE(INDEXED_DATABASE)
if (websiteDataTypes & WebsiteDataTypeIndexedDBDatabases) {
Vector<RefPtr<WebCore::SecurityOrigin>> securityOrigins;
for (const auto& securityOriginData : securityOriginDatas)
Expand All @@ -302,8 +315,10 @@ void DatabaseProcess::deleteWebsiteDataForOrigins(WebCore::SessionID, uint64_t w
RunLoop::main().dispatch([callbackAggregator] { });
}));
}
#endif
}

#if ENABLE(INDEXED_DATABASE)
Vector<RefPtr<WebCore::SecurityOrigin>> DatabaseProcess::indexedDatabaseOrigins()
{
if (m_indexedDatabaseDirectory.isEmpty())
Expand All @@ -319,7 +334,9 @@ Vector<RefPtr<WebCore::SecurityOrigin>> DatabaseProcess::indexedDatabaseOrigins(

return securityOrigins;
}
#endif

#if ENABLE(INDEXED_DATABASE)
static void removeAllDatabasesForOriginPath(const String& originPath, std::chrono::system_clock::time_point modifiedSince)
{
// FIXME: We should also close/invalidate any live handles to the database files we are about to delete.
Expand Down Expand Up @@ -373,6 +390,7 @@ void DatabaseProcess::deleteIndexedDatabaseEntriesModifiedSince(std::chrono::sys
for (auto& originPath : originPaths)
removeAllDatabasesForOriginPath(originPath, modifiedSince);
}
#endif

#if !PLATFORM(COCOA)
void DatabaseProcess::initializeProcess(const ChildProcessInitializationParameters&)
Expand Down
7 changes: 7 additions & 0 deletions Source/WebKit2/DatabaseProcess/DatabaseProcess.h
Expand Up @@ -43,6 +43,7 @@ class DatabaseToWebProcessConnection;
class UniqueIDBDatabase;

struct DatabaseProcessCreationParameters;
struct SecurityOriginData;

class DatabaseProcess : public ChildProcess {
WTF_MAKE_NONCOPYABLE(DatabaseProcess);
Expand All @@ -51,13 +52,15 @@ class DatabaseProcess : public ChildProcess {
static DatabaseProcess& singleton();
~DatabaseProcess();

#if ENABLE(INDEXED_DATABASE)
const String& indexedDatabaseDirectory() const { return m_indexedDatabaseDirectory; }

RefPtr<UniqueIDBDatabase> getOrCreateUniqueIDBDatabase(const UniqueIDBDatabaseIdentifier&);
void removeUniqueIDBDatabase(const UniqueIDBDatabase&);

void ensureIndexedDatabaseRelativePathExists(const String&);
String absoluteIndexedDatabasePathFromDatabaseRelativePath(const String&);
#endif

WorkQueue& queue() { return m_queue.get(); }

Expand Down Expand Up @@ -89,9 +92,11 @@ class DatabaseProcess : public ChildProcess {
void deleteWebsiteData(WebCore::SessionID, uint64_t websiteDataTypes, std::chrono::system_clock::time_point modifiedSince, uint64_t callbackID);
void deleteWebsiteDataForOrigins(WebCore::SessionID, uint64_t websiteDataTypes, const Vector<SecurityOriginData>& origins, uint64_t callbackID);

#if ENABLE(INDEXED_DATABASE)
Vector<RefPtr<WebCore::SecurityOrigin>> indexedDatabaseOrigins();
void deleteIndexedDatabaseEntriesForOrigins(const Vector<RefPtr<WebCore::SecurityOrigin>>&);
void deleteIndexedDatabaseEntriesModifiedSince(std::chrono::system_clock::time_point modifiedSince);
#endif

// For execution on work queue thread only
void performNextDatabaseTask();
Expand All @@ -101,9 +106,11 @@ class DatabaseProcess : public ChildProcess {

Ref<WorkQueue> m_queue;

#if ENABLE(INDEXED_DATABASE)
String m_indexedDatabaseDirectory;

HashMap<UniqueIDBDatabaseIdentifier, RefPtr<UniqueIDBDatabase>> m_idbDatabases;
#endif

Deque<std::unique_ptr<AsyncTask>> m_databaseTasks;
Lock m_databaseTaskMutex;
Expand Down
Expand Up @@ -59,40 +59,47 @@ void DatabaseToWebProcessConnection::didReceiveMessage(IPC::Connection& connecti
return;
}

#if ENABLE(INDEXED_DATABASE)
if (decoder.messageReceiverName() == Messages::DatabaseProcessIDBConnection::messageReceiverName()) {
IDBConnectionMap::iterator backendIterator = m_idbConnections.find(decoder.destinationID());
if (backendIterator != m_idbConnections.end())
backendIterator->value->didReceiveDatabaseProcessIDBConnectionMessage(connection, decoder);
return;
}
#endif

ASSERT_NOT_REACHED();
}

void DatabaseToWebProcessConnection::didReceiveSyncMessage(IPC::Connection& connection, IPC::MessageDecoder& decoder, std::unique_ptr<IPC::MessageEncoder>& reply)
{
#if ENABLE(INDEXED_DATABASE)
if (decoder.messageReceiverName() == Messages::DatabaseProcessIDBConnection::messageReceiverName()) {
IDBConnectionMap::iterator backendIterator = m_idbConnections.find(decoder.destinationID());
if (backendIterator != m_idbConnections.end())
backendIterator->value->didReceiveSyncDatabaseProcessIDBConnectionMessage(connection, decoder, reply);
return;
}
#endif

ASSERT_NOT_REACHED();
}

void DatabaseToWebProcessConnection::didClose(IPC::Connection&)
{
#if ENABLE(INDEXED_DATABASE)
// The WebProcess has disconnected, close all of the connections associated with it
while (!m_idbConnections.isEmpty())
removeDatabaseProcessIDBConnection(m_idbConnections.begin()->key);
#endif
}

void DatabaseToWebProcessConnection::didReceiveInvalidMessage(IPC::Connection&, IPC::StringReference messageReceiverName, IPC::StringReference messageName)
{

}

#if ENABLE(INDEXED_DATABASE)
void DatabaseToWebProcessConnection::establishIDBConnection(uint64_t serverConnectionIdentifier)
{
RefPtr<DatabaseProcessIDBConnection> idbConnection = DatabaseProcessIDBConnection::create(*this, serverConnectionIdentifier);
Expand All @@ -106,6 +113,7 @@ void DatabaseToWebProcessConnection::removeDatabaseProcessIDBConnection(uint64_t
RefPtr<DatabaseProcessIDBConnection> idbConnection = m_idbConnections.take(serverConnectionIdentifier);
idbConnection->disconnectedFromWebProcess();
}
#endif


} // namespace WebKit
Expand Down
Expand Up @@ -26,7 +26,7 @@
#include "config.h"
#include "DatabaseProcessCreationParameters.h"

#if ENABLE(INDEXED_DATABASE) && ENABLE(DATABASE_PROCESS)
#if ENABLE(DATABASE_PROCESS)

#include "ArgumentCoders.h"

Expand All @@ -38,20 +38,24 @@ DatabaseProcessCreationParameters::DatabaseProcessCreationParameters()

void DatabaseProcessCreationParameters::encode(IPC::ArgumentEncoder& encoder) const
{
#if ENABLE(INDEXED_DATABASE)
encoder << indexedDatabaseDirectory;
encoder << indexedDatabaseDirectoryExtensionHandle;
#endif
}

bool DatabaseProcessCreationParameters::decode(IPC::ArgumentDecoder& decoder, DatabaseProcessCreationParameters& result)
{
#if ENABLE(INDEXED_DATABASE)
if (!decoder.decode(result.indexedDatabaseDirectory))
return false;
if (!decoder.decode(result.indexedDatabaseDirectoryExtensionHandle))
return false;
#endif

return true;
}

} // namespace WebKit

#endif // ENABLE(INDEXED_DATABASE) && ENABLE(DATABASE_PROCESS)
#endif // ENABLE(DATABASE_PROCESS)
Expand Up @@ -30,7 +30,7 @@
#include "SandboxExtension.h"
#include <wtf/text/WTFString.h>

#if ENABLE(INDEXED_DATABASE) && ENABLE(DATABASE_PROCESS)
#if ENABLE(DATABASE_PROCESS)

namespace IPC {
class ArgumentDecoder;
Expand All @@ -45,11 +45,13 @@ struct DatabaseProcessCreationParameters {
void encode(IPC::ArgumentEncoder&) const;
static bool decode(IPC::ArgumentDecoder&, DatabaseProcessCreationParameters&);

#if ENABLE(INDEXED_DATABASE)
String indexedDatabaseDirectory;
SandboxExtension::Handle indexedDatabaseDirectoryExtensionHandle;
#endif
};

} // namespace WebKit

#endif // ENABLE(INDEXED_DATABASE) && ENABLE(DATABASE_PROCESS)
#endif // ENABLE(DATABASE_PROCESS)
#endif // DatabaseProcessCreationParameters_h
5 changes: 3 additions & 2 deletions Source/WebKit2/UIProcess/WebProcessPool.cpp
Expand Up @@ -469,15 +469,16 @@ void WebProcessPool::ensureDatabaseProcess()

m_databaseProcess = DatabaseProcessProxy::create(this);

ASSERT(!m_configuration->indexedDBDatabaseDirectory().isEmpty());

// *********
// IMPORTANT: Do not change the directory structure for indexed databases on disk without first consulting a reviewer from Apple (<rdar://problem/17454712>)
// *********
DatabaseProcessCreationParameters parameters;
#if ENABLE(INDEXED_DATABASE)
ASSERT(!m_configuration->indexedDBDatabaseDirectory().isEmpty());
parameters.indexedDatabaseDirectory = m_configuration->indexedDBDatabaseDirectory();

SandboxExtension::createHandleForReadWriteDirectory(parameters.indexedDatabaseDirectory, parameters.indexedDatabaseDirectoryExtensionHandle);
#endif

m_databaseProcess->send(Messages::DatabaseProcess::InitializeDatabaseProcess(parameters), 0);
}
Expand Down
Expand Up @@ -33,7 +33,7 @@
#include "WebProcess.h"
#include <wtf/RunLoop.h>

#if ENABLE(INDEXED_DATABASE)
#if ENABLE(DATABASE_PROCESS)

using namespace WebCore;

Expand All @@ -51,12 +51,14 @@ WebToDatabaseProcessConnection::~WebToDatabaseProcessConnection()

void WebToDatabaseProcessConnection::didReceiveMessage(IPC::Connection& connection, IPC::MessageDecoder& decoder)
{
#if ENABLE(INDEXED_DATABASE)
if (decoder.messageReceiverName() == Messages::WebIDBServerConnection::messageReceiverName()) {
HashMap<uint64_t, WebIDBServerConnection*>::iterator connectionIterator = m_webIDBServerConnections.find(decoder.destinationID());
if (connectionIterator != m_webIDBServerConnections.end())
connectionIterator->value->didReceiveWebIDBServerConnectionMessage(connection, decoder);
return;
}
#endif

ASSERT_NOT_REACHED();
}
Expand All @@ -70,6 +72,7 @@ void WebToDatabaseProcessConnection::didReceiveInvalidMessage(IPC::Connection&,
{
}

#if ENABLE(INDEXED_DATABASE)
void WebToDatabaseProcessConnection::registerWebIDBServerConnection(WebIDBServerConnection& connection)
{
ASSERT(!m_webIDBServerConnections.contains(connection.messageSenderDestinationID()));
Expand All @@ -85,7 +88,8 @@ void WebToDatabaseProcessConnection::removeWebIDBServerConnection(WebIDBServerCo

m_webIDBServerConnections.remove(connection.messageSenderDestinationID());
}
#endif

} // namespace WebKit

#endif // ENABLE(INDEXED_DATABASE)
#endif // ENABLE(DATABASE_PROCESS)

0 comments on commit bad6a88

Please sign in to comment.