| Index: Source/modules/indexeddb/IDBFactory.cpp
|
| diff --git a/Source/modules/indexeddb/IDBFactory.cpp b/Source/modules/indexeddb/IDBFactory.cpp
|
| index fe2f58b71f4bf10726ec4575db67a61febf26db9..a70646ef65b3015ec7e0885c6a0e69267d607b68 100644
|
| --- a/Source/modules/indexeddb/IDBFactory.cpp
|
| +++ b/Source/modules/indexeddb/IDBFactory.cpp
|
| @@ -40,15 +40,19 @@
|
| #include "modules/indexeddb/IDBHistograms.h"
|
| #include "modules/indexeddb/IDBKey.h"
|
| #include "modules/indexeddb/IDBTracing.h"
|
| +#include "modules/indexeddb/WebIDBCallbacksImpl.h"
|
| #include "modules/indexeddb/WebIDBDatabaseCallbacksImpl.h"
|
| #include "platform/weborigin/DatabaseIdentifier.h"
|
| #include "platform/weborigin/SecurityOrigin.h"
|
| #include "public/platform/Platform.h"
|
| +#include "public/platform/WebIDBFactory.h"
|
|
|
| namespace WebCore {
|
|
|
| -IDBFactory::IDBFactory(IDBFactoryBackendInterface* factory)
|
| - : m_backend(factory)
|
| +static const char permissionDeniedErrorMessage[] = "The user denied permission to access the database.";
|
| +
|
| +IDBFactory::IDBFactory(IDBFactoryBackendInterface* permissionClient)
|
| + : m_permissionClient(permissionClient)
|
| {
|
| // We pass a reference to this object before it can be adopted.
|
| relaxAdoptionRequirement();
|
| @@ -80,7 +84,14 @@ PassRefPtr<IDBRequest> IDBFactory::getDatabaseNames(ExecutionContext* context, E
|
| }
|
|
|
| RefPtr<IDBRequest> request = IDBRequest::create(context, IDBAny::create(this), 0);
|
| - m_backend->getDatabaseNames(request, createDatabaseIdentifierFromSecurityOrigin(context->securityOrigin()), context);
|
| +
|
| +
|
| + if (!m_permissionClient->allowIndexedDB(context, "Database Listing")) {
|
| + request->onError(DOMError::create(UnknownError, permissionDeniedErrorMessage));
|
| + return request;
|
| + }
|
| +
|
| + blink::Platform::current()->idbFactory()->getDatabaseNames(WebIDBCallbacksImpl::create(request).leakPtr(), createDatabaseIdentifierFromSecurityOrigin(context->securityOrigin()));
|
| return request;
|
| }
|
|
|
| @@ -112,7 +123,13 @@ PassRefPtr<IDBOpenDBRequest> IDBFactory::openInternal(ExecutionContext* context,
|
| RefPtr<IDBDatabaseCallbacks> databaseCallbacks = IDBDatabaseCallbacks::create();
|
| int64_t transactionId = IDBDatabase::nextTransactionId();
|
| RefPtr<IDBOpenDBRequest> request = IDBOpenDBRequest::create(context, databaseCallbacks, transactionId, version);
|
| - m_backend->open(name, version, transactionId, request, WebIDBDatabaseCallbacksImpl::create(databaseCallbacks.release()), createDatabaseIdentifierFromSecurityOrigin(context->securityOrigin()), context);
|
| +
|
| + if (!m_permissionClient->allowIndexedDB(context, name)) {
|
| + request->onError(DOMError::create(UnknownError, permissionDeniedErrorMessage));
|
| + return request;
|
| + }
|
| +
|
| + blink::Platform::current()->idbFactory()->open(name, version, transactionId, WebIDBCallbacksImpl::create(request).leakPtr(), WebIDBDatabaseCallbacksImpl::create(databaseCallbacks.release()).leakPtr(), createDatabaseIdentifierFromSecurityOrigin(context->securityOrigin()));
|
| return request;
|
| }
|
|
|
| @@ -138,7 +155,13 @@ PassRefPtr<IDBOpenDBRequest> IDBFactory::deleteDatabase(ExecutionContext* contex
|
| }
|
|
|
| RefPtr<IDBOpenDBRequest> request = IDBOpenDBRequest::create(context, 0, 0, IDBDatabaseMetadata::DefaultIntVersion);
|
| - m_backend->deleteDatabase(name, request, createDatabaseIdentifierFromSecurityOrigin(context->securityOrigin()), context);
|
| +
|
| + if (!m_permissionClient->allowIndexedDB(context, name)) {
|
| + request->onError(DOMError::create(UnknownError, permissionDeniedErrorMessage));
|
| + return request;
|
| + }
|
| +
|
| + blink::Platform::current()->idbFactory()->deleteDatabase(name, WebIDBCallbacksImpl::create(request).leakPtr(), createDatabaseIdentifierFromSecurityOrigin(context->securityOrigin()));
|
| return request;
|
| }
|
|
|
|
|