summaryrefslogtreecommitdiff
path: root/fxjs/cjs_result.h
diff options
context:
space:
mode:
Diffstat (limited to 'fxjs/cjs_result.h')
-rw-r--r--fxjs/cjs_result.h57
1 files changed, 57 insertions, 0 deletions
diff --git a/fxjs/cjs_result.h b/fxjs/cjs_result.h
new file mode 100644
index 0000000000..dc65d18c73
--- /dev/null
+++ b/fxjs/cjs_result.h
@@ -0,0 +1,57 @@
+// 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
+
+#ifndef FXJS_CJS_RESULT_H_
+#define FXJS_CJS_RESULT_H_
+
+#include "fxjs/cfxjs_engine.h"
+#include "fxjs/js_resources.h"
+#include "third_party/base/optional.h"
+
+class CJS_Result {
+ public:
+ // Wrap constructors with static methods so we can apply WARN_UNUSED_RESULT,
+ // otherwise we can't catch places where someone mistakenly writes:
+ //
+ // if (error)
+ // CJS_Result(JS_ERROR_CODE);
+ //
+ // instead of
+ //
+ // if (error)
+ // return CJS_Result(JS_ERROR_CODE);
+ //
+ static CJS_Result Success() WARN_UNUSED_RESULT { return CJS_Result(); }
+ static CJS_Result Success(v8::Local<v8::Value> value) WARN_UNUSED_RESULT {
+ return CJS_Result(value);
+ }
+ static CJS_Result Failure(const WideString& str) WARN_UNUSED_RESULT {
+ return CJS_Result(str);
+ }
+ static CJS_Result Failure(JSMessage id) WARN_UNUSED_RESULT {
+ return CJS_Result(id);
+ }
+
+ CJS_Result(const CJS_Result&);
+ ~CJS_Result();
+
+ bool HasError() const { return error_.has_value(); }
+ WideString Error() const { return error_.value(); }
+
+ bool HasReturn() const { return !return_.IsEmpty(); }
+ v8::Local<v8::Value> Return() const { return return_; }
+
+ private:
+ CJS_Result(); // Successful but empty return.
+ explicit CJS_Result(v8::Local<v8::Value>); // Successful return with value.
+ explicit CJS_Result(const WideString&); // Error with custom message.
+ explicit CJS_Result(JSMessage id); // Error with stock message.
+
+ Optional<WideString> error_;
+ v8::Local<v8::Value> return_;
+};
+
+#endif // FXJS_CJS_RESULT_H_