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

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

Issue 11791018: When an iframe displays its srcdoc, generate navigation events for about:srcdoc (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 11 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_id0(-1, fake_rvh);
20 const FrameNavigationState::FrameID frame_id1(23, fake_rvh); 20 const FrameNavigationState::FrameID frame_id1(23, fake_rvh);
21 const FrameNavigationState::FrameID frame_id2(42, fake_rvh); 21 const FrameNavigationState::FrameID frame_id2(42, fake_rvh);
22 const GURL url1("http://www.google.com/"); 22 const GURL url1("http://www.google.com/");
23 const GURL url2("http://mail.google.com/"); 23 const GURL url2("http://mail.google.com/");
24 24
25 // Create a main frame. 25 // Create a main frame.
26 EXPECT_FALSE(navigation_state.CanSendEvents(frame_id1)); 26 EXPECT_FALSE(navigation_state.CanSendEvents(frame_id1));
27 EXPECT_FALSE(navigation_state.IsValidFrame(frame_id1)); 27 EXPECT_FALSE(navigation_state.IsValidFrame(frame_id1));
28 navigation_state.TrackFrame(frame_id1, frame_id0, url1, true, false); 28 navigation_state.TrackFrame(frame_id1, frame_id0, url1, true, false, false);
29 navigation_state.SetNavigationCommitted(frame_id1); 29 navigation_state.SetNavigationCommitted(frame_id1);
30 EXPECT_TRUE(navigation_state.CanSendEvents(frame_id1)); 30 EXPECT_TRUE(navigation_state.CanSendEvents(frame_id1));
31 EXPECT_TRUE(navigation_state.IsValidFrame(frame_id1)); 31 EXPECT_TRUE(navigation_state.IsValidFrame(frame_id1));
32 32
33 // Add a sub frame. 33 // Add a sub frame.
34 EXPECT_FALSE(navigation_state.CanSendEvents(frame_id2)); 34 EXPECT_FALSE(navigation_state.CanSendEvents(frame_id2));
35 EXPECT_FALSE(navigation_state.IsValidFrame(frame_id2)); 35 EXPECT_FALSE(navigation_state.IsValidFrame(frame_id2));
36 navigation_state.TrackFrame(frame_id2, frame_id1, url2, false, false); 36 navigation_state.TrackFrame(frame_id2, frame_id1, url2, false, false, false);
37 navigation_state.SetNavigationCommitted(frame_id2); 37 navigation_state.SetNavigationCommitted(frame_id2);
38 EXPECT_TRUE(navigation_state.CanSendEvents(frame_id2)); 38 EXPECT_TRUE(navigation_state.CanSendEvents(frame_id2));
39 EXPECT_TRUE(navigation_state.IsValidFrame(frame_id2)); 39 EXPECT_TRUE(navigation_state.IsValidFrame(frame_id2));
40 40
41 // Check frame state. 41 // Check frame state.
42 EXPECT_TRUE(navigation_state.IsMainFrame(frame_id1)); 42 EXPECT_TRUE(navigation_state.IsMainFrame(frame_id1));
43 EXPECT_EQ(url1, navigation_state.GetUrl(frame_id1)); 43 EXPECT_EQ(url1, navigation_state.GetUrl(frame_id1));
44 EXPECT_FALSE(navigation_state.IsMainFrame(frame_id2)); 44 EXPECT_FALSE(navigation_state.IsMainFrame(frame_id2));
45 EXPECT_EQ(url2, navigation_state.GetUrl(frame_id2)); 45 EXPECT_EQ(url2, navigation_state.GetUrl(frame_id2));
46 EXPECT_EQ(frame_id1, navigation_state.GetMainFrameID()); 46 EXPECT_EQ(frame_id1, navigation_state.GetMainFrameID());
47 47
48 // Drop the frames. 48 // Drop the frames.
49 navigation_state.StopTrackingFramesInRVH(fake_rvh, 49 navigation_state.StopTrackingFramesInRVH(fake_rvh,
50 FrameNavigationState::FrameID()); 50 FrameNavigationState::FrameID());
51 EXPECT_FALSE(navigation_state.CanSendEvents(frame_id1)); 51 EXPECT_FALSE(navigation_state.CanSendEvents(frame_id1));
52 EXPECT_FALSE(navigation_state.IsValidFrame(frame_id1)); 52 EXPECT_FALSE(navigation_state.IsValidFrame(frame_id1));
53 EXPECT_FALSE(navigation_state.CanSendEvents(frame_id2)); 53 EXPECT_FALSE(navigation_state.CanSendEvents(frame_id2));
54 EXPECT_FALSE(navigation_state.IsValidFrame(frame_id2)); 54 EXPECT_FALSE(navigation_state.IsValidFrame(frame_id2));
55 } 55 }
56 56
57 // 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
58 // before a new navigation happened in this frame. 58 // before a new navigation happened in this frame.
59 TEST(FrameNavigationStateTest, ErrorState) { 59 TEST(FrameNavigationStateTest, ErrorState) {
60 FrameNavigationState navigation_state; 60 FrameNavigationState navigation_state;
61 const FrameNavigationState::FrameID frame_id0(-1, fake_rvh); 61 const FrameNavigationState::FrameID frame_id0(-1, fake_rvh);
62 const FrameNavigationState::FrameID frame_id1(42, fake_rvh); 62 const FrameNavigationState::FrameID frame_id1(42, fake_rvh);
63 const GURL url("http://www.google.com/"); 63 const GURL url("http://www.google.com/");
64 64
65 navigation_state.TrackFrame(frame_id1, frame_id0, url, true, false); 65 navigation_state.TrackFrame(frame_id1, frame_id0, url, true, false, false);
66 EXPECT_TRUE(navigation_state.CanSendEvents(frame_id1)); 66 EXPECT_TRUE(navigation_state.CanSendEvents(frame_id1));
67 EXPECT_FALSE(navigation_state.GetErrorOccurredInFrame(frame_id1)); 67 EXPECT_FALSE(navigation_state.GetErrorOccurredInFrame(frame_id1));
68 68
69 // After an error occurred, no further events should be sent. 69 // After an error occurred, no further events should be sent.
70 navigation_state.SetErrorOccurredInFrame(frame_id1); 70 navigation_state.SetErrorOccurredInFrame(frame_id1);
71 EXPECT_FALSE(navigation_state.CanSendEvents(frame_id1)); 71 EXPECT_FALSE(navigation_state.CanSendEvents(frame_id1));
72 EXPECT_TRUE(navigation_state.GetErrorOccurredInFrame(frame_id1)); 72 EXPECT_TRUE(navigation_state.GetErrorOccurredInFrame(frame_id1));
73 73
74 // Navigations to a network error page should be ignored. 74 // Navigations to a network error page should be ignored.
75 navigation_state.TrackFrame(frame_id1, frame_id0, GURL(), true, true); 75 navigation_state.TrackFrame(frame_id1, frame_id0, GURL(), true, true, false);
76 EXPECT_FALSE(navigation_state.CanSendEvents(frame_id1)); 76 EXPECT_FALSE(navigation_state.CanSendEvents(frame_id1));
77 EXPECT_TRUE(navigation_state.GetErrorOccurredInFrame(frame_id1)); 77 EXPECT_TRUE(navigation_state.GetErrorOccurredInFrame(frame_id1));
78 78
79 // However, when the frame navigates again, it should send events again. 79 // However, when the frame navigates again, it should send events again.
80 navigation_state.TrackFrame(frame_id1, frame_id0, url, true, false); 80 navigation_state.TrackFrame(frame_id1, frame_id0, url, true, false, false);
81 EXPECT_TRUE(navigation_state.CanSendEvents(frame_id1)); 81 EXPECT_TRUE(navigation_state.CanSendEvents(frame_id1));
82 EXPECT_FALSE(navigation_state.GetErrorOccurredInFrame(frame_id1)); 82 EXPECT_FALSE(navigation_state.GetErrorOccurredInFrame(frame_id1));
83 } 83 }
84 84
85 // 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
86 // before a new navigation happened in this frame. 86 // before a new navigation happened in this frame.
87 TEST(FrameNavigationStateTest, ErrorStateFrame) { 87 TEST(FrameNavigationStateTest, ErrorStateFrame) {
88 FrameNavigationState navigation_state; 88 FrameNavigationState navigation_state;
89 const FrameNavigationState::FrameID frame_id0(-1, fake_rvh); 89 const FrameNavigationState::FrameID frame_id0(-1, fake_rvh);
90 const FrameNavigationState::FrameID frame_id1(23, fake_rvh); 90 const FrameNavigationState::FrameID frame_id1(23, fake_rvh);
91 const FrameNavigationState::FrameID frame_id2(42, fake_rvh); 91 const FrameNavigationState::FrameID frame_id2(42, fake_rvh);
92 const GURL url("http://www.google.com/"); 92 const GURL url("http://www.google.com/");
93 93
94 navigation_state.TrackFrame(frame_id1, frame_id0, url, true, false); 94 navigation_state.TrackFrame(frame_id1, frame_id0, url, true, false, false);
95 navigation_state.TrackFrame(frame_id2, frame_id1, url, false, false); 95 navigation_state.TrackFrame(frame_id2, frame_id1, url, false, false, false);
96 EXPECT_TRUE(navigation_state.CanSendEvents(frame_id1)); 96 EXPECT_TRUE(navigation_state.CanSendEvents(frame_id1));
97 EXPECT_TRUE(navigation_state.CanSendEvents(frame_id2)); 97 EXPECT_TRUE(navigation_state.CanSendEvents(frame_id2));
98 98
99 // After an error occurred, no further events should be sent. 99 // After an error occurred, no further events should be sent.
100 navigation_state.SetErrorOccurredInFrame(frame_id2); 100 navigation_state.SetErrorOccurredInFrame(frame_id2);
101 EXPECT_TRUE(navigation_state.CanSendEvents(frame_id1)); 101 EXPECT_TRUE(navigation_state.CanSendEvents(frame_id1));
102 EXPECT_FALSE(navigation_state.CanSendEvents(frame_id2)); 102 EXPECT_FALSE(navigation_state.CanSendEvents(frame_id2));
103 103
104 // Navigations to a network error page should be ignored. 104 // Navigations to a network error page should be ignored.
105 navigation_state.TrackFrame(frame_id2, frame_id1, GURL(), false, true); 105 navigation_state.TrackFrame(frame_id2, frame_id1, GURL(), false, true, false);
106 EXPECT_TRUE(navigation_state.CanSendEvents(frame_id1)); 106 EXPECT_TRUE(navigation_state.CanSendEvents(frame_id1));
107 EXPECT_FALSE(navigation_state.CanSendEvents(frame_id2)); 107 EXPECT_FALSE(navigation_state.CanSendEvents(frame_id2));
108 108
109 // However, when the frame navigates again, it should send events again. 109 // However, when the frame navigates again, it should send events again.
110 navigation_state.TrackFrame(frame_id2, frame_id1, url, false, false); 110 navigation_state.TrackFrame(frame_id2, frame_id1, url, false, false, false);
111 EXPECT_TRUE(navigation_state.CanSendEvents(frame_id1)); 111 EXPECT_TRUE(navigation_state.CanSendEvents(frame_id1));
112 EXPECT_TRUE(navigation_state.CanSendEvents(frame_id2)); 112 EXPECT_TRUE(navigation_state.CanSendEvents(frame_id2));
113 } 113 }
114 114
115 // 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.
116 TEST(FrameNavigationStateTest, WebSafeScheme) { 116 TEST(FrameNavigationStateTest, WebSafeScheme) {
117 FrameNavigationState navigation_state; 117 FrameNavigationState navigation_state;
118 const FrameNavigationState::FrameID frame_id0(-1, fake_rvh); 118 const FrameNavigationState::FrameID frame_id0(-1, fake_rvh);
119 const FrameNavigationState::FrameID frame_id1(23, fake_rvh); 119 const FrameNavigationState::FrameID frame_id1(23, fake_rvh);
120 const GURL url("unsafe://www.google.com/"); 120 const GURL url("unsafe://www.google.com/");
121 121
122 navigation_state.TrackFrame(frame_id1, frame_id0, url, true, false); 122 navigation_state.TrackFrame(frame_id1, frame_id0, url, true, false, false);
123 EXPECT_FALSE(navigation_state.CanSendEvents(frame_id1)); 123 EXPECT_FALSE(navigation_state.CanSendEvents(frame_id1));
124 } 124 }
125 125
126 // Test that parent frame IDs are tracked. 126 // Test that parent frame IDs are tracked.
127 TEST(FrameNavigationStateTest, ParentFrameID) { 127 TEST(FrameNavigationStateTest, ParentFrameID) {
128 FrameNavigationState navigation_state; 128 FrameNavigationState navigation_state;
129 const FrameNavigationState::FrameID frame_id0(-1, fake_rvh); 129 const FrameNavigationState::FrameID frame_id0(-1, fake_rvh);
130 const FrameNavigationState::FrameID frame_id1(23, fake_rvh); 130 const FrameNavigationState::FrameID frame_id1(23, fake_rvh);
131 const FrameNavigationState::FrameID frame_id2(42, fake_rvh); 131 const FrameNavigationState::FrameID frame_id2(42, fake_rvh);
132 const GURL url("http://www.google.com/"); 132 const GURL url("http://www.google.com/");
133 133
134 navigation_state.TrackFrame(frame_id1, frame_id0, url, true, false); 134 navigation_state.TrackFrame(frame_id1, frame_id0, url, true, false, false);
135 navigation_state.TrackFrame(frame_id2, frame_id1, url, false, false); 135 navigation_state.TrackFrame(frame_id2, frame_id1, url, false, false, false);
136 EXPECT_TRUE(navigation_state.CanSendEvents(frame_id1)); 136 EXPECT_TRUE(navigation_state.CanSendEvents(frame_id1));
137 EXPECT_TRUE(navigation_state.CanSendEvents(frame_id2)); 137 EXPECT_TRUE(navigation_state.CanSendEvents(frame_id2));
138 138
139 EXPECT_TRUE(navigation_state.GetParentFrameID(frame_id1) == frame_id0); 139 EXPECT_TRUE(navigation_state.GetParentFrameID(frame_id1) == frame_id0);
140 EXPECT_TRUE(navigation_state.GetParentFrameID(frame_id2) == frame_id1); 140 EXPECT_TRUE(navigation_state.GetParentFrameID(frame_id2) == frame_id1);
141 } 141 }
142 142
143 // Test for <iframe srcdoc=""> frames.
144 TEST(FrameNavigationStateTest, SrcDoc) {
145 FrameNavigationState navigation_state;
146 const FrameNavigationState::FrameID frame_id0(-1, fake_rvh);
147 const FrameNavigationState::FrameID frame_id1(23, fake_rvh);
148 const FrameNavigationState::FrameID frame_id2(42, fake_rvh);
149 const GURL url("http://www.google.com/");
150 const GURL blank("about:blank");
151 const GURL srcdoc("about:srcdoc");
152
153 navigation_state.TrackFrame(frame_id1, frame_id0, url, true, false, false);
154 navigation_state.TrackFrame(frame_id2, frame_id1, blank, false, false, true);
155 EXPECT_TRUE(navigation_state.CanSendEvents(frame_id1));
156 EXPECT_TRUE(navigation_state.CanSendEvents(frame_id2));
157
158 EXPECT_TRUE(navigation_state.GetUrl(frame_id1) == url);
159 EXPECT_TRUE(navigation_state.GetUrl(frame_id2) == srcdoc);
160
161 EXPECT_TRUE(navigation_state.IsValidUrl(srcdoc));
162 }
163
143 } // namespace extensions 164 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698