1 // Copyright 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "chrome/renderer/extensions/renderer_permissions_policy_delegate.h" 6 7 #include "base/command_line.h" 8 #include "chrome/common/chrome_switches.h" 9 #include "chrome/common/extensions/extension_constants.h" 10 #include "chrome/common/extensions/extension_manifest_constants.h" 11 #include "chrome/renderer/extensions/dispatcher.h" 12 13 namespace extensions { 14 15 namespace errors = extension_manifest_errors; 16 17 RendererPermissionsPolicyDelegate::RendererPermissionsPolicyDelegate( 18 Dispatcher* dispatcher) : dispatcher_(dispatcher) { 19 PermissionsData::SetPolicyDelegate(this); 20 } 21 RendererPermissionsPolicyDelegate::~RendererPermissionsPolicyDelegate() { 22 PermissionsData::SetPolicyDelegate(NULL); 23 } 24 25 bool RendererPermissionsPolicyDelegate::CanExecuteScriptOnPage( 26 const Extension* extension, 27 const GURL& document_url, 28 const GURL& top_document_url, 29 int tab_id, 30 const UserScript* script, 31 int process_id, 32 std::string* error) { 33 const Extension::ScriptingWhitelist* whitelist = 34 Extension::GetScriptingWhitelist(); 35 if (std::find(whitelist->begin(), whitelist->end(), extension->id()) != 36 whitelist->end()) { 37 return true; 38 } 39 40 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kSigninProcess)) { 41 if (error) 42 *error = errors::kCannotScriptSigninPage; 43 return false; 44 } 45 46 if (dispatcher_->IsExtensionActive(extension_misc::kWebStoreAppId)) { 47 if (error) 48 *error = errors::kCannotScriptGallery; 49 return false; 50 } 51 52 return true; 53 } 54 55 } // namespace extensions 56