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