Update to Chromium version 122.0.6261.0 (#1250580)

Frame identifiers have changed from int64_t to string type. This is due
to https://crbug.com/1502660 which removes access to frame routing IDs
in the renderer process. New cross-process frame identifiers are 160-bit
values (32-bit child process ID + 128-bit local frame token) and most
easily represented as strings. All other frame-related expectations and
behaviors remain the same.
This commit is contained in:
Marshall Greenblatt
2024-01-25 21:12:43 -05:00
parent 2a86a02bdd
commit 2f1e782f62
156 changed files with 1452 additions and 1436 deletions

View File

@ -6,9 +6,8 @@
#include "libcef/browser/thread_util.h"
#include <limits>
#include <sstream>
#include "base/strings/string_number_conversions.h"
#include "base/strings/stringprintf.h"
#include "content/public/browser/navigation_handle.h"
#include "content/public/browser/render_frame_host.h"
@ -22,18 +21,59 @@ content::GlobalRenderFrameHostId GetGlobalId(
: navigation_handle->GetPreviousRenderFrameHostId();
}
std::string GetFrameDebugString(int64_t frame_id) {
uint32_t process_id = frame_id >> 32;
uint32_t routing_id = std::numeric_limits<uint32_t>::max() & frame_id;
std::optional<content::GlobalRenderFrameHostToken> ParseFrameIdentifier(
const std::string& identifier) {
if (identifier.size() < 3) {
return std::nullopt;
}
std::stringstream ss;
ss << frame_id << " [" << process_id << "," << routing_id << "]";
return ss.str();
const size_t pos = identifier.find('-');
if (pos == std::string::npos || pos == 0 || pos == identifier.size() - 1) {
return std::nullopt;
}
std::string_view process_id_str(identifier.c_str(), pos);
int process_id;
if (!base::HexStringToInt(process_id_str, &process_id) ||
!IsValidChildId(process_id)) {
return std::nullopt;
}
std::string_view frame_token_str(identifier.c_str() + pos + 1,
identifier.size() - pos - 1);
auto token = base::Token::FromString(frame_token_str);
if (token) {
auto unguessable_token =
base::UnguessableToken::Deserialize(token->high(), token->low());
if (unguessable_token) {
return content::GlobalRenderFrameHostToken(
process_id, blink::LocalFrameToken(unguessable_token.value()));
}
}
return std::nullopt;
}
std::string MakeFrameIdentifier(
const content::GlobalRenderFrameHostToken& global_token) {
if (!IsValidGlobalToken(global_token)) {
return std::string();
}
// All upper-case hex values.
return base::StringPrintf("%X-%s", global_token.child_id,
global_token.frame_token.ToString().c_str());
}
std::string GetFrameDebugString(
const content::GlobalRenderFrameHostId& global_id) {
return GetFrameDebugString(MakeFrameId(global_id));
return base::StringPrintf("[%d,%d]", global_id.child_id,
global_id.frame_routing_id);
}
std::string GetFrameDebugString(
const content::GlobalRenderFrameHostToken& global_token) {
return MakeFrameIdentifier(global_token);
}
} // namespace frame_util