OLD | NEW |
---|---|
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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 <vector> | 5 #include <vector> |
6 | 6 |
7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
8 #include "base/memory/ref_counted.h" | 8 #include "base/memory/ref_counted.h" |
9 #include "base/strings/string16.h" | 9 #include "base/strings/string16.h" |
10 #include "base/strings/utf_string_conversions.h" | 10 #include "base/strings/utf_string_conversions.h" |
(...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
241 urls_.insert(favicon_url); | 241 urls_.insert(favicon_url); |
242 urls_.insert(extension_url); | 242 urls_.insert(extension_url); |
243 urls_.insert(settings_url); | 243 urls_.insert(settings_url); |
244 urls_.insert(about_url); | 244 urls_.insert(about_url); |
245 // Ignore the policy delegate for this test. | 245 // Ignore the policy delegate for this test. |
246 PermissionsData::SetPolicyDelegate(NULL); | 246 PermissionsData::SetPolicyDelegate(NULL); |
247 } | 247 } |
248 | 248 |
249 bool AllowedScript(const Extension* extension, const GURL& url, | 249 bool AllowedScript(const Extension* extension, const GURL& url, |
250 const GURL& top_url) { | 250 const GURL& top_url) { |
251 return AllowedScript(extension, url, top_url, -1); | |
252 } | |
253 | |
254 bool AllowedScript(const Extension* extension, const GURL& url, | |
255 const GURL& top_url, int tab_id) { | |
251 return PermissionsData::CanExecuteScriptOnPage( | 256 return PermissionsData::CanExecuteScriptOnPage( |
252 extension, url, top_url, -1, NULL, -1, NULL); | 257 extension, url, top_url, tab_id, NULL, -1, NULL); |
253 } | 258 } |
254 | 259 |
255 bool BlockedScript(const Extension* extension, const GURL& url, | 260 bool BlockedScript(const Extension* extension, const GURL& url, |
256 const GURL& top_url) { | 261 const GURL& top_url) { |
257 return !PermissionsData::CanExecuteScriptOnPage( | 262 return !PermissionsData::CanExecuteScriptOnPage( |
258 extension, url, top_url, -1, NULL, -1, NULL); | 263 extension, url, top_url, -1, NULL, -1, NULL); |
259 } | 264 } |
260 | 265 |
261 bool Allowed(const Extension* extension, const GURL& url) { | 266 bool Allowed(const Extension* extension, const GURL& url) { |
262 return Allowed(extension, url, -1); | 267 return Allowed(extension, url, -1); |
263 } | 268 } |
264 | 269 |
265 bool Allowed(const Extension* extension, const GURL& url, int tab_id) { | 270 bool Allowed(const Extension* extension, const GURL& url, int tab_id) { |
266 return (PermissionsData::CanExecuteScriptOnPage( | 271 return (PermissionsData::CanExecuteScriptOnPage( |
267 extension, url, url, tab_id, NULL, -1, NULL) && | 272 extension, url, url, tab_id, NULL, -1, NULL) && |
268 PermissionsData::CanCaptureVisiblePage( | 273 PermissionsData::CanCaptureVisiblePage( |
269 extension, url, tab_id, NULL)); | 274 extension, tab_id, NULL)); |
270 } | 275 } |
271 | 276 |
272 bool CaptureOnly(const Extension* extension, const GURL& url) { | 277 bool CaptureOnly(const Extension* extension, const GURL& url) { |
273 return CaptureOnly(extension, url, -1); | 278 return CaptureOnly(extension, url, -1); |
274 } | 279 } |
275 | 280 |
276 bool CaptureOnly(const Extension* extension, const GURL& url, int tab_id) { | 281 bool CaptureOnly(const Extension* extension, const GURL& url, int tab_id) { |
277 return !PermissionsData::CanExecuteScriptOnPage( | 282 return !PermissionsData::CanExecuteScriptOnPage( |
278 extension, url, url, tab_id, NULL, -1, NULL) && | 283 extension, url, url, tab_id, NULL, -1, NULL) && |
279 PermissionsData::CanCaptureVisiblePage(extension, url, tab_id, NULL); | 284 PermissionsData::CanCaptureVisiblePage(extension, tab_id, NULL); |
280 } | 285 } |
281 | 286 |
282 bool Blocked(const Extension* extension, const GURL& url) { | 287 bool Blocked(const Extension* extension, const GURL& url) { |
283 return Blocked(extension, url, -1); | 288 return Blocked(extension, url, -1); |
284 } | 289 } |
285 | 290 |
286 bool Blocked(const Extension* extension, const GURL& url, int tab_id) { | 291 bool Blocked(const Extension* extension, const GURL& url, int tab_id) { |
287 return !(PermissionsData::CanExecuteScriptOnPage( | 292 return !(PermissionsData::CanExecuteScriptOnPage( |
288 extension, url, url, tab_id, NULL, -1, NULL) || | 293 extension, url, url, tab_id, NULL, -1, NULL) || |
289 PermissionsData::CanCaptureVisiblePage( | 294 PermissionsData::CanCaptureVisiblePage( |
290 extension, url, tab_id, NULL)); | 295 extension, tab_id, NULL)); |
291 } | 296 } |
292 | 297 |
293 bool AllowedExclusivelyOnTab( | 298 bool ScriptAllowedExclusivelyOnTab( |
294 const Extension* extension, | 299 const Extension* extension, |
295 const std::set<GURL>& allowed_urls, | 300 const std::set<GURL>& allowed_urls, |
296 int tab_id) { | 301 int tab_id) { |
297 bool result = true; | 302 bool result = true; |
298 for (std::set<GURL>::iterator it = urls_.begin(); it != urls_.end(); ++it) { | 303 for (std::set<GURL>::iterator it = urls_.begin(); it != urls_.end(); ++it) { |
299 const GURL& url = *it; | 304 const GURL& url = *it; |
300 if (allowed_urls.count(url)) | 305 if (allowed_urls.count(url)) |
301 result &= Allowed(extension, url, tab_id); | 306 result &= AllowedScript(extension, url, url, tab_id); |
302 else | 307 else |
303 result &= Blocked(extension, url, tab_id); | 308 result &= Blocked(extension, url, tab_id); |
304 } | 309 } |
305 return result; | 310 return result; |
306 } | 311 } |
307 | 312 |
308 // URLs that are "safe" to provide scripting and capture visible tab access | 313 // URLs that are "safe" to provide scripting and capture visible tab access |
309 // to if the permissions allow it. | 314 // to if the permissions allow it. |
310 const GURL http_url; | 315 const GURL http_url; |
311 const GURL http_url_with_path; | 316 const GURL http_url_with_path; |
(...skipping 14 matching lines...) Expand all Loading... | |
326 std::set<GURL> urls_; | 331 std::set<GURL> urls_; |
327 }; | 332 }; |
328 | 333 |
329 TEST_F(ExtensionScriptAndCaptureVisibleTest, Permissions) { | 334 TEST_F(ExtensionScriptAndCaptureVisibleTest, Permissions) { |
330 // Test <all_urls> for regular extensions. | 335 // Test <all_urls> for regular extensions. |
331 scoped_refptr<Extension> extension = LoadManifestStrict("script_and_capture", | 336 scoped_refptr<Extension> extension = LoadManifestStrict("script_and_capture", |
332 "extension_regular_all.json"); | 337 "extension_regular_all.json"); |
333 | 338 |
334 EXPECT_TRUE(Allowed(extension.get(), http_url)); | 339 EXPECT_TRUE(Allowed(extension.get(), http_url)); |
335 EXPECT_TRUE(Allowed(extension.get(), https_url)); | 340 EXPECT_TRUE(Allowed(extension.get(), https_url)); |
336 EXPECT_TRUE(Blocked(extension.get(), file_url)); | 341 EXPECT_TRUE(CaptureOnly(extension.get(), file_url)); |
337 EXPECT_TRUE(Blocked(extension.get(), settings_url)); | 342 EXPECT_TRUE(CaptureOnly(extension.get(), settings_url)); |
338 EXPECT_TRUE(CaptureOnly(extension.get(), favicon_url)); | 343 EXPECT_TRUE(CaptureOnly(extension.get(), favicon_url)); |
339 EXPECT_TRUE(Blocked(extension.get(), about_url)); | 344 EXPECT_TRUE(CaptureOnly(extension.get(), about_url)); |
340 EXPECT_TRUE(Blocked(extension.get(), extension_url)); | 345 EXPECT_TRUE(CaptureOnly(extension.get(), extension_url)); |
341 | 346 |
342 // Test access to iframed content. | 347 // Test access to iframed content. |
343 GURL within_extension_url = extension->GetResourceURL("page.html"); | 348 GURL within_extension_url = extension->GetResourceURL("page.html"); |
344 EXPECT_TRUE(AllowedScript(extension.get(), http_url, http_url_with_path)); | 349 EXPECT_TRUE(AllowedScript(extension.get(), http_url, http_url_with_path)); |
345 EXPECT_TRUE(AllowedScript(extension.get(), https_url, http_url_with_path)); | 350 EXPECT_TRUE(AllowedScript(extension.get(), https_url, http_url_with_path)); |
346 EXPECT_TRUE(AllowedScript(extension.get(), http_url, within_extension_url)); | 351 EXPECT_TRUE(AllowedScript(extension.get(), http_url, within_extension_url)); |
347 EXPECT_TRUE(AllowedScript(extension.get(), https_url, within_extension_url)); | 352 EXPECT_TRUE(AllowedScript(extension.get(), https_url, within_extension_url)); |
348 EXPECT_TRUE(BlockedScript(extension.get(), http_url, extension_url)); | 353 EXPECT_TRUE(BlockedScript(extension.get(), http_url, extension_url)); |
349 EXPECT_TRUE(BlockedScript(extension.get(), https_url, extension_url)); | 354 EXPECT_TRUE(BlockedScript(extension.get(), https_url, extension_url)); |
350 | 355 |
351 EXPECT_FALSE( | 356 EXPECT_FALSE( |
352 PermissionsData::HasHostPermission(extension.get(), settings_url)); | 357 PermissionsData::HasHostPermission(extension.get(), settings_url)); |
353 EXPECT_FALSE(PermissionsData::HasHostPermission(extension.get(), about_url)); | 358 EXPECT_FALSE(PermissionsData::HasHostPermission(extension.get(), about_url)); |
354 EXPECT_TRUE(PermissionsData::HasHostPermission(extension.get(), favicon_url)); | 359 EXPECT_TRUE(PermissionsData::HasHostPermission(extension.get(), favicon_url)); |
355 | 360 |
356 // Test * for scheme, which implies just the http/https schemes. | 361 // Test * for scheme, which implies just the http/https schemes. |
357 extension = LoadManifestStrict("script_and_capture", | 362 extension = LoadManifestStrict("script_and_capture", |
358 "extension_wildcard.json"); | 363 "extension_wildcard.json"); |
359 EXPECT_TRUE(Allowed(extension.get(), http_url)); | 364 EXPECT_TRUE(AllowedScript(extension.get(), http_url, http_url)); |
360 EXPECT_TRUE(Allowed(extension.get(), https_url)); | 365 EXPECT_TRUE(AllowedScript(extension.get(), https_url, https_url)); |
366 EXPECT_FALSE(Allowed(extension.get(), http_url)); | |
367 EXPECT_FALSE(Allowed(extension.get(), https_url)); | |
not at google - send to devlin
2014/01/21 21:44:21
maybe we need a "ScriptOnly" method?
sadrul
2014/01/23 20:11:14
Done.
| |
361 EXPECT_TRUE(Blocked(extension.get(), settings_url)); | 368 EXPECT_TRUE(Blocked(extension.get(), settings_url)); |
362 EXPECT_TRUE(Blocked(extension.get(), about_url)); | 369 EXPECT_TRUE(Blocked(extension.get(), about_url)); |
363 EXPECT_TRUE(Blocked(extension.get(), file_url)); | 370 EXPECT_TRUE(Blocked(extension.get(), file_url)); |
364 EXPECT_TRUE(Blocked(extension.get(), favicon_url)); | 371 EXPECT_TRUE(Blocked(extension.get(), favicon_url)); |
365 extension = | 372 extension = |
366 LoadManifest("script_and_capture", "extension_wildcard_settings.json"); | 373 LoadManifest("script_and_capture", "extension_wildcard_settings.json"); |
367 EXPECT_TRUE(Blocked(extension.get(), settings_url)); | 374 EXPECT_TRUE(Blocked(extension.get(), settings_url)); |
368 | 375 |
369 // Having chrome://*/ should not work for regular extensions. Note that | 376 // Having chrome://*/ should not work for regular extensions. Note that |
370 // for favicon access, we require the explicit pattern chrome://favicon/*. | 377 // for favicon access, we require the explicit pattern chrome://favicon/*. |
371 std::string error; | 378 std::string error; |
372 extension = LoadManifestUnchecked("script_and_capture", | 379 extension = LoadManifestUnchecked("script_and_capture", |
373 "extension_wildcard_chrome.json", | 380 "extension_wildcard_chrome.json", |
374 Manifest::INTERNAL, Extension::NO_FLAGS, | 381 Manifest::INTERNAL, Extension::NO_FLAGS, |
375 &error); | 382 &error); |
376 std::vector<InstallWarning> warnings = extension->install_warnings(); | 383 std::vector<InstallWarning> warnings = extension->install_warnings(); |
377 EXPECT_FALSE(warnings.empty()); | 384 EXPECT_FALSE(warnings.empty()); |
378 EXPECT_EQ(ErrorUtils::FormatErrorMessage( | 385 EXPECT_EQ(ErrorUtils::FormatErrorMessage( |
379 manifest_errors::kInvalidPermissionScheme, | 386 manifest_errors::kInvalidPermissionScheme, |
380 "chrome://*/"), | 387 "chrome://*/"), |
381 warnings[0].message); | 388 warnings[0].message); |
382 EXPECT_TRUE(Blocked(extension.get(), settings_url)); | 389 EXPECT_TRUE(Blocked(extension.get(), settings_url)); |
383 EXPECT_TRUE(Blocked(extension.get(), favicon_url)); | 390 EXPECT_TRUE(Blocked(extension.get(), favicon_url)); |
384 EXPECT_TRUE(Blocked(extension.get(), about_url)); | 391 EXPECT_TRUE(Blocked(extension.get(), about_url)); |
385 | 392 |
386 // Having chrome://favicon/* should not give you chrome://* | 393 // Having chrome://favicon/* should not give you chrome://* |
387 extension = LoadManifestStrict("script_and_capture", | 394 extension = LoadManifestStrict("script_and_capture", |
388 "extension_chrome_favicon_wildcard.json"); | 395 "extension_chrome_favicon_wildcard.json"); |
389 EXPECT_TRUE(Blocked(extension.get(), settings_url)); | 396 EXPECT_TRUE(Blocked(extension.get(), settings_url)); |
390 EXPECT_TRUE(CaptureOnly(extension.get(), favicon_url)); | 397 EXPECT_TRUE(Blocked(extension.get(), favicon_url)); |
391 EXPECT_TRUE(Blocked(extension.get(), about_url)); | 398 EXPECT_TRUE(Blocked(extension.get(), about_url)); |
392 EXPECT_TRUE(PermissionsData::HasHostPermission(extension.get(), favicon_url)); | 399 EXPECT_TRUE(PermissionsData::HasHostPermission(extension.get(), favicon_url)); |
393 | 400 |
394 // Having http://favicon should not give you chrome://favicon | 401 // Having http://favicon should not give you chrome://favicon |
395 extension = LoadManifestStrict("script_and_capture", | 402 extension = LoadManifestStrict("script_and_capture", |
396 "extension_http_favicon.json"); | 403 "extension_http_favicon.json"); |
397 EXPECT_TRUE(Blocked(extension.get(), settings_url)); | 404 EXPECT_TRUE(Blocked(extension.get(), settings_url)); |
398 EXPECT_TRUE(Blocked(extension.get(), favicon_url)); | 405 EXPECT_TRUE(Blocked(extension.get(), favicon_url)); |
399 | 406 |
400 // Component extensions with <all_urls> should get everything. | 407 // Component extensions with <all_urls> should get everything. |
401 extension = LoadManifest("script_and_capture", "extension_component_all.json", | 408 extension = LoadManifest("script_and_capture", "extension_component_all.json", |
402 Manifest::COMPONENT, Extension::NO_FLAGS); | 409 Manifest::COMPONENT, Extension::NO_FLAGS); |
403 EXPECT_TRUE(Allowed(extension.get(), http_url)); | 410 EXPECT_TRUE(Allowed(extension.get(), http_url)); |
404 EXPECT_TRUE(Allowed(extension.get(), https_url)); | 411 EXPECT_TRUE(Allowed(extension.get(), https_url)); |
405 EXPECT_TRUE(Allowed(extension.get(), settings_url)); | 412 EXPECT_TRUE(Allowed(extension.get(), settings_url)); |
406 EXPECT_TRUE(Allowed(extension.get(), about_url)); | 413 EXPECT_TRUE(Allowed(extension.get(), about_url)); |
407 EXPECT_TRUE(Allowed(extension.get(), favicon_url)); | 414 EXPECT_TRUE(Allowed(extension.get(), favicon_url)); |
408 EXPECT_TRUE(PermissionsData::HasHostPermission(extension.get(), favicon_url)); | 415 EXPECT_TRUE(PermissionsData::HasHostPermission(extension.get(), favicon_url)); |
409 | 416 |
410 // Component extensions should only get access to what they ask for. | 417 // Component extensions should only get access to what they ask for. |
411 extension = LoadManifest("script_and_capture", | 418 extension = LoadManifest("script_and_capture", |
412 "extension_component_google.json", Manifest::COMPONENT, | 419 "extension_component_google.json", Manifest::COMPONENT, |
413 Extension::NO_FLAGS); | 420 Extension::NO_FLAGS); |
414 EXPECT_TRUE(Allowed(extension.get(), http_url)); | 421 EXPECT_TRUE(AllowedScript(extension.get(), http_url, http_url)); |
422 EXPECT_FALSE(Allowed(extension.get(), http_url)); | |
415 EXPECT_TRUE(Blocked(extension.get(), https_url)); | 423 EXPECT_TRUE(Blocked(extension.get(), https_url)); |
416 EXPECT_TRUE(Blocked(extension.get(), file_url)); | 424 EXPECT_TRUE(Blocked(extension.get(), file_url)); |
417 EXPECT_TRUE(Blocked(extension.get(), settings_url)); | 425 EXPECT_TRUE(Blocked(extension.get(), settings_url)); |
418 EXPECT_TRUE(Blocked(extension.get(), favicon_url)); | 426 EXPECT_TRUE(Blocked(extension.get(), favicon_url)); |
419 EXPECT_TRUE(Blocked(extension.get(), about_url)); | 427 EXPECT_TRUE(Blocked(extension.get(), about_url)); |
420 EXPECT_TRUE(Blocked(extension.get(), extension_url)); | 428 EXPECT_TRUE(Blocked(extension.get(), extension_url)); |
421 EXPECT_FALSE( | 429 EXPECT_FALSE( |
422 PermissionsData::HasHostPermission(extension.get(), settings_url)); | 430 PermissionsData::HasHostPermission(extension.get(), settings_url)); |
423 } | 431 } |
424 | 432 |
425 TEST_F(ExtensionScriptAndCaptureVisibleTest, PermissionsWithChromeURLsEnabled) { | 433 TEST_F(ExtensionScriptAndCaptureVisibleTest, PermissionsWithChromeURLsEnabled) { |
426 CommandLine::ForCurrentProcess()->AppendSwitch( | 434 CommandLine::ForCurrentProcess()->AppendSwitch( |
427 switches::kExtensionsOnChromeURLs); | 435 switches::kExtensionsOnChromeURLs); |
428 | 436 |
429 scoped_refptr<Extension> extension; | 437 scoped_refptr<Extension> extension; |
430 | 438 |
431 // Test <all_urls> for regular extensions. | 439 // Test <all_urls> for regular extensions. |
432 extension = LoadManifestStrict("script_and_capture", | 440 extension = LoadManifestStrict("script_and_capture", |
433 "extension_regular_all.json"); | 441 "extension_regular_all.json"); |
434 EXPECT_TRUE(Allowed(extension.get(), http_url)); | 442 EXPECT_TRUE(Allowed(extension.get(), http_url)); |
435 EXPECT_TRUE(Allowed(extension.get(), https_url)); | 443 EXPECT_TRUE(Allowed(extension.get(), https_url)); |
436 EXPECT_TRUE(Blocked(extension.get(), file_url)); | 444 EXPECT_TRUE(CaptureOnly(extension.get(), file_url)); |
437 EXPECT_TRUE(Blocked(extension.get(), settings_url)); | 445 EXPECT_TRUE(CaptureOnly(extension.get(), settings_url)); |
438 EXPECT_TRUE(Allowed(extension.get(), favicon_url)); // chrome:// requested | 446 EXPECT_TRUE(Allowed(extension.get(), favicon_url)); // chrome:// requested |
439 EXPECT_TRUE(Blocked(extension.get(), about_url)); | 447 EXPECT_TRUE(CaptureOnly(extension.get(), about_url)); |
440 EXPECT_TRUE(Blocked(extension.get(), extension_url)); | 448 EXPECT_TRUE(CaptureOnly(extension.get(), extension_url)); |
441 | 449 |
442 // Test access to iframed content. | 450 // Test access to iframed content. |
443 GURL within_extension_url = extension->GetResourceURL("page.html"); | 451 GURL within_extension_url = extension->GetResourceURL("page.html"); |
444 EXPECT_TRUE(AllowedScript(extension.get(), http_url, http_url_with_path)); | 452 EXPECT_TRUE(AllowedScript(extension.get(), http_url, http_url_with_path)); |
445 EXPECT_TRUE(AllowedScript(extension.get(), https_url, http_url_with_path)); | 453 EXPECT_TRUE(AllowedScript(extension.get(), https_url, http_url_with_path)); |
446 EXPECT_TRUE(AllowedScript(extension.get(), http_url, within_extension_url)); | 454 EXPECT_TRUE(AllowedScript(extension.get(), http_url, within_extension_url)); |
447 EXPECT_TRUE(AllowedScript(extension.get(), https_url, within_extension_url)); | 455 EXPECT_TRUE(AllowedScript(extension.get(), https_url, within_extension_url)); |
448 EXPECT_TRUE(BlockedScript(extension.get(), http_url, extension_url)); | 456 EXPECT_TRUE(BlockedScript(extension.get(), http_url, extension_url)); |
449 EXPECT_TRUE(BlockedScript(extension.get(), https_url, extension_url)); | 457 EXPECT_TRUE(BlockedScript(extension.get(), https_url, extension_url)); |
450 | 458 |
451 EXPECT_FALSE( | 459 EXPECT_FALSE( |
452 PermissionsData::HasHostPermission(extension.get(), settings_url)); | 460 PermissionsData::HasHostPermission(extension.get(), settings_url)); |
453 EXPECT_FALSE(PermissionsData::HasHostPermission(extension.get(), about_url)); | 461 EXPECT_FALSE(PermissionsData::HasHostPermission(extension.get(), about_url)); |
454 EXPECT_TRUE(PermissionsData::HasHostPermission(extension.get(), favicon_url)); | 462 EXPECT_TRUE(PermissionsData::HasHostPermission(extension.get(), favicon_url)); |
455 | 463 |
456 // Test * for scheme, which implies just the http/https schemes. | 464 // Test * for scheme, which implies just the http/https schemes. |
457 extension = LoadManifestStrict("script_and_capture", | 465 extension = LoadManifestStrict("script_and_capture", |
458 "extension_wildcard.json"); | 466 "extension_wildcard.json"); |
459 EXPECT_TRUE(Allowed(extension.get(), http_url)); | 467 EXPECT_FALSE(Allowed(extension.get(), http_url)); |
460 EXPECT_TRUE(Allowed(extension.get(), https_url)); | 468 EXPECT_FALSE(Allowed(extension.get(), https_url)); |
469 EXPECT_TRUE(AllowedScript(extension.get(), http_url, http_url)); | |
470 EXPECT_TRUE(AllowedScript(extension.get(), https_url, https_url)); | |
461 EXPECT_TRUE(Blocked(extension.get(), settings_url)); | 471 EXPECT_TRUE(Blocked(extension.get(), settings_url)); |
462 EXPECT_TRUE(Blocked(extension.get(), about_url)); | 472 EXPECT_TRUE(Blocked(extension.get(), about_url)); |
463 EXPECT_TRUE(Blocked(extension.get(), file_url)); | 473 EXPECT_TRUE(Blocked(extension.get(), file_url)); |
464 EXPECT_TRUE(Blocked(extension.get(), favicon_url)); | 474 EXPECT_TRUE(Blocked(extension.get(), favicon_url)); |
465 extension = | 475 extension = |
466 LoadManifest("script_and_capture", "extension_wildcard_settings.json"); | 476 LoadManifest("script_and_capture", "extension_wildcard_settings.json"); |
467 EXPECT_TRUE(Blocked(extension.get(), settings_url)); | 477 EXPECT_TRUE(Blocked(extension.get(), settings_url)); |
468 | 478 |
469 // Having chrome://*/ should work for regular extensions with the flag | 479 // Having chrome://*/ should work for regular extensions with the flag |
470 // enabled. | 480 // enabled. |
471 std::string error; | 481 std::string error; |
472 extension = LoadManifestUnchecked("script_and_capture", | 482 extension = LoadManifestUnchecked("script_and_capture", |
473 "extension_wildcard_chrome.json", | 483 "extension_wildcard_chrome.json", |
474 Manifest::INTERNAL, Extension::NO_FLAGS, | 484 Manifest::INTERNAL, Extension::NO_FLAGS, |
475 &error); | 485 &error); |
476 EXPECT_FALSE(extension.get() == NULL); | 486 EXPECT_FALSE(extension.get() == NULL); |
477 EXPECT_TRUE(Blocked(extension.get(), http_url)); | 487 EXPECT_TRUE(Blocked(extension.get(), http_url)); |
478 EXPECT_TRUE(Blocked(extension.get(), https_url)); | 488 EXPECT_TRUE(Blocked(extension.get(), https_url)); |
479 EXPECT_TRUE(Allowed(extension.get(), settings_url)); | 489 EXPECT_FALSE(Allowed(extension.get(), settings_url)); |
490 EXPECT_TRUE(AllowedScript(extension.get(), settings_url, settings_url)); | |
480 EXPECT_TRUE(Blocked(extension.get(), about_url)); | 491 EXPECT_TRUE(Blocked(extension.get(), about_url)); |
481 EXPECT_TRUE(Blocked(extension.get(), file_url)); | 492 EXPECT_TRUE(Blocked(extension.get(), file_url)); |
482 EXPECT_TRUE(Allowed(extension.get(), favicon_url)); // chrome:// requested | 493 EXPECT_FALSE(Allowed(extension.get(), favicon_url)); |
494 EXPECT_TRUE(AllowedScript(extension.get(), favicon_url, favicon_url)); | |
483 | 495 |
484 // Having chrome://favicon/* should not give you chrome://* | 496 // Having chrome://favicon/* should not give you chrome://* |
485 extension = LoadManifestStrict("script_and_capture", | 497 extension = LoadManifestStrict("script_and_capture", |
486 "extension_chrome_favicon_wildcard.json"); | 498 "extension_chrome_favicon_wildcard.json"); |
487 EXPECT_TRUE(Blocked(extension.get(), settings_url)); | 499 EXPECT_TRUE(Blocked(extension.get(), settings_url)); |
488 EXPECT_TRUE(Allowed(extension.get(), favicon_url)); // chrome:// requested | 500 EXPECT_FALSE(Allowed(extension.get(), favicon_url)); |
501 EXPECT_TRUE(AllowedScript(extension.get(), favicon_url, favicon_url)); | |
489 EXPECT_TRUE(Blocked(extension.get(), about_url)); | 502 EXPECT_TRUE(Blocked(extension.get(), about_url)); |
490 EXPECT_TRUE(PermissionsData::HasHostPermission(extension.get(), favicon_url)); | 503 EXPECT_TRUE(PermissionsData::HasHostPermission(extension.get(), favicon_url)); |
491 | 504 |
492 // Having http://favicon should not give you chrome://favicon | 505 // Having http://favicon should not give you chrome://favicon |
493 extension = LoadManifestStrict("script_and_capture", | 506 extension = LoadManifestStrict("script_and_capture", |
494 "extension_http_favicon.json"); | 507 "extension_http_favicon.json"); |
495 EXPECT_TRUE(Blocked(extension.get(), settings_url)); | 508 EXPECT_TRUE(Blocked(extension.get(), settings_url)); |
496 EXPECT_TRUE(Blocked(extension.get(), favicon_url)); | 509 EXPECT_TRUE(Blocked(extension.get(), favicon_url)); |
497 | 510 |
498 // Component extensions with <all_urls> should get everything. | 511 // Component extensions with <all_urls> should get everything. |
499 extension = LoadManifest("script_and_capture", "extension_component_all.json", | 512 extension = LoadManifest("script_and_capture", "extension_component_all.json", |
500 Manifest::COMPONENT, Extension::NO_FLAGS); | 513 Manifest::COMPONENT, Extension::NO_FLAGS); |
501 EXPECT_TRUE(Allowed(extension.get(), http_url)); | 514 EXPECT_TRUE(Allowed(extension.get(), http_url)); |
502 EXPECT_TRUE(Allowed(extension.get(), https_url)); | 515 EXPECT_TRUE(Allowed(extension.get(), https_url)); |
503 EXPECT_TRUE(Allowed(extension.get(), settings_url)); | 516 EXPECT_TRUE(Allowed(extension.get(), settings_url)); |
504 EXPECT_TRUE(Allowed(extension.get(), about_url)); | 517 EXPECT_TRUE(Allowed(extension.get(), about_url)); |
505 EXPECT_TRUE(Allowed(extension.get(), favicon_url)); | 518 EXPECT_TRUE(Allowed(extension.get(), favicon_url)); |
506 EXPECT_TRUE(PermissionsData::HasHostPermission(extension.get(), favicon_url)); | 519 EXPECT_TRUE(PermissionsData::HasHostPermission(extension.get(), favicon_url)); |
507 | 520 |
508 // Component extensions should only get access to what they ask for. | 521 // Component extensions should only get access to what they ask for. |
509 extension = LoadManifest("script_and_capture", | 522 extension = LoadManifest("script_and_capture", |
510 "extension_component_google.json", Manifest::COMPONENT, | 523 "extension_component_google.json", Manifest::COMPONENT, |
511 Extension::NO_FLAGS); | 524 Extension::NO_FLAGS); |
512 EXPECT_TRUE(Allowed(extension.get(), http_url)); | 525 EXPECT_FALSE(Allowed(extension.get(), http_url)); |
526 EXPECT_TRUE(AllowedScript(extension.get(), http_url, http_url)); | |
513 EXPECT_TRUE(Blocked(extension.get(), https_url)); | 527 EXPECT_TRUE(Blocked(extension.get(), https_url)); |
514 EXPECT_TRUE(Blocked(extension.get(), file_url)); | 528 EXPECT_TRUE(Blocked(extension.get(), file_url)); |
515 EXPECT_TRUE(Blocked(extension.get(), settings_url)); | 529 EXPECT_TRUE(Blocked(extension.get(), settings_url)); |
516 EXPECT_TRUE(Blocked(extension.get(), favicon_url)); | 530 EXPECT_TRUE(Blocked(extension.get(), favicon_url)); |
517 EXPECT_TRUE(Blocked(extension.get(), about_url)); | 531 EXPECT_TRUE(Blocked(extension.get(), about_url)); |
518 EXPECT_TRUE(Blocked(extension.get(), extension_url)); | 532 EXPECT_TRUE(Blocked(extension.get(), extension_url)); |
519 EXPECT_FALSE( | 533 EXPECT_FALSE( |
520 PermissionsData::HasHostPermission(extension.get(), settings_url)); | 534 PermissionsData::HasHostPermission(extension.get(), settings_url)); |
521 } | 535 } |
522 | 536 |
523 TEST_F(ExtensionScriptAndCaptureVisibleTest, TabSpecific) { | 537 TEST_F(ExtensionScriptAndCaptureVisibleTest, TabSpecific) { |
524 scoped_refptr<Extension> extension = | 538 scoped_refptr<Extension> extension = |
525 LoadManifestStrict("script_and_capture", "tab_specific.json"); | 539 LoadManifestStrict("script_and_capture", "tab_specific.json"); |
526 | 540 |
527 EXPECT_FALSE(PermissionsData::GetTabSpecificPermissions(extension.get(), 0) | 541 EXPECT_FALSE(PermissionsData::GetTabSpecificPermissions(extension.get(), 0) |
528 .get()); | 542 .get()); |
529 EXPECT_FALSE(PermissionsData::GetTabSpecificPermissions(extension.get(), 1) | 543 EXPECT_FALSE(PermissionsData::GetTabSpecificPermissions(extension.get(), 1) |
530 .get()); | 544 .get()); |
531 EXPECT_FALSE(PermissionsData::GetTabSpecificPermissions(extension.get(), 2) | 545 EXPECT_FALSE(PermissionsData::GetTabSpecificPermissions(extension.get(), 2) |
532 .get()); | 546 .get()); |
533 | 547 |
534 std::set<GURL> no_urls; | 548 std::set<GURL> no_urls; |
535 | 549 |
536 EXPECT_TRUE(AllowedExclusivelyOnTab(extension.get(), no_urls, 0)); | 550 EXPECT_TRUE(ScriptAllowedExclusivelyOnTab(extension.get(), no_urls, 0)); |
537 EXPECT_TRUE(AllowedExclusivelyOnTab(extension.get(), no_urls, 1)); | 551 EXPECT_TRUE(ScriptAllowedExclusivelyOnTab(extension.get(), no_urls, 1)); |
538 EXPECT_TRUE(AllowedExclusivelyOnTab(extension.get(), no_urls, 2)); | 552 EXPECT_TRUE(ScriptAllowedExclusivelyOnTab(extension.get(), no_urls, 2)); |
539 | 553 |
540 URLPatternSet allowed_hosts; | 554 URLPatternSet allowed_hosts; |
541 allowed_hosts.AddPattern(URLPattern(URLPattern::SCHEME_ALL, | 555 allowed_hosts.AddPattern(URLPattern(URLPattern::SCHEME_ALL, |
542 http_url.spec())); | 556 http_url.spec())); |
543 std::set<GURL> allowed_urls; | 557 std::set<GURL> allowed_urls; |
544 allowed_urls.insert(http_url); | 558 allowed_urls.insert(http_url); |
545 // http_url_with_path() will also be allowed, because Extension should be | 559 // http_url_with_path() will also be allowed, because Extension should be |
546 // considering the security origin of the URL not the URL itself, and | 560 // considering the security origin of the URL not the URL itself, and |
547 // http_url is in allowed_hosts. | 561 // http_url is in allowed_hosts. |
548 allowed_urls.insert(http_url_with_path); | 562 allowed_urls.insert(http_url_with_path); |
549 | 563 |
550 { | 564 { |
551 scoped_refptr<PermissionSet> permissions( | 565 scoped_refptr<PermissionSet> permissions( |
552 new PermissionSet(APIPermissionSet(), ManifestPermissionSet(), | 566 new PermissionSet(APIPermissionSet(), ManifestPermissionSet(), |
553 allowed_hosts, URLPatternSet())); | 567 allowed_hosts, URLPatternSet())); |
554 PermissionsData::UpdateTabSpecificPermissions( | 568 PermissionsData::UpdateTabSpecificPermissions( |
555 extension.get(), 0, permissions); | 569 extension.get(), 0, permissions); |
556 EXPECT_EQ(permissions->explicit_hosts(), | 570 EXPECT_EQ(permissions->explicit_hosts(), |
557 PermissionsData::GetTabSpecificPermissions(extension.get(), 0) | 571 PermissionsData::GetTabSpecificPermissions(extension.get(), 0) |
558 ->explicit_hosts()); | 572 ->explicit_hosts()); |
559 } | 573 } |
560 | 574 |
561 EXPECT_TRUE(AllowedExclusivelyOnTab(extension.get(), allowed_urls, 0)); | 575 EXPECT_TRUE(ScriptAllowedExclusivelyOnTab(extension.get(), allowed_urls, 0)); |
562 EXPECT_TRUE(AllowedExclusivelyOnTab(extension.get(), no_urls, 1)); | 576 EXPECT_TRUE(ScriptAllowedExclusivelyOnTab(extension.get(), no_urls, 1)); |
563 EXPECT_TRUE(AllowedExclusivelyOnTab(extension.get(), no_urls, 2)); | 577 EXPECT_TRUE(ScriptAllowedExclusivelyOnTab(extension.get(), no_urls, 2)); |
564 | 578 |
565 PermissionsData::ClearTabSpecificPermissions(extension.get(), 0); | 579 PermissionsData::ClearTabSpecificPermissions(extension.get(), 0); |
566 EXPECT_FALSE(PermissionsData::GetTabSpecificPermissions(extension.get(), 0) | 580 EXPECT_FALSE(PermissionsData::GetTabSpecificPermissions(extension.get(), 0) |
567 .get()); | 581 .get()); |
568 | 582 |
569 EXPECT_TRUE(AllowedExclusivelyOnTab(extension.get(), no_urls, 0)); | 583 EXPECT_TRUE(ScriptAllowedExclusivelyOnTab(extension.get(), no_urls, 0)); |
570 EXPECT_TRUE(AllowedExclusivelyOnTab(extension.get(), no_urls, 1)); | 584 EXPECT_TRUE(ScriptAllowedExclusivelyOnTab(extension.get(), no_urls, 1)); |
571 EXPECT_TRUE(AllowedExclusivelyOnTab(extension.get(), no_urls, 2)); | 585 EXPECT_TRUE(ScriptAllowedExclusivelyOnTab(extension.get(), no_urls, 2)); |
572 | 586 |
573 std::set<GURL> more_allowed_urls = allowed_urls; | 587 std::set<GURL> more_allowed_urls = allowed_urls; |
574 more_allowed_urls.insert(https_url); | 588 more_allowed_urls.insert(https_url); |
575 URLPatternSet more_allowed_hosts = allowed_hosts; | 589 URLPatternSet more_allowed_hosts = allowed_hosts; |
576 more_allowed_hosts.AddPattern(URLPattern(URLPattern::SCHEME_ALL, | 590 more_allowed_hosts.AddPattern(URLPattern(URLPattern::SCHEME_ALL, |
577 https_url.spec())); | 591 https_url.spec())); |
578 | 592 |
579 { | 593 { |
580 scoped_refptr<PermissionSet> permissions( | 594 scoped_refptr<PermissionSet> permissions( |
581 new PermissionSet(APIPermissionSet(), ManifestPermissionSet(), | 595 new PermissionSet(APIPermissionSet(), ManifestPermissionSet(), |
582 allowed_hosts, URLPatternSet())); | 596 allowed_hosts, URLPatternSet())); |
583 PermissionsData::UpdateTabSpecificPermissions( | 597 PermissionsData::UpdateTabSpecificPermissions( |
584 extension.get(), 0, permissions); | 598 extension.get(), 0, permissions); |
585 EXPECT_EQ(permissions->explicit_hosts(), | 599 EXPECT_EQ(permissions->explicit_hosts(), |
586 PermissionsData::GetTabSpecificPermissions(extension.get(), 0) | 600 PermissionsData::GetTabSpecificPermissions(extension.get(), 0) |
587 ->explicit_hosts()); | 601 ->explicit_hosts()); |
588 | 602 |
589 permissions = new PermissionSet(APIPermissionSet(), | 603 permissions = new PermissionSet(APIPermissionSet(), |
590 ManifestPermissionSet(), | 604 ManifestPermissionSet(), |
591 more_allowed_hosts, | 605 more_allowed_hosts, |
592 URLPatternSet()); | 606 URLPatternSet()); |
593 PermissionsData::UpdateTabSpecificPermissions( | 607 PermissionsData::UpdateTabSpecificPermissions( |
594 extension.get(), 1, permissions); | 608 extension.get(), 1, permissions); |
595 EXPECT_EQ(permissions->explicit_hosts(), | 609 EXPECT_EQ(permissions->explicit_hosts(), |
596 PermissionsData::GetTabSpecificPermissions(extension.get(), 1) | 610 PermissionsData::GetTabSpecificPermissions(extension.get(), 1) |
597 ->explicit_hosts()); | 611 ->explicit_hosts()); |
598 } | 612 } |
599 | 613 |
600 EXPECT_TRUE(AllowedExclusivelyOnTab(extension.get(), allowed_urls, 0)); | 614 EXPECT_TRUE(ScriptAllowedExclusivelyOnTab(extension.get(), allowed_urls, 0)); |
601 EXPECT_TRUE(AllowedExclusivelyOnTab(extension.get(), more_allowed_urls, 1)); | 615 EXPECT_TRUE( |
602 EXPECT_TRUE(AllowedExclusivelyOnTab(extension.get(), no_urls, 2)); | 616 ScriptAllowedExclusivelyOnTab(extension.get(), more_allowed_urls, 1)); |
617 EXPECT_TRUE(ScriptAllowedExclusivelyOnTab(extension.get(), no_urls, 2)); | |
603 | 618 |
604 PermissionsData::ClearTabSpecificPermissions(extension.get(), 0); | 619 PermissionsData::ClearTabSpecificPermissions(extension.get(), 0); |
605 EXPECT_FALSE(PermissionsData::GetTabSpecificPermissions(extension.get(), 0) | 620 EXPECT_FALSE(PermissionsData::GetTabSpecificPermissions(extension.get(), 0) |
606 .get()); | 621 .get()); |
607 | 622 |
608 EXPECT_TRUE(AllowedExclusivelyOnTab(extension.get(), no_urls, 0)); | 623 EXPECT_TRUE(ScriptAllowedExclusivelyOnTab(extension.get(), no_urls, 0)); |
609 EXPECT_TRUE(AllowedExclusivelyOnTab(extension.get(), more_allowed_urls, 1)); | 624 EXPECT_TRUE( |
610 EXPECT_TRUE(AllowedExclusivelyOnTab(extension.get(), no_urls, 2)); | 625 ScriptAllowedExclusivelyOnTab(extension.get(), more_allowed_urls, 1)); |
626 EXPECT_TRUE(ScriptAllowedExclusivelyOnTab(extension.get(), no_urls, 2)); | |
611 | 627 |
612 PermissionsData::ClearTabSpecificPermissions(extension.get(), 1); | 628 PermissionsData::ClearTabSpecificPermissions(extension.get(), 1); |
613 EXPECT_FALSE(PermissionsData::GetTabSpecificPermissions(extension.get(), 1) | 629 EXPECT_FALSE(PermissionsData::GetTabSpecificPermissions(extension.get(), 1) |
614 .get()); | 630 .get()); |
615 | 631 |
616 EXPECT_TRUE(AllowedExclusivelyOnTab(extension.get(), no_urls, 0)); | 632 EXPECT_TRUE(ScriptAllowedExclusivelyOnTab(extension.get(), no_urls, 0)); |
617 EXPECT_TRUE(AllowedExclusivelyOnTab(extension.get(), no_urls, 1)); | 633 EXPECT_TRUE(ScriptAllowedExclusivelyOnTab(extension.get(), no_urls, 1)); |
618 EXPECT_TRUE(AllowedExclusivelyOnTab(extension.get(), no_urls, 2)); | 634 EXPECT_TRUE(ScriptAllowedExclusivelyOnTab(extension.get(), no_urls, 2)); |
619 } | 635 } |
620 | 636 |
621 } // namespace extensions | 637 } // namespace extensions |
OLD | NEW |