Squashed commit of the following:
authorbeidson@apple.com <beidson@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 14 Nov 2007 00:26:48 +0000 (00:26 +0000)
committerbeidson@apple.com <beidson@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 14 Nov 2007 00:26:48 +0000 (00:26 +0000)
commit 3e6cb737b3b823b4bf177b9e0c2fcfcc38baf46d
Author: Brady Eidson <beidson@apple.com>
Date:   Tue Nov 13 16:22:36 2007 -0800

    Changelog for commit

commit 4be13a5ef17685368e68a76292b785c99da1d7f2
Author: Brady Eidson <beidson@apple.com>
Date:   Tue Nov 13 16:19:34 2007 -0800

    Make inspector work with new API

commit c500ed90c32b31fbc37a183c8ae5427f36b9ccc2
Author: Brady Eidson <beidson@apple.com>
Date:   Tue Nov 13 14:37:16 2007 -0800

    Woops!

commit c61b147f35a2801c340f82054d177914da6ccde5
Author: Brady Eidson <beidson@apple.com>
Date:   Tue Nov 13 11:45:40 2007 -0800

    Ander's review comments

commit f3dc2683acc5730cbab8758226adae3e35f7263b
Author: Brady Eidson <beidson@apple.com>
Date:   Mon Nov 12 18:05:21 2007 -0800

    Initial vcproj changes after the rebase

commit c8cf9be275479ff1fb39b911e5165f07fcd5ae34
Author: Brady Eidson <beidson@apple.com>
Date:   Mon Nov 12 18:02:30 2007 -0800

    Fixed Changelog a bit

commit c9790cde9b79e25690f1c0b34b9c1e77d2f4449f
Author: Brady Eidson <beidson@apple.com>
Date:   Mon Nov 12 16:53:48 2007 -0800

    Finish the rebase/trunk merge

commit 663ad85619ec677eb5c52bed3c59b8b3f50de624
Author: Brady Eidson <beidson@apple.com>
Date:   Tue Nov 6 11:54:26 2007 -0800

    VCProj changes for new SQL api + blind attempt at keeping qt/gtk going

commit 2aceeb3bdfa6894bb4e93c0b129867059e9cdad7
Author: Brady Eidson <beidson@apple.com>
Date:   Mon Nov 5 15:27:55 2007 -0800

    Changelog edit cleanup

commit a05f11fa4fa0ba935eb28df6d9628f29a4074d7a
Author: Brady Eidson <beidson@apple.com>
Date:   Mon Nov 5 15:25:27 2007 -0800

    Changelog entries and small style cleanup

commit a2d34a78d06f446f4bdb6ea1797dfb91cfc336fe
Author: Brady Eidson <beidson@apple.com>
Date:   Mon Nov 5 13:37:10 2007 -0800

    Minor edit

commit eaf0aa9c07cfeb54df312c130677ecbc60728c5f
Author: Brady Eidson <beidson@apple.com>
Date:   Mon Nov 5 13:32:20 2007 -0800

    Do version check at time of executeSql

commit 3bac84615badcc810f44ebf14d1679bffd4cc8fb
Author: Brady Eidson <beidson@apple.com>
Date:   Mon Nov 5 13:04:14 2007 -0800

    Newline = t3h gone

commit de7cfcf737b1a6143b74f1cc60955c317877ca27
Author: Brady Eidson <beidson@apple.com>
Date:   Mon Nov 5 13:02:11 2007 -0800

    Example + inspector fixes

commit 536b119c219de72c97fe6756e226a36bef5e6880
Author: Brady Eidson <beidson@apple.com>
Date:   Mon Nov 5 11:47:30 2007 -0800

    DatabaseExample works

commit fff79aa99dbf47955bc37ca325928460fc41a59e
Author: Brady Eidson <beidson@apple.com>
Date:   Mon Nov 5 10:36:59 2007 -0800

    Remove the old, now unused DatabaseCallback

commit 06bc8e16ad346b755f767ce8e7849da819ccf96f
Author: Brady Eidson <beidson@apple.com>
Date:   Mon Nov 5 09:57:36 2007 -0800

    Sort project file

commit 741084d108ec994ff513e18c3d7a3153f6dd6bb5
Author: Brady Eidson <beidson@apple.com>
Date:   Mon Nov 5 09:30:37 2007 -0800

    Sort the project file

commit 2e77cec4337db174f56269b7fb406d81ebb1de7d
Author: Brady Eidson <beidson@apple.com>
Date:   Thu Nov 1 16:01:03 2007 -0700

    Yay!  Change version even works!

commit 05c2ed1f22e3b689dd453ea300154492937f46db
Author: Brady Eidson <beidson@apple.com>
Date:   Thu Nov 1 15:19:56 2007 -0700

    Nuke some DRT changes

commit 9b5b9b25c45d7d4720e4ddf4a31f163fb4f7faf2
Author: Brady Eidson <beidson@apple.com>
Date:   Thu Nov 1 15:05:59 2007 -0700

    Nuke some printfs

commit 8503eecdefa95278a15246bb4eed2dccb69af12a
Author: Brady Eidson <beidson@apple.com>
Date:   Thu Nov 1 13:44:32 2007 -0700

    Added "current transaction" to Database and reworked how scheduling goes

commit f70354c9a84d654d28894ab3c6b13679ce494fc3
Author: Brady Eidson <beidson@apple.com>
Date:   Thu Nov 1 11:49:26 2007 -0700

    Things are largely working.  Still need to clean up loose ends in the sticky notes demo and do further testing

commit 417665cd15f020c22af5691577e5c8a072630839
Author: Brady Eidson <beidson@apple.com>
Date:   Thu Nov 1 00:00:47 2007 -0700

    Transaction steps are almost locked up completely.  Still need the SQLError for the transaction error callback and actually implementing ::execute() on the SQLStatement

commit 752d572acd4d1d9832976b4869284e554845205a
Author: Anders Carlsson <andersca@apple.com>
Date:   Wed Oct 31 18:52:55 2007 -0700

    Forgot this.

commit 2c8f2689d212296961a841c579a2f93609858862
Author: Anders Carlsson <andersca@apple.com>
Date:   Wed Oct 31 18:31:05 2007 -0700

    Merge.

commit 7540d4fa7ef858400d9f834cba976a439394412d
Author: Brady Eidson <beidson@apple.com>
Date:   Wed Oct 31 17:14:30 2007 -0700

    Even closer!

commit 143a70a5d026ab9fab1b5de91f826effcd481527
Author: Brady Eidson <beidson@apple.com>
Date:   Wed Oct 31 16:43:31 2007 -0700

    Merge project file correctly

commit 11207e7b6e391a4052fc41f6db42ce30449c7e3e
Author: Anders Carlsson <andersca@apple.com>
Date:   Wed Oct 31 11:04:35 2007 -0700

    Remove more unused methods.

commit 9a0d306d467eb9aa8c19825da03b7abe318c609c
Author: Anders Carlsson <andersca@apple.com>
Date:   Wed Oct 31 11:01:35 2007 -0700

    Add SQLTransactionCallback.idl

commit 12e2fa2858145e3895320293462ec441c35a7e3d
Author: Anders Carlsson <andersca@apple.com>
Date:   Wed Oct 31 10:47:17 2007 -0700

    Fix build.

commit 02f4631705b0f6e0bd3c715c64f4938ea53f4670
Author: Brady Eidson <beidson@apple.com>
Date:   Tue Oct 30 23:36:24 2007 -0700

    All steps now take place in the right order, following the right rules - only thing missing is the actual SQL executing!

commit 6a8c0d7d2beb745c070c55b14beac9a47d373fc4
Author: Brady Eidson <beidson@apple.com>
Date:   Tue Oct 30 18:20:35 2007 -0700

    Closer and closer we roll

commit f945446453ae48a28d6e2f3dcce4660feae0da79
Author: Brady Eidson <beidson@apple.com>
Date:   Tue Oct 30 17:59:25 2007 -0700

    Things are really rolling - transaction steps 1-5 are called as expected.  Downhill from here

commit 138b49b62bc8f3d05b1171e280d403e8b15ef9c4
Author: Brady Eidson <beidson@apple.com>
Date:   Tue Oct 30 14:50:14 2007 -0700

    Use pointer-to-member functions for the transaction steps...  !!!

commit 3eb4f794861827f5c88cd8c36efb144cdc537bd5
Author: Anders Carlsson <andersca@apple.com>
Date:   Tue Oct 30 14:45:59 2007 -0700

    Remove more old cruft.

commit f18835f0709b4aff00903738974dbebb11a224f0
Author: Brady Eidson <beidson@apple.com>
Date:   Tue Oct 30 13:55:05 2007 -0700

    Restore that comment

commit 35b2eac5ac3ec338cc2a8a4fe611f85e62c72dd6
Author: Brady Eidson <beidson@apple.com>
Date:   Tue Oct 30 12:08:29 2007 -0700

    Closer, still, to the new model working.  Lotsa little tweaks

commit a8476702a7d9bb38b8e15966e837ceca5858e9b2
Author: Anders Carlsson <andersca@apple.com>
Date:   Tue Oct 30 11:23:02 2007 -0700

    Wrap changeVersion.

commit aa0d8cc6aaaf674de341996555306eb9f122de3c
Author: Brady Eidson <beidson@apple.com>
Date:   Mon Oct 29 22:35:16 2007 -0700

    Dummy callback as part of transaction steps acheived!  And other architectural changes

commit 01c0a92daf764375be79753bc7bc417aa0205168
Author: Brady Eidson <beidson@apple.com>
Date:   Mon Oct 29 18:23:00 2007 -0700

    Have a the first chunk of transaction steps occuring asynchronously with stubs and printf()s - should be downhill from here.  Also updated the DatabaseExample.html for the portion of the new API that works so far.

commit 6b6e9e7a064424cd6b70489de80c79e7ae950b38
Author: Brady Eidson <beidson@apple.com>
Date:   Mon Oct 29 17:32:30 2007 -0700

    Made DatabaseTasks create mutex/conditions on demand, and renamed the internal sqlitedatabase

commit 99d06513090c2b4e04edda82d82108cf97da245a
Author: Anders Carlsson <andersca@apple.com>
Date:   Mon Oct 29 16:30:52 2007 -0700

    Fix bug.

commit 83def2ce73fa001f5bda3e152ca60e58c563dbed
Author: Anders Carlsson <andersca@apple.com>
Date:   Mon Oct 29 15:17:45 2007 -0700

    Remove some cruft.

commit 9f2c8c21d06d6b379426449357f1ee00a25faeee
Author: Anders Carlsson <andersca@apple.com>
Date:   Mon Oct 29 14:45:54 2007 -0700

    More bindings.

commit 9eae9135ed17179b7bcd225648272d24b76de8b9
Author: Brady Eidson <beidson@apple.com>
Date:   Mon Oct 29 14:19:34 2007 -0700

    Adapt to new openDatabase() method

commit 2e1dad857b190634f4394475e925d2dc518ae1fe
Author: Brady Eidson <beidson@apple.com>
Date:   Mon Oct 29 12:05:53 2007 -0700

    More infrastructure changes for the new spec, getting really close now!

commit b0d8ca9dc7ffe1a424070d5f8587346eca56b76b
Author: Brady Eidson <beidson@apple.com>
Date:   Fri Oct 26 17:25:41 2007 -0700

    More stubbing of infrastructure

commit bb8c6528208a24f129af9a8c09763989e5723157
Author: Anders Carlsson <andersca@apple.com>
Date:   Fri Oct 26 15:38:16 2007 -0700

    Remove SQLVersionChangeCallback.h

commit c77ec8b1d2a7c8cb7a6a0bc42b089c34541cdf83
Author: Brady Eidson <beidson@apple.com>
Date:   Fri Oct 26 15:28:08 2007 -0700

    Make it build (removed the old changeVersion)

commit e205fd2d6cb0cd4e6dd47cf4b6609196d0d8e87d
Author: Brady Eidson <beidson@apple.com>
Date:   Fri Oct 26 14:53:15 2007 -0700

    Even more progress in the architecture change

commit 322f576e2ed8c584244335f918302169c81ea39f
Author: Anders Carlsson <andersca@apple.com>
Date:   Fri Oct 26 14:52:22 2007 -0700

    Add JSSQLTransactionCustom.cpp.

commit 22d0b184e1d5d92574b5caf2b73eb6c7faae84be
Author: Anders Carlsson <andersca@apple.com>
Date:   Fri Oct 26 13:21:55 2007 -0700

    Add new API to Database.

commit 910660c7668f2728850990f8984045de9e41423f
Author: Anders Carlsson <andersca@apple.com>
Date:   Fri Oct 26 11:48:33 2007 -0700

    Add more .IDL files

commit 4d0cbb5b3e8c57076ce0cb743f8a52a5e31c0219
Author: Brady Eidson <beidson@apple.com>
Date:   Fri Oct 26 11:20:54 2007 -0700

    Further groundwork for new API (does not build)

commit d6420aacd1bf610ca53eced12e61ecd074f31bd7
Author: Brady Eidson <beidson@apple.com>
Date:   Thu Oct 25 18:02:23 2007 -0700

    Further stubs and adaptations to the new API

commit ea80b0c14037cfbdccf322146b26b62df2aa8211
Author: Brady Eidson <beidson@apple.com>
Date:   Thu Oct 25 15:51:43 2007 -0700

    Remove closeTransaction()

commit 4e701837674e07111da80a476135f5b73e25210f
Author: Brady Eidson <beidson@apple.com>
Date:   Thu Oct 25 14:05:40 2007 -0700

    Further stubbing and API-matching cleanup

commit f667cf3c7847069a6720296710876394954611bd
Author: Anders Carlsson <andersca@apple.com>
Date:   Wed Oct 24 16:32:58 2007 -0700

    Add extra arguments to Window.openDatabase.

commit efbbe3016a31a9c4a717de25d831406288f8126d
Author: Anders Carlsson <andersca@apple.com>
Date:   Wed Oct 24 14:21:22 2007 -0700

    cleanup.

commit b70a8252a588eee36d06835bad5793361ced35c5
Author: Anders Carlsson <andersca@apple.com>
Date:   Wed Oct 24 12:31:06 2007 -0700

    Stub out a couple of new classes.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@27762 268f45cc-cd09-0410-ab3c-d52691b4dbfc

37 files changed:
WebCore/ChangeLog
WebCore/DerivedSources.make
WebCore/WebCore.pro
WebCore/WebCore.vcproj/WebCore.vcproj
WebCore/WebCore.xcodeproj/project.pbxproj
WebCore/bindings/js/JSCustomSQLCallback.cpp [deleted file]
WebCore/bindings/js/JSCustomSQLCallback.h [deleted file]
WebCore/bindings/js/JSCustomVersionChangeCallback.cpp [deleted file]
WebCore/bindings/js/JSCustomVersionChangeCallback.h [deleted file]
WebCore/bindings/js/JSDatabaseCustom.cpp
WebCore/bindings/js/JSSQLTransactionCustom.cpp [new file with mode: 0644]
WebCore/page/DOMWindow.cpp
WebCore/page/DOMWindow.h
WebCore/page/DOMWindow.idl
WebCore/page/inspector/DatabasePanel.js
WebCore/storage/ChangeVersionWrapper.cpp [moved from WebCore/storage/DatabaseCallback.cpp with 54% similarity]
WebCore/storage/ChangeVersionWrapper.h [moved from WebCore/storage/SQLCallback.h with 74% similarity]
WebCore/storage/Database.cpp
WebCore/storage/Database.h
WebCore/storage/Database.idl
WebCore/storage/DatabaseTask.cpp
WebCore/storage/DatabaseTask.h
WebCore/storage/SQLCallback.idl [deleted file]
WebCore/storage/SQLError.h
WebCore/storage/SQLResultSet.cpp
WebCore/storage/SQLResultSet.h
WebCore/storage/SQLResultSet.idl
WebCore/storage/SQLStatement.cpp [new file with mode: 0644]
WebCore/storage/SQLStatement.h [moved from WebCore/storage/DatabaseCallback.h with 61% similarity]
WebCore/storage/SQLTransaction.cpp [new file with mode: 0644]
WebCore/storage/SQLTransaction.h
WebCore/storage/SQLTransaction.idl
WebCore/storage/VersionChangeCallback.h [deleted file]
WebCore/storage/VersionChangeCallback.idl [deleted file]
WebKit/WebKit.xcodeproj/project.pbxproj
WebKitSite/ChangeLog
WebKitSite/misc/DatabaseExample.html

index 22cb27e21e2f968ce27b4f105bf39ce58efc9b4b..6cf8f0d1e32a174291dc214d4a564a06d7a69eec 100644 (file)
@@ -1,3 +1,133 @@
+2007-11-13  Brady Eidson  <beidson@apple.com>
+
+        JS bindings by Anders, reviewed by Brady
+        WebCore changes by Brady, reviewed by Anders and Tim
+
+        Adapt to the new iteration of the HTML5 client-side storage spec.
+
+        Based largely on implementation feedback we generated in landing our first version of this API and also
+        on the input of others in the community, the database spec went through a large overhaul that addresses
+        many concerns.  Amongst other changes/improvements:
+        - SQLTransaction object is added and all transactions are explicit.  In addition, since the API manages
+          transactions explicitly, transaction-related language in SQL statements is disallowed
+        - executeSql() is now on a transaction object instead of the database object.
+        - Database.changeVersion() now takes place within the context of a transaction.  Therefore the version 
+          change can be atomic along with the statements that modify the DB schema
+
+        Most of the logic now takes place during the "transaction steps," which the specification clearly lays out
+        as a chain of events on the SQLTransaction object where processing is handed off between being processed 
+        asynchronously and calling back up to javascript.  To accomplish this voodoo, SQLTransaction has a series of 
+        methods that roughly match up with the "transaction steps" and it keeps a pointer to the next step.
+
+        * DerivedSources.make:
+        * WebCore.xcodeproj/project.pbxproj:
+
+        * bindings/js/JSDatabaseCustom.cpp:
+        (WebCore::JSDatabase::changeVersion): Adapt to the new API
+        (WebCore::JSDatabase::transaction): Added
+
+        * bindings/js/JSSQLTransactionCustom.cpp: Added.
+        (WebCore::JSSQLTransaction::executeSql): Added
+
+        * page/DOMWindow.cpp:
+        (WebCore::DOMWindow::openDatabase): Add the new arguments
+        * page/DOMWindow.h:
+        * page/DOMWindow.idl:
+
+        * page/inspector/DatabasePanel.js: Use the new API
+
+        * storage/ChangeVersionWrapper.cpp: Added.  Implementation of "SQLTransactionWrapper" that enforces
+          changing the version of the database
+        (WebCore::ChangeVersionWrapper::ChangeVersionWrapper):
+        (WebCore::ChangeVersionWrapper::performPreflight):
+        (WebCore::ChangeVersionWrapper::performPostflight):
+        * storage/ChangeVersionWrapper.h: Added.
+        (WebCore::ChangeVersionWrapper::sqlError):
+
+        * storage/Database.cpp: Removed the "main thread" and "background thread" sqlite handles as all sqlite operations can now
+          happen solely on the background thread - most of these changes result from that change
+        (WebCore::Database::Database): Removed an obsolete FIXME
+        (WebCore::Database::openAndVerifyVersion): 
+        (WebCore::Database::getVersionFromDatabase):
+        (WebCore::Database::setVersionInDatabase):
+        (WebCore::Database::versionMatchesExpected): Atomically guarantee that the current version and expected version are the same
+        (WebCore::Database::performOpenAndVerify):
+        (WebCore::Database::performTransactionStep): Added, as a hook for the DatabaseTransactionTask on the DatabaseThread
+        (WebCore::Database::changeVersion): Changed for the new API from JS
+        (WebCore::Database::transaction): Added, for the new API from JS
+        (WebCore::Database::scheduleTransaction): Add a transaction to this Database's transaction queue
+        (WebCore::Database::scheduleTransactionStep): Schedule the current transaction to be called on the background thread
+        (WebCore::Database::scheduleTransactionCallback): Schedule the current transaction to perform a callback on the main thread
+        (WebCore::Database::performGetTableNames):
+        (WebCore::Database::deliverAllPendingCallbacks):
+        (WebCore::Database::deliverPendingCallback):
+        (WebCore::Database::setExpectedVersion):
+        * storage/Database.h: 
+        * storage/Database.idl:
+
+        * storage/DatabaseTask.cpp:  Changed DatabaseTask to create a mutex on demand, and use the existence of that mutex
+          to replace the m_synchronous flag
+        (WebCore::DatabaseTask::performTask):
+        (WebCore::DatabaseTask::lockForSynchronousScheduling):
+        (WebCore::DatabaseTask::waitForSynchronousCompletion):
+        (WebCore::DatabaseTransactionTask::DatabaseTransactionTask):
+        * storage/DatabaseTask.h:
+
+        * storage/SQLError.h: New API object
+
+        * storage/SQLResultSet.cpp:
+        (WebCore::SQLResultSet::SQLResultSet): Small changes to the API object
+        * storage/SQLResultSet.h:
+        * storage/SQLResultSet.idl:
+
+        * storage/SQLStatement.cpp: Added.
+        (WebCore::SQLStatement::SQLStatement):
+        (WebCore::SQLStatement::execute): Actually execute the sql statement on the SQLiteDatabase if it's still valid
+        (WebCore::SQLStatement::setVersionMismatchedError): Flag this statement as bad before it even starts in case
+          of an actual version vs. expected version mismatch
+        (WebCore::SQLStatement::performCallback): Call the right callback (SQLStatement or SQLStatementError) for this statement
+        * storage/SQLStatement.h: Added.
+        (WebCore::SQLStatement::hasStatementCallback):
+        (WebCore::SQLStatement::hasStatementErrorCallback):
+        (WebCore::SQLStatement::sqlError): Get the error for this statement, if any
+
+        * storage/SQLTransaction.cpp: Added.
+        (WebCore::SQLTransaction::SQLTransaction):
+        (WebCore::SQLTransaction::executeSQL): Entry point for the API from JS
+        (WebCore::SQLTransaction::enqueueStatement): Add a new statement onto the queue
+        (WebCore::SQLTransaction::performNextStep): Call the method for the next step
+        (WebCore::SQLTransaction::performPendingCallback): Call the method for the pending callback
+        (WebCore::SQLTransaction::openTransactionAndPreflight): Open a transaction to the database and preflight 
+          using the SQLTransactionWrapper, if any
+        (WebCore::SQLTransaction::deliverTransactionCallback): Deliver the transaction callback to the javascript thread
+        (WebCore::SQLTransaction::scheduleToRunStatements): Convinience to schedule this transaction on the database thread 
+          and make runStatements() the next step
+        (WebCore::SQLTransaction::runStatements): Start running the sql statements queued up for this transaction 
+        (WebCore::SQLTransaction::getNextStatement): Bring the next statement off the queue
+        (WebCore::SQLTransaction::runCurrentStatement): Execute the current statement
+        (WebCore::SQLTransaction::deliverStatementCallback): Deliver the SQLStatementCallback for this statement
+        (WebCore::SQLTransaction::postflightAndCommit): Postflight the transaction using SQLTransactionWrapper and commit it
+        (WebCore::SQLTransaction::handleTransactionError): Make the right call for any error that occurred on the Transaction
+        (WebCore::SQLTransaction::deliverTransactionErrorCallback): Deliver the SQLTransactionErrorCallback
+        (WebCore::SQLTransaction::cleanupAfterTransactionErrorCallback): Either do a final commit or rollback to cleanup the
+          transaction after it error'ed out
+        * storage/SQLTransaction.h:
+        (WebCore::SQLTransactionWrapper::~SQLTransactionWrapper): 
+        (WebCore::SQLTransaction::database):
+        * storage/SQLTransaction.idl:
+
+        The following were made obsolete by the new version of the API:
+        * bindings/js/JSCustomSQLCallback.cpp: Removed.
+        * bindings/js/JSCustomSQLCallback.h: Removed.
+        * bindings/js/JSCustomVersionChangeCallback.cpp: Removed.
+        * bindings/js/JSCustomVersionChangeCallback.h: Removed.
+        * storage/DatabaseCallback.cpp: Removed.
+        * storage/DatabaseCallback.h: Removed.
+        * storage/SQLCallback.h: Removed.
+        * storage/SQLCallback.idl: Removed.
+        * storage/VersionChangeCallback.h: Removed.
+        * storage/VersionChangeCallback.idl: Removed.
+
 2007-11-13  Dan Bernstein  <mitz@apple.com>
 
         Reviewed by Beth Dakin.
index dce6fc12c22229fd7599a1cd7262e988cc0400d3..8e9637641faff0a998567d6bec6b7f51ae9d810a 100644 (file)
@@ -426,7 +426,6 @@ all : \
     JSRange.h \
     JSRangeException.h \
     JSRect.h \
-    JSSQLCallback.h \
     JSSQLError.h \
     JSSQLResultSet.h \
     JSSQLResultSetRowList.h \
@@ -569,7 +568,6 @@ all : \
     JSTimeRanges.h \
     JSTreeWalker.h \
     JSUIEvent.h \
-    JSVersionChangeCallback.h \
     JSVoidCallback.h \
     JSXPathEvaluator.h \
     JSXPathExpression.h \
index ccff72b9bfa92b85c090e8d6d65f00da00d3bb2c..6f4685e74e196e65a995e0d1bc6122ea9107eb1e 100644 (file)
@@ -17,7 +17,7 @@ INCLUDEPATH += tmp $$OUTPUT_DIR/WebCore/tmp
 
 DESTDIR = $$OUTPUT_DIR/lib
 DEPENDPATH += css dom loader editing history html \
-       loader page platform platform/graphics rendering xml
+    loader page platform platform/graphics rendering xml
 
 include($$OUTPUT_DIR/config.pri)
 
@@ -85,7 +85,7 @@ INCLUDEPATH += \
                 $$PWD/../WebKit/qt/Api
 
 DEPENDPATH += editing/qt history/qt loader/qt page/qt \
-       platform/graphics/qt ../WebKit/qt/Api ../WebKit/qt/WebCoreSupport
+    platform/graphics/qt ../WebKit/qt/Api ../WebKit/qt/WebCoreSupport
 
     DEFINES += WTF_USE_JAVASCRIPTCORE_BINDINGS=1
 }
@@ -993,24 +993,34 @@ contains(DEFINES, ENABLE_DATABASE=1) {
         platform/sql/SQLiteStatement.cpp \
         platform/sql/SQLiteTransaction.cpp \
         platform/sql/SQLValue.cpp \
+        storage/ChangeVersionWrapper.cpp \
         storage/DatabaseAuthorizer.cpp \
-        storage/DatabaseCallback.cpp \
         storage/Database.cpp \
         storage/DatabaseTask.cpp \
         storage/DatabaseThread.cpp \
         storage/DatabaseTracker.cpp \
         storage/SQLResultSet.cpp \
         storage/SQLResultSetRowList.cpp \
-        bindings/js/JSCustomSQLCallback.cpp \
+        storage/SQLStatement.cpp \
+        storage/SQLTransaction.cpp \
+        bindings/js/JSCustomSQLStatementCallback.cpp \
+        bindings/js/JSCustomSQLStatementErrorCallback.cpp \
+        bindings/js/JSCustomSQLTransactionCallback.cpp \
+        bindings/js/JSCustomSQLTransactionErrorCallback.cpp \
         bindings/js/JSDatabaseCustom.cpp \
-        bindings/js/JSSQLResultSetRowListCustom.cpp
+        bindings/js/JSSQLResultSetRowListCustom.cpp \
+        bindings/js/JSSQLTransactionCustom.cpp
 
     IDL_BINDINGS += \
         storage/Database.idl \
+        storage/SQLError.idl \
+        storage/SQLResultSet.idl \
         storage/SQLResultSetRowList.idl \
-        storage/VersionChangeCallback.idl \
-        storage/SQLCallback.idl \
-        storage/SQLResultSet.idl
+        storage/SQLStatementCallback.idl \
+        storage/SQLStatementErrorCallback.idl \
+        storage/SQLTransaction.idl \
+        storage/SQLTransactionCallback.idl \
+        storage/SQLTransactionErrorCallback.idl
 
 }
 
@@ -1061,11 +1071,11 @@ contains(DEFINES, ENABLE_SVG=1) {
 
     DEPENDPATH += ksvg2/css ksvg2/events ksvg2/misc ksvg2/svg platform/graphics/svg
     qt-port {
-       DEPENDPATH += platform/graphics/svg/qt
+    DEPENDPATH += platform/graphics/svg/qt
     }
 
     gtk-port {
-       DEPENDPATH += platform/graphics/svg/cairo
+    DEPENDPATH += platform/graphics/svg/cairo
     }
 
     SVG_NAMES = $$PWD/ksvg2/svg/svgtags.in
index 2b6116bd4bcac945e1025abe8febf7d40ebf5be9..d1b3ba635c4b7db209440479e6139fe4bf06a798 100644 (file)
                                RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSScreen.h"\r
                                >\r
                        </File>\r
-                       <File\r
-                               RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSQLCallback.cpp"\r
-                               >\r
-                       </File>\r
-                       <File\r
-                               RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSQLCallback.h"\r
-                               >\r
-                       </File>\r
                        <File\r
                                RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSQLError.cpp"\r
                                >\r
                                RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSQLResultSetRowList.h"\r
                                >\r
                        </File>\r
+                       <File\r
+                               RelativePath="$(WebKitOutputDir)\obj\WebCore\DerivedSources\JSSQLTransaction.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="$(WebKitOutputDir)\obj\WebCore\DerivedSources\JSSQLTransaction.h"\r
+                               >\r
+                       </File>\r
                        <File\r
                                RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSStyleSheet.cpp"\r
                                >\r
                                        >\r
                                </File>\r
                                <File\r
-                                       RelativePath="..\bindings\js\JSCustomSQLCallback.cpp"\r
+                                       RelativePath="..\bindings\js\JSCustomSQLStatementCallback.cpp"\r
+                                       >\r
+                               </File>\r
+                               <File\r
+                                       RelativePath="..\bindings\js\JSCustomSQLStatementCallback.h"\r
                                        >\r
                                </File>\r
                                <File\r
-                                       RelativePath="..\bindings\js\JSCustomSQLCallback.h"\r
+                                       RelativePath="..\bindings\js\JSCustomSQLStatementErrorCallback.cpp"\r
                                        >\r
                                </File>\r
                                <File\r
-                                       RelativePath="..\bindings\js\JSCustomVersionChangeCallback.cpp"\r
+                                       RelativePath="..\bindings\js\JSCustomSQLStatementErrorCallback.h"\r
                                        >\r
                                </File>\r
                                <File\r
-                                       RelativePath="..\bindings\js\JSCustomVersionChangeCallback.h"\r
+                                       RelativePath="..\bindings\js\JSCustomSQLTransactionCallback.cpp"\r
+                                       >\r
+                               </File>\r
+                               <File\r
+                                       RelativePath="..\bindings\js\JSCustomSQLTransactionCallback.h"\r
+                                       >\r
+                               </File>\r
+                               <File\r
+                                       RelativePath="..\bindings\js\JSCustomSQLTransactionErrorCallback.cpp"\r
+                                       >\r
+                               </File>\r
+                               <File\r
+                                       RelativePath="..\bindings\js\JSCustomSQLTransactionErrorCallback.h"\r
                                        >\r
                                </File>\r
                                <File\r
                                        RelativePath="..\bindings\js\JSSQLResultSetRowListCustom.cpp"\r
                                        >\r
                                </File>\r
+                               <File\r
+                                       RelativePath="..\bindings\js\JSSQLTransactionCustom.cpp"\r
+                                       >\r
+                               </File>\r
                                <File\r
                                        RelativePath="..\bindings\js\JSStyleSheetCustom.cpp"\r
                                        >\r
                        Name="storage"\r
                        >\r
                        <File\r
-                               RelativePath="..\storage\Database.cpp"\r
+                               RelativePath="..\storage\ChangeVersionWrapper.cpp"\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\storage\Database.h"\r
+                               RelativePath="..\storage\ChangeVersionWrapper.h"\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\storage\DatabaseAuthorizer.cpp"\r
+                               RelativePath="..\storage\Database.cpp"\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\storage\DatabaseAuthorizer.h"\r
+                               RelativePath="..\storage\Database.h"\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\storage\DatabaseCallback.cpp"\r
+                               RelativePath="..\storage\DatabaseAuthorizer.cpp"\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\storage\DatabaseCallback.h"\r
+                               RelativePath="..\storage\DatabaseAuthorizer.h"\r
                                >\r
                        </File>\r
                        <File\r
                                RelativePath="..\storage\SQLResultSetRowList.h"\r
                                >\r
                        </File>\r
+                       <File\r
+                               RelativePath="..\storage\SQLStatement.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\storage\SQLStatement.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\storage\SQLStatementCallback.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\storage\SQLStatementErrorCallback.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\storage\SQLTransaction.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\storage\SQLTransaction.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\storage\SQLTransactionCallback.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\storage\SQLTransactionErrorCallback.h"\r
+                               >\r
+                       </File>\r
                        <File\r
                                RelativePath="..\storage\VersionChangeCallback.h"\r
                                >\r
index 0e63c2a2f08b0b512a5cdedcdf3af5d15cbae4fe..f00cc1fd2a5d288c5fbe9aa387b7542e0267b296 100644 (file)
                1A2E6E7A0CC556D5004A2062 /* SQLiteAuthorizer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A2E6E780CC556D5004A2062 /* SQLiteAuthorizer.cpp */; };
                1A2E6E7B0CC556D5004A2062 /* SQLiteAuthorizer.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A2E6E790CC556D5004A2062 /* SQLiteAuthorizer.h */; };
                1A2E6FA40CC5795D004A2062 /* ThreadingPthreads.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A2E6FA30CC5795D004A2062 /* ThreadingPthreads.cpp */; };
