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

Side by Side Diff: Source/modules/webdatabase/DatabaseManager.cpp

Issue 209043008: Remove unnecesary usage of RefPtr and PassRefPtr of DatabaseContext. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 9 months 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2012 Apple Inc. All rights reserved. 2 * Copyright (C) 2012 Apple Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
84 DatabaseCreationCallbackTask(PassRefPtrWillBeRawPtr<Database> database, Pass OwnPtr<DatabaseCallback> callback) 84 DatabaseCreationCallbackTask(PassRefPtrWillBeRawPtr<Database> database, Pass OwnPtr<DatabaseCallback> callback)
85 : m_database(database) 85 : m_database(database)
86 , m_creationCallback(callback) 86 , m_creationCallback(callback)
87 { 87 {
88 } 88 }
89 89
90 RefPtrWillBePersistent<Database> m_database; 90 RefPtrWillBePersistent<Database> m_database;
91 OwnPtr<DatabaseCallback> m_creationCallback; 91 OwnPtr<DatabaseCallback> m_creationCallback;
92 }; 92 };
93 93
94 PassRefPtr<DatabaseContext> DatabaseManager::existingDatabaseContextFor(Executio nContext* context) 94 DatabaseContext* DatabaseManager::existingDatabaseContextFor(ExecutionContext* c ontext)
95 { 95 {
96 MutexLocker locker(m_contextMapLock); 96 MutexLocker locker(m_contextMapLock);
97 97
98 ASSERT(m_databaseContextRegisteredCount >= 0); 98 ASSERT(m_databaseContextRegisteredCount >= 0);
99 ASSERT(m_databaseContextInstanceCount >= 0); 99 ASSERT(m_databaseContextInstanceCount >= 0);
100 ASSERT(m_databaseContextRegisteredCount <= m_databaseContextInstanceCount); 100 ASSERT(m_databaseContextRegisteredCount <= m_databaseContextInstanceCount);
101 101
102 RefPtr<DatabaseContext> databaseContext = adoptRef(m_contextMap.get(context) ); 102 return m_contextMap.get(context);
103 if (databaseContext) {
104 // If we're instantiating a new DatabaseContext, the new instance would
105 // carry a new refCount of 1. The client expects this and will simply
106 // adoptRef the databaseContext without ref'ing it.
107 // However, instead of instantiating a new instance, we're reusing
108 // an existing one that corresponds to the specified ExecutionContext.
109 // Hence, that new refCount need to be attributed to the reused instance
110 // to ensure that the refCount is accurate when the client adopts the re f.
111 // We do this by ref'ing the reused databaseContext before returning it.
112 databaseContext->ref();
113 }
114 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
115 } 103 }
116 104
117 PassRefPtr<DatabaseContext> DatabaseManager::databaseContextFor(ExecutionContext * context) 105 DatabaseContext* DatabaseManager::databaseContextFor(ExecutionContext* context)
118 { 106 {
119 RefPtr<DatabaseContext> databaseContext = existingDatabaseContextFor(context ); 107 if (DatabaseContext* databaseContext = existingDatabaseContextFor(context))
120 if (!databaseContext) 108 return databaseContext;
121 databaseContext = DatabaseContext::create(context); 109 // We don't need to hold a reference returned by DatabaseContext::create
122 return databaseContext.release(); 110 // because a DatabaseContext refers to itself internally. See
111 // 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.
112 return DatabaseContext::create(context).get();
123 } 113 }
124 114
125 void DatabaseManager::registerDatabaseContext(DatabaseContext* databaseContext) 115 void DatabaseManager::registerDatabaseContext(DatabaseContext* databaseContext)
126 { 116 {
127 MutexLocker locker(m_contextMapLock); 117 MutexLocker locker(m_contextMapLock);
128 ExecutionContext* context = databaseContext->executionContext(); 118 ExecutionContext* context = databaseContext->executionContext();
129 m_contextMap.set(context, databaseContext); 119 m_contextMap.set(context, databaseContext);
130 #if !ASSERT_DISABLED 120 #if !ASSERT_DISABLED
131 m_databaseContextRegisteredCount++; 121 m_databaseContextRegisteredCount++;
132 #endif 122 #endif
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
179 WTF_LOG(StorageAPI, "Database %s for origin %s not allowed to be established ", name.ascii().data(), 169 WTF_LOG(StorageAPI, "Database %s for origin %s not allowed to be established ", name.ascii().data(),
180 context->securityOrigin()->toString().ascii().data()); 170 context->securityOrigin()->toString().ascii().data());
181 } 171 }
182 172
183 PassRefPtrWillBeRawPtr<DatabaseBackendBase> DatabaseManager::openDatabaseBackend (ExecutionContext* context, 173 PassRefPtrWillBeRawPtr<DatabaseBackendBase> DatabaseManager::openDatabaseBackend (ExecutionContext* context,
184 DatabaseType type, const String& name, const String& expectedVersion, const String& displayName, 174 DatabaseType type, const String& name, const String& expectedVersion, const String& displayName,
185 unsigned long estimatedSize, bool setVersionInNewDatabase, DatabaseError& er ror, String& errorMessage) 175 unsigned long estimatedSize, bool setVersionInNewDatabase, DatabaseError& er ror, String& errorMessage)
186 { 176 {
187 ASSERT(error == DatabaseError::None); 177 ASSERT(error == DatabaseError::None);
188 178
189 RefPtr<DatabaseContext> databaseContext = databaseContextFor(context);
190 RefPtr<DatabaseContext> backendContext = databaseContext->backend();
191
192 RefPtrWillBeRawPtr<DatabaseBackendBase> backend = m_server->openDatabase( 179 RefPtrWillBeRawPtr<DatabaseBackendBase> backend = m_server->openDatabase(
193 backendContext, type, name, expectedVersion, 180 databaseContextFor(context)->backend(), type, name, expectedVersion,
194 displayName, estimatedSize, setVersionInNewDatabase, error, errorMessage ); 181 displayName, estimatedSize, setVersionInNewDatabase, error, errorMessage );
195 182
196 if (!backend) { 183 if (!backend) {
197 ASSERT(error != DatabaseError::None); 184 ASSERT(error != DatabaseError::None);
198 185
199 switch (error) { 186 switch (error) {
200 case DatabaseError::GenericSecurityError: 187 case DatabaseError::GenericSecurityError:
201 logOpenDatabaseError(context, name); 188 logOpenDatabaseError(context, name);
202 return nullptr; 189 return nullptr;
203 190
(...skipping 17 matching lines...) Expand all
221 ASSERT(error == DatabaseError::None); 208 ASSERT(error == DatabaseError::None);
222 209
223 bool setVersionInNewDatabase = !creationCallback; 210 bool setVersionInNewDatabase = !creationCallback;
224 RefPtrWillBeRawPtr<DatabaseBackendBase> backend = openDatabaseBackend(contex t, DatabaseType::Async, name, 211 RefPtrWillBeRawPtr<DatabaseBackendBase> backend = openDatabaseBackend(contex t, DatabaseType::Async, name,
225 expectedVersion, displayName, estimatedSize, setVersionInNewDatabase, er ror, errorMessage); 212 expectedVersion, displayName, estimatedSize, setVersionInNewDatabase, er ror, errorMessage);
226 if (!backend) 213 if (!backend)
227 return nullptr; 214 return nullptr;
228 215
229 RefPtrWillBeRawPtr<Database> database = Database::create(context, backend); 216 RefPtrWillBeRawPtr<Database> database = Database::create(context, backend);
230 217
231 RefPtr<DatabaseContext> databaseContext = databaseContextFor(context); 218 databaseContextFor(context)->setHasOpenDatabases();
232 databaseContext->setHasOpenDatabases();
233 DatabaseClient::from(context)->didOpenDatabase(database, context->securityOr igin()->host(), name, expectedVersion); 219 DatabaseClient::from(context)->didOpenDatabase(database, context->securityOr igin()->host(), name, expectedVersion);
234 220
235 if (backend->isNew() && creationCallback.get()) { 221 if (backend->isNew() && creationCallback.get()) {
236 WTF_LOG(StorageAPI, "Scheduling DatabaseCreationCallbackTask for databas e %p\n", database.get()); 222 WTF_LOG(StorageAPI, "Scheduling DatabaseCreationCallbackTask for databas e %p\n", database.get());
237 database->executionContext()->postTask(DatabaseCreationCallbackTask::cre ate(database, creationCallback)); 223 database->executionContext()->postTask(DatabaseCreationCallbackTask::cre ate(database, creationCallback));
238 } 224 }
239 225
240 ASSERT(database); 226 ASSERT(database);
241 return database.release(); 227 return database.release();
242 } 228 }
(...skipping 28 matching lines...) Expand all
271 return m_server->fullPathForDatabase(origin, name, createIfDoesNotExist); 257 return m_server->fullPathForDatabase(origin, name, createIfDoesNotExist);
272 } 258 }
273 259
274 void DatabaseManager::closeDatabasesImmediately(const String& originIdentifier, const String& name) 260 void DatabaseManager::closeDatabasesImmediately(const String& originIdentifier, const String& name)
275 { 261 {
276 m_server->closeDatabasesImmediately(originIdentifier, name); 262 m_server->closeDatabasesImmediately(originIdentifier, name);
277 } 263 }
278 264
279 void DatabaseManager::interruptAllDatabasesForContext(DatabaseContext* databaseC ontext) 265 void DatabaseManager::interruptAllDatabasesForContext(DatabaseContext* databaseC ontext)
280 { 266 {
281 m_server->interruptAllDatabasesForContext(databaseContext->backend().get()); 267 m_server->interruptAllDatabasesForContext(databaseContext->backend());
282 } 268 }
283 269
284 void DatabaseManager::logErrorMessage(ExecutionContext* context, const String& m essage) 270 void DatabaseManager::logErrorMessage(ExecutionContext* context, const String& m essage)
285 { 271 {
286 context->addConsoleMessage(StorageMessageSource, ErrorMessageLevel, message) ; 272 context->addConsoleMessage(StorageMessageSource, ErrorMessageLevel, message) ;
287 } 273 }
288 274
289 } // namespace WebCore 275 } // namespace WebCore
OLDNEW
« no previous file with comments | « Source/modules/webdatabase/DatabaseManager.h ('k') | Source/modules/webdatabase/DatabaseServer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698