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

Side by Side Diff: extensions/common/permissions/permissions_data_unittest.cc

Issue 140433003: tab capture: Change the permissions for tabs.captureVisibleTab(). (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix-tests Created 6 years, 11 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) 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
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
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));
not at google - send to devlin 2014/01/16 17:48:26 Ugh this is tricky. Oh well I don't think there's
not at google - send to devlin 2014/01/16 18:57:14 This is ok, turns out you can't put a file:// 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));
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698