-               1A2E6FF50CC67855004A2062 /* VersionChangeCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A2E6FF30CC67855004A2062 /* VersionChangeCallback.h */; };
-               1A2E6FFE0CC67907004A2062 /* JSVersionChangeCallback.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A2E6FFC0CC67907004A2062 /* JSVersionChangeCallback.cpp */; };
-               1A2E6FFF0CC67907004A2062 /* JSVersionChangeCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A2E6FFD0CC67907004A2062 /* JSVersionChangeCallback.h */; };
-               1A2E70620CC67CAA004A2062 /* JSCustomVersionChangeCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A2E70600CC67CAA004A2062 /* JSCustomVersionChangeCallback.h */; };
-               1A2E70630CC67CAA004A2062 /* JSCustomVersionChangeCallback.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A2E70610CC67CAA004A2062 /* JSCustomVersionChangeCallback.cpp */; };
                1A3178930B20A81600316987 /* SubresourceLoaderClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A3178920B20A81600316987 /* SubresourceLoaderClient.h */; settings = {ATTRIBUTES = (Private, ); }; };
                1A494BFA0A122F4400FDAFC1 /* JSHTMLElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A494BF80A122F4400FDAFC1 /* JSHTMLElement.cpp */; };
                1A494BFB0A122F4400FDAFC1 /* JSHTMLElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A494BF90A122F4400FDAFC1 /* JSHTMLElement.h */; };
                1A750D8D0A90E521000FF215 /* JSNodeIterator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A750D8B0A90E521000FF215 /* JSNodeIterator.cpp */; };
                1A750D8E0A90E521000FF215 /* JSNodeIterator.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A750D8C0A90E521000FF215 /* JSNodeIterator.h */; };
                1A750DD40A90E729000FF215 /* JSNodeIteratorCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A750DD30A90E729000FF215 /* JSNodeIteratorCustom.cpp */; };
-               1A750E340A90F89F000FF215 /* JSTreeWalkerCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A750E330A90F89F000FF215 /* JSTreeWalkerCustom.cpp */; };
                1A7629D50A07425100989F5B /* XPathGrammar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A7629D30A07425100989F5B /* XPathGrammar.cpp */; };
                1A7629D60A07425100989F5B /* XPathGrammar.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A7629D40A07425100989F5B /* XPathGrammar.h */; };
                1A762C730A074F2600989F5B /* JSXPathEvaluator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A762C6B0A074F2600989F5B /* JSXPathEvaluator.cpp */; };
                1A762C780A074F2600989F5B /* JSXPathNSResolver.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A762C700A074F2600989F5B /* JSXPathNSResolver.h */; };
                1A762C790A074F2600989F5B /* JSXPathResult.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A762C710A074F2600989F5B /* JSXPathResult.cpp */; };
                1A762C7A0A074F2600989F5B /* JSXPathResult.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A762C720A074F2600989F5B /* JSXPathResult.h */; };
-               1A7CCAEA0CD901A100B7B64E /* SQLError.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A7CCAE80CD901A100B7B64E /* SQLError.h */; };
-               1A7CCAEB0CD901A100B7B64E /* SQLError.idl in Resources */ = {isa = PBXBuildFile; fileRef = 1A7CCAE90CD901A100B7B64E /* SQLError.idl */; };
-               1A7CCAEE0CD901DB00B7B64E /* JSSQLError.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A7CCAEC0CD901DB00B7B64E /* JSSQLError.cpp */; };
-               1A7CCAEF0CD901DB00B7B64E /* JSSQLError.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A7CCAED0CD901DB00B7B64E /* JSSQLError.h */; };
-               1A7CCB030CD945DD00B7B64E /* JSCustomSQLStatementCallback.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A7CCAFB0CD945DD00B7B64E /* JSCustomSQLStatementCallback.cpp */; };
-               1A7CCB040CD945DD00B7B64E /* JSCustomSQLStatementCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A7CCAFC0CD945DD00B7B64E /* JSCustomSQLStatementCallback.h */; };
-               1A7CCB050CD945DD00B7B64E /* JSCustomSQLStatementErrorCallback.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A7CCAFD0CD945DD00B7B64E /* JSCustomSQLStatementErrorCallback.cpp */; };
-               1A7CCB060CD945DD00B7B64E /* JSCustomSQLStatementErrorCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A7CCAFE0CD945DD00B7B64E /* JSCustomSQLStatementErrorCallback.h */; };
-               1A7CCB070CD945DD00B7B64E /* JSCustomSQLTransactionCallback.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A7CCAFF0CD945DD00B7B64E /* JSCustomSQLTransactionCallback.cpp */; };
-               1A7CCB080CD945DD00B7B64E /* JSCustomSQLTransactionCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A7CCB000CD945DD00B7B64E /* JSCustomSQLTransactionCallback.h */; };
-               1A7CCB090CD945DD00B7B64E /* JSCustomSQLTransactionErrorCallback.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A7CCB010CD945DD00B7B64E /* JSCustomSQLTransactionErrorCallback.cpp */; };
-               1A7CCB0A0CD945DD00B7B64E /* JSCustomSQLTransactionErrorCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A7CCB020CD945DD00B7B64E /* JSCustomSQLTransactionErrorCallback.h */; };
                1A7CCB100CD9462C00B7B64E /* SQLStatementCallback.idl in Resources */ = {isa = PBXBuildFile; fileRef = 1A7CCB0C0CD9462C00B7B64E /* SQLStatementCallback.idl */; };
                1A7CCB110CD9462C00B7B64E /* SQLStatementErrorCallback.idl in Resources */ = {isa = PBXBuildFile; fileRef = 1A7CCB0D0CD9462C00B7B64E /* SQLStatementErrorCallback.idl */; };
                1A7CCB120CD9462C00B7B64E /* SQLTransactionCallback.idl in Resources */ = {isa = PBXBuildFile; fileRef = 1A7CCB0E0CD9462C00B7B64E /* SQLTransactionCallback.idl */; };
                1A7CCB1C0CD9469A00B7B64E /* SQLTransactionErrorCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A7CCB180CD9469A00B7B64E /* SQLTransactionErrorCallback.h */; };
                1A7CCB240CD946FD00B7B64E /* SQLTransaction.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A7CCB220CD946FD00B7B64E /* SQLTransaction.h */; };
                1A7CCB250CD946FD00B7B64E /* SQLTransaction.idl in Resources */ = {isa = PBXBuildFile; fileRef = 1A7CCB230CD946FD00B7B64E /* SQLTransaction.idl */; };
-               1A7CCB2E0CD9499700B7B64E /* JSSQLTransaction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A7CCB2C0CD9499700B7B64E /* JSSQLTransaction.cpp */; };
-               1A7CCB2F0CD9499700B7B64E /* JSSQLTransaction.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A7CCB2D0CD9499700B7B64E /* JSSQLTransaction.h */; };
                1A820D910A13EBA600AF843C /* ImageDocument.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A820D8F0A13EBA600AF843C /* ImageDocument.cpp */; };
                1A820D920A13EBA600AF843C /* ImageDocument.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A820D900A13EBA600AF843C /* ImageDocument.h */; };
                1A85B18F0A1B18A200D8C87C /* JSHTMLHtmlElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A85B18D0A1B18A200D8C87C /* JSHTMLHtmlElement.cpp */; };
                1AB7FC860A8B92EC00D9D37B /* XPathValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AB7FC650A8B92EC00D9D37B /* XPathValue.h */; };
                1AB7FC870A8B92EC00D9D37B /* XPathVariableReference.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AB7FC660A8B92EC00D9D37B /* XPathVariableReference.cpp */; };
                1AB7FC880A8B92EC00D9D37B /* XPathVariableReference.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AB7FC670A8B92EC00D9D37B /* XPathVariableReference.h */; };
+               1ABFE7530CD968D000FE4834 /* SQLTransaction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1ABFE7520CD968D000FE4834 /* SQLTransaction.cpp */; };
                1AC694C70A3B1676003F5049 /* PluginDocument.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AC694C50A3B1676003F5049 /* PluginDocument.cpp */; };
                1AC694C80A3B1676003F5049 /* PluginDocument.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AC694C60A3B1676003F5049 /* PluginDocument.h */; };
                1ACD1B630B029739007E5016 /* DOMCSSStyleDeclarationInternal.h in Copy Generated Headers */ = {isa = PBXBuildFile; fileRef = 85E711440AC5D5340053270F /* DOMCSSStyleDeclarationInternal.h */; };
                1ACE53EB0A8D18E70022947D /* XMLSerializer.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ACE53E50A8D18E70022947D /* XMLSerializer.h */; };
                1ACE53F60A8D19470022947D /* JSXMLSerializer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1ACE53F40A8D19470022947D /* JSXMLSerializer.cpp */; };
                1ACE53F70A8D19470022947D /* JSXMLSerializer.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ACE53F50A8D19470022947D /* JSXMLSerializer.h */; };
+               1AD2316E0CD269E700C1F194 /* JSSQLTransactionCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AD2316D0CD269E700C1F194 /* JSSQLTransactionCustom.cpp */; };
                1AD51A140CB59CD300953D11 /* DatabaseTracker.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AD51A120CB59CD300953D11 /* DatabaseTracker.h */; settings = {ATTRIBUTES = (Private, ); }; };
                1AD51A150CB59CD300953D11 /* DatabaseTracker.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AD51A130CB59CD300953D11 /* DatabaseTracker.cpp */; };
                1AE2AA1E0A1CDAB400B42B25 /* JSHTMLAreaElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AE2AA0A0A1CDAB300B42B25 /* JSHTMLAreaElement.cpp */; };
                1AE82F900CAAFA9D002237AE /* JSDatabase.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AE82F8E0CAAFA9D002237AE /* JSDatabase.h */; };
                1AE82FEC0CAB07EE002237AE /* JSSQLResultSet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AE82FEA0CAB07EE002237AE /* JSSQLResultSet.cpp */; };
                1AE82FED0CAB07EE002237AE /* JSSQLResultSet.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AE82FEB0CAB07EE002237AE /* JSSQLResultSet.h */; };
-               1AE8301D0CAB0999002237AE /* JSSQLCallback.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AE8301B0CAB0999002237AE /* JSSQLCallback.cpp */; };
-               1AE8301E0CAB0999002237AE /* JSSQLCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AE8301C0CAB0999002237AE /* JSSQLCallback.h */; };
                1AE830440CAB0ED1002237AE /* JSDatabaseCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AE830420CAB0ED1002237AE /* JSDatabaseCustom.cpp */; };
-               1AE831060CAB166E002237AE /* JSCustomSQLCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AE831040CAB166E002237AE /* JSCustomSQLCallback.h */; };
-               1AE831070CAB166E002237AE /* JSCustomSQLCallback.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AE831050CAB166E002237AE /* JSCustomSQLCallback.cpp */; };
                1AFE117D0CBFFB36003017FA /* SQLResultSetRowList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AFE117B0CBFFB36003017FA /* SQLResultSetRowList.cpp */; };
                1AFE117E0CBFFB36003017FA /* SQLResultSetRowList.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AFE117C0CBFFB36003017FA /* SQLResultSetRowList.h */; };
                1AFE11990CBFFCC4003017FA /* JSSQLResultSetRowList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AFE11970CBFFCC4003017FA /* JSSQLResultSetRowList.cpp */; };
                4E19592E0A39DACC00220FE5 /* MediaQueryExp.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E1959280A39DACC00220FE5 /* MediaQueryExp.h */; };
                510184690B08602A004A825F /* CachedPage.h in Headers */ = {isa = PBXBuildFile; fileRef = 510184670B08602A004A825F /* CachedPage.h */; settings = {ATTRIBUTES = (Private, ); }; };
                5101846A0B08602A004A825F /* CachedPage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 510184680B08602A004A825F /* CachedPage.cpp */; };
-               510F735F0B56C08800A3002A /* AuthenticationChallenge.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 510F73590B56C08800A3002A /* AuthenticationChallenge.cpp */; };
-               510F73600B56C08800A3002A /* AuthenticationChallenge.h in Headers */ = {isa = PBXBuildFile; fileRef = 510F735A0B56C08800A3002A /* AuthenticationChallenge.h */; settings = {ATTRIBUTES = (Private, ); }; };
-               510F73610B56C08800A3002A /* Credential.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 510F735B0B56C08800A3002A /* Credential.cpp */; };
-               510F73620B56C08800A3002A /* Credential.h in Headers */ = {isa = PBXBuildFile; fileRef = 510F735C0B56C08800A3002A /* Credential.h */; settings = {ATTRIBUTES = (Private, ); }; };
-               510F73630B56C08800A3002A /* ProtectionSpace.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 510F735D0B56C08800A3002A /* ProtectionSpace.cpp */; };
-               510F73640B56C08800A3002A /* ProtectionSpace.h in Headers */ = {isa = PBXBuildFile; fileRef = 510F735E0B56C08800A3002A /* ProtectionSpace.h */; settings = {ATTRIBUTES = (Private, ); }; };
                5126E6BB0A2E3B12005C29FA /* IconDatabase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5126E6B90A2E3B12005C29FA /* IconDatabase.cpp */; };
                5126E6BC0A2E3B12005C29FA /* IconDatabase.h in Headers */ = {isa = PBXBuildFile; fileRef = 5126E6BA0A2E3B12005C29FA /* IconDatabase.h */; settings = {ATTRIBUTES = (Private, ); }; };
-               513BF1080B4F558900CCFECE /* AuthenticationMac.h in Headers */ = {isa = PBXBuildFile; fileRef = 513BF1070B4F558900CCFECE /* AuthenticationMac.h */; settings = {ATTRIBUTES = (Private, ); }; };
-               513BF1280B4F57DC00CCFECE /* AuthenticationMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 513BF1270B4F57DC00CCFECE /* AuthenticationMac.mm */; };
                513F14530AB634C400094DDF /* IconLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 513F14510AB634C400094DDF /* IconLoader.cpp */; };
                513F14540AB634C400094DDF /* IconLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 513F14520AB634C400094DDF /* IconLoader.h */; };
+               514185EE0CD65F0400763C99 /* ChangeVersionWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 514185EC0CD65F0400763C99 /* ChangeVersionWrapper.h */; };
+               514185EF0CD65F0400763C99 /* ChangeVersionWrapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 514185ED0CD65F0400763C99 /* ChangeVersionWrapper.cpp */; };
                514B3F730C722047000530DF /* FileSystem.h in Headers */ = {isa = PBXBuildFile; fileRef = 514B3F720C722047000530DF /* FileSystem.h */; };
                514B3F760C722055000530DF /* FileSystemMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 514B3F750C722055000530DF /* FileSystemMac.mm */; };
+               514C762E0CE921F4007EF3CD /* UnicodeRange.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 514C762C0CE921F4007EF3CD /* UnicodeRange.cpp */; };
+               514C762F0CE921F4007EF3CD /* UnicodeRange.h in Headers */ = {isa = PBXBuildFile; fileRef = 514C762D0CE921F4007EF3CD /* UnicodeRange.h */; };
+               514C76370CE9225E007EF3CD /* JSSQLError.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 514C76350CE9225E007EF3CD /* JSSQLError.cpp */; };
+               514C76380CE9225E007EF3CD /* JSSQLTransaction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 514C76360CE9225E007EF3CD /* JSSQLTransaction.cpp */; };
+               514C764C0CE9234E007EF3CD /* AuthenticationMac.h in Headers */ = {isa = PBXBuildFile; fileRef = 514C76420CE9234E007EF3CD /* AuthenticationMac.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               514C764D0CE9234E007EF3CD /* AuthenticationMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 514C76430CE9234E007EF3CD /* AuthenticationMac.mm */; };
+               514C764E0CE9234E007EF3CD /* FormDataStreamMac.h in Headers */ = {isa = PBXBuildFile; fileRef = 514C76440CE9234E007EF3CD /* FormDataStreamMac.h */; };
+               514C764F0CE9234E007EF3CD /* FormDataStreamMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 514C76450CE9234E007EF3CD /* FormDataStreamMac.mm */; };
+               514C76500CE9234E007EF3CD /* ResourceErrorMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 514C76460CE9234E007EF3CD /* ResourceErrorMac.mm */; };
+               514C76510CE9234E007EF3CD /* ResourceHandleMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 514C76470CE9234E007EF3CD /* ResourceHandleMac.mm */; };
+               514C76520CE9234E007EF3CD /* ResourceRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 514C76480CE9234E007EF3CD /* ResourceRequest.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               514C76530CE9234E007EF3CD /* ResourceRequestMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 514C76490CE9234E007EF3CD /* ResourceRequestMac.mm */; };
+               514C76540CE9234E007EF3CD /* ResourceResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 514C764A0CE9234E007EF3CD /* ResourceResponse.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               514C76550CE9234F007EF3CD /* ResourceResponseMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 514C764B0CE9234E007EF3CD /* ResourceResponseMac.mm */; };
+               514C766B0CE923A1007EF3CD /* AuthenticationChallenge.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 514C76560CE923A1007EF3CD /* AuthenticationChallenge.cpp */; };
+               514C766C0CE923A1007EF3CD /* AuthenticationChallenge.h in Headers */ = {isa = PBXBuildFile; fileRef = 514C76570CE923A1007EF3CD /* AuthenticationChallenge.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               514C766D0CE923A1007EF3CD /* Credential.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 514C76580CE923A1007EF3CD /* Credential.cpp */; };
+               514C766E0CE923A1007EF3CD /* Credential.h in Headers */ = {isa = PBXBuildFile; fileRef = 514C76590CE923A1007EF3CD /* Credential.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               514C766F0CE923A1007EF3CD /* FormData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 514C765A0CE923A1007EF3CD /* FormData.cpp */; };
+               514C76700CE923A1007EF3CD /* FormData.h in Headers */ = {isa = PBXBuildFile; fileRef = 514C765B0CE923A1007EF3CD /* FormData.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               514C76710CE923A1007EF3CD /* HTTPHeaderMap.h in Headers */ = {isa = PBXBuildFile; fileRef = 514C765C0CE923A1007EF3CD /* HTTPHeaderMap.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               514C76720CE923A1007EF3CD /* HTTPParsers.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 514C765D0CE923A1007EF3CD /* HTTPParsers.cpp */; };
+               514C76730CE923A1007EF3CD /* HTTPParsers.h in Headers */ = {isa = PBXBuildFile; fileRef = 514C765E0CE923A1007EF3CD /* HTTPParsers.h */; };
+               514C76740CE923A1007EF3CD /* ProtectionSpace.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 514C765F0CE923A1007EF3CD /* ProtectionSpace.cpp */; };
+               514C76750CE923A1007EF3CD /* ProtectionSpace.h in Headers */ = {isa = PBXBuildFile; fileRef = 514C76600CE923A1007EF3CD /* ProtectionSpace.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               514C76760CE923A1007EF3CD /* ResourceError.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 514C76610CE923A1007EF3CD /* ResourceError.cpp */; };
+               514C76770CE923A1007EF3CD /* ResourceError.h in Headers */ = {isa = PBXBuildFile; fileRef = 514C76620CE923A1007EF3CD /* ResourceError.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               514C76780CE923A1007EF3CD /* ResourceHandle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 514C76630CE923A1007EF3CD /* ResourceHandle.cpp */; };
+               514C76790CE923A1007EF3CD /* ResourceHandle.h in Headers */ = {isa = PBXBuildFile; fileRef = 514C76640CE923A1007EF3CD /* ResourceHandle.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               514C767A0CE923A1007EF3CD /* ResourceHandleClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 514C76650CE923A1007EF3CD /* ResourceHandleClient.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               514C767B0CE923A1007EF3CD /* ResourceHandleInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 514C76660CE923A1007EF3CD /* ResourceHandleInternal.h */; };
+               514C767C0CE923A1007EF3CD /* ResourceRequestBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 514C76670CE923A1007EF3CD /* ResourceRequestBase.cpp */; };
+               514C767D0CE923A1007EF3CD /* ResourceRequestBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 514C76680CE923A1007EF3CD /* ResourceRequestBase.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               514C767E0CE923A1007EF3CD /* ResourceResponseBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 514C76690CE923A1007EF3CD /* ResourceResponseBase.cpp */; };
+               514C767F0CE923A1007EF3CD /* ResourceResponseBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 514C766A0CE923A1007EF3CD /* ResourceResponseBase.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               515B03990CD1642A00B7EA9C /* SQLStatement.h in Headers */ = {isa = PBXBuildFile; fileRef = 515B03970CD1642A00B7EA9C /* SQLStatement.h */; };
+               515B039A0CD1642A00B7EA9C /* SQLStatement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 515B03980CD1642A00B7EA9C /* SQLStatement.cpp */; };
                5160300B0CC4251200C8AC25 /* FileSystemPOSIX.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5160300A0CC4251200C8AC25 /* FileSystemPOSIX.cpp */; };
                5160306C0CC4362300C8AC25 /* FileSystemCF.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5160306B0CC4362300C8AC25 /* FileSystemCF.cpp */; };
                5160F3BC0B0A99C900C1D2AF /* CachedPageMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5160F3BB0B0A99C900C1D2AF /* CachedPageMac.mm */; };
                5160F4980B0AA75F00C1D2AF /* HistoryItemMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5160F4970B0AA75F00C1D2AF /* HistoryItemMac.mm */; };
+               516BB7930CE91E6800512F79 /* JSSVGPointListCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 516BB7910CE91E6800512F79 /* JSSVGPointListCustom.cpp */; };
+               516BB7940CE91E6800512F79 /* JSTreeWalkerCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 516BB7920CE91E6800512F79 /* JSTreeWalkerCustom.cpp */; };
                51741D0F0B07259A00ED442C /* BackForwardList.h in Headers */ = {isa = PBXBuildFile; fileRef = 51741D0B0B07259A00ED442C /* BackForwardList.h */; settings = {ATTRIBUTES = (Private, ); }; };
                51741D100B07259A00ED442C /* BackForwardList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 51741D0C0B07259A00ED442C /* BackForwardList.cpp */; };
                51741D110B07259A00ED442C /* HistoryItem.h in Headers */ = {isa = PBXBuildFile; fileRef = 51741D0D0B07259A00ED442C /* HistoryItem.h */; settings = {ATTRIBUTES = (Private, ); }; };
                5196116A0CAC56570010A80C /* Database.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5196115E0CAC56570010A80C /* Database.cpp */; };
                5196116B0CAC56570010A80C /* Database.h in Headers */ = {isa = PBXBuildFile; fileRef = 5196115F0CAC56570010A80C /* Database.h */; };
                5196116D0CAC56570010A80C /* DatabaseThread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 519611610CAC56570010A80C /* DatabaseThread.cpp */; };
-               519611710CAC56570010A80C /* SQLCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = 519611650CAC56570010A80C /* SQLCallback.h */; };
                519611730CAC56570010A80C /* SQLResultSet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 519611670CAC56570010A80C /* SQLResultSet.cpp */; };
                519611740CAC56570010A80C /* SQLResultSet.h in Headers */ = {isa = PBXBuildFile; fileRef = 519611680CAC56570010A80C /* SQLResultSet.h */; };
                519611780CAC56A80010A80C /* DatabaseThread.h in Headers */ = {isa = PBXBuildFile; fileRef = 519611620CAC56570010A80C /* DatabaseThread.h */; };
                51E1ECC30C91C90400DC255B /* PageURLRecord.h in Headers */ = {isa = PBXBuildFile; fileRef = 51E1ECBD0C91C90400DC255B /* PageURLRecord.h */; };
                51E4ADB60C42B4CF0042BC55 /* FTPDirectoryDocument.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 51E4ADB20C42B4CF0042BC55 /* FTPDirectoryDocument.cpp */; };
                51E4ADB70C42B4CF0042BC55 /* FTPDirectoryDocument.h in Headers */ = {isa = PBXBuildFile; fileRef = 51E4ADB30C42B4CF0042BC55 /* FTPDirectoryDocument.h */; };
-               51EC054F0CC6A615001DA88F /* DatabaseCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = 51EC054E0CC6A615001DA88F /* DatabaseCallback.h */; };
-               51EC05510CC6ACBA001DA88F /* DatabaseCallback.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 51EC05500CC6ACBA001DA88F /* DatabaseCallback.cpp */; };
+               51EC92590CE90DB400F90308 /* SQLError.h in Headers */ = {isa = PBXBuildFile; fileRef = 51EC92570CE90DB400F90308 /* SQLError.h */; };
+               51EC925A0CE90DB400F90308 /* SQLError.idl in Resources */ = {isa = PBXBuildFile; fileRef = 51EC92580CE90DB400F90308 /* SQLError.idl */; };
+               51EC92630CE90DD400F90308 /* JSCustomSQLStatementCallback.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 51EC925B0CE90DD400F90308 /* JSCustomSQLStatementCallback.cpp */; };
+               51EC92640CE90DD400F90308 /* JSCustomSQLStatementCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = 51EC925C0CE90DD400F90308 /* JSCustomSQLStatementCallback.h */; };
+               51EC92650CE90DD400F90308 /* JSCustomSQLStatementErrorCallback.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 51EC925D0CE90DD400F90308 /* JSCustomSQLStatementErrorCallback.cpp */; };
+               51EC92660CE90DD400F90308 /* JSCustomSQLStatementErrorCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = 51EC925E0CE90DD400F90308 /* JSCustomSQLStatementErrorCallback.h */; };
+               51EC92670CE90DD400F90308 /* JSCustomSQLTransactionCallback.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 51EC925F0CE90DD400F90308 /* JSCustomSQLTransactionCallback.cpp */; };
+               51EC92680CE90DD400F90308 /* JSCustomSQLTransactionCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = 51EC92600CE90DD400F90308 /* JSCustomSQLTransactionCallback.h */; };
+               51EC92690CE90DD400F90308 /* JSCustomSQLTransactionErrorCallback.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 51EC92610CE90DD400F90308 /* JSCustomSQLTransactionErrorCallback.cpp */; };
+               51EC926A0CE90DD400F90308 /* JSCustomSQLTransactionErrorCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = 51EC92620CE90DD400F90308 /* JSCustomSQLTransactionErrorCallback.h */; };
                550A0BC9085F6039007353D6 /* QualifiedName.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 550A0BC7085F6039007353D6 /* QualifiedName.cpp */; };
                550A0BCA085F6039007353D6 /* QualifiedName.h in Headers */ = {isa = PBXBuildFile; fileRef = 550A0BC8085F6039007353D6 /* QualifiedName.h */; settings = {ATTRIBUTES = (Private, ); }; };
-               650E3F6A0AF6C168001FA3AD /* ResourceRequestMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 650E3F680AF6C168001FA3AD /* ResourceRequestMac.mm */; };
                650F53DC09D15DDA00C9B0C8 /* CSSGrammar.h in Headers */ = {isa = PBXBuildFile; fileRef = 650F53DB09D15DDA00C9B0C8 /* CSSGrammar.h */; };
                650F53DD09D15DDF00C9B0C8 /* CSSGrammar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6565814409D13043000E61D7 /* CSSGrammar.cpp */; };
-               651888880AFF3BF700164720 /* ResourceError.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 651888860AFF3BF700164720 /* ResourceError.cpp */; };
-               651888890AFF3BF700164720 /* ResourceError.h in Headers */ = {isa = PBXBuildFile; fileRef = 651888870AFF3BF700164720 /* ResourceError.h */; settings = {ATTRIBUTES = (Private, ); }; };
-               6518888B0AFF3C1400164720 /* ResourceErrorMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 6518888A0AFF3C1400164720 /* ResourceErrorMac.mm */; };
                651B4D8509AC83370029F1EF /* DeprecatedStringList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 651B4D8309AC83370029F1EF /* DeprecatedStringList.cpp */; };
                651B4D8609AC83370029F1EF /* DeprecatedStringList.h in Headers */ = {isa = PBXBuildFile; fileRef = 651B4D8409AC83370029F1EF /* DeprecatedStringList.h */; };
                651B4D8F09AC859F0029F1EF /* DeprecatedStringListMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 651B4D8E09AC859F0029F1EF /* DeprecatedStringListMac.mm */; };
                6550B6A4099DF0270090D781 /* EditingText.h in Headers */ = {isa = PBXBuildFile; fileRef = 6550B69A099DF0270090D781 /* EditingText.h */; };
                6550B6A5099DF0270090D781 /* Text.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6550B69B099DF0270090D781 /* Text.cpp */; };
                6550B6A6099DF0270090D781 /* Text.h in Headers */ = {isa = PBXBuildFile; fileRef = 6550B69C099DF0270090D781 /* Text.h */; settings = {ATTRIBUTES = (Private, ); }; };
