[GTK] Add webkit_web_context_set_disk_cache_directory to WebKit2 GTK+ API
https://bugs.webkit.org/show_bug.cgi?id=111848

Reviewed by Anders Carlsson.

This allow applications to set a custom directory for the disk
cache.

* UIProcess/API/gtk/WebKitWebContext.cpp:
(webkit_web_context_set_disk_cache_directory):
* UIProcess/API/gtk/WebKitWebContext.h:
* UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Add new symbol.
* UIProcess/API/gtk/tests/TestMain.cpp:
(removeNonEmptyDirectory):
(main): Use a different temporary disk cache directory for every
test.

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@148887 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Memory barrier support should also ensure that we always do a compiler fence
https://bugs.webkit.org/show_bug.cgi?id=114934

Reviewed by Michael Saboff.
        
This is a cherry-pick merge of the WTF part of r148836 from the dfgFourthTier
branch. It fixes a memory ordering bug that is likely asymptomatic, but
nonetheless real: TCSpinLock expects that using a memoryBarrierBeforeUnlock()
prior to setting lockword_ to 0 will ensure that the assignment to lockword_
won't get floated above any of the stores in the critical section. While that
memory barrier does indeed do the right thing on ARM, it doesn't do the right
thing on other architectures: it turns into empty code that the compiler blows
away, which is fine for the hardware since X86 won't reorder that store - but
it's not fine for the compiler, which may still do its own reorderings.
        
The WTF part of r148836 fixes this by using a compiler fence: an empty asm
volatile block that is marked as clobbering memory.
        
Instead of doing a separate surgical fix in trunk, I decided to merge the
whole WTF change over, to make merging easier in the future.
        
Performance testing of this change in dfgFourthTier showed no regression.

* wtf/Atomics.h:
(WTF::compilerFence):
(WTF::armV7_dmb):
(WTF::armV7_dmb_st):
(WTF::loadLoadFence):
(WTF::loadStoreFence):
(WTF::storeLoadFence):
(WTF::storeStoreFence):
(WTF::memoryBarrierAfterLock):
(WTF::memoryBarrierBeforeUnlock):
(WTF::x86_mfence):



git-svn-id: http://svn.webkit.org/repository/webkit/trunk@148888 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Fix an incorrect rebaseline done in r148830.

Instead of updating the cross platform wk2 results, r148830 should have added efl wk2
specific results. Move the previous mac wk2 specific results into the mac wk2 platform
directory.

* platform/efl-wk2/loader/go-back-cached-main-resource-expected.txt: Renamed from LayoutTests/platform/wk2/loader/go-back-cached-main-resource-expected.txt.
* platform/mac-wk2/loader/go-back-cached-main-resource-expected.txt: Downloaded from the mac-wk2 bots.

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@148889 268f45cc-cd09-0410-ab3c-d52691b4dbfc
[BlackBerry] URL decode data: URLs before passing to the platform media player.
https://bugs.webkit.org/show_bug.cgi?id=114887

Patch by John Griggs <jgriggs@blackberry.com> on 2013-04-22
Reviewed by Rob Buis.

Pass data URL through URL decoding before passing to platform media player.  PR 313635.

Reviewed internally by Liam Quinn

* platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.cpp:
(WebCore::MediaPlayerPrivate::load):

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@148890 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Shrink baseline size of WTF::Vector on 64-bit by switching to unsigned capacity and size.
<http://webkit.org/b/97268>
<rdar://problem/12376519>

Reviewed by Sam Weinig.

Source/JavaScriptCore:

Update LLInt WTF::Vector offset constants to match the new memory layout.

* llint/LowLevelInterpreter.asm:

Source/WebCore:

* CMakeLists.txt: Add a workaround for GCC 4.6.x in Release mode so it
does not crash.

Source/WTF:

Shrink Vector by 8 bytes on 64-bit by using 32-bit capacity and size.
Vector now inherits from VectorBuffer instead of having a VectorBuffer member;
this is necessary for m_size to fall into the padding after the base class members.

The WTF::Vector API still uses size_t.

Based on Blink r148313 by <cevans@chromium.org>.

