Chromium Code Reviews| Index: Source/modules/webdatabase/DatabaseManager.cpp |
| diff --git a/Source/modules/webdatabase/DatabaseManager.cpp b/Source/modules/webdatabase/DatabaseManager.cpp |
| index 41f413d1a85237f87645844d7d6f3caf4e402860..181eaf4df6dfed68d47ca2efa5bdb0fa80cd533c 100644 |
| --- a/Source/modules/webdatabase/DatabaseManager.cpp |
| +++ b/Source/modules/webdatabase/DatabaseManager.cpp |
| @@ -91,7 +91,7 @@ private: |
| OwnPtr<DatabaseCallback> m_creationCallback; |
| }; |
| -PassRefPtr<DatabaseContext> DatabaseManager::existingDatabaseContextFor(ExecutionContext* context) |
| +DatabaseContext* DatabaseManager::existingDatabaseContextFor(ExecutionContext* context) |
| { |
| MutexLocker locker(m_contextMapLock); |
| @@ -99,27 +99,17 @@ PassRefPtr<DatabaseContext> DatabaseManager::existingDatabaseContextFor(Executio |
| ASSERT(m_databaseContextInstanceCount >= 0); |
| ASSERT(m_databaseContextRegisteredCount <= m_databaseContextInstanceCount); |
| - RefPtr<DatabaseContext> databaseContext = adoptRef(m_contextMap.get(context)); |
| - if (databaseContext) { |
| - // If we're instantiating a new DatabaseContext, the new instance would |
| - // carry a new refCount of 1. The client expects this and will simply |
| - // adoptRef the databaseContext without ref'ing it. |
| - // However, instead of instantiating a new instance, we're reusing |
| - // an existing one that corresponds to the specified ExecutionContext. |
| - // Hence, that new refCount need to be attributed to the reused instance |
| - // to ensure that the refCount is accurate when the client adopts the ref. |
| - // We do this by ref'ing the reused databaseContext before returning it. |
| - databaseContext->ref(); |
| - } |
| - return databaseContext.release(); |
|
tkent
2014/03/26 04:41:18
This code block is exactly equivalent to "return P
haraken
2014/03/26 04:57:24
I don't fully understand this.
RefPtr<DatabaseC
tkent
2014/03/26 05:15:46
No. the former is equivalent to just adoptRef(...
haraken
2014/03/26 05:37:50
sorry, I don't yet get it.
PassRefPtr<Foo> func1(
tkent
2014/03/26 05:50:20
Incorrect.
new Foo() creates a Foo with m_refCount
|
| + return m_contextMap.get(context); |
| } |
| -PassRefPtr<DatabaseContext> DatabaseManager::databaseContextFor(ExecutionContext* context) |
| +DatabaseContext* DatabaseManager::databaseContextFor(ExecutionContext* context) |
| { |
| - RefPtr<DatabaseContext> databaseContext = existingDatabaseContextFor(context); |
| - if (!databaseContext) |
| - databaseContext = DatabaseContext::create(context); |
| - return databaseContext.release(); |
| + if (DatabaseContext* databaseContext = existingDatabaseContextFor(context)) |
| + return databaseContext; |
| + // We don't need to hold a reference returned by DatabaseContext::create |
| + // because a DatabaseContext refers to itself internally. See |
| + // DataabseContext::create. |
|
haraken
2014/03/26 04:57:24
Typo: DatabaseContext::create
tkent
2014/03/26 05:15:46
Will fix in the next CL.
|
| + return DatabaseContext::create(context).get(); |
| } |
| void DatabaseManager::registerDatabaseContext(DatabaseContext* databaseContext) |
| @@ -186,11 +176,8 @@ PassRefPtrWillBeRawPtr<DatabaseBackendBase> DatabaseManager::openDatabaseBackend |
| { |
| ASSERT(error == DatabaseError::None); |
| - RefPtr<DatabaseContext> databaseContext = databaseContextFor(context); |
| - RefPtr<DatabaseContext> backendContext = databaseContext->backend(); |
| - |
| RefPtrWillBeRawPtr<DatabaseBackendBase> backend = m_server->openDatabase( |
| - backendContext, type, name, expectedVersion, |
| + databaseContextFor(context)->backend(), type, name, expectedVersion, |
| displayName, estimatedSize, setVersionInNewDatabase, error, errorMessage); |
| if (!backend) { |
| @@ -228,8 +215,7 @@ PassRefPtrWillBeRawPtr<Database> DatabaseManager::openDatabase(ExecutionContext* |
| RefPtrWillBeRawPtr<Database> database = Database::create(context, backend); |
| - RefPtr<DatabaseContext> databaseContext = databaseContextFor(context); |
| - databaseContext->setHasOpenDatabases(); |
| + databaseContextFor(context)->setHasOpenDatabases(); |
| DatabaseClient::from(context)->didOpenDatabase(database, context->securityOrigin()->host(), name, expectedVersion); |
| if (backend->isNew() && creationCallback.get()) { |
| @@ -278,7 +264,7 @@ void DatabaseManager::closeDatabasesImmediately(const String& originIdentifier, |
| void DatabaseManager::interruptAllDatabasesForContext(DatabaseContext* databaseContext) |
| { |
| - m_server->interruptAllDatabasesForContext(databaseContext->backend().get()); |
| + m_server->interruptAllDatabasesForContext(databaseContext->backend()); |
| } |
| void DatabaseManager::logErrorMessage(ExecutionContext* context, const String& message) |