[WK2] Make [Qt]ViewportHandler cross platform
https://bugs.webkit.org/show_bug.cgi?id=91257

Source/WebKit2:

Reviewed by Kenneth Rohde Christiansen and Simon Hausmann.

Since QtViewportHandler includes behaviour that is not platform
specific together with hooks to the QtQuick API layer, a platform
independent implementation would allow other ports to use the
viewport controlling functionality provided.

This patch removes QtViewportHandler and introduces a platform
independent PageViewportController class that is responsible
for handling requests from the web process (eg. content size
changes, viewport attributes changes and scroll position requests).
Requests from the web process are acted on by a platform specific
client class which implements the PageViewportControllerClient
interface which provides hooks to the platform specific API layer.

The PageViewportController is also responsible to notify the web
process about changes in the viewport state (eg. viewport size,
visible rect, content scale and movement trajectory).
The client is responsible to delegate these UI changes to the
PageViewportController.

For now only PageViewportControllerClientQt implements the client
interface besides providing other QQuick specific functionality
(gestures, animations, etc).

* Target.pri:
* UIProcess/API/qt/qquickwebpage_p_p.h:
* UIProcess/API/qt/qquickwebview.cpp:
(QQuickWebViewPrivate::onComponentComplete):
(QQuickWebViewFlickablePrivate::~QQuickWebViewFlickablePrivate):
(QQuickWebViewFlickablePrivate::didChangeViewportProperties):
(QQuickWebViewFlickablePrivate::updateViewportSize):
(QQuickWebViewFlickablePrivate::pageDidRequestScroll):
(QQuickWebViewFlickablePrivate::didChangeContentsSize):
* UIProcess/API/qt/qquickwebview_p.h:
(WebKit):
* UIProcess/API/qt/qquickwebview_p_p.h:
(WebKit):
(QQuickWebViewPrivate::pageViewportControllerClient):
(QQuickWebViewPrivate):
(QQuickWebViewFlickablePrivate):
* UIProcess/API/qt/qwebkittest.cpp:
(QWebKitTest::viewport):
(QWebKitTest::devicePixelRatio):
(QWebKitTest::contentsScale):
* UIProcess/PageViewportController.cpp: Added.
(WebKit):
(WebKit::bound):
(WebKit::fuzzyCompare):
(WebKit::boundPosition):
(WebKit::ViewportUpdateDeferrer::ViewportUpdateDeferrer):
(WebKit::ViewportUpdateDeferrer::~ViewportUpdateDeferrer):
(WebKit::PageViewportController::PageViewportController):
(WebKit::PageViewportController::convertFromViewport):
(WebKit::PageViewportController::convertToViewport):
(WebKit::PageViewportController::innerBoundedContentsScale):
(WebKit::PageViewportController::outerBoundedContentsScale):
(WebKit::PageViewportController::didChangeContentsSize):
(WebKit::PageViewportController::pageDidRequestScroll):
(WebKit::PageViewportController::setViewportSize):
(WebKit::PageViewportController::setVisibleContentsRect):
(WebKit::PageViewportController::syncVisibleContents):
(WebKit::PageViewportController::didChangeViewportAttributes):
(WebKit::PageViewportController::suspendContent):
(WebKit::PageViewportController::resumeContent):
(WebKit::PageViewportController::positionRangeForContentAtScale):
* UIProcess/PageViewportController.h: Added.
(WebCore):
(WebKit):
(ViewportUpdateDeferrer):
(PageViewportController):
(WebKit::PageViewportController::~PageViewportController):
(WebKit::PageViewportController::hasSuspendedContent):
(WebKit::PageViewportController::hadUserInteraction):
(WebKit::PageViewportController::allowsUserScaling):
(WebKit::PageViewportController::contentsLayoutSize):
(WebKit::PageViewportController::devicePixelRatio):
(WebKit::PageViewportController::minimumContentsScale):
(WebKit::PageViewportController::maximumContentsScale):
(WebKit::PageViewportController::setHadUserInteraction):
* UIProcess/PageViewportControllerClient.h: Added.
(WebKit):
(PageViewportControllerClient):
(WebKit::PageViewportControllerClient::PageViewportControllerClient):
(WebKit::PageViewportControllerClient::~PageViewportControllerClient):
* UIProcess/qt/PageViewportControllerClientQt.cpp: Added.
(WebKit):
(WebKit::PageViewportControllerClientQt::PageViewportControllerClientQt):
(WebKit::PageViewportControllerClientQt::ScaleAnimation::updateCurrentValue):
(WebKit::PageViewportControllerClientQt::~PageViewportControllerClientQt):
(WebKit::PageViewportControllerClientQt::setContentRectVisiblePositionAtScale):
(WebKit::PageViewportControllerClientQt::animateContentRectVisible):
(WebKit::PageViewportControllerClientQt::flickMoveStarted):
(WebKit::PageViewportControllerClientQt::flickMoveEnded):
(WebKit::PageViewportControllerClientQt::pageItemPositionChanged):
(WebKit::PageViewportControllerClientQt::scaleAnimationStateChanged):
(WebKit::PageViewportControllerClientQt::touchBegin):
(WebKit::PageViewportControllerClientQt::touchEnd):
(WebKit::PageViewportControllerClientQt::focusEditableArea):
(WebKit::PageViewportControllerClientQt::zoomToAreaGestureEnded):
(WebKit::PageViewportControllerClientQt::nearestValidVisibleContentsRect):
(WebKit::PageViewportControllerClientQt::setContentsPosition):
(WebKit::PageViewportControllerClientQt::setContentsScale):
(WebKit::PageViewportControllerClientQt::setContentsRectToNearestValidBounds):
(WebKit::PageViewportControllerClientQt::didResumeContent):
(WebKit::PageViewportControllerClientQt::allowsUserScaling):
(WebKit::PageViewportControllerClientQt::devicePixelRatio):
(WebKit::PageViewportControllerClientQt::minimumContentsScale):
(WebKit::PageViewportControllerClientQt::maximumContentsScale):
(WebKit::PageViewportControllerClientQt::currentContentsScale):
(WebKit::PageViewportControllerClientQt::contentsLayoutSize):
(WebKit::PageViewportControllerClientQt::scrollAnimationActive):
(WebKit::PageViewportControllerClientQt::panGestureActive):
(WebKit::PageViewportControllerClientQt::panGestureStarted):
(WebKit::PageViewportControllerClientQt::panGestureRequestUpdate):
(WebKit::PageViewportControllerClientQt::panGestureEnded):
(WebKit::PageViewportControllerClientQt::panGestureCancelled):
(WebKit::PageViewportControllerClientQt::scaleAnimationActive):
(WebKit::PageViewportControllerClientQt::cancelScrollAnimation):
(WebKit::PageViewportControllerClientQt::interruptScaleAnimation):
(WebKit::PageViewportControllerClientQt::pinchGestureActive):
(WebKit::PageViewportControllerClientQt::pinchGestureStarted):
(WebKit::PageViewportControllerClientQt::pinchGestureRequestUpdate):
(WebKit::PageViewportControllerClientQt::pinchGestureEnded):
(WebKit::PageViewportControllerClientQt::pinchGestureCancelled):
(WebKit::PageViewportControllerClientQt::visibleContentsRect):
(WebKit::PageViewportControllerClientQt::didChangeContentsSize):
(WebKit::PageViewportControllerClientQt::didChangeVisibleContents):
(WebKit::PageViewportControllerClientQt::didChangeViewportAttributes):
(WebKit::PageViewportControllerClientQt::updateViewportController):
(WebKit::PageViewportControllerClientQt::scaleContent):
(WebKit::PageViewportControllerClientQt::viewportScaleForRect):
* UIProcess/qt/PageViewportControllerClientQt.h: Added.
(WebKit):
(PageViewportControllerClientQt):
(WebKit::PageViewportControllerClientQt::setController):
(ScaleAnimation):
(WebKit::PageViewportControllerClientQt::ScaleAnimation::ScaleAnimation):
(WebKit::PageViewportControllerClientQt::ScaleStackItem::ScaleStackItem):
(ScaleStackItem):
* UIProcess/qt/QtGestureRecognizer.cpp:
(WebKit::QtGestureRecognizer::viewportController):
* UIProcess/qt/QtGestureRecognizer.h:
(WebKit):
* UIProcess/qt/QtPanGestureRecognizer.cpp:
(WebKit::QtPanGestureRecognizer::update):
(WebKit::QtPanGestureRecognizer::finish):
(WebKit::QtPanGestureRecognizer::cancel):
* UIProcess/qt/QtPinchGestureRecognizer.cpp:
(WebKit::QtPinchGestureRecognizer::update):
(WebKit::QtPinchGestureRecognizer::finish):
(WebKit::QtPinchGestureRecognizer::cancel):
* UIProcess/qt/QtViewportHandler.cpp: Removed.
* UIProcess/qt/QtWebPageEventHandler.cpp:
(WebKit::QtWebPageEventHandler::QtWebPageEventHandler):
(WebKit::QtWebPageEventHandler::setViewportController):
(WebKit::QtWebPageEventHandler::inputPanelVisibleChanged):
(WebKit::QtWebPageEventHandler::handleInputEvent):
(WebKit::QtWebPageEventHandler::doneWithTouchEvent):
(WebKit::QtWebPageEventHandler::didFindZoomableArea):
* UIProcess/qt/QtWebPageEventHandler.h:
(WebKit):
(QtWebPageEventHandler):
(WebKit::QtWebPageEventHandler::viewportController):

