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