Index: content/browser/frame_host/frame_tree_unittest.cc |
diff --git a/content/browser/frame_host/frame_tree_unittest.cc b/content/browser/frame_host/frame_tree_unittest.cc |
index f24814143326186cf83cf798ab70875c318a4bfd..7f43f68ad54428c7261948b89a6b5da813d39499 100644 |
--- a/content/browser/frame_host/frame_tree_unittest.cc |
+++ b/content/browser/frame_host/frame_tree_unittest.cc |
@@ -201,6 +201,49 @@ TEST_F(FrameTreeTest, DISABLED_Shape) { |
GetTreeState(frame_tree)); |
} |
+// Ensure frames can be found by frame_tree_node_id, routing ID, or name. |
+TEST_F(FrameTreeTest, FindFrames) { |
+ // Add a few child frames to the main frame. |
+ FrameTree* frame_tree = contents()->GetFrameTree(); |
+ FrameTreeNode* root = frame_tree->root(); |
+ main_test_rfh()->OnCreateChildFrame(22, "child0", SandboxFlags::NONE); |
+ main_test_rfh()->OnCreateChildFrame(23, "child1", SandboxFlags::NONE); |
+ main_test_rfh()->OnCreateChildFrame(24, std::string(), SandboxFlags::NONE); |
+ FrameTreeNode* child0 = root->child_at(0); |
+ FrameTreeNode* child1 = root->child_at(1); |
+ FrameTreeNode* child2 = root->child_at(2); |
+ |
+ // Add one grandchild frame. |
+ child1->current_frame_host()->OnCreateChildFrame(33, "grandchild", |
+ SandboxFlags::NONE); |
+ FrameTreeNode* grandchild = child1->child_at(0); |
+ |
+ // Ensure they can be found by FTN id. |
+ EXPECT_EQ(root, frame_tree->FindByID(root->frame_tree_node_id())); |
+ EXPECT_EQ(child0, frame_tree->FindByID(child0->frame_tree_node_id())); |
+ EXPECT_EQ(child1, frame_tree->FindByID(child1->frame_tree_node_id())); |
+ EXPECT_EQ(child2, frame_tree->FindByID(child2->frame_tree_node_id())); |
+ EXPECT_EQ(grandchild, frame_tree->FindByID(grandchild->frame_tree_node_id())); |
+ EXPECT_EQ(nullptr, frame_tree->FindByID(-1)); |
+ |
+ // Ensure they can be found by routing id. |
+ int process_id = main_test_rfh()->GetProcess()->GetID(); |
+ EXPECT_EQ(root, frame_tree->FindByRoutingID(process_id, |
+ main_test_rfh()->GetRoutingID())); |
+ EXPECT_EQ(child0, frame_tree->FindByRoutingID(process_id, 22)); |
+ EXPECT_EQ(child1, frame_tree->FindByRoutingID(process_id, 23)); |
+ EXPECT_EQ(child2, frame_tree->FindByRoutingID(process_id, 24)); |
+ EXPECT_EQ(grandchild, frame_tree->FindByRoutingID(process_id, 33)); |
+ EXPECT_EQ(nullptr, frame_tree->FindByRoutingID(process_id, 37)); |
+ |
+ // Ensure they can be found by name, if they have one. |
+ EXPECT_EQ(root, frame_tree->FindByName(std::string())); |
+ EXPECT_EQ(child0, frame_tree->FindByName("child0")); |
+ EXPECT_EQ(child1, frame_tree->FindByName("child1")); |
+ EXPECT_EQ(grandchild, frame_tree->FindByName("grandchild")); |
+ EXPECT_EQ(nullptr, frame_tree->FindByName("no such frame")); |
+} |
+ |
// Do some simple manipulations of the frame tree, making sure that |
// WebContentsObservers see a consistent view of the tree as we go. |
TEST_F(FrameTreeTest, ObserverWalksTreeDuringFrameCreation) { |