Tools:

Reviewed by Kenneth Rohde Christiansen.

Remove initial scale from viewport info item since it is
set to -1 after applied thus it does not hold any valuable
information.

* MiniBrowser/qt/qml/ViewportInfoItem.qml:

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@127720 268f45cc-cd09-0410-ab3c-d52691b4dbfc
[Chromium] Win build fix attempt after r127715

* tests/CCRenderPassTest.cpp:
(WebCore::TEST):

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@127721 268f45cc-cd09-0410-ab3c-d52691b4dbfc
[EFL] Gardening after r127620, r127698 and r127704
https://bugs.webkit.org/show_bug.cgi?id=95963

Unreviewed gardening.

Following tests were added to TestExpectations:
compositing/overflow/overflow-auto-with-touch-toggle.html fails after r127620.
fast/dom/HTMLScriptElement/script-reexecution.html fails after r127698.
fast/viewport/viewport-limits-adjusted-for-no-user-scale-control.html fails after r127704.
fast/viewport/viewport-limits-adjusted-for-no-user-scale.html fails after r127704.

Patch by Mikhail Pozdnyakov <mikhail.pozdnyakov@intel.com> on 2012-09-06

* platform/efl/TestExpectations:

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@127722 268f45cc-cd09-0410-ab3c-d52691b4dbfc
[EFL] Keep placeholder text visible until first input from user.
https://bugs.webkit.org/show_bug.cgi?id=95851

