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