summaryrefslogtreecommitdiff
path: root/Source/JavaScriptCore/inspector/InspectorBackendDispatcher.h
diff options
context:
space:
mode:
Diffstat (limited to 'Source/JavaScriptCore/inspector/InspectorBackendDispatcher.h')
-rw-r--r--Source/JavaScriptCore/inspector/InspectorBackendDispatcher.h97
1 files changed, 59 insertions, 38 deletions
diff --git a/Source/JavaScriptCore/inspector/InspectorBackendDispatcher.h b/Source/JavaScriptCore/inspector/InspectorBackendDispatcher.h
index 0a55a1c96..db976bd96 100644
--- a/Source/JavaScriptCore/inspector/InspectorBackendDispatcher.h
+++ b/Source/JavaScriptCore/inspector/InspectorBackendDispatcher.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2013 Apple Inc. All Rights Reserved.
+ * Copyright (C) 2013, 2015 Apple Inc. All Rights Reserved.
* Copyright (C) 2011 The Chromium Authors. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -24,52 +24,53 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#ifndef InspectorBackendDispatcher_h
-#define InspectorBackendDispatcher_h
+#pragma once
-#include "InspectorValues.h"
-#include <wtf/PassRefPtr.h>
+#include "InspectorFrontendRouter.h"
+#include "InspectorProtocolTypes.h"
+#include <wtf/DeprecatedOptional.h>
+#include <wtf/Optional.h>
#include <wtf/RefCounted.h>
#include <wtf/text/WTFString.h>
namespace Inspector {
-class InspectorBackendDispatcher;
-class InspectorFrontendChannel;
+class BackendDispatcher;
+
typedef String ErrorString;
-class InspectorSupplementalBackendDispatcher : public RefCounted<InspectorSupplementalBackendDispatcher> {
+class JS_EXPORT_PRIVATE SupplementalBackendDispatcher : public RefCounted<SupplementalBackendDispatcher> {
public:
- InspectorSupplementalBackendDispatcher(InspectorBackendDispatcher* backendDispatcher) : m_backendDispatcher(backendDispatcher) { }
- virtual ~InspectorSupplementalBackendDispatcher() { }
- virtual void dispatch(long callId, const String& method, PassRefPtr<InspectorObject> message) = 0;
+ SupplementalBackendDispatcher(BackendDispatcher&);
+ virtual ~SupplementalBackendDispatcher();
+ virtual void dispatch(long requestId, const String& method, Ref<InspectorObject>&& message) = 0;
protected:
- RefPtr<InspectorBackendDispatcher> m_backendDispatcher;
+ Ref<BackendDispatcher> m_backendDispatcher;
};
-class JS_EXPORT_PRIVATE InspectorBackendDispatcher : public RefCounted<InspectorBackendDispatcher> {
+class JS_EXPORT_PRIVATE BackendDispatcher : public RefCounted<BackendDispatcher> {
public:
- static PassRefPtr<InspectorBackendDispatcher> create(InspectorFrontendChannel*);
+ static Ref<BackendDispatcher> create(Ref<FrontendRouter>&&);
class JS_EXPORT_PRIVATE CallbackBase : public RefCounted<CallbackBase> {
public:
- CallbackBase(PassRefPtr<InspectorBackendDispatcher>, int id);
+ CallbackBase(Ref<BackendDispatcher>&&, long requestId);
bool isActive() const;
- void sendFailure(const ErrorString&);
void disable() { m_alreadySent = true; }
- protected:
- void sendIfActive(PassRefPtr<InspectorObject> partialMessage, const ErrorString& invocationError);
+ void sendSuccess(RefPtr<InspectorObject>&&);
+ void sendFailure(const ErrorString&);
private:
- RefPtr<InspectorBackendDispatcher> m_backendDispatcher;
- int m_id;
- bool m_alreadySent;
+ Ref<BackendDispatcher> m_backendDispatcher;
+ long m_requestId;
+ bool m_alreadySent { false };
};
- void clearFrontend() { m_inspectorFrontendChannel = nullptr; }
- bool isActive() const { return !!m_inspectorFrontendChannel; }
+ bool isActive() const;
+
+ bool hasProtocolErrors() const { return m_protocolErrors.size() > 0; }
enum CommonErrorCode {
ParseError = 0,
@@ -80,26 +81,46 @@ public:
ServerError
};
- void registerDispatcherForDomain(const String& domain, InspectorSupplementalBackendDispatcher*);
+ void registerDispatcherForDomain(const String& domain, SupplementalBackendDispatcher*);
void dispatch(const String& message);
- void sendResponse(long callId, PassRefPtr<InspectorObject> result, const ErrorString& invocationError);
- void reportProtocolError(const long* const callId, CommonErrorCode, const String& errorMessage) const;
- void reportProtocolError(const long* const callId, CommonErrorCode, const String& errorMessage, PassRefPtr<InspectorArray> data) const;
- static int getInt(InspectorObject*, const String& name, bool* valueFound, InspectorArray* protocolErrors);
- static double getDouble(InspectorObject*, const String& name, bool* valueFound, InspectorArray* protocolErrors);
- static String getString(InspectorObject*, const String& name, bool* valueFound, InspectorArray* protocolErrors);
- static bool getBoolean(InspectorObject*, const String& name, bool* valueFound, InspectorArray* protocolErrors);
- static PassRefPtr<InspectorObject> getObject(InspectorObject*, const String& name, bool* valueFound, InspectorArray* protocolErrors);
- static PassRefPtr<InspectorArray> getArray(InspectorObject*, const String& name, bool* valueFound, InspectorArray* protocolErrors);
+ void sendResponse(long requestId, RefPtr<InspectorObject>&& result);
+ void sendPendingErrors();
+
+ void reportProtocolError(CommonErrorCode, const String& errorMessage);
+ void reportProtocolError(std::optional<long> relatedRequestId, CommonErrorCode, const String& errorMessage);
+
+ template<typename T>
+ WTF_HIDDEN_DECLARATION
+ T getPropertyValue(InspectorObject*, const String& name, bool* out_optionalValueFound, T defaultValue, std::function<bool(InspectorValue&, T&)>, const char* typeName);
+
+ int getInteger(InspectorObject*, const String& name, bool* valueFound);
+ double getDouble(InspectorObject*, const String& name, bool* valueFound);
+ String getString(InspectorObject*, const String& name, bool* valueFound);
+ bool getBoolean(InspectorObject*, const String& name, bool* valueFound);
+ RefPtr<InspectorValue> getValue(InspectorObject*, const String& name, bool* valueFound);
+ RefPtr<InspectorObject> getObject(InspectorObject*, const String& name, bool* valueFound);
+ RefPtr<InspectorArray> getArray(InspectorObject*, const String& name, bool* valueFound);
private:
- InspectorBackendDispatcher(InspectorFrontendChannel* inspectorFrontendChannel) : m_inspectorFrontendChannel(inspectorFrontendChannel) { }
+ BackendDispatcher(Ref<FrontendRouter>&&);
+
+#if PLATFORM(MAC)
+ // This is necessary for some versions of Safari. Remove it when those versions of Safari are no longer supported.
+ void reportProtocolError(WTF::DeprecatedOptional<long> relatedRequestId, CommonErrorCode, const String& errorMessage);
+#endif
+
+ Ref<FrontendRouter> m_frontendRouter;
+ HashMap<String, SupplementalBackendDispatcher*> m_dispatchers;
- InspectorFrontendChannel* m_inspectorFrontendChannel;
- HashMap<String, InspectorSupplementalBackendDispatcher*> m_dispatchers;
+ // Protocol errors reported for the top-level request being processed.
+ // If processing a request triggers async responses, then any related errors will
+ // be attributed to the top-level request, but generate separate error messages.
+ Vector<std::tuple<CommonErrorCode, String>> m_protocolErrors;
+
+ // For synchronously handled requests, avoid plumbing requestId through every
+ // call that could potentially fail with a protocol error.
+ std::optional<long> m_currentRequestId { std::nullopt };
};
} // namespace Inspector
-
-#endif // !defined(InspectorBackendDispatcher_h)