[SCM] WebKit Debian packaging branch, webkit-1.3, updated. upstream/1.3.7-4207-g178b198

andersca at apple.com andersca at apple.com
Sun Feb 20 23:38:40 UTC 2011


The following commit has been merged in the webkit-1.3 branch:
commit f3248c7d4e01155d4ee9d48a0ae67f2705fe2b0e
Author: andersca at apple.com <andersca at apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Sat Jan 22 19:36:34 2011 +0000

    2011-01-22  Anders Carlsson  <andersca at apple.com>
    
            Reviewed by Sam Weinig.
    
            Add an asynchronous WKPageForceRepaint
            https://bugs.webkit.org/show_bug.cgi?id=52964
            <rdar://problem/8898527>
    
            * UIProcess/API/C/WKPage.cpp:
            (WKPageForceRepaint):
            Call WebPageProxy::forceRepaint.
    
            * UIProcess/API/C/WKPage.h:
            Add WKPageForceRepaint.
    
            * UIProcess/GenericCallback.h:
            Add a "generic" VoidCallback class.
    
            * UIProcess/WebPageProxy.cpp:
            (WebKit::WebPageProxy::forceRepaint):
            Insert the callback in the m_voidCallbacks map and send a forceRepaint message.
    
            (WebKit::WebPageProxy::voidCallback):
            Call the right void callback.
    
            (WebKit::WebPageProxy::processDidCrash):
            Invalidate m_voidCallbacks.
    
            * UIProcess/WebPageProxy.messages.in:
            Add a VoidCallback message.
    
            * WebProcess/WebPage/ChunkedUpdateDrawingArea.cpp:
            (WebKit::ChunkedUpdateDrawingArea::forceRepaint):
            Force a repaint.
    
            * WebProcess/WebPage/ChunkedUpdateDrawingArea.h:
            Add forceRepaint.
    
            * WebProcess/WebPage/WebPage.cpp:
            (WebKit::WebPage::forceRepaint):
            Call forceRepaint on the drawing area.
    
            * WebProcess/WebPage/WebPage.messages.in:
            Add a ForceRepaint message.
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@76452 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/Source/WebKit2/ChangeLog b/Source/WebKit2/ChangeLog
index be31bbb..79eb450 100644
--- a/Source/WebKit2/ChangeLog
+++ b/Source/WebKit2/ChangeLog
@@ -1,3 +1,48 @@
+2011-01-22  Anders Carlsson  <andersca at apple.com>
+
+        Reviewed by Sam Weinig.
+
+        Add an asynchronous WKPageForceRepaint
+        https://bugs.webkit.org/show_bug.cgi?id=52964
+        <rdar://problem/8898527>
+
+        * UIProcess/API/C/WKPage.cpp:
+        (WKPageForceRepaint):
+        Call WebPageProxy::forceRepaint.
+
+        * UIProcess/API/C/WKPage.h:
+        Add WKPageForceRepaint.
+
+        * UIProcess/GenericCallback.h:
+        Add a "generic" VoidCallback class.
+
+        * UIProcess/WebPageProxy.cpp:
+        (WebKit::WebPageProxy::forceRepaint):
+        Insert the callback in the m_voidCallbacks map and send a forceRepaint message.
+
+        (WebKit::WebPageProxy::voidCallback):
+        Call the right void callback.
+
+        (WebKit::WebPageProxy::processDidCrash):
+        Invalidate m_voidCallbacks.
+
+        * UIProcess/WebPageProxy.messages.in:
+        Add a VoidCallback message.
+
+        * WebProcess/WebPage/ChunkedUpdateDrawingArea.cpp:
+        (WebKit::ChunkedUpdateDrawingArea::forceRepaint):
+        Force a repaint.
+
+        * WebProcess/WebPage/ChunkedUpdateDrawingArea.h:
+        Add forceRepaint.
+
+        * WebProcess/WebPage/WebPage.cpp:
+        (WebKit::WebPage::forceRepaint):
+        Call forceRepaint on the drawing area.
+
+        * WebProcess/WebPage/WebPage.messages.in:
+        Add a ForceRepaint message.
+
 2011-01-21  Nikolas Zimmermann  <nzimmermann at rim.com>
 
         Reviewed by Dirk Schulze.
