WebKit2 View Gestures: Implement smartMagnifyWithEvent: and make it work
https://bugs.webkit.org/show_bug.cgi?id=125752
<rdar://problem/15664245>

Reviewed by Anders Carlsson.

Implement "smart magnify", which is the double-tap-to-zoom gesture on OS X.

* UIProcess/API/mac/WKView.mm:
(-[WKView smartMagnifyWithEvent:]):
Forward smartMagnifyWithEvent to ViewGestureController.

* UIProcess/mac/ViewGestureController.cpp:
(WebKit::ViewGestureController::handleMagnificationGesture):
Drive-by repair a comment.

(WebKit::ViewGestureController::handleSmartMagnificationGesture):
Added. Immediately dispatch a message to the web process to retrieve
the rendered rect of the element under the gesture.

(WebKit::maximumRectangleComponentDelta):
Return the absolute maximum delta between corresponding components of two rects.

(WebKit::ViewGestureController::didCollectGeometryForSmartMagnificationGesture):
Once the WebProcess has replied with the relevant geometry, use it to
determine our target rectangle (the element's rect, with some padding)
and target magnification (attempting to keep replaced elements
fully in-view, and otherwise zooming in as far as possible to fit the
element's width).

If this gesture occurs after the page is already magnified, and targets
a similar region to the previous smart magnification gesture, zoom out
instead of panning across the page.

Begin a transient zoom with the current magnification, and immediately
commit it at our target magnification and offset, so that the drawing
area will animate to the new parameters.

(WebKit::ViewGestureController::endActiveGesture):
* UIProcess/mac/ViewGestureController.h:
* UIProcess/mac/ViewGestureController.messages.in:
* WebProcess/WebPage/ViewGestureGeometryCollector.cpp:
(WebKit::ViewGestureGeometryCollector::collectGeometryForSmartMagnificationGesture):
Hit-test the document to determine the node under the smart magnification
gesture, and return it to the UI process along with various other bits of data.

* WebProcess/WebPage/ViewGestureGeometryCollector.h:
* WebProcess/WebPage/ViewGestureGeometryCollector.messages.in:
* WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
* WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
(WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea):
(WebKit::TiledCoreAnimationDrawingArea::adjustTransientZoom):
(WebKit::TiledCoreAnimationDrawingArea::commitTransientZoom):
(WebKit::TiledCoreAnimationDrawingArea::applyTransientZoomToPage):
Instead of short-circuiting the animation if we didn't have to constrain
the origin, short-circuit if we're already *at* the right origin,
like the comment said. This prevents jarring jumps when double-tap-panning
between elements when zoomed all the way in.

* WebCore.exp.in:
Add some exports.


git-svn-id: http://svn.webkit.org/repository/webkit/trunk@160923 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Web Inspector: Extract CommandLineAPI into its own InjectedScriptModule
https://bugs.webkit.org/show_bug.cgi?id=126038

Reviewed by Timothy Hatcher.

No tests, no observable change in behavior.

Move the CommandLineAPI source into its own module. Load the module
in InjectedScripts for WebCore::Pages. Not for workers.

Moving CommandLineAPI into it's own module moves it from being inside
the same anonymous function to being evaluated outside the anonymous
function. To connect the two InjectedScript passes itself to the
injected module, and the CommandLineAPI module places its class on the
injectedScript as injectedScript.CommandLineAPI.

This essentially makes the CommandLineAPI module an InjectedScript
extension. InjectedScriptSource checks for the existence of
this.CommandLineAPI to see if the fuller version is available. Otherwise
it falls back to a BasicCommandLineAPI which only exposes "$_",
which is the "last evaluated result". That will be useful for JS Contexts
and Workers.

At the same time, this patch makes InjectedScriptModule more generic,
to support being used in a pure JavaScript environment, meaning one
without "window" as the global object.

* CMakeLists.txt:
* DerivedSources.make:
* GNUmakefile.am:
* GNUmakefile.list.am:
* WebCore.vcxproj/WebCore.vcxproj:
* WebCore.vcxproj/WebCore.vcxproj.filters:
* WebCore.xcodeproj/project.pbxproj:
* inspector/InspectorAllInOne.cpp:
Add files. Minify the CommandLineAPIModuleSource in generation.

* inspector/CommandLineAPIModule.h: Added.
* inspector/CommandLineAPIModule.cpp: Added.
(WebCore::CommandLineAPIModule::CommandLineAPIModule):
(WebCore::CommandLineAPIModule::injectIfNeeded):
(WebCore::CommandLineAPIModule::source):
Inject the module that doesn't return an object, its just evaluated code
extending the original InjectedScript.

* inspector/InjectedScriptModule.h:
* inspector/InjectedScriptModule.cpp:
(WebCore::InjectedScriptModule::ensureInjected):
Only ASSERT the result was an object if the Module claims it returns an object.

* inspector/InjectedScriptCanvasModule.h:
(WebCore::InjectedScriptCanvasModule::returnsObject):
Return an object used later to call into the CanvasModule.

* inspector/PageRuntimeAgent.cpp:
(WebCore::PageRuntimeAgent::injectedScriptForEval):
Ensure the CommandLineAPIModule is loaded in the Page's InjectedScript.

* inspector/CommandLineAPIModuleSource.js: Added.
Create the CommandLineAPI class and place it on injectedScript.

* inspector/InjectedScriptSource.js:
(InjectedScript.prototype._evaluateOn):
Inject either the BasicCommandLineAPI or extended CommandLineAPI.
Derive the globalObject dynamically instead of assuming window.
Inject the commandLineAPI on window.console or the globalObject based on context.
Audit and rename uses of "window" to something like globalObject.

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@160924 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Web Inspector: Extract CommandLineAPI into its own InjectedScriptModule
https://bugs.webkit.org/show_bug.cgi?id=126038

Reviewed by Timothy Hatcher.

Only inject the CommandLineAPIModule once, when the InjectedScript
is first created. This avoids running a small snippet of JavaScript
to check if the module is loaded every time we fetch the InjectedScript.

* CMakeLists.txt:
* GNUmakefile.list.am:
* WebCore.vcxproj/WebCore.vcxproj:
* WebCore.vcxproj/WebCore.vcxproj.filters:
* WebCore.xcodeproj/project.pbxproj:
* inspector/InspectorAllInOne.cpp:
Add new files to the build.

* inspector/InjectedScriptManager.h:
* inspector/InjectedScriptManager.cpp:
(WebCore::InjectedScriptManager::createForPage):
(WebCore::InjectedScriptManager::injectedScriptFor):
(WebCore::InjectedScriptManager::didCreateInjectedScript):
Add didCreateInjectedScript hook for a subclass to inject more scripts.

* inspector/PageInjectedScriptManager.h: Added.
* inspector/PageInjectedScriptManager.cpp: Added.
(WebCore::PageInjectedScriptManager::didCreateInjectedScript):
For pages, inject the CommandLineAPIModule.

* inspector/PageRuntimeAgent.cpp:
(WebCore::PageRuntimeAgent::injectedScriptForEval):
This is replaced by PageInjectedScriptManager, we no longer need
to do extra work every time we fetch the injectedScriptForEval.

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@160925 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Node post attach callbacks should use references
https://bugs.webkit.org/show_bug.cgi?id=126081

Reviewed by Antti Koivisto.

* dom/ContainerNode.cpp:
(WebCore::ContainerNode::queuePostAttachCallback):
(WebCore::ContainerNode::dispatchPostAttachCallbacks):
(WebCore::needsStyleRecalcCallback):
(WebCore::ContainerNode::scheduleSetNeedsStyleRecalc):
* dom/ContainerNode.h:
* html/HTMLFormControlElement.cpp:
(WebCore::focusPostAttach):
(WebCore::HTMLFormControlElement::didAttachRenderers):
(WebCore::updateFromElementCallback):
(WebCore::HTMLFormControlElement::didRecalcStyle):
* html/HTMLPlugInImageElement.cpp:
(WebCore::HTMLPlugInImageElement::didAttachRenderers):
(WebCore::HTMLPlugInImageElement::updateWidgetCallback):
(WebCore::HTMLPlugInImageElement::startLoadingImageCallback):
* html/HTMLPlugInImageElement.h:

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@160926 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Remove an unneeded include of WebCoreSystemInterface.h.

Rubber-stamped by Dan Bernstein.

* platform/mac/ContentFilterMac.mm:

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@160927 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Move scheduleSetNeedsStyleRecalc to HTMLFrameOwnerElement
https://bugs.webkit.org/show_bug.cgi?id=126083

Reviewed by Antti Koivisto.

scheduleSetNeedsStyleRecalc is only ever called on HTMLFrameOwnerElement, so
move it there, remove the Node implementation and make it non-virtual.

* dom/ContainerNode.cpp:
* dom/ContainerNode.h:
* dom/Node.h:
* html/HTMLFrameOwnerElement.cpp:
(WebCore::needsStyleRecalcCallback):
(WebCore::HTMLFrameOwnerElement::scheduleSetNeedsStyleRecalc):
* html/HTMLFrameOwnerElement.h:

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@160928 268f45cc-cd09-0410-ab3c-d52691b4dbfc
[GTK] [CMake] Add support for building WebKitTestRunner
https://bugs.webkit.org/show_bug.cgi?id=125768

Reviewed by Gustavo Noronha Silva.

* CMakeLists.txt: Compile WebKitTestRunner for GTK+ when WebKit2 is enabled.
* WebKitTestRunner/CMakeLists.txt: Remove some EFL specific flags from the common
build file.
* WebKitTestRunner/PlatformEfl.cmake: Move the flags here.
* WebKitTestRunner/PlatformGTK.cmake: Added.

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