| Index: extensions/browser/event_listener_map.cc
|
| diff --git a/extensions/browser/event_listener_map.cc b/extensions/browser/event_listener_map.cc
|
| index bd2524c26b11a43413f9d90fa81d3e72e3dc8d1c..12dd5b4499da1f744e97585ba8f6ce54251d50d4 100644
|
| --- a/extensions/browser/event_listener_map.cc
|
| +++ b/extensions/browser/event_listener_map.cc
|
| @@ -14,6 +14,7 @@
|
| #include "extensions/browser/event_router.h"
|
| #include "ipc/ipc_message.h"
|
| #include "url/gurl.h"
|
| +#include "url/origin.h"
|
|
|
| using base::DictionaryValue;
|
|
|
| @@ -37,7 +38,12 @@ std::unique_ptr<EventListener> EventListener::ForURL(
|
| const GURL& listener_url,
|
| content::RenderProcessHost* process,
|
| std::unique_ptr<base::DictionaryValue> filter) {
|
| - return base::WrapUnique(new EventListener(event_name, "", listener_url,
|
| + // Use only the origin to identify the event listener, e.g. chrome://settings
|
| + // for chrome://settings/accounts, to avoid multiple events being triggered
|
| + // for the same process. See crbug.com/536858 for details. // TODO(devlin): If
|
| + // we dispatched events to processes more intelligently this could be avoided.
|
| + return base::WrapUnique(new EventListener(event_name, "",
|
| + url::Origin(listener_url).GetURL(),
|
| process, std::move(filter)));
|
| }
|
|
|
|
|