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 "NotImplemented.h"
30 #include "PageClientImpl.h"
32 #include <sys/utsname.h>
35 #if ENABLE(TIZEN_CSS_OVERFLOW_SCROLL_ACCELERATION_ON_UI_SIDE)
36 #include "LayerTreeHostProxy.h"
38 #include "NativeWebKeyboardEvent.h"
40 #include "WebPageMessages.h"
41 #include "WebProcessProxy.h"
42 #include <WebCore/IntSize.h>
43 #if ENABLE(TIZEN_SUPPORT_RSS_LINK_PARSING)
44 #include "WKPageTizen.h"
46 #if ENABLE(TIZEN_CONTEXT_MENU_WEBKIT_2)
47 #include "WebContextMenuProxy.h"
49 #if ENABLE(TIZEN_READER)
50 #include "MutableDictionary.h"
53 using namespace WebCore;
58 Evas_Object* WebPageProxy::viewWidget()
60 return static_cast<PageClientImpl*>(m_pageClient)->viewWidget();
63 String WebPageProxy::standardUserAgent(const String& applicationNameForUserAgent)
67 WTF::String osVersion;
74 version = makeString(String::number(WEBKIT_USER_AGENT_MAJOR_VERSION), '.',
75 String::number(WEBKIT_USER_AGENT_MINOR_VERSION), '+');
77 if (uname(&name) != -1)
78 osVersion = WTF::String(name.sysname) + " " + WTF::String(name.machine);
80 osVersion = "Unknown";
82 if (applicationNameForUserAgent.isEmpty())
83 return makeString("Mozilla/5.0 (", platform, "; ", osVersion, ") AppleWebKit/", version,
84 " (KHTML, like Gecko) Version/5.0 Safari/", version);
86 return makeString("Mozilla/5.0 (", platform, "; ", osVersion, ") AppleWebKit/", version,
87 " (KHTML, like Gecko) Version/5.0 Safari/", version, applicationNameForUserAgent);
90 void WebPageProxy::getEditorCommandsForKeyEvent(Vector<WTF::String>& commandsList)
95 void WebPageProxy::saveRecentSearches(const String&, const Vector<String>&)
100 void WebPageProxy::loadRecentSearches(const String&, Vector<String>&)
105 #if ENABLE(TIZEN_CUSTOM_HEADERS)
106 void WebPageProxy::addCustomHeader(const String& name, const String& value)
116 process()->send(Messages::WebPage::AddCustomHeader(name, value), m_pageID);
122 bool WebPageProxy::scrollMainFrameBy(const IntSize& scrollOffset)
124 #if ENABLE(TIZEN_WEBKIT2_TILED_BACKING_STORE)
125 return static_cast<PageClientImpl*>(m_pageClient)->scrollBy(scrollOffset);
130 process()->send(Messages::WebPage::ScrollMainFrameBy(scrollOffset), m_pageID);
135 void WebPageProxy::scrollMainFrameTo(const IntPoint& scrollPosition)
137 #if ENABLE(TIZEN_WEBKIT2_TILED_BACKING_STORE)
138 static_cast<PageClientImpl*>(m_pageClient)->scrollTo(scrollPosition);
143 process()->send(Messages::WebPage::ScrollMainFrameTo(scrollPosition), m_pageID);
147 void WebPageProxy::didChangeScrollPositionForMainFrame(const IntPoint& scrollPosition)
149 #if !ENABLE(TIZEN_WEBKIT2_TILED_BACKING_STORE)
150 m_scrollPosition = scrollPosition;
154 void WebPageProxy::didChangeContentsSize(const IntSize& size)
156 m_contentsSize = size;
157 m_pageClient->didChangeContentsSize(size);
160 PassRefPtr<WebImage> WebPageProxy::createSnapshot(const IntRect& rect, float scaleFactor)
165 ShareableBitmap::Handle snapshotHandle;
166 // Do not wait for more than a second (arbitrary) for the WebProcess to get the snapshot so
167 // that the UI Process is not permanently stuck waiting on a potentially crashing Web Process.
168 static const double createSnapshotSyncMessageTimeout = 1.0;
169 #if ENABLE(TIZEN_WEBKIT2_TILED_BACKING_STORE)
170 float baseScaleFactor = static_cast<PageClientImpl*>(m_pageClient)->scaleFactor();
171 scaleFactor = scaleFactor * baseScaleFactor;
172 IntPoint scrollPosition = static_cast<PageClientImpl*>(m_pageClient)->scrollPosition();
173 IntRect scaledRect = rect;
174 scaledRect.move(scrollPosition.x(), scrollPosition.y());
175 scaledRect.scale(1/baseScaleFactor);
176 process()->sendSync(Messages::WebPage::CreateSnapshot(scaledRect, scaleFactor), Messages::WebPage::CreateSnapshot::Reply(snapshotHandle), m_pageID, createSnapshotSyncMessageTimeout);
178 process()->sendSync(Messages::WebPage::CreateSnapshot(rect, scaleFactor), Messages::WebPage::CreateSnapshot::Reply(snapshotHandle), m_pageID, createSnapshotSyncMessageTimeout);
180 if (snapshotHandle.isNull())
182 return WebImage::create(ShareableBitmap::create(snapshotHandle));
185 #if ENABLE(TIZEN_INPUT_TAG_EXTENSION)
186 void WebPageProxy::setInputMethodState(bool active, const AtomicString& inputType, const String& inputValue)
188 static_cast<PageClientImpl*>(m_pageClient)->setInputMethodState(active, inputType, inputValue);
191 void WebPageProxy::setInputMethodState(bool active)
193 //FIXME : it should be contributable
194 static_cast<PageClientImpl*>(m_pageClient)->setInputMethodState(active);
198 #if ENABLE(TIZEN_ISF_PORT)
199 void WebPageProxy::handleInputMethodMouseRelease()
201 static_cast<PageClientImpl*>(m_pageClient)->handleInputMethodMouseRelease();
204 void WebPageProxy::updateCursorPosition()
206 static_cast<PageClientImpl*>(m_pageClient)->setCursorPosition();
209 int WebPageProxy::getCursorOffsetPosition()
215 process()->sendSync(Messages::WebPage::GetCursorOffsetPosition(), Messages::WebPage::GetCursorOffsetPosition::Reply(offset), m_pageID);
219 String WebPageProxy::getContentOfPosition()
225 process()->sendSync(Messages::WebPage::GetContentOfPosition(), Messages::WebPage::GetContentOfPosition::Reply(content), m_pageID);
229 bool WebPageProxy::deleteSurroundingPosition()
235 process()->sendSync(Messages::WebPage::DeleteSurroundingPosition(), Messages::WebPage::DeleteSurroundingPosition::Reply(result), m_pageID);
239 void WebPageProxy::getInputMethodState(bool& state)
241 state = static_cast<PageClientImpl*>(m_pageClient)->getInputMethodState();
244 void WebPageProxy::handleInputMethodForFocusedNode()
249 process()->send(Messages::WebPage::HandleInputMethodForFocusedNode(), m_pageID);
253 void WebPageProxy::requestUpdateFormNavigation()
258 process()->send(Messages::WebPage::RequestUpdateFormNavigation(), m_pageID);
261 void WebPageProxy::moveFocus(int newIndex)
266 process()->send(Messages::WebPage::MoveFocus(newIndex), m_pageID);
269 void WebPageProxy::updateFormNavigation(int length, int offset)
271 static_cast<PageClientImpl*>(m_pageClient)->updateFormNavigation(length, offset);
274 void WebPageProxy::handleInputMethodKeydown(bool& handled)
276 static_cast<PageClientImpl*>(m_pageClient)->handleInputMethodKeydown();
278 #if ENABLE(TIZEN_ISF_PORT)
279 NativeWebKeyboardEvent event = m_keyEventQueue.first();
280 handled = event.isFiltered();
284 void WebPageProxy::confirmComposition(const String& compositionString)
289 process()->send(Messages::WebPage::ConfirmComposition(compositionString), m_pageID);
292 void WebPageProxy::setComposition(const String& compositionString, Vector<CompositionUnderline>& underlines, int cursorPosition)
297 process()->send(Messages::WebPage::SetComposition(compositionString, underlines, cursorPosition), m_pageID);
299 #if ENABLE(TIZEN_TEXT_CARET_HANDLING_WK2)
300 void WebPageProxy::setCaretPosition(const WebCore::IntPoint& pos)
305 process()->send(Messages::WebPage::SetCaretPosition(pos), m_pageID);
308 void WebPageProxy::getCaretPosition(WebCore::IntRect& rect)
313 process()->sendSync(Messages::WebPage::GetCaretPosition(), Messages::WebPage::GetCaretPosition::Reply(rect), m_pageID);
316 #if ENABLE(TIZEN_MM_PLAYER)
317 void WebPageProxy::processHTML5Video(const String& url, const String& cookie)
319 m_tizenClient.processHTML5Video(this, url, cookie);
323 #if ENABLE(TIZEN_PLUGIN_CUSTOM_REQUEST)
324 void WebPageProxy::processPluginCustomRequest(const String& request, const String& msg)
326 if (String("requestKeyboard,plugin") == request) {
328 if (String("show") == msg)
330 #if ENABLE(TIZEN_INPUT_TAG_EXTENSION)
331 AtomicString inputType;
332 WTF::String inputValue;
333 setInputMethodState(active, inputType,inputValue);
335 setInputMethodState(active);
337 // plugin does not use preedit.
338 if (active && static_cast<PageClientImpl*>(m_pageClient)->getIMFContext())
339 ecore_imf_context_prediction_allow_set(static_cast<PageClientImpl*>(m_pageClient)->getIMFContext(), false);
341 #if ENABLE(TIZEN_JSBRIDGE_PLUGIN)
342 else if (String("requestToNative,json") == request)
343 m_tizenClient.processJSBridgePlugin(this, request, msg);
349 #if ENABLE(TIZEN_INPUT_TAG_EXTENSION)
350 void WebPageProxy::setFocusedInputElementValue(const String& inputValue)
355 process()->send(Messages::WebPage::SetFocusedInputElementValue(inputValue), m_pageID);
358 String WebPageProxy::getFocusedInputElementValue()
364 process()->sendSync(Messages::WebPage::GetFocusedInputElementValue(), Messages::WebPage::GetFocusedInputElementValue::Reply(inputValue), m_pageID);
369 void WebPageProxy::focusedNodeChanged(const IntRect& focusedNodeRect)
371 static_cast<PageClientImpl*>(m_pageClient)->setFocusedNodeRect(focusedNodeRect);
374 #if ENABLE(TIZEN_WEBKIT2_TILED_SCROLLBAR)
375 void WebPageProxy::updateScrollbar(const IntPoint& scrollPosition)
377 static_cast<PageClientImpl*>(m_pageClient)->updateScrollbar(scrollPosition);
381 #if ENABLE(TIZEN_READER)
382 void WebPageProxy::checkPageForReader(PassRefPtr<DictionaryCallback> prpCallback)
384 RefPtr<DictionaryCallback> callback = prpCallback;
386 callback->invalidate();
390 uint64_t callbackID = callback->callbackID();
391 m_dictionaryCallbacks.set(callbackID, callback.get());
392 process()->send(Messages::WebPage::CheckPageForReader(callbackID), m_pageID);
395 void WebPageProxy::showReaderForArticle(const String& readerUrl, const String& readerHtml, uint64_t callbackID)
397 RefPtr<DictionaryCallback> callback = m_dictionaryCallbacks.take(callbackID);
401 if (readerHtml.isEmpty()) {
402 callback->performCallbackWithReturnValue(0);
406 RefPtr<MutableDictionary> readerData = MutableDictionary::create();
407 readerData->set("url", RefPtr<WebString>(WebString::create(readerUrl)).get());
408 readerData->set("html", RefPtr<WebString>(WebString::create(readerHtml)).get());
409 callback->performCallbackWithReturnValue(readerData.get());
413 void WebPageProxy::initializeTizenClient(const WKPageTizenClient* client)
415 m_tizenClient.initialize(client);
418 #if ENABLE(TIZEN_WEBKIT2_HIT_TEST)
419 WebHitTestResult::Data WebPageProxy::hitTestResultAtPoint(const IntPoint& point, int hitTestMode)
421 WebHitTestResult::Data hitTestResultData;
423 return hitTestResultData;
425 process()->sendSync(Messages::WebPage::HitTestResultAtPoint(point, hitTestMode),
426 Messages::WebPage::HitTestResultAtPoint::Reply(hitTestResultData), m_pageID);
428 return hitTestResultData;
432 #if ENABLE(TIZEN_SUPPORT_RSS_LINK_PARSING)
433 void WebPageProxy::getRssItems(PassRefPtr<RssCallback> prpCallback)
435 RefPtr<RssCallback> callback = prpCallback;
437 callback->invalidate();
441 uint64_t callbackID = callback->callbackID();
442 m_rssCallbacks.set(callbackID, callback.get());
443 process()->send(Messages::WebPage::GetRssItems(callbackID), m_pageID);
446 void WebPageProxy::getRssItemsCallback(const Vector<WebKit::RssItemEfl>& rssItems, uint64_t callbackID)
448 RefPtr<RssCallback> callback = m_rssCallbacks.take(callbackID);
450 // FIXME: Log error or assert.
454 // Convert Vector<WebKit::RssItemEfl> to Eina_List which has WKRssItemEfl.
455 Eina_List* retList = 0;
456 for (size_t i = 0; i < rssItems.size(); ++i)
458 WKRssItemEfl* rssItem = static_cast<WKRssItemEfl*>(malloc(sizeof(WKRssItemEfl)));
459 rssItem->type = static_cast<LinkTypeEfl>(rssItems[i].type());
460 if (!rssItems[i].href().isEmpty())
461 rssItem->href = strdup(rssItems[i].href().utf8().data());
464 if (!rssItems[i].title().isEmpty())
465 rssItem->title = strdup(rssItems[i].title().utf8().data());
468 retList = eina_list_append(retList, rssItem);
471 callback->performCallbackWithReturnValue(retList);
475 EINA_LIST_FREE(retList, data) {
477 WKRssItemEfl* rssItem = static_cast<WKRssItemEfl*>(data);
479 free(const_cast<char*>(rssItem->href));
481 free(const_cast<char*>(rssItem->title));
486 #endif // #if ENABLE(TIZEN_SUPPORT_RSS_LINK_PARSING)
488 #if ENABLE(TIZEN_RECORDING_SURFACE_SET)
489 void WebPageProxy::recordingSurfaceSetEnableSet(bool enable)
494 process()->send(Messages::WebPage::RecordingSurfaceSetEnableSet(enable), m_pageID, 0);
498 #if ENABLE(TIZEN_CONTEXT_MENU_WEBKIT_2)
499 void WebPageProxy::hideContextMenu()
501 if (m_activeContextMenu)
502 m_activeContextMenu->hideContextMenu();
505 String WebPageProxy::contextMenuAbsoluteLinkURLString()
507 if (!m_activeContextMenu)
510 return m_activeContextMenuHitTestResultData.absoluteLinkURL;
513 String WebPageProxy::contextMenuAbsoluteImageURLString()
515 if (!m_activeContextMenu)
518 return m_activeContextMenuHitTestResultData.absoluteImageURL;
522 #if ENABLE(TIZEN_WEBKIT_PASTEBOARD)
523 void WebPageProxy::writeDataToClipboardWithType(const String& data, uint64_t type)
525 static_cast<PageClientImpl*>(m_pageClient)->writeDataToClipboardWithType(data, static_cast<Pasteboard::PasteboardDataType>(type));
528 void WebPageProxy::pasteWithClipboard()
530 static_cast<PageClientImpl*>(m_pageClient)->pasteWithClipboard();
533 void WebPageProxy::sendPasteMessageWithData(const String& data, Pasteboard::PasteboardDataType type)
535 #if ENABLE(CONTEXT_MENUS)
539 process()->send(Messages::WebPage::SetDataToPasteboardWithType(data, static_cast<uint64_t>(type)), m_pageID);
540 WebContextMenuItemData item(ActionType, ContextMenuItemTagPaste, String("Paste"), true, false);
541 process()->send(Messages::WebPage::DidSelectItemFromActiveContextMenu(item), m_pageID);
546 #if ENABLE(TIZEN_WEBKIT2_REMOTE_WEB_INSPECTOR)
547 uint32_t WebPageProxy::startInspectorServer(uint32_t port)
552 uint32_t assignedPort = 0;
553 process()->sendSync(Messages::WebPage::StartInspectorServer(port), Messages::WebPage::StartInspectorServer::Reply(assignedPort), m_pageID);
557 bool WebPageProxy::stopInspectorServer()
563 process()->sendSync(Messages::WebPage::StopInspectorServer(), Messages::WebPage::StopInspectorServer::Reply(result), m_pageID);
568 #if ENABLE(TIZEN_MOBILE_WEB_PRINT)
569 void WebPageProxy::createPagesToPDF(const IntSize& size, const String& fileName)
571 process()->send(Messages::WebPage::CreatePagesToPDF(size, fileName), m_pageID);
575 #if ENABLE(TIZEN_WEB_STORAGE)
576 #if ENABLE(TIZEN_WEBKIT2_NUMBER_TYPE_SUPPORT)
577 void WebPageProxy::getWebStorageQuotaBytes(PassRefPtr<WebStorageQuotaCallback> prpCallback)
579 RefPtr<WebStorageQuotaCallback> callback = prpCallback;
581 callback->invalidate();
585 uint64_t callbackID = callback->callbackID();
586 m_quotaCallbacks.set(callbackID, callback.get());
587 process()->send(Messages::WebPage::GetStorageQuotaBytes(callbackID), m_pageID);
590 void WebPageProxy::didGetWebStorageQuotaBytes(const uint32_t quota, uint64_t callbackID)
592 RefPtr<WebStorageQuotaCallback> callback = m_quotaCallbacks.take(callbackID);
594 // FIXME: Log error or assert.
595 // this can validly happen if a load invalidated the callback, though
599 m_quotaCallbacks.remove(callbackID);
601 RefPtr<WebUInt32> uint32Object = WebUInt32::create(quota);
602 callback->performCallbackWithReturnValue(uint32Object.release().leakRef());
606 void WebPageProxy::setWebStorageQuotaBytes(uint32_t quota)
611 process()->send(Messages::WebPage::SetStorageQuotaBytes(quota), m_pageID, 0);
615 void WebPageProxy::scale(double scaleFactor, const IntPoint& origin)
617 #if ENABLE(TIZEN_WEBKIT2_TILED_BACKING_STORE)
618 static_cast<PageClientImpl*>(m_pageClient)->scaleContents(scaleFactor, origin);
620 scalePage(scaleFactor, origin);
624 void WebPageProxy::scaleImage(double scaleFactor, const IntPoint& origin, bool adjustToBoundary)
626 #if ENABLE(TIZEN_WEBKIT2_TILED_BACKING_STORE)
627 static_cast<PageClientImpl*>(m_pageClient)->scaleImage(scaleFactor, origin, adjustToBoundary);
629 scalePage(scaleFactor, origin);
633 double WebPageProxy::scaleFactor()
635 #if ENABLE(TIZEN_WEBKIT2_TILED_BACKING_STORE)
636 return static_cast<PageClientImpl*>(m_pageClient)->scaleFactor();
638 return pageScaleFactor();
642 #if ENABLE(TIZEN_ORIENTATION_EVENTS)
643 void WebPageProxy::sendOrientationChangeEvent(int orientation)
645 process()->send(Messages::WebPage::SendOrientationChangeEvent(orientation), m_pageID, 0);
649 #if ENABLE(TIZEN_CSS_OVERFLOW_SCROLL_ACCELERATION)
650 bool WebPageProxy::scrollOverflow(const FloatPoint& offset)
652 #if ENABLE(TIZEN_CSS_OVERFLOW_SCROLL_ACCELERATION_ON_UI_SIDE)
653 return isValid() ? drawingArea()->layerTreeHostProxy()->setOffsetForFocusedScrollingContentsLayer(offset) : false;
655 bool scrolled = false;
659 process()->sendSync(Messages::WebPage::ScrollOverflow(offset), Messages::WebPage::ScrollOverflow::Reply(scrolled), m_pageID);
665 bool WebPageProxy::setPressedNodeAtPoint(const IntPoint& point)
667 bool pressed = false;
671 process()->sendSync(Messages::WebPage::SetPressedNodeAtPoint(point), Messages::WebPage::SetPressedNodeAtPoint::Reply(pressed), m_pageID);
677 void WebPageProxy::executeEditCommandWithArgument(const String& commandName, const String& argument)
682 DEFINE_STATIC_LOCAL(String, ignoreSpellingCommandName, ("ignoreSpelling"));
683 if (commandName == ignoreSpellingCommandName)
684 ++m_pendingLearnOrIgnoreWordMessageCount;
686 process()->send(Messages::WebPage::ExecuteEditCommandWithArgument(commandName, argument), m_pageID);
689 #if ENABLE(TIZEN_FIX_PLUGIN_DOWNLOAD)
690 bool WebPageProxy::arePluginsEnabled() const
692 bool enabled = false;
694 process()->sendSync(Messages::WebPage::ArePluginsEnabled(), Messages::WebPage::ArePluginsEnabled::Reply(enabled), m_pageID);
698 #endif // ENABLE(TIZEN_FIX_PLUGIN_DOWNLOAD)
700 void WebPageProxy::replyJavaScriptAlert()
705 m_alertReply->send();
706 m_alertReply = nullptr;
709 void WebPageProxy::replyJavaScriptConfirm(bool result)
714 m_confirmReply->send(result);
715 m_confirmReply = nullptr;
718 void WebPageProxy::replyJavaScriptPrompt(const String& result)
723 m_promptReply->send(result);
724 m_promptReply = nullptr;
727 #if PLUGIN_ARCHITECTURE(X11)
728 void WebPageProxy::createPluginContainer(uint64_t& windowID)
733 void WebPageProxy::windowedPluginGeometryDidChange(const WebCore::IntRect& frameRect, const WebCore::IntRect& clipRect, uint64_t windowID)
739 #if ENABLE(TIZEN_WEBKIT2_THEME_SET)
740 void WebPageProxy::setThemePath(const String& themePath)
742 process()->send(Messages::WebPage::SetThemePath(themePath), m_pageID, 0);
746 void WebPageProxy::didRenderFrame()
748 static_cast<PageClientImpl*>(m_pageClient)->didRenderFrame();
751 #if ENABLE(TIZEN_WEBKIT2_TILED_AC)
752 void WebPageProxy::setBackgroundColor(double red, double green, double blue, double alpha)
754 static_cast<PageClientImpl*>(m_pageClient)->setBackgroundColor(red, green, blue, alpha);
758 #if ENABLE(TIZEN_WEBKIT2_GET_TEXT_STYLE_FOR_SELECTION)
759 void WebPageProxy::getTextStyleStateForSelection()
761 process()->send(Messages::WebPage::GetTextStyleStateForSelection(), m_pageID, 0);
764 void WebPageProxy::didGetTextStyleStateForSelection(int underlineState, int italicState, int boldState)
766 static_cast<PageClientImpl*>(m_pageClient)->didGetTextStyleStateForSelection(underlineState, italicState, boldState);
770 #endif // #if OS(TIZEN)
772 } // namespace WebKit