Title: [169990] trunk/Source/WebKit2
Revision
169990
Author
[email protected]
Date
2014-06-15 11:07:09 -0700 (Sun, 15 Jun 2014)

Log Message

invalidateCallbackMap doesn’t pass the error parameter on to invalidate(), so script completion handler is passed the wrong error
https://bugs.webkit.org/show_bug.cgi?id=133921
<rdar://problem/17316653>

Reviewed by Dan Bernstein.

* UIProcess/GenericCallback.h:
(WebKit::VoidCallback::performCallback):
(WebKit::VoidCallback::invalidate):
(WebKit::VoidAPICallback::create):
(WebKit::invalidateCallbackMap):
* UIProcess/Plugins/WebPluginSiteDataManager.cpp:
(WebKit::WebPluginSiteDataManager::invalidate):
(WebKit::WebPluginSiteDataManager::clearSiteData):
* UIProcess/WebApplicationCacheManagerProxy.cpp:
(WebKit::WebApplicationCacheManagerProxy::contextDestroyed):
(WebKit::WebApplicationCacheManagerProxy::processDidClose):
* UIProcess/WebContext.cpp:
(WebKit::WebContext::~WebContext):
* UIProcess/WebCookieManagerProxy.cpp:
(WebKit::WebCookieManagerProxy::contextDestroyed):
(WebKit::WebCookieManagerProxy::processDidClose):
* UIProcess/WebDatabaseManagerProxy.cpp:
(WebKit::WebDatabaseManagerProxy::contextDestroyed):
(WebKit::WebDatabaseManagerProxy::processDidClose):
* UIProcess/WebMediaCacheManagerProxy.cpp:
(WebKit::WebMediaCacheManagerProxy::contextDestroyed):
(WebKit::WebMediaCacheManagerProxy::processDidClose):
* UIProcess/WebOriginDataManagerProxy.cpp:
(WebKit::WebOriginDataManagerProxy::contextDestroyed):
(WebKit::WebOriginDataManagerProxy::processDidClose):
* UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::forceRepaint):
(WebKit::WebPageProxy::resetState):
* UIProcess/WebResourceCacheManagerProxy.cpp:
(WebKit::WebResourceCacheManagerProxy::contextDestroyed):
(WebKit::WebResourceCacheManagerProxy::processDidClose):
* UIProcess/mac/WKFullScreenWindowController.mm:
(-[WKFullScreenWindowController dealloc]):
(-[WKFullScreenWindowController finishedExitFullScreenAnimation:]):

Modified Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (169989 => 169990)


--- trunk/Source/WebKit2/ChangeLog	2014-06-15 16:33:58 UTC (rev 169989)
+++ trunk/Source/WebKit2/ChangeLog	2014-06-15 18:07:09 UTC (rev 169990)
@@ -1,3 +1,46 @@
+2014-06-15  Anders Carlsson  <[email protected]>
+
+        invalidateCallbackMap doesn’t pass the error parameter on to invalidate(), so script completion handler is passed the wrong error
+        https://bugs.webkit.org/show_bug.cgi?id=133921
+        <rdar://problem/17316653>
+
+        Reviewed by Dan Bernstein.
+
+        * UIProcess/GenericCallback.h:
+        (WebKit::VoidCallback::performCallback):
+        (WebKit::VoidCallback::invalidate):
+        (WebKit::VoidAPICallback::create):
+        (WebKit::invalidateCallbackMap):
+        * UIProcess/Plugins/WebPluginSiteDataManager.cpp:
+        (WebKit::WebPluginSiteDataManager::invalidate):
+        (WebKit::WebPluginSiteDataManager::clearSiteData):
+        * UIProcess/WebApplicationCacheManagerProxy.cpp:
+        (WebKit::WebApplicationCacheManagerProxy::contextDestroyed):
+        (WebKit::WebApplicationCacheManagerProxy::processDidClose):
+        * UIProcess/WebContext.cpp:
+        (WebKit::WebContext::~WebContext):
+        * UIProcess/WebCookieManagerProxy.cpp:
+        (WebKit::WebCookieManagerProxy::contextDestroyed):
+        (WebKit::WebCookieManagerProxy::processDidClose):
+        * UIProcess/WebDatabaseManagerProxy.cpp:
+        (WebKit::WebDatabaseManagerProxy::contextDestroyed):
+        (WebKit::WebDatabaseManagerProxy::processDidClose):
+        * UIProcess/WebMediaCacheManagerProxy.cpp:
+        (WebKit::WebMediaCacheManagerProxy::contextDestroyed):
+        (WebKit::WebMediaCacheManagerProxy::processDidClose):
+        * UIProcess/WebOriginDataManagerProxy.cpp:
+        (WebKit::WebOriginDataManagerProxy::contextDestroyed):
+        (WebKit::WebOriginDataManagerProxy::processDidClose):
+        * UIProcess/WebPageProxy.cpp:
+        (WebKit::WebPageProxy::forceRepaint):
+        (WebKit::WebPageProxy::resetState):
+        * UIProcess/WebResourceCacheManagerProxy.cpp:
+        (WebKit::WebResourceCacheManagerProxy::contextDestroyed):
+        (WebKit::WebResourceCacheManagerProxy::processDidClose):
+        * UIProcess/mac/WKFullScreenWindowController.mm:
+        (-[WKFullScreenWindowController dealloc]):
+        (-[WKFullScreenWindowController finishedExitFullScreenAnimation:]):
+
 2014-06-15  Zan Dobersek  <[email protected]>
 
         Unreviewed build fix for the GTK+ port after r169987.

