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 "extensions/common/extensions_client.h" 11#include "extensions/common/manifest_constants.h" 12#include "extensions/common/switches.h" 13#include "extensions/renderer/dispatcher.h" 14 15namespace extensions { 16 17namespace errors = manifest_errors; 18 19RendererPermissionsPolicyDelegate::RendererPermissionsPolicyDelegate( 20 Dispatcher* dispatcher) : dispatcher_(dispatcher) { 21 PermissionsData::SetPolicyDelegate(this); 22} 23RendererPermissionsPolicyDelegate::~RendererPermissionsPolicyDelegate() { 24 PermissionsData::SetPolicyDelegate(NULL); 25} 26 27bool RendererPermissionsPolicyDelegate::CanExecuteScriptOnPage( 28 const Extension* extension, 29 const GURL& document_url, 30 const GURL& top_document_url, 31 int tab_id, 32 int process_id, 33 std::string* error) { 34 const ExtensionsClient::ScriptingWhitelist& whitelist = 35 ExtensionsClient::Get()->GetScriptingWhitelist(); 36 if (std::find(whitelist.begin(), whitelist.end(), extension->id()) != 37 whitelist.end()) { 38 return true; 39 } 40 41 CommandLine* command_line = CommandLine::ForCurrentProcess(); 42 if (command_line->HasSwitch(::switches::kSigninProcess)) { 43 if (error) 44 *error = errors::kCannotScriptSigninPage; 45 return false; 46 } 47 48 if (dispatcher_->IsExtensionActive(extension_misc::kWebStoreAppId)) { 49 if (error) 50 *error = errors::kCannotScriptGallery; 51 return false; 52 } 53 54 return true; 55} 56 57} // namespace extensions 58