[SOUP] Partial file left on disk after a download fails or is cancelled in WebKit2
https://bugs.webkit.org/show_bug.cgi?id=126686

Reviewed by Martin Robinson.

Source/WebKit2:

We are currently writing the downloads directly into the
destination, and when a download fails or is cancelled after the
destination has been decided, the partial file is left on the
disk. Deleting the final file is not safe because there might be a
race condition, so we can use an intermediate file like other
browsers do, a file in the same directory than the target
destination but with .wkdownload suffix, that is removed when the
download fails or is cancelled. If the download finishes
successfully the intermediate file is renamed to the final
destination.

* Shared/Downloads/soup/DownloadSoup.cpp:
(WebKit::DownloadClient::deleteIntermediateFileInNeeded): Delete
the intermdiate file if it's been created already.
(WebKit::DownloadClient::downloadFailed): Call deleteIntermediateFileInNeeded.
(WebKit::DownloadClient::didReceiveResponse): Do not create a
SoupMessage for the given ResourceResponse that is not used, cache
the ResourceResponse instead. Create the intermediate file and use
it instead of the final destination.
(WebKit::DownloadClient::didReceiveData): Use the cached
ResourceResponse directly.
(WebKit::DownloadClient::didFinishLoading): Rename the
intermediate file to the final destination and write the metadata
in the final target destination.
(WebKit::DownloadClient::cancel): Handle the download cancellation
here, removing the intermediate file is needed and cancelling the
ResourceHandle and the download.
(WebKit::DownloadClient::handleResponseLater):
(WebKit::Download::cancel): Let the client handle the cancellation.

Tools:

Test that partial files are not left on disk after a download has
been cancelled after the destination has been decided. To make
sure the download is cancelled after the destination has been
decided and before the operation finishes, we cancel the download
in the destination decided callback, and we use an infinite
resource that writes chunks to the response body and never
completes the body.

* TestWebKitAPI/Tests/WebKit2Gtk/TestDownloads.cpp:
(addContentDispositionHTTPHeaderToResponse): Helper function to
add the Content-Disposition to the response headers.
(writeNextChunkIdle): Write next chunk to response body.
(writeNextChunk): Write next chunk in an idle to avoid flooding
the network with the inifnite resource.
(serverCallback): Add an inifinite resource.
(testDownloadRemoteFileError): Check that partial file is not
present after the download has been cancelled.

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@161555 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Web Inspector: Remove unused overriding protocols.
https://bugs.webkit.org/show_bug.cgi?id=126630

Reviewed by Timothy Hatcher.

Source/WebCore:

No new tests, No change in behavior.

Remove unused overriding protocols as these are not used anymore in Frontned.
-Page.setGeolocationOverride
-Page.clearGeolocationOverride
-Page.canOverrideGeolocation
-Page.setDeviceOrientationOverride
-Page.clearDeviceOrientationOverride
-Page.canOverrideGeolocation
-Network.setUserAgentOverride

* Modules/geolocation/GeolocationController.cpp:
(WebCore::GeolocationController::GeolocationController):
(WebCore::GeolocationController::create):
(WebCore::GeolocationController::positionChanged):
(WebCore::provideGeolocationTo):
* Modules/geolocation/GeolocationController.h:
* dom/DeviceOrientationController.cpp:
(WebCore::DeviceOrientationController::DeviceOrientationController):
(WebCore::DeviceOrientationController::create):
(WebCore::DeviceOrientationController::didChangeDeviceOrientation):
(WebCore::provideDeviceOrientationTo):
* dom/DeviceOrientationController.h:
* inspector/InspectorInstrumentation.cpp:
* inspector/InspectorInstrumentation.h:
* inspector/InspectorPageAgent.cpp:
(WebCore::InspectorPageAgent::InspectorPageAgent):
* inspector/InspectorPageAgent.h:
* inspector/InspectorResourceAgent.cpp:
(WebCore::InspectorResourceAgent::disable):
* inspector/InspectorResourceAgent.h:
* inspector/protocol/Network.json:
* inspector/protocol/Page.json:
* loader/FrameLoader.cpp:
(WebCore::FrameLoader::userAgent):

Source/WebInspectorUI:

Update InspectorWebBackendCommands.js after removing unused overriding protocols.

* UserInterface/InspectorWebBackendCommands.js:
* UserInterface/Legacy/6.0/InspectorWebBackendCommands.js:
* UserInterface/Legacy/7.0/InspectorWebBackendCommands.js:
* Versions/Inspector-iOS-6.0.json:
* Versions/Inspector-iOS-7.0.json:

LayoutTests:

* http/tests/inspector/extensions-useragent-expected.txt: Removed.
* http/tests/inspector/extensions-useragent.html: Removed.
* inspector/device-orientation-success-expected.txt: Removed.
* inspector/device-orientation-success.html: Removed.
* inspector/geolocation-error-expected.txt: Removed.
* inspector/geolocation-error.html: Removed.
* inspector/geolocation-success-expected.txt: Removed.
* inspector/geolocation-success.html: Removed.
* inspector/geolocation-watchPosition-expected.txt: Removed.
* inspector/geolocation-watchPosition.html: Removed.


git-svn-id: http://svn.webkit.org/repository/webkit/trunk@161556 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Unreviewed, rolling out r161540.
http://trac.webkit.org/changeset/161540
https://bugs.webkit.org/show_bug.cgi?id=126704

