bug 1158561 - [e10s] Browser hang in PluginModuleParent::NPP_ClearSiteData() r=jimm,mak
This commit is contained in:
@@ -2654,35 +2654,34 @@ PluginModuleChromeParent::UpdatePluginTimeout()
|
||||
}
|
||||
|
||||
nsresult
|
||||
PluginModuleParent::NPP_ClearSiteData(const char* site, uint64_t flags,
|
||||
uint64_t maxAge)
|
||||
PluginModuleParent::NPP_ClearSiteData(const char* site, uint64_t flags, uint64_t maxAge,
|
||||
nsCOMPtr<nsIClearSiteDataCallback> callback)
|
||||
{
|
||||
if (!mClearSiteDataSupported)
|
||||
return NS_ERROR_NOT_AVAILABLE;
|
||||
|
||||
NPError result;
|
||||
if (!CallNPP_ClearSiteData(NullableString(site), flags, maxAge, &result))
|
||||
return NS_ERROR_FAILURE;
|
||||
static uint64_t callbackId = 0;
|
||||
callbackId++;
|
||||
mClearSiteDataCallbacks[callbackId] = callback;
|
||||
|
||||
switch (result) {
|
||||
case NPERR_NO_ERROR:
|
||||
return NS_OK;
|
||||
case NPERR_TIME_RANGE_NOT_SUPPORTED:
|
||||
return NS_ERROR_PLUGIN_TIME_RANGE_NOT_SUPPORTED;
|
||||
case NPERR_MALFORMED_SITE:
|
||||
return NS_ERROR_INVALID_ARG;
|
||||
default:
|
||||
if (!SendNPP_ClearSiteData(NullableString(site), flags, maxAge, callbackId)) {
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
nsresult
|
||||
PluginModuleParent::NPP_GetSitesWithData(InfallibleTArray<nsCString>& result)
|
||||
PluginModuleParent::NPP_GetSitesWithData(nsCOMPtr<nsIGetSitesWithDataCallback> callback)
|
||||
{
|
||||
if (!mGetSitesWithDataSupported)
|
||||
return NS_ERROR_NOT_AVAILABLE;
|
||||
|
||||
if (!CallNPP_GetSitesWithData(&result))
|
||||
static uint64_t callbackId = 0;
|
||||
callbackId++;
|
||||
mSitesWithDataCallbacks[callbackId] = callback;
|
||||
|
||||
if (!SendNPP_GetSitesWithData(callbackId))
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
return NS_OK;
|
||||
@@ -2936,6 +2935,49 @@ PluginModuleChromeParent::RecvNotifyContentModuleDestroyed()
|
||||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
PluginModuleParent::RecvReturnClearSiteData(const NPError& aRv,
|
||||
const uint64_t& aCallbackId)
|
||||
{
|
||||
if (mClearSiteDataCallbacks.find(aCallbackId) == mClearSiteDataCallbacks.end()) {
|
||||
return true;
|
||||
}
|
||||
if (!!mClearSiteDataCallbacks[aCallbackId]) {
|
||||
nsresult rv;
|
||||
switch (aRv) {
|
||||
case NPERR_NO_ERROR:
|
||||
rv = NS_OK;
|
||||
break;
|
||||
case NPERR_TIME_RANGE_NOT_SUPPORTED:
|
||||
rv = NS_ERROR_PLUGIN_TIME_RANGE_NOT_SUPPORTED;
|
||||
break;
|
||||
case NPERR_MALFORMED_SITE:
|
||||
rv = NS_ERROR_INVALID_ARG;
|
||||
break;
|
||||
default:
|
||||
rv = NS_ERROR_FAILURE;
|
||||
}
|
||||
mClearSiteDataCallbacks[aCallbackId]->Callback(rv);
|
||||
}
|
||||
mClearSiteDataCallbacks.erase(aCallbackId);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
PluginModuleParent::RecvReturnSitesWithData(nsTArray<nsCString>&& aSites,
|
||||
const uint64_t& aCallbackId)
|
||||
{
|
||||
if (mSitesWithDataCallbacks.find(aCallbackId) == mSitesWithDataCallbacks.end()) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!!mSitesWithDataCallbacks[aCallbackId]) {
|
||||
mSitesWithDataCallbacks[aCallbackId]->SitesWithData(aSites);
|
||||
}
|
||||
mSitesWithDataCallbacks.erase(aCallbackId);
|
||||
return true;
|
||||
}
|
||||
|
||||
#ifdef MOZ_CRASHREPORTER_INJECTOR
|
||||
|
||||
// We only add the crash reporter to subprocess which have the filename
|
||||
|
||||
Reference in New Issue
Block a user