diff --git a/Source/WebKit2/UIProcess/API/C/WKPage.cpp b/Source/WebKit2/UIProcess/API/C/WKPage.cpp
index 82daa4b..41f4ae1 100644
--- a/Source/WebKit2/UIProcess/API/C/WKPage.cpp
+++ b/Source/WebKit2/UIProcess/API/C/WKPage.cpp
@@ -429,3 +429,8 @@ void WKPageGetContentsAsString_b(WKPageRef pageRef, WKPageGetSourceForFrameBlock
     WKPageGetContentsAsString(pageRef, Block_copy(block), callContentsAsStringBlockBlockAndDispose);
 }
 #endif
+
+void WKPageForceRepaint(WKPageRef pageRef, void* context, WKPageForceRepaintFunction callback)
+{
+    toImpl(pageRef)->forceRepaint(VoidCallback::create(context, callback));
+}
diff --git a/Source/WebKit2/UIProcess/API/C/WKPage.h b/Source/WebKit2/UIProcess/API/C/WKPage.h
index e4bf162..7ad4918 100644
--- a/Source/WebKit2/UIProcess/API/C/WKPage.h
+++ b/Source/WebKit2/UIProcess/API/C/WKPage.h
@@ -341,6 +341,9 @@ typedef void (^WKPageGetContentsAsStringBlock)(WKStringRef, WKErrorRef);
 WK_EXPORT void WKPageGetContentsAsString_b(WKPageRef page, WKPageGetContentsAsStringBlock block);
 #endif
 
+typedef void (*WKPageForceRepaintFunction)(WKErrorRef, void*);
+WK_EXPORT void WKPageForceRepaint(WKPageRef page, void* context, WKPageForceRepaintFunction function);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/Source/WebKit2/UIProcess/GenericCallback.h b/Source/WebKit2/UIProcess/GenericCallback.h
index b72314a..010ce04 100644
--- a/Source/WebKit2/UIProcess/GenericCallback.h
+++ b/Source/WebKit2/UIProcess/GenericCallback.h
@@ -35,6 +35,60 @@
 
 namespace WebKit {
 
+class VoidCallback : public RefCounted<VoidCallback> {
+public:
+    typedef void (*CallbackFunction)(WKErrorRef, void*);
+
+    static PassRefPtr<VoidCallback> create(void* context, CallbackFunction callback)
+    {
+        return adoptRef(new VoidCallback(context, callback));
+    }
+
+    VoidCallback()
+    {
+        ASSERT(!m_callback);
+    }
+
+    void performCallback()
+    {
+        ASSERT(m_callback);
+
+        m_callback(0, m_context);
+
+        m_callback = 0;
+    }
+    
+    void invalidate()
+    {
+        ASSERT(m_callback);
+
+        RefPtr<WebError> error = WebError::create();
+        m_callback(toAPI(error.get()), m_context);
+        
+        m_callback = 0;
+    }
+
+    uint64_t callbackID() const { return m_callbackID; }
+
+private:
+    static uint64_t generateCallbackID()
+    {
+        static uint64_t uniqueCallbackID = 1;
+        return uniqueCallbackID++;
+    }
+
+    VoidCallback(void* context, CallbackFunction callback)
+        : m_context(context)
+        , m_callback(callback)
+        , m_callbackID(generateCallbackID())
+    {
+    }
+
+    void* m_context;
+    CallbackFunction m_callback;
+    uint64_t m_callbackID;
+};
+
 template<typename APIReturnValueType, typename InternalReturnValueType = typename APITypeInfo<APIReturnValueType>::ImplType>
 class GenericCallback : public RefCounted<GenericCallback<APIReturnValueType, InternalReturnValueType> > {
 public:
diff --git a/Source/WebKit2/UIProcess/WebPageProxy.cpp b/Source/WebKit2/UIProcess/WebPageProxy.cpp
index 0be2f11..1da3ebd 100644
--- a/Source/WebKit2/UIProcess/WebPageProxy.cpp
+++ b/Source/WebKit2/UIProcess/WebPageProxy.cpp
@@ -1002,6 +1002,20 @@ void WebPageProxy::getWebArchiveOfFrame(WebFrameProxy* frame, PassRefPtr<DataCal
     process()->send(Messages::WebPage::GetWebArchiveOfFrame(frame->frameID(), callbackID), m_pageID);
 }
 
+void WebPageProxy::forceRepaint(PassRefPtr<VoidCallback> prpCallback)
+{
+    RefPtr<VoidCallback> callback = prpCallback;
+
+    if (!isValid()) {
+        callback->invalidate();
+        return;
+    }
+
+    uint64_t callbackID = callback->callbackID();
+    m_voidCallbacks.set(callbackID, callback.get());
+    process()->send(Messages::WebPage::ForceRepaint(callbackID), m_pageID); 
+}
+
 void WebPageProxy::preferencesDidChange()
 {
     if (!isValid())
@@ -2140,6 +2154,17 @@ void WebPageProxy::didReceiveEvent(uint32_t opaqueType, bool handled)
     }
 }
 
+void WebPageProxy::voidCallback(uint64_t callbackID)
+{
+    RefPtr<VoidCallback> callback = m_voidCallbacks.take(callbackID);
+    if (!callback) {
+        // FIXME: Log error or assert.
+        return;
+    }
+
+    callback->performCallback();
+}
+
 void WebPageProxy::dataCallback(const CoreIPC::DataReference& dataReference, uint64_t callbackID)
 {
     RefPtr<DataCallback> callback = m_dataCallbacks.take(callbackID);
@@ -2249,6 +2274,7 @@ void WebPageProxy::processDidCrash()
 
     m_toolTip = String();
 
+    invalidateCallbackMap(m_voidCallbacks);
     invalidateCallbackMap(m_dataCallbacks);
     invalidateCallbackMap(m_stringCallbacks);
 
diff --git a/Source/WebKit2/UIProcess/WebPageProxy.h b/Source/WebKit2/UIProcess/WebPageProxy.h
index 7a176ac..7b80029 100644
--- a/Source/WebKit2/UIProcess/WebPageProxy.h
+++ b/Source/WebKit2/UIProcess/WebPageProxy.h
@@ -273,7 +273,8 @@ public:
     void getSourceForFrame(WebFrameProxy*, PassRefPtr<StringCallback>);
     void getWebArchiveOfFrame(WebFrameProxy*, PassRefPtr<DataCallback>);
     void runJavaScriptInMainFrame(const String&, PassRefPtr<StringCallback>);
-
+    void forceRepaint(PassRefPtr<VoidCallback>);
+    
     float headerHeight(WebFrameProxy*);
     float footerHeight(WebFrameProxy*);
     void drawHeader(WebFrameProxy*, const WebCore::FloatRect&);
@@ -510,6 +511,7 @@ private:
 
     void didReceiveEvent(uint32_t opaqueType, bool handled);
 
+    void voidCallback(uint64_t);
     void dataCallback(const CoreIPC::DataReference&, uint64_t);
     void stringCallback(const String&, uint64_t);
 
@@ -556,6 +558,7 @@ private:
     RefPtr<WebInspectorProxy> m_inspector;
 #endif
 
+    HashMap<uint64_t, RefPtr<VoidCallback> > m_voidCallbacks;
     HashMap<uint64_t, RefPtr<DataCallback> > m_dataCallbacks;
     HashMap<uint64_t, RefPtr<StringCallback> > m_stringCallbacks;
 
diff --git a/Source/WebKit2/UIProcess/WebPageProxy.messages.in b/Source/WebKit2/UIProcess/WebPageProxy.messages.in
index 6456851..8d26dbd 100644
--- a/Source/WebKit2/UIProcess/WebPageProxy.messages.in
+++ b/Source/WebKit2/UIProcess/WebPageProxy.messages.in
@@ -113,6 +113,7 @@ messages -> WebPageProxy {
     WillSubmitForm(uint64_t frameID, uint64_t sourceFrameID, WebKit::StringPairVector textFieldValues, uint64_t listenerID, WebKit::InjectedBundleUserMessageEncoder userData)
 
     # Callback messages
+    VoidCallback(uint64_t callbackID)
     DataCallback(CoreIPC::DataReference resultData, uint64_t callbackID)
     StringCallback(WTF::String resultString, uint64_t callbackID)
 
diff --git a/Source/WebKit2/WebProcess/WebPage/ChunkedUpdateDrawingArea.cpp b/Source/WebKit2/WebProcess/WebPage/ChunkedUpdateDrawingArea.cpp
index d629ced..c62973d 100644
--- a/Source/WebKit2/WebProcess/WebPage/ChunkedUpdateDrawingArea.cpp
+++ b/Source/WebKit2/WebProcess/WebPage/ChunkedUpdateDrawingArea.cpp
@@ -95,6 +95,12 @@ void ChunkedUpdateDrawingArea::display()
     m_displayTimer.stop();
 }
 
+void ChunkedUpdateDrawingArea::forceRepaint()
+{
+    m_isWaitingForUpdate = false;
+    display();
+}
+
 void ChunkedUpdateDrawingArea::scheduleDisplay()
 {
     if (m_paintingIsSuspended)
diff --git a/Source/WebKit2/WebProcess/WebPage/ChunkedUpdateDrawingArea.h b/Source/WebKit2/WebProcess/WebPage/ChunkedUpdateDrawingArea.h
index 08aa3e7..d32ed4c 100644
--- a/Source/WebKit2/WebProcess/WebPage/ChunkedUpdateDrawingArea.h
+++ b/Source/WebKit2/WebProcess/WebPage/ChunkedUpdateDrawingArea.h
@@ -42,6 +42,7 @@ public:
     virtual void setNeedsDisplay(const WebCore::IntRect&);
     virtual void scroll(const WebCore::IntRect& scrollRect, const WebCore::IntSize& scrollOffset);
     virtual void display();
+    virtual void forceRepaint();
 
 #if USE(ACCELERATED_COMPOSITING)
     virtual void attachCompositingContext() { }
diff --git a/Source/WebKit2/WebProcess/WebPage/DrawingArea.h b/Source/WebKit2/WebProcess/WebPage/DrawingArea.h
index 2ddd07c..8c41390 100644
--- a/Source/WebKit2/WebProcess/WebPage/DrawingArea.h
+++ b/Source/WebKit2/WebProcess/WebPage/DrawingArea.h
@@ -56,9 +56,9 @@ public:
     virtual void scroll(const WebCore::IntRect& scrollRect, const WebCore::IntSize& scrollOffset) = 0;
 
     virtual void pageBackgroundTransparencyChanged() { }
-
     virtual void onPageClose() { }
-    
+    virtual void forceRepaint() { }
+
 #if USE(ACCELERATED_COMPOSITING)
     virtual void attachCompositingContext() = 0;
     virtual void detachCompositingContext() = 0;
diff --git a/Source/WebKit2/WebProcess/WebPage/WebPage.cpp b/Source/WebKit2/WebProcess/WebPage/WebPage.cpp
index 89c3f4a..e5c581f 100644
--- a/Source/WebKit2/WebProcess/WebPage/WebPage.cpp
+++ b/Source/WebKit2/WebProcess/WebPage/WebPage.cpp
@@ -1187,6 +1187,12 @@ void WebPage::getWebArchiveOfFrame(uint64_t frameID, uint64_t callbackID)
     send(Messages::WebPageProxy::DataCallback(dataReference, callbackID));
 }
 
+void WebPage::forceRepaint(uint64_t callbackID)
+{
+    m_drawingArea->forceRepaint();
+    send(Messages::WebPageProxy::VoidCallback(callbackID));
+}
+    
 void WebPage::preferencesDidChange(const WebPreferencesStore& store)
 {
     WebPreferencesStore::removeTestRunnerOverrides();
diff --git a/Source/WebKit2/WebProcess/WebPage/WebPage.h b/Source/WebKit2/WebProcess/WebPage/WebPage.h
index d29400f..00077d6 100644
--- a/Source/WebKit2/WebProcess/WebPage/WebPage.h
+++ b/Source/WebKit2/WebProcess/WebPage/WebPage.h
@@ -375,6 +375,7 @@ private:
     void getSourceForFrame(uint64_t frameID, uint64_t callbackID);
     void getWebArchiveOfFrame(uint64_t frameID, uint64_t callbackID);
     void runJavaScriptInMainFrame(const String&, uint64_t callbackID);
+    void forceRepaint(uint64_t callbackID);
 
     void preferencesDidChange(const WebPreferencesStore&);
     void platformPreferencesDidChange(const WebPreferencesStore&);
diff --git a/Source/WebKit2/WebProcess/WebPage/WebPage.messages.in b/Source/WebKit2/WebProcess/WebPage/WebPage.messages.in
index e001864..f4af9d8 100644
--- a/Source/WebKit2/WebProcess/WebPage/WebPage.messages.in
+++ b/Source/WebKit2/WebProcess/WebPage/WebPage.messages.in
@@ -65,6 +65,9 @@ messages -> WebPage {
     GetWebArchiveOfFrame(uint64_t frameID, uint64_t callbackID)
     RunJavaScriptInMainFrame(WTF::String script, uint64_t callbackID)
 
+    # FIXME: This should be a drawing area message.
+    ForceRepaint(uint64_t callbackID)
+
     PreferencesDidChange(WebKit::WebPreferencesStore store)
 
     SetUserAgent(WTF::String userAgent)

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list