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