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;
|
||
|
}
|