* wtf/SizeLimits.cpp:
* wtf/Vector.h:
(WTF::VectorBufferBase::allocateBuffer):
(WTF::VectorBufferBase::tryAllocateBuffer):
(VectorBufferBase):
(WTF::VectorBuffer::shouldReallocateBuffer):
(Vector):
(WTF::Vector::Vector):
(WTF::Vector::capacity):
(WTF::Vector::at):
(WTF::Vector::data):
(WTF::Vector::swap):
(WTF::::Vector):
(WTF::::reserveCapacity):
(WTF::::tryReserveCapacity):
(WTF::::reserveInitialCapacity):
(WTF::::shrinkCapacity):
(WTF::::releaseBuffer):

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@148891 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Scrollbar should not depend on EventHandler, Frame and FrameView
https://bugs.webkit.org/show_bug.cgi?id=114941

Reviewed by Darin Adler.

It's a layering violation that Scrollbar uses EventHandler, Frame
and FrameView. Frame is used to get the EventHandler that is used
to set mousePressed to false after a Scrollbar::mouseUp(). This is
not really needed, since EventHandler already sets m_mousePressed
to false when calling Scrollbar::mouseUp(). The PopupMenu windows
implementation also calls Scrollbar::mouseUp(), but that scrollbar
is not inside a FrameView.

* platform/Scrollbar.cpp:
(WebCore::Scrollbar::isScrollViewScrollbar):
isScrollViewScrollbar() is a method of ScrollView so we don't need
to cast to FrameView.
(WebCore::Scrollbar::mouseUp): Remove EventHandler ussage.

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@148892 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Change baseline JIT watchdog timer check to use the proper fast slow path
infrastructure.
https://bugs.webkit.org/show_bug.cgi?id=114963.

Reviewed by Oliver Hunt.

SH4 parts contributed by Julien Brianceau.

* assembler/ARMAssembler.h:
* assembler/MacroAssemblerARM.h:
* assembler/MacroAssemblerARMv7.h:
* assembler/MacroAssemblerMIPS.h:
(JSC::MacroAssemblerMIPS::branchAdd32):
* assembler/MacroAssemblerSH4.h:
(JSC::MacroAssemblerSH4::branchAdd32):
* assembler/MacroAssemblerX86Common.h:
* assembler/SH4Assembler.h:
* jit/JIT.cpp:
(JSC::JIT::emitEnterOptimizationCheck):
(JSC::JIT::privateCompileSlowCases):
* jit/JIT.h:
(JSC::JIT::emitEnterOptimizationCheck):
* jit/JITOpcodes.cpp:
(JSC::JIT::emit_op_loop_hint):
(JSC::JIT::emitSlow_op_loop_hint):
(JSC::JIT::emit_op_enter):
* jit/JITOpcodes32_64.cpp:
(JSC::JIT::emit_op_enter):



git-svn-id: http://svn.webkit.org/repository/webkit/trunk@148893 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Crash on OS X when shift clicking outside of input
https://bugs.webkit.org/show_bug.cgi?id=104058

Patch by Yi Shen <max.hong.shen@gmail.com> on 2013-04-22
Reviewed by Chang Shu.

Source/WebCore:

Shift clicking outside of a focused div while removing the focused div from
the dom tree at the same time may hit a null visible position, which should
not be used to calculate the text distance with the new selection's start and
end position. Otherwise, the browser may crash.

Test: editing/selection/crash-on-shift-click.html

* page/EventHandler.cpp:
(WebCore::EventHandler::handleMousePressEventSingleClick):

LayoutTests:

Add test for shift click crash issue.

* editing/selection/crash-on-shift-click-expected.txt: Added.
* editing/selection/crash-on-shift-click.html: Added.

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@148894 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Unreviewed Mac gardening. Update a test and results now that forced text 
tracks are supported.

* media/track/track-in-band-expected.txt:
* media/track/track-in-band.html:


