OLD | NEW |
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/strings/string_number_conversions.h" | 5 #include "base/strings/string_number_conversions.h" |
6 #include "build/build_config.h" | 6 #include "build/build_config.h" |
7 #include "chrome/browser/extensions/extension_apitest.h" | 7 #include "chrome/browser/extensions/extension_apitest.h" |
8 #include "net/dns/mock_host_resolver.h" | 8 #include "net/dns/mock_host_resolver.h" |
9 | 9 |
10 class ExecuteScriptApiTest : public ExtensionApiTest { | 10 class ExecuteScriptApiTest : public ExtensionApiTest { |
11 protected: | 11 protected: |
12 void SetupDelayedHostResolver() { | 12 void SetUpOnMainThread() override { |
| 13 ExtensionApiTest::SetUpOnMainThread(); |
13 // We need a.com to be a little bit slow to trigger a race condition. | 14 // We need a.com to be a little bit slow to trigger a race condition. |
14 host_resolver()->AddRuleWithLatency("a.com", "127.0.0.1", 500); | 15 host_resolver()->AddRuleWithLatency("a.com", "127.0.0.1", 500); |
15 host_resolver()->AddRule("b.com", "127.0.0.1"); | 16 host_resolver()->AddRule("*", "127.0.0.1"); |
16 host_resolver()->AddRule("c.com", "127.0.0.1"); | 17 ASSERT_TRUE(StartEmbeddedTestServer()); |
17 } | 18 } |
18 }; | 19 }; |
19 | 20 |
20 // If failing, mark disabled and update http://crbug.com/92105. | 21 // If failing, mark disabled and update http://crbug.com/92105. |
21 IN_PROC_BROWSER_TEST_F(ExecuteScriptApiTest, ExecuteScriptBasic) { | 22 IN_PROC_BROWSER_TEST_F(ExecuteScriptApiTest, ExecuteScriptBasic) { |
22 SetupDelayedHostResolver(); | |
23 ASSERT_TRUE(StartEmbeddedTestServer()); | |
24 ASSERT_TRUE(RunExtensionTest("executescript/basic")) << message_; | 23 ASSERT_TRUE(RunExtensionTest("executescript/basic")) << message_; |
25 } | 24 } |
26 | 25 |
27 IN_PROC_BROWSER_TEST_F(ExecuteScriptApiTest, ExecuteScriptBadEncoding) { | 26 IN_PROC_BROWSER_TEST_F(ExecuteScriptApiTest, ExecuteScriptBadEncoding) { |
28 SetupDelayedHostResolver(); | |
29 ASSERT_TRUE(StartEmbeddedTestServer()); | |
30 // data/extensions/api_test/../bad = data/extensions/bad | 27 // data/extensions/api_test/../bad = data/extensions/bad |
31 ASSERT_TRUE(RunExtensionTest("../bad")) << message_; | 28 ASSERT_TRUE(RunExtensionTest("../bad")) << message_; |
32 } | 29 } |
33 | 30 |
34 // If failing, mark disabled and update http://crbug.com/92105. | 31 // If failing, mark disabled and update http://crbug.com/92105. |
35 IN_PROC_BROWSER_TEST_F(ExecuteScriptApiTest, ExecuteScriptInFrame) { | 32 IN_PROC_BROWSER_TEST_F(ExecuteScriptApiTest, ExecuteScriptInFrame) { |
36 SetupDelayedHostResolver(); | |
37 ASSERT_TRUE(StartEmbeddedTestServer()); | |
38 ASSERT_TRUE(RunExtensionTest("executescript/in_frame")) << message_; | 33 ASSERT_TRUE(RunExtensionTest("executescript/in_frame")) << message_; |
39 } | 34 } |
40 | 35 |
41 IN_PROC_BROWSER_TEST_F(ExecuteScriptApiTest, ExecuteScriptByFrameId) { | 36 IN_PROC_BROWSER_TEST_F(ExecuteScriptApiTest, ExecuteScriptByFrameId) { |
42 SetupDelayedHostResolver(); | |
43 ASSERT_TRUE(StartEmbeddedTestServer()); | |
44 ASSERT_TRUE(RunExtensionTest("executescript/frame_id")) << message_; | 37 ASSERT_TRUE(RunExtensionTest("executescript/frame_id")) << message_; |
45 } | 38 } |
46 | 39 |
47 // Fails often on Windows. | 40 // Fails often on Windows. |
48 // http://crbug.com/174715 | 41 // http://crbug.com/174715 |
49 #if defined(OS_WIN) | 42 #if defined(OS_WIN) |
50 #define MAYBE_ExecuteScriptPermissions DISABLED_ExecuteScriptPermissions | 43 #define MAYBE_ExecuteScriptPermissions DISABLED_ExecuteScriptPermissions |
51 #else | 44 #else |
52 #define MAYBE_ExecuteScriptPermissions ExecuteScriptPermissions | 45 #define MAYBE_ExecuteScriptPermissions ExecuteScriptPermissions |
53 #endif // defined(OS_WIN) | 46 #endif // defined(OS_WIN) |
54 | 47 |
55 IN_PROC_BROWSER_TEST_F(ExecuteScriptApiTest, MAYBE_ExecuteScriptPermissions) { | 48 IN_PROC_BROWSER_TEST_F(ExecuteScriptApiTest, MAYBE_ExecuteScriptPermissions) { |
56 SetupDelayedHostResolver(); | |
57 ASSERT_TRUE(StartEmbeddedTestServer()); | |
58 ASSERT_TRUE(RunExtensionTest("executescript/permissions")) << message_; | 49 ASSERT_TRUE(RunExtensionTest("executescript/permissions")) << message_; |
59 } | 50 } |
60 | 51 |
61 // If failing, mark disabled and update http://crbug.com/84760. | 52 // If failing, mark disabled and update http://crbug.com/84760. |
62 IN_PROC_BROWSER_TEST_F(ExecuteScriptApiTest, ExecuteScriptFileAfterClose) { | 53 IN_PROC_BROWSER_TEST_F(ExecuteScriptApiTest, ExecuteScriptFileAfterClose) { |
63 host_resolver()->AddRule("b.com", "127.0.0.1"); | |
64 ASSERT_TRUE(StartEmbeddedTestServer()); | |
65 ASSERT_TRUE(RunExtensionTest("executescript/file_after_close")) << message_; | 54 ASSERT_TRUE(RunExtensionTest("executescript/file_after_close")) << message_; |
66 } | 55 } |
67 | 56 |
68 // If crashing, mark disabled and update http://crbug.com/67774. | 57 // If crashing, mark disabled and update http://crbug.com/67774. |
69 IN_PROC_BROWSER_TEST_F(ExecuteScriptApiTest, ExecuteScriptFragmentNavigation) { | 58 IN_PROC_BROWSER_TEST_F(ExecuteScriptApiTest, ExecuteScriptFragmentNavigation) { |
70 ASSERT_TRUE(StartEmbeddedTestServer()); | |
71 const char extension_name[] = "executescript/fragment"; | 59 const char extension_name[] = "executescript/fragment"; |
72 ASSERT_TRUE(RunExtensionTest(extension_name)) << message_; | 60 ASSERT_TRUE(RunExtensionTest(extension_name)) << message_; |
73 } | 61 } |
74 | 62 |
75 // Fails often on Windows dbg bots. http://crbug.com/177163 | 63 // Fails often on Windows dbg bots. http://crbug.com/177163 |
76 #if defined(OS_WIN) | 64 #if defined(OS_WIN) |
77 #define MAYBE_NavigationRaceExecuteScript DISABLED_NavigationRaceExecuteScript | 65 #define MAYBE_NavigationRaceExecuteScript DISABLED_NavigationRaceExecuteScript |
78 #else | 66 #else |
79 #define MAYBE_NavigationRaceExecuteScript NavigationRaceExecuteScript | 67 #define MAYBE_NavigationRaceExecuteScript NavigationRaceExecuteScript |
80 #endif // defined(OS_WIN) | 68 #endif // defined(OS_WIN) |
81 IN_PROC_BROWSER_TEST_F(ExecuteScriptApiTest, | 69 IN_PROC_BROWSER_TEST_F(ExecuteScriptApiTest, |
82 MAYBE_NavigationRaceExecuteScript) { | 70 MAYBE_NavigationRaceExecuteScript) { |
83 host_resolver()->AddRule("a.com", "127.0.0.1"); | |
84 host_resolver()->AddRule("b.com", "127.0.0.1"); | |
85 ASSERT_TRUE(StartEmbeddedTestServer()); | |
86 ASSERT_TRUE(RunExtensionSubtest("executescript/navigation_race", | 71 ASSERT_TRUE(RunExtensionSubtest("executescript/navigation_race", |
87 "execute_script.html")) << message_; | 72 "execute_script.html")) << message_; |
88 } | 73 } |
89 | 74 |
90 IN_PROC_BROWSER_TEST_F(ExecuteScriptApiTest, NavigationRaceJavaScriptURL) { | 75 IN_PROC_BROWSER_TEST_F(ExecuteScriptApiTest, NavigationRaceJavaScriptURL) { |
91 host_resolver()->AddRule("a.com", "127.0.0.1"); | |
92 host_resolver()->AddRule("b.com", "127.0.0.1"); | |
93 ASSERT_TRUE(StartEmbeddedTestServer()); | |
94 ASSERT_TRUE(RunExtensionSubtest("executescript/navigation_race", | 76 ASSERT_TRUE(RunExtensionSubtest("executescript/navigation_race", |
95 "javascript_url.html")) << message_; | 77 "javascript_url.html")) << message_; |
96 } | 78 } |
97 | 79 |
98 // If failing, mark disabled and update http://crbug.com/92105. | 80 // If failing, mark disabled and update http://crbug.com/92105. |
99 IN_PROC_BROWSER_TEST_F(ExecuteScriptApiTest, ExecuteScriptFrameAfterLoad) { | 81 IN_PROC_BROWSER_TEST_F(ExecuteScriptApiTest, ExecuteScriptFrameAfterLoad) { |
100 SetupDelayedHostResolver(); | |
101 ASSERT_TRUE(StartEmbeddedTestServer()); | |
102 ASSERT_TRUE(RunExtensionTest("executescript/frame_after_load")) << message_; | 82 ASSERT_TRUE(RunExtensionTest("executescript/frame_after_load")) << message_; |
103 } | 83 } |
104 | 84 |
105 IN_PROC_BROWSER_TEST_F(ExecuteScriptApiTest, FrameWithHttp204) { | 85 IN_PROC_BROWSER_TEST_F(ExecuteScriptApiTest, FrameWithHttp204) { |
106 host_resolver()->AddRule("b.com", "127.0.0.1"); | |
107 host_resolver()->AddRule("c.com", "127.0.0.1"); | |
108 ASSERT_TRUE(StartEmbeddedTestServer()); | |
109 ASSERT_TRUE(RunExtensionTest("executescript/http204")) << message_; | 86 ASSERT_TRUE(RunExtensionTest("executescript/http204")) << message_; |
110 } | 87 } |
111 | 88 |
112 IN_PROC_BROWSER_TEST_F(ExecuteScriptApiTest, ExecuteScriptRunAt) { | 89 IN_PROC_BROWSER_TEST_F(ExecuteScriptApiTest, ExecuteScriptRunAt) { |
113 SetupDelayedHostResolver(); | |
114 ASSERT_TRUE(StartEmbeddedTestServer()); | |
115 ASSERT_TRUE(RunExtensionTest("executescript/run_at")) << message_; | 90 ASSERT_TRUE(RunExtensionTest("executescript/run_at")) << message_; |
116 } | 91 } |
117 | 92 |
118 IN_PROC_BROWSER_TEST_F(ExecuteScriptApiTest, ExecuteScriptCallback) { | 93 IN_PROC_BROWSER_TEST_F(ExecuteScriptApiTest, ExecuteScriptCallback) { |
119 SetupDelayedHostResolver(); | |
120 ASSERT_TRUE(StartEmbeddedTestServer()); | |
121 ASSERT_TRUE(RunExtensionTest("executescript/callback")) << message_; | 94 ASSERT_TRUE(RunExtensionTest("executescript/callback")) << message_; |
122 } | 95 } |
123 | 96 |
124 IN_PROC_BROWSER_TEST_F(ExecuteScriptApiTest, UserGesture) { | 97 IN_PROC_BROWSER_TEST_F(ExecuteScriptApiTest, UserGesture) { |
125 SetupDelayedHostResolver(); | |
126 ASSERT_TRUE(StartEmbeddedTestServer()); | |
127 ASSERT_TRUE(RunExtensionTest("executescript/user_gesture")) << message_; | 98 ASSERT_TRUE(RunExtensionTest("executescript/user_gesture")) << message_; |
128 } | 99 } |
129 | 100 |
130 IN_PROC_BROWSER_TEST_F(ExecuteScriptApiTest, InjectIntoSubframesOnLoad) { | 101 IN_PROC_BROWSER_TEST_F(ExecuteScriptApiTest, InjectIntoSubframesOnLoad) { |
131 SetupDelayedHostResolver(); | |
132 ASSERT_TRUE(StartEmbeddedTestServer()); | |
133 ASSERT_TRUE(RunExtensionTest("executescript/subframes_on_load")) << message_; | 102 ASSERT_TRUE(RunExtensionTest("executescript/subframes_on_load")) << message_; |
134 } | 103 } |
135 | 104 |
136 IN_PROC_BROWSER_TEST_F(ExecuteScriptApiTest, RemovedFrames) { | 105 IN_PROC_BROWSER_TEST_F(ExecuteScriptApiTest, RemovedFrames) { |
137 SetupDelayedHostResolver(); | |
138 ASSERT_TRUE(StartEmbeddedTestServer()); | |
139 ASSERT_TRUE(RunExtensionTest("executescript/removed_frames")) << message_; | 106 ASSERT_TRUE(RunExtensionTest("executescript/removed_frames")) << message_; |
140 } | 107 } |
141 | 108 |
142 // If tests time out because it takes too long to run them, then this value can | 109 // If tests time out because it takes too long to run them, then this value can |
143 // be increased to split the DestructiveScriptTest tests in approximately equal | 110 // be increased to split the DestructiveScriptTest tests in approximately equal |
144 // parts. Each part takes approximately the same time to run. | 111 // parts. Each part takes approximately the same time to run. |
145 const int kDestructiveScriptTestBucketCount = 1; | 112 const int kDestructiveScriptTestBucketCount = 1; |
146 | 113 |
147 class DestructiveScriptTest : public ExecuteScriptApiTest, | 114 class DestructiveScriptTest : public ExecuteScriptApiTest, |
148 public testing::WithParamInterface<int> { | 115 public testing::WithParamInterface<int> { |
149 protected: | 116 protected: |
150 // The test extension selects the sub test based on the host name. | 117 // The test extension selects the sub test based on the host name. |
151 bool RunSubtest(const std::string& test_host) { | 118 bool RunSubtest(const std::string& test_host) { |
152 host_resolver()->AddRule(test_host, "127.0.0.1"); | |
153 return RunExtensionSubtest( | 119 return RunExtensionSubtest( |
154 "executescript/destructive", | 120 "executescript/destructive", |
155 "test.html?" + test_host + | 121 "test.html?" + test_host + |
156 "#bucketcount=" + base::IntToString(kDestructiveScriptTestBucketCount) + | 122 "#bucketcount=" + base::IntToString(kDestructiveScriptTestBucketCount) + |
157 "&bucketindex=" + base::IntToString(GetParam())); | 123 "&bucketindex=" + base::IntToString(GetParam())); |
158 } | 124 } |
159 }; | 125 }; |
160 | 126 |
161 // Removes the frame as soon as the content script is executed. | 127 // Removes the frame as soon as the content script is executed. |
162 IN_PROC_BROWSER_TEST_P(DestructiveScriptTest, SynchronousRemoval) { | 128 IN_PROC_BROWSER_TEST_P(DestructiveScriptTest, SynchronousRemoval) { |
163 ASSERT_TRUE(StartEmbeddedTestServer()); | |
164 ASSERT_TRUE(RunSubtest("synchronous")) << message_; | 129 ASSERT_TRUE(RunSubtest("synchronous")) << message_; |
165 } | 130 } |
166 | 131 |
167 // Removes the frame at the frame's first scheduled microtask. | 132 // Removes the frame at the frame's first scheduled microtask. |
168 IN_PROC_BROWSER_TEST_P(DestructiveScriptTest, MicrotaskRemoval) { | 133 IN_PROC_BROWSER_TEST_P(DestructiveScriptTest, MicrotaskRemoval) { |
169 ASSERT_TRUE(StartEmbeddedTestServer()); | |
170 ASSERT_TRUE(RunSubtest("microtask")) << message_; | 134 ASSERT_TRUE(RunSubtest("microtask")) << message_; |
171 } | 135 } |
172 | 136 |
173 // Removes the frame at the frame's first scheduled macrotask. | 137 // Removes the frame at the frame's first scheduled macrotask. |
174 IN_PROC_BROWSER_TEST_P(DestructiveScriptTest, MacrotaskRemoval) { | 138 IN_PROC_BROWSER_TEST_P(DestructiveScriptTest, MacrotaskRemoval) { |
175 ASSERT_TRUE(StartEmbeddedTestServer()); | |
176 ASSERT_TRUE(RunSubtest("macrotask")) << message_; | 139 ASSERT_TRUE(RunSubtest("macrotask")) << message_; |
177 } | 140 } |
178 | 141 |
179 // Removes the frame at the first DOMNodeInserted event. | 142 // Removes the frame at the first DOMNodeInserted event. |
180 IN_PROC_BROWSER_TEST_P(DestructiveScriptTest, DOMNodeInserted1) { | 143 IN_PROC_BROWSER_TEST_P(DestructiveScriptTest, DOMNodeInserted1) { |
181 ASSERT_TRUE(StartEmbeddedTestServer()); | |
182 ASSERT_TRUE(RunSubtest("domnodeinserted1")) << message_; | 144 ASSERT_TRUE(RunSubtest("domnodeinserted1")) << message_; |
183 } | 145 } |
184 | 146 |
185 // Removes the frame at the second DOMNodeInserted event. | 147 // Removes the frame at the second DOMNodeInserted event. |
186 IN_PROC_BROWSER_TEST_P(DestructiveScriptTest, DOMNodeInserted2) { | 148 IN_PROC_BROWSER_TEST_P(DestructiveScriptTest, DOMNodeInserted2) { |
187 ASSERT_TRUE(StartEmbeddedTestServer()); | |
188 ASSERT_TRUE(RunSubtest("domnodeinserted2")) << message_; | 149 ASSERT_TRUE(RunSubtest("domnodeinserted2")) << message_; |
189 } | 150 } |
190 | 151 |
191 // Removes the frame at the third DOMNodeInserted event. | 152 // Removes the frame at the third DOMNodeInserted event. |
192 IN_PROC_BROWSER_TEST_P(DestructiveScriptTest, DOMNodeInserted3) { | 153 IN_PROC_BROWSER_TEST_P(DestructiveScriptTest, DOMNodeInserted3) { |
193 ASSERT_TRUE(StartEmbeddedTestServer()); | |
194 ASSERT_TRUE(RunSubtest("domnodeinserted3")) << message_; | 154 ASSERT_TRUE(RunSubtest("domnodeinserted3")) << message_; |
195 } | 155 } |
196 | 156 |
197 // Removes the frame at the first DOMSubtreeModified event. | 157 // Removes the frame at the first DOMSubtreeModified event. |
198 IN_PROC_BROWSER_TEST_P(DestructiveScriptTest, DOMSubtreeModified1) { | 158 IN_PROC_BROWSER_TEST_P(DestructiveScriptTest, DOMSubtreeModified1) { |
199 ASSERT_TRUE(StartEmbeddedTestServer()); | |
200 ASSERT_TRUE(RunSubtest("domsubtreemodified1")) << message_; | 159 ASSERT_TRUE(RunSubtest("domsubtreemodified1")) << message_; |
201 } | 160 } |
202 | 161 |
203 // Removes the frame at the second DOMSubtreeModified event. | 162 // Removes the frame at the second DOMSubtreeModified event. |
204 IN_PROC_BROWSER_TEST_P(DestructiveScriptTest, DOMSubtreeModified2) { | 163 IN_PROC_BROWSER_TEST_P(DestructiveScriptTest, DOMSubtreeModified2) { |
205 ASSERT_TRUE(StartEmbeddedTestServer()); | |
206 ASSERT_TRUE(RunSubtest("domsubtreemodified2")) << message_; | 164 ASSERT_TRUE(RunSubtest("domsubtreemodified2")) << message_; |
207 } | 165 } |
208 | 166 |
209 // Removes the frame at the third DOMSubtreeModified event. | 167 // Removes the frame at the third DOMSubtreeModified event. |
210 IN_PROC_BROWSER_TEST_P(DestructiveScriptTest, DOMSubtreeModified3) { | 168 IN_PROC_BROWSER_TEST_P(DestructiveScriptTest, DOMSubtreeModified3) { |
211 ASSERT_TRUE(StartEmbeddedTestServer()); | |
212 ASSERT_TRUE(RunSubtest("domsubtreemodified3")) << message_; | 169 ASSERT_TRUE(RunSubtest("domsubtreemodified3")) << message_; |
213 } | 170 } |
214 | 171 |
215 INSTANTIATE_TEST_CASE_P(ExecuteScriptApiTest, | 172 INSTANTIATE_TEST_CASE_P(ExecuteScriptApiTest, |
216 DestructiveScriptTest, | 173 DestructiveScriptTest, |
217 ::testing::Range(0, kDestructiveScriptTestBucketCount)); | 174 ::testing::Range(0, kDestructiveScriptTestBucketCount)); |
OLD | NEW |