Commit 823f5b8a authored by Sigurdur Asgeirsson's avatar Sigurdur Asgeirsson Committed by Commit Bot

PM: Add the frame token to FrameNode.

Bug: 1096543
Change-Id: I87a723e23fe4454eb54704f3bd6b35f5085c63d9
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2252692Reviewed-by: default avatarJoe Mason <joenotcharles@chromium.org>
Commit-Queue: Sigurður Ásgeirsson <siggi@chromium.org>
Cr-Commit-Position: refs/heads/master@{#780300}
parent bcd396ea
...@@ -82,7 +82,8 @@ class IsolationContextMetricsTest : public GraphTestHarness { ...@@ -82,7 +82,8 @@ class IsolationContextMetricsTest : public GraphTestHarness {
return CreateNode<FrameNodeImpl>( return CreateNode<FrameNodeImpl>(
process_node, page_node, parent_frame_node, 0 /* frame_tree_node_id */, process_node, page_node, parent_frame_node, 0 /* frame_tree_node_id */,
++next_render_frame_id_, base::UnguessableToken::Create(), ++next_render_frame_id_, base::UnguessableToken::Create(),
browsing_instance_id, site_instance_id); FrameToken(base::UnguessableToken::Create()), browsing_instance_id,
site_instance_id);
} }
// Advance time until the timer fires. // Advance time until the timer fires.
......
...@@ -27,6 +27,7 @@ FrameNodeImpl::FrameNodeImpl(ProcessNodeImpl* process_node, ...@@ -27,6 +27,7 @@ FrameNodeImpl::FrameNodeImpl(ProcessNodeImpl* process_node,
int frame_tree_node_id, int frame_tree_node_id,
int render_frame_id, int render_frame_id,
const base::UnguessableToken& dev_tools_token, const base::UnguessableToken& dev_tools_token,
const FrameToken& frame_token,
int32_t browsing_instance_id, int32_t browsing_instance_id,
int32_t site_instance_id) int32_t site_instance_id)
: parent_frame_node_(parent_frame_node), : parent_frame_node_(parent_frame_node),
...@@ -35,6 +36,7 @@ FrameNodeImpl::FrameNodeImpl(ProcessNodeImpl* process_node, ...@@ -35,6 +36,7 @@ FrameNodeImpl::FrameNodeImpl(ProcessNodeImpl* process_node,
frame_tree_node_id_(frame_tree_node_id), frame_tree_node_id_(frame_tree_node_id),
render_frame_id_(render_frame_id), render_frame_id_(render_frame_id),
dev_tools_token_(dev_tools_token), dev_tools_token_(dev_tools_token),
frame_token_(frame_token),
browsing_instance_id_(browsing_instance_id), browsing_instance_id_(browsing_instance_id),
site_instance_id_(site_instance_id), site_instance_id_(site_instance_id),
render_frame_host_proxy_(content::GlobalFrameRoutingId( render_frame_host_proxy_(content::GlobalFrameRoutingId(
...@@ -140,6 +142,10 @@ const base::UnguessableToken& FrameNodeImpl::dev_tools_token() const { ...@@ -140,6 +142,10 @@ const base::UnguessableToken& FrameNodeImpl::dev_tools_token() const {
return dev_tools_token_; return dev_tools_token_;
} }
const FrameToken& FrameNodeImpl::frame_token() const {
return frame_token_;
}
int32_t FrameNodeImpl::browsing_instance_id() const { int32_t FrameNodeImpl::browsing_instance_id() const {
return browsing_instance_id_; return browsing_instance_id_;
} }
...@@ -374,6 +380,11 @@ const base::UnguessableToken& FrameNodeImpl::GetDevToolsToken() const { ...@@ -374,6 +380,11 @@ const base::UnguessableToken& FrameNodeImpl::GetDevToolsToken() const {
return dev_tools_token(); return dev_tools_token();
} }
const FrameToken& FrameNodeImpl::GetFrameToken() const {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
return frame_token();
}
int32_t FrameNodeImpl::GetBrowsingInstanceId() const { int32_t FrameNodeImpl::GetBrowsingInstanceId() const {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
return browsing_instance_id(); return browsing_instance_id();
......
...@@ -66,6 +66,7 @@ class FrameNodeImpl ...@@ -66,6 +66,7 @@ class FrameNodeImpl
int frame_tree_node_id, int frame_tree_node_id,
int render_frame_id, int render_frame_id,
const base::UnguessableToken& dev_tools_token, const base::UnguessableToken& dev_tools_token,
const FrameToken& frame_token,
int32_t browsing_instance_id, int32_t browsing_instance_id,
int32_t site_instance_id); int32_t site_instance_id);
~FrameNodeImpl() override; ~FrameNodeImpl() override;
...@@ -94,6 +95,7 @@ class FrameNodeImpl ...@@ -94,6 +95,7 @@ class FrameNodeImpl
int frame_tree_node_id() const; int frame_tree_node_id() const;
int render_frame_id() const; int render_frame_id() const;
const base::UnguessableToken& dev_tools_token() const; const base::UnguessableToken& dev_tools_token() const;
const FrameToken& frame_token() const;
int32_t browsing_instance_id() const; int32_t browsing_instance_id() const;
int32_t site_instance_id() const; int32_t site_instance_id() const;
const RenderFrameHostProxy& render_frame_host_proxy() const; const RenderFrameHostProxy& render_frame_host_proxy() const;
...@@ -160,6 +162,7 @@ class FrameNodeImpl ...@@ -160,6 +162,7 @@ class FrameNodeImpl
const ProcessNode* GetProcessNode() const override; const ProcessNode* GetProcessNode() const override;
int GetFrameTreeNodeId() const override; int GetFrameTreeNodeId() const override;
const base::UnguessableToken& GetDevToolsToken() const override; const base::UnguessableToken& GetDevToolsToken() const override;
const FrameToken& GetFrameToken() const override;
int32_t GetBrowsingInstanceId() const override; int32_t GetBrowsingInstanceId() const override;
int32_t GetSiteInstanceId() const override; int32_t GetSiteInstanceId() const override;
bool VisitChildFrameNodes(const FrameNodeVisitor& visitor) const override; bool VisitChildFrameNodes(const FrameNodeVisitor& visitor) const override;
...@@ -255,6 +258,11 @@ class FrameNodeImpl ...@@ -255,6 +258,11 @@ class FrameNodeImpl
// is never sent back from the renderer in control calls. It should never be // is never sent back from the renderer in control calls. It should never be
// used to look up the FrameTreeNode instance. // used to look up the FrameTreeNode instance.
const base::UnguessableToken dev_tools_token_; const base::UnguessableToken dev_tools_token_;
// This is the unique token for this frame instance as per e.g.
// RenderFrameHost::GetFrameToken().
const FrameToken frame_token_;
// The unique ID of the BrowsingInstance this frame belongs to. Frames in the // The unique ID of the BrowsingInstance this frame belongs to. Frames in the
// same BrowsingInstance are allowed to script each other at least // same BrowsingInstance are allowed to script each other at least
// asynchronously (if cross-site), and sometimes synchronously (if same-site, // asynchronously (if cross-site), and sometimes synchronously (if same-site,
......
...@@ -399,6 +399,7 @@ TEST_F(FrameNodeImplTest, PublicInterface) { ...@@ -399,6 +399,7 @@ TEST_F(FrameNodeImplTest, PublicInterface) {
public_frame_node->GetFrameTreeNodeId()); public_frame_node->GetFrameTreeNodeId());
EXPECT_EQ(frame_node->dev_tools_token(), EXPECT_EQ(frame_node->dev_tools_token(),
public_frame_node->GetDevToolsToken()); public_frame_node->GetDevToolsToken());
EXPECT_EQ(frame_node->frame_token(), public_frame_node->GetFrameToken());
EXPECT_EQ(frame_node->browsing_instance_id(), EXPECT_EQ(frame_node->browsing_instance_id(),
public_frame_node->GetBrowsingInstanceId()); public_frame_node->GetBrowsingInstanceId());
EXPECT_EQ(frame_node->site_instance_id(), EXPECT_EQ(frame_node->site_instance_id(),
......
...@@ -118,12 +118,13 @@ std::unique_ptr<FrameNodeImpl> PerformanceManagerImpl::CreateFrameNode( ...@@ -118,12 +118,13 @@ std::unique_ptr<FrameNodeImpl> PerformanceManagerImpl::CreateFrameNode(
int frame_tree_node_id, int frame_tree_node_id,
int render_frame_id, int render_frame_id,
const base::UnguessableToken& dev_tools_token, const base::UnguessableToken& dev_tools_token,
const FrameToken& frame_token,
int32_t browsing_instance_id, int32_t browsing_instance_id,
int32_t site_instance_id, int32_t site_instance_id,
FrameNodeCreationCallback creation_callback) { FrameNodeCreationCallback creation_callback) {
return CreateNodeImpl<FrameNodeImpl>( return CreateNodeImpl<FrameNodeImpl>(
std::move(creation_callback), process_node, page_node, parent_frame_node, std::move(creation_callback), process_node, page_node, parent_frame_node,
frame_tree_node_id, render_frame_id, dev_tools_token, frame_tree_node_id, render_frame_id, dev_tools_token, frame_token,
browsing_instance_id, site_instance_id); browsing_instance_id, site_instance_id);
} }
......
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
#include "base/sequenced_task_runner.h" #include "base/sequenced_task_runner.h"
#include "base/task_runner_util.h" #include "base/task_runner_util.h"
#include "components/performance_manager/graph/graph_impl.h" #include "components/performance_manager/graph/graph_impl.h"
#include "components/performance_manager/public/graph/frame_node.h"
#include "components/performance_manager/public/graph/worker_node.h" #include "components/performance_manager/public/graph/worker_node.h"
#include "components/performance_manager/public/performance_manager.h" #include "components/performance_manager/public/performance_manager.h"
#include "components/performance_manager/public/render_process_host_proxy.h" #include "components/performance_manager/public/render_process_host_proxy.h"
...@@ -92,6 +93,7 @@ class PerformanceManagerImpl : public PerformanceManager { ...@@ -92,6 +93,7 @@ class PerformanceManagerImpl : public PerformanceManager {
int frame_tree_node_id, int frame_tree_node_id,
int render_frame_id, int render_frame_id,
const base::UnguessableToken& dev_tools_token, const base::UnguessableToken& dev_tools_token,
const FrameToken& frame_token,
int32_t browsing_instance_id, int32_t browsing_instance_id,
int32_t site_instance_id, int32_t site_instance_id,
FrameNodeCreationCallback creation_callback = FrameNodeCreationCallback creation_callback =
......
...@@ -64,7 +64,8 @@ TEST_F(PerformanceManagerImplTest, InstantiateNodes) { ...@@ -64,7 +64,8 @@ TEST_F(PerformanceManagerImplTest, InstantiateNodes) {
std::unique_ptr<FrameNodeImpl> frame_node = std::unique_ptr<FrameNodeImpl> frame_node =
PerformanceManagerImpl::CreateFrameNode( PerformanceManagerImpl::CreateFrameNode(
process_node.get(), page_node.get(), nullptr, 0, process_node.get(), page_node.get(), nullptr, 0,
++next_render_frame_id, base::UnguessableToken::Create(), 0, 0); ++next_render_frame_id, base::UnguessableToken::Create(),
FrameToken(base::UnguessableToken::Create()), 0, 0);
EXPECT_NE(nullptr, frame_node.get()); EXPECT_NE(nullptr, frame_node.get());
PerformanceManagerImpl::DeleteNode(std::move(frame_node)); PerformanceManagerImpl::DeleteNode(std::move(frame_node));
...@@ -86,29 +87,35 @@ TEST_F(PerformanceManagerImplTest, BatchDeleteNodes) { ...@@ -86,29 +87,35 @@ TEST_F(PerformanceManagerImplTest, BatchDeleteNodes) {
std::unique_ptr<FrameNodeImpl> parent1_frame = std::unique_ptr<FrameNodeImpl> parent1_frame =
PerformanceManagerImpl::CreateFrameNode( PerformanceManagerImpl::CreateFrameNode(
process_node.get(), page_node.get(), nullptr, 0, process_node.get(), page_node.get(), nullptr, 0,
++next_render_frame_id, base::UnguessableToken::Create(), 0, 0); ++next_render_frame_id, base::UnguessableToken::Create(),
FrameToken(base::UnguessableToken::Create()), 0, 0);
std::unique_ptr<FrameNodeImpl> parent2_frame = std::unique_ptr<FrameNodeImpl> parent2_frame =
PerformanceManagerImpl::CreateFrameNode( PerformanceManagerImpl::CreateFrameNode(
process_node.get(), page_node.get(), nullptr, 1, process_node.get(), page_node.get(), nullptr, 1,
++next_render_frame_id, base::UnguessableToken::Create(), 0, 0); ++next_render_frame_id, base::UnguessableToken::Create(),
FrameToken(base::UnguessableToken::Create()), 0, 0);
std::unique_ptr<FrameNodeImpl> child1_frame = std::unique_ptr<FrameNodeImpl> child1_frame =
PerformanceManagerImpl::CreateFrameNode( PerformanceManagerImpl::CreateFrameNode(
process_node.get(), page_node.get(), parent1_frame.get(), 2, process_node.get(), page_node.get(), parent1_frame.get(), 2,
++next_render_frame_id, base::UnguessableToken::Create(), 0, 0); ++next_render_frame_id, base::UnguessableToken::Create(),
FrameToken(base::UnguessableToken::Create()), 0, 0);
std::unique_ptr<FrameNodeImpl> child2_frame = std::unique_ptr<FrameNodeImpl> child2_frame =
PerformanceManagerImpl::CreateFrameNode( PerformanceManagerImpl::CreateFrameNode(
process_node.get(), page_node.get(), parent2_frame.get(), 3, process_node.get(), page_node.get(), parent2_frame.get(), 3,
++next_render_frame_id, base::UnguessableToken::Create(), 0, 0); ++next_render_frame_id, base::UnguessableToken::Create(),
FrameToken(base::UnguessableToken::Create()), 0, 0);
std::vector<std::unique_ptr<NodeBase>> nodes; std::vector<std::unique_ptr<NodeBase>> nodes;
for (size_t i = 0; i < 10; ++i) { for (size_t i = 0; i < 10; ++i) {
nodes.push_back(PerformanceManagerImpl::CreateFrameNode( nodes.push_back(PerformanceManagerImpl::CreateFrameNode(
process_node.get(), page_node.get(), child1_frame.get(), 0, process_node.get(), page_node.get(), child1_frame.get(), 0,
++next_render_frame_id, base::UnguessableToken::Create(), 0, 0)); ++next_render_frame_id, base::UnguessableToken::Create(),
FrameToken(base::UnguessableToken::Create()), 0, 0));
nodes.push_back(PerformanceManagerImpl::CreateFrameNode( nodes.push_back(PerformanceManagerImpl::CreateFrameNode(
process_node.get(), page_node.get(), child1_frame.get(), 1, process_node.get(), page_node.get(), child1_frame.get(), 1,
++next_render_frame_id, base::UnguessableToken::Create(), 0, 0)); ++next_render_frame_id, base::UnguessableToken::Create(),
FrameToken(base::UnguessableToken::Create()), 0, 0));
} }
nodes.push_back(std::move(process_node)); nodes.push_back(std::move(process_node));
......
...@@ -167,6 +167,7 @@ void PerformanceManagerTabHelper::RenderFrameCreated( ...@@ -167,6 +167,7 @@ void PerformanceManagerTabHelper::RenderFrameCreated(
render_frame_host->GetFrameTreeNodeId(), render_frame_host->GetFrameTreeNodeId(),
render_frame_host->GetRoutingID(), render_frame_host->GetRoutingID(),
render_frame_host->GetDevToolsFrameToken(), render_frame_host->GetDevToolsFrameToken(),
FrameToken(render_frame_host->GetFrameToken()),
site_instance->GetBrowsingInstanceId(), site_instance->GetId(), site_instance->GetBrowsingInstanceId(), site_instance->GetId(),
base::BindOnce( base::BindOnce(
[](const GURL& url, bool is_current, FrameNodeImpl* frame_node) { [](const GURL& url, bool is_current, FrameNodeImpl* frame_node) {
......
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
#include "base/containers/flat_set.h" #include "base/containers/flat_set.h"
#include "base/macros.h" #include "base/macros.h"
#include "base/util/type_safety/strong_alias.h"
#include "components/performance_manager/public/frame_priority/frame_priority.h" #include "components/performance_manager/public/frame_priority/frame_priority.h"
#include "components/performance_manager/public/graph/node.h" #include "components/performance_manager/public/graph/node.h"
#include "components/performance_manager/public/mojom/coordination_unit.mojom.h" #include "components/performance_manager/public/mojom/coordination_unit.mojom.h"
...@@ -26,6 +27,10 @@ class ProcessNode; ...@@ -26,6 +27,10 @@ class ProcessNode;
class RenderFrameHostProxy; class RenderFrameHostProxy;
class WorkerNode; class WorkerNode;
// A strongly typed unguessable token for the frame tokens.
using FrameToken =
util::StrongAlias<class FrameTokenTag, base::UnguessableToken>;
// Frame nodes form a tree structure, each FrameNode at most has one parent that // Frame nodes form a tree structure, each FrameNode at most has one parent that
// is a FrameNode. Conceptually, a frame corresponds to a // is a FrameNode. Conceptually, a frame corresponds to a
// content::RenderFrameHost in the browser, and a content::RenderFrameImpl / // content::RenderFrameHost in the browser, and a content::RenderFrameImpl /
...@@ -89,6 +94,10 @@ class FrameNode : public Node { ...@@ -89,6 +94,10 @@ class FrameNode : public Node {
// the lifetime of the frame. // the lifetime of the frame.
virtual const base::UnguessableToken& GetDevToolsToken() const = 0; virtual const base::UnguessableToken& GetDevToolsToken() const = 0;
// Gets the unique token associated with this frame. This is a constant over
// the lifetime of the frame and unique across all frames for all time.
virtual const FrameToken& GetFrameToken() const = 0;
// Gets the ID of the browsing instance to which this frame belongs. This is a // Gets the ID of the browsing instance to which this frame belongs. This is a
// constant over the lifetime of the frame. // constant over the lifetime of the frame.
virtual int32_t GetBrowsingInstanceId() const = 0; virtual int32_t GetBrowsingInstanceId() const = 0;
......
...@@ -79,12 +79,16 @@ struct TestNodeWrapper<FrameNodeImpl>::Factory { ...@@ -79,12 +79,16 @@ struct TestNodeWrapper<FrameNodeImpl>::Factory {
FrameNodeImpl* parent_frame_node, FrameNodeImpl* parent_frame_node,
int frame_tree_node_id, int frame_tree_node_id,
int render_frame_id, int render_frame_id,
const base::UnguessableToken& token = base::UnguessableToken::Create(), const base::UnguessableToken& dev_tools_token =
base::UnguessableToken::Create(),
const FrameToken& frame_token =
FrameToken(base::UnguessableToken::Create()),
int32_t browsing_instance_id = 0, int32_t browsing_instance_id = 0,
int32_t site_instance_id = 0) { int32_t site_instance_id = 0) {
return std::make_unique<FrameNodeImpl>( return std::make_unique<FrameNodeImpl>(
process_node, page_node, parent_frame_node, frame_tree_node_id, process_node, page_node, parent_frame_node, frame_tree_node_id,
render_frame_id, token, browsing_instance_id, site_instance_id); render_frame_id, dev_tools_token, frame_token, browsing_instance_id,
site_instance_id);
} }
}; };
......
...@@ -557,7 +557,8 @@ content::GlobalFrameRoutingId TestFrameNodeSource::CreateFrameNode( ...@@ -557,7 +557,8 @@ content::GlobalFrameRoutingId TestFrameNodeSource::CreateFrameNode(
frame_id); frame_id);
auto frame_node = PerformanceManagerImpl::CreateFrameNode( auto frame_node = PerformanceManagerImpl::CreateFrameNode(
process_node, page_node_.get(), nullptr, 0, frame_id, process_node, page_node_.get(), nullptr, 0, frame_id,
base::UnguessableToken::Null(), 0, 0); base::UnguessableToken::Null(),
FrameToken(base::UnguessableToken::Create()), 0, 0);
bool inserted = bool inserted =
frame_node_map_.insert({render_frame_host_id, std::move(frame_node)}) frame_node_map_.insert({render_frame_host_id, std::move(frame_node)})
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment