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"
101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "extensions/common/constants.h"
111e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "extensions/common/extensions_client.h"
12d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "extensions/common/manifest_constants.h"
135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "extensions/common/switches.h"
14010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "extensions/renderer/dispatcher.h"
1590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
1690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)namespace extensions {
1790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
18d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)namespace errors = manifest_errors;
1990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
2090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)RendererPermissionsPolicyDelegate::RendererPermissionsPolicyDelegate(
2190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    Dispatcher* dispatcher) : dispatcher_(dispatcher) {
2290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  PermissionsData::SetPolicyDelegate(this);
2390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}
2490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)RendererPermissionsPolicyDelegate::~RendererPermissionsPolicyDelegate() {
2590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  PermissionsData::SetPolicyDelegate(NULL);
2690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}
2790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
2890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)bool RendererPermissionsPolicyDelegate::CanExecuteScriptOnPage(
2990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    const Extension* extension,
3090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    const GURL& document_url,
3190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    const GURL& top_document_url,
3290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    int tab_id,
3390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    int process_id,
3490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    std::string* error) {
351e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  const ExtensionsClient::ScriptingWhitelist& whitelist =
361e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)      ExtensionsClient::Get()->GetScriptingWhitelist();
371e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  if (std::find(whitelist.begin(), whitelist.end(), extension->id()) !=
381e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)      whitelist.end()) {
3958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    return true;
4058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  }
4158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  CommandLine* command_line = CommandLine::ForCurrentProcess();
435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (command_line->HasSwitch(::switches::kSigninProcess)) {
4490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    if (error)
4590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      *error = errors::kCannotScriptSigninPage;
4690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    return false;
4790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  }
4890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// TODO(thestig): Remove scaffolding once this file no longer builds with
501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// extensions disabled.
511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#if defined(ENABLE_EXTENSIONS)
521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  if (dispatcher_->IsExtensionActive(extensions::kWebStoreAppId)) {
5390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    if (error)
5490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      *error = errors::kCannotScriptGallery;
5590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    return false;
5690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  }
571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif
5890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
5990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  return true;
6090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}
6190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
6290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}  // namespace extensions
63