Patch by Kangil Han <kangil.han@samsung.com> on 2012-09-06
Reviewed by Gyuyoung Kim.

Current specification, http://dev.w3.org/html5/spec/single-page.html#attr-input-placeholder, has allowed user agent to keep placeholder text until first input.
Therefore, this patch enabled it.

* platform/efl/RenderThemeEfl.h:
(WebCore::RenderThemeEfl::shouldShowPlaceholderWhenFocused):

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@127723 268f45cc-cd09-0410-ab3c-d52691b4dbfc
[Qt] Fix build with ANGLE on platforms that provide EGL/GLESv2
https://bugs.webkit.org/show_bug.cgi?id=95965

Reviewed by Tor Arne Vestbø.

.:

Add ANGLE as separate static library to the build and dependencies.

* Source/api.pri:
* WebKit.pro:

Source/ThirdParty/ANGLE:

Add build rules to build ANGLE as a static library for the Qt port.

* ANGLE.pri: Added.
* ANGLE.pro: Added.
* DerivedSources.pri: Added.
* Target.pri: Added.

Source/WebCore:

Moved all ANGLE build rules from here to Source/Thirty/ANGLE and
instead depend on the new library with a simple WEBKIT += ANGLE.

* DerivedSources.pri:
* Target.pri:
* platform/graphics/ANGLEWebKitBridge.h: Simplify the include statement
for the internal shader compiler API, aligned with the other platforms.

Source/WebKit:

Depend on ANGLE if necessary, due to the use WebCore types that pull in ANGLE
headers (GraphicsContext3D.h in particular).

* WebKit1.pro:

Source/WebKit2:

Depend on ANGLE if necessary, due to the use WebCore types that pull in ANGLE
headers (GraphicsContext3D.h in particular).

