Need a method to close all idle localstorage databases immediately.
https://bugs.webkit.org/show_bug.cgi?id=103469

Patch by Yongjun Zhang <yongjun_zhang@apple.com> on 2012-12-02
Reviewed by David Kilzer.

Source/WebCore:

Add a new PageGroup method closeIdleLocalStorageDatabases, which walks through
all local storage areas that don't have document referencing to them and closes
their underlying databases.

Test: storage/domstorage/localstorage/close-idle-localstorage-databases-immediately.html

* WebCore.exp.in:
* page/PageGroup.cpp:
(WebCore::PageGroup::clearLocalStorageForOrigin):
(WebCore):
(WebCore::PageGroup::closeIdleLocalStorageDatabases): walking through all idle local storages and
    closing their databases.
* page/PageGroup.h:
(PageGroup):
* storage/StorageArea.h:
(WebCore::StorageArea::closeDatabaseIfIdle):
* storage/StorageAreaImpl.cpp:
(WebCore::StorageAreaImpl::closeDatabaseIfIdle): close the database if it is idle.
(WebCore):
* storage/StorageAreaImpl.h:
(StorageAreaImpl):
* storage/StorageNamespace.h:
(StorageNamespace):
* storage/StorageNamespaceImpl.cpp:
(WebCore::StorageNamespaceImpl::closeIdleLocalStorageDatabases):
(WebCore):
* storage/StorageNamespaceImpl.h:
(StorageNamespaceImpl):

Source/WebKit/mac:

Add a new method to WebStorageManager that we can call to close all
idle local storage databases.

* Storage/WebStorageManager.mm:
(+[WebStorageManager closeIdleLocalStorageDatabases]):
* Storage/WebStorageManagerPrivate.h:

Tools:

Add an JS method to TestRunner, to enable testing closing idle local storage databases in
DumpRenderTree layout tests.

* DumpRenderTree/TestRunner.cpp:
(closeIdleLocalStorageDatabasesCallback):
(TestRunner::staticFunctions):
* DumpRenderTree/TestRunner.h:
(TestRunner):
* DumpRenderTree/blackberry/TestRunnerBlackBerry.cpp:
(TestRunner::closeIdleLocalStorageDatabases):
* DumpRenderTree/efl/TestRunnerEfl.cpp:
(TestRunner::closeIdleLocalStorageDatabases):
* DumpRenderTree/gtk/TestRunnerGtk.cpp:
(TestRunner::closeIdleLocalStorageDatabases):
* DumpRenderTree/mac/TestRunnerMac.mm:
(TestRunner::closeIdleLocalStorageDatabases):
* DumpRenderTree/win/TestRunnerWin.cpp:
(TestRunner::closeIdleLocalStorageDatabases):
* DumpRenderTree/wx/TestRunnerWx.cpp:
(TestRunner::closeIdleLocalStorageDatabases):

LayoutTests:

* storage/domstorage/localstorage/close-idle-localstorage-databases-immediately-expected.txt: Added.
* storage/domstorage/localstorage/close-idle-localstorage-databases-immediately.html: Added.
* storage/resources/storage-close-idle-localstorage-databases-immediately.html: Added.

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@136323 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Avoid a second layout of flex items in layoutAndPlaceChildren()
https://bugs.webkit.org/show_bug.cgi?id=102352

Reviewed by Ojan Vafai.

Source/WebCore:

Avoid doing a second layout if we're going to get the same size as before.
This prevents us from doing an exponential number of layouts in some
common cases.

Test: css3/flexbox/stretch-after-sibling-size-change.html

* html/shadow/SliderThumbElement.cpp:
(WebCore::RenderSliderContainer::layout): Force a layout of the track, which positions the thumb.
* rendering/RenderFlexibleBox.cpp:
(WebCore::RenderFlexibleBox::needToStretchChild): Determine if a child is going to stretch.
(WebCore::RenderFlexibleBox::resetAutoMarginsAndLogicalTopInCrossAxis): Makes sure we're in a consistent state before
we apply auto margins.
(WebCore::RenderFlexibleBox::layoutAndPlaceChildren):
* rendering/RenderFlexibleBox.h: Add needToStretchChild.

LayoutTests:

Add a test case to make sure we relayout when a sibling is stretching.

* css3/flexbox/stretch-after-sibling-size-change-expected.txt: Added.
* css3/flexbox/stretch-after-sibling-size-change.html: Added.


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