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 "chrome/common/extensions/permissions/permissions_data.h" | 5 #include "chrome/common/extensions/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" |
11 #include "base/strings/stringprintf.h" | 11 #include "base/strings/stringprintf.h" |
12 #include "base/strings/utf_string_conversions.h" | 12 #include "base/strings/utf_string_conversions.h" |
13 #include "base/values.h" | 13 #include "base/values.h" |
14 #include "chrome/common/extensions/extension.h" | 14 #include "chrome/common/extensions/extension.h" |
15 #include "chrome/common/extensions/extension_constants.h" | |
16 #include "content/public/common/url_constants.h" | 15 #include "content/public/common/url_constants.h" |
17 #include "extensions/common/constants.h" | 16 #include "extensions/common/constants.h" |
18 #include "extensions/common/error_utils.h" | 17 #include "extensions/common/error_utils.h" |
19 #include "extensions/common/extensions_client.h" | 18 #include "extensions/common/extensions_client.h" |
20 #include "extensions/common/features/feature.h" | 19 #include "extensions/common/features/feature.h" |
21 #include "extensions/common/features/feature_provider.h" | 20 #include "extensions/common/features/feature_provider.h" |
22 #include "extensions/common/manifest.h" | 21 #include "extensions/common/manifest.h" |
23 #include "extensions/common/manifest_constants.h" | 22 #include "extensions/common/manifest_constants.h" |
24 #include "extensions/common/manifest_constants.h" | |
25 #include "extensions/common/permissions/api_permission_set.h" | 23 #include "extensions/common/permissions/api_permission_set.h" |
26 #include "extensions/common/permissions/permission_message_provider.h" | 24 #include "extensions/common/permissions/permission_message_provider.h" |
27 #include "extensions/common/permissions/permission_set.h" | 25 #include "extensions/common/permissions/permission_set.h" |
28 #include "extensions/common/permissions/permissions_info.h" | 26 #include "extensions/common/permissions/permissions_info.h" |
29 #include "extensions/common/switches.h" | 27 #include "extensions/common/switches.h" |
30 #include "extensions/common/url_pattern_set.h" | 28 #include "extensions/common/url_pattern_set.h" |
31 #include "extensions/common/user_script.h" | 29 #include "extensions/common/user_script.h" |
32 #include "url/gurl.h" | 30 #include "url/gurl.h" |
33 | 31 |
34 namespace extensions { | 32 namespace extensions { |
(...skipping 419 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
454 | 452 |
455 // static | 453 // static |
456 bool PermissionsData::CanExecuteScriptOnPage(const Extension* extension, | 454 bool PermissionsData::CanExecuteScriptOnPage(const Extension* extension, |
457 const GURL& document_url, | 455 const GURL& document_url, |
458 const GURL& top_frame_url, | 456 const GURL& top_frame_url, |
459 int tab_id, | 457 int tab_id, |
460 const UserScript* script, | 458 const UserScript* script, |
461 int process_id, | 459 int process_id, |
462 std::string* error) { | 460 std::string* error) { |
463 base::AutoLock auto_lock(extension->permissions_data()->runtime_lock_); | 461 base::AutoLock auto_lock(extension->permissions_data()->runtime_lock_); |
464 // The gallery is special-cased as a restricted URL for scripting to prevent | |
465 // access to special JS bindings we expose to the gallery (and avoid things | |
466 // like extensions removing the "report abuse" link). | |
467 // TODO(erikkay): This seems like the wrong test. Shouldn't we we testing | |
468 // against the store app extent? | |
469 GURL store_url(extension_urls::GetWebstoreLaunchURL()); | |
470 const CommandLine* command_line = CommandLine::ForCurrentProcess(); | 462 const CommandLine* command_line = CommandLine::ForCurrentProcess(); |
471 bool can_execute_everywhere = CanExecuteScriptEverywhere(extension); | 463 bool can_execute_everywhere = CanExecuteScriptEverywhere(extension); |
472 | 464 |
473 if (g_policy_delegate && | 465 if (g_policy_delegate && |
474 !g_policy_delegate->CanExecuteScriptOnPage( | 466 !g_policy_delegate->CanExecuteScriptOnPage( |
475 extension, document_url, top_frame_url, tab_id, | 467 extension, document_url, top_frame_url, tab_id, |
476 script, process_id, error)) | 468 script, process_id, error)) |
477 return false; | 469 return false; |
478 | 470 |
479 if ((document_url.host() == store_url.host()) && | 471 if (!can_execute_everywhere && |
480 !can_execute_everywhere && | 472 !ExtensionsClient::Get()->IsScriptableURL(document_url, error)) { |
481 !command_line->HasSwitch(switches::kAllowScriptingGallery)) { | |
482 if (error) | |
483 *error = errors::kCannotScriptGallery; | |
484 return false; | 473 return false; |
485 } | 474 } |
486 | 475 |
487 if (!command_line->HasSwitch(switches::kExtensionsOnChromeURLs)) { | 476 if (!command_line->HasSwitch(switches::kExtensionsOnChromeURLs)) { |
488 if (document_url.SchemeIs(chrome::kChromeUIScheme) && | 477 if (document_url.SchemeIs(chrome::kChromeUIScheme) && |
489 !can_execute_everywhere) { | 478 !can_execute_everywhere) { |
490 if (error) | 479 if (error) |
491 *error = errors::kCannotAccessChromeUrl; | 480 *error = errors::kCannotAccessChromeUrl; |
492 return false; | 481 return false; |
493 } | 482 } |
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
618 optional_permission_set_ = new PermissionSet( | 607 optional_permission_set_ = new PermissionSet( |
619 initial_optional_permissions_->api_permissions, | 608 initial_optional_permissions_->api_permissions, |
620 initial_optional_permissions_->host_permissions, | 609 initial_optional_permissions_->host_permissions, |
621 URLPatternSet()); | 610 URLPatternSet()); |
622 | 611 |
623 initial_required_permissions_.reset(); | 612 initial_required_permissions_.reset(); |
624 initial_optional_permissions_.reset(); | 613 initial_optional_permissions_.reset(); |
625 } | 614 } |
626 | 615 |
627 } // namespace extensions | 616 } // namespace extensions |
OLD | NEW |