-               655A81BE0AEF67E6000975F0 /* HTTPHeaderMap.h in Headers */ = {isa = PBXBuildFile; fileRef = 655A81BD0AEF67E6000975F0 /* HTTPHeaderMap.h */; settings = {ATTRIBUTES = (Private, ); }; };
                656580F409D12B20000E61D7 /* CSSPropertyNames.h in Headers */ = {isa = PBXBuildFile; fileRef = 656580EF09D12B20000E61D7 /* CSSPropertyNames.h */; };
                6565815109D13043000E61D7 /* CSSValueKeywords.h in Headers */ = {isa = PBXBuildFile; fileRef = 6565814809D13043000E61D7 /* CSSValueKeywords.h */; };
                656581B209D14EE6000E61D7 /* UserAgentStyleSheets.h in Headers */ = {isa = PBXBuildFile; fileRef = 656581AE09D14EE6000E61D7 /* UserAgentStyleSheets.h */; };
                656581FE09D1508D000E61D7 /* SVGElementFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 656581E709D1508D000E61D7 /* SVGElementFactory.h */; };
                6565820009D1508D000E61D7 /* SVGNames.h in Headers */ = {isa = PBXBuildFile; fileRef = 656581E909D1508D000E61D7 /* SVGNames.h */; };
                6565820209D1508D000E61D7 /* XLinkNames.h in Headers */ = {isa = PBXBuildFile; fileRef = 656581EB09D1508D000E61D7 /* XLinkNames.h */; };
-               656B84E00AEA1D3100A095B4 /* ResourceHandle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 656B84DC0AEA1D3100A095B4 /* ResourceHandle.cpp */; };
-               656B84E20AEA1D3100A095B4 /* ResourceHandleClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 656B84DE0AEA1D3100A095B4 /* ResourceHandleClient.h */; settings = {ATTRIBUTES = (Private, ); }; };
-               656B84E30AEA1D3100A095B4 /* ResourceHandleInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 656B84DF0AEA1D3100A095B4 /* ResourceHandleInternal.h */; };
-               656B84EB0AEA1DDA00A095B4 /* ResourceHandleMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 656B84EA0AEA1DDA00A095B4 /* ResourceHandleMac.mm */; };
-               656B85380AEA1F9A00A095B4 /* ResourceHandle.h in Headers */ = {isa = PBXBuildFile; fileRef = 656B85370AEA1F9A00A095B4 /* ResourceHandle.h */; settings = {ATTRIBUTES = (Private, ); }; };
                656D37320ADBA5DE00A4554D /* LoaderNSURLExtras.h in Headers */ = {isa = PBXBuildFile; fileRef = 656D371A0ADBA5DE00A4554D /* LoaderNSURLExtras.h */; settings = {ATTRIBUTES = (Private, ); }; };
                656D37330ADBA5DE00A4554D /* LoaderNSURLExtras.m in Sources */ = {isa = PBXBuildFile; fileRef = 656D371B0ADBA5DE00A4554D /* LoaderNSURLExtras.m */; };
                656D37360ADBA5DE00A4554D /* DocumentLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 656D371E0ADBA5DE00A4554D /* DocumentLoader.h */; settings = {ATTRIBUTES = (Private, ); }; };
                6582A16309999D6D00BEEB6D /* SystemTimeMac.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6582A15509999D6D00BEEB6D /* SystemTimeMac.cpp */; };
                6582A17809999EA000BEEB6D /* DeprecatedStringMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 6582A17709999EA000BEEB6D /* DeprecatedStringMac.mm */; };
                658436860AE01B7400E53753 /* FrameLoadRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 658436850AE01B7400E53753 /* FrameLoadRequest.h */; settings = {ATTRIBUTES = (Private, ); }; };
-               6588216C0AF4CE1200F01D1F /* ResourceResponseMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 658821690AF4CE1200F01D1F /* ResourceResponseMac.mm */; };
                6593923709AE4346002C531F /* KURL.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6593923509AE4346002C531F /* KURL.cpp */; };
                6593923809AE4346002C531F /* KURL.h in Headers */ = {isa = PBXBuildFile; fileRef = 6593923609AE4346002C531F /* KURL.h */; settings = {ATTRIBUTES = (Private, ); }; };
                6593923A09AE435C002C531F /* KURLMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 6593923909AE435C002C531F /* KURLMac.mm */; };
                65CBFEF90974F607001DAC25 /* FrameView.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 65CBFEF70974F607001DAC25 /* FrameView.cpp */; };
                65CBFEFA0974F607001DAC25 /* FrameView.h in Headers */ = {isa = PBXBuildFile; fileRef = 65CBFEF80974F607001DAC25 /* FrameView.h */; settings = {ATTRIBUTES = (Private, ); }; };
                65D1C1CA09932B22000CB324 /* Plugin.h in Headers */ = {isa = PBXBuildFile; fileRef = 65D1C1C909932B22000CB324 /* Plugin.h */; };
-               65DAD9FC0AFD86B400CE53ED /* FormData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 65DAD9FA0AFD86B400CE53ED /* FormData.cpp */; };
-               65DADA000AFD86BF00CE53ED /* FormDataStreamMac.h in Headers */ = {isa = PBXBuildFile; fileRef = 65DAD9FE0AFD86BF00CE53ED /* FormDataStreamMac.h */; };
-               65DADA010AFD86BF00CE53ED /* FormDataStreamMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 65DAD9FF0AFD86BF00CE53ED /* FormDataStreamMac.mm */; };
-               65DADA180AFD878000CE53ED /* FormData.h in Headers */ = {isa = PBXBuildFile; fileRef = 65DADA170AFD878000CE53ED /* FormData.h */; settings = {ATTRIBUTES = (Private, ); }; };
                65DF31DA09D1C123000BE325 /* JSAttr.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 65DF31D809D1C122000BE325 /* JSAttr.cpp */; };
                65DF31DB09D1C123000BE325 /* JSAttr.h in Headers */ = {isa = PBXBuildFile; fileRef = 65DF31D909D1C123000BE325 /* JSAttr.h */; };
                65DF31F309D1CC60000BE325 /* JSCharacterData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 65DF31DF09D1CC60000BE325 /* JSCharacterData.cpp */; };
                93CD4FE30995F9EA007ECC97 /* StringImpl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 93CD4FDC0995F9EA007ECC97 /* StringImpl.cpp */; };
                93CD4FE40995F9EA007ECC97 /* StringImpl.h in Headers */ = {isa = PBXBuildFile; fileRef = 93CD4FDD0995F9EA007ECC97 /* StringImpl.h */; settings = {ATTRIBUTES = (Private, ); }; };
                93CD4FEC0995FD2A007ECC97 /* PlatformString.h in Headers */ = {isa = PBXBuildFile; fileRef = 93CD4FEB0995FD2A007ECC97 /* PlatformString.h */; settings = {ATTRIBUTES = (Private, ); }; };
-               93CDDE280C239A4800CD57AE /* ResourceRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 93CDDE270C239A4800CD57AE /* ResourceRequest.h */; settings = {ATTRIBUTES = (Private, ); }; };
-               93D82A490C28CF1E00FD703D /* ResourceRequestBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 93D82A470C28CF1E00FD703D /* ResourceRequestBase.cpp */; };
-               93D82A4A0C28CF1E00FD703D /* ResourceRequestBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 93D82A480C28CF1E00FD703D /* ResourceRequestBase.h */; settings = {ATTRIBUTES = (Private, ); }; };
                93E227E00AF589AD00D48324 /* DocumentLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 93E227DB0AF589AD00D48324 /* DocumentLoader.cpp */; };
                93E227E10AF589AD00D48324 /* MainResourceLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 93E227DC0AF589AD00D48324 /* MainResourceLoader.cpp */; };
                93E227E20AF589AD00D48324 /* NetscapePlugInStreamLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 93E227DD0AF589AD00D48324 /* NetscapePlugInStreamLoader.cpp */; };
                ABDDFE7A0A5C6E7000A3E11D /* RenderMenuList.h in Headers */ = {isa = PBXBuildFile; fileRef = ABDDFE740A5C6E7000A3E11D /* RenderMenuList.h */; };
                B20111070AB7740500DB0E68 /* JSSVGAElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B20111050AB7740500DB0E68 /* JSSVGAElement.cpp */; };
                B20111080AB7740500DB0E68 /* JSSVGAElement.h in Headers */ = {isa = PBXBuildFile; fileRef = B20111060AB7740500DB0E68 /* JSSVGAElement.h */; };
-               B2080A120B3CA3B600120852 /* JSSVGPointListCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B2080A110B3CA3B600120852 /* JSSVGPointListCustom.cpp */; };
                B20964BF0AB76EF600E4C740 /* SVGAngle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B20964BD0AB76EF600E4C740 /* SVGAngle.cpp */; };
                B20964C00AB76EF600E4C740 /* SVGAngle.h in Headers */ = {isa = PBXBuildFile; fileRef = B20964BE0AB76EF600E4C740 /* SVGAngle.h */; };
                B21127A60B3186770009BE53 /* JSSVGPODTypeWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = B21127A50B3186770009BE53 /* JSSVGPODTypeWrapper.h */; };
                B27535820B053814002CE64F /* Pen.h in Headers */ = {isa = PBXBuildFile; fileRef = B27535550B053814002CE64F /* Pen.h */; };
                B275358E0B053A66002CE64F /* IconMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = B275358D0B053A66002CE64F /* IconMac.mm */; };
                B277B4040B22F37C0004BEC6 /* GraphicsContextMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = B277B4030B22F37C0004BEC6 /* GraphicsContextMac.mm */; };
-               B287B22E0CE66A820054D390 /* UnicodeRange.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B287B22C0CE66A820054D390 /* UnicodeRange.cpp */; };
-               B287B22F0CE66A820054D390 /* UnicodeRange.h in Headers */ = {isa = PBXBuildFile; fileRef = B287B22D0CE66A820054D390 /* UnicodeRange.h */; };
                B297BC700B3C14CF0045A590 /* JSSVGPathSegListCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B297BC6F0B3C14CF0045A590 /* JSSVGPathSegListCustom.cpp */; };
                B2A015A80AF6CD53006BCE0E /* GraphicsContext.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B2A015920AF6CD53006BCE0E /* GraphicsContext.cpp */; };
                B2A015A90AF6CD53006BCE0E /* GraphicsContext.h in Headers */ = {isa = PBXBuildFile; fileRef = B2A015930AF6CD53006BCE0E /* GraphicsContext.h */; };
                E14843D60A6754A6007E4D39 /* TextCodecMac.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E14843910A6752BF007E4D39 /* TextCodecMac.cpp */; };
                E15863990CD10B730066E2C9 /* TextCodecUserDefined.h in Headers */ = {isa = PBXBuildFile; fileRef = E15863970CD10B730066E2C9 /* TextCodecUserDefined.h */; };
                E158639A0CD10B730066E2C9 /* TextCodecUserDefined.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E15863980CD10B730066E2C9 /* TextCodecUserDefined.cpp */; };
-               E1D8E3160B29E39C00F4BAF6 /* HTTPParsers.h in Headers */ = {isa = PBXBuildFile; fileRef = E1D8E3150B29E39C00F4BAF6 /* HTTPParsers.h */; };
-               E1D8E31A0B29E3B600F4BAF6 /* HTTPParsers.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E1D8E3190B29E3B600F4BAF6 /* HTTPParsers.cpp */; };
                E1E6EEA40B628DA8005F2F70 /* JSHTMLSelectElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E1E6EEA30B628DA8005F2F70 /* JSHTMLSelectElement.cpp */; };
                E1E6EEA80B628DB3005F2F70 /* JSHTMLSelectElement.h in Headers */ = {isa = PBXBuildFile; fileRef = E1E6EEA70B628DB3005F2F70 /* JSHTMLSelectElement.h */; };
                E1EBBBD40AAC9B87001FE8E2 /* CSSCharsetRule.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E1EBBBD30AAC9B87001FE8E2 /* CSSCharsetRule.cpp */; };
                ED501DC60B249F2900AE18D9 /* EditorMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = ED501DC50B249F2900AE18D9 /* EditorMac.mm */; };
                EDE3A5000C7A430600956A37 /* ColorMac.h in Headers */ = {isa = PBXBuildFile; fileRef = EDE3A4FF0C7A430600956A37 /* ColorMac.h */; settings = {ATTRIBUTES = (Private, ); }; };
                EDEC98030AED7E170059137F /* WebCorePrefix.h in Headers */ = {isa = PBXBuildFile; fileRef = EDEC98020AED7E170059137F /* WebCorePrefix.h */; };
-               F9541E5E0CE35B7800CB14EE /* ResourceResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = F9541E5D0CE35B7800CB14EE /* ResourceResponse.h */; settings = {ATTRIBUTES = (Private, ); }; };
                F971E27FD70F4382BC66D792 /* BidiContext.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A579C284B928484FB9A446BC /* BidiContext.cpp */; };
-               F9B9A1AD0CE271DD009F992E /* ResourceResponseBase.h in Headers */ = {isa = PBXBuildFile; fileRef = F9B9A1AC0CE271DC009F992E /* ResourceResponseBase.h */; settings = {ATTRIBUTES = (Private, ); }; };
-               F9B9A1AF0CE271F6009F992E /* ResourceResponseBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9B9A1AE0CE271F6009F992E /* ResourceResponseBase.cpp */; };
                FAE0418F097596C9000540BE /* SVGImageLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FAE0418D097596C9000540BE /* SVGImageLoader.cpp */; };
                FAE04190097596C9000540BE /* SVGImageLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = FAE0418E097596C9000540BE /* SVGImageLoader.h */; };
 /* End PBXBuildFile section */
                1A2E6E780CC556D5004A2062 /* SQLiteAuthorizer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SQLiteAuthorizer.cpp; path = sql/SQLiteAuthorizer.cpp; sourceTree = "<group>"; };
                1A2E6E790CC556D5004A2062 /* SQLiteAuthorizer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SQLiteAuthorizer.h; path = sql/SQLiteAuthorizer.h; sourceTree = "<group>"; };
                1A2E6FA30CC5795D004A2062 /* ThreadingPthreads.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ThreadingPthreads.cpp; path = pthreads/ThreadingPthreads.cpp; sourceTree = "<group>"; };
-               1A2E6FF30CC67855004A2062 /* VersionChangeCallback.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VersionChangeCallback.h; sourceTree = "<group>"; };
-               1A2E6FF70CC6788D004A2062 /* VersionChangeCallback.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = VersionChangeCallback.idl; sourceTree = "<group>"; };
-               1A2E6FFC0CC67907004A2062 /* JSVersionChangeCallback.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 4; path = JSVersionChangeCallback.cpp; sourceTree = "<group>"; };
-               1A2E6FFD0CC67907004A2062 /* JSVersionChangeCallback.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSVersionChangeCallback.h; sourceTree = "<group>"; };
-               1A2E70600CC67CAA004A2062 /* JSCustomVersionChangeCallback.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSCustomVersionChangeCallback.h; sourceTree = "<group>"; };
-               1A2E70610CC67CAA004A2062 /* JSCustomVersionChangeCallback.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSCustomVersionChangeCallback.cpp; sourceTree = "<group>"; };
                1A3178920B20A81600316987 /* SubresourceLoaderClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SubresourceLoaderClient.h; sourceTree = "<group>"; };
                1A494BBB0A122DCD00FDAFC1 /* HTMLElement.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = HTMLElement.idl; sourceTree = "<group>"; };
                1A494BF80A122F4400FDAFC1 /* JSHTMLElement.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JSHTMLElement.cpp; sourceTree = "<group>"; };
                1A750D8B0A90E521000FF215 /* JSNodeIterator.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JSNodeIterator.cpp; sourceTree = "<group>"; };
                1A750D8C0A90E521000FF215 /* JSNodeIterator.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = JSNodeIterator.h; sourceTree = "<group>"; };
                1A750DD30A90E729000FF215 /* JSNodeIteratorCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSNodeIteratorCustom.cpp; sourceTree = "<group>"; };
-               1A750E330A90F89F000FF215 /* JSTreeWalkerCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JSTreeWalkerCustom.cpp; sourceTree = "<group>"; };
                1A7629D30A07425100989F5B /* XPathGrammar.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = XPathGrammar.cpp; sourceTree = "<group>"; };
                1A7629D40A07425100989F5B /* XPathGrammar.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = XPathGrammar.h; sourceTree = "<group>"; };
                1A762C6B0A074F2600989F5B /* JSXPathEvaluator.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JSXPathEvaluator.cpp; sourceTree = "<group>"; };
                1A762C700A074F2600989F5B /* JSXPathNSResolver.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = JSXPathNSResolver.h; sourceTree = "<group>"; };
                1A762C710A074F2600989F5B /* JSXPathResult.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JSXPathResult.cpp; sourceTree = "<group>"; };
                1A762C720A074F2600989F5B /* JSXPathResult.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = JSXPathResult.h; sourceTree = "<group>"; };
-               1A7CCAE80CD901A100B7B64E /* SQLError.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SQLError.h; sourceTree = "<group>"; };
-               1A7CCAE90CD901A100B7B64E /* SQLError.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = SQLError.idl; sourceTree = "<group>"; };
-               1A7CCAEC0CD901DB00B7B64E /* JSSQLError.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSSQLError.cpp; sourceTree = "<group>"; };
-               1A7CCAED0CD901DB00B7B64E /* JSSQLError.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSSQLError.h; sourceTree = "<group>"; };
-               1A7CCAFB0CD945DD00B7B64E /* JSCustomSQLStatementCallback.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSCustomSQLStatementCallback.cpp; sourceTree = "<group>"; };
-               1A7CCAFC0CD945DD00B7B64E /* JSCustomSQLStatementCallback.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSCustomSQLStatementCallback.h; sourceTree = "<group>"; };
-               1A7CCAFD0CD945DD00B7B64E /* JSCustomSQLStatementErrorCallback.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSCustomSQLStatementErrorCallback.cpp; sourceTree = "<group>"; };
-               1A7CCAFE0CD945DD00B7B64E /* JSCustomSQLStatementErrorCallback.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSCustomSQLStatementErrorCallback.h; sourceTree = "<group>"; };
-               1A7CCAFF0CD945DD00B7B64E /* JSCustomSQLTransactionCallback.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSCustomSQLTransactionCallback.cpp; sourceTree = "<group>"; };
-               1A7CCB000CD945DD00B7B64E /* JSCustomSQLTransactionCallback.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSCustomSQLTransactionCallback.h; sourceTree = "<group>"; };
-               1A7CCB010CD945DD00B7B64E /* JSCustomSQLTransactionErrorCallback.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSCustomSQLTransactionErrorCallback.cpp; sourceTree = "<group>"; };
-               1A7CCB020CD945DD00B7B64E /* JSCustomSQLTransactionErrorCallback.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSCustomSQLTransactionErrorCallback.h; sourceTree = "<group>"; };
                1A7CCB0C0CD9462C00B7B64E /* SQLStatementCallback.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = SQLStatementCallback.idl; sourceTree = "<group>"; };
                1A7CCB0D0CD9462C00B7B64E /* SQLStatementErrorCallback.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = SQLStatementErrorCallback.idl; sourceTree = "<group>"; };
                1A7CCB0E0CD9462C00B7B64E /* SQLTransactionCallback.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = SQLTransactionCallback.idl; sourceTree = "<group>"; };
                1A7CCB180CD9469A00B7B64E /* SQLTransactionErrorCallback.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SQLTransactionErrorCallback.h; sourceTree = "<group>"; };
                1A7CCB220CD946FD00B7B64E /* SQLTransaction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SQLTransaction.h; sourceTree = "<group>"; };
                1A7CCB230CD946FD00B7B64E /* SQLTransaction.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = SQLTransaction.idl; sourceTree = "<group>"; };
-               1A7CCB2C0CD9499700B7B64E /* JSSQLTransaction.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSSQLTransaction.cpp; sourceTree = "<group>"; };
-               1A7CCB2D0CD9499700B7B64E /* JSSQLTransaction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSSQLTransaction.h; sourceTree = "<group>"; };
                1A820D8F0A13EBA600AF843C /* ImageDocument.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = ImageDocument.cpp; sourceTree = "<group>"; };
                1A820D900A13EBA600AF843C /* ImageDocument.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = ImageDocument.h; sourceTree = "<group>"; };
                1A85B17D0A1B183600D8C87C /* HTMLHtmlElement.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = HTMLHtmlElement.idl; sourceTree = "<group>"; };
                1AB7FC650A8B92EC00D9D37B /* XPathValue.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = XPathValue.h; sourceTree = "<group>"; };
                1AB7FC660A8B92EC00D9D37B /* XPathVariableReference.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = XPathVariableReference.cpp; sourceTree = "<group>"; };
                1AB7FC670A8B92EC00D9D37B /* XPathVariableReference.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = XPathVariableReference.h; sourceTree = "<group>"; };
+               1ABFE7520CD968D000FE4834 /* SQLTransaction.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SQLTransaction.cpp; sourceTree = "<group>"; };
                1AC694C50A3B1676003F5049 /* PluginDocument.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = PluginDocument.cpp; sourceTree = "<group>"; };
                1AC694C60A3B1676003F5049 /* PluginDocument.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = PluginDocument.h; sourceTree = "<group>"; };
                1ACE53DD0A8D18810022947D /* JSDOMParser.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JSDOMParser.cpp; sourceTree = "<group>"; };
                1ACE53E60A8D18E70022947D /* XMLSerializer.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = XMLSerializer.idl; sourceTree = "<group>"; };
                1ACE53F40A8D19470022947D /* JSXMLSerializer.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JSXMLSerializer.cpp; sourceTree = "<group>"; };
                1ACE53F50A8D19470022947D /* JSXMLSerializer.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = JSXMLSerializer.h; sourceTree = "<group>"; };
+               1AD2316D0CD269E700C1F194 /* JSSQLTransactionCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSSQLTransactionCustom.cpp; sourceTree = "<group>"; };
                1AD51A120CB59CD300953D11 /* DatabaseTracker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DatabaseTracker.h; sourceTree = "<group>"; };
                1AD51A130CB59CD300953D11 /* DatabaseTracker.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DatabaseTracker.cpp; sourceTree = "<group>"; };
                1AE2A9F00A1CDA5700B42B25 /* HTMLAreaElement.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = HTMLAreaElement.idl; sourceTree = "<group>"; };
                1AE82F8E0CAAFA9D002237AE /* JSDatabase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSDatabase.h; sourceTree = "<group>"; };
                1AE82FEA0CAB07EE002237AE /* JSSQLResultSet.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 4; path = JSSQLResultSet.cpp; sourceTree = "<group>"; };
                1AE82FEB0CAB07EE002237AE /* JSSQLResultSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSSQLResultSet.h; sourceTree = "<group>"; };
-               1AE8301B0CAB0999002237AE /* JSSQLCallback.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 4; path = JSSQLCallback.cpp; sourceTree = "<group>"; };
-               1AE8301C0CAB0999002237AE /* JSSQLCallback.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSSQLCallback.h; sourceTree = "<group>"; };
                1AE830420CAB0ED1002237AE /* JSDatabaseCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSDatabaseCustom.cpp; sourceTree = "<group>"; };
-               1AE831040CAB166E002237AE /* JSCustomSQLCallback.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSCustomSQLCallback.h; sourceTree = "<group>"; };
-               1AE831050CAB166E002237AE /* JSCustomSQLCallback.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSCustomSQLCallback.cpp; sourceTree = "<group>"; };
                1AFE117B0CBFFB36003017FA /* SQLResultSetRowList.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SQLResultSetRowList.cpp; sourceTree = "<group>"; };
                1AFE117C0CBFFB36003017FA /* SQLResultSetRowList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SQLResultSetRowList.h; sourceTree = "<group>"; };
                1AFE118C0CBFFC4E003017FA /* SQLResultSetRowList.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = SQLResultSetRowList.idl; sourceTree = "<group>"; };
                4E1959280A39DACC00220FE5 /* MediaQueryExp.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = MediaQueryExp.h; sourceTree = "<group>"; };
                510184670B08602A004A825F /* CachedPage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CachedPage.h; sourceTree = "<group>"; };
                510184680B08602A004A825F /* CachedPage.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CachedPage.cpp; sourceTree = "<group>"; };
-               510F73590B56C08800A3002A /* AuthenticationChallenge.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = AuthenticationChallenge.cpp; sourceTree = "<group>"; };
-               510F735A0B56C08800A3002A /* AuthenticationChallenge.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = AuthenticationChallenge.h; sourceTree = "<group>"; };
-               510F735B0B56C08800A3002A /* Credential.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = Credential.cpp; sourceTree = "<group>"; };
-               510F735C0B56C08800A3002A /* Credential.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = Credential.h; sourceTree = "<group>"; };
-               510F735D0B56C08800A3002A /* ProtectionSpace.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = ProtectionSpace.cpp; sourceTree = "<group>"; };
-               510F735E0B56C08800A3002A /* ProtectionSpace.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = ProtectionSpace.h; sourceTree = "<group>"; };
                5126E6B90A2E3B12005C29FA /* IconDatabase.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = IconDatabase.cpp; sourceTree = "<group>"; };
                5126E6BA0A2E3B12005C29FA /* IconDatabase.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = IconDatabase.h; sourceTree = "<group>"; };
-               513BF1070B4F558900CCFECE /* AuthenticationMac.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AuthenticationMac.h; sourceTree = "<group>"; };
-               513BF1270B4F57DC00CCFECE /* AuthenticationMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = AuthenticationMac.mm; sourceTree = "<group>"; };
                513F14510AB634C400094DDF /* IconLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = IconLoader.cpp; sourceTree = "<group>"; };
                513F14520AB634C400094DDF /* IconLoader.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = IconLoader.h; sourceTree = "<group>"; };
+               514185EC0CD65F0400763C99 /* ChangeVersionWrapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ChangeVersionWrapper.h; sourceTree = "<group>"; };
+               514185ED0CD65F0400763C99 /* ChangeVersionWrapper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ChangeVersionWrapper.cpp; sourceTree = "<group>"; };
                514AF320BE854014A7DA49FB /* BidiContext.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BidiContext.h; sourceTree = "<group>"; };
                514B3F720C722047000530DF /* FileSystem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FileSystem.h; sourceTree = "<group>"; };
                514B3F750C722055000530DF /* FileSystemMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = FileSystemMac.mm; sourceTree = "<group>"; };
+               514C762C0CE921F4007EF3CD /* UnicodeRange.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = UnicodeRange.cpp; sourceTree = "<group>"; };
+               514C762D0CE921F4007EF3CD /* UnicodeRange.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UnicodeRange.h; sourceTree = "<group>"; };
+               514C76350CE9225E007EF3CD /* JSSQLError.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSSQLError.cpp; sourceTree = "<group>"; };
+               514C76360CE9225E007EF3CD /* JSSQLTransaction.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSSQLTransaction.cpp; sourceTree = "<group>"; };
+               514C76420CE9234E007EF3CD /* AuthenticationMac.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AuthenticationMac.h; sourceTree = "<group>"; };
+               514C76430CE9234E007EF3CD /* AuthenticationMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = AuthenticationMac.mm; sourceTree = "<group>"; };
+               514C76440CE9234E007EF3CD /* FormDataStreamMac.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FormDataStreamMac.h; sourceTree = "<group>"; };
+               514C76450CE9234E007EF3CD /* FormDataStreamMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = FormDataStreamMac.mm; sourceTree = "<group>"; };
+               514C76460CE9234E007EF3CD /* ResourceErrorMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ResourceErrorMac.mm; sourceTree = "<group>"; };
+               514C76470CE9234E007EF3CD /* ResourceHandleMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ResourceHandleMac.mm; sourceTree = "<group>"; };
+               514C76480CE9234E007EF3CD /* ResourceRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ResourceRequest.h; sourceTree = "<group>"; };
+               514C76490CE9234E007EF3CD /* ResourceRequestMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ResourceRequestMac.mm; sourceTree = "<group>"; };
+               514C764A0CE9234E007EF3CD /* ResourceResponse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ResourceResponse.h; sourceTree = "<group>"; };
+               514C764B0CE9234E007EF3CD /* ResourceResponseMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ResourceResponseMac.mm; sourceTree = "<group>"; };
+               514C76560CE923A1007EF3CD /* AuthenticationChallenge.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AuthenticationChallenge.cpp; sourceTree = "<group>"; };
+               514C76570CE923A1007EF3CD /* AuthenticationChallenge.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AuthenticationChallenge.h; sourceTree = "<group>"; };
+               514C76580CE923A1007EF3CD /* Credential.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Credential.cpp; sourceTree = "<group>"; };
+               514C76590CE923A1007EF3CD /* Credential.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Credential.h; sourceTree = "<group>"; };
+               514C765A0CE923A1007EF3CD /* FormData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FormData.cpp; sourceTree = "<group>"; };
+               514C765B0CE923A1007EF3CD /* FormData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FormData.h; sourceTree = "<group>"; };
+               514C765C0CE923A1007EF3CD /* HTTPHeaderMap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HTTPHeaderMap.h; sourceTree = "<group>"; };
+               514C765D0CE923A1007EF3CD /* HTTPParsers.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HTTPParsers.cpp; sourceTree = "<group>"; };
+               514C765E0CE923A1007EF3CD /* HTTPParsers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HTTPParsers.h; sourceTree = "<group>"; };
+               514C765F0CE923A1007EF3CD /* ProtectionSpace.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ProtectionSpace.cpp; sourceTree = "<group>"; };
+               514C76600CE923A1007EF3CD /* ProtectionSpace.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ProtectionSpace.h; sourceTree = "<group>"; };
+               514C76610CE923A1007EF3CD /* ResourceError.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ResourceError.cpp; sourceTree = "<group>"; };
+               514C76620CE923A1007EF3CD /* ResourceError.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ResourceError.h; sourceTree = "<group>"; };
+               514C76630CE923A1007EF3CD /* ResourceHandle.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ResourceHandle.cpp; sourceTree = "<group>"; };
+               514C76640CE923A1007EF3CD /* ResourceHandle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ResourceHandle.h; sourceTree = "<group>"; };
+               514C76650CE923A1007EF3CD /* ResourceHandleClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ResourceHandleClient.h; sourceTree = "<group>"; };
+               514C76660CE923A1007EF3CD /* ResourceHandleInternal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ResourceHandleInternal.h; sourceTree = "<group>"; };
+               514C76670CE923A1007EF3CD /* ResourceRequestBase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ResourceRequestBase.cpp; sourceTree = "<group>"; };
+               514C76680CE923A1007EF3CD /* ResourceRequestBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ResourceRequestBase.h; sourceTree = "<group>"; };
+               514C76690CE923A1007EF3CD /* ResourceResponseBase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ResourceResponseBase.cpp; sourceTree = "<group>"; };
+               514C766A0CE923A1007EF3CD /* ResourceResponseBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ResourceResponseBase.h; sourceTree = "<group>"; };
                5150C2A10702629000AF642C /* WebDashboardRegion.h */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.c.h; path = WebDashboardRegion.h; sourceTree = "<group>"; tabWidth = 8; usesTabs = 0; };
                5150C2A50702629800AF642C /* WebDashboardRegion.m */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.c.objc; path = WebDashboardRegion.m; sourceTree = "<group>"; tabWidth = 8; usesTabs = 0; };