git-svn-id: http://svn.webkit.org/repository/webkit/trunk@148895 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2013-04-22  Oliver Hunt  <oliver@apple.com>

        Fix assertions to account for new Vector layout

        RS=Gavin

        * llint/LLIntData.cpp:
        (JSC::LLInt::Data::performAssertions):

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@148896 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2013-04-22  Oliver Hunt  <oliver@apple.com>

        Perform null check before trying to use the result of readline()

        RS=Gavin

        * jsc.cpp:
        (runInteractive):

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@148897 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Range.getClientRects() should not include rects for partially selected elements
https://bugs.webkit.org/show_bug.cgi?id=76839

Reviewed by Sam Weinig.

Source/WebCore:

CSSOM says that Range.getClientRects() should include the border boxes
of each element selected by the range. However, we were also
incorrectly including border boxes for partially selected elements.
For instance, consider the following selection:

    <div>line one<br>line two</div>
    -------------

The <div> is two lines tall, but only the first line is selected.
Despite this, we'd include the <div>'s border box since its start tag
was included in the selection.

Fix this by excluding partially selected elements. This is accomplished
by skipping over elements that come after the start boundary point of
the range but are ancestors of the end boundary point.

Added test cases to LayoutTests/fast/dom/Range/getClientRects.html.

* dom/Range.cpp:
(WebCore::Range::getBorderAndTextQuads):

LayoutTests:

* fast/dom/Range/getClientRects-expected.txt: Updated expected result.
* fast/dom/Range/getClientRects.html: Added new test cases.

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@148898 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Fix broken 32-bit build to green the bots.
https://bugs.webkit.org/show_bug.cgi?id=114968.

Unreviewed.

Basically, I moved a JIT::emit_op_loop_hint() and JIT::emitSlow_op_loop_hint()
into common code where they belong, instead of the 64-bit specific section.

Also fixed some SH4 assertions failures which were also caused by
https://bugs.webkit.org/show_bug.cgi?id=114963. Thanks to Julien Brianceau
for pointing this out.

* assembler/MacroAssemblerSH4.h:
(JSC::MacroAssemblerSH4::branchAdd32):
* jit/JITOpcodes.cpp:
(JSC):
(JSC::JIT::emit_op_loop_hint):
(JSC::JIT::emitSlow_op_loop_hint):



git-svn-id: http://svn.webkit.org/repository/webkit/trunk@148899 268f45cc-cd09-0410-ab3c-d52691b4dbfc
StringImpl.h should compile with -Wshorten-64-to-32
<http://webkit.org/b/114970>

Reviewed by Darin Adler.

Fixes the following warnings with -Wshorten-64-to-32:

    StringImpl.h:317:25: error: implicit conversion loses integer precision: 'uintptr_t' (aka 'unsigned long') to 'unsigned int' [-Werror,-Wshorten-64-to-32]
            unsigned hash = reinterpret_cast<uintptr_t>(this);
                     ~~~~   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

* wtf/text/StringImpl.h:
(WTF::StringImpl::StringImpl): Add static_cast<uint32_t>() to
formalize taking the lower 32-bits of the pointer value on
64-bit architectures.


git-svn-id: http://svn.webkit.org/repository/webkit/trunk@148900 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Refactor creation of the full screen window into an (overridable) method.
https://bugs.webkit.org/show_bug.cgi?id=110369

Reviewed by Eric Carlson.

Add a new WKView method -(NSWindow)createFullScreenWindow which can be overridden
by subclasses to provide custom full screen windows to the WKFullScreenWindowController.

* UIProcess/API/mac/WKView.mm:
(-[WKView fullScreenWindowController]):
(-[WKView createFullScreenWindow]):
* UIProcess/API/mac/WKViewPrivate.h:
* UIProcess/mac/WKFullScreenWindowController.mm:
(-[WKFullScreenWindowController initWithWindow:]):

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@148901 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Hard code plug-in sandbox profile lookup directories and move
the profiles to WebKit2.

Reviewed by Anders Carlsson.

* PluginProcess/EntryPoint/mac/LegacyProcess/PluginProcessMain.mm:
(WebKit::PluginProcessMainDelegate::getExtraInitializationData):
* PluginProcess/EntryPoint/mac/XPCService/PluginServiceEntryPoint.mm:
(WebKit::PluginServiceInitializerDelegate::getExtraInitializationData):
* UIProcess/Plugins/mac/PluginProcessProxyMac.mm:
(WebKit::PluginProcessProxy::platformGetLaunchOptions):
Stop passing the sandbox-profile-directory-path to the plug-in process.

