| Index: chrome/renderer/extensions/event_bindings.cc
|
| diff --git a/chrome/renderer/extensions/event_bindings.cc b/chrome/renderer/extensions/event_bindings.cc
|
| index b44fe82b95d28cbe42a08959f0836df4240b052f..d771580080431abb7b48846899fb010a14d4d9b1 100644
|
| --- a/chrome/renderer/extensions/event_bindings.cc
|
| +++ b/chrome/renderer/extensions/event_bindings.cc
|
| @@ -76,10 +76,20 @@ class ExtensionImpl : public ExtensionBase {
|
|
|
| if (args[0]->IsString()) {
|
| std::string event_name(*v8::String::AsciiValue(args[0]));
|
| - if (EventIncrementListenerCount(event_name) == 1) {
|
| + bool has_permission =
|
| + ExtensionProcessBindings::CurrentContextHasPermission(event_name);
|
| +
|
| + // Increment the count even if the caller doesn't have permission, so that
|
| + // refcounts stay balanced.
|
| + if (EventIncrementListenerCount(event_name) == 1 && has_permission) {
|
| EventBindings::GetRenderThread()->Send(
|
| new ViewHostMsg_ExtensionAddListener(event_name));
|
| }
|
| +
|
| + if (!has_permission) {
|
| + return ExtensionProcessBindings::ThrowPermissionDeniedException(
|
| + event_name);
|
| + }
|
| }
|
|
|
| return v8::Undefined();
|
|
|