Caused assertion failures on multiple tests (Requested by ap
on #webkit).

Source/JavaScriptCore:

* bytecode/CodeBlock.cpp:
(JSC::CodeBlock::visitAggregate):
* bytecode/CodeBlock.h:
(JSC::CodeBlockSet::mark):
* dfg/DFGOperations.cpp:
* heap/CodeBlockSet.cpp:
(JSC::CodeBlockSet::add):
(JSC::CodeBlockSet::traceMarked):
* heap/CodeBlockSet.h:
* heap/CopiedBlockInlines.h:
(JSC::CopiedBlock::reportLiveBytes):
* heap/CopiedSpace.cpp:
* heap/CopiedSpace.h:
* heap/Heap.cpp:
(JSC::Heap::Heap):
(JSC::Heap::didAbandon):
(JSC::Heap::markRoots):
(JSC::Heap::copyBackingStores):
(JSC::Heap::collectAllGarbage):
(JSC::Heap::collect):
(JSC::Heap::didAllocate):
* heap/Heap.h:
(JSC::Heap::shouldCollect):
(JSC::Heap::isCollecting):
(JSC::Heap::isWriteBarrierEnabled):
(JSC::Heap::writeBarrier):
* heap/HeapOperation.h:
* heap/MarkStack.cpp:
(JSC::MarkStackArray::~MarkStackArray):
* heap/MarkStack.h:
* heap/MarkedAllocator.cpp:
(JSC::MarkedAllocator::isPagedOut):
(JSC::MarkedAllocator::tryAllocateHelper):
(JSC::MarkedAllocator::addBlock):
(JSC::MarkedAllocator::removeBlock):
* heap/MarkedAllocator.h:
(JSC::MarkedAllocator::MarkedAllocator):
(JSC::MarkedAllocator::reset):
* heap/MarkedBlock.cpp:
* heap/MarkedBlock.h:
(JSC::MarkedBlock::lastChanceToFinalize):
(JSC::MarkedBlock::didConsumeEmptyFreeList):
(JSC::MarkedBlock::clearMarks):
* heap/MarkedSpace.cpp:
(JSC::MarkedSpace::~MarkedSpace):
(JSC::MarkedSpace::resetAllocators):
(JSC::MarkedSpace::visitWeakSets):
(JSC::MarkedSpace::reapWeakSets):
* heap/MarkedSpace.h:
(JSC::ClearMarks::operator()):
(JSC::MarkedSpace::clearMarks):
* heap/SlotVisitor.cpp:
(JSC::SlotVisitor::~SlotVisitor):
* heap/SlotVisitor.h:
(JSC::SlotVisitor::sharedData):
* heap/SlotVisitorInlines.h:
(JSC::SlotVisitor::internalAppend):
(JSC::SlotVisitor::copyLater):
(JSC::SlotVisitor::reportExtraMemoryUsage):
* jit/Repatch.cpp:
* runtime/JSGenericTypedArrayViewInlines.h:
(JSC::JSGenericTypedArrayView<Adaptor>::visitChildren):
* runtime/JSPropertyNameIterator.h:
(JSC::StructureRareData::setEnumerationCache):
* runtime/JSString.cpp:
(JSC::JSString::visitChildren):
* runtime/StructureRareDataInlines.h:
(JSC::StructureRareData::setPreviousID):
(JSC::StructureRareData::setObjectToStringValue):
* runtime/WeakMapData.cpp:
(JSC::WeakMapData::visitChildren):

Source/WTF:

* wtf/Bitmap.h:
(WTF::WordType>::count):

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@161557 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Cannot select multiple non-adjacent items in a multiple select control with the keyboard only
https://bugs.webkit.org/show_bug.cgi?id=15816

Patch by Pascal Jacquemart <p.jacquemart@samsung.com> on 2014-01-09
Reviewed by Chris Fleizach.

Source/WebCore:

Test: fast/forms/listbox-non-contiguous-keyboard-selection.html

* html/HTMLSelectElement.cpp:
(WebCore::HTMLSelectElement::HTMLSelectElement):
New member m_allowsNonContiguousSelection defaults to false
(WebCore::HTMLSelectElement::listBoxDefaultEventHandler):
Tracking CTRL modifier to start multiple non contiguous selection
* html/HTMLSelectElement.h: New member m_allowsNonContiguousSelection
(WebCore::HTMLSelectElement::allowsNonContiguousSelection): New getter
* rendering/RenderListBox.cpp:
(WebCore::RenderListBox::addFocusRingRects):
Following implementation made for spatial navigation

LayoutTests:

* fast/forms/listbox-non-contiguous-keyboard-selection-expected.txt: Added.
* fast/forms/listbox-non-contiguous-keyboard-selection.html: Added.
* platform/mac/TestExpectations:
Multiple non contiguous selection with keyboard not enabled on Mac

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@161558 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Crash when starting a download before the network process has been launched
https://bugs.webkit.org/show_bug.cgi?id=126258

Reviewed by Anders Carlsson.

We need to ensure there's a network process running before
starting a new download like we do when using the web process.

* UIProcess/WebContext.cpp:
(WebKit::WebContext::download): Use ChildProcessProxy::send()
instead of using the connection to make sure messages are queued
if the process is still launching.
(WebKit::WebContext::createDownloadProxy): Call
ensureNetworkProcess() before creating the download proxy.

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