﻿//Licensed to the Apache Software Foundation(ASF) under one
//or more contributor license agreements.See the NOTICE file
//distributed with this work for additional information
//regarding copyright ownership.The ASF licenses this file
//to you under the Apache License, Version 2.0 (the
//"License"); you may not use this file except in compliance
//with the License.  You may obtain a copy of the License at
//
//  http://www.apache.org/licenses/LICENSE-2.0
//
//Unless required by applicable law or agreed to in writing,
//software distributed under the License is distributed on an
//"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
//KIND, either express or implied.  See the License for the
//specific language governing permissions and limitations
//under the License.

using Xilium.CefGlue;

namespace Paragon.Runtime.Plugins
{
    public class PluginV8Accessor : CefV8Accessor
    {
        protected override bool Get(string name, CefV8Value obj, out CefV8Value returnValue, out string exception)
        {
            var objectUserData = obj.GetUserData() as V8PluginAdapter;
            var scriptObject = objectUserData != null ? objectUserData.Plugin : null;
            if (scriptObject != null)
            {
                return scriptObject.GetProperty(name, out returnValue, out exception);
            }

            exception = null;
            returnValue = CefV8Value.CreateUndefined();
            return false;
        }

        protected override bool Set(string name, CefV8Value obj, CefV8Value value, out string exception)
        {
            var objectUserData = obj.GetUserData() as V8PluginAdapter;
            var scriptObject = objectUserData != null ? objectUserData.Plugin : null;
            if (scriptObject != null)
            {
                return scriptObject.SetProperty(name, value, out exception);
            }

            exception = null;
            return false;
        }
    }
}