// Copyright © 2015 The CefSharp Authors. All rights reserved. // // Use of this source code is governed by a BSD-style license that can be found in the LICENSE file. using System.Collections.Generic; using System.Linq; using System.ServiceModel.Channels; using System.ServiceModel.Description; using System.ServiceModel.Dispatcher; namespace CefSharp.Internals { internal sealed class JavascriptCallbackEndpointBehavior : IEndpointBehavior { private static readonly List Methods = new List { ReflectionUtils.GetMethodName(p => p.CallMethod(0, null, null)), }; private readonly IJavascriptCallbackFactory callbackFactory; public JavascriptCallbackEndpointBehavior(IJavascriptCallbackFactory callbackFactory) { this.callbackFactory = callbackFactory; } public void Validate(ServiceEndpoint endpoint) { } public void AddBindingParameters(ServiceEndpoint endpoint, BindingParameterCollection bindingParameters) { } public void ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher) { foreach (var operation in endpoint.Contract.Operations.Where(o => Methods.Contains(o.Name))) { operation.Behaviors.Find().DataContractSurrogate = new JavascriptCallbackSurrogate(callbackFactory); } } public void ApplyClientBehavior(ServiceEndpoint endpoint, ClientRuntime clientRuntime) { } } }