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

Side by Side Diff: third_party/WebKit/Source/modules/webdatabase/SQLTransactionBackend.cpp

Issue 2050123002: Remove OwnPtr from Blink. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: First attempt to land. Created 4 years, 6 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
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2007, 2008, 2013 Apple Inc. All rights reserved. 2 * Copyright (C) 2007, 2008, 2013 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 * 7 *
8 * 1. Redistributions of source code must retain the above copyright 8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright 10 * 2. Redistributions in binary form must reproduce the above copyright
(...skipping 23 matching lines...) Expand all
34 #include "modules/webdatabase/DatabaseThread.h" 34 #include "modules/webdatabase/DatabaseThread.h"
35 #include "modules/webdatabase/DatabaseTracker.h" 35 #include "modules/webdatabase/DatabaseTracker.h"
36 #include "modules/webdatabase/SQLError.h" 36 #include "modules/webdatabase/SQLError.h"
37 #include "modules/webdatabase/SQLStatementBackend.h" 37 #include "modules/webdatabase/SQLStatementBackend.h"
38 #include "modules/webdatabase/SQLTransaction.h" 38 #include "modules/webdatabase/SQLTransaction.h"
39 #include "modules/webdatabase/SQLTransactionClient.h" 39 #include "modules/webdatabase/SQLTransactionClient.h"
40 #include "modules/webdatabase/SQLTransactionCoordinator.h" 40 #include "modules/webdatabase/SQLTransactionCoordinator.h"
41 #include "modules/webdatabase/sqlite/SQLValue.h" 41 #include "modules/webdatabase/sqlite/SQLValue.h"
42 #include "modules/webdatabase/sqlite/SQLiteTransaction.h" 42 #include "modules/webdatabase/sqlite/SQLiteTransaction.h"
43 #include "platform/Logging.h" 43 #include "platform/Logging.h"
44 #include "wtf/PtrUtil.h"
44 #include "wtf/StdLibExtras.h" 45 #include "wtf/StdLibExtras.h"
46 #include <memory>
45 47
46 48
47 // How does a SQLTransaction work? 49 // How does a SQLTransaction work?
48 // ============================== 50 // ==============================
49 // The SQLTransaction is a state machine that executes a series of states / step s. 51 // The SQLTransaction is a state machine that executes a series of states / step s.
50 // 52 //
51 // The work of the transaction states are defined in section of 4.3.2 of the 53 // The work of the transaction states are defined in section of 4.3.2 of the
52 // webdatabase spec: http://dev.w3.org/html5/webdatabase/#processing-model 54 // webdatabase spec: http://dev.w3.org/html5/webdatabase/#processing-model
53 // 55 //
54 // the State Transition Graph at a glance: 56 // the State Transition Graph at a glance:
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after
246 // After scheduling the transaction with the DatabaseThread (Database::sched uleTransaction()): 248 // After scheduling the transaction with the DatabaseThread (Database::sched uleTransaction()):
247 // ========================================================================= ============================= 249 // ========================================================================= =============================
248 // DatabaseThread // MessageQueue<DatabaseTask> m_qu eue points to ... 250 // DatabaseThread // MessageQueue<DatabaseTask> m_qu eue points to ...
249 // --> DatabaseTransactionTask // Member<SQLTransactionBackend> m _transaction points to ... 251 // --> DatabaseTransactionTask // Member<SQLTransactionBackend> m _transaction points to ...
250 // --> SQLTransactionBackend // Member<SQLTransaction> m_fronte nd points to ... 252 // --> SQLTransactionBackend // Member<SQLTransaction> m_fronte nd points to ...
251 // --> SQLTransaction // Member<SQLTransactionBackend> m _backend points to ... 253 // --> SQLTransaction // Member<SQLTransactionBackend> m _backend points to ...
252 // --> SQLTransactionBackend // which is a circular reference. 254 // --> SQLTransactionBackend // which is a circular reference.
253 // 255 //
254 // When executing the transaction (in DatabaseThread::databaseThread()): 256 // When executing the transaction (in DatabaseThread::databaseThread()):
255 // ==================================================================== 257 // ====================================================================
256 // OwnPtr<DatabaseTask> task; // points to ... 258 // std::unique_ptr<DatabaseTask> task; // points to ...
257 // --> DatabaseTransactionTask // Member<SQLTransactionBackend> m _transaction points to ... 259 // --> DatabaseTransactionTask // Member<SQLTransactionBackend> m _transaction points to ...
258 // --> SQLTransactionBackend // Member<SQLTransaction> m_fronte nd; 260 // --> SQLTransactionBackend // Member<SQLTransaction> m_fronte nd;
259 // --> SQLTransaction // Member<SQLTransactionBackend> m _backend points to ... 261 // --> SQLTransaction // Member<SQLTransactionBackend> m _backend points to ...
260 // --> SQLTransactionBackend // which is a circular reference. 262 // --> SQLTransactionBackend // which is a circular reference.
261 // 263 //
262 // At the end of cleanupAndTerminate(): 264 // At the end of cleanupAndTerminate():
263 // =================================== 265 // ===================================
264 // At the end of the cleanup state, the SQLTransactionBackend::m_frontend is nullified. 266 // At the end of the cleanup state, the SQLTransactionBackend::m_frontend is nullified.
265 // If by then, a JSObject wrapper is referring to the SQLTransaction, then t he reference 267 // If by then, a JSObject wrapper is referring to the SQLTransaction, then t he reference
266 // chain looks like this: 268 // chain looks like this:
267 // 269 //
268 // JSObjectWrapper 270 // JSObjectWrapper
269 // --> SQLTransaction // in Member<SQLTransactionBackend> m_back end points to ... 271 // --> SQLTransaction // in Member<SQLTransactionBackend> m_back end points to ...
270 // --> SQLTransactionBackend // which no longer points back to its SQLT ransaction. 272 // --> SQLTransactionBackend // which no longer points back to its SQLT ransaction.
271 // 273 //
272 // When the GC collects the corresponding JSObject, the above chain will be cleaned up 274 // When the GC collects the corresponding JSObject, the above chain will be cleaned up
273 // and deleted. 275 // and deleted.
274 // 276 //
275 // If there is no JSObject wrapper referring to the SQLTransaction when the cleanup 277 // If there is no JSObject wrapper referring to the SQLTransaction when the cleanup
276 // states nullify SQLTransactionBackend::m_frontend, the SQLTransaction will deleted then. 278 // states nullify SQLTransactionBackend::m_frontend, the SQLTransaction will deleted then.
277 // However, there will still be a DatabaseTask pointing to the SQLTransactio nBackend (see 279 // However, there will still be a DatabaseTask pointing to the SQLTransactio nBackend (see
278 // the "When executing the transaction" chain above). This will keep the 280 // the "When executing the transaction" chain above). This will keep the
279 // SQLTransactionBackend alive until DatabaseThread::databaseThread() releas es its 281 // SQLTransactionBackend alive until DatabaseThread::databaseThread() releas es its
280 // task OwnPtr. 282 // task std::unique_ptr.
281 // 283 //
282 // What happens if a transaction is interrupted? 284 // What happens if a transaction is interrupted?
283 // ============================================ 285 // ============================================
284 // If the transaction is interrupted half way, it won't get to run to state 286 // If the transaction is interrupted half way, it won't get to run to state
285 // CleanupAndTerminate, and hence, would not have called SQLTransactionBacke nd's 287 // CleanupAndTerminate, and hence, would not have called SQLTransactionBacke nd's
286 // doCleanup(). doCleanup() is where we nullify SQLTransactionBackend::m_fro ntend 288 // doCleanup(). doCleanup() is where we nullify SQLTransactionBackend::m_fro ntend
287 // to break the reference cycle between the frontend and backend. Hence, we need 289 // to break the reference cycle between the frontend and backend. Hence, we need
288 // to cleanup the transaction by other means. 290 // to cleanup the transaction by other means.
289 // 291 //
290 // Note: calling SQLTransactionBackend::notifyDatabaseThreadIsShuttingDown() 292 // Note: calling SQLTransactionBackend::notifyDatabaseThreadIsShuttingDown()
(...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after
554 ASSERT(!m_database->sqliteDatabase().transactionInProgress()); 556 ASSERT(!m_database->sqliteDatabase().transactionInProgress());
555 ASSERT(m_lockAcquired); 557 ASSERT(m_lockAcquired);
556 558
557 WTF_LOG(StorageAPI, "Opening and preflighting transaction %p", this); 559 WTF_LOG(StorageAPI, "Opening and preflighting transaction %p", this);
558 560
559 // Set the maximum usage for this transaction if this transactions is not re ad-only 561 // Set the maximum usage for this transaction if this transactions is not re ad-only
560 if (!m_readOnly) 562 if (!m_readOnly)
561 m_database->sqliteDatabase().setMaximumSize(m_database->maximumSize()); 563 m_database->sqliteDatabase().setMaximumSize(m_database->maximumSize());
562 564
563 ASSERT(!m_sqliteTransaction); 565 ASSERT(!m_sqliteTransaction);
564 m_sqliteTransaction = adoptPtr(new SQLiteTransaction(m_database->sqliteDatab ase(), m_readOnly)); 566 m_sqliteTransaction = wrapUnique(new SQLiteTransaction(m_database->sqliteDat abase(), m_readOnly));
565 567
566 m_database->resetDeletes(); 568 m_database->resetDeletes();
567 m_database->disableAuthorizer(); 569 m_database->disableAuthorizer();
568 m_sqliteTransaction->begin(); 570 m_sqliteTransaction->begin();
569 m_database->enableAuthorizer(); 571 m_database->enableAuthorizer();
570 572
571 // Spec 4.3.2.1+2: Open a transaction to the database, jumping to the error callback if that fails 573 // Spec 4.3.2.1+2: Open a transaction to the database, jumping to the error callback if that fails
572 if (!m_sqliteTransaction->inProgress()) { 574 if (!m_sqliteTransaction->inProgress()) {
573 ASSERT(!m_database->sqliteDatabase().transactionInProgress()); 575 ASSERT(!m_database->sqliteDatabase().transactionInProgress());
574 m_database->reportStartTransactionResult(2, SQLError::DATABASE_ERR, m_da tabase->sqliteDatabase().lastError()); 576 m_database->reportStartTransactionResult(2, SQLError::DATABASE_ERR, m_da tabase->sqliteDatabase().lastError());
(...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after
822 } 824 }
823 825
824 SQLTransactionState SQLTransactionBackend::sendToFrontendState() 826 SQLTransactionState SQLTransactionBackend::sendToFrontendState()
825 { 827 {
826 ASSERT(m_nextState != SQLTransactionState::Idle); 828 ASSERT(m_nextState != SQLTransactionState::Idle);
827 m_frontend->requestTransitToState(m_nextState); 829 m_frontend->requestTransitToState(m_nextState);
828 return SQLTransactionState::Idle; 830 return SQLTransactionState::Idle;
829 } 831 }
830 832
831 } // namespace blink 833 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698