1// Copyright (c) 2012 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 "extensions/browser/suggest_permission_util.h"
6
7#include "content/public/browser/render_view_host.h"
8#include "content/public/common/console_message_level.h"
9#include "extensions/common/extension.h"
10#include "extensions/common/extension_messages.h"
11#include "extensions/common/permissions/permissions_data.h"
12#include "extensions/common/permissions/permissions_info.h"
13
14using content::CONSOLE_MESSAGE_LEVEL_WARNING;
15using content::RenderViewHost;
16
17namespace extensions {
18
19namespace {
20
21const char kPermissionsHelpURLForExtensions[] =
22    "http://developer.chrome.com/extensions/manifest.html#permissions";
23const char kPermissionsHelpURLForApps[] =
24    "http://developer.chrome.com/apps/declare_permissions.html";
25
26void SuggestAPIPermissionInDevToolsConsole(APIPermission::ID permission,
27                                           const Extension* extension,
28                                           content::RenderViewHost* host) {
29  if (!extension || !host)
30    return;
31
32  const APIPermissionInfo* permission_info =
33      PermissionsInfo::GetInstance()->GetByID(permission);
34  CHECK(permission_info);
35
36  // Note, intentionally not internationalizing this string, as it is output
37  // as a log message to developers in the developer tools console.
38  std::string message = base::StringPrintf(
39      "Is the '%s' permission appropriate? See %s.",
40      permission_info->name(),
41      extension->is_platform_app() ?
42          kPermissionsHelpURLForApps : kPermissionsHelpURLForExtensions);
43
44  host->Send(new ExtensionMsg_AddMessageToConsole(
45      host->GetRoutingID(), CONSOLE_MESSAGE_LEVEL_WARNING, message));
46}
47
48}  // namespace
49
50bool IsExtensionWithPermissionOrSuggestInConsole(
51    APIPermission::ID permission,
52    const Extension* extension,
53    content::RenderViewHost* host) {
54  if (extension && extension->permissions_data()->HasAPIPermission(permission))
55    return true;
56
57  if (extension)
58    SuggestAPIPermissionInDevToolsConsole(permission, extension, host);
59
60  return false;
61}
62
63}  // namespace extensions
64