Fix input picker issue
[framework/web/webkit-efl.git] / Source / WebKit2 / WebProcess / WebPage / WebPage.cpp
index acd7f5f..f4ef35d 100755 (executable)
@@ -298,16 +298,13 @@ WebPage::WebPage(uint64_t pageID, const WebPageCreationParameters& parameters)
 #if ENABLE(PAGE_VISIBILITY_API)
     , m_visibilityState(WebCore::PageVisibilityStateVisible)
 #endif
-#if ENABLE(TIZEN_RECORDING_SURFACE_SET)
-    , m_recordingSurfaceSetEnable(false)
-    , m_recordingSurfaceSetLoadStart(false)
-    , m_recordingSurfaceSetLoadFinished(false)
-    , m_recordingSurfaceSetSettings(false)
-#endif
 #if ENABLE(TIZEN_SYNC_REQUEST_ANIMATION_FRAME)
     , m_suspendedAnimationController(false)
 #endif
     , m_inspectorClient(0)
+#if ENABLE(TIZEN_ISF_PORT)
+    , m_prepareKeyDownEvent(false)
+#endif
 {
     ASSERT(m_pageID);
     // FIXME: This is a non-ideal location for this Setting and
@@ -563,22 +560,55 @@ EditorState WebPage::editorState() const
     result.hasComposition = frame->editor()->hasComposition();
     result.shouldIgnoreCompositionSelectionChange = frame->editor()->ignoreCompositionSelectionChange();
 
-#if ENABLE(TIZEN_WEBKIT2_TEXT_SELECTION) || ENABLE(TIZEN_ISF_PORT)
-    Element* selectionRoot = frame->selection()->rootEditableElementOrDocumentElement();
-    if (!selectionRoot)
+#if ENABLE(TIZEN_WEBKIT2_GET_TEXT_STYLE_FOR_SELECTION)
+    if (!result.shouldIgnoreCompositionSelectionChange) {
+        result.underlineState = frame->editor()->selectionHasStyle(CSSPropertyWebkitTextDecorationsInEffect, "underline");
+        result.italicState = frame->editor()->selectionHasStyle(CSSPropertyFontStyle, "italic");
+        result.boldState = frame->editor()->selectionHasStyle(CSSPropertyFontWeight, "bold");
+        result.bgColor = frame->editor()->selectionStartCSSPropertyValue(CSSPropertyBackgroundColor);
+        result.color = frame->editor()->selectionStartCSSPropertyValue(CSSPropertyColor);
+        result.fontSize = frame->editor()->selectionStartCSSPropertyValue(CSSPropertyFontSize);
+    }
+#endif
+
+#if ENABLE(TIZEN_ISF_PORT) || ENABLE(TIZEN_WEBKIT2_TEXT_SELECTION)
+    Element* rootEditableElement = frame->selection()->rootEditableElement();
+    if (!rootEditableElement)
         return result;
 
-    result.editorRect = frame->view()->contentsToWindow(selectionRoot->getPixelSnappedRect());
-    if (result.editorRect.maxX() <= 0 || result.editorRect.maxY() <= 0)
-        result.isContentEditable = false;
+    result.editorRect = nodeRect(rootEditableElement);
 #endif
 
 #if ENABLE(TIZEN_ISF_PORT)
-    Node* hostNode = selectionRoot->shadowAncestorNode();
-    if (result.isContentEditable) {
+    if (!result.shouldIgnoreCompositionSelectionChange && result.isContentEditable) {
+        result.inputMethodContextID = reinterpret_cast<uintptr_t>(rootEditableElement);
+
+        Node* hostNode = rootEditableElement->shadowHost();
+        if (!hostNode)
+            hostNode = rootEditableElement;
+
         HTMLTextFormControlElement* formControl = toTextFormControl(hostNode);
         if (formControl) {
-            result.inputMethodHints = formControl->type();
+            const AtomicString& type = formControl->type();
+
+            if (type == "number" && formControl->hasTagName(HTMLNames::inputTag)) {
+                StepRange stepRange = static_cast<HTMLInputElement*>(formControl)->createStepRange(RejectAny);
+                bool needsSigned = stepRange.minimum().isNegative();
+                bool needsDecimal = (stepRange.step().floor() != stepRange.step());
+
+                if (needsSigned && needsDecimal)
+                    result.inputMethodHints = "signedDecimalNumber";
+                else if (needsSigned)
+                    result.inputMethodHints = "signedNumber";
+                else if (needsDecimal)
+                    result.inputMethodHints = "decimalNumber";
+                else
+                    result.inputMethodHints = "number";
+            } else if (type == "text" && formControl->form() && equalIgnoringCase(formControl->form()->fastGetAttribute(HTMLNames::roleAttr), "search"))
+                result.inputMethodHints = "search";
+            else
+                result.inputMethodHints = type;
+
             result.surroundingText = formControl->value();
         }
 
@@ -823,25 +853,9 @@ void WebPage::sendClose()
 
 void WebPage::loadURL(const String& url, const SandboxExtension::Handle& sandboxExtensionHandle)
 {
-#if ENABLE(TIZEN_RECORDING_SURFACE_SET)
-    recordingSurfaceSetEnableURL(url);
-#endif
     loadURLRequest(ResourceRequest(KURL(KURL(), url)), sandboxExtensionHandle);
 }
 
- #if ENABLE(TIZEN_RECORDING_SURFACE_SET)
-void WebPage::recordingSurfaceSetEnableURL(const String& url)
-{
-    if (m_recordingSurfaceSetSettings && strstr(url.utf8().data(), "bubblemark.com")) {
-        m_recordingSurfaceSetEnable = true;
-        m_page->m_recordingSurfaceSetEnable = true;
-    } else {
-        m_recordingSurfaceSetEnable = false;
-        m_page->m_recordingSurfaceSetEnable = false;
-    }
-}
-#endif
-
 void WebPage::loadURLRequest(const ResourceRequest& request, const SandboxExtension::Handle& sandboxExtensionHandle)
 {
     SendStopResponsivenessTimer stopper(this);
@@ -1078,6 +1092,13 @@ void WebPage::sendViewportAttributesChanged()
     Settings* settings = m_page->settings();
 
 #if OS(TIZEN)
+#if ENABLE(TIZEN_DLOG_SUPPORT)
+    TIZEN_LOGI(" args type: [%d], scale: [%.1f, %.1f, %.1f], layout: [%.1f, %.1f], userScalable: [%.1f]"
+        , static_cast<int>(m_page->viewportArguments().type), m_page->viewportArguments().initialScale
+        , m_page->viewportArguments().minimumScale, m_page->viewportArguments().maximumScale
+        , m_page->viewportArguments().width, m_page->viewportArguments().height, m_page->viewportArguments().userScalable);
+#endif
+
     // As android and iphone does, we set layout width to 980 for desktop content
     int minimumLayoutFallbackWidth = settings->layoutFallbackWidth();
 #else
@@ -1134,6 +1155,10 @@ void WebPage::setViewportSize(const IntSize& size)
     if (m_viewportSize == size)
         return;
 
+#if ENABLE(TIZEN_DLOG_SUPPORT)
+    TIZEN_LOGI(" viewportSize: [%d, %d]", size.width(), size.height());
+#endif
+
      m_viewportSize = size;
 
     sendViewportAttributesChanged();
@@ -1539,6 +1564,9 @@ void WebPage::pageDidScroll()
 #if USE(TILED_BACKING_STORE)
 void WebPage::pageDidRequestScroll(const IntPoint& point)
 {
+#if ENABLE(TIZEN_DLOG_SUPPORT)
+    TIZEN_LOGI(" scroll position: [%d, %d]", point.x(), point.y());
+#endif
     send(Messages::WebPageProxy::PageDidRequestScroll(point));
 }
 #endif
@@ -1546,6 +1574,9 @@ void WebPage::pageDidRequestScroll(const IntPoint& point)
 #if ENABLE(TIZEN_WEBKIT2_HISTORICAL_RESTORE_VISIBLE_CONTENT_RECT)
 void WebPage::pageDidRequestRestoreVisibleContentRect(const IntPoint& point, float scale)
 {
+#if ENABLE(TIZEN_DLOG_SUPPORT)
+    TIZEN_LOGI(" scale factor: [%.2f], scroll position: [%d, %d]", scale, point.x(), point.y());
+#endif
     send(Messages::WebPageProxy::pageDidRequestRestoreVisibleContentRect(point, scale));
 }
 #endif
@@ -1769,6 +1800,10 @@ void WebPage::keyEvent(const WebKeyboardEvent& keyboardEvent)
 {
     CurrentEvent currentEvent(keyboardEvent);
 
+#if ENABLE(TIZEN_ISF_PORT)
+    m_prepareKeyDownEvent = false;
+#endif
+
     bool handled = handleKeyEvent(keyboardEvent, m_page.get());
     // FIXME: Platform default behaviors should be performed during normal DOM event dispatch (in most cases, in default keydown event handler).
     if (!handled)
@@ -2484,6 +2519,10 @@ void WebPage::updatePreferences(const WebPreferencesStore& store)
     m_page->group().groupSettings()->setLocalFileSystemQuotaBytes(0x6400000); //100M
 #endif
 
+#if ENABLE(TIZEN_WORKERS)
+    m_page->group().groupSettings()->setAllowUniversalAccessFromFileURLs(settings->allowUniversalAccessFromFileURLs());
+#endif
+
     platformPreferencesDidChange(store);
 
     if (m_drawingArea)
@@ -2868,6 +2907,16 @@ void WebPage::didCancelForOpenPanel()
     m_activeOpenPanelResultListener = 0;
 }
 
+#if OS(TIZEN)
+void WebPage::cancelForOpenPanel()
+{
+    if (m_activeOpenPanelResultListener) {
+        m_activeOpenPanelResultListener->disconnectFromPage();
+        m_activeOpenPanelResultListener = 0;
+    }
+}
+#endif
+
 #if ENABLE(WEB_PROCESS_SANDBOX)
 void WebPage::extendSandboxForFileFromOpenPanel(const SandboxExtension::Handle& handle)
 {