Home | History | Annotate | Download | only in inspector
      1 /*
      2  * Copyright (C) 2011 Google Inc. All rights reserved.
      3  *
      4  * Redistribution and use in source and binary forms, with or without
      5  * modification, are permitted provided that the following conditions are
      6  * met:
      7  *
      8  *     * Redistributions of source code must retain the above copyright
      9  * notice, this list of conditions and the following disclaimer.
     10  *     * Redistributions in binary form must reproduce the above
     11  * copyright notice, this list of conditions and the following disclaimer
     12  * in the documentation and/or other materials provided with the
     13  * distribution.
     14  *     * Neither the name of Google Inc. nor the names of its
     15  * contributors may be used to endorse or promote products derived from
     16  * this software without specific prior written permission.
     17  *
     18  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     19  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     20  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
     21  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
     22  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     23  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     24  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     25  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     26  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     27  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     28  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     29  */
     30 
     31 #ifndef V8_INSPECTOR_V8RUNTIMEAGENTIMPL_H_
     32 #define V8_INSPECTOR_V8RUNTIMEAGENTIMPL_H_
     33 
     34 #include "src/base/macros.h"
     35 #include "src/inspector/protocol/Forward.h"
     36 #include "src/inspector/protocol/Runtime.h"
     37 
     38 #include "include/v8.h"
     39 
     40 namespace v8_inspector {
     41 
     42 class InjectedScript;
     43 class InspectedContext;
     44 class RemoteObjectIdBase;
     45 class V8ConsoleMessage;
     46 class V8InspectorImpl;
     47 class V8InspectorSessionImpl;
     48 
     49 using protocol::Response;
     50 using protocol::Maybe;
     51 
     52 class V8RuntimeAgentImpl : public protocol::Runtime::Backend {
     53  public:
     54   V8RuntimeAgentImpl(V8InspectorSessionImpl*, protocol::FrontendChannel*,
     55                      protocol::DictionaryValue* state);
     56   ~V8RuntimeAgentImpl() override;
     57   void restore();
     58 
     59   // Part of the protocol.
     60   Response enable() override;
     61   Response disable() override;
     62   void evaluate(const String16& expression, Maybe<String16> objectGroup,
     63                 Maybe<bool> includeCommandLineAPI, Maybe<bool> silent,
     64                 Maybe<int> executionContextId, Maybe<bool> returnByValue,
     65                 Maybe<bool> generatePreview, Maybe<bool> userGesture,
     66                 Maybe<bool> awaitPromise,
     67                 std::unique_ptr<EvaluateCallback>) override;
     68   void awaitPromise(const String16& promiseObjectId, Maybe<bool> returnByValue,
     69                     Maybe<bool> generatePreview,
     70                     std::unique_ptr<AwaitPromiseCallback>) override;
     71   void callFunctionOn(
     72       const String16& objectId, const String16& expression,
     73       Maybe<protocol::Array<protocol::Runtime::CallArgument>> optionalArguments,
     74       Maybe<bool> silent, Maybe<bool> returnByValue,
     75       Maybe<bool> generatePreview, Maybe<bool> userGesture,
     76       Maybe<bool> awaitPromise,
     77       std::unique_ptr<CallFunctionOnCallback>) override;
     78   Response releaseObject(const String16& objectId) override;
     79   Response getProperties(
     80       const String16& objectId, Maybe<bool> ownProperties,
     81       Maybe<bool> accessorPropertiesOnly, Maybe<bool> generatePreview,
     82       std::unique_ptr<protocol::Array<protocol::Runtime::PropertyDescriptor>>*
     83           result,
     84       Maybe<protocol::Array<protocol::Runtime::InternalPropertyDescriptor>>*
     85           internalProperties,
     86       Maybe<protocol::Runtime::ExceptionDetails>*) override;
     87   Response releaseObjectGroup(const String16& objectGroup) override;
     88   Response runIfWaitingForDebugger() override;
     89   Response setCustomObjectFormatterEnabled(bool) override;
     90   Response discardConsoleEntries() override;
     91   Response compileScript(const String16& expression, const String16& sourceURL,
     92                          bool persistScript, Maybe<int> executionContextId,
     93                          Maybe<String16>*,
     94                          Maybe<protocol::Runtime::ExceptionDetails>*) override;
     95   void runScript(const String16&, Maybe<int> executionContextId,
     96                  Maybe<String16> objectGroup, Maybe<bool> silent,
     97                  Maybe<bool> includeCommandLineAPI, Maybe<bool> returnByValue,
     98                  Maybe<bool> generatePreview, Maybe<bool> awaitPromise,
     99                  std::unique_ptr<RunScriptCallback>) override;
    100 
    101   void reset();
    102   void reportExecutionContextCreated(InspectedContext*);
    103   void reportExecutionContextDestroyed(InspectedContext*);
    104   void inspect(std::unique_ptr<protocol::Runtime::RemoteObject> objectToInspect,
    105                std::unique_ptr<protocol::DictionaryValue> hints);
    106   void messageAdded(V8ConsoleMessage*);
    107   bool enabled() const { return m_enabled; }
    108 
    109  private:
    110   bool reportMessage(V8ConsoleMessage*, bool generatePreview);
    111 
    112   V8InspectorSessionImpl* m_session;
    113   protocol::DictionaryValue* m_state;
    114   protocol::Runtime::Frontend m_frontend;
    115   V8InspectorImpl* m_inspector;
    116   bool m_enabled;
    117   protocol::HashMap<String16, std::unique_ptr<v8::Global<v8::Script>>>
    118       m_compiledScripts;
    119 
    120   DISALLOW_COPY_AND_ASSIGN(V8RuntimeAgentImpl);
    121 };
    122 
    123 }  // namespace v8_inspector
    124 
    125 #endif  // V8_INSPECTOR_V8RUNTIMEAGENTIMPL_H_
    126