[WK2] call ewkViewFrameRendered after nonempty layout finished.
[framework/web/webkit-efl.git] / Source / WebKit2 / UIProcess / API / efl / PageClientImpl.cpp
index 7f54413..8583168 100755 (executable)
@@ -100,6 +100,9 @@ PageClientImpl::PageClientImpl(EwkViewImpl* viewImpl)
 #if ENABLE(TIZEN_WEBKIT2_HISTORICAL_RESTORE_VISIBLE_CONTENT_RECT)
     , m_restoredScaleFactor(0)
 #endif
+#if ENABLE(TIZEN_WEBKIT2_BEFORE_PAGE_RENDERED_SCROLL_POSITION)
+    , m_scrollPositionBeforePageRendered(IntPoint())
+#endif
     , m_isVisible(true)
     , m_isScrollableLayerFocused(false)
     , m_isScrollableNodeFocused(false)
@@ -113,6 +116,10 @@ PageClientImpl::PageClientImpl(EwkViewImpl* viewImpl)
 #if ENABLE(TIZEN_PRERENDERING_FOR_ROTATION)
     , m_waitFrameOfNewViewortSize(false)
 #endif
+#if ENABLE(TIZEN_BACKGROUND_DISK_CACHE)
+    , m_isForeground(true)
+#endif
+    , m_nonemptyLayoutRendered(false)
 #endif // #if OS(TIZEN)
 {
 #if ENABLE(TIZEN_CANVAS_CAIRO_GLES_RENDERING)
@@ -186,14 +193,30 @@ double PageClientImpl::adjustScaleWithViewport(double scale)
 #if USE(TILED_BACKING_STORE) && ENABLE(TIZEN_WEBKIT2_TILED_BACKING_STORE)
 void PageClientImpl::updateViewportSize(const IntSize& viewportSize, const int angle)
 {
+#if ENABLE(TIZEN_DLOG_SUPPORT)
+    TIZEN_LOGI(" view size: [%d, %d], angle: [%d]", viewportSize.width(), viewportSize.height(), angle);
+#endif
+
     // update viewport size of webkit
-    m_visibleContentRect.setSize(viewportSize);
-    m_visibleContentRect = adjustVisibleContentRect(m_visibleContentRect, m_scaleFactor);
-    m_viewImpl->setScrollPosition(m_visibleContentRect.location());
     m_viewImpl->page()->setViewportSize(viewportSize);
 }
+
+void PageClientImpl::updateVisibleContentRectSize(const IntSize& size)
+{
+    // update visible content rect's size
+    m_visibleContentRect.setSize(size);
+}
 #endif
 
+void PageClientImpl::prepareRestoredVisibleContectRect()
+{
+    m_restoredScaleFactor = scaleFactor();
+    m_restoredScrollPosition = scrollPosition();
+#if ENABLE(TIZEN_DLOG_SUPPORT)
+    TIZEN_LOGI("scroll position: [%d, %d], scale factor: [%.2f]", m_restoredScrollPosition.x(), m_restoredScrollPosition.y(), m_restoredScaleFactor);
+#endif
+}
+
 void PageClientImpl::initializeVisibleContentRect()
 {
     _ewk_view_resume_painting(m_viewImpl->view());
@@ -201,6 +224,10 @@ void PageClientImpl::initializeVisibleContentRect()
 #if ENABLE(TIZEN_WEBKIT2_TILED_BACKING_STORE)
     IntPoint initialScrollPosition;
     float initialScaleFactor = m_viewportConstraints.initialScale;
+#if ENABLE(TIZEN_WEBKIT2_BEFORE_PAGE_RENDERED_SCROLL_POSITION)
+    initialScrollPosition = m_scrollPositionBeforePageRendered;
+    m_scrollPositionBeforePageRendered = IntPoint();
+#endif
 #if ENABLE(TIZEN_WEBKIT2_HISTORICAL_RESTORE_VISIBLE_CONTENT_RECT)
     // if scroll position and scale factor are restored by history controller,
     // move scroll position and scale factor with them
@@ -208,6 +235,12 @@ void PageClientImpl::initializeVisibleContentRect()
         initialScrollPosition = m_restoredScrollPosition;
         initialScaleFactor = m_restoredScaleFactor;
     }
+#if ENABLE(TIZEN_WEBKIT2_HISTORICAL_RESTORE_VISIBLE_CONTENT_RECT)
+    m_restoredScaleFactor = 0;
+#endif
+#if ENABLE(TIZEN_DLOG_SUPPORT)
+    TIZEN_LOGI("scroll position: [%d, %d], scale factor: [%.2f]", initialScrollPosition.x(), initialScrollPosition.y(), initialScaleFactor);
+#endif
 #endif
     setVisibleContentRect(IntRect(initialScrollPosition, m_visibleContentRect.size()), initialScaleFactor);
 #else
@@ -233,6 +266,9 @@ double PageClientImpl::availableMinimumScale()
 
 void PageClientImpl::fitViewportToContent()
 {
+#if ENABLE(TIZEN_DLOG_SUPPORT)
+    TIZEN_LOGI("scroll position: [%d, %d], scale factor: [%.2f]", m_visibleContentRect.x(), m_visibleContentRect.y(), m_viewportConstraints.minimumScale);
+#endif
     setVisibleContentRect(m_visibleContentRect, m_viewportConstraints.minimumScale);
 }
 
@@ -383,6 +419,13 @@ void PageClientImpl::didChangeViewportProperties(const WebCore::ViewportAttribut
         m_viewportConstraints.minimumScale = availableMinimumScale();
     }
 
+#if ENABLE(TIZEN_DLOG_SUPPORT)
+    TIZEN_LOGI("layout size: [%d, %d], scale: [%.2f, %.2f, %.2f], user scalable: [%s]",
+        m_viewportConstraints.layoutSize.width(), m_viewportConstraints.layoutSize.height(),
+        m_viewportConstraints.initialScale, m_viewportConstraints.minimumScale, m_viewportConstraints.maximumScale,
+        m_viewportConstraints.userScalable ? "TRUE" : "FALSE");
+#endif
+
     // setVisibleContentRect() should be called to adjust visible content rect only when view is resized
     if (!m_pageDidRendered || m_viewImpl->page()->estimatedProgress() <= 0.1)
         return;
@@ -408,6 +451,9 @@ void PageClientImpl::didChangeViewportProperties(const WebCore::ViewportAttribut
     if (m_waitFrameOfNewViewortSize)
         ewk_view_resume(m_viewImpl->view());
 #endif
+#if ENABLE(TIZEN_DLOG_SUPPORT)
+    TIZEN_LOGI("scroll position: [%d, %d], scale factor: [%.2f], rotated: [%s]", m_visibleContentRect.x(), m_visibleContentRect.y(), newScale, isRotated ? "Rotated" : "Not rotated");
+#endif
 
 #if ENABLE(TIZEN_WEBKIT2_TILED_BACKING_STORE)
     setVisibleContentRect(IntRect(newScrollPosition, m_visibleContentRect.size()), newScale);
@@ -622,6 +668,7 @@ void PageClientImpl::didChangeScrollbarsForMainFrame() const
 #if OS(TIZEN)
 void PageClientImpl::didFirstVisuallyNonEmptyLayoutForMainFrame()
 {
+    m_nonemptyLayoutRendered = true;
 #if ENABLE(TIZEN_WEBKIT2_TILED_AC_SHARED_PLATFORM_SURFACE_BACKUP_IMAGE)
     m_initialViewRect.setSize(viewSize());
 #endif
@@ -629,6 +676,9 @@ void PageClientImpl::didFirstVisuallyNonEmptyLayoutForMainFrame()
 
 void PageClientImpl::didChangeContentsSize(const WebCore::IntSize size)
 {
+#if ENABLE(TIZEN_DLOG_SUPPORT)
+    TIZEN_LOGI(" [%d, %d]", size.width(), size.height());
+#endif
 #if USE(TILED_BACKING_STORE)
     if (size.isEmpty())
         return;
@@ -660,8 +710,12 @@ void PageClientImpl::didChangeContentsSize(const WebCore::IntSize size)
     // adjust visible content rect
     bool needScrollAdjustment = (adjustVisibleContentRect(m_visibleContentRect, scaleFactor()) != m_visibleContentRect);
     bool needScaleAdjustment = (fabs(adjustScaleWithViewport(scaleFactor()) - scaleFactor()) > numeric_limits<float>::epsilon());
-    if (needScrollAdjustment || needScaleAdjustment)
+    if (needScrollAdjustment || needScaleAdjustment) {
+#if ENABLE(TIZEN_DLOG_SUPPORT)
+        TIZEN_LOGI(" setVisibleContentRect: [%d, %d], [%.2f]", m_visibleContentRect.x(), m_visibleContentRect.y(), scaleFactor());
+#endif
         setVisibleContentRect(m_visibleContentRect, scaleFactor());
+    }
 }
 
 void PageClientImpl::pageScaleFactorDidChange()
@@ -675,9 +729,7 @@ void PageClientImpl::didCommitLoadForMainFrame(bool)
 #if OS(TIZEN)
     m_pageDidRendered = false;
     m_viewportFitsToContent = false;
-#if ENABLE(TIZEN_WEBKIT2_HISTORICAL_RESTORE_VISIBLE_CONTENT_RECT)
-    m_restoredScaleFactor = 0;
-#endif
+    m_nonemptyLayoutRendered = false;
     return;
 #endif
     notImplemented();
@@ -744,8 +796,15 @@ void PageClientImpl::pageDidRequestScroll(const IntPoint& point)
 #if ENABLE(TIZEN_WEBKIT2_TILED_BACKING_STORE)
     IntPoint newPoint = point;
     newPoint.scale(scaleFactor(), scaleFactor());
+#if ENABLE(TIZEN_WEBKIT2_BEFORE_PAGE_RENDERED_SCROLL_POSITION)
+    if (!m_pageDidRendered)
+        m_scrollPositionBeforePageRendered = newPoint;
+    else
+        setVisibleContentRect(IntRect(newPoint, m_visibleContentRect.size()), scaleFactor());
+#else
     setVisibleContentRect(IntRect(newPoint, m_visibleContentRect.size()), scaleFactor());
 #endif
+#endif
 }
 #endif
 
@@ -756,6 +815,9 @@ void PageClientImpl::pageDidRequestRestoreVisibleContentRect(const IntPoint& poi
     m_restoredScrollPosition = point;
     m_restoredScrollPosition.scale(scale, scale);
     m_restoredScaleFactor = scale;
+#if ENABLE(TIZEN_DLOG_SUPPORT)
+    TIZEN_LOGI("scroll position: [%d, %d], scale factor: [%.2f]", m_restoredScrollPosition.x(), m_restoredScrollPosition.y(), m_restoredScaleFactor);
+#endif
 
     // Before contents size is fixed, just update visible content rect's position
     m_visibleContentRect.setLocation(m_restoredScrollPosition);
@@ -952,6 +1014,10 @@ void PageClientImpl::resumeContent()
     if (!m_hasSuspendedContent)
         return;
 
+#if ENABLE(TIZEN_DLOG_SUPPORT)
+    TIZEN_LOGI("scroll position: [%d, %d], scale factor: [%.2f]", m_viewImpl->scrollPosition().x(), m_viewImpl->scrollPosition().y(), m_viewImpl->scaleFactor());
+#endif
+
     // FIXME: Update visibleContentRect with m_viewImpl after resuming content.
     // The concept is that the values of EwkViewImpl and PageClient can be different
     // during suspending content and they become same when content is resumed.
@@ -1117,6 +1183,11 @@ void PageClientImpl::initTextSelectionHandlesMouseDownedStatus()
 {
     m_textSelection->initHandlesMouseDownedStatus();
 }
+
+void PageClientImpl::changeContextMenuPosition(IntPoint& point)
+{
+    m_textSelection->changeContextMenuPosition(point);
+}
 #endif
 
 #if ENABLE(TIZEN_OFFLINE_PAGE_SAVE)
@@ -1323,6 +1394,11 @@ void PageClientImpl::unlockOrientation()
 
 void PageClientImpl::didRenderFrame()
 {
+#if OS(TIZEN)
+    if (m_nonemptyLayoutRendered)
+        ewkViewFrameRendered(m_viewImpl->view());
+#endif
+
 #if ENABLE(TIZEN_WEBKIT2_TILED_AC_SHARED_PLATFORM_SURFACE_BACKUP_IMAGE)
     if (m_shouldShowBackupTexture && m_isVisible)
         m_shouldShowBackupTexture = false;
@@ -1372,47 +1448,6 @@ void PageClientImpl::findScrollableNode(const IntPoint& point)
 }
 #endif
 
-#if ENABLE(TIZEN_WEBKIT2_GET_TEXT_STYLE_FOR_SELECTION)
-void PageClientImpl::didGetTextStyleStateForSelection(int underlineState, int italicState, int boldState)
-{
-    WebCore::IntPoint startPoint, endPoint;
-    WebCore::IntRect leftRect, rightRect;
-
-    WebCore::IntRect caretRect;
-    m_viewImpl->page()->getCaretPosition(caretRect);
-    if (!caretRect.isEmpty()) {
-        startPoint.setX(caretRect.x());
-        startPoint.setY(caretRect.y() + caretRect.height());
-
-        endPoint.setX(caretRect.x() + caretRect.width());
-        endPoint.setY(caretRect.y() + caretRect.height());
-    }
-#if ENABLE(TIZEN_WEBKIT2_TEXT_SELECTION)
-    else if (m_viewImpl->page()->getSelectionHandlers(leftRect, rightRect)) {
-        startPoint.setX(leftRect.x());
-        startPoint.setY(leftRect.y() + leftRect.height());
-
-        endPoint.setX(rightRect.x() + rightRect.width());
-        endPoint.setY(rightRect.y() + rightRect.height());
-    }
-#endif
-
-    startPoint.scale(scaleFactor(), scaleFactor());
-    endPoint.scale(scaleFactor(), scaleFactor());
-
-    int viewPositionX, viewPositionY;
-    evas_object_geometry_get(m_viewImpl->view(), &viewPositionX, &viewPositionY, NULL, NULL);
-
-    startPoint.move(-scrollPosition().x(),  -scrollPosition().y());
-    startPoint.move(viewPositionX, viewPositionY);
-
-    endPoint.move(-scrollPosition().x(),  -scrollPosition().y());
-    endPoint.move(viewPositionX, viewPositionY);
-
-    ewkViewDidGetTextStyleStateForSelection(m_viewImpl->view(), underlineState, italicState, boldState, startPoint, endPoint);
-}
-#endif
-
 void PageClientImpl::didFindZoomableArea(const IntPoint& target, const IntRect& area)
 {
     ewk_view_zoomable_area_set(m_viewImpl->view(), target, area);
@@ -1458,13 +1493,18 @@ PageClientEvasGL::~PageClientEvasGL()
 
 void PageClientEvasGL::updateViewportSize(const WebCore::IntSize& viewportSize, const int angle)
 {
+    PageClientImpl::updateViewportSize(viewportSize, angle);
+}
+
+void PageClientEvasGL::updateVisibleContentRectSize(const WebCore::IntSize& size)
+{
     if (m_surface) {
         evas_gl_surface_destroy(m_evasGL, m_surface);
         m_surface = 0;
     }
     setTargetSurface();
 
-    PageClientImpl::updateViewportSize(viewportSize, angle);
+    PageClientImpl::updateVisibleContentRectSize(size);
 }
 
 void PageClientEvasGL::setViewNeedsDisplay(const WebCore::IntRect& rect)
@@ -1564,7 +1604,6 @@ void PageClientEvasGL::drawContents()
 
 void PageClientEvasGL::didRenderFrame()
 {
-    ewkViewFrameRendered(m_viewImpl->view());
     PageClientImpl::didRenderFrame();
 }