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

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

Issue 11090068: When starting a provisional load include the parent frame ID in the IPC and pass it down the th WCO… (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: updatess Created 8 years, 2 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/testing_profile.h" 7 #include "chrome/test/base/testing_profile.h"
8 #include "testing/gtest/include/gtest/gtest.h" 8 #include "testing/gtest/include/gtest/gtest.h"
9 9
10 namespace extensions { 10 namespace extensions {
11 11
12 content::RenderViewHost* fake_rvh = 12 content::RenderViewHost* fake_rvh =
13 reinterpret_cast<content::RenderViewHost*>(31337); 13 reinterpret_cast<content::RenderViewHost*>(31337);
14 14
15 // 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
16 // goes away. 16 // goes away.
17 TEST(FrameNavigationStateTest, TrackFrame) { 17 TEST(FrameNavigationStateTest, TrackFrame) {
18 FrameNavigationState navigation_state; 18 FrameNavigationState navigation_state;
19 const FrameNavigationState::FrameID frame_id0(-1, fake_rvh);
19 const FrameNavigationState::FrameID frame_id1(23, fake_rvh); 20 const FrameNavigationState::FrameID frame_id1(23, fake_rvh);
20 const FrameNavigationState::FrameID frame_id2(42, fake_rvh); 21 const FrameNavigationState::FrameID frame_id2(42, fake_rvh);
21 const GURL url1("http://www.google.com/"); 22 const GURL url1("http://www.google.com/");
22 const GURL url2("http://mail.google.com/"); 23 const GURL url2("http://mail.google.com/");
23 24
24 // Create a main frame. 25 // Create a main frame.
25 EXPECT_FALSE(navigation_state.CanSendEvents(frame_id1)); 26 EXPECT_FALSE(navigation_state.CanSendEvents(frame_id1));
26 EXPECT_FALSE(navigation_state.IsValidFrame(frame_id1)); 27 EXPECT_FALSE(navigation_state.IsValidFrame(frame_id1));
27 navigation_state.TrackFrame(frame_id1, url1, true, false); 28 navigation_state.TrackFrame(frame_id1, frame_id0, url1, true, false);
28 navigation_state.SetNavigationCommitted(frame_id1); 29 navigation_state.SetNavigationCommitted(frame_id1);
29 EXPECT_TRUE(navigation_state.CanSendEvents(frame_id1)); 30 EXPECT_TRUE(navigation_state.CanSendEvents(frame_id1));
30 EXPECT_TRUE(navigation_state.IsValidFrame(frame_id1)); 31 EXPECT_TRUE(navigation_state.IsValidFrame(frame_id1));
31 32
32 // Add a sub frame. 33 // Add a sub frame.
33 EXPECT_FALSE(navigation_state.CanSendEvents(frame_id2)); 34 EXPECT_FALSE(navigation_state.CanSendEvents(frame_id2));
34 EXPECT_FALSE(navigation_state.IsValidFrame(frame_id2)); 35 EXPECT_FALSE(navigation_state.IsValidFrame(frame_id2));
35 navigation_state.TrackFrame(frame_id2, url2, false, false); 36 navigation_state.TrackFrame(frame_id2, frame_id1, url2, false, false);
36 navigation_state.SetNavigationCommitted(frame_id2); 37 navigation_state.SetNavigationCommitted(frame_id2);
37 EXPECT_TRUE(navigation_state.CanSendEvents(frame_id2)); 38 EXPECT_TRUE(navigation_state.CanSendEvents(frame_id2));
38 EXPECT_TRUE(navigation_state.IsValidFrame(frame_id2)); 39 EXPECT_TRUE(navigation_state.IsValidFrame(frame_id2));
39 40
40 // Check frame state. 41 // Check frame state.
41 EXPECT_TRUE(navigation_state.IsMainFrame(frame_id1)); 42 EXPECT_TRUE(navigation_state.IsMainFrame(frame_id1));
42 EXPECT_EQ(url1, navigation_state.GetUrl(frame_id1)); 43 EXPECT_EQ(url1, navigation_state.GetUrl(frame_id1));
43 EXPECT_FALSE(navigation_state.IsMainFrame(frame_id2)); 44 EXPECT_FALSE(navigation_state.IsMainFrame(frame_id2));
44 EXPECT_EQ(url2, navigation_state.GetUrl(frame_id2)); 45 EXPECT_EQ(url2, navigation_state.GetUrl(frame_id2));
45 EXPECT_EQ(frame_id1, navigation_state.GetMainFrameID()); 46 EXPECT_EQ(frame_id1, navigation_state.GetMainFrameID());
46 47
47 // Drop the frames. 48 // Drop the frames.
48 navigation_state.StopTrackingFramesInRVH(fake_rvh, 49 navigation_state.StopTrackingFramesInRVH(fake_rvh,
49 FrameNavigationState::FrameID()); 50 FrameNavigationState::FrameID());
50 EXPECT_FALSE(navigation_state.CanSendEvents(frame_id1)); 51 EXPECT_FALSE(navigation_state.CanSendEvents(frame_id1));
51 EXPECT_FALSE(navigation_state.IsValidFrame(frame_id1)); 52 EXPECT_FALSE(navigation_state.IsValidFrame(frame_id1));
52 EXPECT_FALSE(navigation_state.CanSendEvents(frame_id2)); 53 EXPECT_FALSE(navigation_state.CanSendEvents(frame_id2));
53 EXPECT_FALSE(navigation_state.IsValidFrame(frame_id2)); 54 EXPECT_FALSE(navigation_state.IsValidFrame(frame_id2));
54 } 55 }
55 56
56 // Test that no events can be sent for a frame after an error occurred, but 57 // Test that no events can be sent for a frame after an error occurred, but
57 // before a new navigation happened in this frame. 58 // before a new navigation happened in this frame.
58 TEST(FrameNavigationStateTest, ErrorState) { 59 TEST(FrameNavigationStateTest, ErrorState) {
59 FrameNavigationState navigation_state; 60 FrameNavigationState navigation_state;
60 const FrameNavigationState::FrameID frame_id(42, fake_rvh); 61 const FrameNavigationState::FrameID frame_id0(-1, fake_rvh);
62 const FrameNavigationState::FrameID frame_id1(42, fake_rvh);
61 const GURL url("http://www.google.com/"); 63 const GURL url("http://www.google.com/");
62 64
63 navigation_state.TrackFrame(frame_id, url, true, false); 65 navigation_state.TrackFrame(frame_id1, frame_id0, url, true, false);
64 EXPECT_TRUE(navigation_state.CanSendEvents(frame_id)); 66 EXPECT_TRUE(navigation_state.CanSendEvents(frame_id1));
65 EXPECT_FALSE(navigation_state.GetErrorOccurredInFrame(frame_id)); 67 EXPECT_FALSE(navigation_state.GetErrorOccurredInFrame(frame_id1));
66 68
67 // After an error occurred, no further events should be sent. 69 // After an error occurred, no further events should be sent.
68 navigation_state.SetErrorOccurredInFrame(frame_id); 70 navigation_state.SetErrorOccurredInFrame(frame_id1);
69 EXPECT_FALSE(navigation_state.CanSendEvents(frame_id)); 71 EXPECT_FALSE(navigation_state.CanSendEvents(frame_id1));
70 EXPECT_TRUE(navigation_state.GetErrorOccurredInFrame(frame_id)); 72 EXPECT_TRUE(navigation_state.GetErrorOccurredInFrame(frame_id1));
71 73
72 // Navigations to a network error page should be ignored. 74 // Navigations to a network error page should be ignored.
73 navigation_state.TrackFrame(frame_id, GURL(), true, true); 75 navigation_state.TrackFrame(frame_id1, frame_id0, GURL(), true, true);
74 EXPECT_FALSE(navigation_state.CanSendEvents(frame_id)); 76 EXPECT_FALSE(navigation_state.CanSendEvents(frame_id1));
75 EXPECT_TRUE(navigation_state.GetErrorOccurredInFrame(frame_id)); 77 EXPECT_TRUE(navigation_state.GetErrorOccurredInFrame(frame_id1));
76 78
77 // However, when the frame navigates again, it should send events again. 79 // However, when the frame navigates again, it should send events again.
78 navigation_state.TrackFrame(frame_id, url, true, false); 80 navigation_state.TrackFrame(frame_id1, frame_id0, url, true, false);
79 EXPECT_TRUE(navigation_state.CanSendEvents(frame_id)); 81 EXPECT_TRUE(navigation_state.CanSendEvents(frame_id1));
80 EXPECT_FALSE(navigation_state.GetErrorOccurredInFrame(frame_id)); 82 EXPECT_FALSE(navigation_state.GetErrorOccurredInFrame(frame_id1));
81 } 83 }
82 84
83 // Tests that for a sub frame, no events are send after an error occurred, but 85 // Tests that for a sub frame, no events are send after an error occurred, but
84 // before a new navigation happened in this frame. 86 // before a new navigation happened in this frame.
85 TEST(FrameNavigationStateTest, ErrorStateFrame) { 87 TEST(FrameNavigationStateTest, ErrorStateFrame) {
86 FrameNavigationState navigation_state; 88 FrameNavigationState navigation_state;
89 const FrameNavigationState::FrameID frame_id0(-1, fake_rvh);
87 const FrameNavigationState::FrameID frame_id1(23, fake_rvh); 90 const FrameNavigationState::FrameID frame_id1(23, fake_rvh);
88 const FrameNavigationState::FrameID frame_id2(42, fake_rvh); 91 const FrameNavigationState::FrameID frame_id2(42, fake_rvh);
89 const GURL url("http://www.google.com/"); 92 const GURL url("http://www.google.com/");
90 93
91 navigation_state.TrackFrame(frame_id1, url, true, false); 94 navigation_state.TrackFrame(frame_id1, frame_id0, url, true, false);
92 navigation_state.TrackFrame(frame_id2, url, false, false); 95 navigation_state.TrackFrame(frame_id2, frame_id1, url, false, false);
93 EXPECT_TRUE(navigation_state.CanSendEvents(frame_id1)); 96 EXPECT_TRUE(navigation_state.CanSendEvents(frame_id1));
94 EXPECT_TRUE(navigation_state.CanSendEvents(frame_id2)); 97 EXPECT_TRUE(navigation_state.CanSendEvents(frame_id2));
95 98
96 // After an error occurred, no further events should be sent. 99 // After an error occurred, no further events should be sent.
97 navigation_state.SetErrorOccurredInFrame(frame_id2); 100 navigation_state.SetErrorOccurredInFrame(frame_id2);
98 EXPECT_TRUE(navigation_state.CanSendEvents(frame_id1)); 101 EXPECT_TRUE(navigation_state.CanSendEvents(frame_id1));
99 EXPECT_FALSE(navigation_state.CanSendEvents(frame_id2)); 102 EXPECT_FALSE(navigation_state.CanSendEvents(frame_id2));
100 103
101 // Navigations to a network error page should be ignored. 104 // Navigations to a network error page should be ignored.
102 navigation_state.TrackFrame(frame_id2, GURL(), false, true); 105 navigation_state.TrackFrame(frame_id2, frame_id1, GURL(), false, true);
103 EXPECT_TRUE(navigation_state.CanSendEvents(frame_id1)); 106 EXPECT_TRUE(navigation_state.CanSendEvents(frame_id1));
104 EXPECT_FALSE(navigation_state.CanSendEvents(frame_id2)); 107 EXPECT_FALSE(navigation_state.CanSendEvents(frame_id2));
105 108
106 // However, when the frame navigates again, it should send events again. 109 // However, when the frame navigates again, it should send events again.
107 navigation_state.TrackFrame(frame_id2, url, false, false); 110 navigation_state.TrackFrame(frame_id2, frame_id1, url, false, false);
108 EXPECT_TRUE(navigation_state.CanSendEvents(frame_id1)); 111 EXPECT_TRUE(navigation_state.CanSendEvents(frame_id1));
109 EXPECT_TRUE(navigation_state.CanSendEvents(frame_id2)); 112 EXPECT_TRUE(navigation_state.CanSendEvents(frame_id2));
110 } 113 }
111 114
112 // Tests that no events are send for a not web-safe scheme. 115 // Tests that no events are send for a not web-safe scheme.
113 TEST(FrameNavigationStateTest, WebSafeScheme) { 116 TEST(FrameNavigationStateTest, WebSafeScheme) {
114 FrameNavigationState navigation_state; 117 FrameNavigationState navigation_state;
115 const FrameNavigationState::FrameID frame_id(23, fake_rvh); 118 const FrameNavigationState::FrameID frame_id0(-1, fake_rvh);
119 const FrameNavigationState::FrameID frame_id1(23, fake_rvh);
116 const GURL url("unsafe://www.google.com/"); 120 const GURL url("unsafe://www.google.com/");
117 121
118 navigation_state.TrackFrame(frame_id, url, true, false); 122 navigation_state.TrackFrame(frame_id1, frame_id0, url, true, false);
119 EXPECT_FALSE(navigation_state.CanSendEvents(frame_id)); 123 EXPECT_FALSE(navigation_state.CanSendEvents(frame_id1));
124 }
125
126 // Test that parent frame IDs are tracked.
127 TEST(FrameNavigationStateTest, ParentFrameID) {
128 FrameNavigationState navigation_state;
129 const FrameNavigationState::FrameID frame_id0(-1, fake_rvh);
130 const FrameNavigationState::FrameID frame_id1(23, fake_rvh);
131 const FrameNavigationState::FrameID frame_id2(42, fake_rvh);
132 const GURL url("http://www.google.com/");
133
134 navigation_state.TrackFrame(frame_id1, frame_id0, url, true, false);
135 navigation_state.TrackFrame(frame_id2, frame_id1, url, false, false);
136 EXPECT_TRUE(navigation_state.CanSendEvents(frame_id1));
137 EXPECT_TRUE(navigation_state.CanSendEvents(frame_id2));
138
139 EXPECT_TRUE(navigation_state.GetParentFrameID(frame_id1) == frame_id0);
140 EXPECT_TRUE(navigation_state.GetParentFrameID(frame_id2) == frame_id1);
120 } 141 }
121 142
122 } // namespace extensions 143 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698