2 * Copyright (C) 2011 Samsung Electronics
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23 * THE POSSIBILITY OF SUCH DAMAGE.
27 #include "WebPageProxy.h"
29 #include "EwkViewImpl.h"
30 #include "NativeWebKeyboardEvent.h"
31 #include "NotImplemented.h"
32 #include "PageClientImpl.h"
33 #include "WebPageMessages.h"
34 #include "WebProcessProxy.h"
36 #include <sys/utsname.h>
39 #include "DrawingAreaMessages.h"
41 #if ENABLE(TIZEN_CSS_OVERFLOW_SCROLL_ACCELERATION_ON_UI_SIDE)
42 #include "LayerTreeCoordinatorProxy.h"
44 #include "NativeWebKeyboardEvent.h"
46 #include "WebPageMessages.h"
47 #include "WebProcessProxy.h"
48 #include <WebCore/IntSize.h>
49 #if ENABLE(TIZEN_CONTEXT_MENU_WEBKIT_2)
50 #include "WebContextMenuProxy.h"
51 #include "ewk_view_private.h"
54 #define MESSAGE_CHECK(assertion) MESSAGE_CHECK_BASE(assertion, m_process->connection())
56 #if ENABLE(TIZEN_LINK_MAGNIFIER)
57 #include "LinkMagnifierProxy.h"
60 #if ENABLE(TIZEN_SCREEN_READER)
61 #include "ScreenReaderProxy.h"
62 #include "ewk_view_private.h"
66 #include <WebCore/ContentSecurityPolicy.h>
69 using namespace WebCore;
74 Evas_Object* WebPageProxy::viewWidget()
76 return static_cast<PageClientImpl*>(m_pageClient)->viewImpl()->view();
79 String WebPageProxy::standardUserAgent(const String& applicationNameForUserAgent)
82 return String::fromUTF8("Mozilla/5.0 (Linux; Tizen 2.1; sdk) AppleWebKit/537.3 (KHTML, like Gecko) Version/2.1 Mobile Safari/537.3");
87 WTF::String osVersion;
94 version = makeString(String::number(WEBKIT_USER_AGENT_MAJOR_VERSION), '.',
95 String::number(WEBKIT_USER_AGENT_MINOR_VERSION), '+');
97 if (uname(&name) != -1)
98 osVersion = WTF::String(name.sysname) + " " + WTF::String(name.machine);
100 osVersion = "Unknown";
102 if (applicationNameForUserAgent.isEmpty())
103 return makeString("Mozilla/5.0 (", platform, "; ", osVersion, ") AppleWebKit/", version,
104 " (KHTML, like Gecko) Version/5.0 Safari/", version);
106 return makeString("Mozilla/5.0 (", platform, "; ", osVersion, ") AppleWebKit/", version,
107 " (KHTML, like Gecko) Version/5.0 Safari/", version, applicationNameForUserAgent);
110 void WebPageProxy::getEditorCommandsForKeyEvent(Vector<WTF::String>& commandsList)
115 void WebPageProxy::saveRecentSearches(const String&, const Vector<String>&)
120 void WebPageProxy::loadRecentSearches(const String&, Vector<String>&)
125 void WebPageProxy::setThemePath(const String& themePath)
127 process()->send(Messages::WebPage::SetThemePath(themePath), m_pageID, 0);
130 #if ENABLE(TIZEN_CUSTOM_HEADERS)
131 void WebPageProxy::addCustomHeader(const String& name, const String& value)
142 process()->send(Messages::WebPage::AddCustomHeader(name, value), m_pageID);
145 void WebPageProxy::removeCustomHeader(const String& name)
153 process()->send(Messages::WebPage::RemoveCustomHeader(name), m_pageID);
156 void WebPageProxy::clearCustomHeaders()
161 process()->send(Messages::WebPage::ClearCustomHeaders(), m_pageID);
166 bool WebPageProxy::scrollMainFrameBy(const IntSize& scrollOffset)
168 #if ENABLE(TIZEN_WEBKIT2_TILED_BACKING_STORE)
169 return static_cast<PageClientImpl*>(m_pageClient)->scrollBy(scrollOffset);
174 process()->send(Messages::WebPage::ScrollMainFrameBy(scrollOffset), m_pageID);
179 void WebPageProxy::scrollMainFrameTo(const IntPoint& scrollPosition)
181 #if ENABLE(TIZEN_WEBKIT2_TILED_BACKING_STORE)
182 static_cast<PageClientImpl*>(m_pageClient)->scrollTo(scrollPosition);
187 process()->send(Messages::WebPage::ScrollMainFrameTo(scrollPosition), m_pageID);
191 void WebPageProxy::didChangeScrollPositionForMainFrame(const IntPoint& scrollPosition)
193 #if !ENABLE(TIZEN_WEBKIT2_TILED_BACKING_STORE)
194 m_scrollPosition = scrollPosition;
198 void WebPageProxy::didChangeContentsSize(const IntSize& size)
200 if (m_contentsSize == size)
203 m_contentsSize = size;
204 m_pageClient->didChangeContentsSize(size);
207 PassRefPtr<WebImage> WebPageProxy::createSnapshot(const IntRect& rect, float scaleFactor)
212 ShareableBitmap::Handle snapshotHandle;
213 // Do not wait for more than a second (arbitrary) for the WebProcess to get the snapshot so
214 // that the UI Process is not permanently stuck waiting on a potentially crashing Web Process.
215 static const double createSnapshotSyncMessageTimeout = 1.0;
216 #if ENABLE(TIZEN_WEBKIT2_TILED_BACKING_STORE)
217 float baseScaleFactor = static_cast<PageClientImpl*>(m_pageClient)->scaleFactor();
218 scaleFactor = scaleFactor * baseScaleFactor;
220 IntRect visibleContentRect = static_cast<PageClientImpl*>(m_pageClient)->visibleContentRect();
221 IntRect scaledRect = rect;
222 scaledRect.move(visibleContentRect.x(), visibleContentRect.y());
223 scaledRect.scale(1/baseScaleFactor);
224 process()->sendSync(Messages::WebPage::CreateSnapshot(scaledRect, scaleFactor), Messages::WebPage::CreateSnapshot::Reply(snapshotHandle), m_pageID, createSnapshotSyncMessageTimeout);
226 process()->sendSync(Messages::WebPage::CreateSnapshot(rect, scaleFactor), Messages::WebPage::CreateSnapshot::Reply(snapshotHandle), m_pageID, createSnapshotSyncMessageTimeout);
228 if (snapshotHandle.isNull())
230 return WebImage::create(ShareableBitmap::create(snapshotHandle));
233 #if ENABLE(TIZEN_WEBKIT2_FORM_DATABASE)
234 void WebPageProxy::textChangeInTextField(const String& name, const String& value)
236 static_cast<PageClientImpl*>(m_pageClient)->textChangeInTextField(name, value);
240 #if ENABLE(TIZEN_ISF_PORT)
241 int WebPageProxy::getCursorOffset()
247 process()->sendSync(Messages::WebPage::GetCursorOffset(), Messages::WebPage::GetCursorOffset::Reply(offset), m_pageID);
251 void WebPageProxy::getSurroundingTextAndCursorOffset(String& text, int& offset)
256 process()->sendSync(Messages::WebPage::GetSurroundingTextAndCursorOffset(), Messages::WebPage::GetSurroundingTextAndCursorOffset::Reply(text, offset), m_pageID);
259 IntRect WebPageProxy::getSelectionRect(bool isOnlyEditable)
262 process()->sendSync(Messages::WebPage::GetSelectionRect(isOnlyEditable), Messages::WebPage::GetSelectionRect::Reply(rect), m_pageID);
266 void WebPageProxy::deleteSurroundingText(int offset, int count)
271 process()->send(Messages::WebPage::DeleteSurroundingText(offset, count), m_pageID);
274 void WebPageProxy::didCancelComposition()
276 m_didCancelCompositionFromWebProcess = true;
277 InputMethodContextEfl* inputMethodContext = static_cast<PageClientImpl*>(m_pageClient)->viewImpl()->inputMethodContext();
278 if (inputMethodContext)
279 inputMethodContext->resetIMFContext();
280 m_didCancelCompositionFromWebProcess = false;
283 void WebPageProxy::removeInputMethodContext(uintptr_t id)
285 InputMethodContextEfl* inputMethodContext = static_cast<PageClientImpl*>(m_pageClient)->viewImpl()->inputMethodContext();
286 if (!inputMethodContext)
289 inputMethodContext->removeIMFContext(id);
291 #endif // #if ENABLE(TIZEN_ISF_PORT)
293 void WebPageProxy::requestUpdateFormNavigation()
298 process()->send(Messages::WebPage::RequestUpdateFormNavigation(), m_pageID);
301 void WebPageProxy::moveFocus(int newIndex)
306 process()->send(Messages::WebPage::MoveFocus(newIndex), m_pageID);
309 void WebPageProxy::updateFormNavigation(int length, int offset)
311 static_cast<PageClientImpl*>(m_pageClient)->updateFormNavigation(length, offset);
314 #if ENABLE(TIZEN_REDUCE_KEY_LAGGING)
315 Eina_Bool WebPageProxy::pageContentResumeTimerFired(void* data)
317 static_cast<WebPageProxy*>(data)->resumeActiveDOMObjectsAndAnimations();
318 static_cast<WebPageProxy*>(data)->m_pageContentResumeTimer = 0;
319 return ECORE_CALLBACK_CANCEL;
323 #if ENABLE(TIZEN_TEXT_CARET_HANDLING_WK2)
324 void WebPageProxy::setCaretPosition(const WebCore::IntPoint& pos)
329 process()->send(Messages::WebPage::SetCaretPosition(pos), m_pageID);
332 void WebPageProxy::getCaretPosition(WebCore::IntRect& rect)
337 process()->sendSync(Messages::WebPage::GetCaretPosition(), Messages::WebPage::GetCaretPosition::Reply(rect), m_pageID);
341 #if ENABLE(TIZEN_PLUGIN_CUSTOM_REQUEST)
342 void WebPageProxy::processPluginCustomRequest(const String& request, const String& msg)
344 if (String("requestKeyboard,plugin") == request) {
346 if (String("show") == msg)
348 #if ENABLE(TIZEN_ISF_PORT)
349 m_editorState = EditorState();
350 m_editorState.isContentEditable = active;
351 m_pageClient->updateTextInputState();
354 #if ENABLE(TIZEN_JSBRIDGE_PLUGIN)
355 else if (String("requestToNative,json") == request)
356 m_tizenClient.processJSBridgePlugin(this, request, msg);
362 #if ENABLE(TIZEN_INPUT_TAG_EXTENSION) || ENABLE(TIZEN_WEBKIT2_FORM_DATABASE)
363 void WebPageProxy::setFocusedInputElementValue(const String& inputValue)
368 process()->send(Messages::WebPage::SetFocusedInputElementValue(inputValue), m_pageID);
371 String WebPageProxy::getFocusedInputElementValue()
377 process()->sendSync(Messages::WebPage::GetFocusedInputElementValue(), Messages::WebPage::GetFocusedInputElementValue::Reply(inputValue), m_pageID);
382 #if ENABLE(TIZEN_DATALIST_ELEMENT)
383 Vector<String> WebPageProxy::getFocusedInputElementDataList()
386 return Vector<String>();
388 Vector<String> optionList;
389 process()->sendSync(Messages::WebPage::GetFocusedInputElementDataList(), Messages::WebPage::GetFocusedInputElementDataList::Reply(optionList), m_pageID);
394 void WebPageProxy::focusedNodeChanged(const IntRect& focusedNodeRect)
396 static_cast<PageClientImpl*>(m_pageClient)->setFocusedNodeRect(focusedNodeRect);
399 void WebPageProxy::initializeTizenClient(const WKPageTizenClient* client)
401 m_tizenClient.initialize(client);
404 #if ENABLE(TIZEN_WEBKIT2_HIT_TEST)
405 WebHitTestResult::Data WebPageProxy::hitTestResultAtPoint(const IntPoint& point, int hitTestMode)
407 WebHitTestResult::Data hitTestResultData;
409 return hitTestResultData;
411 process()->sendSync(Messages::WebPage::HitTestResultAtPoint(point, hitTestMode),
412 Messages::WebPage::HitTestResultAtPoint::Reply(hitTestResultData), m_pageID);
414 return hitTestResultData;
418 #if ENABLE(TIZEN_CONTEXT_MENU_WEBKIT_2)
419 void WebPageProxy::hideContextMenu()
421 if (m_activeContextMenu)
422 m_activeContextMenu->hideContextMenu();
425 String WebPageProxy::contextMenuAbsoluteLinkURLString()
427 if (!m_activeContextMenu)
430 return m_activeContextMenuHitTestResultData.absoluteLinkURL;
433 String WebPageProxy::contextMenuAbsoluteImageURLString()
435 if (!m_activeContextMenu)
438 return m_activeContextMenuHitTestResultData.absoluteImageURL;
442 #if ENABLE(TIZEN_WEBKIT2_CLIPBOARD_HELPER)
443 void WebPageProxy::pasteContextMenuSelected()
445 static_cast<PageClientImpl*>(m_pageClient)->pasteContextMenuSelected();
448 void WebPageProxy::didSelectPasteMenuFromContextMenu(const String& data, const String& type)
453 #if ENABLE(TIZEN_CLIPBOARD) || ENABLE(TIZEN_PASTEBOARD)
454 process()->send(Messages::WebPage::SetClipboardDataForPaste(data, type), m_pageID);
456 WebContextMenuItemData item(ActionType, ContextMenuItemTagPaste, String("Paste"), true, false);
457 process()->send(Messages::WebPage::DidSelectItemFromActiveContextMenu(item), m_pageID);
461 #if ENABLE(TIZEN_CLIPBOARD) || ENABLE(TIZEN_PASTEBOARD)
462 void WebPageProxy::setClipboardData(const String& data, const String& type)
464 static_cast<PageClientImpl*>(m_pageClient)->setClipboardData(data, type);
467 void WebPageProxy::clearClipboardData()
469 static_cast<PageClientImpl*>(m_pageClient)->clearClipboardData();
473 #if ENABLE(TIZEN_WEBKIT2_CONTEXT_MENU_CLIPBOARD)
474 void WebPageProxy::executePasteFromClipboardItem(const String& data, const String& type)
479 #if ENABLE(TIZEN_CLIPBOARD) || ENABLE(TIZEN_PASTEBOARD)
480 process()->send(Messages::WebPage::SetClipboardDataForPaste(data, type), m_pageID);
482 process()->send(Messages::WebPage::ExecuteEditCommandWithArgument("Paste", data), m_pageID);
485 void WebPageProxy::clipboardContextMenuSelected()
487 static_cast<PageClientImpl*>(m_pageClient)->clipboardContextMenuSelected();
491 #if ENABLE(TIZEN_REMOTE_WEB_INSPECTOR)
492 uint32_t WebPageProxy::startInspectorServer(uint32_t port)
497 uint32_t assignedPort = 0;
498 process()->sendSync(Messages::WebPage::StartInspectorServer(port), Messages::WebPage::StartInspectorServer::Reply(assignedPort), m_pageID);
502 bool WebPageProxy::stopInspectorServer()
508 process()->sendSync(Messages::WebPage::StopInspectorServer(), Messages::WebPage::StopInspectorServer::Reply(result), m_pageID);
513 #if ENABLE(TIZEN_MOBILE_WEB_PRINT)
514 void WebPageProxy::createPagesToPDF(const IntSize& surfaceSize, const IntSize& contentsSize, const String& fileName)
516 process()->send(Messages::WebPage::CreatePagesToPDF(surfaceSize, contentsSize, fileName), m_pageID);
520 #if ENABLE(TIZEN_WEB_STORAGE)
521 #if ENABLE(TIZEN_WEBKIT2_NUMBER_TYPE_SUPPORT)
522 void WebPageProxy::getWebStorageQuotaBytes(PassRefPtr<WebStorageQuotaCallback> prpCallback)
524 RefPtr<WebStorageQuotaCallback> callback = prpCallback;
526 callback->invalidate();
530 uint64_t callbackID = callback->callbackID();
531 m_quotaCallbacks.set(callbackID, callback.get());
532 process()->send(Messages::WebPage::GetStorageQuotaBytes(callbackID), m_pageID);
535 void WebPageProxy::didGetWebStorageQuotaBytes(const uint32_t quota, uint64_t callbackID)
537 RefPtr<WebStorageQuotaCallback> callback = m_quotaCallbacks.take(callbackID);
539 // FIXME: Log error or assert.
540 // this can validly happen if a load invalidated the callback, though
544 m_quotaCallbacks.remove(callbackID);
546 RefPtr<WebUInt32> uint32Object = WebUInt32::create(quota);
547 callback->performCallbackWithReturnValue(uint32Object.release().leakRef());
551 void WebPageProxy::setWebStorageQuotaBytes(uint32_t quota)
556 process()->send(Messages::WebPage::SetStorageQuotaBytes(quota), m_pageID, 0);
560 void WebPageProxy::scale(double scaleFactor, const IntPoint& origin)
562 #if ENABLE(TIZEN_WEBKIT2_TILED_BACKING_STORE)
563 static_cast<PageClientImpl*>(m_pageClient)->scaleContents(scaleFactor, origin);
565 scalePage(scaleFactor, origin);
569 void WebPageProxy::scaleImage(double scaleFactor, const IntPoint& origin)
571 #if ENABLE(TIZEN_WEBKIT2_TILED_BACKING_STORE)
572 static_cast<PageClientImpl*>(m_pageClient)->scaleImage(scaleFactor, origin);
574 scalePage(scaleFactor, origin);
578 double WebPageProxy::scaleFactor()
580 #if ENABLE(TIZEN_WEBKIT2_TILED_BACKING_STORE)
581 return static_cast<PageClientImpl*>(m_pageClient)->scaleFactor();
583 return pageScaleFactor();
587 #if ENABLE(TIZEN_ORIENTATION_EVENTS)
588 void WebPageProxy::sendOrientationChangeEvent(int orientation)
590 process()->send(Messages::WebPage::SendOrientationChangeEvent(orientation), m_pageID, 0);
594 void WebPageProxy::suspendPainting()
599 process()->send(Messages::DrawingArea::SuspendPainting(), m_pageID);
602 void WebPageProxy::resumePainting()
607 process()->send(Messages::DrawingArea::ResumePainting(), m_pageID);
610 void WebPageProxy::suspendJavaScriptAndResource()
615 process()->send(Messages::WebPage::SuspendJavaScriptAndResources(), m_pageID);
618 void WebPageProxy::resumeJavaScriptAndResource()
623 process()->send(Messages::WebPage::ResumeJavaScriptAndResources(), m_pageID);
626 void WebPageProxy::suspendAnimations()
631 process()->send(Messages::WebPage::SuspendAnimations(), m_pageID);
634 void WebPageProxy::resumeAnimations()
639 process()->send(Messages::WebPage::ResumeAnimations(), m_pageID);
642 #if ENABLE(TIZEN_PLUGIN_SUSPEND_RESUME)
643 void WebPageProxy::suspendPlugin()
648 process()->send(Messages::WebPage::SuspendPlugin(), m_pageID);
651 void WebPageProxy::resumePlugin()
656 process()->send(Messages::WebPage::ResumePlugin(), m_pageID);
660 #if ENABLE(TIZEN_WEBKIT2_TILED_AC)
661 void WebPageProxy::purgeBackingStoresOfInactiveView()
663 if (!isValid() || isViewVisible())
666 process()->send(Messages::LayerTreeCoordinator::PurgeBackingStores(), m_pageID);
670 #if ENABLE(TIZEN_CSS_OVERFLOW_SCROLL_ACCELERATION)
671 bool WebPageProxy::scrollOverflow(const FloatPoint& offset)
676 #if ENABLE(TIZEN_CSS_OVERFLOW_SCROLL_ACCELERATION_ON_UI_SIDE)
677 if (static_cast<PageClientImpl*>(m_pageClient)->isScrollableLayerFocused())
678 return drawingArea()->layerTreeCoordinatorProxy()->setOffsetForFocusedScrollingContentsLayer(offset);
680 if (static_cast<PageClientImpl*>(m_pageClient)->isScrollableNodeFocused()) {
681 bool scrolled = false;
682 process()->sendSync(Messages::WebPage::ScrollOverflow(offset), Messages::WebPage::ScrollOverflow::Reply(scrolled), m_pageID);
689 bool WebPageProxy::setPressedNodeAtPoint(const IntPoint& point, bool checkOverflowLayer, WebLayerID& webLayerID)
694 bool pressed = false;
695 process()->sendSync(Messages::WebPage::SetPressedNodeAtPoint(point, checkOverflowLayer), Messages::WebPage::SetPressedNodeAtPoint::Reply(pressed, webLayerID), m_pageID);
700 void WebPageProxy::setOverflowResult(bool pressed, uint32_t webLayerID)
702 static_cast<PageClientImpl*>(m_pageClient)->setOverflowResult(pressed, webLayerID);
706 void WebPageProxy::executeEditCommandWithArgument(const String& commandName, const String& argument)
711 DEFINE_STATIC_LOCAL(String, ignoreSpellingCommandName, ("ignoreSpelling"));
712 if (commandName == ignoreSpellingCommandName)
713 ++m_pendingLearnOrIgnoreWordMessageCount;
715 process()->send(Messages::WebPage::ExecuteEditCommandWithArgument(commandName, argument), m_pageID);
718 void WebPageProxy::replyJavaScriptAlert()
723 m_alertReply->send();
724 m_alertReply = nullptr;
725 #if ENABLE(TIZEN_WEBKIT2_NOTIFY_POPUP_REPLY_STATUS)
726 m_uiClient.notifyPopupReplyWaitingState(this, false);
728 #if ENABLE(TIZEN_WEBKIT2_ROTATION_WHILE_JAVASCRIPT_POPUP)
729 process()->connection()->setForcelySetAllAsyncMessagesToDispatchEvenWhenWaitingForSyncReply(false);
733 void WebPageProxy::replyJavaScriptConfirm(bool result)
738 m_confirmReply->send(result);
739 m_confirmReply = nullptr;
740 #if ENABLE(TIZEN_WEBKIT2_NOTIFY_POPUP_REPLY_STATUS)
741 m_uiClient.notifyPopupReplyWaitingState(this, false);
743 #if ENABLE(TIZEN_WEBKIT2_ROTATION_WHILE_JAVASCRIPT_POPUP)
744 process()->connection()->setForcelySetAllAsyncMessagesToDispatchEvenWhenWaitingForSyncReply(false);
748 void WebPageProxy::replyJavaScriptPrompt(const String& result)
753 m_promptReply->send(result);
754 m_promptReply = nullptr;
755 #if ENABLE(TIZEN_WEBKIT2_NOTIFY_POPUP_REPLY_STATUS)
756 m_uiClient.notifyPopupReplyWaitingState(this, false);
758 #if ENABLE(TIZEN_WEBKIT2_ROTATION_WHILE_JAVASCRIPT_POPUP)
759 process()->connection()->setForcelySetAllAsyncMessagesToDispatchEvenWhenWaitingForSyncReply(false);
763 #if ENABLE(TIZEN_SUPPORT_BEFORE_UNLOAD_CONFIRM_PANEL)
764 void WebPageProxy::replyBeforeUnloadConfirmPanel(bool result)
766 if (!m_beforeUnloadConfirmPanelReply)
769 m_beforeUnloadConfirmPanelReply->send(result);
770 m_beforeUnloadConfirmPanelReply = nullptr;
771 #if ENABLE(TIZEN_WEBKIT2_ROTATION_WHILE_JAVASCRIPT_POPUP)
772 process()->connection()->setForcelySetAllAsyncMessagesToDispatchEvenWhenWaitingForSyncReply(false);
777 #if ENABLE(TIZEN_ON_AUTHENTICATION_REQUESTED)
778 void WebPageProxy::replyReceiveAuthenticationChallengeInFrame(bool result)
783 m_AuthReply->send(result);
784 m_AuthReply = nullptr;
788 #if ENABLE(TIZEN_CERTIFICATE_HANDLING)
789 void WebPageProxy::replyPolicyForCertificateError(bool result)
794 m_allowedReply->send(result);
795 m_allowedReply = nullptr;
799 #if PLUGIN_ARCHITECTURE(X11)
800 void WebPageProxy::createPluginContainer(uint64_t& windowID)
805 void WebPageProxy::windowedPluginGeometryDidChange(const WebCore::IntRect& frameRect, const WebCore::IntRect& clipRect, uint64_t windowID)
811 void WebPageProxy::didRenderFrame()
813 static_cast<PageClientImpl*>(m_pageClient)->didRenderFrame();
816 void WebPageProxy::setBackgroundColor(double red, double green, double blue, double alpha)
818 static_cast<PageClientImpl*>(m_pageClient)->setBackgroundColor(red, green, blue, alpha);
821 #if ENABLE(TIZEN_WEBKIT2_TILED_AC)
822 bool WebPageProxy::makeContextCurrent()
824 return static_cast<PageClientImpl*>(m_pageClient)->makeContextCurrent();
828 #if ENABLE(TIZEN_ICON_DATABASE)
829 void WebPageProxy::didReceiveIcon()
831 static_cast<PageClientImpl*>(m_pageClient)->didReceiveIcon();
835 #if ENABLE(TIZEN_MULTIPLE_SELECT)
836 void WebPageProxy::valueChangedForPopupMenuMultiple(WebPopupMenuProxy*, Vector<int32_t> newSelectedIndex)
838 process()->send(Messages::WebPage::DidChangeSelectedIndexForActivePopupMenuMultiple(newSelectedIndex), m_pageID);
842 #if ENABLE(TIZEN_WEBKIT2_HISTORICAL_RESTORE_VISIBLE_CONTENT_RECT)
843 void WebPageProxy::pageDidRequestRestoreVisibleContentRect(const IntPoint& point, float scale)
845 m_pageClient->pageDidRequestRestoreVisibleContentRect(point, scale);
849 #if ENABLE(TIZEN_OFFLINE_PAGE_SAVE)
850 void WebPageProxy::saveSerializedHTMLDataForMainPage(const String& serializedData, const String& fileName)
852 static_cast<PageClientImpl*>(m_pageClient)->saveSerializedHTMLDataForMainPage(serializedData, fileName);
855 void WebPageProxy::saveSubresourcesData(Vector<WebSubresourceTizen> subresourceData)
857 static_cast<PageClientImpl*>(m_pageClient)->saveSubresourcesData(subresourceData);
860 void WebPageProxy::startOfflinePageSave(String subresourceFolderName)
865 process()->send(Messages::WebPage::StartOfflinePageSave(subresourceFolderName), m_pageID);
869 #if ENABLE(TIZEN_WEBKIT2_TEXT_SELECTION)
870 bool WebPageProxy::selectClosestWord(const IntPoint& point, bool isStartedTextSelectionFromOutside)
876 process()->sendSync(Messages::WebPage::SelectClosestWord(point, isStartedTextSelectionFromOutside), Messages::WebPage::SelectClosestWord::Reply(result), m_pageID);
880 bool WebPageProxy::setLeftSelection(const IntPoint& point)
886 process()->sendSync(Messages::WebPage::SetLeftSelection(point), Messages::WebPage::SetLeftSelection::Reply(result), m_pageID);
890 bool WebPageProxy::setRightSelection(const IntPoint& point)
896 process()->sendSync(Messages::WebPage::SetRightSelection(point), Messages::WebPage::SetRightSelection::Reply(result), m_pageID);
900 bool WebPageProxy::getSelectionHandlers(IntRect& leftRect, IntRect& rightRect)
906 process()->sendSync(Messages::WebPage::GetSelectionHandlers(), Messages::WebPage::GetSelectionHandlers::Reply(leftRect, rightRect), m_pageID);
907 if (!leftRect.size().isZero() || !rightRect.size().isZero())
913 String WebPageProxy::getSelectionText()
919 process()->sendSync(Messages::WebPage::GetSelectionText(), Messages::WebPage::GetSelectionText::Reply(ret), m_pageID);
923 bool WebPageProxy::selectionRangeClear()
929 process()->sendSync(Messages::WebPage::SelectionRangeClear(), Messages::WebPage::SelectionRangeClear::Reply(result), m_pageID);
933 bool WebPageProxy::scrollContentByCharacter(const IntPoint& point, SelectionDirection direction)
939 process()->sendSync(Messages::WebPage::ScrollContentByCharacter(point, direction), Messages::WebPage::ScrollContentByCharacter::Reply(result), m_pageID);
943 bool WebPageProxy::scrollContentByLine(const IntPoint& point, SelectionDirection direction)
949 process()->sendSync(Messages::WebPage::ScrollContentByLine(point, direction), Messages::WebPage::ScrollContentByLine::Reply(result), m_pageID);
954 #if ENABLE(TIZEN_LINK_MAGNIFIER)
955 void WebPageProxy::getLinkMagnifierRect(const WebCore::IntPoint& position, const WebCore::IntSize& size)
957 process()->send(Messages::WebPage::GetLinkMagnifierRect(position, size), m_pageID);
960 void WebPageProxy::didGetLinkMagnifierRect(const IntPoint& position, const IntRect& rect)
963 LinkMagnifierProxy::linkMagnifier().show(EwkViewImpl::fromEvasObject(viewWidget()), position, rect);
968 void WebPageProxy::openLink(const IntPoint& position)
970 #if ENABLE(GESTURE_EVENTS)
971 IntPoint globalPosition(EwkViewImpl::fromEvasObject(viewWidget())->transformToScreen().mapPoint(position));
972 WebGestureEvent gesture(WebEvent::GestureSingleTap, position, globalPosition, WebEvent::Modifiers(0), ecore_time_get());
973 handleGestureEvent(gesture);
978 #if ENABLE(TIZEN_SCREEN_READER)
979 void WebPageProxy::raiseTapEvent(const IntPoint& position)
981 #if ENABLE(GESTURE_EVENTS)
982 IntPoint globalPosition = EwkViewImpl::fromEvasObject(viewWidget())->transformToScreen().mapPoint(position);
983 process()->send(Messages::WebPage::RaiseTapEvent(position, globalPosition), m_pageID);
985 UNUSED_PARAM(position);
989 bool WebPageProxy::moveScreenReaderFocus(bool forward)
992 process()->sendSync(Messages::WebPage::MoveScreenReaderFocus(forward), Messages::WebPage::MoveScreenReaderFocus::Reply(result), m_pageID);
996 void WebPageProxy::moveScreenReaderFocusByPoint(const IntPoint& point)
998 process()->send(Messages::WebPage::MoveScreenReaderFocusByPoint(point), m_pageID);
1001 void WebPageProxy::recalcScreenReaderFocusRect()
1003 if (!ScreenReaderProxy::screenReader().isEnabled())
1006 process()->send(Messages::WebPage::RecalcScreenReaderFocusRect(), m_pageID);
1009 void WebPageProxy::clearScreenReader()
1011 process()->send(Messages::WebPage::ClearScreenReader(), m_pageID);
1014 void WebPageProxy::didScreenReaderFocusRectChanged(const IntRect& rect)
1016 #if ENABLE(TIZEN_WEBKIT2_FOCUS_RING)
1017 FocusRing* focusRing = ewkViewGetFocusRing(viewWidget());
1021 if (!rect.isEmpty())
1022 focusRing->show(rect);
1024 focusRing->hide(false);
1030 void WebPageProxy::didScreenReaderTextChanged(const String& text)
1032 ScreenReaderProxy::screenReader().setText(text);
1036 #if ENABLE(TIZEN_CSP)
1037 void WebPageProxy::setContentSecurityPolicy(const String& policy, WebCore::ContentSecurityPolicy::HeaderType type)
1039 process()->send(Messages::WebPage::SetContentSecurityPolicy(policy, type), m_pageID);
1043 #if ENABLE(TIZEN_APPLICATION_CACHE)
1044 void WebPageProxy::requestApplicationCachePermission(uint64_t frameID, const String& originIdentifier, PassRefPtr<Messages::WebPageProxy::RequestApplicationCachePermission::DelayedReply> allow)
1046 WebFrameProxy* frame = process()->webFrame(frameID);
1047 MESSAGE_CHECK(frame);
1049 // Since requestApplicationCachePermission() can spin a nested run loop we need to turn off the responsiveness timer.
1050 process()->responsivenessTimer()->stop();
1052 m_applicationCacheReply = allow;
1053 #if ENABLE(TIZEN_WEBKIT2_ROTATION_WHILE_JAVASCRIPT_POPUP)
1054 process()->connection()->setForcelySetAllAsyncMessagesToDispatchEvenWhenWaitingForSyncReply(true);
1056 RefPtr<WebSecurityOrigin> origin = WebSecurityOrigin::createFromDatabaseIdentifier(originIdentifier);
1058 if (!m_tizenClient.decidePolicyForApplicationCachePermissionRequest(this, origin.get(), frame))
1059 replyApplicationCachePermission(true);
1062 void WebPageProxy::replyApplicationCachePermission(bool allow)
1064 if (!m_applicationCacheReply)
1067 m_applicationCacheReply->send(allow);
1068 m_applicationCacheReply = nullptr;
1069 #if ENABLE(TIZEN_WEBKIT2_ROTATION_WHILE_JAVASCRIPT_POPUP)
1070 process()->connection()->setForcelySetAllAsyncMessagesToDispatchEvenWhenWaitingForSyncReply(false);
1075 #if ENABLE(TIZEN_INDEXED_DATABASE)
1076 void WebPageProxy::exceededIndexedDatabaseQuota(uint64_t frameID, const String& originIdentifier, int64_t currentUsage, PassRefPtr<Messages::WebPageProxy::ExceededIndexedDatabaseQuota::DelayedReply> reply)
1078 WebFrameProxy* frame = process()->webFrame(frameID);
1079 MESSAGE_CHECK(frame);
1081 // Since exceededIndexedDatabaseQuota() can spin a nested run loop we need to turn off the responsiveness timer.
1082 process()->responsivenessTimer()->stop();
1084 m_exceededIndexedDatabaseQuotaReply = reply;
1085 #if ENABLE(TIZEN_WEBKIT2_ROTATION_WHILE_JAVASCRIPT_POPUP)
1086 process()->connection()->setForcelySetAllAsyncMessagesToDispatchEvenWhenWaitingForSyncReply(true);
1089 RefPtr<WebSecurityOrigin> origin = WebSecurityOrigin::createFromDatabaseIdentifier(originIdentifier);
1091 if (!m_tizenClient.exceededIndexedDatabaseQuota(this, origin.get(), currentUsage, frame))
1092 replyExceededIndexedDatabaseQuota(false);
1095 void WebPageProxy::replyExceededIndexedDatabaseQuota(bool allow)
1097 if (!m_exceededIndexedDatabaseQuotaReply)
1100 m_exceededIndexedDatabaseQuotaReply->send(allow);
1101 m_exceededIndexedDatabaseQuotaReply = nullptr;
1102 #if ENABLE(TIZEN_WEBKIT2_ROTATION_WHILE_JAVASCRIPT_POPUP)
1103 process()->connection()->setForcelySetAllAsyncMessagesToDispatchEvenWhenWaitingForSyncReply(false);
1108 #if ENABLE(TIZEN_SQL_DATABASE)
1109 void WebPageProxy::replyExceededDatabaseQuota(bool allow)
1111 if (!m_exceededDatabaseQuotaReply) {
1112 TIZEN_LOGE("m_exceededDatabaseQuotaReply does not exist");
1116 m_exceededDatabaseQuotaReply->send(allow);
1117 m_exceededDatabaseQuotaReply = nullptr;
1118 #if ENABLE(TIZEN_WEBKIT2_ROTATION_WHILE_JAVASCRIPT_POPUP)
1119 process()->connection()->setForcelySetAllAsyncMessagesToDispatchEvenWhenWaitingForSyncReply(false);
1124 #if ENABLE(TIZEN_FILE_SYSTEM)
1125 void WebPageProxy::exceededLocalFileSystemQuota(uint64_t frameID, const String& originIdentifier, int64_t currentUsage, PassRefPtr<Messages::WebPageProxy::ExceededLocalFileSystemQuota::DelayedReply> reply)
1127 WebFrameProxy* frame = process()->webFrame(frameID);
1128 MESSAGE_CHECK(frame);
1130 // Since exceededLocalFileSystemQuota() can spin a nested run loop we need to turn off the responsiveness timer.
1131 process()->responsivenessTimer()->stop();
1132 m_exceededLocalFileSystemQuotaReply = reply;
1133 #if ENABLE(TIZEN_WEBKIT2_ROTATION_WHILE_JAVASCRIPT_POPUP)
1134 process()->connection()->setForcelySetAllAsyncMessagesToDispatchEvenWhenWaitingForSyncReply(true);
1137 RefPtr<WebSecurityOrigin> origin = WebSecurityOrigin::createFromDatabaseIdentifier(originIdentifier);
1139 if (!m_tizenClient.exceededLocalFileSystemQuota(this, origin.get(), currentUsage, frame))
1140 replyExceededLocalFileSystemQuota(false);
1143 void WebPageProxy::replyExceededLocalFileSystemQuota(bool allow)
1145 if (!m_exceededLocalFileSystemQuotaReply)
1148 m_exceededLocalFileSystemQuotaReply->send(allow);
1149 m_exceededLocalFileSystemQuotaReply = nullptr;
1150 #if ENABLE(TIZEN_WEBKIT2_ROTATION_WHILE_JAVASCRIPT_POPUP)
1151 process()->connection()->setForcelySetAllAsyncMessagesToDispatchEvenWhenWaitingForSyncReply(false);
1156 #endif // #if OS(TIZEN)
1158 void WebPageProxy::handleInputMethodKeydown(bool& handled)
1160 #if ENABLE(TIZEN_WEBKIT2_ROTATION_WHILE_JAVASCRIPT_POPUP)
1161 handled = m_keyEventQueue.first().forwardedEvent.isFiltered();
1163 handled = m_keyEventQueue.first().isFiltered();
1167 void WebPageProxy::confirmComposition(const String& compositionString)
1172 #if ENABLE(TIZEN_ISF_PORT)
1173 if (m_didCancelCompositionFromWebProcess)
1177 process()->send(Messages::WebPage::ConfirmComposition(compositionString), m_pageID, 0);
1180 void WebPageProxy::setComposition(const String& compositionString, Vector<WebCore::CompositionUnderline>& underlines, int cursorPosition)
1185 #if ENABLE(TIZEN_REDUCE_KEY_LAGGING)
1186 // Suspend layout&paint at the key input, and resume layout&paint after 150 ms.
1187 suspendActiveDOMObjectsAndAnimations();
1188 if (m_pageContentResumeTimer)
1189 ecore_timer_del(m_pageContentResumeTimer);
1190 m_pageContentResumeTimer = ecore_timer_add(150.0/1000.0, pageContentResumeTimerFired, this);
1193 process()->send(Messages::WebPage::SetComposition(compositionString, underlines, cursorPosition), m_pageID, 0);
1196 void WebPageProxy::cancelComposition()
1201 process()->send(Messages::WebPage::CancelComposition(), m_pageID, 0);
1204 #if ENABLE(TIZEN_USE_SETTINGS_FONT)
1205 void WebPageProxy::useSettingsFont()
1207 process()->send(Messages::WebPage::UseSettingsFont(), m_pageID, 0);
1211 #if ENABLE(TIZEN_WEBKIT2_NOTIFY_SUSPEND_BY_REMOTE_WEB_INSPECTOR)
1212 void WebPageProxy::setContentSuspendedByInspector(bool isSuspended)
1214 m_contentSuspendedByInspector = isSuspended;
1218 } // namespace WebKit