Master bug to track enabling extension APIs in extension Service Workers.
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/ce33396f3f4f6bd09dde6984c9564bf654c3bef1 commit ce33396f3f4f6bd09dde6984c9564bf654c3bef1 Author: lazyboy <lazyboy@chromium.org> Date: Tue Apr 12 18:22:04 2016 Make ModuleSystem have a const view of ResourceBundleSourceMap. I am working on creating ModuleSystem for Service Workers (http://crrev.com/1714783002), where it is important to emphasize the fact that ModuleSystem has a "read only" view to SourceMap and can access the SourceMap items from threads other than the main thread. BUG=602442 Review URL: https://codereview.chromium.org/1880473003 Cr-Commit-Position: refs/heads/master@{#386742} [modify] https://crrev.com/ce33396f3f4f6bd09dde6984c9564bf654c3bef1/extensions/renderer/module_system.cc [modify] https://crrev.com/ce33396f3f4f6bd09dde6984c9564bf654c3bef1/extensions/renderer/module_system.h [modify] https://crrev.com/ce33396f3f4f6bd09dde6984c9564bf654c3bef1/extensions/renderer/module_system_test.cc [modify] https://crrev.com/ce33396f3f4f6bd09dde6984c9564bf654c3bef1/extensions/renderer/resource_bundle_source_map.cc [modify] https://crrev.com/ce33396f3f4f6bd09dde6984c9564bf654c3bef1/extensions/renderer/resource_bundle_source_map.h
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/ee4adef0b70f13cb80a886ef639fc910c0b5ce6f commit ee4adef0b70f13cb80a886ef639fc910c0b5ce6f Author: lazyboy <lazyboy@chromium.org> Date: Tue May 24 00:55:16 2016 Begin to enable extension APIs in Extension Service Worker. This CL adds "tabs" API support in extension SW and adds an end-to-end test for it. This CL also puts the feature behind a runtime flag which is disabled for non trunk builds by default. Some known issues: 1) Lifetime improvement of UIThreadWorkerResponseCallbackWrapper is missing. I am currently cleaning up on RPH shutdown, but this is not idea, we should be cleaning up on worker thread shutdown. 2) IPC send<->receive from/to Worker Thread can be made better, see comment above WorkerThreadDispatcher in patch set #1. 3) Currently if an extension is not "active" in a process, then API calls from that process is not classified correctly. I'm using "extension_service_worker" context, which allows running tabs API. In theory since a worker cannot be spawned from outside of the extension process (TODO: Verify this), we can <fingers_crossed>safely</fingers_crossed> classify this as a blessed context. BUG=602442 Test=Register an extension with "tabs" permission, register a service worker from the extension and call chrome.tabs.create() from SW code! Expect it to work Review-Url: https://codereview.chromium.org/1880933002 Cr-Commit-Position: refs/heads/master@{#395494} [modify] https://crrev.com/ee4adef0b70f13cb80a886ef639fc910c0b5ce6f/chrome/browser/extensions/chrome_content_browser_client_extensions_part.cc [modify] https://crrev.com/ee4adef0b70f13cb80a886ef639fc910c0b5ce6f/chrome/browser/extensions/chrome_extension_function.cc [modify] https://crrev.com/ee4adef0b70f13cb80a886ef639fc910c0b5ce6f/chrome/browser/extensions/service_worker_apitest.cc [modify] https://crrev.com/ee4adef0b70f13cb80a886ef639fc910c0b5ce6f/chrome/common/chrome_content_client.cc [modify] https://crrev.com/ee4adef0b70f13cb80a886ef639fc910c0b5ce6f/chrome/common/chrome_content_client.h [modify] https://crrev.com/ee4adef0b70f13cb80a886ef639fc910c0b5ce6f/chrome/common/extensions/api/_api_features.json [modify] https://crrev.com/ee4adef0b70f13cb80a886ef639fc910c0b5ce6f/chrome/common/extensions/chrome_extensions_client.cc [modify] https://crrev.com/ee4adef0b70f13cb80a886ef639fc910c0b5ce6f/chrome/common/extensions/chrome_extensions_client.h [modify] https://crrev.com/ee4adef0b70f13cb80a886ef639fc910c0b5ce6f/chrome/renderer/chrome_content_renderer_client.cc [modify] https://crrev.com/ee4adef0b70f13cb80a886ef639fc910c0b5ce6f/chrome/renderer/chrome_content_renderer_client.h [add] https://crrev.com/ee4adef0b70f13cb80a886ef639fc910c0b5ce6f/chrome/test/data/extensions/api_test/service_worker/tabs_create/manifest.json [add] https://crrev.com/ee4adef0b70f13cb80a886ef639fc910c0b5ce6f/chrome/test/data/extensions/api_test/service_worker/tabs_create/page.html [add] https://crrev.com/ee4adef0b70f13cb80a886ef639fc910c0b5ce6f/chrome/test/data/extensions/api_test/service_worker/tabs_create/page.js [add] https://crrev.com/ee4adef0b70f13cb80a886ef639fc910c0b5ce6f/chrome/test/data/extensions/api_test/service_worker/tabs_create/sw.js [modify] https://crrev.com/ee4adef0b70f13cb80a886ef639fc910c0b5ce6f/content/child/blink_platform_impl.cc [modify] https://crrev.com/ee4adef0b70f13cb80a886ef639fc910c0b5ce6f/content/child/blink_platform_impl.h [modify] https://crrev.com/ee4adef0b70f13cb80a886ef639fc910c0b5ce6f/content/public/common/content_client.cc [modify] https://crrev.com/ee4adef0b70f13cb80a886ef639fc910c0b5ce6f/content/public/common/content_client.h [modify] https://crrev.com/ee4adef0b70f13cb80a886ef639fc910c0b5ce6f/content/public/renderer/content_renderer_client.h [modify] https://crrev.com/ee4adef0b70f13cb80a886ef639fc910c0b5ce6f/content/renderer/service_worker/service_worker_context_client.cc [modify] https://crrev.com/ee4adef0b70f13cb80a886ef639fc910c0b5ce6f/extensions/browser/extension_function.cc [modify] https://crrev.com/ee4adef0b70f13cb80a886ef639fc910c0b5ce6f/extensions/browser/extension_function_dispatcher.cc [modify] https://crrev.com/ee4adef0b70f13cb80a886ef639fc910c0b5ce6f/extensions/browser/extension_function_dispatcher.h [add] https://crrev.com/ee4adef0b70f13cb80a886ef639fc910c0b5ce6f/extensions/browser/extension_service_worker_message_filter.cc [add] https://crrev.com/ee4adef0b70f13cb80a886ef639fc910c0b5ce6f/extensions/browser/extension_service_worker_message_filter.h [modify] https://crrev.com/ee4adef0b70f13cb80a886ef639fc910c0b5ce6f/extensions/browser/extension_web_contents_observer.cc [modify] https://crrev.com/ee4adef0b70f13cb80a886ef639fc910c0b5ce6f/extensions/common/extension_messages.h [modify] https://crrev.com/ee4adef0b70f13cb80a886ef639fc910c0b5ce6f/extensions/common/extensions_client.cc [modify] https://crrev.com/ee4adef0b70f13cb80a886ef639fc910c0b5ce6f/extensions/common/extensions_client.h [modify] https://crrev.com/ee4adef0b70f13cb80a886ef639fc910c0b5ce6f/extensions/common/features/simple_feature.cc [modify] https://crrev.com/ee4adef0b70f13cb80a886ef639fc910c0b5ce6f/extensions/common/features/simple_feature_unittest.cc [modify] https://crrev.com/ee4adef0b70f13cb80a886ef639fc910c0b5ce6f/extensions/extensions.gypi [modify] https://crrev.com/ee4adef0b70f13cb80a886ef639fc910c0b5ce6f/extensions/renderer/console.cc [modify] https://crrev.com/ee4adef0b70f13cb80a886ef639fc910c0b5ce6f/extensions/renderer/dispatcher.cc [modify] https://crrev.com/ee4adef0b70f13cb80a886ef639fc910c0b5ce6f/extensions/renderer/dispatcher.h [modify] https://crrev.com/ee4adef0b70f13cb80a886ef639fc910c0b5ce6f/extensions/renderer/object_backed_native_handler.cc [modify] https://crrev.com/ee4adef0b70f13cb80a886ef639fc910c0b5ce6f/extensions/renderer/request_sender.cc [modify] https://crrev.com/ee4adef0b70f13cb80a886ef639fc910c0b5ce6f/extensions/renderer/request_sender.h [modify] https://crrev.com/ee4adef0b70f13cb80a886ef639fc910c0b5ce6f/extensions/renderer/resources/runtime_custom_bindings.js [modify] https://crrev.com/ee4adef0b70f13cb80a886ef639fc910c0b5ce6f/extensions/renderer/script_context.cc [add] https://crrev.com/ee4adef0b70f13cb80a886ef639fc910c0b5ce6f/extensions/renderer/service_worker_data.cc [add] https://crrev.com/ee4adef0b70f13cb80a886ef639fc910c0b5ce6f/extensions/renderer/service_worker_data.h [add] https://crrev.com/ee4adef0b70f13cb80a886ef639fc910c0b5ce6f/extensions/renderer/service_worker_request_sender.cc [add] https://crrev.com/ee4adef0b70f13cb80a886ef639fc910c0b5ce6f/extensions/renderer/service_worker_request_sender.h [add] https://crrev.com/ee4adef0b70f13cb80a886ef639fc910c0b5ce6f/extensions/renderer/worker_thread_dispatcher.cc [add] https://crrev.com/ee4adef0b70f13cb80a886ef639fc910c0b5ce6f/extensions/renderer/worker_thread_dispatcher.h [modify] https://crrev.com/ee4adef0b70f13cb80a886ef639fc910c0b5ce6f/ipc/ipc_message_start.h [modify] https://crrev.com/ee4adef0b70f13cb80a886ef639fc910c0b5ce6f/third_party/WebKit/Source/bindings/core/v8/WorkerOrWorkletScriptController.cpp [modify] https://crrev.com/ee4adef0b70f13cb80a886ef639fc910c0b5ce6f/third_party/WebKit/public/platform/Platform.h
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/4c82177a8b45303c941ddbc469444f0bfc760de4 commit 4c82177a8b45303c941ddbc469444f0bfc760de4 Author: lazyboy <lazyboy@chromium.org> Date: Tue Oct 18 00:04:09 2016 Add ref count to service workers for extension API. We need a way to keep a service worker alive 1) during extension function's request->response roundtrip completes. 2) when an event is about to be dispatched to a (stopped) service worker. This CL shows a way to do #1. #2 can follow later. The CL adds plumbing to expose functions to increment/decrement ref counting to an ServiceWorkerVersion. This is done by adding a way to add "external requests" to a ServiceWorkerVersion: when a worker has external requests pending, it will be considered to be in working state, i.e ServiceWorkerVersion::HasWork() will return true. The public interface is exposed through ServiceWorkerContext. And the interface methods expect a GUID/nonce for each such requests from service worker renderer: ServiceWorkerContext::StartingExternalRequest() and ServiceWorkerContext::FinishedExternalRequest() Extension APIs that are expected to be long running aren't handled in this CL. For example: an extension API showing a dialog to user that waits for user action. BUG=602442 Test=There's no easy way to test it without tweaking the code, I've used the following steps to make sure that we keep SW alive when an extension API is in-flight: Change the stop worker idle timeout and worker timeout to sth small, e.g. 3s. Call an extension function that runs for 7s (> 3s + 3s). Without the CL, the extension function's callback won't be called because the worker would shut down after 6s. The added test ServiceWorkerTest.WorkerRefCount tests this at a bit lower level: by checking ref count (= count of external requests for a ServiceWorkerVersion). Review-Url: https://codereview.chromium.org/2166523003 Cr-Commit-Position: refs/heads/master@{#425824} [modify] https://crrev.com/4c82177a8b45303c941ddbc469444f0bfc760de4/chrome/browser/extensions/chrome_content_browser_client_extensions_part.cc [modify] https://crrev.com/4c82177a8b45303c941ddbc469444f0bfc760de4/chrome/browser/extensions/service_worker_apitest.cc [modify] https://crrev.com/4c82177a8b45303c941ddbc469444f0bfc760de4/chrome/renderer/chrome_content_renderer_client.cc [modify] https://crrev.com/4c82177a8b45303c941ddbc469444f0bfc760de4/chrome/renderer/chrome_content_renderer_client.h [add] https://crrev.com/4c82177a8b45303c941ddbc469444f0bfc760de4/chrome/test/data/extensions/api_test/service_worker/api_worker_ref_count/manifest.json [add] https://crrev.com/4c82177a8b45303c941ddbc469444f0bfc760de4/chrome/test/data/extensions/api_test/service_worker/api_worker_ref_count/page.html [add] https://crrev.com/4c82177a8b45303c941ddbc469444f0bfc760de4/chrome/test/data/extensions/api_test/service_worker/api_worker_ref_count/page.js [add] https://crrev.com/4c82177a8b45303c941ddbc469444f0bfc760de4/chrome/test/data/extensions/api_test/service_worker/api_worker_ref_count/sw.js [modify] https://crrev.com/4c82177a8b45303c941ddbc469444f0bfc760de4/content/browser/service_worker/service_worker_context_wrapper.cc [modify] https://crrev.com/4c82177a8b45303c941ddbc469444f0bfc760de4/content/browser/service_worker/service_worker_context_wrapper.h [modify] https://crrev.com/4c82177a8b45303c941ddbc469444f0bfc760de4/content/browser/service_worker/service_worker_metrics.cc [modify] https://crrev.com/4c82177a8b45303c941ddbc469444f0bfc760de4/content/browser/service_worker/service_worker_metrics.h [modify] https://crrev.com/4c82177a8b45303c941ddbc469444f0bfc760de4/content/browser/service_worker/service_worker_version.cc [modify] https://crrev.com/4c82177a8b45303c941ddbc469444f0bfc760de4/content/browser/service_worker/service_worker_version.h [modify] https://crrev.com/4c82177a8b45303c941ddbc469444f0bfc760de4/content/public/browser/service_worker_context.h [modify] https://crrev.com/4c82177a8b45303c941ddbc469444f0bfc760de4/content/public/renderer/content_renderer_client.h [modify] https://crrev.com/4c82177a8b45303c941ddbc469444f0bfc760de4/content/renderer/service_worker/service_worker_context_client.cc [modify] https://crrev.com/4c82177a8b45303c941ddbc469444f0bfc760de4/extensions/browser/bad_message.cc [modify] https://crrev.com/4c82177a8b45303c941ddbc469444f0bfc760de4/extensions/browser/bad_message.h [modify] https://crrev.com/4c82177a8b45303c941ddbc469444f0bfc760de4/extensions/browser/extension_function.cc [modify] https://crrev.com/4c82177a8b45303c941ddbc469444f0bfc760de4/extensions/browser/extension_function.h [modify] https://crrev.com/4c82177a8b45303c941ddbc469444f0bfc760de4/extensions/browser/extension_function_dispatcher.cc [modify] https://crrev.com/4c82177a8b45303c941ddbc469444f0bfc760de4/extensions/browser/extension_function_dispatcher.h [modify] https://crrev.com/4c82177a8b45303c941ddbc469444f0bfc760de4/extensions/browser/extension_service_worker_message_filter.cc [modify] https://crrev.com/4c82177a8b45303c941ddbc469444f0bfc760de4/extensions/browser/extension_service_worker_message_filter.h [modify] https://crrev.com/4c82177a8b45303c941ddbc469444f0bfc760de4/extensions/browser/extension_util.cc [modify] https://crrev.com/4c82177a8b45303c941ddbc469444f0bfc760de4/extensions/browser/extension_util.h [modify] https://crrev.com/4c82177a8b45303c941ddbc469444f0bfc760de4/extensions/common/api/_api_features.json [modify] https://crrev.com/4c82177a8b45303c941ddbc469444f0bfc760de4/extensions/common/constants.cc [modify] https://crrev.com/4c82177a8b45303c941ddbc469444f0bfc760de4/extensions/common/constants.h [modify] https://crrev.com/4c82177a8b45303c941ddbc469444f0bfc760de4/extensions/common/extension_messages.h [modify] https://crrev.com/4c82177a8b45303c941ddbc469444f0bfc760de4/extensions/renderer/dispatcher.cc [modify] https://crrev.com/4c82177a8b45303c941ddbc469444f0bfc760de4/extensions/renderer/dispatcher.h [modify] https://crrev.com/4c82177a8b45303c941ddbc469444f0bfc760de4/extensions/renderer/request_sender.cc [modify] https://crrev.com/4c82177a8b45303c941ddbc469444f0bfc760de4/extensions/renderer/service_worker_data.cc [modify] https://crrev.com/4c82177a8b45303c941ddbc469444f0bfc760de4/extensions/renderer/service_worker_data.h [modify] https://crrev.com/4c82177a8b45303c941ddbc469444f0bfc760de4/extensions/renderer/service_worker_request_sender.cc [modify] https://crrev.com/4c82177a8b45303c941ddbc469444f0bfc760de4/extensions/renderer/service_worker_request_sender.h [modify] https://crrev.com/4c82177a8b45303c941ddbc469444f0bfc760de4/extensions/renderer/worker_thread_dispatcher.cc [modify] https://crrev.com/4c82177a8b45303c941ddbc469444f0bfc760de4/extensions/renderer/worker_thread_dispatcher.h [modify] https://crrev.com/4c82177a8b45303c941ddbc469444f0bfc760de4/tools/metrics/histograms/histograms.xml
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/b5852fe41e3919a32a7c33e87bbad4ad215b6c17 commit b5852fe41e3919a32a7c33e87bbad4ad215b6c17 Author: falken <falken@chromium.org> Date: Thu Oct 20 19:04:10 2016 histograms: Add ESWMF_INVALID_DECREMENT_ACTIVITY bad message reason Generated by tools/metrics/histograms/update_bad_message_reasons.py This reason was added in https://crrev.com/4c82177a8b45303c941ddbc469444f0bfc760de4 Also fix typo. BUG=602442 Review-Url: https://chromiumcodereview.appspot.com/2429283004 Cr-Commit-Position: refs/heads/master@{#426554} [modify] https://crrev.com/b5852fe41e3919a32a7c33e87bbad4ad215b6c17/extensions/browser/bad_message.h [modify] https://crrev.com/b5852fe41e3919a32a7c33e87bbad4ad215b6c17/extensions/browser/extension_service_worker_message_filter.cc [modify] https://crrev.com/b5852fe41e3919a32a7c33e87bbad4ad215b6c17/tools/metrics/histograms/histograms.xml
You started fixing this bug over two years ago. Are you still working on it?
Comment 1 by bugdroid1@chromium.org
, Apr 12 2016