diff options
author | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
---|---|---|
committer | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
commit | 1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch) | |
tree | 46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/JavaScriptCore/inspector/InspectorBackendDispatcher.h | |
parent | 32761a6cee1d0dee366b885b7b9c777e67885688 (diff) | |
download | WebKitGtk-tarball-master.tar.gz |
webkitgtk-2.16.5HEADwebkitgtk-2.16.5master
Diffstat (limited to 'Source/JavaScriptCore/inspector/InspectorBackendDispatcher.h')
-rw-r--r-- | Source/JavaScriptCore/inspector/InspectorBackendDispatcher.h | 97 |
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) |