| Index: extensions/renderer/event_bindings.cc
 | 
| diff --git a/extensions/renderer/event_bindings.cc b/extensions/renderer/event_bindings.cc
 | 
| index 59cc404d8b7daa7499f336b9a86a0f5ee9058b12..7a5dee4d37519bed3120976e178c18147c22ec44 100644
 | 
| --- a/extensions/renderer/event_bindings.cc
 | 
| +++ b/extensions/renderer/event_bindings.cc
 | 
| @@ -249,10 +249,15 @@ void EventBindings::AttachEvent(const std::string& event_name) {
 | 
|  
 | 
|    const int worker_thread_id = content::WorkerThread::GetCurrentId();
 | 
|    const std::string& extension_id = context()->GetExtensionID();
 | 
| +  const bool is_service_worker_context =
 | 
| +      context()->context_type() == Feature::SERVICE_WORKER_CONTEXT;
 | 
|    IPC::Sender* sender = GetIPCSender();
 | 
|    if (IncrementEventListenerCount(context(), event_name) == 1) {
 | 
|      sender->Send(new ExtensionHostMsg_AddListener(
 | 
| -        extension_id, context()->url(), event_name, worker_thread_id));
 | 
| +        extension_id,
 | 
| +        is_service_worker_context ? context()->service_worker_scope()
 | 
| +                                  : context()->url(),
 | 
| +        event_name, worker_thread_id));
 | 
|    }
 | 
|  
 | 
|    // This is called the first time the page has added a listener. Since
 | 
| @@ -262,8 +267,13 @@ void EventBindings::AttachEvent(const std::string& event_name) {
 | 
|        ExtensionFrameHelper::IsContextForEventPage(context()) ||
 | 
|        context()->context_type() == Feature::SERVICE_WORKER_CONTEXT;
 | 
|    if (is_lazy_context) {
 | 
| -    sender->Send(new ExtensionHostMsg_AddLazyListener(extension_id, event_name,
 | 
| -                                                      worker_thread_id));
 | 
| +    if (is_service_worker_context) {
 | 
| +      sender->Send(new ExtensionHostMsg_AddLazyServiceWorkerListener(
 | 
| +          extension_id, event_name, context()->service_worker_scope()));
 | 
| +    } else {
 | 
| +      sender->Send(
 | 
| +          new ExtensionHostMsg_AddLazyListener(extension_id, event_name));
 | 
| +    }
 | 
|    }
 | 
|  }
 | 
|  
 | 
| @@ -280,12 +290,16 @@ void EventBindings::DetachEvent(const std::string& event_name, bool is_manual) {
 | 
|    attached_event_names_.erase(event_name);
 | 
|  
 | 
|    int worker_thread_id = content::WorkerThread::GetCurrentId();
 | 
| +  const bool is_service_worker_context = worker_thread_id != kNonWorkerThreadId;
 | 
|    IPC::Sender* sender = GetIPCSender();
 | 
|    const std::string& extension_id = context()->GetExtensionID();
 | 
|  
 | 
|    if (DecrementEventListenerCount(context(), event_name) == 0) {
 | 
|      sender->Send(new ExtensionHostMsg_RemoveListener(
 | 
| -        extension_id, context()->url(), event_name, worker_thread_id));
 | 
| +        extension_id,
 | 
| +        is_service_worker_context ? context()->service_worker_scope()
 | 
| +                                  : context()->url(),
 | 
| +        event_name, worker_thread_id));
 | 
|    }
 | 
|  
 | 
|    // DetachEvent is called when the last listener for the context is
 | 
| @@ -297,8 +311,13 @@ void EventBindings::DetachEvent(const std::string& event_name, bool is_manual) {
 | 
|          ExtensionFrameHelper::IsContextForEventPage(context()) ||
 | 
|          context()->context_type() == Feature::SERVICE_WORKER_CONTEXT;
 | 
|      if (is_lazy_context) {
 | 
| -      sender->Send(new ExtensionHostMsg_RemoveLazyListener(
 | 
| -          extension_id, event_name, worker_thread_id));
 | 
| +      if (is_service_worker_context) {
 | 
| +        sender->Send(new ExtensionHostMsg_RemoveLazyServiceWorkerListener(
 | 
| +            extension_id, event_name, context()->service_worker_scope()));
 | 
| +      } else {
 | 
| +        sender->Send(
 | 
| +            new ExtensionHostMsg_RemoveLazyListener(extension_id, event_name));
 | 
| +      }
 | 
|      }
 | 
|    }
 | 
|  }
 | 
| 
 |