Make IDBTransaction tasks asynchronous
https://bugs.webkit.org/show_bug.cgi?id=124183

Reviewed by Tim Horton.

This is an almost zero-change in behavior.

The one thing that is different is that previously, IDBTransactionBackends would synchronously
run through their entire set of IDBOperation’s without ever returning control to the runloop.

Now, they start one task and then wait for its completion to schedule the start of the next task.

Change IDBOperation’s perform() to take a completion handler so it can be asynchronous.
Add an IDBSynchronousOperation class to handle "Abort" tasks, which never need to perform i/o
and therefore can be entirely synchronous.
* Modules/indexeddb/IDBOperation.h:
(WebCore::IDBSynchronousOperation::~IDBSynchronousOperation):

* Modules/indexeddb/IDBTransactionBackend.cpp:
(WebCore::IDBTransactionBackend::scheduleTask): "Abort tasks" are now IDBSynchronousOperations.
(WebCore::IDBTransactionBackend::abort):
(WebCore::IDBTransactionBackend::taskTimerFired): Instead of running through the entire set of tasks,
  perform a single task asynchronously. The completion handler for the task will reset the task timer
  to asynchronously start the next task.
* Modules/indexeddb/IDBTransactionBackend.h:
(WebCore::IDBTransactionBackend::scheduleTask): "Abort tasks" are now IDBSynchronousOperations.

Update all operations to take completion handlers.
For now, perform things synchronously like before, calling the completion handler when complete.
* Modules/indexeddb/IDBCursorBackend.cpp:
(WebCore::CallOnDestruct::CallOnDestruct): Helper class to make sure completion callbacks are always called perform() exits.
(WebCore::CallOnDestruct::~CallOnDestruct):
(WebCore::IDBCursorBackend::CursorIterationOperation::create):
(WebCore::IDBCursorBackend::CursorAdvanceOperation::create):
(WebCore::IDBCursorBackend::CursorPrefetchIterationOperation::create):
(WebCore::IDBCursorBackend::CursorAdvanceOperation::perform):
(WebCore::IDBCursorBackend::CursorIterationOperation::perform):
(WebCore::IDBCursorBackend::CursorPrefetchIterationOperation::perform):

* Modules/indexeddb/IDBTransactionBackendOperations.cpp:
(WebCore::CallOnDestruct::CallOnDestruct): Helper class to make sure completion callbacks are always called when perform() exits.
(WebCore::CallOnDestruct::~CallOnDestruct):
(WebCore::CreateObjectStoreOperation::perform):
(WebCore::CreateIndexOperation::perform):
(WebCore::DeleteIndexOperation::perform):
(WebCore::GetOperation::perform):
(WebCore::PutOperation::perform):
(WebCore::SetIndexesReadyOperation::perform):
(WebCore::OpenCursorOperation::perform):
(WebCore::CountOperation::perform):
(WebCore::DeleteRangeOperation::perform):
(WebCore::ClearOperation::perform):
(WebCore::DeleteObjectStoreOperation::perform):
(WebCore::IDBDatabaseBackend::VersionChangeOperation::perform):

* Modules/indexeddb/IDBTransactionBackendOperations.h:
(WebCore::CreateObjectStoreOperation::create):
(WebCore::DeleteObjectStoreOperation::create):
(WebCore::IDBDatabaseBackend::VersionChangeOperation::create):
(WebCore::CreateObjectStoreAbortOperation::create):
(WebCore::DeleteObjectStoreAbortOperation::create):
(WebCore::IDBDatabaseBackend::VersionChangeAbortOperation::create):
(WebCore::CreateIndexOperation::create):
(WebCore::CreateIndexAbortOperation::create):
(WebCore::DeleteIndexOperation::create):
(WebCore::DeleteIndexAbortOperation::create):
(WebCore::GetOperation::create):
(WebCore::PutOperation::create):
(WebCore::SetIndexesReadyOperation::create):
(WebCore::OpenCursorOperation::create):
(WebCore::CountOperation::create):
(WebCore::DeleteRangeOperation::create):
(WebCore::ClearOperation::create):

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@159095 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Unreviewed, rolling out r159088.
http://trac.webkit.org/changeset/159088
https://bugs.webkit.org/show_bug.cgi?id=124187

