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 "content/public/common/webplugininfo.h" | 10 #include "content/public/common/webplugininfo.h" |
(...skipping 19 matching lines...) Expand all Loading... | |
30 const bool kExtensionRestricted = false; | 30 const bool kExtensionRestricted = false; |
31 const bool kExtensionUnrestricted = true; | 31 const bool kExtensionUnrestricted = true; |
32 const bool kExtensionNotFromWebStore = false; | 32 const bool kExtensionNotFromWebStore = false; |
33 const bool kExtensionFromWebStore = true; | 33 const bool kExtensionFromWebStore = true; |
34 const bool kNotHostedApp = false; | 34 const bool kNotHostedApp = false; |
35 const bool kHostedApp = true; | 35 const bool kHostedApp = true; |
36 | 36 |
37 const char kNaClMimeType[] = "application/x-nacl"; | 37 const char kNaClMimeType[] = "application/x-nacl"; |
38 const char kExtensionUrl[] = "chrome-extension://extension_id/background.html"; | 38 const char kExtensionUrl[] = "chrome-extension://extension_id/background.html"; |
39 | 39 |
40 const char kAllowedNaClAppURL1[] = "https://plus.google.com"; | 40 const char kPhotosAppURL1[] = "https://plus.google.com"; |
41 const char kAllowedNaClAppURL2[] = "https://plus.sandbox.google.com"; | 41 const char kPhotosAppURL2[] = "https://plus.sandbox.google.com"; |
42 const char kAllowedNaClManifestURL1[] = "https://ssl.gstatic.com/s2/oz/nacl/foo" ; | 42 const char kPhotosManifestURL1[] = "https://ssl.gstatic.com/s2/oz/nacl/foo"; |
43 const char kAllowedNaClManifestURL2[] = "https://ssl.gstatic.com/photos/nacl/foo "; | 43 const char kPhotosManifestURL2[] = "https://ssl.gstatic.com/photos/nacl/foo"; |
44 | |
45 const char kHangoutsAppURL1[] = "https://talkgadget.google.com"; | |
darin (slow to review)
2013/09/16 19:37:44
nit: Hangouts -> Chat
bbudge
2013/09/16 19:47:51
Done.
| |
46 const char kHangoutsAppURL2[] = "https://foo.talkgadget.google.com"; | |
47 const char kHangoutsManifestURL[] = "https://ssl.gstatic.com/chat/apps/fx"; | |
44 | 48 |
45 bool AllowsDevInterfaces(const WebPluginParams& params) { | 49 bool AllowsDevInterfaces(const WebPluginParams& params) { |
46 for (size_t i = 0; i < params.attributeNames.size(); ++i) { | 50 for (size_t i = 0; i < params.attributeNames.size(); ++i) { |
47 if (params.attributeNames[i] == WebString::fromUTF8("@dev")) | 51 if (params.attributeNames[i] == WebString::fromUTF8("@dev")) |
48 return true; | 52 return true; |
49 } | 53 } |
50 return false; | 54 return false; |
51 } | 55 } |
52 | 56 |
53 void AddFakeDevAttribute(WebPluginParams* params) { | 57 void AddFakeDevAttribute(WebPluginParams* params) { |
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
196 GURL(), | 200 GURL(), |
197 kNaClRestricted, | 201 kNaClRestricted, |
198 CreateExtension(kExtensionRestricted, kExtensionFromWebStore).get(), | 202 CreateExtension(kExtensionRestricted, kExtensionFromWebStore).get(), |
199 ¶ms)); | 203 ¶ms)); |
200 EXPECT_TRUE(AllowsDevInterfaces(params)); | 204 EXPECT_TRUE(AllowsDevInterfaces(params)); |
201 } | 205 } |
202 // Whitelisted URLs are allowed without --enable-nacl, without 'dev' | 206 // Whitelisted URLs are allowed without --enable-nacl, without 'dev' |
203 // interfaces. There is a whitelist for the app URL and the manifest URL. | 207 // interfaces. There is a whitelist for the app URL and the manifest URL. |
204 { | 208 { |
205 WebPluginParams params; | 209 WebPluginParams params; |
206 // Whitelisted manifest URL #1, whitelisted app URL root #1 is allowed. | 210 // Whitelisted Photos app is allowed (two app URLs, two manifest URLs) |
207 EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed( | 211 EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed( |
208 GURL(kAllowedNaClManifestURL1), | 212 GURL(kPhotosManifestURL1), |
209 GURL(kAllowedNaClAppURL1), | 213 GURL(kPhotosAppURL1), |
210 kNaClRestricted, | 214 kNaClRestricted, |
211 CreateExtension(kExtensionRestricted, kExtensionNotFromWebStore).get(), | 215 CreateExtension(kExtensionRestricted, kExtensionNotFromWebStore).get(), |
212 ¶ms)); | 216 ¶ms)); |
213 EXPECT_FALSE(AllowsDevInterfaces(params)); | 217 EXPECT_FALSE(AllowsDevInterfaces(params)); |
214 // Whitelisted manifest URL #2, whitelisted app URL root #1 is allowed. | |
215 EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed( | 218 EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed( |
216 GURL(kAllowedNaClManifestURL1), | 219 GURL(kPhotosManifestURL1), |
217 GURL(kAllowedNaClAppURL1), | 220 GURL(kPhotosAppURL2), |
218 kNaClRestricted, | 221 kNaClRestricted, |
219 CreateExtension(kExtensionRestricted, kExtensionNotFromWebStore).get(), | 222 CreateExtension(kExtensionRestricted, kExtensionNotFromWebStore).get(), |
220 ¶ms)); | 223 ¶ms)); |
221 EXPECT_FALSE(AllowsDevInterfaces(params)); | 224 EXPECT_FALSE(AllowsDevInterfaces(params)); |
222 // Whitelisted manifest URL #1, whitelisted app URL root #2 is allowed. | |
223 EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed( | 225 EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed( |
224 GURL(kAllowedNaClManifestURL1), | 226 GURL(kPhotosManifestURL2), |
225 GURL(kAllowedNaClAppURL2), | 227 GURL(kPhotosAppURL1), |
226 kNaClRestricted, | 228 kNaClRestricted, |
227 CreateExtension(kExtensionRestricted, kExtensionNotFromWebStore).get(), | 229 CreateExtension(kExtensionRestricted, kExtensionNotFromWebStore).get(), |
228 ¶ms)); | 230 ¶ms)); |
229 EXPECT_FALSE(AllowsDevInterfaces(params)); | 231 EXPECT_FALSE(AllowsDevInterfaces(params)); |
232 EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed( | |
233 GURL(kPhotosManifestURL2), | |
234 GURL(kPhotosAppURL2), | |
235 kNaClRestricted, | |
236 CreateExtension(kExtensionRestricted, kExtensionNotFromWebStore).get(), | |
237 ¶ms)); | |
238 EXPECT_FALSE(AllowsDevInterfaces(params)); | |
239 // Whitelisted Hangouts app is allowed. | |
240 EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed( | |
241 GURL(kHangoutsManifestURL), | |
242 GURL(kHangoutsAppURL1), | |
243 kNaClRestricted, | |
244 CreateExtension(kExtensionRestricted, kExtensionNotFromWebStore).get(), | |
245 ¶ms)); | |
246 EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed( | |
247 GURL(kHangoutsManifestURL), | |
248 GURL(kHangoutsAppURL2), | |
249 kNaClRestricted, | |
250 CreateExtension(kExtensionRestricted, kExtensionNotFromWebStore).get(), | |
251 ¶ms)); | |
230 | 252 |
231 // Whitelisted manifest URL, bad app URLs, NOT allowed. | 253 // Whitelisted manifest URL, bad app URLs, NOT allowed. |
232 EXPECT_FALSE(ChromeContentRendererClient::IsNaClAllowed( | 254 EXPECT_FALSE(ChromeContentRendererClient::IsNaClAllowed( |
233 GURL(kAllowedNaClManifestURL1), | 255 GURL(kPhotosManifestURL1), |
234 GURL("http://plus.google.com/foo"), // http scheme | 256 GURL("http://plus.google.com/foo"), // http scheme |
235 kNaClRestricted, | 257 kNaClRestricted, |
236 CreateExtension(kExtensionRestricted, kExtensionNotFromWebStore).get(), | 258 CreateExtension(kExtensionRestricted, kExtensionNotFromWebStore).get(), |
237 ¶ms)); | 259 ¶ms)); |
238 EXPECT_FALSE(ChromeContentRendererClient::IsNaClAllowed( | 260 EXPECT_FALSE(ChromeContentRendererClient::IsNaClAllowed( |
239 GURL(kAllowedNaClManifestURL1), | 261 GURL(kPhotosManifestURL1), |
240 GURL("http://plus.sandbox.google.com/foo"), // http scheme | 262 GURL("http://plus.sandbox.google.com/foo"), // http scheme |
241 kNaClRestricted, | 263 kNaClRestricted, |
242 CreateExtension(kExtensionRestricted, kExtensionNotFromWebStore).get(), | 264 CreateExtension(kExtensionRestricted, kExtensionNotFromWebStore).get(), |
243 ¶ms)); | 265 ¶ms)); |
244 EXPECT_FALSE(ChromeContentRendererClient::IsNaClAllowed( | 266 EXPECT_FALSE(ChromeContentRendererClient::IsNaClAllowed( |
245 GURL(kAllowedNaClManifestURL1), | 267 GURL(kPhotosManifestURL1), |
246 GURL("https://plus.google.evil.com/foo"), // bad host | 268 GURL("https://plus.google.evil.com/foo"), // bad host |
247 kNaClRestricted, | 269 kNaClRestricted, |
248 CreateExtension(kExtensionRestricted, kExtensionNotFromWebStore).get(), | 270 CreateExtension(kExtensionRestricted, kExtensionNotFromWebStore).get(), |
249 ¶ms)); | 271 ¶ms)); |
250 // Whitelisted app URL, bad manifest URL, NOT allowed. | 272 // Whitelisted app URL, bad manifest URL, NOT allowed. |
251 EXPECT_FALSE(ChromeContentRendererClient::IsNaClAllowed( | 273 EXPECT_FALSE(ChromeContentRendererClient::IsNaClAllowed( |
252 GURL("http://ssl.gstatic.com/s2/oz/nacl/foo"), // http scheme | 274 GURL("http://ssl.gstatic.com/s2/oz/nacl/foo"), // http scheme |
253 GURL(kAllowedNaClAppURL1), | 275 GURL(kPhotosAppURL1), |
254 kNaClRestricted, | 276 kNaClRestricted, |
255 CreateExtension(kExtensionRestricted, kExtensionNotFromWebStore).get(), | 277 CreateExtension(kExtensionRestricted, kExtensionNotFromWebStore).get(), |
256 ¶ms)); | 278 ¶ms)); |
257 EXPECT_FALSE(ChromeContentRendererClient::IsNaClAllowed( | 279 EXPECT_FALSE(ChromeContentRendererClient::IsNaClAllowed( |
258 GURL("https://ssl.gstatic.evil.com/s2/oz/nacl/foo"), // bad host | 280 GURL("https://ssl.gstatic.evil.com/s2/oz/nacl/foo"), // bad host |
259 GURL(kAllowedNaClAppURL1), | 281 GURL(kPhotosAppURL1), |
260 kNaClRestricted, | 282 kNaClRestricted, |
261 CreateExtension(kExtensionRestricted, kExtensionNotFromWebStore).get(), | 283 CreateExtension(kExtensionRestricted, kExtensionNotFromWebStore).get(), |
262 ¶ms)); | 284 ¶ms)); |
263 EXPECT_FALSE(ChromeContentRendererClient::IsNaClAllowed( | 285 EXPECT_FALSE(ChromeContentRendererClient::IsNaClAllowed( |
264 GURL("https://ssl.gstatic.com/wrong/s2/oz/nacl/foo"), // bad path | 286 GURL("https://ssl.gstatic.com/wrong/s2/oz/nacl/foo"), // bad path |
265 GURL(kAllowedNaClAppURL1), | 287 GURL(kPhotosAppURL1), |
266 kNaClRestricted, | 288 kNaClRestricted, |
267 CreateExtension(kExtensionRestricted, kExtensionNotFromWebStore).get(), | 289 CreateExtension(kExtensionRestricted, kExtensionNotFromWebStore).get(), |
268 ¶ms)); | 290 ¶ms)); |
269 } | 291 } |
270 // Whitelisted URLs can't get 'dev' interfaces with --enable-nacl. | 292 // Whitelisted URLs can't get 'dev' interfaces with --enable-nacl. |
271 { | 293 { |
272 WebPluginParams params; | 294 WebPluginParams params; |
273 EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed( | 295 EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed( |
274 GURL(kAllowedNaClManifestURL1), | 296 GURL(kPhotosManifestURL1), |
275 GURL(kAllowedNaClAppURL1), | 297 GURL(kPhotosAppURL1), |
276 kNaClUnrestricted, | 298 kNaClUnrestricted, |
277 CreateExtension(kExtensionRestricted, kExtensionNotFromWebStore).get(), | 299 CreateExtension(kExtensionRestricted, kExtensionNotFromWebStore).get(), |
278 ¶ms)); | 300 ¶ms)); |
279 EXPECT_FALSE(AllowsDevInterfaces(params)); | 301 EXPECT_FALSE(AllowsDevInterfaces(params)); |
280 } | 302 } |
281 // Whitelisted URLs can't get 'dev' interfaces by injecting a fake | 303 // Whitelisted URLs can't get 'dev' interfaces by injecting a fake |
282 // '@dev' attribute. | 304 // '@dev' attribute. |
283 { | 305 { |
284 WebPluginParams params; | 306 WebPluginParams params; |
285 AddFakeDevAttribute(¶ms); | 307 AddFakeDevAttribute(¶ms); |
286 EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed( | 308 EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed( |
287 GURL(kAllowedNaClManifestURL1), | 309 GURL(kPhotosManifestURL1), |
288 GURL(kAllowedNaClAppURL1), | 310 GURL(kPhotosAppURL1), |
289 kNaClRestricted, | 311 kNaClRestricted, |
290 CreateExtension(kExtensionRestricted, kExtensionNotFromWebStore).get(), | 312 CreateExtension(kExtensionRestricted, kExtensionNotFromWebStore).get(), |
291 ¶ms)); | 313 ¶ms)); |
292 EXPECT_FALSE(AllowsDevInterfaces(params)); | 314 EXPECT_FALSE(AllowsDevInterfaces(params)); |
293 } | 315 } |
294 // Non-whitelisted URLs are blocked without --enable-nacl. | 316 // Non-whitelisted URLs are blocked without --enable-nacl. |
295 { | 317 { |
296 WebPluginParams params; | 318 WebPluginParams params; |
297 EXPECT_FALSE(ChromeContentRendererClient::IsNaClAllowed( | 319 EXPECT_FALSE(ChromeContentRendererClient::IsNaClAllowed( |
298 GURL(), | 320 GURL(), |
299 GURL("https://plus.google.com.evil.com/foo1"), | 321 GURL("https://plus.google.com.evil.com/foo1"), |
300 kNaClRestricted, | 322 kNaClRestricted, |
301 CreateExtension(kExtensionRestricted, kExtensionNotFromWebStore).get(), | 323 CreateExtension(kExtensionRestricted, kExtensionNotFromWebStore).get(), |
302 ¶ms)); | 324 ¶ms)); |
303 EXPECT_FALSE(ChromeContentRendererClient::IsNaClAllowed( | 325 EXPECT_FALSE(ChromeContentRendererClient::IsNaClAllowed( |
304 GURL(), | 326 GURL(), |
305 GURL("https://plus.google.com.evil.com/foo2"), | 327 GURL("https://plus.google.com.evil.com/foo2"), |
306 kNaClRestricted, | 328 kNaClRestricted, |
307 CreateExtension(kExtensionRestricted, kExtensionFromWebStore).get(), | 329 CreateExtension(kExtensionRestricted, kExtensionFromWebStore).get(), |
308 ¶ms)); | 330 ¶ms)); |
309 EXPECT_FALSE(ChromeContentRendererClient::IsNaClAllowed( | 331 EXPECT_FALSE(ChromeContentRendererClient::IsNaClAllowed( |
310 GURL(), | 332 GURL(), |
311 GURL("https://plus.google.com.evil.com/foo3"), | 333 GURL("https://talkgadget.google.com.evil.com/foo3"), |
312 kNaClRestricted, | 334 kNaClRestricted, |
313 CreateExtension(kExtensionUnrestricted, kExtensionNotFromWebStore) | 335 CreateExtension(kExtensionUnrestricted, kExtensionNotFromWebStore) |
314 .get(), | 336 .get(), |
315 ¶ms)); | 337 ¶ms)); |
316 EXPECT_FALSE(ChromeContentRendererClient::IsNaClAllowed( | 338 EXPECT_FALSE(ChromeContentRendererClient::IsNaClAllowed( |
317 GURL(), | 339 GURL(), |
318 GURL("https://plus.google.com.evil.com/foo4"), | 340 GURL("https://talkgadget.google.com.evil.com/foo4"), |
319 kNaClRestricted, | 341 kNaClRestricted, |
320 CreateExtension(kExtensionUnrestricted, kExtensionFromWebStore).get(), | 342 CreateExtension(kExtensionUnrestricted, kExtensionFromWebStore).get(), |
321 ¶ms)); | 343 ¶ms)); |
322 } | 344 } |
323 // Non chrome-extension:// URLs belonging to hosted apps are allowed. | 345 // Non chrome-extension:// URLs belonging to hosted apps are allowed. |
324 { | 346 { |
325 WebPluginParams params; | 347 WebPluginParams params; |
326 EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed( | 348 EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed( |
327 GURL(), | 349 GURL(), |
328 GURL("http://example.com/test.html"), | 350 GURL("http://example.com/test.html"), |
329 kNaClRestricted, | 351 kNaClRestricted, |
330 CreateHostedApp(kExtensionRestricted, | 352 CreateHostedApp(kExtensionRestricted, |
331 kExtensionNotFromWebStore, | 353 kExtensionNotFromWebStore, |
332 "http://example.com/").get(), | 354 "http://example.com/").get(), |
333 ¶ms)); | 355 ¶ms)); |
334 EXPECT_FALSE(ChromeContentRendererClient::IsNaClAllowed( | 356 EXPECT_FALSE(ChromeContentRendererClient::IsNaClAllowed( |
335 GURL(), | 357 GURL(), |
336 GURL("http://example.evil.com/test.html"), | 358 GURL("http://example.evil.com/test.html"), |
337 kNaClRestricted, | 359 kNaClRestricted, |
338 CreateHostedApp(kExtensionRestricted, | 360 CreateHostedApp(kExtensionRestricted, |
339 kExtensionNotFromWebStore, | 361 kExtensionNotFromWebStore, |
340 "http://example.com/").get(), | 362 "http://example.com/").get(), |
341 ¶ms)); | 363 ¶ms)); |
342 } | 364 } |
343 } | 365 } |
344 | 366 |
367 TEST_F(ChromeContentRendererClientTest, AllowPepperMediaStreamAPI) { | |
368 ChromeContentRendererClient test; | |
369 #if !defined(OS_ANDROID) | |
370 EXPECT_TRUE(test.AllowPepperMediaStreamAPI(GURL(kHangoutsAppURL1))); | |
371 #else | |
372 EXPECT_FALSE(test.AllowPepperMediaStreamAPI(GURL(kHangoutsAppURL1))); | |
373 #endif | |
374 EXPECT_FALSE(test.AllowPepperMediaStreamAPI( | |
juberti2
2013/09/16 19:41:52
add test for foo.talkgadget.google.com
bbudge
2013/09/16 19:47:51
Done.
| |
375 GURL("http://talkgadget.google.com"))); | |
376 EXPECT_FALSE(test.AllowPepperMediaStreamAPI( | |
377 GURL("https://talkgadget.evil.com"))); | |
378 } | |
379 | |
345 } // namespace chrome | 380 } // namespace chrome |
OLD | NEW |