| 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));
|
|
|