Skip to content

Commit

Permalink
fixup BindingHandler::Bind()
Browse files Browse the repository at this point in the history
  • Loading branch information
ataranto committed May 25, 2012
1 parent fb83908 commit 2f2324b
Showing 1 changed file with 9 additions and 8 deletions.
17 changes: 9 additions & 8 deletions CefSharp/BindingHandler.cpp
Expand Up @@ -246,24 +246,25 @@ namespace CefSharp

void BindingHandler::Bind(String^ name, Object^ obj, CefRefPtr<CefV8Value> window)
{
// wrap the managed object in an unmanaged wrapper
CefRefPtr<BindingData> bindingData = new BindingData(obj);
CefRefPtr<CefV8Handler> handler = static_cast<CefV8Handler*>(new BindingHandler());
CefRefPtr<CefBase> userData = static_cast<CefRefPtr<CefBase>>(bindingData);

// create the javascript object and associate the wrapped object
CefRefPtr<CefV8Value> wrappedObject = window->CreateObject(NULL);
wrappedObject->SetUserData(userData);

// build a list of methods on the bound object
array<MethodInfo^>^ methods = obj->GetType()->GetMethods(BindingFlags::Instance | BindingFlags::Public);

IList<String^>^ methodNames = gcnew List<String^>();
IDictionary<String^, Object^>^ methodNames = gcnew Dictionary<String^, Object^>();
for each(MethodInfo^ method in methods)
{
if(!methodNames->Contains(method->Name))
{
methodNames->Add(method->Name);
}
methodNames->Add(method->Name, nullptr);
}

for each(String^ methodName in methodNames)
// create a corresponding javascript method for each c# method
CefRefPtr<CefV8Handler> handler = static_cast<CefV8Handler*>(new BindingHandler());
for each(String^ methodName in methodNames->Keys)
{
CefString nameStr = toNative(methodName);
wrappedObject->SetValue(nameStr, CefV8Value::CreateFunction(nameStr, handler), V8_PROPERTY_ATTRIBUTE_NONE);
Expand Down

0 comments on commit 2f2324b

Please sign in to comment.