| // Copyright 2014 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef SANDBOX_LINUX_BPF_DSL_BPF_DSL_IMPL_H_ |
| #define SANDBOX_LINUX_BPF_DSL_BPF_DSL_IMPL_H_ |
| |
| #include "base/macros.h" |
| #include "base/memory/ref_counted.h" |
| #include "sandbox/linux/bpf_dsl/codegen.h" |
| #include "sandbox/sandbox_export.h" |
| |
| namespace sandbox { |
| namespace bpf_dsl { |
| class ErrorCode; |
| class PolicyCompiler; |
| |
| namespace internal { |
| |
| // Internal interface implemented by BoolExpr implementations. |
| class BoolExprImpl : public base::RefCounted<BoolExprImpl> { |
| public: |
| // Compile uses |pc| to emit a CodeGen::Node that conditionally continues |
| // to either |then_node| or |false_node|, depending on whether the represented |
| // boolean expression is true or false. |
| virtual CodeGen::Node Compile(PolicyCompiler* pc, |
| CodeGen::Node then_node, |
| CodeGen::Node else_node) const = 0; |
| |
| protected: |
| BoolExprImpl() {} |
| virtual ~BoolExprImpl() {} |
| |
| private: |
| friend class base::RefCounted<BoolExprImpl>; |
| DISALLOW_COPY_AND_ASSIGN(BoolExprImpl); |
| }; |
| |
| // Internal interface implemented by ResultExpr implementations. |
| class ResultExprImpl : public base::RefCounted<ResultExprImpl> { |
| public: |
| // Compile uses |pc| to emit a CodeGen::Node that executes the |
| // represented result expression. |
| virtual CodeGen::Node Compile(PolicyCompiler* pc) const = 0; |
| |
| // HasUnsafeTraps returns whether the result expression is or recursively |
| // contains an unsafe trap expression. |
| virtual bool HasUnsafeTraps() const; |
| |
| // IsAllow returns whether the result expression is an "allow" result. |
| virtual bool IsAllow() const; |
| |
| // IsAllow returns whether the result expression is a "deny" result. |
| virtual bool IsDeny() const; |
| |
| protected: |
| ResultExprImpl() {} |
| virtual ~ResultExprImpl() {} |
| |
| private: |
| friend class base::RefCounted<ResultExprImpl>; |
| DISALLOW_COPY_AND_ASSIGN(ResultExprImpl); |
| }; |
| |
| } // namespace internal |
| } // namespace bpf_dsl |
| } // namespace sandbox |
| |
| #endif // SANDBOX_LINUX_BPF_DSL_BPF_DSL_IMPL_H_ |