| // Copyright (c) 2012 The Chromium Embedded Framework Authors. All rights |
| // reserved. Use of this source code is governed by a BSD-style license that |
| // can be found in the LICENSE file. |
| |
| #ifndef CEF_LIBCEF_COMMON_RESPONSE_MANAGER_H_ |
| #define CEF_LIBCEF_COMMON_RESPONSE_MANAGER_H_ |
| #pragma once |
| |
| #include <map> |
| |
| #include "include/cef_base.h" |
| |
| #include "base/sequence_checker.h" |
| |
| struct Cef_Response_Params; |
| |
| // This class is not thread-safe. |
| class CefResponseManager { |
| public: |
| // Used for handling response messages. |
| class Handler : public virtual CefBaseRefCounted { |
| public: |
| virtual void OnResponse(const Cef_Response_Params& params) = 0; |
| }; |
| |
| // Used for handling response ack messages. |
| class AckHandler : public virtual CefBaseRefCounted { |
| public: |
| virtual void OnResponseAck() = 0; |
| }; |
| |
| CefResponseManager(); |
| |
| // Returns the next unique request id. |
| int GetNextRequestId(); |
| |
| // Register a response handler and return the unique request id. |
| int RegisterHandler(CefRefPtr<Handler> handler); |
| |
| // Run the response handler for the specified request id. Returns true if a |
| // handler was run. |
| bool RunHandler(const Cef_Response_Params& params); |
| |
| // Register a response ack handler for the specified request id. |
| void RegisterAckHandler(int request_id, CefRefPtr<AckHandler> handler); |
| |
| // Run the response ack handler for the specified request id. Returns true if |
| // a handler was run. |
| bool RunAckHandler(int request_id); |
| |
| private: |
| // Used for generating unique request ids. |
| int next_request_id_; |
| |
| // Map of unique request ids to Handler references. |
| typedef std::map<int, CefRefPtr<Handler>> HandlerMap; |
| HandlerMap handlers_; |
| |
| // Map of unique request ids to AckHandler references. |
| typedef std::map<int, CefRefPtr<AckHandler>> AckHandlerMap; |
| AckHandlerMap ack_handlers_; |
| |
| SEQUENCE_CHECKER(sequence_checker_); |
| }; |
| |
| #endif // CEF_LIBCEF_COMMON_RESPONSE_MANAGER_H_ |