It broke the EFL build, because it removed a used function
(rs=thorton) (Requested by Ossy_night on #webkit).

Patch by Commit Queue <commit-queue@webkit.org> on 2013-11-11

* UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::WebPageProxy):
(WebKit::WebPageProxy::resetStateAfterProcessExited):
* UIProcess/WebPageProxy.h:
(WebKit::WebPageProxy::urlAtProcessExit):
(WebKit::WebPageProxy::loadStateAtProcessExit):

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@159096 268f45cc-cd09-0410-ab3c-d52691b4dbfc
CodeBlock: Un-segment some Vectors.
<https://webkit.org/b/124188>

Turn some SegmentedVectors into Vectors where the final item count
is known at CodeBlock construction time. This removes unnecessary
allocation and indirection.

I've got ~4.5 MB below SegmentedVector<ValueProfile>::ensureSegment
on Membuster3 (peak, before pressure signal) so this should help
take a bit of the edge off there.

Reviewed by Geoffrey Garen.


git-svn-id: http://svn.webkit.org/repository/webkit/trunk@159097 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Remote Layer Tree: Sporadic memory corruption during painting
https://bugs.webkit.org/show_bug.cgi?id=124191

Reviewed by Brady Eidson.

Fix a logic error (flipped the logic, didn't flip the operator)
made in the last version of r158982 that caused some crashes because
it allowed us to overrun the end of cgPaintingRects.

* Shared/mac/RemoteLayerBackingStore.mm:
(RemoteLayerBackingStore::drawInContext):


git-svn-id: http://svn.webkit.org/repository/webkit/trunk@159098 268f45cc-cd09-0410-ab3c-d52691b4dbfc
InvalidIndex shouldn't be private in GPRInfo and FPRInfo for sh4, mips and arm64 architectures.
https://bugs.webkit.org/show_bug.cgi?id=124156

Patch by Julien Brianceau <jbriance@cisco.com> on 2013-11-12
Reviewed by Michael Saboff.

* jit/FPRInfo.h:
(JSC::FPRInfo::debugName):
* jit/GPRInfo.h:
(JSC::GPRInfo::debugName):

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@159099 268f45cc-cd09-0410-ab3c-d52691b4dbfc
JSC bindings generator should generate deletable JSC functions
https://bugs.webkit.org/show_bug.cgi?id=122422

Reviewed by Geoffrey Garen.

Source/WebCore: 

The JSC functions that the JSC bindings generator generates should be deletable to conform to
the WebIDL specification, which instructs that the WebIDL operations must be configurable (which
translates to the JSC functions being deletable).

The generator will still produce a non-deletable JSC function for operations under almost all
Web-facing interfaces since they're annotated with the OperationsNotDeletable attribute. The
exception here is the Node interface that is having the attribute removed, with the provided
test case testing that all the functions on the Node prototype object are writable, enumerable
and configurable. This behavior conforms to the WebIDL specification and the behaviors of IE
and Firefox. Chrome at the moment still provides non-configurable functions.

Test: fast/dom/webidl-operations-on-node-prototype.html

* bindings/scripts/CodeGeneratorJS.pm:
(GenerateImplementation): Enforce the non-deletable behavior of the JSC function if either the
operation's interface is annotated with the OperationsNotDeletable attribute or the operation itself
is annotated with the NotDeletable attribute.
* bindings/scripts/test/JS/JSTestActiveDOMObject.cpp: Update the JSC generator test baselines.
* bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp: Ditto.
* bindings/scripts/test/JS/JSTestEventTarget.cpp: Ditto.
* bindings/scripts/test/JS/JSTestInterface.cpp: Ditto.
* bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp: Ditto.
* bindings/scripts/test/JS/JSTestObj.cpp: Ditto.
* bindings/scripts/test/JS/JSTestTypedefs.cpp: Ditto.
* dom/Node.idl: Remove the OperationsNotDeletable attribute.

LayoutTests: 

Test that all the functions on the Node prototype object (apart from the constructor) are
writable, enumerable and configurable, as expected for WebIDL operations. This matches the
WebIDL specification as well as IE and Firefox.

Other affected test cases and baselines are updated to reflect the new behavior.

* fast/dom/webidl-operations-on-node-prototype-expected.txt: Added.
* fast/dom/webidl-operations-on-node-prototype.html: Added.
* js/dom/getOwnPropertyDescriptor-expected.txt:
* js/resources/getOwnPropertyDescriptor.js:
* platform/mac/canvas/philip/tests/type.prototype-expected.txt: Removed.


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