// 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 "chrome/browser/extensions/suggest_permission_util.h" #include "chrome/browser/extensions/extension_system.h" #include "chrome/common/extensions/extension_messages.h" #include "content/public/browser/render_view_host.h" #include "content/public/common/console_message_level.h" #include "extensions/browser/process_manager.h" #include "extensions/common/extension.h" #include "extensions/common/permissions/permissions_info.h" using content::CONSOLE_MESSAGE_LEVEL_WARNING; using content::RenderViewHost; const char kPermissionsHelpURLForExtensions[] = "http://developer.chrome.com/extensions/manifest.html#permissions"; const char kPermissionsHelpURLForApps[] = "http://developer.chrome.com/apps/declare_permissions.html"; namespace extensions { 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)); } void SuggestAPIPermissionInDevToolsConsole(APIPermission::ID permission, const Extension* extension, Profile* profile) { extensions::ProcessManager* process_manager = extensions::ExtensionSystem::Get(profile)->process_manager(); std::set<content::RenderViewHost*> views = process_manager->GetRenderViewHostsForExtension(extension->id()); for (std::set<RenderViewHost*>::const_iterator iter = views.begin(); iter != views.end(); ++iter) { RenderViewHost* host = *iter; SuggestAPIPermissionInDevToolsConsole(permission, extension, host); } } bool IsExtensionWithPermissionOrSuggestInConsole( APIPermission::ID permission, const Extension* extension, content::RenderViewHost* host) { if (extension && extension->HasAPIPermission(permission)) return true; if (extension) SuggestAPIPermissionInDevToolsConsole(permission, extension, host); return false; } bool IsExtensionWithPermissionOrSuggestInConsole( APIPermission::ID permission, const Extension* extension, Profile* profile) { if (extension && extension->HasAPIPermission(permission)) return true; if (extension) SuggestAPIPermissionInDevToolsConsole(permission, extension, profile); return false; } } // namespace extensions