blob: d0b018f7738d693d3d99a22c1e264a9908c02798 [file] [log] [blame]
// 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 "base/strings/stringprintf.h"
#include "content/public/browser/render_frame_host.h"
#include "content/public/browser/web_contents.h"
#include "content/public/common/console_message_level.h"
#include "extensions/common/extension.h"
#include "extensions/common/permissions/permissions_data.h"
#include "extensions/common/permissions/permissions_info.h"
using content::CONSOLE_MESSAGE_LEVEL_WARNING;
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::RenderFrameHost* render_frame_host) {
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);
// Only the main frame handles dev tools messages.
content::WebContents::FromRenderFrameHost(render_frame_host)
->GetMainFrame()
->AddMessageToConsole(CONSOLE_MESSAGE_LEVEL_WARNING, message);
}
} // namespace
bool IsExtensionWithPermissionOrSuggestInConsole(
APIPermission::ID permission,
const Extension* extension,
content::RenderFrameHost* render_frame_host) {
if (extension && extension->permissions_data()->HasAPIPermission(permission))
return true;
if (extension && render_frame_host) {
SuggestAPIPermissionInDevToolsConsole(permission, extension,
render_frame_host);
}
return false;
}
} // namespace extensions