SIGN IN SIGN UP
cefsharp / CefSharp UNCLAIMED

.NET (WPF and Windows Forms) bindings for the Chromium Embedded Framework

0 0 55 C#
// Copyright © 2010-2016 The CefSharp Project. All rights reserved.
//
// Use of this source code is governed by a BSD-style license that can be found in the LICENSE file.
#pragma once
#include "Stdafx.h"
#include "WcfEnabledSubProcess.h"
using namespace System::ServiceModel;
namespace CefSharp
{
2016-05-31 08:27:58 +10:00
namespace BrowserSubprocess
{
void WcfEnabledSubProcess::OnBrowserCreated(CefBrowserWrapper^ browser)
{
if (!parentBrowserId.HasValue)
{
parentBrowserId = browser->BrowserId;
}
if (!parentProcessId.HasValue || !parentBrowserId.HasValue)
{
return;
}
auto browserId = browser->IsPopup ? parentBrowserId.Value : browser->BrowserId;
auto serviceName = RenderprocessClientFactory::GetServiceName(parentProcessId.Value, browserId);
auto binding = BrowserProcessServiceHost::CreateBinding();
auto channelFactory = gcnew ChannelFactory<IBrowserProcess^>(
binding,
gcnew EndpointAddress(serviceName)
);
channelFactory->Open();
auto browserProcess = channelFactory->CreateChannel();
auto clientChannel = ((IClientChannel^)browserProcess);
try
{
clientChannel->Open();
browser->ChannelFactory = channelFactory;
browser->BrowserProcess = browserProcess;
}
catch (Exception^)
{
}
}
void WcfEnabledSubProcess::OnBrowserDestroyed(CefBrowserWrapper^ browser)
{
auto channelFactory = browser->ChannelFactory;
if (channelFactory->State == CommunicationState::Opened)
{
channelFactory->Close();
}
auto clientChannel = ((IClientChannel^)browser->BrowserProcess);
if (clientChannel->State == CommunicationState::Opened)
{
clientChannel->Close();
}
browser->ChannelFactory = nullptr;
browser->BrowserProcess = nullptr;
}
}
}