1f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch/*
2f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch * Copyright (c) 2010, Google Inc. All rights reserved.
3f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch *
4f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch * Redistribution and use in source and binary forms, with or without
5f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch * modification, are permitted provided that the following conditions are
6f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch * met:
7f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch *
8f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch *     * Redistributions of source code must retain the above copyright
9f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch * notice, this list of conditions and the following disclaimer.
10f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch *     * Redistributions in binary form must reproduce the above
11f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch * copyright notice, this list of conditions and the following disclaimer
12f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch * in the documentation and/or other materials provided with the
13f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch * distribution.
14f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch *     * Neither the name of Google Inc. nor the names of its
15f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch * contributors may be used to endorse or promote products derived from
16f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch * this software without specific prior written permission.
17f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch *
18f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch */
30f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch
31f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch#ifndef V8_INSPECTOR_JAVASCRIPTCALLFRAME_H_
32f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch#define V8_INSPECTOR_JAVASCRIPTCALLFRAME_H_
33f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch
3462ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch#include <memory>
35f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch#include <vector>
36f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch
37f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch#include "src/base/macros.h"
38f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch
39f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch#include "include/v8.h"
40f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch
41f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdochnamespace v8_inspector {
42f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch
43f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdochclass JavaScriptCallFrame {
44f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch public:
45f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch  static std::unique_ptr<JavaScriptCallFrame> create(
46f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch      v8::Local<v8::Context> debuggerContext, v8::Local<v8::Object> callFrame) {
4762ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch    return std::unique_ptr<JavaScriptCallFrame>(
4862ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch        new JavaScriptCallFrame(debuggerContext, callFrame));
49f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch  }
50f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch  ~JavaScriptCallFrame();
51f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch
52f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch  int contextId() const;
53f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch
54f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch  bool isAtReturn() const;
5562ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch  v8::MaybeLocal<v8::Object> details() const;
56f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch
5762ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch  v8::MaybeLocal<v8::Value> evaluate(v8::Local<v8::Value> expression,
5862ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch                                     bool throwOnSideEffect);
59f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch  v8::MaybeLocal<v8::Value> restart();
60f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch  v8::MaybeLocal<v8::Value> setVariableValue(int scopeNumber,
61f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch                                             v8::Local<v8::Value> variableName,
62f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch                                             v8::Local<v8::Value> newValue);
63f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch
64f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch private:
65f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch  JavaScriptCallFrame(v8::Local<v8::Context> debuggerContext,
66f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch                      v8::Local<v8::Object> callFrame);
67f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch
68f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch  int callV8FunctionReturnInt(const char* name) const;
69f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch
70f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch  v8::Isolate* m_isolate;
71f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch  v8::Global<v8::Context> m_debuggerContext;
72f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch  v8::Global<v8::Object> m_callFrame;
73f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch
74f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch  DISALLOW_COPY_AND_ASSIGN(JavaScriptCallFrame);
75f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch};
76f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch
77f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdochusing JavaScriptCallFrames = std::vector<std::unique_ptr<JavaScriptCallFrame>>;
78f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch
79f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch}  // namespace v8_inspector
80f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch
81f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch#endif  // V8_INSPECTOR_JAVASCRIPTCALLFRAME_H_
82