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