+               515B03970CD1642A00B7EA9C /* SQLStatement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SQLStatement.h; sourceTree = "<group>"; };
+               515B03980CD1642A00B7EA9C /* SQLStatement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SQLStatement.cpp; sourceTree = "<group>"; };
                5160300A0CC4251200C8AC25 /* FileSystemPOSIX.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FileSystemPOSIX.cpp; sourceTree = "<group>"; };
                5160306B0CC4362300C8AC25 /* FileSystemCF.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FileSystemCF.cpp; sourceTree = "<group>"; };
                5160F3BB0B0A99C900C1D2AF /* CachedPageMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = CachedPageMac.mm; path = mac/CachedPageMac.mm; sourceTree = "<group>"; };
                5160F4970B0AA75F00C1D2AF /* HistoryItemMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = HistoryItemMac.mm; path = mac/HistoryItemMac.mm; sourceTree = "<group>"; };
+               516BB7910CE91E6800512F79 /* JSSVGPointListCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSSVGPointListCustom.cpp; sourceTree = "<group>"; };
+               516BB7920CE91E6800512F79 /* JSTreeWalkerCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSTreeWalkerCustom.cpp; sourceTree = "<group>"; };
                51741D0B0B07259A00ED442C /* BackForwardList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BackForwardList.h; sourceTree = "<group>"; };
                51741D0C0B07259A00ED442C /* BackForwardList.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BackForwardList.cpp; sourceTree = "<group>"; };
                51741D0D0B07259A00ED442C /* HistoryItem.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = HistoryItem.h; sourceTree = "<group>"; };
                519611600CAC56570010A80C /* Database.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Database.idl; sourceTree = "<group>"; };
                519611610CAC56570010A80C /* DatabaseThread.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DatabaseThread.cpp; sourceTree = "<group>"; };
                519611620CAC56570010A80C /* DatabaseThread.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DatabaseThread.h; sourceTree = "<group>"; };
-               519611650CAC56570010A80C /* SQLCallback.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SQLCallback.h; sourceTree = "<group>"; };
-               519611660CAC56570010A80C /* SQLCallback.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = SQLCallback.idl; sourceTree = "<group>"; };
                519611670CAC56570010A80C /* SQLResultSet.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SQLResultSet.cpp; sourceTree = "<group>"; };
                519611680CAC56570010A80C /* SQLResultSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SQLResultSet.h; sourceTree = "<group>"; };
                519611690CAC56570010A80C /* SQLResultSet.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = SQLResultSet.idl; sourceTree = "<group>"; };
                51E1ECBD0C91C90400DC255B /* PageURLRecord.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PageURLRecord.h; sourceTree = "<group>"; };
                51E4ADB20C42B4CF0042BC55 /* FTPDirectoryDocument.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = FTPDirectoryDocument.cpp; sourceTree = "<group>"; };
                51E4ADB30C42B4CF0042BC55 /* FTPDirectoryDocument.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = FTPDirectoryDocument.h; sourceTree = "<group>"; };
-               51EC054E0CC6A615001DA88F /* DatabaseCallback.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DatabaseCallback.h; sourceTree = "<group>"; };
-               51EC05500CC6ACBA001DA88F /* DatabaseCallback.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DatabaseCallback.cpp; sourceTree = "<group>"; };
+               51EC92570CE90DB400F90308 /* SQLError.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SQLError.h; sourceTree = "<group>"; };
+               51EC92580CE90DB400F90308 /* SQLError.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = SQLError.idl; sourceTree = "<group>"; };
+               51EC925B0CE90DD400F90308 /* JSCustomSQLStatementCallback.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSCustomSQLStatementCallback.cpp; sourceTree = "<group>"; };
+               51EC925C0CE90DD400F90308 /* JSCustomSQLStatementCallback.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSCustomSQLStatementCallback.h; sourceTree = "<group>"; };
+               51EC925D0CE90DD400F90308 /* JSCustomSQLStatementErrorCallback.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSCustomSQLStatementErrorCallback.cpp; sourceTree = "<group>"; };
+               51EC925E0CE90DD400F90308 /* JSCustomSQLStatementErrorCallback.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSCustomSQLStatementErrorCallback.h; sourceTree = "<group>"; };
+               51EC925F0CE90DD400F90308 /* JSCustomSQLTransactionCallback.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSCustomSQLTransactionCallback.cpp; sourceTree = "<group>"; };
+               51EC92600CE90DD400F90308 /* JSCustomSQLTransactionCallback.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSCustomSQLTransactionCallback.h; sourceTree = "<group>"; };
+               51EC92610CE90DD400F90308 /* JSCustomSQLTransactionErrorCallback.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSCustomSQLTransactionErrorCallback.cpp; sourceTree = "<group>"; };
+               51EC92620CE90DD400F90308 /* JSCustomSQLTransactionErrorCallback.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSCustomSQLTransactionErrorCallback.h; sourceTree = "<group>"; };
                51F6A3D50663BF04004D2919 /* HTMLCanvasElement.cpp */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HTMLCanvasElement.cpp; sourceTree = "<group>"; tabWidth = 8; usesTabs = 0; };
                51F6A3D60663BF04004D2919 /* HTMLCanvasElement.h */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.c.h; path = HTMLCanvasElement.h; sourceTree = "<group>"; tabWidth = 8; usesTabs = 0; };
                550A0BC7085F6039007353D6 /* QualifiedName.cpp */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.cpp.cpp; path = QualifiedName.cpp; sourceTree = "<group>"; tabWidth = 8; usesTabs = 0; };
                55998A5B052B59CC0017A6C1 /* WebCoreAXObject.mm */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebCoreAXObject.mm; sourceTree = "<group>"; tabWidth = 8; usesTabs = 0; };
                55998A5C052B59CC0017A6C1 /* AXObjectCache.h */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.c.h; path = AXObjectCache.h; sourceTree = "<group>"; tabWidth = 8; usesTabs = 0; };
                55998A5D052B59CC0017A6C1 /* AXObjectCacheMac.mm */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = AXObjectCacheMac.mm; sourceTree = "<group>"; tabWidth = 8; usesTabs = 0; };
-               650E3F680AF6C168001FA3AD /* ResourceRequestMac.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; path = ResourceRequestMac.mm; sourceTree = "<group>"; };
                650F53DB09D15DDA00C9B0C8 /* CSSGrammar.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = CSSGrammar.h; sourceTree = "<group>"; };
-               651888860AFF3BF700164720 /* ResourceError.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = ResourceError.cpp; sourceTree = "<group>"; };
-               651888870AFF3BF700164720 /* ResourceError.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = ResourceError.h; sourceTree = "<group>"; };
-               6518888A0AFF3C1400164720 /* ResourceErrorMac.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; path = ResourceErrorMac.mm; sourceTree = "<group>"; };
                651B4D8309AC83370029F1EF /* DeprecatedStringList.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = DeprecatedStringList.cpp; sourceTree = "<group>"; };
                651B4D8409AC83370029F1EF /* DeprecatedStringList.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = DeprecatedStringList.h; sourceTree = "<group>"; };
                651B4D8E09AC859F0029F1EF /* DeprecatedStringListMac.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; path = DeprecatedStringListMac.mm; sourceTree = "<group>"; };
                6550B69A099DF0270090D781 /* EditingText.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = EditingText.h; sourceTree = "<group>"; };
                6550B69B099DF0270090D781 /* Text.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = Text.cpp; sourceTree = "<group>"; };
                6550B69C099DF0270090D781 /* Text.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = Text.h; sourceTree = "<group>"; };
-               655A81BD0AEF67E6000975F0 /* HTTPHeaderMap.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = HTTPHeaderMap.h; sourceTree = "<group>"; };
                656580ED09D12B20000E61D7 /* CSSPropertyNames.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = CSSPropertyNames.c; sourceTree = "<group>"; };
                656580EE09D12B20000E61D7 /* CSSPropertyNames.gperf */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = CSSPropertyNames.gperf; sourceTree = "<group>"; };
                656580EF09D12B20000E61D7 /* CSSPropertyNames.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = CSSPropertyNames.h; sourceTree = "<group>"; };
                656581E909D1508D000E61D7 /* SVGNames.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = SVGNames.h; sourceTree = "<group>"; };
                656581EA09D1508D000E61D7 /* XLinkNames.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = XLinkNames.cpp; sourceTree = "<group>"; };
                656581EB09D1508D000E61D7 /* XLinkNames.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = XLinkNames.h; sourceTree = "<group>"; };
-               656B84DC0AEA1D3100A095B4 /* ResourceHandle.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = ResourceHandle.cpp; sourceTree = "<group>"; };
-               656B84DE0AEA1D3100A095B4 /* ResourceHandleClient.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = ResourceHandleClient.h; sourceTree = "<group>"; };
-               656B84DF0AEA1D3100A095B4 /* ResourceHandleInternal.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = ResourceHandleInternal.h; sourceTree = "<group>"; };
-               656B84EA0AEA1DDA00A095B4 /* ResourceHandleMac.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; path = ResourceHandleMac.mm; sourceTree = "<group>"; };
-               656B85370AEA1F9A00A095B4 /* ResourceHandle.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = ResourceHandle.h; sourceTree = "<group>"; };
                656D371A0ADBA5DE00A4554D /* LoaderNSURLExtras.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = LoaderNSURLExtras.h; sourceTree = "<group>"; };
                656D371B0ADBA5DE00A4554D /* LoaderNSURLExtras.m */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 30; path = LoaderNSURLExtras.m; sourceTree = "<group>"; };
                656D371E0ADBA5DE00A4554D /* DocumentLoader.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = DocumentLoader.h; sourceTree = "<group>"; };
                6582A15509999D6D00BEEB6D /* SystemTimeMac.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = SystemTimeMac.cpp; sourceTree = "<group>"; };
                6582A17709999EA000BEEB6D /* DeprecatedStringMac.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; path = DeprecatedStringMac.mm; sourceTree = "<group>"; };
                658436850AE01B7400E53753 /* FrameLoadRequest.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = FrameLoadRequest.h; sourceTree = "<group>"; };
-               658821690AF4CE1200F01D1F /* ResourceResponseMac.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; path = ResourceResponseMac.mm; sourceTree = "<group>"; };
                6593923509AE4346002C531F /* KURL.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = KURL.cpp; sourceTree = "<group>"; };
                6593923609AE4346002C531F /* KURL.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = KURL.h; sourceTree = "<group>"; };
                6593923909AE435C002C531F /* KURLMac.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; path = KURLMac.mm; sourceTree = "<group>"; };
                65CBFEF70974F607001DAC25 /* FrameView.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = FrameView.cpp; sourceTree = "<group>"; };
                65CBFEF80974F607001DAC25 /* FrameView.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = FrameView.h; sourceTree = "<group>"; };
                65D1C1C909932B22000CB324 /* Plugin.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = Plugin.h; sourceTree = "<group>"; };
-               65DAD9FA0AFD86B400CE53ED /* FormData.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = FormData.cpp; sourceTree = "<group>"; };
-               65DAD9FE0AFD86BF00CE53ED /* FormDataStreamMac.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = FormDataStreamMac.h; sourceTree = "<group>"; };
-               65DAD9FF0AFD86BF00CE53ED /* FormDataStreamMac.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; path = FormDataStreamMac.mm; sourceTree = "<group>"; };
-               65DADA170AFD878000CE53ED /* FormData.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = FormData.h; sourceTree = "<group>"; };
                65DF31D809D1C122000BE325 /* JSAttr.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JSAttr.cpp; sourceTree = "<group>"; };
                65DF31D909D1C123000BE325 /* JSAttr.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = JSAttr.h; sourceTree = "<group>"; };
                65DF31DF09D1CC60000BE325 /* JSCharacterData.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JSCharacterData.cpp; sourceTree = "<group>"; };
                93CD4FDC0995F9EA007ECC97 /* StringImpl.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = StringImpl.cpp; sourceTree = "<group>"; };
                93CD4FDD0995F9EA007ECC97 /* StringImpl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StringImpl.h; sourceTree = "<group>"; };
                93CD4FEB0995FD2A007ECC97 /* PlatformString.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PlatformString.h; sourceTree = "<group>"; };
-               93CDDE270C239A4800CD57AE /* ResourceRequest.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = ResourceRequest.h; sourceTree = "<group>"; };
-               93D82A470C28CF1E00FD703D /* ResourceRequestBase.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = ResourceRequestBase.cpp; sourceTree = "<group>"; };
-               93D82A480C28CF1E00FD703D /* ResourceRequestBase.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = ResourceRequestBase.h; sourceTree = "<group>"; };
                93E227DB0AF589AD00D48324 /* DocumentLoader.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 4; path = DocumentLoader.cpp; sourceTree = "<group>"; };
                93E227DC0AF589AD00D48324 /* MainResourceLoader.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 4; path = MainResourceLoader.cpp; sourceTree = "<group>"; };
                93E227DD0AF589AD00D48324 /* NetscapePlugInStreamLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NetscapePlugInStreamLoader.cpp; sourceTree = "<group>"; };
                ABDDFE740A5C6E7000A3E11D /* RenderMenuList.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = RenderMenuList.h; sourceTree = "<group>"; };
                B20111050AB7740500DB0E68 /* JSSVGAElement.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JSSVGAElement.cpp; sourceTree = "<group>"; };
                B20111060AB7740500DB0E68 /* JSSVGAElement.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = JSSVGAElement.h; sourceTree = "<group>"; };
-               B2080A110B3CA3B600120852 /* JSSVGPointListCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JSSVGPointListCustom.cpp; sourceTree = "<group>"; };
                B20964BD0AB76EF600E4C740 /* SVGAngle.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = SVGAngle.cpp; sourceTree = "<group>"; };
                B20964BE0AB76EF600E4C740 /* SVGAngle.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = SVGAngle.h; sourceTree = "<group>"; };
                B21127A50B3186770009BE53 /* JSSVGPODTypeWrapper.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = JSSVGPODTypeWrapper.h; sourceTree = "<group>"; };
                B27535550B053814002CE64F /* Pen.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = Pen.h; sourceTree = "<group>"; };
                B275358D0B053A66002CE64F /* IconMac.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; path = IconMac.mm; sourceTree = "<group>"; };
                B277B4030B22F37C0004BEC6 /* GraphicsContextMac.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; path = GraphicsContextMac.mm; sourceTree = "<group>"; };
-               B287B22C0CE66A820054D390 /* UnicodeRange.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = UnicodeRange.cpp; sourceTree = "<group>"; };
-               B287B22D0CE66A820054D390 /* UnicodeRange.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = UnicodeRange.h; sourceTree = "<group>"; };
                B297BC6F0B3C14CF0045A590 /* JSSVGPathSegListCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JSSVGPathSegListCustom.cpp; sourceTree = "<group>"; };
                B2A015920AF6CD53006BCE0E /* GraphicsContext.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = GraphicsContext.cpp; sourceTree = "<group>"; };
                B2A015930AF6CD53006BCE0E /* GraphicsContext.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = GraphicsContext.h; sourceTree = "<group>"; };
                E14843910A6752BF007E4D39 /* TextCodecMac.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = TextCodecMac.cpp; path = mac/TextCodecMac.cpp; sourceTree = "<group>"; };
                E15863970CD10B730066E2C9 /* TextCodecUserDefined.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TextCodecUserDefined.h; sourceTree = "<group>"; };
                E15863980CD10B730066E2C9 /* TextCodecUserDefined.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TextCodecUserDefined.cpp; sourceTree = "<group>"; };
-               E1D8E3150B29E39C00F4BAF6 /* HTTPParsers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HTTPParsers.h; sourceTree = "<group>"; };
-               E1D8E3190B29E3B600F4BAF6 /* HTTPParsers.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HTTPParsers.cpp; sourceTree = "<group>"; };
                E1E6EEA30B628DA8005F2F70 /* JSHTMLSelectElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSHTMLSelectElement.cpp; sourceTree = "<group>"; };
                E1E6EEA70B628DB3005F2F70 /* JSHTMLSelectElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = JSHTMLSelectElement.h; sourceTree = "<group>"; };
                E1EBBBD30AAC9B87001FE8E2 /* CSSCharsetRule.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CSSCharsetRule.cpp; sourceTree = "<group>"; };
                F5C2869402846DCD018635CA /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = "<absolute>"; };
                F5C2869502846DCD018635CA /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; };
                F8216299029F4FB501000131 /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = JavaScriptCore.framework; sourceTree = BUILT_PRODUCTS_DIR; };
-               F9541E5D0CE35B7800CB14EE /* ResourceResponse.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = ResourceResponse.h; sourceTree = "<group>"; };
-               F9B9A1AC0CE271DC009F992E /* ResourceResponseBase.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = ResourceResponseBase.h; sourceTree = "<group>"; };
-               F9B9A1AE0CE271F6009F992E /* ResourceResponseBase.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = ResourceResponseBase.cpp; sourceTree = "<group>"; };
                FAE0418D097596C9000540BE /* SVGImageLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = SVGImageLoader.cpp; sourceTree = "<group>"; };
                FAE0418E097596C9000540BE /* SVGImageLoader.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = SVGImageLoader.h; sourceTree = "<group>"; };
 /* End PBXFileReference section */
                        name = sql;
                        sourceTree = "<group>";
                };
