• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2012 The Chromium Embedded Framework Authors. All rights
2 // reserved. Use of this source code is governed by a BSD-style license that can
3 // be found in the LICENSE file.
4 
5 #include "libcef/common/response_manager.h"
6 #include "libcef/common/cef_messages.h"
7 
8 #include "base/logging.h"
9 
CefResponseManager()10 CefResponseManager::CefResponseManager() : next_request_id_(0) {}
11 
GetNextRequestId()12 int CefResponseManager::GetNextRequestId() {
13   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
14   return ++next_request_id_;
15 }
16 
RegisterHandler(CefRefPtr<Handler> handler)17 int CefResponseManager::RegisterHandler(CefRefPtr<Handler> handler) {
18   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
19   int request_id = GetNextRequestId();
20   TRACE_EVENT_ASYNC_BEGIN1("cef", "CefResponseManager::Handler", request_id,
21                            "request_id", request_id);
22   handlers_.insert(std::make_pair(request_id, handler));
23   return request_id;
24 }
25 
RunHandler(const Cef_Response_Params & params)26 bool CefResponseManager::RunHandler(const Cef_Response_Params& params) {
27   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
28   DCHECK_GT(params.request_id, 0);
29   HandlerMap::iterator it = handlers_.find(params.request_id);
30   if (it != handlers_.end()) {
31     TRACE_EVENT0("cef", "CefResponseManager::RunHandler");
32     it->second->OnResponse(params);
33     handlers_.erase(it);
34     TRACE_EVENT_ASYNC_END1("cef", "CefResponseManager::Handler",
35                            params.request_id, "success", 1);
36     return true;
37   }
38   TRACE_EVENT_ASYNC_END1("cef", "CefResponseManager::Handler",
39                          params.request_id, "success", 0);
40   return false;
41 }
42 
RegisterAckHandler(int request_id,CefRefPtr<AckHandler> handler)43 void CefResponseManager::RegisterAckHandler(int request_id,
44                                             CefRefPtr<AckHandler> handler) {
45   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
46   ack_handlers_.insert(std::make_pair(request_id, handler));
47 }
48 
RunAckHandler(int request_id)49 bool CefResponseManager::RunAckHandler(int request_id) {
50   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
51   DCHECK_GT(request_id, 0);
52   AckHandlerMap::iterator it = ack_handlers_.find(request_id);
53   if (it != ack_handlers_.end()) {
54     it->second->OnResponseAck();
55     ack_handlers_.erase(it);
56     return true;
57   }
58   return false;
59 }
60