blob: 3e47c76aeeb3a9b510a805aa9d3e28bd477d6002 [file] [log] [blame]
// 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_