* Target.pri:

Tools:

Add ANGLE as a static library module to the Qt WebKit build system.

* qmake/mkspecs/features/default_post.prf:
* qmake/mkspecs/modules/angle.prf: Added.

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@127724 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Small typo I forgot to land as part of r127724

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@127725 268f45cc-cd09-0410-ab3c-d52691b4dbfc
[Qt] Various small Windows / MSVC build fixes
https://bugs.webkit.org/show_bug.cgi?id=95934

Reviewed by Kenneth Rohde Christiansen.

Source/WebKit2:

* Shared/LayerTreeContext.h: Include stdint.h due to the use of uint32_t as layer id.
* UIProcess/API/qt/qquickwebview_p.h:
(WebKit): Fix struct vs. class forward declaration mismatch, causing linking errors.
* UIProcess/API/qt/tests/bytearraytestdata.h: Remove export macro from internal test class
that is not used anymore. Using the export macro from a DLL when the code in question is not
part of the DLL results in the export macro expanding to dllimport, giving incorrect linkage
for the unit test.
* WebProcess/qt/WebProcessMainQt.cpp:
(WebKit::WebProcessMainQt): Removed explicit call to srandom(), which is not available on Windows.
The call appears to be unnecessary in the light of the WTF::initializeThreading() call below, which
in turn calls WTF::initializeRandomNumberGenerator(), which does the same thing already (and isn't
needed on Windows, as per comment in wtf/RandomNumberSeed.h)

Source/WTF:

For the Qt build on Windows, do not enable WTF_USE_UNIX_DOMAIN_SOCKETS for
WebKit2 IPC.

* wtf/Platform.h:

Tools:

setFocus takes a boolean as argument: Don't try to implicitly convert
an enum to a boolean, MSVC doesn't like that. The intent here is to
enable focus, so just pass true.

* WebKitTestRunner/qt/PlatformWebViewQt.cpp:
(WTR::PlatformWebView::focus):

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@127726 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Refactor CalendarPicker to not use global variables.
https://bugs.webkit.org/show_bug.cgi?id=95830

Reviewed by Kent Tamura.

Source/WebCore:

Introduce CalendarPicker so we can have multiple Pickers in one page
popup in the future.

No new tests. No behavior change.

* Resources/pagepopups/calendarPicker.js:
(initialize):
(resetMain):
(openCalendarPicker):
(CalendarPicker):
(CalendarPicker.prototype._layout):
(CalendarPicker.prototype.handleToday):
(CalendarPicker.prototype.handleClear):
(CalendarPicker.prototype.fixWindowSize):
(CalendarPicker.prototype._layoutButtons):
(YearMonthController):
(YearMonthController.prototype.attachTo):
(YearMonthController.prototype._redraw):
(YearMonthController.prototype._handleYearMonthChange):
(YearMonthController.prototype.moveRelatively):
(DaysTable):
(DaysTable.prototype.attachTo):
(CalendarPicker.prototype.stepMismatch):
(CalendarPicker.prototype.outOfRange):
(CalendarPicker.prototype.isValidDate):
(DaysTable.prototype._renderMonth):
(DaysTable.prototype._navigateToMonth):
(DaysTable.prototype._maybeSetPreviousMonth):
(DaysTable.prototype._maybeSetNextMonth):
(DaysTable.prototype._handleDayClick):
(DaysTable.prototype._handleKey):
(CalendarPicker.prototype._handleBodyKeyDown):
* Resources/pagepopups/colorSuggestionPicker.js:
(ColorPicker):
(ColorPicker.prototype._layout):
(ColorPicker.prototype._handleKeyDown):
(ColorPicker.prototype._handleSwatchClick):
* Resources/pagepopups/pickerCommon.js:
(Picker):
(Picker.prototype.submitValue):
(Picker.prototype.handleCancel):
(Picker.prototype.chooseOtherColor):

LayoutTests:

* fast/forms/date/calendar-picker-appearance-pre-100.html:


git-svn-id: http://svn.webkit.org/repository/webkit/trunk@127727 268f45cc-cd09-0410-ab3c-d52691b4dbfc
[Qt] Unreviewed gardening, skip one more failing test,
because we like regressions in the trunk. :)

* platform/qt/Skipped:

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