LOG(KeyHandling, "WebPageProxy::handleKeyboardEvent: %s", webKeyboardEventTypeString(event.type()));
+#if ENABLE(TIZEN_WEBKIT2_ROTATION_WHILE_JAVASCRIPT_POPUP)
+ if (!isWaitingForJavaScriptPopupReply()) {
+ m_keyEventQueue.append(event);
+
+ process()->responsivenessTimer()->start();
+ if (m_shouldSendEventsSynchronously) {
+ bool handled = false;
+ process()->sendSync(Messages::WebPage::KeyEventSyncForTesting(event), Messages::WebPage::KeyEventSyncForTesting::Reply(handled), m_pageID);
+ didReceiveEvent(event.type(), handled);
+ } else
+ process()->send(Messages::WebPage::KeyEvent(event), m_pageID);
+ } else {
+ if (m_keyEventQueue.isEmpty()) {
+ bool handled = false;
+ didReceiveEvent(event.type(), handled);
+ } else {
+ QueuedUIEvents<NativeWebKeyboardEvent>& lastEvent = m_keyEventQueue.last();
+ lastEvent.deferredEvents.append(event);
+ }
+ }
+#else
m_keyEventQueue.append(event);
process()->responsivenessTimer()->start();
didReceiveEvent(event.type(), handled);
} else
process()->send(Messages::WebPage::KeyEvent(event), m_pageID);
+#endif
}
#if ENABLE(GESTURE_EVENTS)
if (!isValid())
return;
+#if ENABLE(TIZEN_WEBKIT2_ROTATION_WHILE_JAVASCRIPT_POPUP)
+ if (!isWaitingForJavaScriptPopupReply()) {
+ m_gestureEventQueue.append(event);
+
+ process()->responsivenessTimer()->start();
+ process()->send(Messages::EventDispatcher::GestureEvent(m_pageID, event), 0);
+ } else {
+ if (m_gestureEventQueue.isEmpty()) {
+ bool isEventHandled = false;
+ m_pageClient->doneWithGestureEvent(event, handled);
+ } else {
+ QueuedUIEvents<WebGestureEvent>& lastEvent = m_gestureEventQueue.last();
+ lastEvent.deferredEvents.append(event);
+ }
+ }
+#else
m_gestureEventQueue.append(event);
process()->responsivenessTimer()->start();
process()->send(Messages::EventDispatcher::GestureEvent(m_pageID, event), 0);
+#endif
}
#endif
// If the page is suspended, which should be the case during panning, pinching
// and animation on the page itself (kinetic scrolling, tap to zoom) etc, then
// we do not send any of the events to the page even if is has listeners.
+#if ENABLE(TIZEN_WEBKIT2_ROTATION_WHILE_JAVASCRIPT_POPUP)
+ if (m_needTouchEvents && !m_isPageSuspended && !isWaitingForJavaScriptPopupReply()) {
+#else
if (m_needTouchEvents && !m_isPageSuspended) {
+#endif
#if OS(TIZEN)
// Do not send the TouchMove event if last TouchMove is not processed yet.
// TouchMove event will be sent too many times without below codes,
} else {
// We attach the incoming events to the newest queued event so that all
// the events are delivered in the correct order when the event is dequed.
+#if ENABLE(TIZEN_WEBKIT2_ROTATION_WHILE_JAVASCRIPT_POPUP)
+ QueuedUIEvents<NativeWebTouchEvent>& lastEvent = m_touchEventQueue.last();
+ lastEvent.deferredEvents.append(event);
+#else
QueuedTouchEvents& lastEvent = m_touchEventQueue.last();
lastEvent.deferredTouchEvents.append(event);
+#endif
}
}
}
m_uiClient.close(this);
}
+#if ENABLE(TIZEN_WEBKIT2_ROTATION_WHILE_JAVASCRIPT_POPUP)
+bool WebPageProxy::isWaitingForJavaScriptPopupReply()
+{
+ return m_alertReply || m_confirmReply || m_promptReply;
+}
+#endif
+
#if OS(TIZEN)
void WebPageProxy::runJavaScriptAlert(uint64_t frameID, const String& message, PassRefPtr<Messages::WebPageProxy::RunJavaScriptAlert::DelayedReply> reply)
{
case WebEvent::GestureScrollBegin:
case WebEvent::GestureScrollEnd:
case WebEvent::GestureSingleTap: {
+#if ENABLE(TIZEN_WEBKIT2_ROTATION_WHILE_JAVASCRIPT_POPUP)
+ QueuedUIEvents<WebGestureEvent> queuedEvents = m_gestureEventQueue.first();
+ MESSAGE_CHECK(type == queuedEvents.forwardedEvent.type());
+ m_gestureEventQueue.removeFirst();
+
+ m_pageClient->doneWithGestureEvent(queuedEvents.forwardedEvent, handled);
+ for (size_t i = 0; i < queuedEvents.deferredEvents.size(); ++i) {
+ bool isEventHandled = false;
+ m_pageClient->doneWithGuestureEvent(queuedEvents.deferredEvents.at(i), isEventHandled);
+ }
+#else
WebGestureEvent event = m_gestureEventQueue.first();
MESSAGE_CHECK(type == event.type());
m_gestureEventQueue.removeFirst();
m_pageClient->doneWithGestureEvent(event, handled);
+#endif
break;
}
#endif
case WebEvent::Char: {
LOG(KeyHandling, "WebPageProxy::didReceiveEvent: %s", webKeyboardEventTypeString(type));
+#if ENABLE(TIZEN_WEBKIT2_ROTATION_WHILE_JAVASCRIPT_POPUP)
+ QueuedUIEvents<NativeWebKeyboardEvent> queuedEvents = m_keyEventQueue.first();
+ MESSAGE_CHECK(type == queuedEvents.forwardedEvent.type());
+ m_keyEventQueue.removeFirst();
+
+ m_pageClient->doneWithKeyEvent(queuedEvents.forwardedEvent, handled);
+
+ if (!handled) {
+ if (m_uiClient.implementsDidNotHandleKeyEvent())
+ m_uiClient.didNotHandleKeyEvent(this, queuedEvents.forwardedEvent);
+#if PLATFORM(WIN)
+ else
+ ::TranslateMessage(queuedEvents.forwardedEvent.nativeEvent());
+#endif
+ }
+
+ for (size_t i = 0; i < queuedEvents.deferredEvents.size(); ++i) {
+ bool isEventHandled = false;
+ m_pageClient->doneWithKeyEvent(queuedEvents.deferredEvents.at(i), isEventHandled);
+ }
+#else
NativeWebKeyboardEvent event = m_keyEventQueue.first();
MESSAGE_CHECK(type == event.type());
else
::TranslateMessage(event.nativeEvent());
#endif
+#endif // #if ENABLE(TIZEN_WEBKIT2_ROTATION_WHILE_JAVASCRIPT_POPUP)
break;
}
#if ENABLE(TOUCH_EVENTS)
case WebEvent::TouchMove:
case WebEvent::TouchEnd:
case WebEvent::TouchCancel: {
+#if ENABLE(TIZEN_WEBKIT2_ROTATION_WHILE_JAVASCRIPT_POPUP)
+ QueuedUIEvents<NativeWebTouchEvent> queuedEvents = m_touchEventQueue.first();
+ MESSAGE_CHECK(type == queuedEvents.forwardedEvent.type());
+ m_touchEventQueue.removeFirst();
+
+ m_pageClient->doneWithTouchEvent(queuedEvents.forwardedEvent, handled);
+ for (size_t i = 0; i < queuedEvents.deferredEvents.size(); ++i) {
+ bool isEventHandled = false;
+ m_pageClient->doneWithTouchEvent(queuedEvents.deferredEvents.at(i), isEventHandled);
+ }
+#else
QueuedTouchEvents queuedEvents = m_touchEventQueue.first();
MESSAGE_CHECK(type == queuedEvents.forwardedEvent.type());
m_touchEventQueue.removeFirst();
bool isEventHandled = false;
m_pageClient->doneWithTouchEvent(queuedEvents.deferredTouchEvents.at(i), isEventHandled);
}
+#endif
break;
}
#endif
#if ENABLE(TOUCH_EVENTS)
#include "NativeWebTouchEvent.h"
#endif
+#if ENABLE(TIZEN_WEBKIT2_ROTATION_WHILE_JAVASCRIPT_POPUP)
+#include "NativeWebKeyboardEvent.h"
+#endif
#if PLATFORM(QT)
#include "QtNetworkRequestData.h"
#endif
namespace WebKit {
+#if !ENABLE(TIZEN_WEBKIT2_ROTATION_WHILE_JAVASCRIPT_POPUP)
class NativeWebKeyboardEvent;
+#endif
class NativeWebMouseEvent;
class NativeWebWheelEvent;
class PageClient;
typedef GenericCallback<WKErrorRef> PrintFinishedCallback;
#endif
+#if ENABLE(TIZEN_WEBKIT2_ROTATION_WHILE_JAVASCRIPT_POPUP)
+template<typename T>
+struct QueuedUIEvents {
+ QueuedUIEvents(const T& event)
+ : forwardedEvent(event)
+ {
+ }
+ T forwardedEvent;
+ Vector<T> deferredEvents;
+};
+#else
#if ENABLE(TOUCH_EVENTS)
struct QueuedTouchEvents {
QueuedTouchEvents(const NativeWebTouchEvent& event)
Vector<NativeWebTouchEvent> deferredTouchEvents;
};
#endif
+#endif
// FIXME: Make a version of CallbackBase with three arguments, and define ValidateCommandCallback as a specialization.
class ValidateCommandCallback : public CallbackBase {
void decidePolicyForCertificateError(bool isTrusted, const String& url, const String& certificate, int error, bool& canContinue);
#endif
+#if ENABLE(TIZEN_WEBKIT2_ROTATION_WHILE_JAVASCRIPT_POPUP)
+ bool isWaitingForJavaScriptPopupReply();
+#endif
+
PageClient* m_pageClient;
WebLoaderClient m_loaderClient;
WebPolicyClient m_policyClient;
WebCore::PolicyAction m_syncNavigationActionPolicyAction;
uint64_t m_syncNavigationActionPolicyDownloadID;
+#if ENABLE(TIZEN_WEBKIT2_ROTATION_WHILE_JAVASCRIPT_POPUP)
+#if ENABLE(GESTURE_EVENTS)
+ Deque<QueuedUIEvents<WebGestureEvent> > m_gestureEventQueue;
+#endif
+ Deque<QueuedUIEvents<NativeWebKeyboardEvent> > m_keyEventQueue;
+#else
#if ENABLE(GESTURE_EVENTS)
Deque<WebGestureEvent> m_gestureEventQueue;
#endif
Deque<NativeWebKeyboardEvent> m_keyEventQueue;
+#endif
Deque<NativeWebWheelEvent> m_wheelEventQueue;
Deque<OwnPtr<Vector<NativeWebWheelEvent> > > m_currentlyProcessedWheelEvents;
#if ENABLE(TOUCH_EVENTS)
bool m_needTouchEvents;
+#if ENABLE(TIZEN_WEBKIT2_ROTATION_WHILE_JAVASCRIPT_POPUP)
+ Deque<QueuedUIEvents<NativeWebTouchEvent> > m_touchEventQueue;
+#else
Deque<QueuedTouchEvents> m_touchEventQueue;
#endif
+#endif
#if ENABLE(INPUT_TYPE_COLOR)
RefPtr<WebColorChooserProxy> m_colorChooser;
#endif