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

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

Issue 293003008: Make ActiveScriptController use Active Tab-style permissions (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 7 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 "extensions/common/permissions/permissions_data.h" 5 #include "extensions/common/permissions/permissions_data.h"
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/memory/scoped_ptr.h" 8 #include "base/memory/scoped_ptr.h"
9 #include "base/strings/string16.h" 9 #include "base/strings/string16.h"
10 #include "base/strings/string_number_conversions.h" 10 #include "base/strings/string_number_conversions.h"
(...skipping 324 matching lines...) Expand 10 before | Expand all | Expand 10 after
335 335
336 // static 336 // static
337 void PermissionsData::ClearTabSpecificPermissions( 337 void PermissionsData::ClearTabSpecificPermissions(
338 const Extension* extension, 338 const Extension* extension,
339 int tab_id) { 339 int tab_id) {
340 CHECK_GE(tab_id, 0); 340 CHECK_GE(tab_id, 0);
341 extension->permissions_data()->tab_specific_permissions_.erase(tab_id); 341 extension->permissions_data()->tab_specific_permissions_.erase(tab_id);
342 } 342 }
343 343
344 // static 344 // static
345 bool PermissionsData::HasTabSpecificPermission(const Extension* extension,
346 int tab_id,
347 const GURL& url) {
348 if (tab_id >= 0) {
349 scoped_refptr<const PermissionSet> tab_permissions =
350 GetTabSpecificPermissions(extension, tab_id);
351 if (tab_permissions.get() &&
352 tab_permissions->explicit_hosts().MatchesSecurityOrigin(url)) {
353 return true;
354 }
355 }
356 return false;
357 }
358
359 // static
345 bool PermissionsData::HasAPIPermission(const Extension* extension, 360 bool PermissionsData::HasAPIPermission(const Extension* extension,
346 APIPermission::ID permission) { 361 APIPermission::ID permission) {
347 base::AutoLock auto_lock(extension->permissions_data()->runtime_lock_); 362 base::AutoLock auto_lock(extension->permissions_data()->runtime_lock_);
348 return GetActivePermissions(extension)->HasAPIPermission(permission); 363 return GetActivePermissions(extension)->HasAPIPermission(permission);
349 } 364 }
350 365
351 // static 366 // static
352 bool PermissionsData::HasAPIPermission( 367 bool PermissionsData::HasAPIPermission(
353 const Extension* extension, 368 const Extension* extension,
354 const std::string& permission_name) { 369 const std::string& permission_name) {
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
407 return GetActivePermissions(extension)->HasExplicitAccessToOrigin(url); 422 return GetActivePermissions(extension)->HasExplicitAccessToOrigin(url);
408 } 423 }
409 424
410 // static 425 // static
411 bool PermissionsData::HasEffectiveAccessToAllHosts(const Extension* extension) { 426 bool PermissionsData::HasEffectiveAccessToAllHosts(const Extension* extension) {
412 base::AutoLock auto_lock(extension->permissions_data()->runtime_lock_); 427 base::AutoLock auto_lock(extension->permissions_data()->runtime_lock_);
413 return GetActivePermissions(extension)->HasEffectiveAccessToAllHosts(); 428 return GetActivePermissions(extension)->HasEffectiveAccessToAllHosts();
414 } 429 }
415 430
416 // static 431 // static
432 bool PermissionsData::HasAccessToMostHosts(const Extension* extension) {
433 base::AutoLock auto_lock(extension->permissions_data()->runtime_lock_);
434 return GetActivePermissions(extension)->HasAccessToMostHosts();
435 }
436
437 // static
417 PermissionMessages PermissionsData::GetPermissionMessages( 438 PermissionMessages PermissionsData::GetPermissionMessages(
418 const Extension* extension) { 439 const Extension* extension) {
419 base::AutoLock auto_lock(extension->permissions_data()->runtime_lock_); 440 base::AutoLock auto_lock(extension->permissions_data()->runtime_lock_);
420 if (ShouldSkipPermissionWarnings(extension)) { 441 if (ShouldSkipPermissionWarnings(extension)) {
421 return PermissionMessages(); 442 return PermissionMessages();
422 } else { 443 } else {
423 return PermissionMessageProvider::Get()->GetPermissionMessages( 444 return PermissionMessageProvider::Get()->GetPermissionMessages(
424 GetActivePermissions(extension), extension->GetType()); 445 GetActivePermissions(extension), extension->GetType());
425 } 446 }
426 } 447 }
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
483 504
484 if (top_frame_url.SchemeIs(extensions::kExtensionScheme) && 505 if (top_frame_url.SchemeIs(extensions::kExtensionScheme) &&
485 top_frame_url.GetOrigin() != 506 top_frame_url.GetOrigin() !=
486 Extension::GetBaseURLFromExtensionId(extension->id()).GetOrigin() && 507 Extension::GetBaseURLFromExtensionId(extension->id()).GetOrigin() &&
487 !can_execute_everywhere) { 508 !can_execute_everywhere) {
488 if (error) 509 if (error)
489 *error = errors::kCannotAccessExtensionUrl; 510 *error = errors::kCannotAccessExtensionUrl;
490 return false; 511 return false;
491 } 512 }
492 513
493 // If a tab ID is specified, try the tab-specific permissions. 514 if (HasTabSpecificPermission(extension, tab_id, document_url))
not at google - send to devlin 2014/05/21 20:10:20 and "HasTabSpecificPermission" doesn't imply to me
Devlin 2014/05/21 23:16:07 My worry is making it clear that this is only aski
not at google - send to devlin 2014/05/21 23:33:45 or HasTabSpecificPermissionToExecuteScript times
Devlin 2014/05/22 15:52:14 Done.
494 if (tab_id >= 0) { 515 return true;
495 scoped_refptr<const PermissionSet> tab_permissions =
496 GetTabSpecificPermissions(extension, tab_id);
497 if (tab_permissions.get() &&
498 tab_permissions->explicit_hosts().MatchesSecurityOrigin(document_url)) {
499 return true;
500 }
501 }
502 516
503 bool can_access = false; 517 bool can_access = false;
504 518
505 if (script) { 519 if (script) {
506 // If a script is specified, use its matches. 520 // If a script is specified, use its matches.
507 can_access = script->MatchesURL(document_url); 521 can_access = script->MatchesURL(document_url);
508 } else { 522 } else {
509 // Otherwise, see if this extension has permission to execute script 523 // Otherwise, see if this extension has permission to execute script
510 // programmatically on pages. 524 // programmatically on pages.
511 can_access = GetActivePermissions(extension)-> 525 can_access = GetActivePermissions(extension)->
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
555 return false; 569 return false;
556 } 570 }
557 571
558 if (error) 572 if (error)
559 *error = errors::kAllURLOrActiveTabNeeded; 573 *error = errors::kAllURLOrActiveTabNeeded;
560 return false; 574 return false;
561 } 575 }
562 576
563 // static 577 // static
564 bool PermissionsData::RequiresActionForScriptExecution( 578 bool PermissionsData::RequiresActionForScriptExecution(
565 const Extension* extension) { 579 const Extension* extension,
580 int tab_id,
581 const GURL& document_url) {
not at google - send to devlin 2014/05/21 20:10:20 "document URL" isn't right, it's actually top leve
Devlin 2014/05/21 23:16:07 Done.
566 // For now, the user should be notified when an extension with all hosts 582 // For now, the user should be notified when an extension with all hosts
567 // permission tries to execute a script on a page. Exceptions for policy- 583 // permission tries to execute a script on a page, with exceptions for policy-
568 // enabled and component extensions. 584 // enabled and component extensions. If this doesn't meet those criteria,
569 return extension->ShouldDisplayInExtensionSettings() && 585 // return immediately.
570 !Manifest::IsPolicyLocation(extension->location()) && 586 if (!extension->ShouldDisplayInExtensionSettings() ||
571 !Manifest::IsComponentLocation(extension->location()) && 587 Manifest::IsPolicyLocation(extension->location()) ||
572 HasEffectiveAccessToAllHosts(extension); 588 Manifest::IsComponentLocation(extension->location()) ||
not at google - send to devlin 2014/05/21 20:10:20 the ComponentLocation thing is actually unnecessar
Devlin 2014/05/21 23:16:07 Yes, but that's using internal logic from ShouldDi
not at google - send to devlin 2014/05/21 23:33:45 Leaving in is fine. I think we're going to want 2
589 !HasAccessToMostHosts(extension)) {
590 return false;
591 }
592
593 // If the extension has explicit permission to run on the given tab, then
594 // we don't need to alert the user.
595 if (HasTabSpecificPermission(extension, tab_id, document_url))
596 return false;
597
598 return true;
573 } 599 }
574 600
575 bool PermissionsData::ParsePermissions(Extension* extension, 601 bool PermissionsData::ParsePermissions(Extension* extension,
576 base::string16* error) { 602 base::string16* error) {
577 initial_required_permissions_.reset(new InitialPermissions); 603 initial_required_permissions_.reset(new InitialPermissions);
578 if (!ParseHelper(extension, 604 if (!ParseHelper(extension,
579 keys::kPermissions, 605 keys::kPermissions,
580 &initial_required_permissions_->api_permissions, 606 &initial_required_permissions_->api_permissions,
581 &initial_required_permissions_->host_permissions, 607 &initial_required_permissions_->host_permissions,
582 error)) { 608 error)) {
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
617 initial_optional_permissions_->api_permissions, 643 initial_optional_permissions_->api_permissions,
618 initial_optional_permissions_->manifest_permissions, 644 initial_optional_permissions_->manifest_permissions,
619 initial_optional_permissions_->host_permissions, 645 initial_optional_permissions_->host_permissions,
620 URLPatternSet()); 646 URLPatternSet());
621 647
622 initial_required_permissions_.reset(); 648 initial_required_permissions_.reset();
623 initial_optional_permissions_.reset(); 649 initial_optional_permissions_.reset();
624 } 650 }
625 651
626 } // namespace extensions 652 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698