190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// found in the LICENSE file. 490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chrome/renderer/extensions/renderer_permissions_policy_delegate.h" 690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "base/command_line.h" 890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chrome/common/chrome_switches.h" 990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chrome/common/extensions/extension_constants.h" 101e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "extensions/common/extensions_client.h" 11d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "extensions/common/manifest_constants.h" 125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "extensions/common/switches.h" 13010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "extensions/renderer/dispatcher.h" 1490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 1590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)namespace extensions { 1690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 17d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)namespace errors = manifest_errors; 1890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 1990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)RendererPermissionsPolicyDelegate::RendererPermissionsPolicyDelegate( 2090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) Dispatcher* dispatcher) : dispatcher_(dispatcher) { 2190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) PermissionsData::SetPolicyDelegate(this); 2290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 2390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)RendererPermissionsPolicyDelegate::~RendererPermissionsPolicyDelegate() { 2490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) PermissionsData::SetPolicyDelegate(NULL); 2590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 2690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 2790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)bool RendererPermissionsPolicyDelegate::CanExecuteScriptOnPage( 2890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const Extension* extension, 2990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const GURL& document_url, 3090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const GURL& top_document_url, 3190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) int tab_id, 3290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) int process_id, 3390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) std::string* error) { 341e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const ExtensionsClient::ScriptingWhitelist& whitelist = 351e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ExtensionsClient::Get()->GetScriptingWhitelist(); 361e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if (std::find(whitelist.begin(), whitelist.end(), extension->id()) != 371e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) whitelist.end()) { 3858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return true; 3958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 4058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CommandLine* command_line = CommandLine::ForCurrentProcess(); 425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (command_line->HasSwitch(::switches::kSigninProcess)) { 4390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) if (error) 4490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) *error = errors::kCannotScriptSigninPage; 4590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return false; 4690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) } 4790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 48effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (dispatcher_->IsExtensionActive(extension_misc::kWebStoreAppId)) { 4990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) if (error) 5090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) *error = errors::kCannotScriptGallery; 5190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return false; 5290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) } 5390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 5490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return true; 5590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 5690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 5790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} // namespace extensions 58