* PluginProcess/mac/PluginProcessMac.mm:
(WebKit::loadSandboxProfileForDirectory):
(WebKit::loadSandboxProfile):
(WebKit::PluginProcess::initializeSandbox):
Hard code the plug-in sandbox profile lookup to only look in the WebKit2 bundle
and /System/Library/Sandbox/Profiles/.

* Resources/PlugInSandboxProfiles: Added.
Add profiles.

* WebKit2.xcodeproj/project.pbxproj:
Copy the profiles to the bundle.



git-svn-id: http://svn.webkit.org/repository/webkit/trunk@148902 268f45cc-cd09-0410-ab3c-d52691b4dbfc
[GTK] Set up libPlatform.la
https://bugs.webkit.org/show_bug.cgi?id=114168

Reviewed by Martin Robinson.

.: 

* GNUmakefile.am: Define the platform_cppflags and platform_sources variables.

Source/Platform: 

* GNUmakefile.am: Set up the libPlatform.la static library to build the source files listed in platform_sources.
As with the libPlatformGtk.la library, only the Source/WebCore/platform and its subdirectories are allowed to be
searched for headers to include, providing a convenient way to detect any platform violations. These directories
are listed in the platform_webcore_cppflags variable.

Source/WebCore: 

No new tests - no new functionality.

* GNUmakefile.am: Also add the LevelDB-specific cppflags to the platform_cppflags if required as the LevelDB
code is now built into the new libPlatform.la library.
* GNUmakefile.list.am: Build a small set of non-GTK-specific platform source files that are already free of
platform violations into the new libPlatform.la library.

Source/WebKit/gtk: 

* GNUmakefile.am: Add the new libPlatform.la library to the libwebkitgtk library.

Source/WebKit2: 

* GNUmakefile.am: Add the new libPlatform.la library to the libwebkitgtk library. Link the WebKitPluginProcess
executable against libPlatform.la as well.

Tools: 

* GNUmakefile.am: Link the DumpRenderTree executable against both libPlatform.la and libPlatformGtk.la libraries.


git-svn-id: http://svn.webkit.org/repository/webkit/trunk@148903 268f45cc-cd09-0410-ab3c-d52691b4dbfc
        <rdar://problem/13681842> [Mac] Tweak WebProcess sandbox profile to use
        system-graphics function when available.

        Reviewed by Sam Weinig.

        * WebProcess/com.apple.WebProcess.sb.in:



git-svn-id: http://svn.webkit.org/repository/webkit/trunk@148904 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Don't kill our XPC services in response to memory pressure
https://bugs.webkit.org/show_bug.cgi?id=114985
<rdar://problem/13229217>

Reviewed by Mark Rowe.

* Shared/EntryPointUtilities/mac/XPCService/XPCServiceEntryPoint.h:
(WebKit::XPCServiceInitializer):
Call xpc_transaction_begin() so we'll never be killed by the kernel when there's memory pressure;
we prefer to manage our own lifetime thank you very much!

* Shared/mac/ChildProcessMac.mm:
(WebKit::ChildProcess::platformInitialize):
Remove call to disable sudden termination.

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@148905 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Cancelling load may cause deadlock in -[AVPlayerItem release]
https://bugs.webkit.org/show_bug.cgi?id=114962

Reviewed by Eric Carlson.

Work around a bug in AVAssetResourceLoader by using a generic, non-main dispatch queue
to recieve AVAssetResourceLoaderDelegate callbacks, and then marshalling those
callbacks to the main thread asynchronously.

* platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
(WebCore::globalLoaderDelegateQueue): Added.
(WebCore::MediaPlayerPrivateAVFoundationObjC::createAVAssetForURL): Use the new global queue.
(-[WebCoreAVFLoaderDelegate resourceLoader:shouldWaitForLoadingOfRequestedResource:]):
    Marshall the request to the main queue, and return YES (wait) immediately.

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