JSMockContentFilterSettingsCustom.cpp [plain text]
#include "config.h"
#include "JSMockContentFilterSettings.h"
#if ENABLE(CONTENT_FILTERING)
#include "JSDOMBinding.h"
#include "JSDOMConvert.h"
#include "MockContentFilterSettings.h"
using namespace JSC;
namespace WebCore {
using Decision = MockContentFilterSettings::Decision;
using DecisionPoint = MockContentFilterSettings::DecisionPoint;
JSValue JSMockContentFilterSettings::decisionPoint(ExecState&) const
{
DecisionPoint decisionPoint = wrapped().decisionPoint();
switch (decisionPoint) {
case DecisionPoint::AfterWillSendRequest:
case DecisionPoint::AfterRedirect:
case DecisionPoint::AfterResponse:
case DecisionPoint::AfterAddData:
case DecisionPoint::AfterFinishedAddingData:
case DecisionPoint::Never:
return jsNumber(static_cast<uint8_t>(decisionPoint));
}
ASSERT_NOT_REACHED();
return jsUndefined();
}
void JSMockContentFilterSettings::setDecisionPoint(ExecState& state, JSValue value)
{
VM& vm = state.vm();
auto scope = DECLARE_THROW_SCOPE(vm);
uint8_t nativeValue { convert<IDLOctet>(state, value, IntegerConversionConfiguration::EnforceRange) };
RETURN_IF_EXCEPTION(scope, void());
DecisionPoint decisionPoint { static_cast<DecisionPoint>(nativeValue) };
switch (decisionPoint) {
case DecisionPoint::AfterWillSendRequest:
case DecisionPoint::AfterRedirect:
case DecisionPoint::AfterResponse:
case DecisionPoint::AfterAddData:
case DecisionPoint::AfterFinishedAddingData:
case DecisionPoint::Never:
wrapped().setDecisionPoint(decisionPoint);
return;
}
throwTypeError(&state, scope, String::format("%u is not a valid decisionPoint value.", nativeValue));
}
static inline JSValue toJSValue(Decision decision)
{
switch (decision) {
case Decision::Allow:
case Decision::Block:
return jsNumber(static_cast<uint8_t>(decision));
}
ASSERT_NOT_REACHED();
return jsUndefined();
}
static inline Decision toDecision(ExecState& state, JSValue value)
{
VM& vm = state.vm();
auto scope = DECLARE_THROW_SCOPE(vm);
uint8_t nativeValue { convert<IDLOctet>(state, value, IntegerConversionConfiguration::EnforceRange) };
RETURN_IF_EXCEPTION(scope, Decision::Allow);
Decision decision { static_cast<Decision>(nativeValue) };
switch (decision) {
case Decision::Allow:
case Decision::Block:
return decision;
}
throwTypeError(&state, scope, String::format("%u is not a valid decision value.", nativeValue));
return Decision::Allow;
}
JSValue JSMockContentFilterSettings::decision(ExecState&) const
{
return toJSValue(wrapped().decision());
}
void JSMockContentFilterSettings::setDecision(ExecState& state, JSValue value)
{
VM& vm = state.vm();
auto scope = DECLARE_THROW_SCOPE(vm);
Decision decision { toDecision(state, value) };
RETURN_IF_EXCEPTION(scope, void());
wrapped().setDecision(decision);
}
JSValue JSMockContentFilterSettings::unblockRequestDecision(ExecState&) const
{
return toJSValue(wrapped().unblockRequestDecision());
}
void JSMockContentFilterSettings::setUnblockRequestDecision(ExecState& state, JSValue value)
{
VM& vm = state.vm();
auto scope = DECLARE_THROW_SCOPE(vm);
Decision unblockRequestDecision { toDecision(state, value) };
RETURN_IF_EXCEPTION(scope, void());
wrapped().setUnblockRequestDecision(unblockRequestDecision);
}
};
#endif // ENABLE(CONTENT_FILTERING)