New issue
Advanced search Search tips

Issue 602442 link

Starred by 3 users

Issue metadata

Status: Started
Owner:
Components:
EstimatedDays: ----
NextAction: ----
OS: ----
Pri: 3
Type: Bug



Sign in to add a comment

Extension APIs in extension SW

Project Member Reported by lazyboy@chromium.org, Apr 11 2016

Issue description

Master bug to track enabling extension APIs in extension Service Workers.
 
Project Member

Comment 1 by bugdroid1@chromium.org, Apr 12 2016

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

Project Member

Comment 2 by bugdroid1@chromium.org, May 24 2016

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

Comment 3 by falken@chromium.org, Oct 11 2016

Components: Blink>ServiceWorker Platform>Extensions>API
Project Member

Comment 4 by bugdroid1@chromium.org, Oct 18 2016

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

Project Member

Comment 5 by bugdroid1@chromium.org, Oct 20 2016

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? 

Sign in to add a comment