Tracking bug for dispatching events to extension service workers. Similar to lazy background events. We need to be able to send events to a stopped worker after starting it.
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/ac968918d5b2b6baf9fe987cb0094aa9a73177c0 commit ac968918d5b2b6baf9fe987cb0094aa9a73177c0 Author: lazyboy <lazyboy@chromium.org> Date: Tue May 16 17:50:09 2017 Restrict EventRouter::Get/Set-RegisteredEvents. The code is going to be changed in a subsequent CL to allow extension service worker events, it's better if we restrict GetRegisteredEvents and SetRegisteredEvents as we don't really need them outside of EventRouter. Expose simpler HasRegisteredEvents and test specific ClearRegisteredEventsForTest instead. BUG=721147 Test=No visible change expected. Review-Url: https://codereview.chromium.org/2879673002 Cr-Commit-Position: refs/heads/master@{#472151} [modify] https://crrev.com/ac968918d5b2b6baf9fe987cb0094aa9a73177c0/chrome/browser/apps/app_browsertest.cc [modify] https://crrev.com/ac968918d5b2b6baf9fe987cb0094aa9a73177c0/chrome/browser/extensions/installed_loader.cc [modify] https://crrev.com/ac968918d5b2b6baf9fe987cb0094aa9a73177c0/extensions/browser/event_router.cc [modify] https://crrev.com/ac968918d5b2b6baf9fe987cb0094aa9a73177c0/extensions/browser/event_router.h
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/e784724ab7bdebd696a585003d28c835352ddc75 commit e784724ab7bdebd696a585003d28c835352ddc75 Author: lazyboy <lazyboy@chromium.org> Date: Wed Jun 07 23:29:18 2017 [extension SW]: Support event listener registration and event dispatching. Initial implementation, will only send events to an already running extension Service Worker. Subsequent CLs will add dispatching events to potentially stopped workers. Ref count while dispatching an event is missing in the CL, so is ExtensionHostMsg_EventAck IPC. Event filters are completely left out in this CL. Currently EventListeners have an added field called "worker_thread_id", its value being 0 (kNonWorkerThreadId) means these are not SW event listeners. Otherwise similar to lazy and non-lazy events, we will have SW events with worker_thread_id filled in. EventRouter's event registration methods are a bit verbose, e.g. existing methods: Add/RemoveListener Add/RemoveLazyListener [1] have their service worker counterpart versions: Add/RemoveServiceWorkerListener Add/RemoveServiceWorkerLazyListener [2] The difference of these [2] with the previous ones [1] are just an added |worker_thread_id| param. Exposing only these and removing the previous ones would also work, but that would require non service worker events/listeners to explicitly specify kNonWorkerThreadId as the value of |worker_thread_id| param. Since the consumers are not just within extensions core code, it's better to leave the change out in this CL. Test fixture: 1. Open an extension SW that registers tabs.onUpdated listener. 2. Do something (page.js) to dispatch tabs.onUpdated event(s). 3. Expect extension SW to receive the event(s). Note that there's no guarantee that the service worker is running during step 2 and onwards. In worst case, the might become flaky, but it should be highly unlikely. BUG=721147 Review-Url: https://codereview.chromium.org/2886923002 Cr-Commit-Position: refs/heads/master@{#477787} [modify] https://crrev.com/e784724ab7bdebd696a585003d28c835352ddc75/chrome/browser/extensions/service_worker_apitest.cc [modify] https://crrev.com/e784724ab7bdebd696a585003d28c835352ddc75/chrome/common/extensions/api/_api_features.json [add] https://crrev.com/e784724ab7bdebd696a585003d28c835352ddc75/chrome/test/data/extensions/api_test/service_worker/events/manifest.json [add] https://crrev.com/e784724ab7bdebd696a585003d28c835352ddc75/chrome/test/data/extensions/api_test/service_worker/events/on_updated.html [add] https://crrev.com/e784724ab7bdebd696a585003d28c835352ddc75/chrome/test/data/extensions/api_test/service_worker/events/on_updated.js [add] https://crrev.com/e784724ab7bdebd696a585003d28c835352ddc75/chrome/test/data/extensions/api_test/service_worker/events/page.html [add] https://crrev.com/e784724ab7bdebd696a585003d28c835352ddc75/chrome/test/data/extensions/api_test/service_worker/events/page.js [add] https://crrev.com/e784724ab7bdebd696a585003d28c835352ddc75/chrome/test/data/extensions/api_test/service_worker/events/sw.js [modify] https://crrev.com/e784724ab7bdebd696a585003d28c835352ddc75/extensions/browser/event_listener_map.cc [modify] https://crrev.com/e784724ab7bdebd696a585003d28c835352ddc75/extensions/browser/event_listener_map.h [modify] https://crrev.com/e784724ab7bdebd696a585003d28c835352ddc75/extensions/browser/event_router.cc [modify] https://crrev.com/e784724ab7bdebd696a585003d28c835352ddc75/extensions/browser/event_router.h [modify] https://crrev.com/e784724ab7bdebd696a585003d28c835352ddc75/extensions/browser/extension_message_filter.cc [modify] https://crrev.com/e784724ab7bdebd696a585003d28c835352ddc75/extensions/browser/extension_message_filter.h [modify] https://crrev.com/e784724ab7bdebd696a585003d28c835352ddc75/extensions/browser/extension_prefs.cc [modify] https://crrev.com/e784724ab7bdebd696a585003d28c835352ddc75/extensions/common/constants.cc [modify] https://crrev.com/e784724ab7bdebd696a585003d28c835352ddc75/extensions/common/constants.h [modify] https://crrev.com/e784724ab7bdebd696a585003d28c835352ddc75/extensions/common/extension_messages.h [modify] https://crrev.com/e784724ab7bdebd696a585003d28c835352ddc75/extensions/renderer/dispatcher.cc [modify] https://crrev.com/e784724ab7bdebd696a585003d28c835352ddc75/extensions/renderer/event_bindings.cc [modify] https://crrev.com/e784724ab7bdebd696a585003d28c835352ddc75/extensions/renderer/event_bindings.h [modify] https://crrev.com/e784724ab7bdebd696a585003d28c835352ddc75/extensions/renderer/service_worker_data.cc [modify] https://crrev.com/e784724ab7bdebd696a585003d28c835352ddc75/extensions/renderer/service_worker_data.h [modify] https://crrev.com/e784724ab7bdebd696a585003d28c835352ddc75/extensions/renderer/worker_thread_dispatcher.cc [modify] https://crrev.com/e784724ab7bdebd696a585003d28c835352ddc75/extensions/renderer/worker_thread_dispatcher.h
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/e464732fb0179fa3514239419c804547a0f56b8d commit e464732fb0179fa3514239419c804547a0f56b8d Author: lazyboy <lazyboy@chromium.org> Date: Thu Jun 15 21:17:27 2017 Move lazy event dispatching code out of EventRouter. Separate out lazy background page logic from EventRouter to LazyEventDispatcher. This will facilitate introducing service worker (another "lazy context") lazy events to extensions. Also introduce LazyContextId to identify a lazy context. This is currently used only for identifying event page context, but in future will also identify extension service worker context. BUG=721147, 723754 Review-Url: https://codereview.chromium.org/2940883007 Cr-Commit-Position: refs/heads/master@{#479833} [modify] https://crrev.com/e464732fb0179fa3514239419c804547a0f56b8d/extensions/browser/BUILD.gn [modify] https://crrev.com/e464732fb0179fa3514239419c804547a0f56b8d/extensions/browser/event_router.cc [modify] https://crrev.com/e464732fb0179fa3514239419c804547a0f56b8d/extensions/browser/event_router.h [add] https://crrev.com/e464732fb0179fa3514239419c804547a0f56b8d/extensions/browser/events/lazy_event_dispatcher.cc [add] https://crrev.com/e464732fb0179fa3514239419c804547a0f56b8d/extensions/browser/events/lazy_event_dispatcher.h [add] https://crrev.com/e464732fb0179fa3514239419c804547a0f56b8d/extensions/browser/lazy_context_id.cc [add] https://crrev.com/e464732fb0179fa3514239419c804547a0f56b8d/extensions/browser/lazy_context_id.h
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/63b994a1d1026a4b992c74e10e1e7c826bb5f9ae commit 63b994a1d1026a4b992c74e10e1e7c826bb5f9ae Author: lazyboy <lazyboy@chromium.org> Date: Fri Jun 30 21:20:39 2017 [extension SW] Support lazy events from extension service workers. This CL adds support to register and dispatch lazy events from/to extension SW (a) To register, we use SW's (unique) scope url to identify a SW within an extension. Pass the information about scope url through ServiceWorkerContextClient. Initially EventListener::worker_thread_id_ was used to identify whether an event is for SW context or not. However, that is not enough for lazy service worker events, because we need to persist lazy events in the browser process and worker_thread_id_ is temporary for a running SW. Change SW EventListener by adding EventListener::is_for_service_worker() to support this. (b) To dispatch, we need to start a worker before dispatching the event. The content/ API: ServiceWorkerContext::GetWorkerInfoAfterStartWorker() was added to do that. Add ServiceWorkerTaskQueue (similar to LazyBackgroundTaskQueue for lazy background pages) to dispatch the event (a task) in extensions/ layer. IPC changes: In order to identify a (possibly stopped) SW, IPCs for lazy service worker events were changed to accept service worker scope urls. In order to not convolute existing lazy background page IPCs (ExtensionHostMsg_Add/RemoveLazyListener), new ones have been introduced: ExtensionHostMsg_Add/RemoveLazyServiceWorkerListener. Other notable changes: - LazyContextTaskQueue is introduced to express a lazy runnable context. Make the new ServiceWorkerTaskQueue and existing LazyBackgroundTaskQueue derived from that. One can post [1] PendingTasks to these contexts. Unfortunately becuase of many existing usages of LazyBackgroundTaskQueue::AddPendingTask, [1] was named AddPendingTaskToDispatchEvent to avoid collision. - LazyContextTaskQueue provides a contexual information expressed as LazyContextTaskQueue::ContextInfo. This was introduced to avoid ExtensionHost from LazyContextTaskQueue (See LazyBackgroundTaskQueue::AddPendingTask) BUG=721147 Test=After an extension service worker stops, it should still be possible to dispatch extension events to it. That will wake up the service worker. Review-Url: https://codereview.chromium.org/2943583002 Cr-Commit-Position: refs/heads/master@{#483820} [modify] https://crrev.com/63b994a1d1026a4b992c74e10e1e7c826bb5f9ae/chrome/browser/extensions/service_worker_apitest.cc [modify] https://crrev.com/63b994a1d1026a4b992c74e10e1e7c826bb5f9ae/chrome/renderer/chrome_content_renderer_client.cc [modify] https://crrev.com/63b994a1d1026a4b992c74e10e1e7c826bb5f9ae/chrome/renderer/chrome_content_renderer_client.h [add] https://crrev.com/63b994a1d1026a4b992c74e10e1e7c826bb5f9ae/chrome/test/data/extensions/api_test/service_worker/events_to_stopped_worker/manifest.json [add] https://crrev.com/63b994a1d1026a4b992c74e10e1e7c826bb5f9ae/chrome/test/data/extensions/api_test/service_worker/events_to_stopped_worker/on_updated.html [add] https://crrev.com/63b994a1d1026a4b992c74e10e1e7c826bb5f9ae/chrome/test/data/extensions/api_test/service_worker/events_to_stopped_worker/on_updated.js [add] https://crrev.com/63b994a1d1026a4b992c74e10e1e7c826bb5f9ae/chrome/test/data/extensions/api_test/service_worker/events_to_stopped_worker/page.html [add] https://crrev.com/63b994a1d1026a4b992c74e10e1e7c826bb5f9ae/chrome/test/data/extensions/api_test/service_worker/events_to_stopped_worker/page.js [add] https://crrev.com/63b994a1d1026a4b992c74e10e1e7c826bb5f9ae/chrome/test/data/extensions/api_test/service_worker/events_to_stopped_worker/sw.js [modify] https://crrev.com/63b994a1d1026a4b992c74e10e1e7c826bb5f9ae/content/browser/service_worker/service_worker_context_wrapper.cc [modify] https://crrev.com/63b994a1d1026a4b992c74e10e1e7c826bb5f9ae/content/browser/service_worker/service_worker_context_wrapper.h [modify] https://crrev.com/63b994a1d1026a4b992c74e10e1e7c826bb5f9ae/content/public/browser/service_worker_context.h [modify] https://crrev.com/63b994a1d1026a4b992c74e10e1e7c826bb5f9ae/content/public/renderer/content_renderer_client.h [add] https://crrev.com/63b994a1d1026a4b992c74e10e1e7c826bb5f9ae/content/public/test/service_worker_test_helpers.cc [add] https://crrev.com/63b994a1d1026a4b992c74e10e1e7c826bb5f9ae/content/public/test/service_worker_test_helpers.h [modify] https://crrev.com/63b994a1d1026a4b992c74e10e1e7c826bb5f9ae/content/renderer/service_worker/service_worker_context_client.cc [modify] https://crrev.com/63b994a1d1026a4b992c74e10e1e7c826bb5f9ae/content/test/BUILD.gn [modify] https://crrev.com/63b994a1d1026a4b992c74e10e1e7c826bb5f9ae/extensions/browser/BUILD.gn [modify] https://crrev.com/63b994a1d1026a4b992c74e10e1e7c826bb5f9ae/extensions/browser/event_listener_map.cc [modify] https://crrev.com/63b994a1d1026a4b992c74e10e1e7c826bb5f9ae/extensions/browser/event_listener_map.h [modify] https://crrev.com/63b994a1d1026a4b992c74e10e1e7c826bb5f9ae/extensions/browser/event_router.cc [modify] https://crrev.com/63b994a1d1026a4b992c74e10e1e7c826bb5f9ae/extensions/browser/event_router.h [modify] https://crrev.com/63b994a1d1026a4b992c74e10e1e7c826bb5f9ae/extensions/browser/events/lazy_event_dispatcher.cc [modify] https://crrev.com/63b994a1d1026a4b992c74e10e1e7c826bb5f9ae/extensions/browser/events/lazy_event_dispatcher.h [modify] https://crrev.com/63b994a1d1026a4b992c74e10e1e7c826bb5f9ae/extensions/browser/extension_message_filter.cc [modify] https://crrev.com/63b994a1d1026a4b992c74e10e1e7c826bb5f9ae/extensions/browser/extension_message_filter.h [modify] https://crrev.com/63b994a1d1026a4b992c74e10e1e7c826bb5f9ae/extensions/browser/lazy_background_task_queue.cc [modify] https://crrev.com/63b994a1d1026a4b992c74e10e1e7c826bb5f9ae/extensions/browser/lazy_background_task_queue.h [modify] https://crrev.com/63b994a1d1026a4b992c74e10e1e7c826bb5f9ae/extensions/browser/lazy_context_id.cc [modify] https://crrev.com/63b994a1d1026a4b992c74e10e1e7c826bb5f9ae/extensions/browser/lazy_context_id.h [add] https://crrev.com/63b994a1d1026a4b992c74e10e1e7c826bb5f9ae/extensions/browser/lazy_context_task_queue.h [add] https://crrev.com/63b994a1d1026a4b992c74e10e1e7c826bb5f9ae/extensions/browser/service_worker_task_queue.cc [add] https://crrev.com/63b994a1d1026a4b992c74e10e1e7c826bb5f9ae/extensions/browser/service_worker_task_queue.h [add] https://crrev.com/63b994a1d1026a4b992c74e10e1e7c826bb5f9ae/extensions/browser/service_worker_task_queue_factory.cc [add] https://crrev.com/63b994a1d1026a4b992c74e10e1e7c826bb5f9ae/extensions/browser/service_worker_task_queue_factory.h [modify] https://crrev.com/63b994a1d1026a4b992c74e10e1e7c826bb5f9ae/extensions/common/extension_messages.h [modify] https://crrev.com/63b994a1d1026a4b992c74e10e1e7c826bb5f9ae/extensions/renderer/dispatcher.cc [modify] https://crrev.com/63b994a1d1026a4b992c74e10e1e7c826bb5f9ae/extensions/renderer/dispatcher.h [modify] https://crrev.com/63b994a1d1026a4b992c74e10e1e7c826bb5f9ae/extensions/renderer/event_bindings.cc [modify] https://crrev.com/63b994a1d1026a4b992c74e10e1e7c826bb5f9ae/extensions/renderer/script_context.cc [modify] https://crrev.com/63b994a1d1026a4b992c74e10e1e7c826bb5f9ae/extensions/renderer/script_context.h
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/461c4edd7bf5061ac254a1ccf781f7dcfbd222cd commit 461c4edd7bf5061ac254a1ccf781f7dcfbd222cd Author: Istiaque Ahmed <lazyboy@chromium.org> Date: Thu Sep 14 17:23:45 2017 Extensions: Consolidate two ids representing main thread id. Consolidate e/c/contants.h:kNonWorkerThreadId and kMainThreadId in e/r/ipc_message_sender.cc:kMainThreadId to kMainThreadId. Update codes in necessary files. Bug: 721147 Change-Id: I120ba59652d9e6ec7530f0217dcb9041bda89c4c Reviewed-on: https://chromium-review.googlesource.com/666065 Reviewed-by: Devlin <rdevlin.cronin@chromium.org> Commit-Queue: Istiaque Ahmed <lazyboy@chromium.org> Cr-Commit-Position: refs/heads/master@{#501979} [modify] https://crrev.com/461c4edd7bf5061ac254a1ccf781f7dcfbd222cd/extensions/browser/event_listener_map.cc [modify] https://crrev.com/461c4edd7bf5061ac254a1ccf781f7dcfbd222cd/extensions/browser/event_listener_map.h [modify] https://crrev.com/461c4edd7bf5061ac254a1ccf781f7dcfbd222cd/extensions/browser/event_router.cc [modify] https://crrev.com/461c4edd7bf5061ac254a1ccf781f7dcfbd222cd/extensions/browser/extension_message_filter.cc [modify] https://crrev.com/461c4edd7bf5061ac254a1ccf781f7dcfbd222cd/extensions/browser/lazy_background_task_queue.cc [modify] https://crrev.com/461c4edd7bf5061ac254a1ccf781f7dcfbd222cd/extensions/common/constants.cc [modify] https://crrev.com/461c4edd7bf5061ac254a1ccf781f7dcfbd222cd/extensions/common/constants.h [modify] https://crrev.com/461c4edd7bf5061ac254a1ccf781f7dcfbd222cd/extensions/renderer/ipc_message_sender.cc [modify] https://crrev.com/461c4edd7bf5061ac254a1ccf781f7dcfbd222cd/extensions/renderer/worker_thread_dispatcher.cc
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/b9af5f804cf5ddcd8bf0ab16241884e95fa1cfad commit b9af5f804cf5ddcd8bf0ab16241884e95fa1cfad Author: Istiaque Ahmed <lazyboy@chromium.org> Date: Wed Sep 20 18:19:45 2017 Extensions: Separate main/worker thread's event management containers in renderer/. Renderers have 4 containers containing the knowledge of its event listeners. These contain: managed and unmanaged event listeners and event filtering info. Currently worker threads incorrectly use the same globals that is used in main thread. This CL extracts these containers into its own class: EventBookkeeper, and creates instances of those class correctly for main thread and worker threads: - The main thread instance is kept in a lazy global instance. - The worker thread instances are kept in per worker data inside WorkerThreadDispatcher. The lazy construction nature of these containers are not preserved and they are always stack allocated. Unmanaged event listeners map is also no longer leaky. Bug: 721147 Change-Id: I457cba814e8e89dadbdc03b1e48c763c623e3165 Reviewed-on: https://chromium-review.googlesource.com/665597 Commit-Queue: Istiaque Ahmed <lazyboy@chromium.org> Reviewed-by: Devlin <rdevlin.cronin@chromium.org> Cr-Commit-Position: refs/heads/master@{#503201} [modify] https://crrev.com/b9af5f804cf5ddcd8bf0ab16241884e95fa1cfad/extensions/renderer/BUILD.gn [modify] https://crrev.com/b9af5f804cf5ddcd8bf0ab16241884e95fa1cfad/extensions/renderer/event_bindings.cc [modify] https://crrev.com/b9af5f804cf5ddcd8bf0ab16241884e95fa1cfad/extensions/renderer/event_bindings.h [add] https://crrev.com/b9af5f804cf5ddcd8bf0ab16241884e95fa1cfad/extensions/renderer/event_bookkeeper.cc [add] https://crrev.com/b9af5f804cf5ddcd8bf0ab16241884e95fa1cfad/extensions/renderer/event_bookkeeper.h [modify] https://crrev.com/b9af5f804cf5ddcd8bf0ab16241884e95fa1cfad/extensions/renderer/js_extension_bindings_system.cc [modify] https://crrev.com/b9af5f804cf5ddcd8bf0ab16241884e95fa1cfad/extensions/renderer/worker_thread_dispatcher.h
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/350845d8066a1db78ba9f0c22b804f4360eb5e9a commit 350845d8066a1db78ba9f0c22b804f4360eb5e9a Author: Istiaque Ahmed <lazyboy@chromium.org> Date: Thu Sep 21 00:41:55 2017 Extension SW: Add filtered event listener support. The primary change is to send worker information to EventRouter::Add/RemoveFilteredEventListener. EventRouter creates worker specific event listeners when worker information is present (identified by a base::Optional param). The other changes are: - Added the ability to call MakeLazy() on service worker specific event listeners. - Since routing id matching is not done deliberately on service worker filtered events, added routing id retrieving function GetRoutingIDForFilteredEvents() to ScriptContext. An end-to-end browsertest with webNavigation API to exercise event filters was also added. IPC changes: This CL adds an optional param to Add/RemoveFilteredListener. The presence of this param denotes that the listener being added/removed belongs to an extension service worker. And the value of the param (ExtensionHostMsg_ServiceWorkerIdentifier) contains the identifying bits of a service worker. The absence of this param indicates that the message is for vanilla (non service worker) extension event listeners. Bug: 721147 Change-Id: I2ff3c26db54ae1e1fd7d10b8afcb277d382e83c2 Reviewed-on: https://chromium-review.googlesource.com/666222 Commit-Queue: Istiaque Ahmed <lazyboy@chromium.org> Reviewed-by: Tom Sepez <tsepez@chromium.org> Reviewed-by: Devlin <rdevlin.cronin@chromium.org> Cr-Commit-Position: refs/heads/master@{#503298} [modify] https://crrev.com/350845d8066a1db78ba9f0c22b804f4360eb5e9a/chrome/browser/extensions/api/mdns/mdns_api_unittest.cc [modify] https://crrev.com/350845d8066a1db78ba9f0c22b804f4360eb5e9a/chrome/browser/extensions/service_worker_apitest.cc [modify] https://crrev.com/350845d8066a1db78ba9f0c22b804f4360eb5e9a/chrome/common/extensions/api/_api_features.json [add] https://crrev.com/350845d8066a1db78ba9f0c22b804f4360eb5e9a/chrome/test/data/extensions/api_test/service_worker/filtered_events/a.html [add] https://crrev.com/350845d8066a1db78ba9f0c22b804f4360eb5e9a/chrome/test/data/extensions/api_test/service_worker/filtered_events/a.js [add] https://crrev.com/350845d8066a1db78ba9f0c22b804f4360eb5e9a/chrome/test/data/extensions/api_test/service_worker/filtered_events/b.html [add] https://crrev.com/350845d8066a1db78ba9f0c22b804f4360eb5e9a/chrome/test/data/extensions/api_test/service_worker/filtered_events/manifest.json [add] https://crrev.com/350845d8066a1db78ba9f0c22b804f4360eb5e9a/chrome/test/data/extensions/api_test/service_worker/filtered_events/sw.js [add] https://crrev.com/350845d8066a1db78ba9f0c22b804f4360eb5e9a/chrome/test/data/extensions/api_test/service_worker/filtered_events/test_filtered.js [modify] https://crrev.com/350845d8066a1db78ba9f0c22b804f4360eb5e9a/extensions/browser/event_listener_map.cc [modify] https://crrev.com/350845d8066a1db78ba9f0c22b804f4360eb5e9a/extensions/browser/event_listener_map.h [modify] https://crrev.com/350845d8066a1db78ba9f0c22b804f4360eb5e9a/extensions/browser/event_router.cc [modify] https://crrev.com/350845d8066a1db78ba9f0c22b804f4360eb5e9a/extensions/browser/event_router.h [modify] https://crrev.com/350845d8066a1db78ba9f0c22b804f4360eb5e9a/extensions/browser/event_router_unittest.cc [modify] https://crrev.com/350845d8066a1db78ba9f0c22b804f4360eb5e9a/extensions/browser/extension_message_filter.cc [modify] https://crrev.com/350845d8066a1db78ba9f0c22b804f4360eb5e9a/extensions/browser/extension_message_filter.h [modify] https://crrev.com/350845d8066a1db78ba9f0c22b804f4360eb5e9a/extensions/common/constants.cc [modify] https://crrev.com/350845d8066a1db78ba9f0c22b804f4360eb5e9a/extensions/common/constants.h [modify] https://crrev.com/350845d8066a1db78ba9f0c22b804f4360eb5e9a/extensions/common/extension_messages.h [modify] https://crrev.com/350845d8066a1db78ba9f0c22b804f4360eb5e9a/extensions/renderer/event_bindings.cc [modify] https://crrev.com/350845d8066a1db78ba9f0c22b804f4360eb5e9a/extensions/renderer/ipc_message_sender.cc
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/e34bc3ba4a14b65c94f4b0ae103473934e32cfdb commit e34bc3ba4a14b65c94f4b0ae103473934e32cfdb Author: Istiaque Ahmed <lazyboy@chromium.org> Date: Thu Sep 21 01:29:16 2017 Revert "Extension SW: Add filtered event listener support." This reverts commit 350845d8066a1db78ba9f0c22b804f4360eb5e9a. Reason for revert: Breaks win x64 compile https://build.chromium.org/p/chromium/builders/Win%20x64/builds/14951 Original change's description: > Extension SW: Add filtered event listener support. > > The primary change is to send worker information to > EventRouter::Add/RemoveFilteredEventListener. EventRouter creates > worker specific event listeners when worker information is present > (identified by a base::Optional param). > > The other changes are: > - Added the ability to call MakeLazy() on service worker specific > event listeners. > - Since routing id matching is not done deliberately on service > worker filtered events, added routing id retrieving function > GetRoutingIDForFilteredEvents() to ScriptContext. > > An end-to-end browsertest with webNavigation API to exercise event > filters was also added. > > IPC changes: > This CL adds an optional param to Add/RemoveFilteredListener. The > presence of this param denotes that the listener being added/removed > belongs to an extension service worker. And the value of the param > (ExtensionHostMsg_ServiceWorkerIdentifier) contains the identifying > bits of a service worker. The absence of this param indicates that > the message is for vanilla (non service worker) extension event > listeners. > > Bug: 721147 > Change-Id: I2ff3c26db54ae1e1fd7d10b8afcb277d382e83c2 > Reviewed-on: https://chromium-review.googlesource.com/666222 > Commit-Queue: Istiaque Ahmed <lazyboy@chromium.org> > Reviewed-by: Tom Sepez <tsepez@chromium.org> > Reviewed-by: Devlin <rdevlin.cronin@chromium.org> > Cr-Commit-Position: refs/heads/master@{#503298} TBR=lazyboy@chromium.org,rdevlin.cronin@chromium.org,tsepez@chromium.org Change-Id: I28722b2e1529c0d45fd0a24fce43c161eb8ccafd No-Presubmit: true No-Tree-Checks: true No-Try: true Bug: 721147 Reviewed-on: https://chromium-review.googlesource.com/675775 Reviewed-by: Istiaque Ahmed <lazyboy@chromium.org> Commit-Queue: Istiaque Ahmed <lazyboy@chromium.org> Cr-Commit-Position: refs/heads/master@{#503308} [modify] https://crrev.com/e34bc3ba4a14b65c94f4b0ae103473934e32cfdb/chrome/browser/extensions/api/mdns/mdns_api_unittest.cc [modify] https://crrev.com/e34bc3ba4a14b65c94f4b0ae103473934e32cfdb/chrome/browser/extensions/service_worker_apitest.cc [modify] https://crrev.com/e34bc3ba4a14b65c94f4b0ae103473934e32cfdb/chrome/common/extensions/api/_api_features.json [delete] https://crrev.com/24e50c3f818e0cb1a05877e88a78a8cccd85763a/chrome/test/data/extensions/api_test/service_worker/filtered_events/a.html [delete] https://crrev.com/24e50c3f818e0cb1a05877e88a78a8cccd85763a/chrome/test/data/extensions/api_test/service_worker/filtered_events/a.js [delete] https://crrev.com/24e50c3f818e0cb1a05877e88a78a8cccd85763a/chrome/test/data/extensions/api_test/service_worker/filtered_events/b.html [delete] https://crrev.com/24e50c3f818e0cb1a05877e88a78a8cccd85763a/chrome/test/data/extensions/api_test/service_worker/filtered_events/manifest.json [delete] https://crrev.com/24e50c3f818e0cb1a05877e88a78a8cccd85763a/chrome/test/data/extensions/api_test/service_worker/filtered_events/sw.js [delete] https://crrev.com/24e50c3f818e0cb1a05877e88a78a8cccd85763a/chrome/test/data/extensions/api_test/service_worker/filtered_events/test_filtered.js [modify] https://crrev.com/e34bc3ba4a14b65c94f4b0ae103473934e32cfdb/extensions/browser/event_listener_map.cc [modify] https://crrev.com/e34bc3ba4a14b65c94f4b0ae103473934e32cfdb/extensions/browser/event_listener_map.h [modify] https://crrev.com/e34bc3ba4a14b65c94f4b0ae103473934e32cfdb/extensions/browser/event_router.cc [modify] https://crrev.com/e34bc3ba4a14b65c94f4b0ae103473934e32cfdb/extensions/browser/event_router.h [modify] https://crrev.com/e34bc3ba4a14b65c94f4b0ae103473934e32cfdb/extensions/browser/event_router_unittest.cc [modify] https://crrev.com/e34bc3ba4a14b65c94f4b0ae103473934e32cfdb/extensions/browser/extension_message_filter.cc [modify] https://crrev.com/e34bc3ba4a14b65c94f4b0ae103473934e32cfdb/extensions/browser/extension_message_filter.h [modify] https://crrev.com/e34bc3ba4a14b65c94f4b0ae103473934e32cfdb/extensions/common/constants.cc [modify] https://crrev.com/e34bc3ba4a14b65c94f4b0ae103473934e32cfdb/extensions/common/constants.h [modify] https://crrev.com/e34bc3ba4a14b65c94f4b0ae103473934e32cfdb/extensions/common/extension_messages.h [modify] https://crrev.com/e34bc3ba4a14b65c94f4b0ae103473934e32cfdb/extensions/renderer/event_bindings.cc [modify] https://crrev.com/e34bc3ba4a14b65c94f4b0ae103473934e32cfdb/extensions/renderer/ipc_message_sender.cc
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/9d1666182cc27a6a3899f62621951c331645d692 commit 9d1666182cc27a6a3899f62621951c331645d692 Author: Istiaque Ahmed <lazyboy@chromium.org> Date: Thu Sep 21 23:58:18 2017 Reland "Extension SW: Add filtered event listener support." This is a reland of 350845d8066a1db78ba9f0c22b804f4360eb5e9a The fix is in Patch set #1 -> #2, by removing dependency on ipc/ipc_message.h from e/c/constants.cc. The include fails on "win_x64_archive" bot but doesn't reproduce on local win 64 build. Since we're using MSG_ROUTING_NONE from ipc_messages.h in event_bindings.cc anyway, move the usage there. Original change's description: > Extension SW: Add filtered event listener support. > > The primary change is to send worker information to > EventRouter::Add/RemoveFilteredEventListener. EventRouter creates > worker specific event listeners when worker information is present > (identified by a base::Optional param). > > The other changes are: > - Added the ability to call MakeLazy() on service worker specific > event listeners. > - Since routing id matching is not done deliberately on service > worker filtered events, added routing id retrieving function > GetRoutingIDForFilteredEvents() to ScriptContext. > > An end-to-end browsertest with webNavigation API to exercise event > filters was also added. > > IPC changes: > This CL adds an optional param to Add/RemoveFilteredListener. The > presence of this param denotes that the listener being added/removed > belongs to an extension service worker. And the value of the param > (ExtensionHostMsg_ServiceWorkerIdentifier) contains the identifying > bits of a service worker. The absence of this param indicates that > the message is for vanilla (non service worker) extension event > listeners. > > Bug: 721147 > Change-Id: I2ff3c26db54ae1e1fd7d10b8afcb277d382e83c2 > Reviewed-on: https://chromium-review.googlesource.com/666222 > Commit-Queue: Istiaque Ahmed <lazyboy@chromium.org> > Reviewed-by: Tom Sepez <tsepez@chromium.org> > Reviewed-by: Devlin <rdevlin.cronin@chromium.org> > Cr-Commit-Position: refs/heads/master@{#503298} TBR=tsepez@chromium.org Bug: 721147 Change-Id: I53e0ef921eaf3fe318fa3f01c2bdf5dfe2d32994 Reviewed-on: https://chromium-review.googlesource.com/677587 Commit-Queue: Istiaque Ahmed <lazyboy@chromium.org> Reviewed-by: Devlin <rdevlin.cronin@chromium.org> Cr-Commit-Position: refs/heads/master@{#503616} [modify] https://crrev.com/9d1666182cc27a6a3899f62621951c331645d692/chrome/browser/extensions/api/mdns/mdns_api_unittest.cc [modify] https://crrev.com/9d1666182cc27a6a3899f62621951c331645d692/chrome/browser/extensions/service_worker_apitest.cc [modify] https://crrev.com/9d1666182cc27a6a3899f62621951c331645d692/chrome/common/extensions/api/_api_features.json [add] https://crrev.com/9d1666182cc27a6a3899f62621951c331645d692/chrome/test/data/extensions/api_test/service_worker/filtered_events/a.html [add] https://crrev.com/9d1666182cc27a6a3899f62621951c331645d692/chrome/test/data/extensions/api_test/service_worker/filtered_events/a.js [add] https://crrev.com/9d1666182cc27a6a3899f62621951c331645d692/chrome/test/data/extensions/api_test/service_worker/filtered_events/b.html [add] https://crrev.com/9d1666182cc27a6a3899f62621951c331645d692/chrome/test/data/extensions/api_test/service_worker/filtered_events/manifest.json [add] https://crrev.com/9d1666182cc27a6a3899f62621951c331645d692/chrome/test/data/extensions/api_test/service_worker/filtered_events/sw.js [add] https://crrev.com/9d1666182cc27a6a3899f62621951c331645d692/chrome/test/data/extensions/api_test/service_worker/filtered_events/test_filtered.js [modify] https://crrev.com/9d1666182cc27a6a3899f62621951c331645d692/extensions/browser/event_listener_map.cc [modify] https://crrev.com/9d1666182cc27a6a3899f62621951c331645d692/extensions/browser/event_listener_map.h [modify] https://crrev.com/9d1666182cc27a6a3899f62621951c331645d692/extensions/browser/event_router.cc [modify] https://crrev.com/9d1666182cc27a6a3899f62621951c331645d692/extensions/browser/event_router.h [modify] https://crrev.com/9d1666182cc27a6a3899f62621951c331645d692/extensions/browser/event_router_unittest.cc [modify] https://crrev.com/9d1666182cc27a6a3899f62621951c331645d692/extensions/browser/extension_message_filter.cc [modify] https://crrev.com/9d1666182cc27a6a3899f62621951c331645d692/extensions/browser/extension_message_filter.h [modify] https://crrev.com/9d1666182cc27a6a3899f62621951c331645d692/extensions/common/extension_messages.h [modify] https://crrev.com/9d1666182cc27a6a3899f62621951c331645d692/extensions/renderer/event_bindings.cc [modify] https://crrev.com/9d1666182cc27a6a3899f62621951c331645d692/extensions/renderer/ipc_message_sender.cc
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/805f6a83b40e1c2956859d7dc1c0668d26e90a24 commit 805f6a83b40e1c2956859d7dc1c0668d26e90a24 Author: Istiaque Ahmed <lazyboy@chromium.org> Date: Thu Oct 05 01:23:26 2017 Extension SW events: correctly load unfiltered worker listeners. EventRouter didn't used to load pref-saved listeners for Service Workers. Load them. This CL is a precursor to dispatching a SW event after a browser restart. One caveat (TODO) in this CL is that it is currently assumed that SW events are only registered from '/' scope. That support will be incrementally added. Also, add a test to demonstrate that an event can be dispatched after a worker is shut down along with its extension (event page). This test can easily be expanded in future to test the aforementioned browser restart scenario. Bug: 721147 Change-Id: I80f0ae097772500f41c7509435b878762d55ff98 Reviewed-on: https://chromium-review.googlesource.com/696720 Commit-Queue: Istiaque Ahmed <lazyboy@chromium.org> Reviewed-by: Devlin <rdevlin.cronin@chromium.org> Cr-Commit-Position: refs/heads/master@{#506607} [modify] https://crrev.com/805f6a83b40e1c2956859d7dc1c0668d26e90a24/chrome/browser/extensions/service_worker_apitest.cc [add] https://crrev.com/805f6a83b40e1c2956859d7dc1c0668d26e90a24/chrome/test/data/extensions/api_test/service_worker/events_to_stopped_extension/background.js [add] https://crrev.com/805f6a83b40e1c2956859d7dc1c0668d26e90a24/chrome/test/data/extensions/api_test/service_worker/events_to_stopped_extension/manifest.json [add] https://crrev.com/805f6a83b40e1c2956859d7dc1c0668d26e90a24/chrome/test/data/extensions/api_test/service_worker/events_to_stopped_extension/page.html [add] https://crrev.com/805f6a83b40e1c2956859d7dc1c0668d26e90a24/chrome/test/data/extensions/api_test/service_worker/events_to_stopped_extension/page.js [add] https://crrev.com/805f6a83b40e1c2956859d7dc1c0668d26e90a24/chrome/test/data/extensions/api_test/service_worker/events_to_stopped_extension/sw.js [modify] https://crrev.com/805f6a83b40e1c2956859d7dc1c0668d26e90a24/extensions/browser/event_listener_map.cc [modify] https://crrev.com/805f6a83b40e1c2956859d7dc1c0668d26e90a24/extensions/browser/event_listener_map.h [modify] https://crrev.com/805f6a83b40e1c2956859d7dc1c0668d26e90a24/extensions/browser/event_router.cc [modify] https://crrev.com/805f6a83b40e1c2956859d7dc1c0668d26e90a24/extensions/browser/event_router.h
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/7105f2aaac871fcace5096d67d95e17c587a1e83 commit 7105f2aaac871fcace5096d67d95e17c587a1e83 Author: Istiaque Ahmed <lazyboy@chromium.org> Date: Sat Oct 07 01:11:59 2017 Extension SW events: Fix bug in loading (unfiltered) listeners. Changed I80f0ae097772500f41c7509435b878762d55ff98 added support for saving SW events to prefs, but the loading code was still incorrect (the added LoadUnfilteredWorkerListeners wasn't used). Fix the error. This accomplishes two things: 1. A renderer process started only for an extension SW should be capable of performing extension API calls and receiving extension events. 2. Events registered from an extension SW would survive browser restart, similar to how event page events work. Move channel overriding in ServiceWorkerLazyBackgroundTest to its constructor, it seems necessary for the override to work after a browser restart. Bug: 721147 Change-Id: I6a7c4e765b194752e7b9e976a97178aaed8633e0 Reviewed-on: https://chromium-review.googlesource.com/703399 Reviewed-by: Devlin <rdevlin.cronin@chromium.org> Commit-Queue: Istiaque Ahmed <lazyboy@chromium.org> Cr-Commit-Position: refs/heads/master@{#507252} [modify] https://crrev.com/7105f2aaac871fcace5096d67d95e17c587a1e83/chrome/browser/extensions/service_worker_apitest.cc [modify] https://crrev.com/7105f2aaac871fcace5096d67d95e17c587a1e83/extensions/browser/event_router.cc
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/9ce21b3b881a1245e9c50ed95d0ade0ef9525651 commit 9ce21b3b881a1245e9c50ed95d0ade0ef9525651 Author: Istiaque Ahmed <lazyboy@chromium.org> Date: Tue Oct 10 20:43:18 2017 Extension SW: Add persist and load support for filtered (lazy) events. Implement a) persisting, b) retrieving and c) loading filtered events from extension service workers. a) Filtered SW events are stored under a new ExtensionPrefs key "filtered_service_worker_events", similar to the non worker counterpart ("filtered_events" key). b) EventRouter::GetRegisteredEvents() can now retrieve service worker specific events. c) EventListenerMap::LoadFilteredLazyListener() can now load service worker lazy events. Add an end to end test for lazy event with filters, that survives across browser restart. Bug: 721147 Change-Id: Ida47cd02d515e7fe08def8da4662fc992c78e00d Reviewed-on: https://chromium-review.googlesource.com/707954 Commit-Queue: Istiaque Ahmed <lazyboy@chromium.org> Reviewed-by: Devlin <rdevlin.cronin@chromium.org> Cr-Commit-Position: refs/heads/master@{#507762} [modify] https://crrev.com/9ce21b3b881a1245e9c50ed95d0ade0ef9525651/chrome/browser/extensions/service_worker_apitest.cc [add] https://crrev.com/9ce21b3b881a1245e9c50ed95d0ade0ef9525651/chrome/test/data/extensions/api_test/service_worker/filtered_events_after_restart/a.html [add] https://crrev.com/9ce21b3b881a1245e9c50ed95d0ade0ef9525651/chrome/test/data/extensions/api_test/service_worker/filtered_events_after_restart/a.js [add] https://crrev.com/9ce21b3b881a1245e9c50ed95d0ade0ef9525651/chrome/test/data/extensions/api_test/service_worker/filtered_events_after_restart/b.html [add] https://crrev.com/9ce21b3b881a1245e9c50ed95d0ade0ef9525651/chrome/test/data/extensions/api_test/service_worker/filtered_events_after_restart/background.js [add] https://crrev.com/9ce21b3b881a1245e9c50ed95d0ade0ef9525651/chrome/test/data/extensions/api_test/service_worker/filtered_events_after_restart/manifest.json [add] https://crrev.com/9ce21b3b881a1245e9c50ed95d0ade0ef9525651/chrome/test/data/extensions/api_test/service_worker/filtered_events_after_restart/page.html [add] https://crrev.com/9ce21b3b881a1245e9c50ed95d0ade0ef9525651/chrome/test/data/extensions/api_test/service_worker/filtered_events_after_restart/page.js [add] https://crrev.com/9ce21b3b881a1245e9c50ed95d0ade0ef9525651/chrome/test/data/extensions/api_test/service_worker/filtered_events_after_restart/sw.js [modify] https://crrev.com/9ce21b3b881a1245e9c50ed95d0ade0ef9525651/extensions/browser/event_listener_map.cc [modify] https://crrev.com/9ce21b3b881a1245e9c50ed95d0ade0ef9525651/extensions/browser/event_listener_map.h [modify] https://crrev.com/9ce21b3b881a1245e9c50ed95d0ade0ef9525651/extensions/browser/event_listener_map_unittest.cc [modify] https://crrev.com/9ce21b3b881a1245e9c50ed95d0ade0ef9525651/extensions/browser/event_router.cc [modify] https://crrev.com/9ce21b3b881a1245e9c50ed95d0ade0ef9525651/extensions/browser/event_router.h [modify] https://crrev.com/9ce21b3b881a1245e9c50ed95d0ade0ef9525651/extensions/browser/event_router_unittest.cc [modify] https://crrev.com/9ce21b3b881a1245e9c50ed95d0ade0ef9525651/extensions/renderer/event_bindings.cc
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/b7f0e2fd97ba30d1ded25bf35348dbcccd89159e commit b7f0e2fd97ba30d1ded25bf35348dbcccd89159e Author: Istiaque Ahmed <lazyboy@chromium.org> Date: Wed Oct 11 17:37:42 2017 LazyBackgroundTaskQueue: Use OnceCallback for pending tasks. LazyBackgroundTaskQueue::PendingTask is a closure that is meant to be invoked at most once, so turn it into base::OnceCallback from base::Callback to enforce reality. TBR=fukino@chromium.org for file_manager/ Bug: 721147 Change-Id: Ib26577dbbe6702093c36a09c640296e8ed81f0d2 Reviewed-on: https://chromium-review.googlesource.com/711154 Commit-Queue: Istiaque Ahmed <lazyboy@chromium.org> Reviewed-by: Devlin <rdevlin.cronin@chromium.org> Cr-Commit-Position: refs/heads/master@{#508020} [modify] https://crrev.com/b7f0e2fd97ba30d1ded25bf35348dbcccd89159e/chrome/browser/chromeos/file_manager/file_browser_handlers.cc [modify] https://crrev.com/b7f0e2fd97ba30d1ded25bf35348dbcccd89159e/chrome/browser/extensions/devtools_util.cc [modify] https://crrev.com/b7f0e2fd97ba30d1ded25bf35348dbcccd89159e/chrome/browser/extensions/extension_service.cc [modify] https://crrev.com/b7f0e2fd97ba30d1ded25bf35348dbcccd89159e/extensions/browser/api/messaging/message_service.cc [modify] https://crrev.com/b7f0e2fd97ba30d1ded25bf35348dbcccd89159e/extensions/browser/api/runtime/runtime_api.cc [modify] https://crrev.com/b7f0e2fd97ba30d1ded25bf35348dbcccd89159e/extensions/browser/events/lazy_event_dispatcher.cc [modify] https://crrev.com/b7f0e2fd97ba30d1ded25bf35348dbcccd89159e/extensions/browser/guest_view/app_view/app_view_guest.cc [modify] https://crrev.com/b7f0e2fd97ba30d1ded25bf35348dbcccd89159e/extensions/browser/lazy_background_task_queue.cc [modify] https://crrev.com/b7f0e2fd97ba30d1ded25bf35348dbcccd89159e/extensions/browser/lazy_background_task_queue.h [modify] https://crrev.com/b7f0e2fd97ba30d1ded25bf35348dbcccd89159e/extensions/browser/lazy_context_task_queue.h [modify] https://crrev.com/b7f0e2fd97ba30d1ded25bf35348dbcccd89159e/extensions/browser/process_manager.cc [modify] https://crrev.com/b7f0e2fd97ba30d1ded25bf35348dbcccd89159e/extensions/browser/service_worker_task_queue.cc [modify] https://crrev.com/b7f0e2fd97ba30d1ded25bf35348dbcccd89159e/extensions/browser/service_worker_task_queue.h
Comment 1 by bugdroid1@chromium.org
, May 16 2017