Modified: trunk/Source/WebKit2/UIProcess/GenericCallback.h (169989 => 169990)


--- trunk/Source/WebKit2/UIProcess/GenericCallback.h	2014-06-15 16:33:58 UTC (rev 169989)
+++ trunk/Source/WebKit2/UIProcess/GenericCallback.h	2014-06-15 18:07:09 UTC (rev 169990)
@@ -71,7 +71,7 @@
 
 class VoidCallback : public CallbackBase {
 public:
-    typedef std::function<void (bool)> CallbackFunction;
+    typedef std::function<void (Error)> CallbackFunction;
 
     static PassRefPtr<VoidCallback> create(CallbackFunction callback)
     {
@@ -88,17 +88,17 @@
         if (!m_callback)
             return;
 
-        m_callback(false);
+        m_callback(Error::None);
 
         m_callback = nullptr;
     }
     
-    void invalidate()
+    void invalidate(Error error)
     {
         if (!m_callback)
             return;
 
-        m_callback(true);
+        m_callback(error);
 
         m_callback = nullptr;
     }
@@ -118,8 +118,8 @@
 
     static PassRefPtr<VoidCallback> create(void* context, CallbackFunction callback)
     {
-        return VoidCallback::create([context, callback](bool error) {
-            callback(error ? toAPI(API::Error::create().get()) : 0, context);
+        return VoidCallback::create([context, callback](Error error) {
+            callback(error != Error::None ? toAPI(API::Error::create().get()) : 0, context);
         });
     }
 };
@@ -180,13 +180,14 @@
 typedef GenericCallback<const ShareableBitmap::Handle&> ImageCallback;
 
 template<typename T>
-void invalidateCallbackMap(HashMap<uint64_t, T>& map, CallbackBase::Error error = CallbackBase::Error::Unknown)
+void invalidateCallbackMap(HashMap<uint64_t, T>& callbackMap, CallbackBase::Error error)
 {
-    Vector<T> callbacksVector;
-    copyValuesToVector(map, callbacksVector);
-    for (size_t i = 0, size = callbacksVector.size(); i < size; ++i)
-        callbacksVector[i]->invalidate();
-    map.clear();
+    Vector<T> callbacks;
+    copyValuesToVector(callbackMap, callbacks);
+    for (auto& callback : callbacks)
+        callback->invalidate(error);
+
+    callbackMap.clear();
 }
 
 } // namespace WebKit

Modified: trunk/Source/WebKit2/UIProcess/Plugins/WebPluginSiteDataManager.cpp (169989 => 169990)


--- trunk/Source/WebKit2/UIProcess/Plugins/WebPluginSiteDataManager.cpp	2014-06-15 16:33:58 UTC (rev 169989)
+++ trunk/Source/WebKit2/UIProcess/Plugins/WebPluginSiteDataManager.cpp	2014-06-15 18:07:09 UTC (rev 169990)
@@ -132,7 +132,7 @@
 
 void WebPluginSiteDataManager::invalidate()
 {
-    invalidateCallbackMap(m_arrayCallbacks);
+    invalidateCallbackMap(m_arrayCallbacks, CallbackBase::Error::OwnerWasInvalidated);
 
     m_pendingGetSitesWithData.clear();
     m_pendingClearSiteData.clear();
@@ -172,7 +172,8 @@
 {
     RefPtr<VoidCallback> callback = prpCallback;
     if (!m_webContext) {
-        callback->invalidate();
+        // FIXME: If the context is invalid we should not call the callback. It'd be better to just return false from clearSiteData.
+        callback->invalidate(CallbackBase::Error::OwnerWasInvalidated);
         return;
     }
 

Modified: trunk/Source/WebKit2/UIProcess/WebApplicationCacheManagerProxy.cpp (169989 => 169990)


--- trunk/Source/WebKit2/UIProcess/WebApplicationCacheManagerProxy.cpp	2014-06-15 16:33:58 UTC (rev 169989)
+++ trunk/Source/WebKit2/UIProcess/WebApplicationCacheManagerProxy.cpp	2014-06-15 18:07:09 UTC (rev 169990)
@@ -57,12 +57,12 @@
 
 void WebApplicationCacheManagerProxy::contextDestroyed()
 {
-    invalidateCallbackMap(m_arrayCallbacks);
+    invalidateCallbackMap(m_arrayCallbacks, CallbackBase::Error::OwnerWasInvalidated);
 }
 
 void WebApplicationCacheManagerProxy::processDidClose(WebProcessProxy*)
 {
-    invalidateCallbackMap(m_arrayCallbacks);
+    invalidateCallbackMap(m_arrayCallbacks, CallbackBase::Error::ProcessExited);
 }
 
 bool WebApplicationCacheManagerProxy::shouldTerminate(WebProcessProxy*) const

Modified: trunk/Source/WebKit2/UIProcess/WebContext.cpp (169989 => 169990)


--- trunk/Source/WebKit2/UIProcess/WebContext.cpp	2014-06-15 16:33:58 UTC (rev 169989)
+++ trunk/Source/WebKit2/UIProcess/WebContext.cpp	2014-06-15 18:07:09 UTC (rev 169990)
@@ -262,7 +262,7 @@
     m_pluginSiteDataManager->clearContext();
 #endif
 
-    invalidateCallbackMap(m_dictionaryCallbacks);
+    invalidateCallbackMap(m_dictionaryCallbacks, CallbackBase::Error::OwnerWasInvalidated);
 
     platformInvalidateContext();
 

Modified: trunk/Source/WebKit2/UIProcess/WebCookieManagerProxy.cpp (169989 => 169990)


--- trunk/Source/WebKit2/UIProcess/WebCookieManagerProxy.cpp	2014-06-15 16:33:58 UTC (rev 169989)
+++ trunk/Source/WebKit2/UIProcess/WebCookieManagerProxy.cpp	2014-06-15 18:07:09 UTC (rev 169990)
@@ -67,20 +67,20 @@
 
 void WebCookieManagerProxy::contextDestroyed()
 {
-    invalidateCallbackMap(m_arrayCallbacks);
-    invalidateCallbackMap(m_httpCookieAcceptPolicyCallbacks);
+    invalidateCallbackMap(m_arrayCallbacks, CallbackBase::Error::OwnerWasInvalidated);
+    invalidateCallbackMap(m_httpCookieAcceptPolicyCallbacks, CallbackBase::Error::OwnerWasInvalidated);
 }
 
 void WebCookieManagerProxy::processDidClose(WebProcessProxy*)
 {
-    invalidateCallbackMap(m_arrayCallbacks);
-    invalidateCallbackMap(m_httpCookieAcceptPolicyCallbacks);
+    invalidateCallbackMap(m_arrayCallbacks, CallbackBase::Error::ProcessExited);
+    invalidateCallbackMap(m_httpCookieAcceptPolicyCallbacks, CallbackBase::Error::ProcessExited);
 }
 
 void WebCookieManagerProxy::processDidClose(NetworkProcessProxy*)
 {
-    invalidateCallbackMap(m_arrayCallbacks);
-    invalidateCallbackMap(m_httpCookieAcceptPolicyCallbacks);
+    invalidateCallbackMap(m_arrayCallbacks, CallbackBase::Error::ProcessExited);
+    invalidateCallbackMap(m_httpCookieAcceptPolicyCallbacks, CallbackBase::Error::ProcessExited);
 }
 
 bool WebCookieManagerProxy::shouldTerminate(WebProcessProxy*) const

Modified: trunk/Source/WebKit2/UIProcess/WebDatabaseManagerProxy.cpp (169989 => 169990)


--- trunk/Source/WebKit2/UIProcess/WebDatabaseManagerProxy.cpp	2014-06-15 16:33:58 UTC (rev 169989)
+++ trunk/Source/WebKit2/UIProcess/WebDatabaseManagerProxy.cpp	2014-06-15 18:07:09 UTC (rev 169990)
@@ -129,12 +129,12 @@
 
 void WebDatabaseManagerProxy::contextDestroyed()
 {
-    invalidateCallbackMap(m_arrayCallbacks);
+    invalidateCallbackMap(m_arrayCallbacks, CallbackBase::Error::OwnerWasInvalidated);
 }
 
 void WebDatabaseManagerProxy::processDidClose(WebProcessProxy*)
 {
-    invalidateCallbackMap(m_arrayCallbacks);
+    invalidateCallbackMap(m_arrayCallbacks, CallbackBase::Error::ProcessExited);
 }
 
 bool WebDatabaseManagerProxy::shouldTerminate(WebProcessProxy*) const

Modified: trunk/Source/WebKit2/UIProcess/WebMediaCacheManagerProxy.cpp (169989 => 169990)


--- trunk/Source/WebKit2/UIProcess/WebMediaCacheManagerProxy.cpp	2014-06-15 16:33:58 UTC (rev 169989)
+++ trunk/Source/WebKit2/UIProcess/WebMediaCacheManagerProxy.cpp	2014-06-15 18:07:09 UTC (rev 169990)
@@ -58,12 +58,12 @@
 
 void WebMediaCacheManagerProxy::contextDestroyed()
 {
-    invalidateCallbackMap(m_arrayCallbacks);
+    invalidateCallbackMap(m_arrayCallbacks, CallbackBase::Error::OwnerWasInvalidated);
 }
 
 void WebMediaCacheManagerProxy::processDidClose(WebProcessProxy*)
 {
-    invalidateCallbackMap(m_arrayCallbacks);
+    invalidateCallbackMap(m_arrayCallbacks, CallbackBase::Error::ProcessExited);
 }
 
 bool WebMediaCacheManagerProxy::shouldTerminate(WebProcessProxy*) const

Modified: trunk/Source/WebKit2/UIProcess/WebOriginDataManagerProxy.cpp (169989 => 169990)


--- trunk/Source/WebKit2/UIProcess/WebOriginDataManagerProxy.cpp	2014-06-15 16:33:58 UTC (rev 169989)
+++ trunk/Source/WebKit2/UIProcess/WebOriginDataManagerProxy.cpp	2014-06-15 18:07:09 UTC (rev 169990)
@@ -57,12 +57,12 @@
 
 void WebOriginDataManagerProxy::contextDestroyed()
 {
-    invalidateCallbackMap(m_arrayCallbacks);
+    invalidateCallbackMap(m_arrayCallbacks, CallbackBase::Error::OwnerWasInvalidated);
 }
 
 void WebOriginDataManagerProxy::processDidClose(WebProcessProxy*)
 {
-    invalidateCallbackMap(m_arrayCallbacks);
+    invalidateCallbackMap(m_arrayCallbacks, CallbackBase::Error::ProcessExited);
 }
 
 bool WebOriginDataManagerProxy::shouldTerminate(WebProcessProxy*) const

Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp (169989 => 169990)


--- trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp	2014-06-15 16:33:58 UTC (rev 169989)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp	2014-06-15 18:07:09 UTC (rev 169990)
@@ -2335,7 +2335,8 @@
 {
     RefPtr<VoidCallback> callback = prpCallback;
     if (!isValid()) {
-        callback->invalidate();
+        // FIXME: If the page is invalid we should not call the callback. It'd be better to just return false from forceRepaint.
+        callback->invalidate(CallbackBase::Error::OwnerWasInvalidated);
         return;
     }
 
@@ -4278,19 +4279,19 @@
         break;
     }
 
-    invalidateCallbackMap(m_voidCallbacks);
-    invalidateCallbackMap(m_dataCallbacks);
-    invalidateCallbackMap(m_imageCallbacks);
-    invalidateCallbackMap(m_stringCallbacks);
+    invalidateCallbackMap(m_voidCallbacks, error);
+    invalidateCallbackMap(m_dataCallbacks, error);
+    invalidateCallbackMap(m_imageCallbacks, error);
+    invalidateCallbackMap(m_stringCallbacks, error);
     m_loadDependentStringCallbackIDs.clear();
     invalidateCallbackMap(m_scriptValueCallbacks, error);
-    invalidateCallbackMap(m_computedPagesCallbacks);
-    invalidateCallbackMap(m_validateCommandCallbacks);
-    invalidateCallbackMap(m_unsignedCallbacks);
-    invalidateCallbackMap(m_editingRangeCallbacks);
-    invalidateCallbackMap(m_rectForCharacterRangeCallbacks);
+    invalidateCallbackMap(m_computedPagesCallbacks, error);
+    invalidateCallbackMap(m_validateCommandCallbacks, error);
+    invalidateCallbackMap(m_unsignedCallbacks, error);
+    invalidateCallbackMap(m_editingRangeCallbacks, error);
+    invalidateCallbackMap(m_rectForCharacterRangeCallbacks, error);
 #if PLATFORM(MAC)
-    invalidateCallbackMap(m_attributedStringForCharacterRangeCallbacks);
+    invalidateCallbackMap(m_attributedStringForCharacterRangeCallbacks, error);
 #endif
 #if PLATFORM(IOS)
     invalidateCallbackMap(m_gestureCallbacks);

Modified: trunk/Source/WebKit2/UIProcess/WebResourceCacheManagerProxy.cpp (169989 => 169990)


--- trunk/Source/WebKit2/UIProcess/WebResourceCacheManagerProxy.cpp	2014-06-15 16:33:58 UTC (rev 169989)
+++ trunk/Source/WebKit2/UIProcess/WebResourceCacheManagerProxy.cpp	2014-06-15 18:07:09 UTC (rev 169990)
@@ -65,12 +65,12 @@
 
 void WebResourceCacheManagerProxy::contextDestroyed()
 {
-    invalidateCallbackMap(m_arrayCallbacks);
+    invalidateCallbackMap(m_arrayCallbacks, CallbackBase::Error::OwnerWasInvalidated);
 }
 
 void WebResourceCacheManagerProxy::processDidClose(WebProcessProxy*)
 {
-    invalidateCallbackMap(m_arrayCallbacks);
+    invalidateCallbackMap(m_arrayCallbacks, CallbackBase::Error::ProcessExited);
 }
 
 bool WebResourceCacheManagerProxy::shouldTerminate(WebProcessProxy*) const

Modified: trunk/Source/WebKit2/UIProcess/mac/WKFullScreenWindowController.mm (169989 => 169990)


--- trunk/Source/WebKit2/UIProcess/mac/WKFullScreenWindowController.mm	2014-06-15 16:33:58 UTC (rev 169989)
+++ trunk/Source/WebKit2/UIProcess/mac/WKFullScreenWindowController.mm	2014-06-15 18:07:09 UTC (rev 169990)
@@ -111,7 +111,7 @@
     [[NSNotificationCenter defaultCenter] removeObserver:self];
 
     if (_repaintCallback) {
-        _repaintCallback->invalidate();
+        _repaintCallback->invalidate(CallbackBase::Error::OwnerWasInvalidated);
         // invalidate() calls completeFinishExitFullScreenAnimationAfterRepaint, which
         // clears _repaintCallback.
         ASSERT(!_repaintCallback);
@@ -409,12 +409,12 @@
     [self _manager]->restoreScrollPosition();
 
     if (_repaintCallback) {
-        _repaintCallback->invalidate();
+        _repaintCallback->invalidate(CallbackBase::Error::OwnerWasInvalidated);
         // invalidate() calls completeFinishExitFullScreenAnimationAfterRepaint, which
         // clears _repaintCallback.
         ASSERT(!_repaintCallback);
     }
-    _repaintCallback = VoidCallback::create([self](bool) {
+    _repaintCallback = VoidCallback::create([self](CallbackBase::Error) {
         [self completeFinishExitFullScreenAnimationAfterRepaint];
     });
     [self _page]->forceRepaint(_repaintCallback);
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to