Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(111)

Side by Side Diff: chrome/browser/extensions/api/web_navigation/frame_navigation_state_unittest.cc

Issue 10835033: Only delete old frames when a new main frame navigation commits (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: updates Created 8 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/values.h" 5 #include "base/values.h"
6 #include "chrome/browser/extensions/api/web_navigation/frame_navigation_state.h" 6 #include "chrome/browser/extensions/api/web_navigation/frame_navigation_state.h"
7 #include "chrome/test/base/chrome_render_view_host_test_harness.h"
8 #include "chrome/test/base/testing_profile.h" 7 #include "chrome/test/base/testing_profile.h"
9 #include "testing/gtest/include/gtest/gtest.h" 8 #include "testing/gtest/include/gtest/gtest.h"
10 9
11 namespace extensions { 10 namespace extensions {
12 11
13 class FrameNavigationStateTest : public ChromeRenderViewHostTestHarness { 12 content::RenderViewHost* fake_rvh =
14 }; 13 reinterpret_cast<content::RenderViewHost*>(31337);
15 14
16 // Test that a frame is correctly tracked, and removed once the tab contents 15 // Test that a frame is correctly tracked, and removed once the tab contents
17 // goes away. 16 // goes away.
18 TEST_F(FrameNavigationStateTest, TrackFrame) { 17 TEST(FrameNavigationStateTest, TrackFrame) {
19 FrameNavigationState navigation_state; 18 FrameNavigationState navigation_state;
20 const FrameNavigationState::FrameID frame_id1(23, 1); 19 const FrameNavigationState::FrameID frame_id1(23, fake_rvh);
21 const FrameNavigationState::FrameID frame_id2(42, 1); 20 const FrameNavigationState::FrameID frame_id2(42, fake_rvh);
22 const GURL url1("http://www.google.com/"); 21 const GURL url1("http://www.google.com/");
23 const GURL url2("http://mail.google.com/"); 22 const GURL url2("http://mail.google.com/");
24 23
25 // Create a main frame. 24 // Create a main frame.
26 EXPECT_FALSE(navigation_state.CanSendEvents(frame_id1)); 25 EXPECT_FALSE(navigation_state.CanSendEvents(frame_id1));
27 EXPECT_FALSE(navigation_state.IsValidFrame(frame_id1)); 26 EXPECT_FALSE(navigation_state.IsValidFrame(frame_id1));
28 navigation_state.TrackFrame(frame_id1, url1, true, false); 27 navigation_state.TrackFrame(frame_id1, url1, true, false);
28 navigation_state.SetNavigationCommitted(frame_id1);
29 EXPECT_TRUE(navigation_state.CanSendEvents(frame_id1)); 29 EXPECT_TRUE(navigation_state.CanSendEvents(frame_id1));
30 EXPECT_TRUE(navigation_state.IsValidFrame(frame_id1)); 30 EXPECT_TRUE(navigation_state.IsValidFrame(frame_id1));
31 31
32 // Add a sub frame. 32 // Add a sub frame.
33 EXPECT_FALSE(navigation_state.CanSendEvents(frame_id2)); 33 EXPECT_FALSE(navigation_state.CanSendEvents(frame_id2));
34 EXPECT_FALSE(navigation_state.IsValidFrame(frame_id2)); 34 EXPECT_FALSE(navigation_state.IsValidFrame(frame_id2));
35 navigation_state.TrackFrame(frame_id2, url2, false, false); 35 navigation_state.TrackFrame(frame_id2, url2, false, false);
36 navigation_state.SetNavigationCommitted(frame_id2);
36 EXPECT_TRUE(navigation_state.CanSendEvents(frame_id2)); 37 EXPECT_TRUE(navigation_state.CanSendEvents(frame_id2));
37 EXPECT_TRUE(navigation_state.IsValidFrame(frame_id2)); 38 EXPECT_TRUE(navigation_state.IsValidFrame(frame_id2));
38 39
39 // Check frame state. 40 // Check frame state.
40 EXPECT_TRUE(navigation_state.IsMainFrame(frame_id1)); 41 EXPECT_TRUE(navigation_state.IsMainFrame(frame_id1));
41 EXPECT_EQ(url1, navigation_state.GetUrl(frame_id1)); 42 EXPECT_EQ(url1, navigation_state.GetUrl(frame_id1));
42 EXPECT_FALSE(navigation_state.IsMainFrame(frame_id2)); 43 EXPECT_FALSE(navigation_state.IsMainFrame(frame_id2));
43 EXPECT_EQ(url2, navigation_state.GetUrl(frame_id2)); 44 EXPECT_EQ(url2, navigation_state.GetUrl(frame_id2));
44 EXPECT_EQ(frame_id1, navigation_state.GetMainFrameID()); 45 EXPECT_EQ(frame_id1, navigation_state.GetMainFrameID());
46
47 // Drop the frames.
48 navigation_state.StopTrackingFramesInRVH(fake_rvh);
49 EXPECT_FALSE(navigation_state.CanSendEvents(frame_id1));
50 EXPECT_FALSE(navigation_state.IsValidFrame(frame_id1));
51 EXPECT_FALSE(navigation_state.CanSendEvents(frame_id2));
52 EXPECT_FALSE(navigation_state.IsValidFrame(frame_id2));
45 } 53 }
46 54
47 // Test that no events can be sent for a frame after an error occurred, but 55 // Test that no events can be sent for a frame after an error occurred, but
48 // before a new navigation happened in this frame. 56 // before a new navigation happened in this frame.
49 TEST_F(FrameNavigationStateTest, ErrorState) { 57 TEST(FrameNavigationStateTest, ErrorState) {
50 FrameNavigationState navigation_state; 58 FrameNavigationState navigation_state;
51 const FrameNavigationState::FrameID frame_id(42, 1); 59 const FrameNavigationState::FrameID frame_id(42, fake_rvh);
52 const GURL url("http://www.google.com/"); 60 const GURL url("http://www.google.com/");
53 61
54 navigation_state.TrackFrame(frame_id, url, true, false); 62 navigation_state.TrackFrame(frame_id, url, true, false);
55 EXPECT_TRUE(navigation_state.CanSendEvents(frame_id)); 63 EXPECT_TRUE(navigation_state.CanSendEvents(frame_id));
56 EXPECT_FALSE(navigation_state.GetErrorOccurredInFrame(frame_id)); 64 EXPECT_FALSE(navigation_state.GetErrorOccurredInFrame(frame_id));
57 65
58 // After an error occurred, no further events should be sent. 66 // After an error occurred, no further events should be sent.
59 navigation_state.SetErrorOccurredInFrame(frame_id); 67 navigation_state.SetErrorOccurredInFrame(frame_id);
60 EXPECT_FALSE(navigation_state.CanSendEvents(frame_id)); 68 EXPECT_FALSE(navigation_state.CanSendEvents(frame_id));
61 EXPECT_TRUE(navigation_state.GetErrorOccurredInFrame(frame_id)); 69 EXPECT_TRUE(navigation_state.GetErrorOccurredInFrame(frame_id));
62 70
63 // Navigations to a network error page should be ignored. 71 // Navigations to a network error page should be ignored.
64 navigation_state.TrackFrame(frame_id, GURL(), true, true); 72 navigation_state.TrackFrame(frame_id, GURL(), true, true);
65 EXPECT_FALSE(navigation_state.CanSendEvents(frame_id)); 73 EXPECT_FALSE(navigation_state.CanSendEvents(frame_id));
66 EXPECT_TRUE(navigation_state.GetErrorOccurredInFrame(frame_id)); 74 EXPECT_TRUE(navigation_state.GetErrorOccurredInFrame(frame_id));
67 75
68 // However, when the frame navigates again, it should send events again. 76 // However, when the frame navigates again, it should send events again.
69 navigation_state.TrackFrame(frame_id, url, true, false); 77 navigation_state.TrackFrame(frame_id, url, true, false);
70 EXPECT_TRUE(navigation_state.CanSendEvents(frame_id)); 78 EXPECT_TRUE(navigation_state.CanSendEvents(frame_id));
71 EXPECT_FALSE(navigation_state.GetErrorOccurredInFrame(frame_id)); 79 EXPECT_FALSE(navigation_state.GetErrorOccurredInFrame(frame_id));
72 } 80 }
73 81
74 // Tests that for a sub frame, no events are send after an error occurred, but 82 // Tests that for a sub frame, no events are send after an error occurred, but
75 // before a new navigation happened in this frame. 83 // before a new navigation happened in this frame.
76 TEST_F(FrameNavigationStateTest, ErrorStateFrame) { 84 TEST(FrameNavigationStateTest, ErrorStateFrame) {
77 FrameNavigationState navigation_state; 85 FrameNavigationState navigation_state;
78 const FrameNavigationState::FrameID frame_id1(23, 1); 86 const FrameNavigationState::FrameID frame_id1(23, fake_rvh);
79 const FrameNavigationState::FrameID frame_id2(42, 1); 87 const FrameNavigationState::FrameID frame_id2(42, fake_rvh);
80 const GURL url("http://www.google.com/"); 88 const GURL url("http://www.google.com/");
81 89
82 navigation_state.TrackFrame(frame_id1, url, true, false); 90 navigation_state.TrackFrame(frame_id1, url, true, false);
83 navigation_state.TrackFrame(frame_id2, url, false, false); 91 navigation_state.TrackFrame(frame_id2, url, false, false);
84 EXPECT_TRUE(navigation_state.CanSendEvents(frame_id1)); 92 EXPECT_TRUE(navigation_state.CanSendEvents(frame_id1));
85 EXPECT_TRUE(navigation_state.CanSendEvents(frame_id2)); 93 EXPECT_TRUE(navigation_state.CanSendEvents(frame_id2));
86 94
87 // After an error occurred, no further events should be sent. 95 // After an error occurred, no further events should be sent.
88 navigation_state.SetErrorOccurredInFrame(frame_id2); 96 navigation_state.SetErrorOccurredInFrame(frame_id2);
89 EXPECT_TRUE(navigation_state.CanSendEvents(frame_id1)); 97 EXPECT_TRUE(navigation_state.CanSendEvents(frame_id1));
90 EXPECT_FALSE(navigation_state.CanSendEvents(frame_id2)); 98 EXPECT_FALSE(navigation_state.CanSendEvents(frame_id2));
91 99
92 // Navigations to a network error page should be ignored. 100 // Navigations to a network error page should be ignored.
93 navigation_state.TrackFrame(frame_id2, GURL(), false, true); 101 navigation_state.TrackFrame(frame_id2, GURL(), false, true);
94 EXPECT_TRUE(navigation_state.CanSendEvents(frame_id1)); 102 EXPECT_TRUE(navigation_state.CanSendEvents(frame_id1));
95 EXPECT_FALSE(navigation_state.CanSendEvents(frame_id2)); 103 EXPECT_FALSE(navigation_state.CanSendEvents(frame_id2));
96 104
97 // However, when the frame navigates again, it should send events again. 105 // However, when the frame navigates again, it should send events again.
98 navigation_state.TrackFrame(frame_id2, url, false, false); 106 navigation_state.TrackFrame(frame_id2, url, false, false);
99 EXPECT_TRUE(navigation_state.CanSendEvents(frame_id1)); 107 EXPECT_TRUE(navigation_state.CanSendEvents(frame_id1));
100 EXPECT_TRUE(navigation_state.CanSendEvents(frame_id2)); 108 EXPECT_TRUE(navigation_state.CanSendEvents(frame_id2));
101 } 109 }
102 110
103 // Tests that no events are send for a not web-safe scheme. 111 // Tests that no events are send for a not web-safe scheme.
104 TEST_F(FrameNavigationStateTest, WebSafeScheme) { 112 TEST(FrameNavigationStateTest, WebSafeScheme) {
105 FrameNavigationState navigation_state; 113 FrameNavigationState navigation_state;
106 const FrameNavigationState::FrameID frame_id(23, 1); 114 const FrameNavigationState::FrameID frame_id(23, fake_rvh);
107 const GURL url("unsafe://www.google.com/"); 115 const GURL url("unsafe://www.google.com/");
108 116
109 navigation_state.TrackFrame(frame_id, url, true, false); 117 navigation_state.TrackFrame(frame_id, url, true, false);
110 EXPECT_FALSE(navigation_state.CanSendEvents(frame_id)); 118 EXPECT_FALSE(navigation_state.CanSendEvents(frame_id));
111 } 119 }
112 120
113 } // namespace extensions 121 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698