mirror of
				https://bitbucket.org/chromiumembedded/cef
				synced 2025-06-05 21:39:12 +02:00 
			
		
		
		
	
		
			
				
	
	
		
			70 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			70 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
// 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<CefRequestContextHandler> 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<CefRequestContextHandler> 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;
 | 
						|
}
 |