-               1A7CCB140CD9463100B7B64E /* To Be Removed */ = {
-                       isa = PBXGroup;
-                       children = (
-                               519611650CAC56570010A80C /* SQLCallback.h */,
-                               519611660CAC56570010A80C /* SQLCallback.idl */,
-                               1A2E6FF30CC67855004A2062 /* VersionChangeCallback.h */,
-                               1A2E6FF70CC6788D004A2062 /* VersionChangeCallback.idl */,
-                       );
-                       name = "To Be Removed";
-                       sourceTree = "<group>";
-               };
                1AE42F670AA4B8CB00C8612D /* cf */ = {
                        isa = PBXGroup;
                        children = (
                1AE82EC90CAAE177002237AE /* storage */ = {
                        isa = PBXGroup;
                        children = (
-                               1A7CCB140CD9463100B7B64E /* To Be Removed */,
+                               514185ED0CD65F0400763C99 /* ChangeVersionWrapper.cpp */,
+                               514185EC0CD65F0400763C99 /* ChangeVersionWrapper.h */,
                                5196115E0CAC56570010A80C /* Database.cpp */,
                                5196115F0CAC56570010A80C /* Database.h */,
                                519611600CAC56570010A80C /* Database.idl */,
                                51A45B550CAD7FD7000D2BE9 /* DatabaseAuthorizer.cpp */,
                                51A45B540CAD7FD7000D2BE9 /* DatabaseAuthorizer.h */,
-                               51EC05500CC6ACBA001DA88F /* DatabaseCallback.cpp */,
-                               51EC054E0CC6A615001DA88F /* DatabaseCallback.h */,
                                519611E90CAC749C0010A80C /* DatabaseTask.cpp */,
                                519611E80CAC749C0010A80C /* DatabaseTask.h */,
                                519611610CAC56570010A80C /* DatabaseThread.cpp */,
                                519611620CAC56570010A80C /* DatabaseThread.h */,
                                1AD51A130CB59CD300953D11 /* DatabaseTracker.cpp */,
                                1AD51A120CB59CD300953D11 /* DatabaseTracker.h */,
-                               1A7CCAE80CD901A100B7B64E /* SQLError.h */,
-                               1A7CCAE90CD901A100B7B64E /* SQLError.idl */,
+                               51EC92570CE90DB400F90308 /* SQLError.h */,
+                               51EC92580CE90DB400F90308 /* SQLError.idl */,
                                519611670CAC56570010A80C /* SQLResultSet.cpp */,
                                519611680CAC56570010A80C /* SQLResultSet.h */,
                                519611690CAC56570010A80C /* SQLResultSet.idl */,
                                1AFE117B0CBFFB36003017FA /* SQLResultSetRowList.cpp */,
                                1AFE117C0CBFFB36003017FA /* SQLResultSetRowList.h */,
                                1AFE118C0CBFFC4E003017FA /* SQLResultSetRowList.idl */,
+                               515B03980CD1642A00B7EA9C /* SQLStatement.cpp */,
+                               515B03970CD1642A00B7EA9C /* SQLStatement.h */,
                                1A7CCB150CD9469A00B7B64E /* SQLStatementCallback.h */,
                                1A7CCB0C0CD9462C00B7B64E /* SQLStatementCallback.idl */,
                                1A7CCB160CD9469A00B7B64E /* SQLStatementErrorCallback.h */,
                                1A7CCB0D0CD9462C00B7B64E /* SQLStatementErrorCallback.idl */,
+                               1ABFE7520CD968D000FE4834 /* SQLTransaction.cpp */,
+                               1A7CCB220CD946FD00B7B64E /* SQLTransaction.h */,
+                               1A7CCB230CD946FD00B7B64E /* SQLTransaction.idl */,
                                1A7CCB170CD9469A00B7B64E /* SQLTransactionCallback.h */,
                                1A7CCB0E0CD9462C00B7B64E /* SQLTransactionCallback.idl */,
                                1A7CCB180CD9469A00B7B64E /* SQLTransactionErrorCallback.h */,
                                1A7CCB0F0CD9462C00B7B64E /* SQLTransactionErrorCallback.idl */,
-                               1A7CCB220CD946FD00B7B64E /* SQLTransaction.h */,
-                               1A7CCB230CD946FD00B7B64E /* SQLTransaction.idl */,
                        );
                        indentWidth = 4;
                        path = storage;
                        isa = PBXGroup;
                        children = (
                                656B84E70AEA1DAE00A095B4 /* mac */,
-                               510F73590B56C08800A3002A /* AuthenticationChallenge.cpp */,
-                               510F735A0B56C08800A3002A /* AuthenticationChallenge.h */,
-                               510F735B0B56C08800A3002A /* Credential.cpp */,
-                               510F735C0B56C08800A3002A /* Credential.h */,
-                               65DADA170AFD878000CE53ED /* FormData.h */,
-                               65DAD9FA0AFD86B400CE53ED /* FormData.cpp */,
-                               651888860AFF3BF700164720 /* ResourceError.cpp */,
-                               651888870AFF3BF700164720 /* ResourceError.h */,
-                               655A81BD0AEF67E6000975F0 /* HTTPHeaderMap.h */,
-                               E1D8E3150B29E39C00F4BAF6 /* HTTPParsers.h */,
-                               E1D8E3190B29E3B600F4BAF6 /* HTTPParsers.cpp */,
-                               510F735D0B56C08800A3002A /* ProtectionSpace.cpp */,
-                               510F735E0B56C08800A3002A /* ProtectionSpace.h */,
-                               656B85370AEA1F9A00A095B4 /* ResourceHandle.h */,
-                               656B84DC0AEA1D3100A095B4 /* ResourceHandle.cpp */,
-                               656B84DE0AEA1D3100A095B4 /* ResourceHandleClient.h */,
-                               656B84DF0AEA1D3100A095B4 /* ResourceHandleInternal.h */,
-                               93D82A470C28CF1E00FD703D /* ResourceRequestBase.cpp */,
-                               93D82A480C28CF1E00FD703D /* ResourceRequestBase.h */,
-                               F9B9A1AE0CE271F6009F992E /* ResourceResponseBase.cpp */,
-                               F9B9A1AC0CE271DC009F992E /* ResourceResponseBase.h */,
+                               514C76560CE923A1007EF3CD /* AuthenticationChallenge.cpp */,
+                               514C76570CE923A1007EF3CD /* AuthenticationChallenge.h */,
+                               514C76580CE923A1007EF3CD /* Credential.cpp */,
+                               514C76590CE923A1007EF3CD /* Credential.h */,
+                               514C765A0CE923A1007EF3CD /* FormData.cpp */,
+                               514C765B0CE923A1007EF3CD /* FormData.h */,
+                               514C765C0CE923A1007EF3CD /* HTTPHeaderMap.h */,
+                               514C765D0CE923A1007EF3CD /* HTTPParsers.cpp */,
+                               514C765E0CE923A1007EF3CD /* HTTPParsers.h */,
+                               514C765F0CE923A1007EF3CD /* ProtectionSpace.cpp */,
+                               514C76600CE923A1007EF3CD /* ProtectionSpace.h */,
+                               514C76610CE923A1007EF3CD /* ResourceError.cpp */,
+                               514C76620CE923A1007EF3CD /* ResourceError.h */,
+                               514C76630CE923A1007EF3CD /* ResourceHandle.cpp */,
+                               514C76640CE923A1007EF3CD /* ResourceHandle.h */,
+                               514C76650CE923A1007EF3CD /* ResourceHandleClient.h */,
+                               514C76660CE923A1007EF3CD /* ResourceHandleInternal.h */,
+                               514C76670CE923A1007EF3CD /* ResourceRequestBase.cpp */,
+                               514C76680CE923A1007EF3CD /* ResourceRequestBase.h */,
+                               514C76690CE923A1007EF3CD /* ResourceResponseBase.cpp */,
+                               514C766A0CE923A1007EF3CD /* ResourceResponseBase.h */,
                        );
                        path = network;
                        sourceTree = "<group>";
                656B84E70AEA1DAE00A095B4 /* mac */ = {
                        isa = PBXGroup;
                        children = (
-                               93CDDE270C239A4800CD57AE /* ResourceRequest.h */,
-                               F9541E5D0CE35B7800CB14EE /* ResourceResponse.h */,
-                               6518888A0AFF3C1400164720 /* ResourceErrorMac.mm */,
-                               65DAD9FE0AFD86BF00CE53ED /* FormDataStreamMac.h */,
-                               65DAD9FF0AFD86BF00CE53ED /* FormDataStreamMac.mm */,
-                               656B84EA0AEA1DDA00A095B4 /* ResourceHandleMac.mm */,
-                               650E3F680AF6C168001FA3AD /* ResourceRequestMac.mm */,
-                               658821690AF4CE1200F01D1F /* ResourceResponseMac.mm */,
-                               513BF1070B4F558900CCFECE /* AuthenticationMac.h */,
-                               513BF1270B4F57DC00CCFECE /* AuthenticationMac.mm */,
+                               514C76420CE9234E007EF3CD /* AuthenticationMac.h */,
+                               514C76430CE9234E007EF3CD /* AuthenticationMac.mm */,
+                               514C76440CE9234E007EF3CD /* FormDataStreamMac.h */,
+                               514C76450CE9234E007EF3CD /* FormDataStreamMac.mm */,
+                               514C76460CE9234E007EF3CD /* ResourceErrorMac.mm */,
+                               514C76470CE9234E007EF3CD /* ResourceHandleMac.mm */,
+                               514C76480CE9234E007EF3CD /* ResourceRequest.h */,
+                               514C76490CE9234E007EF3CD /* ResourceRequestMac.mm */,
+                               514C764A0CE9234E007EF3CD /* ResourceResponse.h */,
+                               514C764B0CE9234E007EF3CD /* ResourceResponseMac.mm */,
                        );
                        path = mac;
                        sourceTree = "<group>";
                        children = (
                                1AE82F8D0CAAFA9D002237AE /* JSDatabase.cpp */,
                                1AE82F8E0CAAFA9D002237AE /* JSDatabase.h */,
-                               1AE8301B0CAB0999002237AE /* JSSQLCallback.cpp */,
-                               1AE8301C0CAB0999002237AE /* JSSQLCallback.h */,
-                               1A7CCAEC0CD901DB00B7B64E /* JSSQLError.cpp */,
-                               1A7CCAED0CD901DB00B7B64E /* JSSQLError.h */,
+                               514C76350CE9225E007EF3CD /* JSSQLError.cpp */,
                                1AE82FEA0CAB07EE002237AE /* JSSQLResultSet.cpp */,
                                1AE82FEB0CAB07EE002237AE /* JSSQLResultSet.h */,
                                1AFE11970CBFFCC4003017FA /* JSSQLResultSetRowList.cpp */,
                                1AFE11980CBFFCC4003017FA /* JSSQLResultSetRowList.h */,
-                               1A7CCB2C0CD9499700B7B64E /* JSSQLTransaction.cpp */,
-                               1A7CCB2D0CD9499700B7B64E /* JSSQLTransaction.h */,
-                               1A2E6FFC0CC67907004A2062 /* JSVersionChangeCallback.cpp */,
-                               1A2E6FFD0CC67907004A2062 /* JSVersionChangeCallback.h */,
+                               514C76360CE9225E007EF3CD /* JSSQLTransaction.cpp */,
                        );
                        name = Storage;
                        sourceTree = "<group>";
                                93F8B3060A300FEA00F61AB8 /* CodeGeneratorJS.pm */,
                                1432E8480C51493F00B1500F /* GCController.cpp */,
                                1432E8460C51493800B1500F /* GCController.h */,
-                               1AE831050CAB166E002237AE /* JSCustomSQLCallback.cpp */,
-                               1AE831040CAB166E002237AE /* JSCustomSQLCallback.h */,
-                               1A7CCAFB0CD945DD00B7B64E /* JSCustomSQLStatementCallback.cpp */,
-                               1A7CCAFC0CD945DD00B7B64E /* JSCustomSQLStatementCallback.h */,
-                               1A7CCAFD0CD945DD00B7B64E /* JSCustomSQLStatementErrorCallback.cpp */,
-                               1A7CCAFE0CD945DD00B7B64E /* JSCustomSQLStatementErrorCallback.h */,
-                               1A7CCAFF0CD945DD00B7B64E /* JSCustomSQLTransactionCallback.cpp */,
-                               1A7CCB000CD945DD00B7B64E /* JSCustomSQLTransactionCallback.h */,
-                               1A7CCB010CD945DD00B7B64E /* JSCustomSQLTransactionErrorCallback.cpp */,
-                               1A7CCB020CD945DD00B7B64E /* JSCustomSQLTransactionErrorCallback.h */,
-                               1A2E70610CC67CAA004A2062 /* JSCustomVersionChangeCallback.cpp */,
-                               1A2E70600CC67CAA004A2062 /* JSCustomVersionChangeCallback.h */,
                                E10B93C20B73C291003ED890 /* JSCustomXPathNSResolver.cpp */,
                                E10B937B0B73C00A003ED890 /* JSCustomXPathNSResolver.h */,
                                BCD9C2680C17AA81005C90A2 /* JSDOMExceptionConstructor.cpp */,
                        children = (
                                BC2ED6BB0C6BD2F000920BFF /* JSAttrCustom.cpp */,
                                1A9EF4560A1B957D00332B63 /* JSCanvasRenderingContext2DCustom.cpp */,
+                               51EC925B0CE90DD400F90308 /* JSCustomSQLStatementCallback.cpp */,
+                               51EC925C0CE90DD400F90308 /* JSCustomSQLStatementCallback.h */,
+                               51EC925D0CE90DD400F90308 /* JSCustomSQLStatementErrorCallback.cpp */,
+                               51EC925E0CE90DD400F90308 /* JSCustomSQLStatementErrorCallback.h */,
+                               51EC925F0CE90DD400F90308 /* JSCustomSQLTransactionCallback.cpp */,
+                               51EC92600CE90DD400F90308 /* JSCustomSQLTransactionCallback.h */,
+                               51EC92610CE90DD400F90308 /* JSCustomSQLTransactionErrorCallback.cpp */,
+                               51EC92620CE90DD400F90308 /* JSCustomSQLTransactionErrorCallback.h */,
                                BC46C1ED0C0DDBDF0020CFC3 /* JSCSSRuleCustom.cpp */,
                                BC5825F20C0B89380053F1B5 /* JSCSSStyleDeclarationCustom.cpp */,
                                BC20FB7E0C0E8E6C00D1447F /* JSCSSValueCustom.cpp */,
                                1A750DD30A90E729000FF215 /* JSNodeIteratorCustom.cpp */,
                                BCD9C2610C17AA67005C90A2 /* JSNodeListCustom.cpp */,
                                51DCE8010CAC9F1C00488358 /* JSSQLResultSetRowListCustom.cpp */,
+                               1AD2316D0CD269E700C1F194 /* JSSQLTransactionCustom.cpp */,
                                BC98A27C0C0C9950004BEBF7 /* JSStyleSheetCustom.cpp */,
                                A84EBD770CB8C89200079609 /* JSStyleSheetListCustom.cpp */,
                                B25DFAAE0B2E2929000E6510 /* JSSVGMatrixCustom.cpp */,
                                B2C96D8C0B3AF2B7005E80EC /* JSSVGPathSegCustom.cpp */,
                                B297BC6F0B3C14CF0045A590 /* JSSVGPathSegListCustom.cpp */,
-                               B2080A110B3CA3B600120852 /* JSSVGPointListCustom.cpp */,
-                               1A750E330A90F89F000FF215 /* JSTreeWalkerCustom.cpp */,
-                               B2080A110B3CA3B600120852 /* JSSVGPointListCustom.cpp */,
-                               1A750E330A90F89F000FF215 /* JSTreeWalkerCustom.cpp */,
-                               B2080A110B3CA3B600120852 /* JSSVGPointListCustom.cpp */,
-                               1A750E330A90F89F000FF215 /* JSTreeWalkerCustom.cpp */,
+                               516BB7910CE91E6800512F79 /* JSSVGPointListCustom.cpp */,
+                               516BB7920CE91E6800512F79 /* JSTreeWalkerCustom.cpp */,
                        );
                        name = Custom;
                        sourceTree = "<group>";
                                51E1ECB20C91C55600DC255B /* Threading.h */,
                                93309EA1099EB78C0056E581 /* Timer.cpp */,
                                9305B24C098F1B6B00C28855 /* Timer.h */,
-                               B287B22C0CE66A820054D390 /* UnicodeRange.cpp */,
-                               B287B22D0CE66A820054D390 /* UnicodeRange.h */,
+                               514C762C0CE921F4007EF3CD /* UnicodeRange.cpp */,
+                               514C762D0CE921F4007EF3CD /* UnicodeRange.h */,
                                9380F47109A11AB4001FDB34 /* Widget.cpp */,
                                9380F47209A11AB4001FDB34 /* Widget.h */,
                                93B780C909B3B7FE00690162 /* WidgetClient.h */,
                                93F199CF08245E59001E9ABC /* AtomicStringList.h in Headers */,
                                A8C4A80D09D563270003AC8D /* Attr.h in Headers */,
                                A8C4A80B09D563270003AC8D /* Attribute.h in Headers */,
-                               510F73600B56C08800A3002A /* AuthenticationChallenge.h in Headers */,
-                               513BF1080B4F558900CCFECE /* AuthenticationMac.h in Headers */,
+                               514C766C0CE923A1007EF3CD /* AuthenticationChallenge.h in Headers */,
+                               514C764C0CE9234E007EF3CD /* AuthenticationMac.h in Headers */,
                                A8CFF04E0A154F09000A4234 /* AutoTableLayout.h in Headers */,
                                51E1ECB30C91C55600DC255B /* AutodrainedPool.h in Headers */,
                                51741D0F0B07259A00ED442C /* BackForwardList.h in Headers */,
                                93EEC20009C2877700C515D1 /* CanvasRenderingContext2D.h in Headers */,
                                93EEC20109C2877700C515D1 /* CanvasStyle.h in Headers */,
                                B2310B770B1F46A200D55D87 /* CgSupport.h in Headers */,
+                               514185EE0CD65F0400763C99 /* ChangeVersionWrapper.h in Headers */,
                                6550B6A0099DF0270090D781 /* CharacterData.h in Headers */,
                                93C7B5F40B52D89100B5477E /* CharacterNames.h in Headers */,
                                9326DC0B09DAD5BE00AFC847 /* CharsetData.h in Headers */,
                                A80E6D040A1989CA007FB8C5 /* Counter.h in Headers */,
                                9392F14C0AD1861B00691BD4 /* CounterNode.h in Headers */,
                                D0B0556809C6700100307E43 /* CreateLinkCommand.h in Headers */,
-                               510F73620B56C08800A3002A /* Credential.h in Headers */,
+                               514C766E0CE923A1007EF3CD /* Credential.h in Headers */,
                                93F1992F08245E59001E9ABC /* Cursor.h in Headers */,
                                BC1A37AD097C715F0019F3D8 /* DOM.h in Headers */,
                                8538F0190AD718D8006A81D1 /* DOMAbstractView.h in Headers */,
                                BCEA4856097D93020094C9E4 /* DataRef.h in Headers */,
                                5196116B0CAC56570010A80C /* Database.h in Headers */,
                                51A45B560CAD7FD7000D2BE9 /* DatabaseAuthorizer.h in Headers */,
-                               51EC054F0CC6A615001DA88F /* DatabaseCallback.h in Headers */,
                                519611EA0CAC749C0010A80C /* DatabaseTask.h in Headers */,
                                519611780CAC56A80010A80C /* DatabaseThread.h in Headers */,
                                1AD51A140CB59CD300953D11 /* DatabaseTracker.h in Headers */,
                                148A00110AF59F3F008CC700 /* FontPlatformData.h in Headers */,
                                BC64B4B90CB428C7005F2B62 /* FontSelector.h in Headers */,
                                A80E6CED0A1989CA007FB8C5 /* FontValue.h in Headers */,
-                               65DADA180AFD878000CE53ED /* FormData.h in Headers */,
+                               514C76700CE923A1007EF3CD /* FormData.h in Headers */,
                                A8136D380973A8E700D74463 /* FormDataList.h in Headers */,
-                               65DADA000AFD86BF00CE53ED /* FormDataStreamMac.h in Headers */,
+                               514C764E0CE9234E007EF3CD /* FormDataStreamMac.h in Headers */,
                                656D373A0ADBA5DE00A4554D /* FormState.h in Headers */,
                                D05CED2A0A40BB2C00C5AF38 /* FormatBlockCommand.h in Headers */,
                                935C476D09AC4D6300A6AAB4 /* FoundationExtras.h in Headers */,
                                A8EA79F20A1916DF00A8EF5F /* HTMLUListElement.h in Headers */,
                                E44613AB0CD6331000FADA75 /* HTMLVideoElement.h in Headers */,
                                BCCD74DC0A4C8D35005FDA6D /* HTMLViewSourceDocument.h in Headers */,
-                               655A81BE0AEF67E6000975F0 /* HTTPHeaderMap.h in Headers */,
-                               E1D8E3160B29E39C00F4BAF6 /* HTTPParsers.h in Headers */,
+                               514C76710CE923A1007EF3CD /* HTTPHeaderMap.h in Headers */,
+                               514C76730CE923A1007EF3CD /* HTTPParsers.h in Headers */,
                                BC94D1540C275C8B006BC617 /* History.h in Headers */,
                                51741D110B07259A00ED442C /* HistoryItem.h in Headers */,
                                930908910AF7EDE40081DF01 /* HitTestRequest.h in Headers */,
                                93F9B6E10BA0FB7200854064 /* JSComment.h in Headers */,
                                BC98543E0CD3D98C00069BC1 /* JSConsole.h in Headers */,
                                930705DA09E0C9BF00B17FE4 /* JSCounter.h in Headers */,
-                               1AE831060CAB166E002237AE /* JSCustomSQLCallback.h in Headers */,
-                               1A7CCB040CD945DD00B7B64E /* JSCustomSQLStatementCallback.h in Headers */,
-                               1A7CCB060CD945DD00B7B64E /* JSCustomSQLStatementErrorCallback.h in Headers */,
-                               1A7CCB080CD945DD00B7B64E /* JSCustomSQLTransactionCallback.h in Headers */,
-                               1A7CCB0A0CD945DD00B7B64E /* JSCustomSQLTransactionErrorCallback.h in Headers */,
-                               1A2E70620CC67CAA004A2062 /* JSCustomVersionChangeCallback.h in Headers */,
+                               51EC92640CE90DD400F90308 /* JSCustomSQLStatementCallback.h in Headers */,
+                               51EC92660CE90DD400F90308 /* JSCustomSQLStatementErrorCallback.h in Headers */,
+                               51EC92680CE90DD400F90308 /* JSCustomSQLTransactionCallback.h in Headers */,
+                               51EC926A0CE90DD400F90308 /* JSCustomSQLTransactionErrorCallback.h in Headers */,
                                E10B937C0B73C00A003ED890 /* JSCustomXPathNSResolver.h in Headers */,
                                BCD9C26F0C17AA81005C90A2 /* JSDOMExceptionConstructor.h in Headers */,
                                BCD9C2C60C17B6EC005C90A2 /* JSDOMExceptionConstructor.lut.h in Headers */,
                                65DF320209D1CC60000BE325 /* JSRange.h in Headers */,
                                D23CA55D0AB0EAAE005108A5 /* JSRangeException.h in Headers */,
                                BCFE2F120C1B58380020235F /* JSRect.h in Headers */,
-                               1AE8301E0CAB0999002237AE /* JSSQLCallback.h in Headers */,
-                               1A7CCAEF0CD901DB00B7B64E /* JSSQLError.h in Headers */,
                                1AE82FED0CAB07EE002237AE /* JSSQLResultSet.h in Headers */,
                                1AFE119A0CBFFCC4003017FA /* JSSQLResultSetRowList.h in Headers */,
-                               1A7CCB2F0CD9499700B7B64E /* JSSQLTransaction.h in Headers */,
                                B20111080AB7740500DB0E68 /* JSSVGAElement.h in Headers */,
                                B222F6990AB771950022EFAD /* JSSVGAngle.h in Headers */,
                                B2FA3D370AB75A6F000E5AC4 /* JSSVGAnimateColorElement.h in Headers */,
                                E446141B0CD6826900FADA75 /* JSTimeRanges.h in Headers */,
                                1A750D5D0A90DEE1000FF215 /* JSTreeWalker.h in Headers */,
                                A86629CF09DA2B47009633A5 /* JSUIEvent.h in Headers */,
-                               1A2E6FFF0CC67907004A2062 /* JSVersionChangeCallback.h in Headers */,
                                E446141D0CD6826900FADA75 /* JSVoidCallback.h in Headers */,
                                65DF320609D1CC60000BE325 /* JSWheelEvent.h in Headers */,
                                93B70D5E09EB0C7C009D8468 /* JSXMLHttpRequest.h in Headers */,
                                A8EA7EBC0A1945D000A8EF5F /* ProcessingInstruction.h in Headers */,
                                E44613EC0CD681B500FADA75 /* ProgressEvent.h in Headers */,
                                1A2A68240B5BEDE70002A480 /* ProgressTracker.h in Headers */,
-                               510F73640B56C08800A3002A /* ProtectionSpace.h in Headers */,
+                               514C76750CE923A1007EF3CD /* ProtectionSpace.h in Headers */,
                                550A0BCA085F6039007353D6 /* QualifiedName.h in Headers */,
                                B25AE5600B49D6630074C726 /* RadialGradientAttributes.h in Headers */,
                                93F1991808245E59001E9ABC /* Range.h in Headers */,
                                93799EF90BF2743600D0F230 /* RenderWordBreak.h in Headers */,
                                93309E0A099E64920056E581 /* ReplaceSelectionCommand.h in Headers */,
                                BCB16C2F0979C3BD00467741 /* Request.h in Headers */,
-                               651888890AFF3BF700164720 /* ResourceError.h in Headers */,
-                               656B85380AEA1F9A00A095B4 /* ResourceHandle.h in Headers */,
-                               656B84E20AEA1D3100A095B4 /* ResourceHandleClient.h in Headers */,
-                               656B84E30AEA1D3100A095B4 /* ResourceHandleInternal.h in Headers */,
+                               514C76770CE923A1007EF3CD /* ResourceError.h in Headers */,
+                               514C76790CE923A1007EF3CD /* ResourceHandle.h in Headers */,
+                               514C767A0CE923A1007EF3CD /* ResourceHandleClient.h in Headers */,
+                               514C767B0CE923A1007EF3CD /* ResourceHandleInternal.h in Headers */,
                                656D373F0ADBA5DE00A4554D /* ResourceLoader.h in Headers */,
-                               93CDDE280C239A4800CD57AE /* ResourceRequest.h in Headers */,
-                               93D82A4A0C28CF1E00FD703D /* ResourceRequestBase.h in Headers */,
-                               F9541E5E0CE35B7800CB14EE /* ResourceResponse.h in Headers */,
-                               F9B9A1AD0CE271DD009F992E /* ResourceResponseBase.h in Headers */,
+                               514C76520CE9234E007EF3CD /* ResourceRequest.h in Headers */,
+                               514C767D0CE923A1007EF3CD /* ResourceRequestBase.h in Headers */,
+                               514C76540CE9234E007EF3CD /* ResourceResponse.h in Headers */,
+                               514C767F0CE923A1007EF3CD /* ResourceResponseBase.h in Headers */,
                                A8CFF5E10A155A05000A4234 /* RootInlineBox.h in Headers */,
-                               519611710CAC56570010A80C /* SQLCallback.h in Headers */,
-                               1A7CCAEA0CD901A100B7B64E /* SQLError.h in Headers */,
+                               51EC92590CE90DB400F90308 /* SQLError.h in Headers */,
                                519611740CAC56570010A80C /* SQLResultSet.h in Headers */,
                                1AFE117E0CBFFB36003017FA /* SQLResultSetRowList.h in Headers */,
+                               515B03990CD1642A00B7EA9C /* SQLStatement.h in Headers */,
                                1A7CCB190CD9469A00B7B64E /* SQLStatementCallback.h in Headers */,
                                1A7CCB1A0CD9469A00B7B64E /* SQLStatementErrorCallback.h in Headers */,
                                1A7CCB240CD946FD00B7B64E /* SQLTransaction.h in Headers */,
                                93309E1A099E64920056E581 /* TypingCommand.h in Headers */,
                                85031B4E0A44EFC700F992E0 /* UIEvent.h in Headers */,
                                85031B4F0A44EFC700F992E0 /* UIEventWithKeyState.h in Headers */,
+                               514C762F0CE921F4007EF3CD /* UnicodeRange.h in Headers */,
                                D086FE9809D53AAB005BC74D /* UnlinkCommand.h in Headers */,
                                656581B209D14EE6000E61D7 /* UserAgentStyleSheets.h in Headers */,
-                               1A2E6FF50CC67855004A2062 /* VersionChangeCallback.h in Headers */,
                                93309E20099E64920056E581 /* VisiblePosition.h in Headers */,
                                E44613B60CD6344E00FADA75 /* VoidCallback.h in Headers */,
                                B2E27C4F0B0F2AE600F17C7B /* WKArithmeticFilter.h in Headers */,
                                BCB16C2D0979C3BD00467741 /* loader.h in Headers */,
                                93309DF8099E64920056E581 /* markup.h in Headers */,
                                93309E1E099E64920056E581 /* visible_units.h in Headers */,
-                               B287B22F0CE66A820054D390 /* UnicodeRange.h in Headers */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
                        isa = PBXResourcesBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
-                               1A7CCAEB0CD901A100B7B64E /* SQLError.idl in Resources */,
+                               51EC925A0CE90DB400F90308 /* SQLError.idl in Resources */,
                                1A7CCB100CD9462C00B7B64E /* SQLStatementCallback.idl in Resources */,
                                1A7CCB110CD9462C00B7B64E /* SQLStatementErrorCallback.idl in Resources */,
                                1A7CCB250CD946FD00B7B64E /* SQLTransaction.idl in Resources */,
                                93CD4FDE0995F9EA007ECC97 /* AtomicString.cpp in Sources */,
                                A8C4A80E09D563270003AC8D /* Attr.cpp in Sources */,
                                A8C4A80C09D563270003AC8D /* Attribute.cpp in Sources */,
-                               510F735F0B56C08800A3002A /* AuthenticationChallenge.cpp in Sources */,
-                               513BF1280B4F57DC00CCFECE /* AuthenticationMac.mm in Sources */,
+                               514C766B0CE923A1007EF3CD /* AuthenticationChallenge.cpp in Sources */,
+                               514C764D0CE9234E007EF3CD /* AuthenticationMac.mm in Sources */,
                                A8CFF0500A154F09000A4234 /* AutoTableLayout.cpp in Sources */,
                                51E1ECAF0C91C54600DC255B /* AutodrainedPool.mm in Sources */,
                                51741D100B07259A00ED442C /* BackForwardList.cpp in Sources */,
                                93EEC1FF09C2877700C515D1 /* CanvasRenderingContext2D.cpp in Sources */,
                                93EEC27109C3218800C515D1 /* CanvasStyle.cpp in Sources */,
                                B2310B760B1F46A200D55D87 /* CgSupport.cpp in Sources */,
+                               514185EF0CD65F0400763C99 /* ChangeVersionWrapper.cpp in Sources */,
                                6550B69F099DF0270090D781 /* CharacterData.cpp in Sources */,
                                9326DC0C09DAD5D600AFC847 /* CharsetData.cpp in Sources */,
                                A81872250977D3C0005826D9 /* ChildNodeList.cpp in Sources */,
                                9352087709BD453400F2038D /* CookieJar.mm in Sources */,
                                9392F1500AD1862300691BD4 /* CounterNode.cpp in Sources */,
                                D0B0556909C6700100307E43 /* CreateLinkCommand.cpp in Sources */,
-                               510F73610B56C08800A3002A /* Credential.cpp in Sources */,
+                               514C766D0CE923A1007EF3CD /* Credential.cpp in Sources */,
                                93F19A2608245E59001E9ABC /* CursorMac.mm in Sources */,
                                BC1A37AE097C715F0019F3D8 /* DOM.mm in Sources */,
                                8538F01A0AD718D8006A81D1 /* DOMAbstractView.mm in Sources */,
                                85E9E0A60AB3A0C700069CD0 /* DOMXPathResult.mm in Sources */,
                                5196116A0CAC56570010A80C /* Database.cpp in Sources */,
                                51A45B570CAD7FD7000D2BE9 /* DatabaseAuthorizer.cpp in Sources */,
-                               51EC05510CC6ACBA001DA88F /* DatabaseCallback.cpp in Sources */,
                                519611EB0CAC749C0010A80C /* DatabaseTask.cpp in Sources */,
                                5196116D0CAC56570010A80C /* DatabaseThread.cpp in Sources */,
                                1AD51A150CB59CD300953D11 /* DatabaseTracker.cpp in Sources */,
                                BCEB377309B7BA3900CB38B1 /* FontMac.mm in Sources */,
                                BC64B4BF0CB42929005F2B62 /* FontPlatformDataMac.mm in Sources */,
                                A80E6CF10A1989CA007FB8C5 /* FontValue.cpp in Sources */,
-                               65DAD9FC0AFD86B400CE53ED /* FormData.cpp in Sources */,
+                               514C766F0CE923A1007EF3CD /* FormData.cpp in Sources */,
                                A8136D390973A8E700D74463 /* FormDataList.cpp in Sources */,
-                               65DADA010AFD86BF00CE53ED /* FormDataStreamMac.mm in Sources */,
+                               514C764F0CE9234E007EF3CD /* FormDataStreamMac.mm in Sources */,
                                656D373B0ADBA5DE00A4554D /* FormState.cpp in Sources */,
                                D05CED290A40BB2C00C5AF38 /* FormatBlockCommand.cpp in Sources */,
                                65BF022E0974816300C43196 /* Frame.cpp in Sources */,
                                A8EA79F30A1916DF00A8EF5F /* HTMLUListElement.cpp in Sources */,
                                E44613AA0CD6331000FADA75 /* HTMLVideoElement.cpp in Sources */,
                                BCCD74E50A4C8DDF005FDA6D /* HTMLViewSourceDocument.cpp in Sources */,
-                               E1D8E31A0B29E3B600F4BAF6 /* HTTPParsers.cpp in Sources */,
+                               514C76720CE923A1007EF3CD /* HTTPParsers.cpp in Sources */,
                                BC94D1530C275C8B006BC617 /* History.cpp in Sources */,
                                51741D120B07259A00ED442C /* HistoryItem.cpp in Sources */,
                                5160F4980B0AA75F00C1D2AF /* HistoryItemMac.mm in Sources */,
                                93F9B6E00BA0FB7200854064 /* JSComment.cpp in Sources */,
                                BC98543D0CD3D98B00069BC1 /* JSConsole.cpp in Sources */,
                                930705D809E0C9B700B17FE4 /* JSCounter.cpp in Sources */,
-                               1AE831070CAB166E002237AE /* JSCustomSQLCallback.cpp in Sources */,
-                               1A7CCB030CD945DD00B7B64E /* JSCustomSQLStatementCallback.cpp in Sources */,
-                               1A7CCB050CD945DD00B7B64E /* JSCustomSQLStatementErrorCallback.cpp in Sources */,
-                               1A7CCB070CD945DD00B7B64E /* JSCustomSQLTransactionCallback.cpp in Sources */,
-                               1A7CCB090CD945DD00B7B64E /* JSCustomSQLTransactionErrorCallback.cpp in Sources */,
-                               1A2E70630CC67CAA004A2062 /* JSCustomVersionChangeCallback.cpp in Sources */,
+                               51EC92630CE90DD400F90308 /* JSCustomSQLStatementCallback.cpp in Sources */,
+                               51EC92650CE90DD400F90308 /* JSCustomSQLStatementErrorCallback.cpp in Sources */,
+                               51EC92670CE90DD400F90308 /* JSCustomSQLTransactionCallback.cpp in Sources */,
+                               51EC92690CE90DD400F90308 /* JSCustomSQLTransactionErrorCallback.cpp in Sources */,
                                E10B93C30B73C291003ED890 /* JSCustomXPathNSResolver.cpp in Sources */,
                                BCD9C26E0C17AA81005C90A2 /* JSDOMExceptionConstructor.cpp in Sources */,
                                65DF31F709D1CC60000BE325 /* JSDOMImplementation.cpp in Sources */,
                                65DF320109D1CC60000BE325 /* JSRange.cpp in Sources */,
                                D23CA55F0AB0EAB6005108A5 /* JSRangeException.cpp in Sources */,
                                BCFE2F110C1B58370020235F /* JSRect.cpp in Sources */,
-                               1AE8301D0CAB0999002237AE /* JSSQLCallback.cpp in Sources */,
-                               1A7CCAEE0CD901DB00B7B64E /* JSSQLError.cpp in Sources */,
+                               514C76370CE9225E007EF3CD /* JSSQLError.cpp in Sources */,
                                1AE82FEC0CAB07EE002237AE /* JSSQLResultSet.cpp in Sources */,
                                1AFE11990CBFFCC4003017FA /* JSSQLResultSetRowList.cpp in Sources */,
                                51DCE8020CAC9F1C00488358 /* JSSQLResultSetRowListCustom.cpp in Sources */,
-                               1A7CCB2E0CD9499700B7B64E /* JSSQLTransaction.cpp in Sources */,
+                               514C76380CE9225E007EF3CD /* JSSQLTransaction.cpp in Sources */,
+                               1AD2316E0CD269E700C1F194 /* JSSQLTransactionCustom.cpp in Sources */,
                                B20111070AB7740500DB0E68 /* JSSVGAElement.cpp in Sources */,
                                B222F6980AB771950022EFAD /* JSSVGAngle.cpp in Sources */,
                                B2FA3D360AB75A6F000E5AC4 /* JSSVGAnimateColorElement.cpp in Sources */,
                                B2FA3DE00AB75A6F000E5AC4 /* JSSVGPatternElement.cpp in Sources */,
                                8542A7960AE5C94200DF58DF /* JSSVGPoint.cpp in Sources */,
                                B2FA3DE20AB75A6F000E5AC4 /* JSSVGPointList.cpp in Sources */,
-                               B2080A120B3CA3B600120852 /* JSSVGPointListCustom.cpp in Sources */,
+                               516BB7930CE91E6800512F79 /* JSSVGPointListCustom.cpp in Sources */,
                                B2FA3DE50AB75A6F000E5AC4 /* JSSVGPolygonElement.cpp in Sources */,
                                B2FA3DE70AB75A6F000E5AC4 /* JSSVGPolylineElement.cpp in Sources */,
                                B2FA3DE90AB75A6F000E5AC4 /* JSSVGPreserveAspectRatio.cpp in Sources */,
                                933A14B80B7D1D5200A53FFD /* JSTextEvent.cpp in Sources */,
                                E446141A0CD6826900FADA75 /* JSTimeRanges.cpp in Sources */,
                                1A750D5C0A90DEE1000FF215 /* JSTreeWalker.cpp in Sources */,
-                               1A750E340A90F89F000FF215 /* JSTreeWalkerCustom.cpp in Sources */,
+                               516BB7940CE91E6800512F79 /* JSTreeWalkerCustom.cpp in Sources */,
                                A86629D009DA2B48009633A5 /* JSUIEvent.cpp in Sources */,
-                               1A2E6FFE0CC67907004A2062 /* JSVersionChangeCallback.cpp in Sources */,
                                E446141C0CD6826900FADA75 /* JSVoidCallback.cpp in Sources */,
                                65DF320509D1CC60000BE325 /* JSWheelEvent.cpp in Sources */,
                                93B70D5D09EB0C7C009D8468 /* JSXMLHttpRequest.cpp in Sources */,
                                A8EA7EBD0A1945D000A8EF5F /* ProcessingInstruction.cpp in Sources */,
                                E44613EB0CD681B400FADA75 /* ProgressEvent.cpp in Sources */,
                                1A2A68230B5BEDE70002A480 /* ProgressTracker.cpp in Sources */,
-                               510F73630B56C08800A3002A /* ProtectionSpace.cpp in Sources */,
+                               514C76740CE923A1007EF3CD /* ProtectionSpace.cpp in Sources */,
                                550A0BC9085F6039007353D6 /* QualifiedName.cpp in Sources */,
                                93F19AB908245E59001E9ABC /* Range.cpp in Sources */,
                                85031B4B0A44EFC700F992E0 /* RegisteredEventListener.cpp in Sources */,
                                93799EF80BF2743600D0F230 /* RenderWordBreak.cpp in Sources */,
                                93309E09099E64920056E581 /* ReplaceSelectionCommand.cpp in Sources */,
                                BCB16C2E0979C3BD00467741 /* Request.cpp in Sources */,
-                               651888880AFF3BF700164720 /* ResourceError.cpp in Sources */,
-                               6518888B0AFF3C1400164720 /* ResourceErrorMac.mm in Sources */,
-                               656B84E00AEA1D3100A095B4 /* ResourceHandle.cpp in Sources */,
-                               656B84EB0AEA1DDA00A095B4 /* ResourceHandleMac.mm in Sources */,
+                               514C76760CE923A1007EF3CD /* ResourceError.cpp in Sources */,
+                               514C76500CE9234E007EF3CD /* ResourceErrorMac.mm in Sources */,
+                               514C76780CE923A1007EF3CD /* ResourceHandle.cpp in Sources */,
+                               514C76510CE9234E007EF3CD /* ResourceHandleMac.mm in Sources */,
                                93E227E30AF589AD00D48324 /* ResourceLoader.cpp in Sources */,
                                51AA3F6F0BD5AA9E00892971 /* ResourceLoaderMac.mm in Sources */,
-                               93D82A490C28CF1E00FD703D /* ResourceRequestBase.cpp in Sources */,
-                               650E3F6A0AF6C168001FA3AD /* ResourceRequestMac.mm in Sources */,
-                               F9B9A1AF0CE271F6009F992E /* ResourceResponseBase.cpp in Sources */,
-                               6588216C0AF4CE1200F01D1F /* ResourceResponseMac.mm in Sources */,
+                               514C767C0CE923A1007EF3CD /* ResourceRequestBase.cpp in Sources */,
+                               514C76530CE9234E007EF3CD /* ResourceRequestMac.mm in Sources */,
+                               514C767E0CE923A1007EF3CD /* ResourceResponseBase.cpp in Sources */,
+                               514C76550CE9234F007EF3CD /* ResourceResponseMac.mm in Sources */,
                                A8CFF5E70A155A05000A4234 /* RootInlineBox.cpp in Sources */,
                                519611730CAC56570010A80C /* SQLResultSet.cpp in Sources */,
                                1AFE117D0CBFFB36003017FA /* SQLResultSetRowList.cpp in Sources */,
+                               515B039A0CD1642A00B7EA9C /* SQLStatement.cpp in Sources */,
+                               1ABFE7530CD968D000FE4834 /* SQLTransaction.cpp in Sources */,
                                1A2E6E590CC55213004A2062 /* SQLValue.cpp in Sources */,
                                1A2E6E7A0CC556D5004A2062 /* SQLiteAuthorizer.cpp in Sources */,
                                1A2246490CC98DDB00C05240 /* SQLiteDatabase.cpp in Sources */,
                                93309E19099E64920056E581 /* TypingCommand.cpp in Sources */,
                                85031B4D0A44EFC700F992E0 /* UIEvent.cpp in Sources */,
                                93354A3C0B24F8C9003F6DEA /* UIEventWithKeyState.cpp in Sources */,
+                               514C762E0CE921F4007EF3CD /* UnicodeRange.cpp in Sources */,
                                D086FE9909D53AAB005BC74D /* UnlinkCommand.cpp in Sources */,
                                65DF326109D1E199000BE325 /* UserAgentStyleSheetsData.cpp in Sources */,
                                93309E1F099E64920056E581 /* VisiblePosition.cpp in Sources */,
                                BCB16C2C0979C3BD00467741 /* loader.cpp in Sources */,
                                93309DF7099E64920056E581 /* markup.cpp in Sources */,
                                93309E1D099E64920056E581 /* visible_units.cpp in Sources */,
-                               B287B22E0CE66A820054D390 /* UnicodeRange.cpp in Sources */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
diff --git a/WebCore/bindings/js/JSCustomSQLCallback.cpp b/WebCore/bindings/js/JSCustomSQLCallback.cpp
deleted file mode 100644 (file)
index c4a122e..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Copyright (C) 2007 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
- *     its contributors may be used to endorse or promote products derived
- *     from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-#include "JSCustomSQLCallback.h"
-
-#include "CString.h"
-#include "Frame.h"
-#include "kjs_proxy.h"
-#include "JSSQLResultSet.h"
-#include "Page.h"
-
-namespace WebCore {
-
-using namespace KJS;
-
-JSCustomSQLCallback::JSCustomSQLCallback(JSObject* callback, Frame* frame)
-    : m_callback(callback)
-    , m_frame(frame)
-{
-
-}
-
-void JSCustomSQLCallback::handleEvent(SQLResultSet* resultSet)
-{
-    ASSERT(m_callback);
-    ASSERT(m_frame);
-
-    KJSProxy* proxy = m_frame->scriptProxy();
-    if (!proxy)
-        return;
-
-    ScriptInterpreter* interpreter = proxy->interpreter();
-    ExecState* exec = interpreter->globalExec();
-
-    KJS::JSLock lock;
-
-    JSValue* handleEventFuncValue = m_callback->get(exec, "handleEvent");
-    JSObject* handleEventFunc = 0;
-    if (handleEventFuncValue->isObject()) {
-        handleEventFunc = static_cast<JSObject*>(handleEventFuncValue);
-        if (!handleEventFunc->implementsCall())
-            handleEventFunc = 0;
-    }
-
-    if (!handleEventFunc && !m_callback->implementsCall()) {
-        // FIXME: Should an exception be thrown here?
-        return;
-    }
-
-    RefPtr<JSCustomSQLCallback> protect(this);
-
-    List args;
-    args.append(toJS(exec, resultSet));
-
-    interpreter->startTimeoutCheck();
-    if (handleEventFunc)
-        handleEventFunc->call(exec, m_callback, args);
-    else
-        m_callback->call(exec, m_callback, args);
-    interpreter->stopTimeoutCheck();
-
-    if (exec->hadException()) {
-        JSObject* exception = exec->exception()->toObject(exec);
-        String message = exception->get(exec, exec->propertyNames().message)->toString(exec);
-        int lineNumber = exception->get(exec, "line")->toInt32(exec);
-        String sourceURL = exception->get(exec, "sourceURL")->toString(exec);
-        if (Interpreter::shouldPrintExceptions())
-            printf("SQLCallback: %s\n", message.utf8().data());
-        if (Page* page = m_frame->page())
-            page->chrome()->addMessageToConsole(JSMessageSource, ErrorMessageLevel, message, lineNumber, sourceURL);
-        exec->clearException();
-    }
-
-    Document::updateDocumentsRendering();
-}
-
-}
diff --git a/WebCore/bindings/js/JSCustomSQLCallback.h b/WebCore/bindings/js/JSCustomSQLCallback.h
deleted file mode 100644 (file)
index 7b881b4..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright (C) 2007 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
- *     its contributors may be used to endorse or promote products derived
- *     from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "SQLCallback.h"
-
-#include <kjs/object.h>
-#include <kjs/protect.h>
-#include <wtf/Forward.h>
-
-namespace KJS {
-    class JSObject;
-}
-
-namespace WebCore {
-
-class Frame;
-class SQLResultSet;
-
-class JSCustomSQLCallback : public SQLCallback {
-public:
-    JSCustomSQLCallback(KJS::JSObject* callback, Frame*);
-
-    virtual void handleEvent(SQLResultSet*);
-private:
-    KJS::ProtectedPtr<KJS::JSObject> m_callback;
-    RefPtr<Frame> m_frame;
-};
-
-}
diff --git a/WebCore/bindings/js/JSCustomVersionChangeCallback.cpp b/WebCore/bindings/js/JSCustomVersionChangeCallback.cpp
deleted file mode 100644 (file)
index 41b304a..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Copyright (C) 2007 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
- *     its contributors may be used to endorse or promote products derived
- *     from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-#include "JSCustomVersionChangeCallback.h"
-
-#include "CString.h"
-#include "Frame.h"
-#include "kjs_proxy.h"
-#include "kjs_binding.h"
-#include "Page.h"
-
-namespace WebCore {
-
-using namespace KJS;
-
-JSCustomVersionChangeCallback::JSCustomVersionChangeCallback(JSObject* callback, Frame* frame)
-    : m_callback(callback)
-    , m_frame(frame)
-{
-
-}
-
-void JSCustomVersionChangeCallback::handleEvent(bool versionChanged)
-{
-    ASSERT(m_callback);
-    ASSERT(m_frame);
-
-    KJSProxy* proxy = m_frame->scriptProxy();
-    if (!proxy)
-        return;
-
-    ScriptInterpreter* interpreter = proxy->interpreter();
-    ExecState* exec = interpreter->globalExec();
-
-    KJS::JSLock lock;
-
-    JSValue* handleEventFuncValue = m_callback->get(exec, "handleEvent");
-    JSObject* handleEventFunc = 0;
-    if (handleEventFuncValue->isObject()) {
-        handleEventFunc = static_cast<JSObject*>(handleEventFuncValue);
-        if (!handleEventFunc->implementsCall())
-            handleEventFunc = 0;
-    }
-
-    if (!handleEventFunc && !m_callback->implementsCall()) {
-        // FIXME: Should an exception be thrown here?
-        return;
-    }
-
-    RefPtr<JSCustomVersionChangeCallback> protect(this);
-
-    List args;
-    args.append(jsBoolean(versionChanged));
-
-    interpreter->startTimeoutCheck();
-    if (handleEventFunc)
-        handleEventFunc->call(exec, m_callback, args);
-    else
-        m_callback->call(exec, m_callback, args);
-    interpreter->stopTimeoutCheck();
-
-    if (exec->hadException()) {
-        JSObject* exception = exec->exception()->toObject(exec);
-        String message = exception->get(exec, exec->propertyNames().message)->toString(exec);
-        int lineNumber = exception->get(exec, "line")->toInt32(exec);
-        String sourceURL = exception->get(exec, "sourceURL")->toString(exec);
-        if (Interpreter::shouldPrintExceptions())
-            printf("VersionChangeCallback: %s\n", message.utf8().data());
-        if (Page* page = m_frame->page())
-            page->chrome()->addMessageToConsole(JSMessageSource, ErrorMessageLevel, message, lineNumber, sourceURL);
-        exec->clearException();
-    }
-
-    Document::updateDocumentsRendering();
-}
-
-}
diff --git a/WebCore/bindings/js/JSCustomVersionChangeCallback.h b/WebCore/bindings/js/JSCustomVersionChangeCallback.h
deleted file mode 100644 (file)
index 073e8d1..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright (C) 2007 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
- *     its contributors may be used to endorse or promote products derived
- *     from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "VersionChangeCallback.h"
-
-#include <kjs/object.h>
-#include <kjs/protect.h>
-#include <wtf/Forward.h>
-
-namespace KJS {
-    class JSObject;
-}
-
-namespace WebCore {
-
-    class Frame;
-    class SQLResultSet;
-
-    class JSCustomVersionChangeCallback : public VersionChangeCallback {
-    public:
-        JSCustomVersionChangeCallback(KJS::JSObject* callback, Frame*);
-
-        virtual void handleEvent(bool versionChanges);
-    private:
-        KJS::ProtectedPtr<KJS::JSObject> m_callback;
-        RefPtr<Frame> m_frame;
-    };
-
-}
index b28ee40266dfdb0e5d9a32e44f7456c86a3b4b96..fc009b76387370de4ad5dcf9e8a7453280461161 100644 (file)
@@ -34,8 +34,8 @@
 #include "DOMWindow.h"
 #include "ExceptionCode.h"
 #include "kjs_window.h"
-#include "JSCustomSQLCallback.h"
-#include "JSCustomVersionChangeCallback.h"
+#include "JSCustomSQLTransactionCallback.h"
+#include "JSCustomSQLTransactionErrorCallback.h"
 #include "PlatformString.h"
 #include "SQLValue.h"
 #include <kjs/array_instance.h>
@@ -44,67 +44,67 @@ namespace WebCore {
 
 using namespace KJS;
 
-JSValue* JSDatabase::executeSql(ExecState* exec, const List& args)
+JSValue* JSDatabase::changeVersion(ExecState* exec, const List& args)
 {
-    String sqlStatement = args[0]->toString(exec);
-
-    // Now assemble the list of SQL arguments
-    Vector<SQLValue> SQLValues;
+    String oldVersion = args[0]->toString(exec);
+    String newVersion = args[1]->toString(exec);
 
-    if (!args[1]->isObject() ||
-        !static_cast<JSObject*>(args[1])->inherits(&ArrayInstance::info)) {
-        setDOMException(exec, TYPE_MISMATCH_ERR);
+    Frame* frame = Window::retrieveActive(exec)->impl()->frame();
+    if (!frame)
         return jsUndefined();
-    }
     
-    ArrayInstance* array = static_cast<ArrayInstance*>(args[1]);
-    
-    for (unsigned i = 0 ; i < array->getLength(); i++) {
-        JSValue* value = array->getItem(i);
-
-        if (value->isNull()) {
-            SQLValues.append(SQLValue());
-        } else if (value->isNumber()) {
-            SQLValues.append(value->getNumber());
-        } else {
-            // Convert the argument to a string and append it
-            SQLValues.append(value->toString(exec));
-        }
-    }
-
-    JSObject* callback = args[2]->getObject();
-    if (!callback) {
+    JSObject *object;
+    if (!(object = args[2]->getObject())) {
         setDOMException(exec, TYPE_MISMATCH_ERR);
         return jsUndefined();
     }
-
-    if (Frame* frame = m_impl->document()->frame()) {
-        ExceptionCode ec = 0;
-        RefPtr<SQLCallback> sqlCallback(new JSCustomSQLCallback(callback, frame));
-        m_impl->executeSql(sqlStatement, SQLValues, sqlCallback, ec);
-        setDOMException(exec, ec);
+    
+    RefPtr<SQLTransactionCallback> callback(new JSCustomSQLTransactionCallback(object, frame));
+    RefPtr<SQLTransactionErrorCallback> errorCallback;
+        
+    if (!args[3]->isNull()) {
+        if (!(object = args[3]->getObject())) {
+            setDOMException(exec, TYPE_MISMATCH_ERR);
+            return jsUndefined();
+        }
+        
+        errorCallback = new JSCustomSQLTransactionErrorCallback(object, frame);
     }
-
+    
+    m_impl->changeVersion(oldVersion, newVersion, callback.release(), errorCallback.release());
+    
     return jsUndefined();
 }
 
-JSValue* JSDatabase::changeVersion(ExecState* exec, const List& args)
+JSValue* JSDatabase::transaction(ExecState* exec, const List& args)
 {
-    String oldVersion = args[0]->toString(exec);
-    String newVersion = args[1]->toString(exec);
-
-    JSObject* callback = args[2]->getObject();
-    if (!callback) {
+    JSObject* object;
+    
+    if (!(object = args[0]->getObject())) {
         setDOMException(exec, TYPE_MISMATCH_ERR);
         return jsUndefined();
-    }
+    }        
+    Frame* frame = Window::retrieveActive(exec)->impl()->frame();
+    if (!frame)
+        return jsUndefined();
+    
+    RefPtr<SQLTransactionCallback> callback(new JSCustomSQLTransactionCallback(object, frame));
+    RefPtr<SQLTransactionErrorCallback> errorCallback;
+    
+    if (args.size() > 1 && !args[1]->isNull()) {
+        if (!(object = args[1]->getObject())) {
+            setDOMException(exec, TYPE_MISMATCH_ERR);
+            return jsUndefined();
+        }
 
-    if (Frame* frame = m_impl->document()->frame()) {
-        RefPtr<VersionChangeCallback> changeCallback(new JSCustomVersionChangeCallback(callback, frame));
-        m_impl->changeVersion(oldVersion, newVersion, changeCallback.release());
+        errorCallback = new JSCustomSQLTransactionErrorCallback(object, frame);
     }
 
+    
+    m_impl->transaction(callback.release(), errorCallback.release());
+
     return jsUndefined();
 }
-
+    
 }
diff --git a/WebCore/bindings/js/JSSQLTransactionCustom.cpp b/WebCore/bindings/js/JSSQLTransactionCustom.cpp
new file mode 100644 (file)
index 0000000..f3c1f62
--- /dev/null
@@ -0,0 +1,104 @@
+/*
+ * Copyright (C) 2007 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1.  Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ * 2.  Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
+ *     its contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include "config.h"
+#include "JSSQLTransaction.h"
+
+#include "DOMWindow.h"
+#include "ExceptionCode.h"
+#include "JSCustomSQLStatementCallback.h"
+#include "JSCustomSQLStatementErrorCallback.h"
+#include "kjs_window.h"
+#include "PlatformString.h"
+#include "SQLTransaction.h"
+#include "SQLValue.h"
+#include <kjs/array_instance.h>
+
+using namespace KJS;
+
+namespace WebCore {
+    
+JSValue* JSSQLTransaction::executeSql(ExecState* exec, const List& args)
+{
+    String sqlStatement = args[0]->toString(exec);
+    
+    // Now assemble the list of SQL arguments
+    Vector<SQLValue> sqlValues;
+    
+    if (!args[1]->isObject() ||
+        !static_cast<JSObject*>(args[1])->inherits(&ArrayInstance::info)) {
+        setDOMException(exec, TYPE_MISMATCH_ERR);
+        return jsUndefined();
+    }
+    
+    ArrayInstance* array = static_cast<ArrayInstance*>(args[1]);
+    
+    for (unsigned i = 0 ; i < array->getLength(); i++) {
+        JSValue* value = array->getItem(i);
+        
+        if (value->isNull()) {
+            sqlValues.append(SQLValue());
+        } else if (value->isNumber()) {
+            sqlValues.append(value->getNumber());
+        } else {
+            // Convert the argument to a string and append it
+            sqlValues.append(value->toString(exec));
+        }
+    }
+
+    RefPtr<SQLStatementCallback> callback;
+    if (args.size() > 2) {
+        JSObject* object;
+        if (!args[2]->isNull() && !(object = args[2]->getObject())) {
+            setDOMException(exec, TYPE_MISMATCH_ERR);
+            return jsUndefined();
+        }
+        
+        if (Frame* frame = Window::retrieveActive(exec)->impl()->frame())
+            callback = new JSCustomSQLStatementCallback(object, frame);
+    }
+    
+    RefPtr<SQLStatementErrorCallback> errorCallback;
+    if (args.size() > 3) {
+        JSObject* object;
+        if (!args[3]->isNull() && !(object = args[3]->getObject())) {
+            setDOMException(exec, TYPE_MISMATCH_ERR);
+            return jsUndefined();
+        }
+        
+        if (Frame* frame = Window::retrieveActive(exec)->impl()->frame())
+            errorCallback = new JSCustomSQLStatementErrorCallback(object, frame);
+    }
+    
+    ExceptionCode ec = 0;
+    m_impl->executeSQL(sqlStatement, sqlValues, callback.release(), errorCallback.release(), ec);
+    setDOMException(exec, ec);
+    
+    return jsUndefined();
+}
+
+}
index 3e242f802818512016e0b7e9f4f16956ddaf63d7..8185ac641794aefde976fbc1c0512fb7f740dbce 100644 (file)
@@ -563,7 +563,7 @@ double DOMWindow::devicePixelRatio() const
 }
 
 #if ENABLE(DATABASE)
-PassRefPtr<Database> DOMWindow::openDatabase(const String& name, const String& version, ExceptionCode& e)
+PassRefPtr<Database> DOMWindow::openDatabase(const String& name, const String& version, const String& displayName, unsigned long estimatedSize, ExceptionCode& ec)
 {
     if (!m_frame)
         return 0;
@@ -573,7 +573,7 @@ PassRefPtr<Database> DOMWindow::openDatabase(const String& name, const String& v
     if (!doc)
         return 0;
 
-    return Database::openDatabase(doc, name, version, e);
+    return Database::openDatabase(doc, name, version, displayName, estimatedSize, ec);
 }
 #endif
 
index a9a5857d3cc7fc6bf77bdd05c3c4db83e91124ee..37ad993a55810b2a1567378f03aff9fb477c0923 100644 (file)
@@ -134,7 +134,7 @@ namespace WebCore {
 
 #if ENABLE(DATABASE)
         // HTML 5 client-side database
-        PassRefPtr<Database> openDatabase(const String& name, const String& version, ExceptionCode&);
+        PassRefPtr<Database> openDatabase(const String& name, const String& version, const String& displayName, unsigned long estimatedSize, ExceptionCode&);
 #endif
 
         Console* console() const;
index 1689c5886f4145ed3701f75b376e525258109f29..7f2640e4b37fd39d52f1e66ffab43f34c43343ee 100644 (file)
@@ -111,7 +111,7 @@ module window {
         readonly attribute double devicePixelRatio;
 
 #if defined(ENABLE_DATABASE)
-        Database openDatabase(in DOMString name, in DOMString version)
+        Database openDatabase(in DOMString name, in DOMString version, in DOMString displayName, in unsigned long estimatedSize)
             raises(DOMException);
 #endif
 
index d3cb2e78170574862e4741327b1a20c052bd5621..e40b54cc53d4915455c146f76dc3f62f4ff691ea 100644 (file)
@@ -183,14 +183,12 @@ return {
             return;
         }
 
-        try {
-            var panel = this;
-            var query = "SELECT * FROM " + this.currentTable;
-            this.resource.database.executeSql(query, [], function(result) { panel.browseQueryFinished(result) });
-        } catch(e) {
-            // FIXME: handle this error a better way.
-            this.views.browse.contentElement.removeChildren();
-        }
+        var panel = this;
+        var query = "SELECT * FROM " + this.currentTable;
+        this.resource.database.transaction(function(tx)
+        {
+            tx.executeSql(query, [], function(tx, result) { panel.browseQueryFinished(result) }, function(tx,err){ alert(err.message); });
+        });
     },
 
     browseQueryFinished: function(result)
@@ -293,27 +291,26 @@ return {
         if (!query.length)
             return;
 
-        try {
-            var panel = this;
-            this.resource.database.executeSql(query, [], function(result) { panel.queryFinished(query, result) });
+        var panel = this;
+        this.resource.database.transaction(function(tx) 
+        {
+            tx.executeSql(query, [], function(tx, result) { panel.queryFinished(query, result) }, function(tx,err){ alert(err.message); });
+        });
 
-            this.queryPromptHistory.push(query);
-            this.queryPromptHistoryOffset = 0;
+        this.queryPromptHistory.push(query);
+        this.queryPromptHistoryOffset = 0;
 
-            this.queryPromptElement.value = "";
+        this.queryPromptElement.value = "";
 
-            if (query.match(/^select /i)) {
-                if (this.currentView !== this.views.query)
-                    this.currentView = this.views.query;
-            } else {
-                if (query.match(/^create /i) || query.match(/^drop table /i))
-                    this.updateTableList();
+        if (query.match(/^select /i)) {
+            if (this.currentView !== this.views.query)
+                this.currentView = this.views.query;
+        } else {
+            if (query.match(/^create /i) || query.match(/^drop table /i))
+                this.updateTableList();
 
-                // FIXME: we should only call updateTableBrowser() is we know the current table was modified
-                this.updateTableBrowser();
-            }
-        } catch(e) {
-            // FIXME: handle this error some way.
+            // FIXME: we should only call updateTableBrowser() is we know the current table was modified
+            this.updateTableBrowser();
         }
     },
 
@@ -356,7 +353,7 @@ return {
 
     _tableForResult: function(result)
     {
-        if (result.errorCode || !result.rows.length)
+        if (!result.rows.length)
             return null;
 
         var rows = result.rows;
similarity index 54%
rename from WebCore/storage/DatabaseCallback.cpp
rename to WebCore/storage/ChangeVersionWrapper.cpp
index 7de7a1d4f52e2558b4f99953ed0d41cff6b75de7..dc8f56289a14c945aa18b03f0e76e850831dd454 100644 (file)
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 #include "config.h"
-#include "DatabaseCallback.h"
+#include "ChangeVersionWrapper.h"
 
-#include "SQLCallback.h"
-#include "SQLResultSet.h"
-#include "VersionChangeCallback.h"
+#include "Database.h"
 
 namespace WebCore {
 
-DatabaseChangeVersionCallback::DatabaseChangeVersionCallback(PassRefPtr<VersionChangeCallback> callback, bool versionChanged)
-    : m_callback(callback)
-    , m_versionChanged(versionChanged)
+ChangeVersionWrapper::ChangeVersionWrapper(const String& oldVersion, const String& newVersion)
+    : m_oldVersion(oldVersion.copy())
+    , m_newVersion(newVersion.copy())
 {
-    ASSERT(callback->isThreadSafe());
 }
 
-void DatabaseChangeVersionCallback::performCallback()
+bool ChangeVersionWrapper::performPreflight(SQLTransaction* transaction)
 {
-    m_callback->handleEvent(m_versionChanged);
+    ASSERT(transaction && transaction->database());
+    
+    String actualVersion;
+    
+    if (!transaction->database()->getVersionFromDatabase(actualVersion)) {
+        LOG_ERROR("Unable to retrieve actual current version from database");
+        m_sqlError = new SQLError(0, "unable to verify current version of database");
+        return false;
+    }
+    
+    if (actualVersion != m_oldVersion) {
+        LOG_ERROR("Old version doesn't match actual version");
+        m_sqlError = new SQLError(2, "current version of the database and `oldVersion` argument do not match");
+        return false;
+    }
+    
+    return true;
 }
 
-DatabaseExecuteSqlCallback::DatabaseExecuteSqlCallback(PassRefPtr<SQLCallback> callback, PassRefPtr<SQLResultSet> resultSet)
-    : m_callback(callback)
-    , m_resultSet(resultSet)
+bool ChangeVersionWrapper::performPostflight(SQLTransaction* transaction)
 {
-    ASSERT(callback->isThreadSafe());
-    ASSERT(resultSet->isThreadSafe());
-}
+    ASSERT(transaction && transaction->database());
 
-void DatabaseExecuteSqlCallback::performCallback()
-{
-    m_callback->handleEvent(m_resultSet.get());
-}
+    if (!transaction->database()->setVersionInDatabase(m_newVersion)) {
+        LOG_ERROR("Unable to set new version in database");
+        m_sqlError = new SQLError(0, "unable to set new version in database");
+        return false;
+    }
 
+    transaction->database()->setExpectedVersion(m_newVersion);
+    
+    return true;
+}
+    
 } // namespace WebCore
similarity index 74%
rename from WebCore/storage/SQLCallback.h
rename to WebCore/storage/ChangeVersionWrapper.h
index 59f36afdbdb81bf26e10d7a0caf77aad66a8a765..09c44c1f60eadfa554f37c79664a505df27d8d32 100644 (file)
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
+#ifndef ChangeVersionWrapper_h
+#define ChangeVersionWrapper_h
 
-#ifndef SQLCallback_h
-#define SQLCallback_h
-
-#include "Threading.h"
+#include "PlatformString.h"
+#include "SQLTransaction.h"
 
 namespace WebCore {
 
-class SQLResultSet;
-
-class SQLCallback : public ThreadSafeShared<SQLCallback> {
+class ChangeVersionWrapper : public SQLTransactionWrapper {
 public:
-    virtual ~SQLCallback() { }
-    virtual void handleEvent(SQLResultSet*) = 0;
+    ChangeVersionWrapper(const String& oldVersion, const String& newVersion);
+
+    virtual bool performPreflight(SQLTransaction*);
+    virtual bool performPostflight(SQLTransaction*);
+
+    virtual SQLError* sqlError() const { return m_sqlError.get(); }
+private:
+    String m_oldVersion;
+    String m_newVersion;
+    RefPtr<SQLError> m_sqlError;
 };
 
 } // namespace WebCore
 
-#endif // SQLCallback_h
+#endif // ChangeVersionWrapper_h
index c65649a7cd45b209a88280db17487acca37fac4c..6ceba00d3382f6699ae8a8d69389c3da04c8e4bc 100644 (file)
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
-
 #include "config.h"
 #include "Database.h"
 
+#include "ChangeVersionWrapper.h"
 #include "CString.h"
 #include "DatabaseAuthorizer.h"
-#include "DatabaseCallback.h"
 #include "DatabaseTask.h"
 #include "DatabaseThread.h"
 #include "DatabaseTracker.h"
 #include "Logging.h"
 #include "NotImplemented.h"
 #include "Page.h"
-#include "SQLCallback.h"
 #include "SQLiteDatabase.h"
 #include "SQLiteStatement.h"
 #include "SQLResultSet.h"
-#include "VersionChangeCallback.h"
 
 namespace WebCore {
 
@@ -95,7 +92,7 @@ static const String& databaseVersionKey()
     return key;
 }
 
-PassRefPtr<Database> Database::openDatabase(Document* document, const String& name, const String& expectedVersion, ExceptionCode& e)
+PassRefPtr<Database> Database::openDatabase(Document* document, const String& name, const String& expectedVersion, const String& displayName, unsigned long estimatedSize, ExceptionCode& e)
 {
     RefPtr<Database> database = new Database(document, name, expectedVersion);
 
@@ -118,8 +115,6 @@ Database::Database(Document* document, const String& name, const String& expecte
     , m_databaseThread(0)
 {
     ASSERT(document);
-
-    // FIXME: Right now, this is the entire domain of the document, when it really needs to be scheme/host/port only
     m_securityOrigin = document->securityOrigin();
 
     if (m_name.isNull())
@@ -141,11 +136,8 @@ Database::Database(Document* document, const String& name, const String& expecte
         hashSet->add(this);
     }
 
-    {
-        MutexLocker locker(m_databaseThreadMutex);
-        m_databaseThread = document->databaseThread();
-        ASSERT(m_databaseThread);
-    }
+    m_databaseThread = document->databaseThread();
+    ASSERT(m_databaseThread);
 
     m_filename = DatabaseTracker::tracker().fullPathForDatabase(m_securityOrigin.toString(), m_name);
 }
@@ -167,17 +159,8 @@ Database::~Database()
 
 bool Database::openAndVerifyVersion(ExceptionCode& e)
 {
-    // Open the main thread connection to the database
-    if (!m_mainSQLDatabase.open(m_filename)) {
-        LOG_ERROR("Unable to open database at path %s", m_filename.ascii().data());
-        e = INVALID_STATE_ERR;
-        return false;
-    }
-
     m_databaseAuthorizer = new DatabaseAuthorizer();
-    m_mainSQLDatabase.setAuthorizer(m_databaseAuthorizer);
 
-    // Open the background thread connection
     RefPtr<DatabaseOpenTask> task = new DatabaseOpenTask();
 
     task->lockForSynchronousScheduling();
@@ -219,7 +202,7 @@ bool Database::getVersionFromDatabase(String& version)
 
     m_databaseAuthorizer->disable();
 
-    bool result = retrieveTextResultFromDatabase(m_threadSQLDatabase, getVersionQuery.copy(), version);
+    bool result = retrieveTextResultFromDatabase(m_sqliteDatabase, getVersionQuery.copy(), version);
     if (!result)
         LOG_ERROR("Failed to retrieve version from database %s", databaseDebugName().ascii().data());
 
@@ -255,7 +238,7 @@ bool Database::setVersionInDatabase(const String& version)
 
     m_databaseAuthorizer->disable();
 
-    bool result = setTextValueInDatabase(m_threadSQLDatabase, setVersionQuery.copy(), version);
+    bool result = setTextValueInDatabase(m_sqliteDatabase, setVersionQuery.copy(), version);
     if (!result)
         LOG_ERROR("Failed to set version %s in database (%s)", version.ascii().data(), setVersionQuery.ascii().data());
 
@@ -264,6 +247,16 @@ bool Database::setVersionInDatabase(const String& version)
     return result;
 }
 
+bool Database::versionMatchesExpected() const
+{
+    if (!m_expectedVersion.isEmpty()) {
+        MutexLocker locker(guidMutex());
+        return m_expectedVersion == guidToVersionMap().get(m_guid);
+    }
+    
+    return true;
+}
+
 void Database::databaseThreadGoingAway()
 {
     // FIXME: We might not need this anymore
@@ -327,17 +320,17 @@ void Database::performPolicyChecks()
 
 bool Database::performOpenAndVerify(ExceptionCode& e)
 {
-    if (!m_threadSQLDatabase.open(m_filename)) {
+    if (!m_sqliteDatabase.open(m_filename)) {
         LOG_ERROR("Unable to open database at path %s", m_filename.ascii().data());
         e = INVALID_STATE_ERR;
         return false;
     }
 
     ASSERT(m_databaseAuthorizer);
-    m_threadSQLDatabase.setAuthorizer(m_databaseAuthorizer);
+    m_sqliteDatabase.setAuthorizer(m_databaseAuthorizer);
 
-    if (!m_threadSQLDatabase.tableExists(databaseInfoTableName())) {
-        if (!m_threadSQLDatabase.executeCommand("CREATE TABLE " + databaseInfoTableName() + " (key TEXT NOT NULL ON CONFLICT FAIL UNIQUE ON CONFLICT REPLACE,value TEXT NOT NULL ON CONFLICT FAIL);")) {
+    if (!m_sqliteDatabase.tableExists(databaseInfoTableName())) {
+        if (!m_sqliteDatabase.executeCommand("CREATE TABLE " + databaseInfoTableName() + " (key TEXT NOT NULL ON CONFLICT FAIL UNIQUE ON CONFLICT REPLACE,value TEXT NOT NULL ON CONFLICT FAIL);")) {
             LOG_ERROR("Unable to create table %s in database %s", databaseInfoTableName().ascii().data(), databaseDebugName().ascii().data());
             e = INVALID_STATE_ERR;
             return false;
@@ -350,7 +343,6 @@ bool Database::performOpenAndVerify(ExceptionCode& e)
         MutexLocker locker(guidMutex());
         currentVersion = guidToVersionMap().get(m_guid);
 
-
         if (currentVersion.isNull())
             LOG(StorageAPI, "Current cached version for guid %i is null", m_guid);
         else
@@ -398,142 +390,78 @@ bool Database::performOpenAndVerify(ExceptionCode& e)
     return true;
 }
 
-void Database::scheduleDatabaseCallback(DatabaseCallback* callback)
+void Database::performTransactionStep()
 {
-    ASSERT(callback);
-    MutexLocker locker(globalCallbackMutex());
     {
-        MutexLocker locker(m_callbackMutex);
-        m_pendingCallbacks.append(callback);
-        globalCallbackSet().add(this);
-        if (!s_globalCallbackScheduled) {
-            callOnMainThread(deliverAllPendingCallbacks);
-            s_globalCallbackScheduled = true;
+        MutexLocker locker(m_transactionMutex);
+        
+        if (!m_currentTransaction) {
+            ASSERT(m_transactionQueue.size());
+            m_currentTransaction = m_transactionQueue.first();
+            m_transactionQueue.removeFirst();
         }
     }
-}
-
-void Database::performChangeVersion(const String& oldVersion, const String& newVersion, PassRefPtr<VersionChangeCallback> callback)
-{
-    // FIXME: "user agent must obtain a full lock of the database (waiting for all open transactions to be closed)"
-    // Currently, not having implemented the implicit thread transaction, we're not all too worried about this.
-    // Once the transaction is implemented, we'll have to find a way to reschedule the changeVersion over and over as long as
-    // transactions are active.  Keep on bumping it to second in line, or something!
-
-    bool result = true;
-
-    MutexLocker locker(guidMutex());
+    
+    // If this step completes the entire transaction, clear the working transaction
+    // and schedule the next one if necessary
+    if (!m_currentTransaction->performNextStep())
+        return;
+        
     {
-        // Run this code in a block to guarantee that actualVersion goes out of scope before the mutex
-        // is released, so we can avoid copying the string when inserting but still avoid
-        // string thread-safety issues
-        String actualVersion;
-        if (!getVersionFromDatabase(actualVersion)) {
-            LOG_ERROR("Unable to retrieve actual current version from database");
-            result = false;
-        }
-
-        if (result && actualVersion != oldVersion) {
-            LOG_ERROR("Old version doesn't match actual version");
-            result = false;
-        }
-
-        if (result && !setVersionInDatabase(newVersion)) {
-            LOG_ERROR("Unable to set new version in database");
-            result = false;
-        }
-
-        if (result)
-            guidToVersionMap().set(m_guid, actualVersion);
+        MutexLocker locker(m_transactionMutex);
+        m_currentTransaction = 0;
+        
+        if (m_transactionQueue.size())
+            m_databaseThread->scheduleTask(this, new DatabaseTransactionTask);
     }
-
-    scheduleDatabaseCallback(new DatabaseChangeVersionCallback(callback, result));
 }
 
-void Database::performExecuteSql(const String& sqlStatement, const Vector<SQLValue>& arguments, PassRefPtr<SQLCallback> callback)
+void Database::changeVersion(const String& oldVersion, const String& newVersion, 
+                             PassRefPtr<SQLTransactionCallback> callback, PassRefPtr<SQLTransactionErrorCallback> errorCallback)
 {
-    ASSERT(callback);
-
-    RefPtr<SQLResultSet> resultSet = new SQLResultSet;
-    bool succeeded = true;
-
-    m_databaseAuthorizer->reset();
-
-    SQLiteStatement statement(m_threadSQLDatabase, sqlStatement);
-    int result = statement.prepare();
-    if (result != SQLResultOk) {
-        LOG(StorageAPI, "Failed to prepare sql query '%s' - error was: %s", sqlStatement.ascii().data(), statement.lastErrorMsg());
-        succeeded = false;
-        resultSet->setErrorCode(1);
-        resultSet->setErrorMessage(m_threadSQLDatabase.lastErrorMsg());
-    }
-
-    if (succeeded) {
-        for (unsigned i = 0; i < arguments.size(); ++i) {
-            if (statement.bindValue(i + 1, arguments[i]) != SQLResultOk) {
-                LOG(StorageAPI, "Failed to bind value index %i to statement for query '%s'", i + 1, sqlStatement.ascii().data());
-                // FIXME: Mark the transaction invalid here once we implement the transaction part of the spec
-                succeeded = false;
-                resultSet->setErrorCode(1);
-                resultSet->setErrorMessage(m_threadSQLDatabase.lastErrorMsg());
-                break;
-            }
-        }
-    }
-
-    // Step so we can fetch the column names.
-    result = statement.step();
-    if (result == SQLResultRow && succeeded) {
-        int columnCount = statement.columnCount();
-        SQLResultSetRowList* rows = resultSet->rows();
+    scheduleTransaction(new SQLTransaction(this, callback, errorCallback, new ChangeVersionWrapper(oldVersion, newVersion)));
+}
 
-        for (int i = 0; i < columnCount; i++)
-            rows->addColumn(statement.getColumnName16(i));
+void Database::transaction(PassRefPtr<SQLTransactionCallback> callback, PassRefPtr<SQLTransactionErrorCallback> errorCallback)
+{
+    scheduleTransaction(new SQLTransaction(this, callback, errorCallback, 0));
+}
 
-        do {
-            for (int i = 0; i < columnCount; i++) {
-                // FIXME: Look at the column type
-                rows->addResult(statement.getColumnText16(i));
-            }
+void Database::scheduleTransaction(PassRefPtr<SQLTransaction> transaction)
+{   
+    MutexLocker locker(m_transactionMutex);
+    m_transactionQueue.append(transaction);
+    if (!m_currentTransaction)
+        m_databaseThread->scheduleTask(this, new DatabaseTransactionTask);
+}
 
-            result = statement.step();
-        } while (result == SQLResultRow);
+void Database::scheduleTransactionStep()
+{
+    MutexLocker locker(m_transactionMutex);
+    m_databaseThread->scheduleTask(this, new DatabaseTransactionTask);
+}
 
-        if (result != SQLResultDone) {
-            resultSet->setErrorCode(1);
-            resultSet->setErrorMessage(m_threadSQLDatabase.lastErrorMsg());
-            succeeded = false;
+void Database::scheduleTransactionCallback(SQLTransaction* transaction)
+{    
+    MutexLocker locker(globalCallbackMutex());
+    {
+        MutexLocker locker(m_callbackMutex);
+        
+        ASSERT(!m_transactionPendingCallback);
+        m_transactionPendingCallback = transaction;
+        globalCallbackSet().add(this);
+        if (!s_globalCallbackScheduled) {
+            callOnMainThread(deliverAllPendingCallbacks);
+            s_globalCallbackScheduled = true;
         }
-    } else if (result == SQLResultDone && succeeded) {
-        // Didn't find anything, or was an insert
-        if (m_databaseAuthorizer->lastActionWasInsert())
-            resultSet->setInsertId(m_threadSQLDatabase.lastInsertRowID());
-    } else if (succeeded) {
-        // A new error occured on the first step of the statement - record it here
-        resultSet->setErrorCode(1);
-        resultSet->setErrorMessage(m_threadSQLDatabase.lastErrorMsg());
-        succeeded = false;
     }
-
-    // FIXME: If the spec allows triggers, and we want to be "accurate" in a different way, we'd use
-    // sqlite3_total_changes() here instead of sqlite3_changed, because that includes rows modified from within a trigger
-    // For now, this seems sufficient
-    if (succeeded)
-        resultSet->setRowsAffected(m_threadSQLDatabase.lastChanges());
-
-    scheduleDatabaseCallback(new DatabaseExecuteSqlCallback(callback, resultSet.release()));
-}
-
-void Database::performCloseTransaction()
-{
-    notImplemented();
 }
 
 Vector<String> Database::performGetTableNames()
 {
     disableAuthorizer();
 
-    SQLiteStatement statement(m_threadSQLDatabase, "SELECT name FROM sqlite_master WHERE type='table';");
+    SQLiteStatement statement(m_sqliteDatabase, "SELECT name FROM sqlite_master WHERE type='table';");
     if (statement.prepare() != SQLResultOk) {
         LOG_ERROR("Unable to retrieve list of tables for database %s", databaseDebugName().ascii().data());
         enableAuthorizer();
@@ -563,79 +491,7 @@ String Database::version() const
     MutexLocker locker(guidMutex());
     return guidToVersionMap().get(m_guid).copy();
 }
-
-void Database::changeVersion(const String& oldVersion, const String& newVersion, PassRefPtr<VersionChangeCallback> callback)
-{
-    ASSERT(m_databaseThread);
-    m_databaseThread->scheduleTask(this, new DatabaseChangeVersionTask(oldVersion, newVersion, callback));
-}
-
-void Database::executeSql(const String& sqlStatement, const Vector<SQLValue>& arguments, PassRefPtr<SQLCallback> callback, ExceptionCode& e)
-{
-    // 4.11.3 Step 1 - Statement and argument validation
-    // FIXME: Currently the best way we have to validate the statement is to create an actual SQLiteStatement and prepare it.  We can't prepare on
-    // the main thread and run on the worker thread, because the worker thread might be in the middle of database activity.  So we have two options
-    // 1 - Break up the executeSql task into two steps.  Step 1 is prepare the statement on the background thread while the main thread waits.  If
-    //     the statement is valid, the main thread can return and step 2 would continue asynchronously, actually running the statement and generating results
-    //     The synchronous step 1 could "cut in line", but the main thread could still block waiting for any currently running query to complete
-    // 2 - Keep a main thread connection around, and keep a worker thread connection around.  The main thread connection will be used solely to prepare
-    //     statements, checking them for validity.  After a statement is clear,  the work can be scheduled on the background thread.  This way, if there is a
-    //     read-only query running on the background thread, the main thread can simultaneously do the prepare on the main thread and there will be no
-    //     contention.  This is an advantage over #1.  A disadvantage is that between the prepare on the main thread and actually performing the query on the
-    //     background thread, there is a time window where the schema could change and the statement is no longer valid.
-    // 3 - A much more complex, less tested, but possibly premium solution is to do #1, but combine it with the use of the sqlite_busy_handler.  This would allow
-    //     any long-running queries to periodically check and see if there's anything they need to do.  The sqlite3 docs claim sqlite is theoretically reentrant,
-    //     and therefore a statement could be prepared inside a busy handler, if just to check for validation.  But it is also likely untested, and is not recc.
-    //     Testing must be done on this possibility before going forward with it
-    //
-    //     For now, I'm going with solution #2, as it is easiest to implement and the true badness of its "con" is dubious.
-
-    SQLiteStatement statement(m_mainSQLDatabase, sqlStatement);
-    int result = statement.prepare();
-
-    // Workaround for <rdar://problem/5537019> - a prepare on 1 connection immediately after a statement that changes the schema on the second connection
-    // can fail with a SQLResultSchema error.  Trying to prepare it a second time will succeed, assuming it is actually a valid statement
-    if (result == SQLResultSchema) {
-        statement.finalize();
-        result = statement.prepare();
-    }
-
-    if (result != SQLResultOk) {
-        LOG(StorageAPI, "Unable to verify correctness of statement %s - error %i (%s)", sqlStatement.ascii().data(), result, statement.lastErrorMsg());
-        e = SYNTAX_ERR;
-        return;
-    }
-
-    // FIXME:  If the statement uses the ?### syntax supported by sqlite, the bind parameter count is very likely off from the number of question marks.
-    // If this is the case, they might be trying to do something fishy or malicious
-    if (statement.bindParameterCount() != arguments.size()) {
-        LOG(StorageAPI, "Bind parameter count doesn't match number of question marks - someone's trying to use the ?### format and this might be bad");
-        e = SYNTAX_ERR;
-        return;
-    }
-
-    statement.finalize();
-
-    // FIXME: There is one remaining error with the above procedure.  The statement might have ?### style binds in it that will still escape the above checks
-    // For example, a statement with "?2 ?2" in it will have 2 question marks, a bind parameter count of 2, but bind number 1 will not be valid.
-    // To catch this, we either need to do a dry run of bindings here (which might be expensive), or do some manual parsing to make sure ?### isn't used at all
-
-    // FIXME: Haven't yet implemented the thread global transaction due to ambiguity/churn in the spec
-    // 4.11.3 Step 2 - Assign existing transaction or begin a new one to "transaction" associated with this statement
-
-    // FIXME: Haven't yet implemented the thread global transaction due to ambiguity/churn in the spec
-    // 4.11.3 Step 3 - If "transaction" is marked as bad, throw "INVALID_STATE_ERR" exception
-
-    ASSERT(m_databaseThread);
-    m_databaseThread->scheduleTask(this, new DatabaseExecuteSqlTask(sqlStatement, arguments, callback));
-}
-
-void Database::closeTransaction()
-{
-    // FIXME: Haven't yet implemented the thread global transaction due to ambiguity/churn in the spec
-    notImplemented();
-}
-
+    
 void Database::deliverAllPendingCallbacks()
 {
     Vector<RefPtr<Database> > databases;
@@ -648,20 +504,20 @@ void Database::deliverAllPendingCallbacks()
 
     LOG(StorageAPI, "Having %u databases deliver their pending callbacks", databases.size());
     for (unsigned i = 0; i < databases.size(); ++i)
-        databases[i]->deliverPendingCallbacks();
+        databases[i]->deliverPendingCallback();
 }
 
-void Database::deliverPendingCallbacks()
+void Database::deliverPendingCallback()
 {
-    Vector<RefPtr<DatabaseCallback> > callbacks;
+    RefPtr<SQLTransaction> transaction;
     {
         MutexLocker locker(m_callbackMutex);
-        callbacks.swap(m_pendingCallbacks);
+        
+        ASSERT(m_transactionPendingCallback);
+        transaction = m_transactionPendingCallback.release();
     }
 
-    LOG(StorageAPI, "Delivering %u callbacks for database %p", callbacks.size(), this);
-    for (unsigned i = 0; i < callbacks.size(); ++i)
-        callbacks[i]->performCallback();
+    transaction->performPendingCallback();
 }
 
 Vector<String> Database::tableNames()
@@ -675,4 +531,10 @@ Vector<String> Database::tableNames()
     return task->tableNames();
 }
 
+void Database::setExpectedVersion(const String& version)
+{
+    m_expectedVersion = version.copy();
+}
+
+
 }
index c67c0917ac1351def6a0aad2316abf0cbf501f6e..6f5d86a341283e06ab74a930fdac9bd4263608fc 100644 (file)
 #include "PlatformString.h"
 #include "SecurityOrigin.h"
 #include "SQLiteDatabase.h"
+#include "SQLTransaction.h"
 #include "StringHash.h"
 #include "Threading.h"
 #include "Timer.h"
-#include "VersionChangeCallback.h"
 
 #include <wtf/Forward.h>
 #include <wtf/HashSet.h>
 namespace WebCore {
 
 class DatabaseAuthorizer;
-class DatabaseCallback;
 class DatabaseThread;
 class Document;
-class SQLCallback;
 class SQLResultSet;
+class SQLTransactionCallback;
+class SQLTransactionErrorCallback;
 class SQLValue;
-
+    
 typedef int ExceptionCode;
 
 class Database : public ThreadSafeShared<Database> {
+    friend class SQLStatement;
+    friend class SQLTransaction;
 public:
     ~Database();
 
 // Direct support for the DOM API
-    static PassRefPtr<Database> openDatabase(Document* document, const String& name, const String& expectedVersion, ExceptionCode&);
-
+    static PassRefPtr<Database> openDatabase(Document* document, const String& name, const String& expectedVersion, const String& displayName, unsigned long estimatedSize, ExceptionCode&);
     String version() const;
-    void changeVersion(const String& oldVersion, const String& newVersion, PassRefPtr<VersionChangeCallback> callback);
-
-    void executeSql(const String& sqlStatement, const Vector<SQLValue>& arguments, PassRefPtr<SQLCallback> callback, ExceptionCode&);
-    void closeTransaction();
-
+    void changeVersion(const String& oldVersion, const String& newVersion, 
+                       PassRefPtr<SQLTransactionCallback> callback, PassRefPtr<SQLTransactionErrorCallback> errorCallback);
+    void transaction(PassRefPtr<SQLTransactionCallback> callback, PassRefPtr<SQLTransactionErrorCallback> errorCallback);
+    
 // Internal engine support
     void databaseThreadGoingAway();
     static const String& databaseInfoTableName();
@@ -81,23 +81,34 @@ public:
 
     Document* document() const { return m_document; }
     
+    bool getVersionFromDatabase(String&);
+    bool setVersionInDatabase(const String&);
+    void setExpectedVersion(const String&);
+    bool versionMatchesExpected() const;
+    
 // Called from DatabaseThread, must be prepared to work on the background thread
     void resetAuthorizer();
     void performPolicyChecks();
 
     bool performOpenAndVerify(ExceptionCode&);
-    void performChangeVersion(const String& oldVersion, const String& newVersion, PassRefPtr<VersionChangeCallback> callback);
-    void performExecuteSql(const String& sqlStatement, const Vector<SQLValue>& arguments, PassRefPtr<SQLCallback> callback);
-    void performCloseTransaction();
+
+    void performTransactionStep();
+
     Vector<String> performGetTableNames();
 
 private:
     Database(Document* document, const String& name, const String& expectedVersion);
 
     bool openAndVerifyVersion(ExceptionCode&);
-    bool getVersionFromDatabase(String&);
-    bool setVersionInDatabase(const String&);
 
+    void scheduleTransaction(PassRefPtr<SQLTransaction>);
+    void scheduleTransactionCallback(SQLTransaction*);
+    void scheduleTransactionStep();
+    
+    Mutex m_transactionMutex;
+    Deque<RefPtr<SQLTransaction> > m_transactionQueue;
+    RefPtr<SQLTransaction> m_currentTransaction;
+    
     static void scheduleFileSizeTimerOnMainThread(Database*);
     static void performScheduleFileSizeTimers();
     void scheduleFileSizeTimer();
@@ -105,12 +116,8 @@ private:
     OwnPtr<Timer<Database> > m_sizeTimer;
 
     static void deliverAllPendingCallbacks();
-    void deliverPendingCallbacks();
-
-    void scheduleDatabaseCallback(DatabaseCallback*);
+    void deliverPendingCallback();
 
-    // FIXME: Is it okay to reconcile hanging on to the raw pointer?  We definitely have to rely on
-    // Document telling DatabaseThread it's going away, and DatabaseThread telling Database its going away
     Document* m_document;
     SecurityOrigin m_securityOrigin;
     String m_name;
@@ -118,15 +125,13 @@ private:
     String m_expectedVersion;
     String m_filename;
 
-    SQLiteDatabase m_mainSQLDatabase;
-    SQLiteDatabase m_threadSQLDatabase;
+    SQLiteDatabase m_sqliteDatabase;
     RefPtr<DatabaseAuthorizer> m_databaseAuthorizer;
 
-    Mutex m_databaseThreadMutex;
     DatabaseThread* m_databaseThread;
 
     Mutex m_callbackMutex;
-    Vector<RefPtr<DatabaseCallback> > m_pendingCallbacks;
+    RefPtr<SQLTransaction> m_transactionPendingCallback;
 
 #ifndef NDEBUG
     String databaseDebugName() const { return m_securityOrigin.toString() + "::" + m_name; }
index 797eb7046c35d9ebc9cd45116b9fa9041eb8c409..080cc66eacd5ac4c8a57225e55d5a6a5a7020153 100644 (file)
@@ -30,9 +30,8 @@ module storage {
 
     interface Database {
         readonly attribute DOMString version;
-        [Custom] boolean changeVersion(in DOMString oldVersion, in DOMString newVersion, in VersionChangeCallback callback);
-        [Custom] void executeSql(in DOMString sqlStatement, in ObjectArray arguments, in SQLCallback callback);
-        void closeTransaction();
+        [Custom] void changeVersion(in DOMString oldVersion, in DOMString newVersion, in SQLTransactionCallback callback, in SQLTransactionErrorCallback errorCallback);
+        [Custom] void transaction(in SQLTransactionCallback callback, in SQLTransactionErrorCallback errorCallback);
     };
 
 }
index 1f597efb7e80aa4416d34d905d9d174f33dd0556..f2d107f7a7cd4d058e3c04ffa8178f6018bdf5be 100644 (file)
 #include "Database.h"
 #include "Logging.h"
 #include "SQLValue.h"
-#include "SQLCallback.h"
 
 namespace WebCore {
 
 DatabaseTask::DatabaseTask()
     : m_complete(false)
-    , m_synchronous(false)
 {
 }
 
@@ -52,8 +50,9 @@ void DatabaseTask::performTask(Database* db)
 
     LOG(StorageAPI, "Performing DatabaseTask %p\n", this);
 
-    if (m_synchronous)
-        m_synchronousMutex.lock();
+    if (m_synchronousMutex)
+        m_synchronousMutex->lock();
+        
 
     db->resetAuthorizer();
     doPerformTask(db);
@@ -61,26 +60,28 @@ void DatabaseTask::performTask(Database* db)
 
     m_complete = true;
 
-    if (m_synchronous) {
-        m_synchronousCondition.signal();
-        m_synchronousMutex.unlock();
+    if (m_synchronousMutex) {
+        ASSERT(m_synchronousCondition);
+        m_synchronousCondition->signal();
+        m_synchronousMutex->unlock();
     }
+
 }
 
 void DatabaseTask::lockForSynchronousScheduling()
 {
-    m_synchronousMutex.lock();
-    m_synchronous = true;
+    ASSERT(!m_synchronousMutex);
+    m_synchronousMutex.set(new Mutex);
+    m_synchronousMutex->lock();
 }
 
 void DatabaseTask::waitForSynchronousCompletion()
 {
     // Caller of this method must lock this object beforehand
-    ASSERT(m_synchronousMutex.tryLock() == false);
-
-    m_synchronousCondition.wait(m_synchronousMutex);
-    m_synchronous = false;
-    m_synchronousMutex.unlock();
+    ASSERT(m_synchronousMutex && m_synchronousMutex->tryLock() == false);
+    m_synchronousCondition.set(new ThreadCondition);
+    m_synchronousCondition->wait(*m_synchronousMutex.get());
+    m_synchronousMutex->unlock();
 }
 
 // *** DatabaseOpenTask ***
@@ -101,34 +102,14 @@ void DatabaseOpenTask::doPerformTask(Database* db)
 // *** DatabaseExecuteSqlTask ***
 // Runs the passed in sql query along with the arguments, and calls the callback with the results
 
-DatabaseExecuteSqlTask::DatabaseExecuteSqlTask(const String& query, const Vector<SQLValue>& arguments, PassRefPtr<SQLCallback> callback)
+DatabaseTransactionTask::DatabaseTransactionTask()
     : DatabaseTask()
-    , m_query(query.copy())
-    , m_arguments(arguments)
-    , m_callback(callback)
-{
-    ASSERT(callback->isThreadSafe());
-}
-
-void DatabaseExecuteSqlTask::doPerformTask(Database* db)
-{
-    db->performExecuteSql(m_query, m_arguments, m_callback);
-}
-
-// *** DatabaseChangeVersionTask ***
-// Atomically verifies the current version is the same as the passed in "old version", and changes it to the new version
-
-DatabaseChangeVersionTask::DatabaseChangeVersionTask(const String& oldVersion, const String& newVersion, PassRefPtr<VersionChangeCallback> callback)
-    : m_oldVersion(oldVersion.copy())
-    , m_newVersion(newVersion.copy())
-    , m_callback(callback)
 {
-    ASSERT(callback->isThreadSafe());
 }
 
-void DatabaseChangeVersionTask::doPerformTask(Database* db)
+void DatabaseTransactionTask::doPerformTask(Database* db)
 {
-    db->performChangeVersion(m_oldVersion, m_newVersion, m_callback);
+    db->performTransactionStep();
 }
 
 // *** DatabaseTableNamesTask ***
index 663ff917bd635dad27e56ebb7550718efeecbcf5..6899e4cd06f71240b334f8085a6040036299a600 100644 (file)
@@ -31,6 +31,7 @@
 #include "ExceptionCode.h"
 #include "PlatformString.h"
 #include "Threading.h"
+#include <wtf/OwnPtr.h>
 #include <wtf/PassRefPtr.h>
 #include <wtf/Vector.h>
 
@@ -40,6 +41,7 @@ class Database;
 class DatabaseThread;
 class SQLValue;
 class SQLCallback;
+class SQLTransaction;
 class VersionChangeCallback;
 
 class DatabaseTask : public ThreadSafeShared<DatabaseTask>
@@ -61,9 +63,8 @@ private:
 
     bool m_complete;
 
-    Mutex m_synchronousMutex;
-    bool m_synchronous;
-    ThreadCondition m_synchronousCondition;
+    OwnPtr<Mutex> m_synchronousMutex;
+    OwnPtr<ThreadCondition> m_synchronousCondition;
 };
 
 class DatabaseOpenTask : public DatabaseTask
@@ -82,38 +83,10 @@ private:
     bool m_success;
 };
 
-class DatabaseChangeVersionTask : public DatabaseTask
+class DatabaseTransactionTask : public DatabaseTask
 {
 public:
-    DatabaseChangeVersionTask(const String& oldVersion, const String& newVersion, PassRefPtr<VersionChangeCallback>);
-
-protected:
-    virtual void doPerformTask(Database* db);
-
-private:
-    String m_oldVersion;
-    String m_newVersion;
-    RefPtr<VersionChangeCallback> m_callback;
-};
-
-class DatabaseExecuteSqlTask : public DatabaseTask
-{
-public:
-    DatabaseExecuteSqlTask(const String& query, const Vector<SQLValue>& arguments, PassRefPtr<SQLCallback> callback);
-
-protected:
-    virtual void doPerformTask(Database* db);
-
-private:
-    String m_query;
-    Vector<SQLValue> m_arguments;
-    RefPtr<SQLCallback> m_callback;
-};
-
-class DatabaseCloseTransactionTask: public DatabaseTask
-{
-public:
-    DatabaseCloseTransactionTask();
+    DatabaseTransactionTask();
 
 protected:
     virtual void doPerformTask(Database* db);
diff --git a/WebCore/storage/SQLCallback.idl b/WebCore/storage/SQLCallback.idl
deleted file mode 100644 (file)
index 657ab52..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (C) 2007 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
- *     its contributors may be used to endorse or promote products derived
- *     from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module storage {
-
-    interface SQLCallback {
-        void handleEvent(in SQLResultSet resultSet);
-    };
-
-}
index 04dfa72fccd86ad640b48e4ade53505931f50021..ddeebc525bc2599dd2c59d0da3eb5f2c70cf5281 100644 (file)
@@ -36,9 +36,9 @@ namespace WebCore {
 
 class SQLError : public ThreadSafeShared<SQLError> {
 public:
-    SQLError(unsigned code, const String& message) : m_code(code), m_message(message) { }
+    SQLError(unsigned code, const String& message) : m_code(code), m_message(message.copy()) { }
     unsigned code() const { return m_code; }
-    const String& message() const { return m_message; }
+    String message() const { return m_message.copy(); }
     
 private:
     unsigned m_code;
index 1912351b79bbf2099d235be34101d11b95358b41..b67bae71881d79c855f924c98c8aceb8331448a8 100644 (file)
@@ -41,8 +41,6 @@ SQLResultSet::SQLResultSet()
     , m_insertId(0)
     , m_insertIdSet(false)
     , m_rowsAffected(0)
-    , m_errorCode(0)
-    , m_error("")
 {
 }
 
@@ -62,21 +60,8 @@ int SQLResultSet::rowsAffected() const
     return m_rowsAffected;
 }
 
-unsigned SQLResultSet::errorCode() const
-{
-    return m_errorCode;
-}
-
-String SQLResultSet::error() const
-{
-    return m_error;
-}
-
 SQLResultSetRowList* SQLResultSet::rows() const
 {
-    if (m_errorCode != 0)
-        return 0;
-
     return m_rows.get();
 }
 
@@ -93,21 +78,4 @@ void SQLResultSet::setRowsAffected(int count)
     m_rowsAffected = count;
 }
 
-void SQLResultSet::setErrorCode(unsigned code)
-{
-    ASSERT(code <= MaxErrorCode);
-    m_errorCode = code;
-}
-
-void SQLResultSet::setErrorMessage(const String& message)
-{
-    // 4.11.4 - The error DOM attribute must return an error message...describing the error encountered by the last statement.
-    // If there was no error, the attribute's value must be the empty string (not the null string)
-
-    if (message.isNull())
-        m_error = "";
-    else
-        m_error = message.copy();
-}
-
 }
index fd850ae96f7636467bd4d58c6b7a7cd00217cb4a..323b9ed11ad5d8b0176f007e452be0b2a2d14d4f 100644 (file)
@@ -49,22 +49,15 @@ public:
     int64_t insertId(ExceptionCode&) const;
     int rowsAffected() const;
 
-    unsigned errorCode() const;
-    String error() const;
-
 // For internal (non-JS) use
     void setInsertId(int64_t);
     void setRowsAffected(int);
-    void setErrorCode(unsigned);
-    void setErrorMessage(const String&);
 
 private:
     RefPtr<SQLResultSetRowList> m_rows;
     int64_t m_insertId;
     bool m_insertIdSet;
     int m_rowsAffected;
-    unsigned m_errorCode;
-    String m_error;
 };
 
 } // namespace WebCore
index c76c5d38b0ded3d39a7d3ca83d7b80b3f24a285b..fbad936dc939adff44e4429532928865cacd99f3 100644 (file)
@@ -34,7 +34,5 @@ module storage {
         readonly attribute int insertId
             getter raises(DOMException);
         readonly attribute int rowsAffected;
-        readonly attribute unsigned int errorCode;
-        readonly attribute DOMString error;
     };
 }
diff --git a/WebCore/storage/SQLStatement.cpp b/WebCore/storage/SQLStatement.cpp
new file mode 100644 (file)
index 0000000..3b46afb
--- /dev/null
@@ -0,0 +1,153 @@
+/*
+ * Copyright (C) 2007 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1.  Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ * 2.  Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
+ *     its contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include "config.h"
+#include "SQLStatement.h"
+
+#include "Database.h"
+#include "DatabaseAuthorizer.h"
+#include "Logging.h"
+#include "SQLError.h"
+#include "SQLiteDatabase.h"
+#include "SQLiteStatement.h"
+#include "SQLResultSet.h"
+#include "SQLStatementCallback.h"
+#include "SQLStatementErrorCallback.h"
+#include "SQLTransaction.h"
+#include "SQLValue.h"
+
+namespace WebCore {
+
+SQLStatement::SQLStatement(const String& statement, const Vector<SQLValue>& arguments, PassRefPtr<SQLStatementCallback> callback, PassRefPtr<SQLStatementErrorCallback> errorCallback)
+    : m_statement(statement.copy())
+    , m_arguments(arguments)
+    , m_statementCallback(callback)
+    , m_statementErrorCallback(errorCallback)
+{
+}
+   
+bool SQLStatement::execute(Database* db)
+{
+    ASSERT(!m_resultSet);
+
+    // This transaction might have been marked bad while it was being set up on the main thread
+    if (m_error)
+        return false;
+        
+    SQLiteDatabase* database = &db->m_sqliteDatabase;
+    
+    SQLiteStatement statement(*database, m_statement);
+    int result = statement.prepare();
+
+    if (result != SQLResultOk) {
+        LOG(StorageAPI, "Unable to verify correctness of statement %s - error %i (%s)", m_statement.ascii().data(), result, statement.lastErrorMsg());
+        m_error = new SQLError(1, database->lastErrorMsg());
+        return false;
+    }
+
+    // FIXME:  If the statement uses the ?### syntax supported by sqlite, the bind parameter count is very likely off from the number of question marks.
+    // If this is the case, they might be trying to do something fishy or malicious
+    if (statement.bindParameterCount() != m_arguments.size()) {
+        LOG(StorageAPI, "Bind parameter count doesn't match number of question marks");
+        m_error = new SQLError(1, "number of '?'s in statement string does not match argument count");
+        return false;
+    }
+
+    for (unsigned i = 0; i < m_arguments.size(); ++i) {
+        if (statement.bindValue(i + 1, m_arguments[i]) != SQLResultOk) {
+            LOG(StorageAPI, "Failed to bind value index %i to statement for query '%s'", i + 1, m_statement.ascii().data());
+            m_error = new SQLError(1, database->lastErrorMsg());
+            return false;
+        }
+    }
+
+    RefPtr<SQLResultSet> resultSet = new SQLResultSet;
+
+    // Step so we can fetch the column names.
+    result = statement.step();
+    if (result == SQLResultRow) {
+        int columnCount = statement.columnCount();
+        SQLResultSetRowList* rows = resultSet->rows();
+
+        for (int i = 0; i < columnCount; i++)
+            rows->addColumn(statement.getColumnName16(i));
+
+        do {
+            for (int i = 0; i < columnCount; i++) {
+                // FIXME: Look at the column type?
+                rows->addResult(statement.getColumnText16(i));
+            }
+
+            result = statement.step();
+        } while (result == SQLResultRow);
+
+        if (result != SQLResultDone) {
+            m_error = new SQLError(1, database->lastErrorMsg());
+            return false;
+        }
+    } else if (result == SQLResultDone) {
+        // Didn't find anything, or was an insert
+        if (db->m_databaseAuthorizer->lastActionWasInsert())
+            resultSet->setInsertId(database->lastInsertRowID());
+    } else {
+        m_error = new SQLError(1, database->lastErrorMsg());
+        return false;
+    }
+
+    // FIXME: If the spec allows triggers, and we want to be "accurate" in a different way, we'd use
+    // sqlite3_total_changes() here instead of sqlite3_changed, because that includes rows modified from within a trigger
+    // For now, this seems sufficient
+    resultSet->setRowsAffected(database->lastChanges());
+
+    m_resultSet = resultSet;
+    return true;
+}
+
+void SQLStatement::setVersionMismatchedError()
+{
+    ASSERT(!m_error && !m_resultSet);
+    m_error = new SQLError(2, "current version of the database and `oldVersion` argument do not match");
+}
+
+bool SQLStatement::performCallback(SQLTransaction* transaction)
+{
+    ASSERT(transaction);
+    
+    bool callbackError = false;
+    
+    // Call the appropriate statement callback and track if it resulted in an error,
+    // because then we need to jump to the transaction error callback.
+    if (m_error) {
+        ASSERT(m_statementErrorCallback);
+        callbackError = m_statementErrorCallback->handleEvent(transaction, m_error.get());
+    } else if (m_statementCallback)
+        m_statementCallback->handleEvent(transaction, m_resultSet.get(), callbackError);
+
+    return callbackError;
+}
+
+} // namespace WebCore
similarity index 61%
rename from WebCore/storage/DatabaseCallback.h
rename to WebCore/storage/SQLStatement.h
index 4e0ba8645babd4a0f39fd32e70fcd81e2383fd20..e9b6d60b11a1c596928b0911520f8f9ee464be1b 100644 (file)
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
+#ifndef SQLStatment_h
+#define SQLStatment_h
 
-#ifndef DatabaseCallback_h
-#define DatabaseCallback_h
-
+#include "PlatformString.h"
 #include "Threading.h"
+
+#include "SQLError.h"
+#include "SQLResultSet.h"
+#include "SQLStatementCallback.h"
+#include "SQLStatementErrorCallback.h"
+#include "SQLValue.h"
+
 #include <wtf/PassRefPtr.h>
 #include <wtf/RefPtr.h>
+#include <wtf/Vector.h>
 
 namespace WebCore {
 
-class SQLCallback;
-class SQLResultSet;
-class VersionChangeCallback;
-
-class DatabaseCallback : public ThreadSafeShared<DatabaseCallback> {
-public:
-    virtual ~DatabaseCallback() { }
-    virtual void performCallback() = 0;
-};
+class Database;
+class SQLTransaction;
+class String;
 
-class DatabaseChangeVersionCallback : public DatabaseCallback {
+class SQLStatement : public ThreadSafeShared<SQLStatement> {
 public:
-    DatabaseChangeVersionCallback(PassRefPtr<VersionChangeCallback>, bool versionChanged);
-    virtual ~DatabaseChangeVersionCallback() { }
-    virtual void performCallback();
+    SQLStatement(const String& statement, const Vector<SQLValue>& arguments, PassRefPtr<SQLStatementCallback> callback, PassRefPtr<SQLStatementErrorCallback> errorCallback);
+    
+    bool execute(Database*);
+    bool hasStatementCallback() const { return m_statementCallback; }
+    bool hasStatementErrorCallback() const { return m_statementErrorCallback; }
+    void setVersionMismatchedError();
 
+    bool performCallback(SQLTransaction*);
+    
+    SQLError* sqlError() const { return m_error.get(); }
 private:
-    RefPtr<VersionChangeCallback> m_callback;
-    bool m_versionChanged;
-};
-
-class DatabaseExecuteSqlCallback : public DatabaseCallback {
-public:
-    DatabaseExecuteSqlCallback(PassRefPtr<SQLCallback>, PassRefPtr<SQLResultSet>);
-    virtual ~DatabaseExecuteSqlCallback() { }
-    virtual void performCallback();
-private:
-    RefPtr<SQLCallback> m_callback;
+    String m_statement;
+    Vector<SQLValue> m_arguments;
+    RefPtr<SQLStatementCallback> m_statementCallback;
+    RefPtr<SQLStatementErrorCallback> m_statementErrorCallback;
+    
+    RefPtr<SQLError> m_error;
     RefPtr<SQLResultSet> m_resultSet;
 };
 
 } // namespace WebCore
 
-#endif // DatabaseCallback_h
+#endif // SQLStatment_h
diff --git a/WebCore/storage/SQLTransaction.cpp b/WebCore/storage/SQLTransaction.cpp
new file mode 100644 (file)
index 0000000..f4de111
--- /dev/null
@@ -0,0 +1,333 @@
+/*
+ * Copyright (C) 2007 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1.  Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ * 2.  Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
+ *     its contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include "config.h"
+#include "SQLTransaction.h"
+
+#include "Database.h"
+#include "DatabaseAuthorizer.h"
+#include "ExceptionCode.h"
+#include "Logging.h"
+#include "PlatformString.h"
+#include "SQLError.h"
+#include "SQLiteTransaction.h"
+#include "SQLResultSet.h"
+#include "SQLStatement.h"
+#include "SQLStatementCallback.h"
+#include "SQLStatementErrorCallback.h"
+#include "SQLValue.h"
+
+namespace WebCore {
+
+SQLTransaction::SQLTransaction(Database* db, PassRefPtr<SQLTransactionCallback> callback, PassRefPtr<SQLTransactionErrorCallback> errorCallback, PassRefPtr<SQLTransactionWrapper> wrapper)
+    : m_nextStep(&SQLTransaction::openTransactionAndPreflight)
+    , m_executeSqlAllowed(false)
+    , m_database(db)
+    , m_wrapper(wrapper)
+    , m_callback(callback)
+    , m_errorCallback(errorCallback)
+    , m_shouldCommitAfterErrorCallback(true)
+{
+    ASSERT(m_database);
+}
+
+void SQLTransaction::executeSQL(const String& sqlStatement, const Vector<SQLValue>& arguments, PassRefPtr<SQLStatementCallback> callback, PassRefPtr<SQLStatementErrorCallback> callbackError, ExceptionCode& e)
+{
+    if (!m_executeSqlAllowed) {
+        e = INVALID_STATE_ERR;
+        return;
+    }
+    
+    RefPtr<SQLStatement> statement = new SQLStatement(sqlStatement.copy(), arguments, callback, callbackError);
+    
+    if (!m_database->versionMatchesExpected())
+        statement->setVersionMismatchedError();
+        
+    enqueueStatement(statement);
+}
+
+void SQLTransaction::enqueueStatement(PassRefPtr<SQLStatement> statement)
+{
+    MutexLocker locker(m_statementMutex);
+    m_statementQueue.append(statement);
+}
+
+bool SQLTransaction::performNextStep()
+{
+    ASSERT(m_nextStep == &SQLTransaction::openTransactionAndPreflight ||
+           m_nextStep == &SQLTransaction::runStatements ||
+           m_nextStep == &SQLTransaction::postflightAndCommit ||
+           m_nextStep == &SQLTransaction::cleanupAfterTransactionErrorCallback);
+               
+    (this->*m_nextStep)();
+
+    // If there is no nextStep after performing the above step, the transaction is complete
+    return !m_nextStep;
+}
+
+void SQLTransaction::performPendingCallback()
+{
+    ASSERT(m_nextStep == &SQLTransaction::deliverTransactionCallback ||
+           m_nextStep == &SQLTransaction::deliverTransactionErrorCallback ||
+           m_nextStep == &SQLTransaction::deliverStatementCallback);
+           
+    (this->*m_nextStep)();
+}
+
+void SQLTransaction::openTransactionAndPreflight()
+{
+    LOG(StorageAPI, "Opening and preflighting transaction %p", this);
+    
+    ASSERT(!m_sqliteTransaction);
+    m_sqliteTransaction.set(new SQLiteTransaction(m_database->m_sqliteDatabase));
+    
+    m_database->m_databaseAuthorizer->disable();
+    m_sqliteTransaction->begin();
+    m_database->m_databaseAuthorizer->enable();    
+    
+    // Transaction Steps 1+2 - Open a transaction to the database, jumping to the error callback if that fails
+    if (!m_sqliteTransaction->inProgress()) {
+        m_sqliteTransaction.clear();
+        m_transactionError = new SQLError(0, "unable to open a transaction to the database");
+        handleTransactionError(false);
+        return;
+    }
+    
+    // Transaction Steps 3 - Peform preflight steps, jumping to the error callback if they fail
+    if (m_wrapper && !m_wrapper->performPreflight(this)) {
+        m_sqliteTransaction.clear();
+        m_transactionError = m_wrapper->sqlError();
+        if (!m_transactionError)
+            m_transactionError = new SQLError(0, "unknown error occured setting up transaction");
+
+        handleTransactionError(false);
+        return;
+    }
+    
+    // Transaction Step 4 - Invoke the transaction callback with the new SQLTransaction object
+    m_nextStep = &SQLTransaction::deliverTransactionCallback;
+    m_database->scheduleTransactionCallback(this);
+}
+
+void SQLTransaction::deliverTransactionCallback()
+{
+    bool shouldDeliverErrorCallback = false;
+
+    if (m_callback) {
+        m_executeSqlAllowed = true;
+        m_callback->handleEvent(this, shouldDeliverErrorCallback);
+        m_executeSqlAllowed = false;
+    } else
+        shouldDeliverErrorCallback = true;
+
+    // Transaction Step 5 - If the transaction callback was null or raised an exception, jump to the error callback
+    if (shouldDeliverErrorCallback)
+        deliverTransactionErrorCallback();
+    else
+        scheduleToRunStatements();
+}
+
+void SQLTransaction::scheduleToRunStatements()
+{
+    m_currentStatement = 0;
+    m_nextStep = &SQLTransaction::runStatements;
+    m_database->scheduleTransactionStep();
+}
+
+void SQLTransaction::runStatements()
+{
+    ASSERT(!m_currentStatement);
+
+    // If there is a series of statements queued up that are all successful and have no associated
+    // SQLStatementCallback objects, then we can burn through the queue
+    do {
+        getNextStatement();
+    } while (runCurrentStatement());
+    
+    // If runCurrentStatement() returned false, that means either there was no current statement to run,
+    // or the current statement requires a callback to complete.  In the later case, it also scheduled 
+    // the callback or performed any other additional work so we can return
+    if (!m_currentStatement)
+        postflightAndCommit();
+}
+
+void SQLTransaction::getNextStatement()
+{
+    m_currentStatement = 0;
+    
+    MutexLocker locker(m_statementMutex);
+    if (!m_statementQueue.isEmpty()) {
+        m_currentStatement = m_statementQueue.first();
+        m_statementQueue.removeFirst();
+    }
+}
+
+bool SQLTransaction::runCurrentStatement()
+{
+    if (!m_currentStatement)
+        return false;
+        
+    m_database->m_databaseAuthorizer->reset();
+    
+    if (m_currentStatement->execute(m_database)) {
+        if (m_currentStatement->hasStatementCallback()) {
+            m_nextStep = &SQLTransaction::deliverStatementCallback;
+            m_database->scheduleTransactionCallback(this);
+            return false;
+        }
+        return true;
+    }
+    
+    // Transaction Steps 6.error - Call the statement's error callback, but if there was no error callback,
+    // jump to the transaction error callback
+    if (m_currentStatement->hasStatementErrorCallback()) {
+        m_nextStep = &SQLTransaction::deliverStatementCallback;
+        m_database->scheduleTransactionCallback(this);
+    } else {
+        m_transactionError = m_currentStatement->sqlError();
+        if (!m_transactionError)
+            m_transactionError = new SQLError(1, "the statement failed to execute");
+        handleTransactionError(false);
+    }
+    
+    return false;
+}
+
+void SQLTransaction::deliverStatementCallback()
+{
+    ASSERT(m_currentStatement);
+    
+    // Transaction Step 6.6 and 6.3(error) - If the statement callback went wrong, jump to the transaction error callback
+    // Otherwise, continue to loop through the statement queue
+    m_executeSqlAllowed = true;
+    bool result = m_currentStatement->performCallback(this);
+    m_executeSqlAllowed = false;
+
+    if (result) {
+        m_transactionError = new SQLError(0, "the statement callback raised an exception or statement error callback did not return false");
+        handleTransactionError(true);
+    } else
+        scheduleToRunStatements();
+}
+
+void SQLTransaction::postflightAndCommit()
+{    
+    // Transaction Step 7 - Peform postflight steps, jumping to the error callback if they fail
+    if (m_wrapper && !m_wrapper->performPostflight(this)) {
+        m_transactionError = m_wrapper->sqlError();
+        if (!m_transactionError)
+            m_transactionError = new SQLError(0, "unknown error occured setting up transaction");
+        handleTransactionError(false);
+        return;
+    }
+    
+    // Transacton Step 8+9 - Commit the transaction, jumping to the error callback if that fails
+    ASSERT(m_sqliteTransaction);
+    
+    m_database->m_databaseAuthorizer->disable();
+    m_sqliteTransaction->commit();
+    m_database->m_databaseAuthorizer->enable();    
+        
+    // If the commit failed, the transaction will still be marked as "in progress"
+    if (m_sqliteTransaction->inProgress()) {
+        m_shouldCommitAfterErrorCallback = false;
+        m_transactionError = new SQLError(0, "failed to commit the transaction");
+        handleTransactionError(false);
+        return;
+    }
+    
+    // Transaction Step 10 - End transaction steps
+    // There is no next step
+    m_nextStep = 0;
+}
+
+void SQLTransaction::handleTransactionError(bool inCallback)
+{
+    if (m_errorCallback) {
+        if (inCallback)
+            deliverTransactionErrorCallback();
+        else {
+            m_nextStep = &SQLTransaction::deliverTransactionErrorCallback;
+            m_database->scheduleTransactionCallback(this);
+        }
+        return;
+    }
+    
+    // Transaction Step 11 - If the callback couldn't be called, then rollback the transaction.
+    m_shouldCommitAfterErrorCallback = false;
+    if (inCallback) {
+        m_nextStep = &SQLTransaction::cleanupAfterTransactionErrorCallback;
+        m_database->scheduleTransactionStep();
+    } else {
+        cleanupAfterTransactionErrorCallback();
+    }
+}
+
+void SQLTransaction::deliverTransactionErrorCallback()
+{
+    ASSERT(m_errorCallback);
+    ASSERT(m_transactionError);
+    
+    // Transaction Step 11 - If the callback didn't return false, then rollback the transaction.
+    if (m_errorCallback->handleEvent(m_transactionError.get()))
+        m_shouldCommitAfterErrorCallback = false;
+
+    m_nextStep = &SQLTransaction::cleanupAfterTransactionErrorCallback;
+    m_database->scheduleTransactionStep();
+}
+
+void SQLTransaction::cleanupAfterTransactionErrorCallback()
+{
+    m_database->m_databaseAuthorizer->disable();
+    if (m_sqliteTransaction) {
+        // Transaction Step 11 -If the error callback returned false, and the last error wasn't itself a 
+        // failure when committing the transaction, then try to commit the transaction
+        if (m_shouldCommitAfterErrorCallback)
+            m_sqliteTransaction->commit();
+        
+        // Transaction Step 11 - If that fails, or if the callback couldn't be called 
+        // or if it didn't return false, then rollback the transaction.
+        if (m_sqliteTransaction->inProgress())
+            m_sqliteTransaction->rollback();
+
+        m_sqliteTransaction.clear();
+    }
+    m_database->m_databaseAuthorizer->enable();
+    
+    // Transaction Step 11 - Any still-pending statements in the transaction are discarded.
+    {
+        MutexLocker locker(m_statementMutex);
+        m_statementQueue.clear();
+    }
+    
+    // Transaction is complete!  There is no next step
+    m_nextStep = 0;
+}
+
+} // namespace WebCore
+
+
index 13348f5db1424ed6c54f8abad2a3d689306acaf6..d99ed1054829992783db08d7fc646e28fdb2b4f6 100644 (file)
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
-
 #ifndef SQLTransaction_h
 #define SQLTransaction_h
 
 #include "Threading.h"
 
+#include "SQLiteTransaction.h"
+#include "SQLStatement.h"
+#include "SQLTransactionCallback.h"
+#include "SQLTransactionErrorCallback.h"
+#include <wtf/Deque.h>
+#include <wtf/Forward.h>
+#include <wtf/OwnPtr.h>
+#include <wtf/RefPtr.h>
+#include <wtf/Vector.h>
+
 namespace WebCore {
 
+typedef int ExceptionCode;
+
+class Database;
+class SQLError;
+class SQLStatementCallback;
+class SQLStatementErrorCallback;
+class SQLTransaction;
+class SQLValue;
+class String;
+
+class SQLTransactionWrapper : public ThreadSafeShared<SQLTransactionWrapper> {
+public:
+    virtual ~SQLTransactionWrapper() { }
+    virtual bool performPreflight(SQLTransaction*) = 0;
+    virtual bool performPostflight(SQLTransaction*) = 0;
+    
+    virtual SQLError* sqlError() const = 0;
+};
+
 class SQLTransaction : public ThreadSafeShared<SQLTransaction> {
+public:
+    SQLTransaction(Database*, PassRefPtr<SQLTransactionCallback>, PassRefPtr<SQLTransactionErrorCallback>, PassRefPtr<SQLTransactionWrapper>);
+    
+    void executeSQL(const String& sqlStatement, const Vector<SQLValue>& arguments, 
+                    PassRefPtr<SQLStatementCallback> callback, PassRefPtr<SQLStatementErrorCallback> callbackError, ExceptionCode& e);
+                                        
+    bool performNextStep();
+    void performPendingCallback();
+    
+    Database* database() { return m_database; }
+    
+private:
+    typedef void (SQLTransaction::*TransactionStepMethod)();
+    TransactionStepMethod m_nextStep;
+    
+    void enqueueStatement(PassRefPtr<SQLStatement>);
+    
+    void openTransactionAndPreflight();
+    void deliverTransactionCallback();
+    void scheduleToRunStatements();
+    void runStatements();
+    void getNextStatement();
+    bool runCurrentStatement();
+    void deliverStatementCallback();
+    void postflightAndCommit();
+    void handleTransactionError(bool inCallback);
+    void deliverTransactionErrorCallback();
+    void cleanupAfterTransactionErrorCallback();
+
+    RefPtr<SQLStatement> m_currentStatement;
+    
+    bool m_executeSqlAllowed;
+    
+    Database* m_database;
+    RefPtr<SQLTransactionWrapper> m_wrapper;
+    RefPtr<SQLTransactionCallback> m_callback;
+    RefPtr<SQLTransactionErrorCallback> m_errorCallback;
+    RefPtr<SQLError> m_transactionError;
+    bool m_shouldCommitAfterErrorCallback;
+    
+    Mutex m_statementMutex;
+    Deque<RefPtr<SQLStatement> > m_statementQueue;
+
+    OwnPtr<SQLiteTransaction> m_sqliteTransaction;
 };
     
 } // namespace WebCore
 
 #endif // SQLTransaction_h
-
index d78f172242843ba2947e9fa4ab795ef2b03b6d6d..41436f17073da416836e0282e02b528a7615de83 100644 (file)
@@ -29,5 +29,6 @@
 module storage {
 
     interface SQLTransaction {
+        [Custom] void executeSql(in DOMString sqlStatement, in ObjectArray arguments, in SQLStatementCallback callback, in SQLStatementErrorCallback errorCallback);
     };
 }
diff --git a/WebCore/storage/VersionChangeCallback.h b/WebCore/storage/VersionChangeCallback.h
deleted file mode 100644 (file)
index 28248c9..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (C) 2007 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
- *     its contributors may be used to endorse or promote products derived
- *     from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef VersionChangeCallback_h
-#define VersionChangeCallback_h
-
-#include "Threading.h"
-
-namespace WebCore {
-
-    class SQLResultSet;
-
-    class VersionChangeCallback : public ThreadSafeShared<VersionChangeCallback> {
-    public:
-        virtual ~VersionChangeCallback() { }
-        virtual void handleEvent(bool) = 0;
-    };
-
-} // namespace WebCore
-
-#endif // VersionChangeCallback_h
diff --git a/WebCore/storage/VersionChangeCallback.idl b/WebCore/storage/VersionChangeCallback.idl
deleted file mode 100644 (file)
index f83570f..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (C) 2007 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
- *     its contributors may be used to endorse or promote products derived
- *     from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module storage {
-
-    interface VersionChangeCallback {
-        void handleEvent(in boolean resultSet);
-    };
-
-}
index 136f88e35e11350b595cc83def533f508bf94f9d..b4d3d91916de182b0c71cfd0f7d2835e7c684369 100644 (file)
                DD7CDEE70A23BA9E00069928 /* WebTypesInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = DD7CDEE60A23BA9E00069928 /* WebTypesInternal.h */; };
                DD89682009AA87240097E7F0 /* WebElementDictionary.h in Headers */ = {isa = PBXBuildFile; fileRef = DD89681E09AA87240097E7F0 /* WebElementDictionary.h */; };
                DD89682109AA87240097E7F0 /* WebElementDictionary.mm in Sources */ = {isa = PBXBuildFile; fileRef = DD89681F09AA87240097E7F0 /* WebElementDictionary.mm */; };
-               ED3B48DF0CC51F7E00DFF1EB /* StringsNotToBeLocalized.txt in Resources */ = {isa = PBXBuildFile; fileRef = ED3B48DE0CC51F7E00DFF1EB /* StringsNotToBeLocalized.txt */; };
+               ED3B48DF0CC51F7E00DFF1EB /* ../StringsNotToBeLocalized.txt in Resources */ = {isa = PBXBuildFile; fileRef = ED3B48DE0CC51F7E00DFF1EB /* ../StringsNotToBeLocalized.txt */; };
                ED6BE2E7088C32B50044DEDC /* WebNSAttributedStringExtras.h in Headers */ = {isa = PBXBuildFile; fileRef = ED6BE2E5088C32B50044DEDC /* WebNSAttributedStringExtras.h */; };
                ED6BE2E8088C32B50044DEDC /* WebNSAttributedStringExtras.mm in Sources */ = {isa = PBXBuildFile; fileRef = ED6BE2E6088C32B50044DEDC /* WebNSAttributedStringExtras.mm */; };
                ED7F6D8B0980683500C235ED /* WebNSDataExtrasPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = ED7F6D8A0980683500C235ED /* WebNSDataExtrasPrivate.h */; settings = {ATTRIBUTES = (Private, ); }; };
                ED21B9810528F7AA003299AC /* WebDocumentInternal.h */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 4; lastKnownFileType = sourcecode.c.h; path = WebDocumentInternal.h; sourceTree = "<group>"; tabWidth = 8; usesTabs = 0; };
                ED2B2474033A2DA800C1A526 /* WebNSPasteboardExtras.h */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 4; lastKnownFileType = sourcecode.c.h; path = WebNSPasteboardExtras.h; sourceTree = "<group>"; tabWidth = 8; usesTabs = 0; };
                ED2B2475033A2DA800C1A526 /* WebNSPasteboardExtras.mm */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebNSPasteboardExtras.mm; sourceTree = "<group>"; tabWidth = 8; usesTabs = 0; };
-               ED3B48DE0CC51F7E00DFF1EB /* StringsNotToBeLocalized.txt */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = ../StringsNotToBeLocalized.txt; sourceTree = "<group>"; };
+               ED3B48DE0CC51F7E00DFF1EB /* ../StringsNotToBeLocalized.txt */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = ../StringsNotToBeLocalized.txt; sourceTree = "<group>"; };
                ED6BE2E5088C32B50044DEDC /* WebNSAttributedStringExtras.h */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.c.h; path = WebNSAttributedStringExtras.h; sourceTree = "<group>"; tabWidth = 8; usesTabs = 0; };
                ED6BE2E6088C32B50044DEDC /* WebNSAttributedStringExtras.mm */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebNSAttributedStringExtras.mm; sourceTree = "<group>"; tabWidth = 8; usesTabs = 0; };
                ED7F6D8A0980683500C235ED /* WebNSDataExtrasPrivate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebNSDataExtrasPrivate.h; sourceTree = "<group>"; };
                        isa = PBXGroup;
                        children = (
                                939811320824BF01008DF038 /* Info.plist */,
