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 "chrome/renderer/chrome_content_renderer_client.h" | 5 #include "chrome/renderer/chrome_content_renderer_client.h" |
6 | 6 |
7 #include "base/strings/utf_string_conversions.h" | 7 #include "base/strings/utf_string_conversions.h" |
8 #include "chrome/common/extensions/extension.h" | 8 #include "chrome/common/extensions/extension.h" |
9 #include "chrome/common/extensions/extension_builder.h" | 9 #include "chrome/common/extensions/extension_builder.h" |
10 #include "chrome/common/extensions/extension_manifest_constants.h" | 10 #include "chrome/common/extensions/extension_manifest_constants.h" |
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
119 WebPluginInfo info; | 119 WebPluginInfo info; |
120 AddContentTypeHandler(&info, "application/x-foo", "www.foo.com"); | 120 AddContentTypeHandler(&info, "application/x-foo", "www.foo.com"); |
121 EXPECT_EQ(GURL("www.foo.com"), | 121 EXPECT_EQ(GURL("www.foo.com"), |
122 ChromeContentRendererClient::GetNaClContentHandlerURL( | 122 ChromeContentRendererClient::GetNaClContentHandlerURL( |
123 "application/x-foo", info)); | 123 "application/x-foo", info)); |
124 } | 124 } |
125 // --enable-nacl allows all NaCl apps, with 'dev' interfaces. | 125 // --enable-nacl allows all NaCl apps, with 'dev' interfaces. |
126 { | 126 { |
127 WebPluginParams params; | 127 WebPluginParams params; |
128 EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed( | 128 EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed( |
129 GURL(), GURL(), kNaClUnrestricted, | 129 GURL(), |
130 CreateExtension(kExtensionRestricted, kExtensionNotFromWebStore), | 130 GURL(), |
| 131 kNaClUnrestricted, |
| 132 CreateExtension(kExtensionRestricted, kExtensionNotFromWebStore).get(), |
131 ¶ms)); | 133 ¶ms)); |
132 EXPECT_TRUE(AllowsDevInterfaces(params)); | 134 EXPECT_TRUE(AllowsDevInterfaces(params)); |
133 } | 135 } |
134 // Unrestricted extensions are allowed without --enable-nacl, with 'dev' | 136 // Unrestricted extensions are allowed without --enable-nacl, with 'dev' |
135 // interfaces if called from an extension url. | 137 // interfaces if called from an extension url. |
136 { | 138 { |
137 WebPluginParams params; | 139 WebPluginParams params; |
138 EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed( | 140 EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed( |
139 GURL(), GURL(kExtensionUrl), kNaClRestricted, | 141 GURL(), |
140 CreateExtension(kExtensionUnrestricted, kExtensionNotFromWebStore), | 142 GURL(kExtensionUrl), |
| 143 kNaClRestricted, |
| 144 CreateExtension(kExtensionUnrestricted, kExtensionNotFromWebStore) |
| 145 .get(), |
141 ¶ms)); | 146 ¶ms)); |
142 EXPECT_TRUE(AllowsDevInterfaces(params)); | 147 EXPECT_TRUE(AllowsDevInterfaces(params)); |
143 } | 148 } |
144 // CWS extensions are allowed without --enable-nacl, without 'dev' | 149 // CWS extensions are allowed without --enable-nacl, without 'dev' |
145 // interfaces if called from an extension url. | 150 // interfaces if called from an extension url. |
146 { | 151 { |
147 WebPluginParams params; | 152 WebPluginParams params; |
148 EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed( | 153 EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed( |
149 GURL(), GURL(kExtensionUrl), kNaClRestricted, | 154 GURL(), |
150 CreateExtension(kExtensionRestricted, kExtensionFromWebStore), | 155 GURL(kExtensionUrl), |
| 156 kNaClRestricted, |
| 157 CreateExtension(kExtensionRestricted, kExtensionFromWebStore).get(), |
151 ¶ms)); | 158 ¶ms)); |
152 EXPECT_FALSE(AllowsDevInterfaces(params)); | 159 EXPECT_FALSE(AllowsDevInterfaces(params)); |
153 } | 160 } |
154 // CWS extensions can't get 'dev' interfaces with --enable-nacl. | 161 // CWS extensions can't get 'dev' interfaces with --enable-nacl. |
155 { | 162 { |
156 WebPluginParams params; | 163 WebPluginParams params; |
157 EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed( | 164 EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed( |
158 GURL(), GURL(kExtensionUrl), kNaClUnrestricted, | 165 GURL(), |
159 CreateExtension(kExtensionRestricted, kExtensionFromWebStore), | 166 GURL(kExtensionUrl), |
| 167 kNaClUnrestricted, |
| 168 CreateExtension(kExtensionRestricted, kExtensionFromWebStore).get(), |
160 ¶ms)); | 169 ¶ms)); |
161 EXPECT_FALSE(AllowsDevInterfaces(params)); | 170 EXPECT_FALSE(AllowsDevInterfaces(params)); |
162 } | 171 } |
163 // CWS extensions can't get 'dev' interfaces by injecting a fake | 172 // CWS extensions can't get 'dev' interfaces by injecting a fake |
164 // '@dev' attribute. | 173 // '@dev' attribute. |
165 { | 174 { |
166 WebPluginParams params; | 175 WebPluginParams params; |
167 AddFakeDevAttribute(¶ms); | 176 AddFakeDevAttribute(¶ms); |
168 EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed( | 177 EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed( |
169 GURL(), GURL(kExtensionUrl), kNaClRestricted, | 178 GURL(), |
170 CreateExtension(kExtensionRestricted, kExtensionFromWebStore), | 179 GURL(kExtensionUrl), |
| 180 kNaClRestricted, |
| 181 CreateExtension(kExtensionRestricted, kExtensionFromWebStore).get(), |
171 ¶ms)); | 182 ¶ms)); |
172 EXPECT_FALSE(AllowsDevInterfaces(params)); | 183 EXPECT_FALSE(AllowsDevInterfaces(params)); |
173 } | 184 } |
174 // The NaCl PDF extension is allowed without --enable-nacl, with 'dev' | 185 // The NaCl PDF extension is allowed without --enable-nacl, with 'dev' |
175 // interfaces, from all URLs. | 186 // interfaces, from all URLs. |
176 { | 187 { |
177 WebPluginParams params; | 188 WebPluginParams params; |
178 EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed( | 189 EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed( |
179 GURL("chrome-extension://acadkphlmlegjaadjagenfimbpphcgnh"), | 190 GURL("chrome-extension://acadkphlmlegjaadjagenfimbpphcgnh"), |
180 GURL(), kNaClRestricted, | 191 GURL(), |
181 CreateExtension(kExtensionRestricted, kExtensionFromWebStore), | 192 kNaClRestricted, |
| 193 CreateExtension(kExtensionRestricted, kExtensionFromWebStore).get(), |
182 ¶ms)); | 194 ¶ms)); |
183 EXPECT_TRUE(AllowsDevInterfaces(params)); | 195 EXPECT_TRUE(AllowsDevInterfaces(params)); |
184 } | 196 } |
185 // Whitelisted URLs are allowed without --enable-nacl, without 'dev' | 197 // Whitelisted URLs are allowed without --enable-nacl, without 'dev' |
186 // interfaces. | 198 // interfaces. |
187 { | 199 { |
188 WebPluginParams params; | 200 WebPluginParams params; |
189 EXPECT_FALSE(ChromeContentRendererClient::IsNaClAllowed( | 201 EXPECT_FALSE(ChromeContentRendererClient::IsNaClAllowed( |
190 GURL(), GURL("http://plus.google.com/foo"), | 202 GURL(), |
| 203 GURL("http://plus.google.com/foo"), |
191 kNaClRestricted, | 204 kNaClRestricted, |
192 CreateExtension(kExtensionRestricted, kExtensionNotFromWebStore), | 205 CreateExtension(kExtensionRestricted, kExtensionNotFromWebStore).get(), |
193 ¶ms)); | 206 ¶ms)); |
194 EXPECT_FALSE(AllowsDevInterfaces(params)); | 207 EXPECT_FALSE(AllowsDevInterfaces(params)); |
195 EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed( | 208 EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed( |
196 GURL(), GURL("https://plus.google.com/foo"), | 209 GURL(), |
| 210 GURL("https://plus.google.com/foo"), |
197 kNaClRestricted, | 211 kNaClRestricted, |
198 CreateExtension(kExtensionRestricted, kExtensionNotFromWebStore), | 212 CreateExtension(kExtensionRestricted, kExtensionNotFromWebStore).get(), |
199 ¶ms)); | 213 ¶ms)); |
200 EXPECT_FALSE(AllowsDevInterfaces(params)); | 214 EXPECT_FALSE(AllowsDevInterfaces(params)); |
201 EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed( | 215 EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed( |
202 GURL(), GURL("https://plus.google.com/209089085730"), | 216 GURL(), |
| 217 GURL("https://plus.google.com/209089085730"), |
203 kNaClRestricted, | 218 kNaClRestricted, |
204 CreateExtension(kExtensionRestricted, kExtensionNotFromWebStore), | 219 CreateExtension(kExtensionRestricted, kExtensionNotFromWebStore).get(), |
205 ¶ms)); | 220 ¶ms)); |
206 EXPECT_FALSE(AllowsDevInterfaces(params)); | 221 EXPECT_FALSE(AllowsDevInterfaces(params)); |
207 EXPECT_FALSE(ChromeContentRendererClient::IsNaClAllowed( | 222 EXPECT_FALSE(ChromeContentRendererClient::IsNaClAllowed( |
208 GURL(), GURL("http://plus.sandbox.google.com/foo"), | 223 GURL(), |
| 224 GURL("http://plus.sandbox.google.com/foo"), |
209 kNaClRestricted, | 225 kNaClRestricted, |
210 CreateExtension(kExtensionRestricted, kExtensionNotFromWebStore), | 226 CreateExtension(kExtensionRestricted, kExtensionNotFromWebStore).get(), |
211 ¶ms)); | 227 ¶ms)); |
212 EXPECT_FALSE(AllowsDevInterfaces(params)); | 228 EXPECT_FALSE(AllowsDevInterfaces(params)); |
213 EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed( | 229 EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed( |
214 GURL(), GURL("https://plus.sandbox.google.com/foo"), | 230 GURL(), |
| 231 GURL("https://plus.sandbox.google.com/foo"), |
215 kNaClRestricted, | 232 kNaClRestricted, |
216 CreateExtension(kExtensionRestricted, kExtensionNotFromWebStore), | 233 CreateExtension(kExtensionRestricted, kExtensionNotFromWebStore).get(), |
217 ¶ms)); | 234 ¶ms)); |
218 EXPECT_FALSE(AllowsDevInterfaces(params)); | 235 EXPECT_FALSE(AllowsDevInterfaces(params)); |
219 EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed( | 236 EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed( |
220 GURL(), GURL("https://plus.google.com/209089085730"), | 237 GURL(), |
| 238 GURL("https://plus.google.com/209089085730"), |
221 kNaClRestricted, | 239 kNaClRestricted, |
222 CreateExtension(kExtensionRestricted, kExtensionNotFromWebStore), | 240 CreateExtension(kExtensionRestricted, kExtensionNotFromWebStore).get(), |
223 ¶ms)); | 241 ¶ms)); |
224 EXPECT_FALSE(AllowsDevInterfaces(params)); | 242 EXPECT_FALSE(AllowsDevInterfaces(params)); |
225 } | 243 } |
226 // Whitelisted URLs can't get 'dev' interfaces with --enable-nacl. | 244 // Whitelisted URLs can't get 'dev' interfaces with --enable-nacl. |
227 { | 245 { |
228 WebPluginParams params; | 246 WebPluginParams params; |
229 EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed( | 247 EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed( |
230 GURL(), GURL("https://plus.google.com/209089085730"), | 248 GURL(), |
| 249 GURL("https://plus.google.com/209089085730"), |
231 kNaClUnrestricted, | 250 kNaClUnrestricted, |
232 CreateExtension(kExtensionRestricted, kExtensionNotFromWebStore), | 251 CreateExtension(kExtensionRestricted, kExtensionNotFromWebStore).get(), |
233 ¶ms)); | 252 ¶ms)); |
234 EXPECT_FALSE(AllowsDevInterfaces(params)); | 253 EXPECT_FALSE(AllowsDevInterfaces(params)); |
235 } | 254 } |
236 // Whitelisted URLs can't get 'dev' interfaces by injecting a fake | 255 // Whitelisted URLs can't get 'dev' interfaces by injecting a fake |
237 // '@dev' attribute. | 256 // '@dev' attribute. |
238 { | 257 { |
239 WebPluginParams params; | 258 WebPluginParams params; |
240 AddFakeDevAttribute(¶ms); | 259 AddFakeDevAttribute(¶ms); |
241 EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed( | 260 EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed( |
242 GURL(), GURL("https://plus.google.com/209089085730"), | 261 GURL(), |
| 262 GURL("https://plus.google.com/209089085730"), |
243 kNaClRestricted, | 263 kNaClRestricted, |
244 CreateExtension(kExtensionRestricted, kExtensionNotFromWebStore), | 264 CreateExtension(kExtensionRestricted, kExtensionNotFromWebStore).get(), |
245 ¶ms)); | 265 ¶ms)); |
246 EXPECT_FALSE(AllowsDevInterfaces(params)); | 266 EXPECT_FALSE(AllowsDevInterfaces(params)); |
247 } | 267 } |
248 // Non-whitelisted URLs are blocked without --enable-nacl. | 268 // Non-whitelisted URLs are blocked without --enable-nacl. |
249 { | 269 { |
250 WebPluginParams params; | 270 WebPluginParams params; |
251 EXPECT_FALSE(ChromeContentRendererClient::IsNaClAllowed( | 271 EXPECT_FALSE(ChromeContentRendererClient::IsNaClAllowed( |
252 GURL(), GURL("https://plus.google.com.evil.com/foo1"), | 272 GURL(), |
| 273 GURL("https://plus.google.com.evil.com/foo1"), |
253 kNaClRestricted, | 274 kNaClRestricted, |
254 CreateExtension(kExtensionRestricted, kExtensionNotFromWebStore), | 275 CreateExtension(kExtensionRestricted, kExtensionNotFromWebStore).get(), |
255 ¶ms)); | 276 ¶ms)); |
256 EXPECT_FALSE(ChromeContentRendererClient::IsNaClAllowed( | 277 EXPECT_FALSE(ChromeContentRendererClient::IsNaClAllowed( |
257 GURL(), GURL("https://plus.google.com.evil.com/foo2"), | 278 GURL(), |
| 279 GURL("https://plus.google.com.evil.com/foo2"), |
258 kNaClRestricted, | 280 kNaClRestricted, |
259 CreateExtension(kExtensionRestricted, kExtensionFromWebStore), | 281 CreateExtension(kExtensionRestricted, kExtensionFromWebStore).get(), |
260 ¶ms)); | 282 ¶ms)); |
261 EXPECT_FALSE(ChromeContentRendererClient::IsNaClAllowed( | 283 EXPECT_FALSE(ChromeContentRendererClient::IsNaClAllowed( |
262 GURL(), GURL("https://plus.google.com.evil.com/foo3"), | 284 GURL(), |
| 285 GURL("https://plus.google.com.evil.com/foo3"), |
263 kNaClRestricted, | 286 kNaClRestricted, |
264 CreateExtension(kExtensionUnrestricted, kExtensionNotFromWebStore), | 287 CreateExtension(kExtensionUnrestricted, kExtensionNotFromWebStore) |
| 288 .get(), |
265 ¶ms)); | 289 ¶ms)); |
266 EXPECT_FALSE(ChromeContentRendererClient::IsNaClAllowed( | 290 EXPECT_FALSE(ChromeContentRendererClient::IsNaClAllowed( |
267 GURL(), GURL("https://plus.google.com.evil.com/foo4"), | 291 GURL(), |
| 292 GURL("https://plus.google.com.evil.com/foo4"), |
268 kNaClRestricted, | 293 kNaClRestricted, |
269 CreateExtension(kExtensionUnrestricted, kExtensionFromWebStore), | 294 CreateExtension(kExtensionUnrestricted, kExtensionFromWebStore).get(), |
270 ¶ms)); | 295 ¶ms)); |
271 } | 296 } |
272 // Non chrome-extension:// URLs belonging to hosted apps are allowed. | 297 // Non chrome-extension:// URLs belonging to hosted apps are allowed. |
273 { | 298 { |
274 WebPluginParams params; | 299 WebPluginParams params; |
275 EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed( | 300 EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed( |
276 GURL(), GURL("http://example.com/test.html"), | 301 GURL(), |
| 302 GURL("http://example.com/test.html"), |
277 kNaClRestricted, | 303 kNaClRestricted, |
278 CreateHostedApp(kExtensionRestricted, kExtensionNotFromWebStore, | 304 CreateHostedApp(kExtensionRestricted, |
279 "http://example.com/"), | 305 kExtensionNotFromWebStore, |
| 306 "http://example.com/").get(), |
280 ¶ms)); | 307 ¶ms)); |
281 EXPECT_FALSE(ChromeContentRendererClient::IsNaClAllowed( | 308 EXPECT_FALSE(ChromeContentRendererClient::IsNaClAllowed( |
282 GURL(), GURL("http://example.evil.com/test.html"), | 309 GURL(), |
| 310 GURL("http://example.evil.com/test.html"), |
283 kNaClRestricted, | 311 kNaClRestricted, |
284 CreateHostedApp(kExtensionRestricted, kExtensionNotFromWebStore, | 312 CreateHostedApp(kExtensionRestricted, |
285 "http://example.com/"), | 313 kExtensionNotFromWebStore, |
| 314 "http://example.com/").get(), |
286 ¶ms)); | 315 ¶ms)); |
287 } | 316 } |
288 } | 317 } |
289 | 318 |
290 } // namespace chrome | 319 } // namespace chrome |
OLD | NEW |