// Copyright 2017 PDFium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com

#include "fxjs/xfa/cjx_filter.h"

#include "xfa/fxfa/parser/cxfa_filter.h"

CJX_Filter::CJX_Filter(CXFA_Filter* node) : CJX_Node(node) {}

CJX_Filter::~CJX_Filter() = default;

void CJX_Filter::use(CFXJSE_Value* pValue,
                     bool bSetting,
                     XFA_Attribute eAttribute) {
  ScriptAttributeString(pValue, bSetting, eAttribute);
}

void CJX_Filter::usehref(CFXJSE_Value* pValue,
                         bool bSetting,
                         XFA_Attribute eAttribute) {
  ScriptAttributeString(pValue, bSetting, eAttribute);
}

void CJX_Filter::addRevocationInfo(CFXJSE_Value* pValue,
                                   bool bSetting,
                                   XFA_Attribute eAttribute) {
  ScriptAttributeString(pValue, bSetting, eAttribute);
}