-                               ED3B48DE0CC51F7E00DFF1EB /* StringsNotToBeLocalized.txt */,
+                               ED3B48DE0CC51F7E00DFF1EB /* ../StringsNotToBeLocalized.txt */,
                                35F3577E0198AAB80ACA1520 /* Localizable.strings */,
                                F5883BDE025E5C6A01000102 /* nullplugin.tiff */,
                                F5B67130023EDF8901C1A525 /* url_icon.tiff */,
                        files = (
                                939810BA0824BF01008DF038 /* IDNScriptWhiteList.txt in Resources */,
                                939810B30824BF01008DF038 /* Localizable.strings in Resources */,
-                               ED3B48DF0CC51F7E00DFF1EB /* StringsNotToBeLocalized.txt in Resources */,
+                               ED3B48DF0CC51F7E00DFF1EB /* ../StringsNotToBeLocalized.txt in Resources */,
                                939810B50824BF01008DF038 /* WebAuthenticationPanel.nib in Resources */,
                                939810B40824BF01008DF038 /* WebJavaScriptTextInputPanel.nib in Resources */,
                                939810B90824BF01008DF038 /* WebViewEditingContextMenu.nib in Resources */,
index 03bcad46409487193d92c99ebfbe77395ead2b69..b3c9e907c5349081d9f2907171190d94405645ba 100644 (file)
@@ -1,3 +1,11 @@
+2007-11-12  Brady Eidson  <beidson@apple.com>
+
+        Reviewed by Tim
+
+        Update the DatabaseExample to use the new API
+
+        * misc/DatabaseExample.html:
+
 2007-11-12  Mark Rowe  <mrowe@apple.com>
 
         * building/tools.html: Remove extra >.
@@ -18,8 +26,6 @@
         - removed a workaround for the bug fixed in the WebCore part of this
           patch
 
-        * misc/DatabaseExample.html:
-
 2007-11-04  Timothy Hatcher  <timothy@apple.com>
 
         Land the HTML Editing Toolbar demo from WWDC 2007.
index 7abefc0ca3579e8340da6be71380bef32cf78a2d..8d9609d0fc62e329093fafec7daec1ba615c7f33 100644 (file)
@@ -54,7 +54,7 @@ body {
 <script>
 var db;
 try {
-    db = openDatabase("NoteTest", "1.0");
+    db = openDatabase("NoteTest", "1.0", "HTML5 Database API example", 200000);
 } catch(err) { }
 
 if (!db) {
@@ -172,8 +172,12 @@ Note.prototype = {
     {
         this.cancelPendingSave();
 
-        db.executeSql("DELETE FROM WebKitStickyNotes WHERE id = ?", [this.id], function(result) {});
-
+        var note = this;
+        db.transaction(function(tx)
+        {
+            tx.executeSql("DELETE FROM WebKitStickyNotes WHERE id = ?", [note.id]);
+        });
+        
         var duration = event.shiftKey ? 2 : .25;
         this.note.style.webkitTransition = '-webkit-transform ' + duration + 's ease-in, opacity ' + duration + 's ease-in';
         this.note.offsetTop; // Force style recalc
@@ -209,13 +213,22 @@ Note.prototype = {
             delete this.dirty;
         }
 
-        db.executeSql("UPDATE WebKitStickyNotes SET note = ?, timestamp = ?, left = ?, top = ?, zindex = ? WHERE id = ?", [this.text, this.timestamp, this.left, this.top, this.zIndex, this.id], function(result) {});
+        var note = this;
+        db.transaction(function (tx)
+        {
+            tx.executeSql("UPDATE WebKitStickyNotes SET note = ?, timestamp = ?, left = ?, top = ?, zindex = ? WHERE id = ?", [note.text, note.timestamp, note.left, note.top, note.zIndex, note.id]);
+        });
     },
 
     saveAsNew: function()
     {
         this.timestamp = new Date().getTime();
-        db.executeSql("INSERT INTO WebKitStickyNotes (id, note, timestamp, left, top, zindex) VALUES (?, ?, ?, ?, ?, ?)", [this.id, this.text, this.timestamp, this.left, this.top, this.zIndex], function(result) {});
+        
+        var note = this;
+        db.transaction(function (tx) 
+        {
+            tx.executeSql("INSERT INTO WebKitStickyNotes (id, note, timestamp, left, top, zindex) VALUES (?, ?, ?, ?, ?, ?)", [note.id, note.text, note.timestamp, note.left, note.top, note.zIndex]);
+        }); 
     },
 
     onMouseDown: function(e)
@@ -271,39 +284,43 @@ Note.prototype = {
 
 function loaded()
 {
-    try {
-        db.executeSql("SELECT COUNT(*) FROM WebKitStickyNotes", [], function(result) { loadNotes(); });
-    } catch(err) {
-        db.executeSql("CREATE TABLE WebKitStickyNotes (id REAL UNIQUE, note TEXT, timestamp REAL, left TEXT, top TEXT, zindex REAL)", [], function(result) { loadNotes(); });
-    }
+    db.transaction(function(tx) {
+        tx.executeSql("SELECT COUNT(*) FROM WebkitStickyNotes", [], function(result) {
+            loadNotes();
+        }, function(tx, error) {
+            tx.executeSql("CREATE TABLE WebKitStickyNotes (id REAL UNIQUE, note TEXT, timestamp REAL, left TEXT, top TEXT, zindex REAL)", [], function(result) { 
+                loadNotes(); 
+            });
+        });
+    });
 }
 
 function loadNotes()
 {
-    db.executeSql("SELECT id, note, timestamp, left, top, zindex FROM WebKitStickyNotes", [], function(result) {
-        if (result.errorCode) {
-            alert('Failed to retrieve notes from database');
+    db.transaction(function(tx) {
+        tx.executeSql("SELECT id, note, timestamp, left, top, zindex FROM WebKitStickyNotes", [], function(tx, result) {
+            for (var i = 0; i < result.rows.length; ++i) {
+                var row = result.rows.item(i);
+                var note = new Note();
+                note.id = row['id'];
+                note.text = row['note'];
+                note.timestamp = row['timestamp'];
+                note.left = row['left'];
+                note.top = row['top'];
+                note.zIndex = row['zindex'];
+
+                if (row['id'] > highestId)
+                    highestId = row['id'];
+                if (row['zindex'] > highestZ)
+                    highestZ = row['zindex'];
+            }
+
+            if (!result.rows.length)
+                newNote();
+        }, function(tx, error) {
+            alert('Failed to retrieve notes from database - ' + error.message);
             return;
-        }
-
-        for (var i = 0; i < result.rows.length; ++i) {
-            var row = result.rows.item(i);
-            var note = new Note();
-            note.id = row['id'];
-            note.text = row['note'];
-            note.timestamp = row['timestamp'];
-            note.left = row['left'];
-            note.top = row['top'];
-            note.zIndex = row['zindex'];
-
-            if (row['id'] > highestId)
-                highestId = row['id'];
-            if (row['zindex'] > highestZ)
-                highestZ = row['zindex'];
-        }
-
-        if (!result.rows.length)
-            newNote();
+        });
     });
 }