diff options
author | ericdingle@chromium.org <ericdingle@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-12-15 22:42:42 +0000 |
---|---|---|
committer | ericdingle@chromium.org <ericdingle@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-12-15 22:42:42 +0000 |
commit | efd7599fc11374ccc6696db7cada5e4304c2ee94 (patch) | |
tree | ea637f3be7f5f63a7aa48ca662859ddb2ccf1b29 /chrome/browser/extensions/extension_function_dispatcher.cc | |
parent | b6316ceb33a16ecf80704735d56708d29fc4f1e1 (diff) | |
download | chromium_src-efd7599fc11374ccc6696db7cada5e4304c2ee94.zip chromium_src-efd7599fc11374ccc6696db7cada5e4304c2ee94.tar.gz chromium_src-efd7599fc11374ccc6696db7cada5e4304c2ee94.tar.bz2 |
Add implementation of ExtensionActivityLog and extension API logging.
This is the backend implementation of https://docs.google.com/a/google.com/document/d/1Lge-nbnU4RSI0fvb4RkngMAfgKV_zQRPp49zgRea1PM/edit?hl=en_US
BUG=
TEST=
Review URL: http://codereview.chromium.org/8598025
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@114711 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/extensions/extension_function_dispatcher.cc')
-rw-r--r-- | chrome/browser/extensions/extension_function_dispatcher.cc | 55 |
1 files changed, 53 insertions, 2 deletions
diff --git a/chrome/browser/extensions/extension_function_dispatcher.cc b/chrome/browser/extensions/extension_function_dispatcher.cc index bda138f..00905eb 100644 --- a/chrome/browser/extensions/extension_function_dispatcher.cc +++ b/chrome/browser/extensions/extension_function_dispatcher.cc @@ -6,6 +6,7 @@ #include <map> +#include "base/json/json_value_serializer.h" #include "base/memory/ref_counted.h" #include "base/memory/singleton.h" #include "base/process_util.h" @@ -17,6 +18,7 @@ #include "chrome/browser/download/download_extension_api.h" #include "chrome/browser/extensions/api/socket/socket_api.h" #include "chrome/browser/extensions/execute_code_in_tab_function.h" +#include "chrome/browser/extensions/extension_activity_log.h" #include "chrome/browser/extensions/extension_app_api.h" #include "chrome/browser/extensions/extension_browser_actions_api.h" #include "chrome/browser/extensions/extension_chrome_auth_private_api.h" @@ -525,6 +527,47 @@ ExtensionFunction* FactoryRegistry::NewFunction(const std::string& name) { return function; } +const char kAccessDenied[] = "access denied"; +const char kQuotaExceeded[] = "quota exceeded"; + +void LogSuccess(const Extension* extension, + const ExtensionHostMsg_Request_Params& params) { + ExtensionActivityLog* extension_activity_log = + ExtensionActivityLog::GetInstance(); + if (extension_activity_log->HasObservers(extension)) { + std::string call_signature = params.name + "("; + ListValue::const_iterator it = params.arguments.begin(); + for (; it != params.arguments.end(); ++it) { + std::string arg; + JSONStringValueSerializer serializer(&arg); + if (serializer.SerializeAndOmitBinaryValues(**it)) { + if (it != params.arguments.begin()) + call_signature += ", "; + call_signature += arg; + } + } + call_signature += ")"; + + extension_activity_log->Log( + extension, + ExtensionActivityLog::ACTIVITY_EXTENSION_API_CALL, + call_signature); + } +} + +void LogFailure(const Extension* extension, + const std::string& func_name, + const char* reason) { + ExtensionActivityLog* extension_activity_log = + ExtensionActivityLog::GetInstance(); + if (extension_activity_log->HasObservers(extension)) { + extension_activity_log->Log( + extension, + ExtensionActivityLog::ACTIVITY_EXTENSION_API_BLOCK, + func_name + ": " + reason); + } +} + }; // namespace // ExtensionFunctionDispatcher ------------------------------------------------- @@ -558,8 +601,10 @@ void ExtensionFunctionDispatcher::DispatchOnIOThread( CreateExtensionFunction(params, extension, render_process_id, extension_info_map->process_map(), profile, ipc_sender, routing_id)); - if (!function) + if (!function) { + LogFailure(extension, params.name, kAccessDenied); return; + } IOThreadExtensionFunction* function_io = function->AsIOThreadExtensionFunction(); @@ -576,8 +621,10 @@ void ExtensionFunctionDispatcher::DispatchOnIOThread( if (quota->Assess(extension->id(), function, ¶ms.arguments, base::TimeTicks::Now())) { function->Run(); + LogSuccess(extension, params); } else { function->OnQuotaExceeded(); + LogFailure(extension, params.name, kQuotaExceeded); } } @@ -637,8 +684,10 @@ void ExtensionFunctionDispatcher::Dispatch( *(service->process_map()), profile(), render_view_host, render_view_host->routing_id())); - if (!function) + if (!function) { + LogFailure(extension, params.name, kAccessDenied); return; + } UIThreadExtensionFunction* function_ui = function->AsUIThreadExtensionFunction(); @@ -658,8 +707,10 @@ void ExtensionFunctionDispatcher::Dispatch( ExternalProtocolHandler::PermitLaunchUrl(); function->Run(); + LogSuccess(extension, params); } else { function->OnQuotaExceeded(); + LogFailure(extension, params.name, kQuotaExceeded); } } |