summaryrefslogtreecommitdiff
path: root/chromium/extensions/browser/suggest_permission_util.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/extensions/browser/suggest_permission_util.cc')
-rw-r--r--chromium/extensions/browser/suggest_permission_util.cc65
1 files changed, 65 insertions, 0 deletions
diff --git a/chromium/extensions/browser/suggest_permission_util.cc b/chromium/extensions/browser/suggest_permission_util.cc
new file mode 100644
index 00000000000..d0b018f7738
--- /dev/null
+++ b/chromium/extensions/browser/suggest_permission_util.cc
@@ -0,0 +1,65 @@
+// 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