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);