| Index: extensions/browser/event_listener_map.h
|
| diff --git a/extensions/browser/event_listener_map.h b/extensions/browser/event_listener_map.h
|
| index cd694ac76baf86a8314bbe808a6a0f660506f5e9..ea25ea6b433561dbdd8d8e4954e6f9eb6368eb6a 100644
|
| --- a/extensions/browser/event_listener_map.h
|
| +++ b/extensions/browser/event_listener_map.h
|
| @@ -13,6 +13,7 @@
|
|
|
| #include "base/macros.h"
|
| #include "extensions/common/event_filter.h"
|
| +#include "extensions/common/extension_id.h"
|
| #include "url/gurl.h"
|
|
|
| namespace base {
|
| @@ -58,6 +59,16 @@ class EventListener {
|
| const GURL& listener_url,
|
| content::RenderProcessHost* process,
|
| std::unique_ptr<base::DictionaryValue> filter);
|
| + // Constructs EventListener for an Extension service worker.
|
| + // Similar to ForExtension above with the only difference that
|
| + // |worker_thread_id_| contains a valid worker thread, as opposed to
|
| + // kNonWorkerThreadId.
|
| + static std::unique_ptr<EventListener> ForExtensionServiceWorker(
|
| + const std::string& event_name,
|
| + const std::string& extension_id,
|
| + content::RenderProcessHost* process,
|
| + int worker_thread_id,
|
| + std::unique_ptr<base::DictionaryValue> filter);
|
|
|
| ~EventListener();
|
|
|
| @@ -65,9 +76,14 @@ class EventListener {
|
|
|
| std::unique_ptr<EventListener> Copy() const;
|
|
|
| - // Returns true in the case of a lazy background page, and thus no process.
|
| + // Returns true if the listener is for a lazy context: e.g. a background page
|
| + // or an extension service worker. This listener does not have |process_|.
|
| bool IsLazy() const;
|
|
|
| + // Returns true if this listener was registered for an extension service
|
| + // worker.
|
| + bool IsForServiceWorker() const;
|
| +
|
| // Modifies this listener to be a lazy listener, clearing process references.
|
| void MakeLazy();
|
|
|
| @@ -82,18 +98,21 @@ class EventListener {
|
| base::DictionaryValue* filter() const { return filter_.get(); }
|
| EventFilter::MatcherID matcher_id() const { return matcher_id_; }
|
| void set_matcher_id(EventFilter::MatcherID id) { matcher_id_ = id; }
|
| + int worker_thread_id() const { return worker_thread_id_; }
|
|
|
| private:
|
| EventListener(const std::string& event_name,
|
| const std::string& extension_id,
|
| const GURL& listener_url,
|
| content::RenderProcessHost* process,
|
| + int worker_thread_id,
|
| std::unique_ptr<base::DictionaryValue> filter);
|
|
|
| const std::string event_name_;
|
| const std::string extension_id_;
|
| const GURL listener_url_;
|
| content::RenderProcessHost* process_;
|
| + const int worker_thread_id_;
|
| std::unique_ptr<base::DictionaryValue> filter_;
|
| EventFilter::MatcherID matcher_id_; // -1 if unset.
|
|
|
| @@ -150,7 +169,10 @@ class EventListenerMap {
|
| bool HasListener(const EventListener* listener) const;
|
|
|
| // Returns true if there is a listener for |extension_id| in |process|.
|
| + // |worker_thread_id| is the thread id of the service worker the listener is
|
| + // for, or kNonWorkerThreadId if the listener is not for a service worker.
|
| bool HasProcessListener(content::RenderProcessHost* process,
|
| + int worker_thread_id,
|
| const std::string& extension_id) const;
|
|
|
| // Removes any listeners that |extension_id| has added, both lazy and regular.
|
|
|