Index: chrome/renderer/extensions/api_activity_logger.cc |
diff --git a/chrome/renderer/extensions/api_activity_logger.cc b/chrome/renderer/extensions/api_activity_logger.cc |
index d9980aed1a5d1b6562859ae5b02bc6a0957c7d10..28a4367ff15f71d4732f49d8f6997e162e8ca8b3 100644 |
--- a/chrome/renderer/extensions/api_activity_logger.cc |
+++ b/chrome/renderer/extensions/api_activity_logger.cc |
@@ -19,6 +19,8 @@ APIActivityLogger::APIActivityLogger( |
: ChromeV8Extension(dispatcher, context) { |
RouteFunction("LogEvent", base::Bind(&APIActivityLogger::LogEvent)); |
RouteFunction("LogAPICall", base::Bind(&APIActivityLogger::LogAPICall)); |
+ RouteFunction("LogBlockedCall", |
+ base::Bind(&APIActivityLogger::LogBlockedCallWrapper)); |
} |
// static |
@@ -42,11 +44,11 @@ void APIActivityLogger::LogInternal( |
DCHECK(args[1]->IsString()); |
DCHECK(args[2]->IsArray()); |
- std::string ext_id = *v8::String::AsciiValue(args[0]->ToString()); |
+ std::string ext_id = *v8::String::AsciiValue(args[0]); |
ExtensionHostMsg_APIActionOrEvent_Params params; |
- params.api_call = *v8::String::AsciiValue(args[1]->ToString()); |
+ params.api_call = *v8::String::AsciiValue(args[1]); |
if (args.Length() == 4) // Extras are optional. |
- params.extra = *v8::String::AsciiValue(args[3]->ToString()); |
+ params.extra = *v8::String::AsciiValue(args[3]); |
else |
params.extra = ""; |
@@ -73,8 +75,30 @@ void APIActivityLogger::LogInternal( |
} |
// static |
+void APIActivityLogger::LogBlockedCallWrapper( |
+ const v8::FunctionCallbackInfo<v8::Value>& args) { |
+ DCHECK_EQ(args.Length(), 3); |
+ DCHECK(args[0]->IsString()); |
+ DCHECK(args[1]->IsString()); |
+ DCHECK(args[2]->IsNumber()); |
+ int result; |
+ scoped_ptr<V8ValueConverter> converter(V8ValueConverter::create()); |
+ converter->FromV8Value(args[2], |
+ v8::Context::GetCurrent())->GetAsInteger(&result); |
+ LogBlockedCall(*v8::String::AsciiValue(args[0]), |
+ *v8::String::AsciiValue(args[1]), |
+ static_cast<Feature::AvailabilityResult>(result)); |
+} |
+ |
+// static |
void APIActivityLogger::LogBlockedCall(const std::string& extension_id, |
- const std::string& function_name) { |
+ const std::string& function_name, |
+ Feature::AvailabilityResult result) { |
+ // We don't really want to bother logging if it isn't permission related. |
+ if (result == Feature::INVALID_MIN_MANIFEST_VERSION || |
+ result == Feature::INVALID_MAX_MANIFEST_VERSION || |
+ result == Feature::UNSUPPORTED_CHANNEL) |
+ return; |
content::RenderThread::Get()->Send( |
new ExtensionHostMsg_AddBlockedCallToActivityLog(extension_id, |
function_name)); |