// 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. #include "libcef/common/response_manager.h" #include "libcef/common/cef_messages.h" #include "base/logging.h" CefResponseManager::CefResponseManager() : next_request_id_(0) {} int CefResponseManager::GetNextRequestId() { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); return ++next_request_id_; } int CefResponseManager::RegisterHandler(CefRefPtr handler) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); int request_id = GetNextRequestId(); TRACE_EVENT_ASYNC_BEGIN1("cef", "CefResponseManager::Handler", request_id, "request_id", request_id); handlers_.insert(std::make_pair(request_id, handler)); return request_id; } bool CefResponseManager::RunHandler(const Cef_Response_Params& params) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK_GT(params.request_id, 0); HandlerMap::iterator it = handlers_.find(params.request_id); if (it != handlers_.end()) { TRACE_EVENT0("cef", "CefResponseManager::RunHandler"); it->second->OnResponse(params); handlers_.erase(it); TRACE_EVENT_ASYNC_END1("cef", "CefResponseManager::Handler", params.request_id, "success", 1); return true; } TRACE_EVENT_ASYNC_END1("cef", "CefResponseManager::Handler", params.request_id, "success", 0); return false; } void CefResponseManager::RegisterAckHandler(int request_id, CefRefPtr handler) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); ack_handlers_.insert(std::make_pair(request_id, handler)); } bool CefResponseManager::RunAckHandler(int request_id) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK_GT(request_id, 0); AckHandlerMap::iterator it = ack_handlers_.find(request_id); if (it != ack_handlers_.end()) { it->second->OnResponseAck(); ack_handlers_.erase(it); return true; } return false; }