| Index: chrome/browser/extensions/extension_event_router.h
 | 
| diff --git a/chrome/browser/extensions/extension_event_router.h b/chrome/browser/extensions/extension_event_router.h
 | 
| index 2b52cc812bae9e6b4526fa6f8307338eb1525cf7..a08d816fdb14cdd8d90f90fa8476f5a93507bb90 100644
 | 
| --- a/chrome/browser/extensions/extension_event_router.h
 | 
| +++ b/chrome/browser/extensions/extension_event_router.h
 | 
| @@ -15,6 +15,7 @@
 | 
|  #include "base/memory/ref_counted.h"
 | 
|  #include "content/public/browser/notification_observer.h"
 | 
|  #include "content/public/browser/notification_registrar.h"
 | 
| +#include "chrome/common/extensions/feature.h"
 | 
|  #include "ipc/ipc_message.h"
 | 
|  
 | 
|  class GURL;
 | 
| @@ -23,6 +24,8 @@ class ExtensionHost;
 | 
|  class ExtensionDevToolsManager;
 | 
|  class Profile;
 | 
|  
 | 
| +using extensions::Feature;
 | 
| +
 | 
|  namespace content {
 | 
|  class RenderProcessHost;
 | 
|  }
 | 
| @@ -54,8 +57,9 @@ class ExtensionEventRouter : public content::NotificationObserver {
 | 
|    // collapsing. Also, a single extension can have 2 processes if it is a split
 | 
|    // mode extension.
 | 
|    void AddEventListener(const std::string& event_name,
 | 
| +                        const std::string& extension_id,
 | 
|                          content::RenderProcessHost* process,
 | 
| -                        const std::string& extension_id);
 | 
| +                        Feature::Context context);
 | 
|    void RemoveEventListener(const std::string& event_name,
 | 
|                             content::RenderProcessHost* process,
 | 
|                             const std::string& extension_id);
 | 
| @@ -65,6 +69,12 @@ class ExtensionEventRouter : public content::NotificationObserver {
 | 
|    // remembered even after the process goes away. We use this list to decide
 | 
|    // which extension pages to load when dispatching an event.
 | 
|    void AddLazyEventListener(const std::string& event_name,
 | 
| +                            const std::string& extension_id,
 | 
| +                            content::RenderProcessHost* process,
 | 
| +                            Feature::Context context);
 | 
| +  // Use this overload when subscribing extensions to events from C++, or when
 | 
| +  // access checking the calling process and context is not required.
 | 
| +  void AddLazyEventListener(const std::string& event_name,
 | 
|                              const std::string& extension_id);
 | 
|    void RemoveLazyEventListener(const std::string& event_name,
 | 
|                                 const std::string& extension_id);
 | 
| @@ -131,6 +141,12 @@ class ExtensionEventRouter : public content::NotificationObserver {
 | 
|    // event.
 | 
|    struct ListenerProcess;
 | 
|  
 | 
| +  // Helper that returns whether the event is accessible to the calling context.
 | 
| +  bool IsEventAvailable(const std::string& event_name,
 | 
| +                        const std::string& extension_id,
 | 
| +                        content::RenderProcessHost* render_process,
 | 
| +                        Feature::Context context_type) const;
 | 
| +
 | 
|    // A map between an event name and a set of extensions that are listening
 | 
|    // to that event.
 | 
|    typedef std::map<std::string, std::set<ListenerProcess> > ListenerMap;
 | 
| 
 |