// Copyright (c) 2019 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/browser/request_context_handler_map.h" CefRequestContextHandlerMap::CefRequestContextHandlerMap() = default; CefRequestContextHandlerMap::~CefRequestContextHandlerMap() = default; void CefRequestContextHandlerMap::AddHandler( int render_process_id, int render_frame_id, int frame_tree_node_id, CefRefPtr handler) { DCHECK_GE(render_process_id, 0); DCHECK_GE(render_frame_id, 0); DCHECK_GE(frame_tree_node_id, 0); DCHECK(handler); render_id_handler_map_.insert(std::make_pair( std::make_pair(render_process_id, render_frame_id), handler)); node_id_handler_map_.insert(std::make_pair(frame_tree_node_id, handler)); } void CefRequestContextHandlerMap::RemoveHandler(int render_process_id, int render_frame_id, int frame_tree_node_id) { DCHECK_GE(render_process_id, 0); DCHECK_GE(render_frame_id, 0); DCHECK_GE(frame_tree_node_id, 0); auto it1 = render_id_handler_map_.find( std::make_pair(render_process_id, render_frame_id)); if (it1 != render_id_handler_map_.end()) render_id_handler_map_.erase(it1); auto it2 = node_id_handler_map_.find(frame_tree_node_id); if (it2 != node_id_handler_map_.end()) node_id_handler_map_.erase(it2); } CefRefPtr CefRequestContextHandlerMap::GetHandler( int render_process_id, int render_frame_id, int frame_tree_node_id, bool require_frame_match) const { if (render_process_id >= 0 && render_frame_id >= 0) { const auto it1 = render_id_handler_map_.find( std::make_pair(render_process_id, render_frame_id)); if (it1 != render_id_handler_map_.end()) return it1->second; } if (frame_tree_node_id >= 0) { const auto it2 = node_id_handler_map_.find(frame_tree_node_id); if (it2 != node_id_handler_map_.end()) return it2->second; } if (render_process_id >= 0 && !require_frame_match) { // Choose an arbitrary handler for the same process. for (auto& kv : render_id_handler_map_) { if (kv.first.first == render_process_id) return kv.second; } } return nullptr; }