Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(857)

Unified Diff: third_party/WebKit/Source/modules/indexeddb/IDBObserver.cpp

Issue 2459113002: [IDBObservers] Moving options from constructor to .observe call. (Closed)
Patch Set: comments Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/modules/indexeddb/IDBObserver.cpp
diff --git a/third_party/WebKit/Source/modules/indexeddb/IDBObserver.cpp b/third_party/WebKit/Source/modules/indexeddb/IDBObserver.cpp
index f6bcc5a251cfad7dea5dc78d9596198ecdc2cf8d..787efe9b7940c5696ebaaa4f46e9c35cce22bdb1 100644
--- a/third_party/WebKit/Source/modules/indexeddb/IDBObserver.cpp
+++ b/third_party/WebKit/Source/modules/indexeddb/IDBObserver.cpp
@@ -4,6 +4,8 @@
#include "modules/indexeddb/IDBObserver.h"
+#include <bitset>
+
#include "bindings/core/v8/ExceptionState.h"
#include "bindings/modules/v8/IDBObserverCallback.h"
#include "bindings/modules/v8/ToV8ForModules.h"
@@ -18,32 +20,16 @@
namespace blink {
-IDBObserver* IDBObserver::create(IDBObserverCallback* callback,
- const IDBObserverInit& options) {
- return new IDBObserver(callback, options);
+IDBObserver* IDBObserver::create(IDBObserverCallback* callback) {
+ return new IDBObserver(callback);
}
-IDBObserver::IDBObserver(IDBObserverCallback* callback,
- const IDBObserverInit& options)
- : m_callback(callback),
- m_transaction(options.transaction()),
- m_values(options.values()),
- m_noRecords(options.noRecords()) {
- DCHECK_EQ(m_operationTypes.size(),
- static_cast<size_t>(WebIDBOperationTypeCount));
- m_operationTypes.reset();
- m_operationTypes[WebIDBAdd] =
- options.operationTypes().contains(IndexedDBNames::add);
- m_operationTypes[WebIDBPut] =
- options.operationTypes().contains(IndexedDBNames::put);
- m_operationTypes[WebIDBDelete] =
- options.operationTypes().contains(IndexedDBNames::kDelete);
- m_operationTypes[WebIDBClear] =
- options.operationTypes().contains(IndexedDBNames::clear);
-}
+IDBObserver::IDBObserver(IDBObserverCallback* callback)
+ : m_callback(callback) {}
void IDBObserver::observe(IDBDatabase* database,
IDBTransaction* transaction,
+ const IDBObserverInit& options,
ExceptionState& exceptionState) {
if (transaction->isFinished() || transaction->isFinishing()) {
exceptionState.throwDOMException(
@@ -60,9 +46,36 @@ void IDBObserver::observe(IDBDatabase* database,
IDBDatabase::databaseClosedErrorMessage);
return;
}
+ if (!options.hasOperationTypes()) {
+ exceptionState.throwTypeError(
+ "operationTypes not specified in observe options.");
+ return;
+ }
+ if (options.operationTypes().size() == 0) {
esprehn 2016/11/07 22:58:53 isEmpty()
dmurph 2016/11/08 22:40:18 Done.
+ exceptionState.throwTypeError("operationTypes must be populated.");
+ return;
+ }
+
+ std::bitset<WebIDBOperationTypeCount> types;
+ for (const auto& operationType : options.operationTypes()) {
+ if (operationType == IndexedDBNames::add) {
+ types[WebIDBAdd] = true;
+ } else if (operationType == IndexedDBNames::put) {
+ types[WebIDBPut] = true;
+ } else if (operationType == IndexedDBNames::kDelete) {
+ types[WebIDBDelete] = true;
+ } else if (operationType == IndexedDBNames::clear) {
+ types[WebIDBClear] = true;
+ } else {
+ exceptionState.throwTypeError(
+ "Unknown operation type in observe options: " + operationType);
+ return;
+ }
+ }
std::unique_ptr<WebIDBObserverImpl> observer =
- WebIDBObserverImpl::create(this);
+ WebIDBObserverImpl::create(this, options.transaction(), options.values(),
+ options.noRecords(), types);
WebIDBObserverImpl* observerPtr = observer.get();
int32_t observerId =
database->backend()->addObserver(std::move(observer), transaction->id());

Powered by Google App Engine
This is Rietveld 408576698