// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "extensions/browser/suggest_permission_util.h"
#include "content/public/browser/render_view_host.h"
#include "content/public/common/console_message_level.h"
#include "extensions/common/extension.h"
#include "extensions/common/extension_messages.h"
#include "extensions/common/permissions/permissions_data.h"
#include "extensions/common/permissions/permissions_info.h"
using content::CONSOLE_MESSAGE_LEVEL_WARNING;
using content::RenderViewHost;
namespace extensions {
namespace {
const char kPermissionsHelpURLForExtensions[] =
"http://developer.chrome.com/extensions/manifest.html#permissions";
const char kPermissionsHelpURLForApps[] =
"http://developer.chrome.com/apps/declare_permissions.html";
void SuggestAPIPermissionInDevToolsConsole(APIPermission::ID permission,
const Extension* extension,
content::RenderViewHost* host) {
if (!extension || !host)
return;
const APIPermissionInfo* permission_info =
PermissionsInfo::GetInstance()->GetByID(permission);
CHECK(permission_info);
// Note, intentionally not internationalizing this string, as it is output
// as a log message to developers in the developer tools console.
std::string message = base::StringPrintf(
"Is the '%s' permission appropriate? See %s.",
permission_info->name(),
extension->is_platform_app() ?
kPermissionsHelpURLForApps : kPermissionsHelpURLForExtensions);
host->Send(new ExtensionMsg_AddMessageToConsole(
host->GetRoutingID(), CONSOLE_MESSAGE_LEVEL_WARNING, message));
}
} // namespace
bool IsExtensionWithPermissionOrSuggestInConsole(
APIPermission::ID permission,
const Extension* extension,
content::RenderViewHost* host) {
if (extension && extension->permissions_data()->HasAPIPermission(permission))
return true;
if (extension)
SuggestAPIPermissionInDevToolsConsole(permission, extension, host);
return false;
}
} // namespace extensions