Files
UnrealEngineUWP/Engine/Source/Programs/UnrealCEFSubProcess/Private/UnrealCEFSubProcessCallbackRegistry.cpp
Keli Hlodversson 9921c930cd [INTEGRATE] Merging CL#2620775 using UE4-To-UE4-LauncherDev:
Fix null pointer error in UnrealCEFSubProcess when passing the same callback handler more than once to a bound UObject method.
rb: Wes.Fudala

[CL 2620782 by Keli Hlodversson in Main branch]
2015-07-14 16:06:52 -04:00

44 lines
1.2 KiB
C++

// Copyright 1998-2015 Epic Games, Inc. All Rights Reserved.
#include "UnrealCEFSubProcess.h"
#include "UnrealCEFSubProcessCallbackRegistry.h"
#if WITH_CEF3
FGuid FUnrealCEFSubProcessCallbackRegistry::FindOrAdd(CefRefPtr<CefV8Context> Context, CefRefPtr<CefV8Value> Object, CefRefPtr<CefV8Value> Function, CefRefPtr<CefV8Value> OnError, bool bOneShot)
{
if (! bOneShot)
{
for(auto Iter = CreateIterator(); Iter; ++Iter)
{
auto Value = Iter.Value();
if (! Value.bOneShot
&& Context->IsSame(Value.Context)
&& Function->IsSame(Value.Function)
&& (Object == nullptr && Value.Object == nullptr || Object->IsSame(Value.Object))
&& (OnError == nullptr && Value.OnError == nullptr || OnError->IsSame(Value.OnError)))
{
return Iter.Key();
}
}
}
// If not found or one-shot, add new entry to the map
FGuid Guid = FGuid::NewGuid();
Add(Guid, FUnrealCEFSubProcessCallbackRegistryEntry(Context, Object, Function, OnError, bOneShot));
return Guid;
}
void FUnrealCEFSubProcessCallbackRegistry::RemoveByContext(CefRefPtr<CefV8Context> Context)
{
for(auto Iter = CreateIterator(); Iter; ++Iter)
{
if (Context->IsSame(Iter.Value().Context))
{
Iter.RemoveCurrent();
}
}
}
#endif // WITH_CEF3