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

Side by Side Diff: chrome/renderer/chrome_content_renderer_client_unittest.cc

Issue 23466009: Expand whitelist for media stream APIs. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Adjust Hangouts URL checking.x Created 7 years, 3 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 "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
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
196 GURL(), 200 GURL(),
197 kNaClRestricted, 201 kNaClRestricted,
198 CreateExtension(kExtensionRestricted, kExtensionFromWebStore).get(), 202 CreateExtension(kExtensionRestricted, kExtensionFromWebStore).get(),
199 &params)); 203 &params));
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 &params)); 216 &params));
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 &params)); 223 &params));
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 &params)); 230 &params));
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 &params));
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 &params));
246 EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed(
247 GURL(kHangoutsManifestURL),
248 GURL(kHangoutsAppURL2),
249 kNaClRestricted,
250 CreateExtension(kExtensionRestricted, kExtensionNotFromWebStore).get(),
251 &params));
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 &params)); 259 &params));
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 &params)); 265 &params));
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 &params)); 271 &params));
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 &params)); 278 &params));
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 &params)); 284 &params));
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 &params)); 290 &params));
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 &params)); 300 &params));
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(&params); 307 AddFakeDevAttribute(&params);
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 &params)); 313 &params));
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 &params)); 324 &params));
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 &params)); 330 &params));
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 &params)); 337 &params));
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 &params)); 343 &params));
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 &params)); 355 &params));
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 &params)); 363 &params));
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698