frame_navigation_state_unittest.cc revision 2a99a7e74a7f215066514fe81d2bfa6639d9eddd
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/values.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/api/web_navigation/frame_navigation_state.h" 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/testing_profile.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace extensions { 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)content::RenderViewHost* fake_rvh = 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reinterpret_cast<content::RenderViewHost*>(31337); 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that a frame is correctly tracked, and removed once the tab contents 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// goes away. 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(FrameNavigationStateTest, TrackFrame) { 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FrameNavigationState navigation_state; 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FrameNavigationState::FrameID frame_id0(-1, fake_rvh); 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FrameNavigationState::FrameID frame_id1(23, fake_rvh); 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FrameNavigationState::FrameID frame_id2(42, fake_rvh); 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL url1("http://www.google.com/"); 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL url2("http://mail.google.com/"); 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create a main frame. 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(navigation_state.CanSendEvents(frame_id1)); 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(navigation_state.IsValidFrame(frame_id1)); 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) navigation_state.TrackFrame(frame_id1, frame_id0, url1, true, false, false); 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) navigation_state.SetNavigationCommitted(frame_id1); 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(navigation_state.CanSendEvents(frame_id1)); 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(navigation_state.IsValidFrame(frame_id1)); 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add a sub frame. 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(navigation_state.CanSendEvents(frame_id2)); 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(navigation_state.IsValidFrame(frame_id2)); 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) navigation_state.TrackFrame(frame_id2, frame_id1, url2, false, false, false); 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) navigation_state.SetNavigationCommitted(frame_id2); 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(navigation_state.CanSendEvents(frame_id2)); 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(navigation_state.IsValidFrame(frame_id2)); 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check frame state. 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(navigation_state.IsMainFrame(frame_id1)); 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(url1, navigation_state.GetUrl(frame_id1)); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(navigation_state.IsMainFrame(frame_id2)); 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(url2, navigation_state.GetUrl(frame_id2)); 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(frame_id1, navigation_state.GetMainFrameID()); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Drop the frames. 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) navigation_state.StopTrackingFramesInRVH(fake_rvh, 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FrameNavigationState::FrameID()); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(navigation_state.CanSendEvents(frame_id1)); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(navigation_state.IsValidFrame(frame_id1)); 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(navigation_state.CanSendEvents(frame_id2)); 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(navigation_state.IsValidFrame(frame_id2)); 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that no events can be sent for a frame after an error occurred, but 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// before a new navigation happened in this frame. 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(FrameNavigationStateTest, ErrorState) { 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FrameNavigationState navigation_state; 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FrameNavigationState::FrameID frame_id0(-1, fake_rvh); 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FrameNavigationState::FrameID frame_id1(42, fake_rvh); 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL url("http://www.google.com/"); 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) navigation_state.TrackFrame(frame_id1, frame_id0, url, true, false, false); 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(navigation_state.CanSendEvents(frame_id1)); 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(navigation_state.GetErrorOccurredInFrame(frame_id1)); 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // After an error occurred, no further events should be sent. 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) navigation_state.SetErrorOccurredInFrame(frame_id1); 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(navigation_state.CanSendEvents(frame_id1)); 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(navigation_state.GetErrorOccurredInFrame(frame_id1)); 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigations to a network error page should be ignored. 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) navigation_state.TrackFrame(frame_id1, frame_id0, GURL(), true, true, false); 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(navigation_state.CanSendEvents(frame_id1)); 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(navigation_state.GetErrorOccurredInFrame(frame_id1)); 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // However, when the frame navigates again, it should send events again. 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) navigation_state.TrackFrame(frame_id1, frame_id0, url, true, false, false); 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(navigation_state.CanSendEvents(frame_id1)); 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(navigation_state.GetErrorOccurredInFrame(frame_id1)); 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that for a sub frame, no events are send after an error occurred, but 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// before a new navigation happened in this frame. 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(FrameNavigationStateTest, ErrorStateFrame) { 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FrameNavigationState navigation_state; 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FrameNavigationState::FrameID frame_id0(-1, fake_rvh); 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FrameNavigationState::FrameID frame_id1(23, fake_rvh); 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FrameNavigationState::FrameID frame_id2(42, fake_rvh); 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL url("http://www.google.com/"); 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) navigation_state.TrackFrame(frame_id1, frame_id0, url, true, false, false); 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) navigation_state.TrackFrame(frame_id2, frame_id1, url, false, false, false); 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(navigation_state.CanSendEvents(frame_id1)); 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(navigation_state.CanSendEvents(frame_id2)); 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // After an error occurred, no further events should be sent. 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) navigation_state.SetErrorOccurredInFrame(frame_id2); 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(navigation_state.CanSendEvents(frame_id1)); 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(navigation_state.CanSendEvents(frame_id2)); 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigations to a network error page should be ignored. 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) navigation_state.TrackFrame(frame_id2, frame_id1, GURL(), false, true, false); 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(navigation_state.CanSendEvents(frame_id1)); 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(navigation_state.CanSendEvents(frame_id2)); 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // However, when the frame navigates again, it should send events again. 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) navigation_state.TrackFrame(frame_id2, frame_id1, url, false, false, false); 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(navigation_state.CanSendEvents(frame_id1)); 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(navigation_state.CanSendEvents(frame_id2)); 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that no events are send for a not web-safe scheme. 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(FrameNavigationStateTest, WebSafeScheme) { 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FrameNavigationState navigation_state; 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FrameNavigationState::FrameID frame_id0(-1, fake_rvh); 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FrameNavigationState::FrameID frame_id1(23, fake_rvh); 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL url("unsafe://www.google.com/"); 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) navigation_state.TrackFrame(frame_id1, frame_id0, url, true, false, false); 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(navigation_state.CanSendEvents(frame_id1)); 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that parent frame IDs are tracked. 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(FrameNavigationStateTest, ParentFrameID) { 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FrameNavigationState navigation_state; 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FrameNavigationState::FrameID frame_id0(-1, fake_rvh); 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FrameNavigationState::FrameID frame_id1(23, fake_rvh); 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FrameNavigationState::FrameID frame_id2(42, fake_rvh); 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL url("http://www.google.com/"); 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) navigation_state.TrackFrame(frame_id1, frame_id0, url, true, false, false); 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) navigation_state.TrackFrame(frame_id2, frame_id1, url, false, false, false); 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(navigation_state.CanSendEvents(frame_id1)); 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(navigation_state.CanSendEvents(frame_id2)); 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(navigation_state.GetParentFrameID(frame_id1) == frame_id0); 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(navigation_state.GetParentFrameID(frame_id2) == frame_id1); 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Test for <iframe srcdoc=""> frames. 1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(FrameNavigationStateTest, SrcDoc) { 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FrameNavigationState navigation_state; 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const FrameNavigationState::FrameID frame_id0(-1, fake_rvh); 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const FrameNavigationState::FrameID frame_id1(23, fake_rvh); 1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const FrameNavigationState::FrameID frame_id2(42, fake_rvh); 1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const GURL url("http://www.google.com/"); 1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const GURL blank("about:blank"); 1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const GURL srcdoc("about:srcdoc"); 1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) navigation_state.TrackFrame(frame_id1, frame_id0, url, true, false, false); 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) navigation_state.TrackFrame(frame_id2, frame_id1, blank, false, false, true); 1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(navigation_state.CanSendEvents(frame_id1)); 1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(navigation_state.CanSendEvents(frame_id2)); 1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(navigation_state.GetUrl(frame_id1) == url); 1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(navigation_state.GetUrl(frame_id2) == srcdoc); 1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(navigation_state.IsValidUrl(srcdoc)); 1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Test that an individual frame can be detached. 1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(FrameNavigationStateTest, DetachFrame) { 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FrameNavigationState navigation_state; 1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const FrameNavigationState::FrameID frame_id0(-1, fake_rvh); 1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const FrameNavigationState::FrameID frame_id1(23, fake_rvh); 1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const FrameNavigationState::FrameID frame_id2(42, fake_rvh); 1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const GURL url1("http://www.google.com/"); 1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const GURL url2("http://mail.google.com/"); 1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Create a main frame. 1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(navigation_state.CanSendEvents(frame_id1)); 1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(navigation_state.IsValidFrame(frame_id1)); 1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) navigation_state.TrackFrame(frame_id1, frame_id0, url1, true, false, false); 1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) navigation_state.SetNavigationCommitted(frame_id1); 1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(navigation_state.CanSendEvents(frame_id1)); 1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(navigation_state.IsValidFrame(frame_id1)); 1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Add a sub frame. 1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(navigation_state.CanSendEvents(frame_id2)); 1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(navigation_state.IsValidFrame(frame_id2)); 1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) navigation_state.TrackFrame(frame_id2, frame_id1, url2, false, false, false); 1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) navigation_state.SetNavigationCommitted(frame_id2); 1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(navigation_state.CanSendEvents(frame_id2)); 1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(navigation_state.IsValidFrame(frame_id2)); 1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Check frame state. 1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(navigation_state.IsMainFrame(frame_id1)); 1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(url1, navigation_state.GetUrl(frame_id1)); 1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(navigation_state.IsMainFrame(frame_id2)); 1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(url2, navigation_state.GetUrl(frame_id2)); 1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(frame_id1, navigation_state.GetMainFrameID()); 1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Drop one frame. 1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) navigation_state.FrameDetached(frame_id2); 1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(navigation_state.IsMainFrame(frame_id1)); 1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(url1, navigation_state.GetUrl(frame_id1)); 2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(frame_id1, navigation_state.GetMainFrameID()); 2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(navigation_state.CanSendEvents(frame_id2)); 2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(navigation_state.IsValidFrame(frame_id2)); 2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace extensions 206