Changeset 224244 in webkit


Ignore:
Timestamp:
Oct 31, 2017 1:38:12 PM (6 years ago)
Author:
Chris Dumez
Message:

navigator.serviceWorker should always return the same object
https://bugs.webkit.org/show_bug.cgi?id=179067

Reviewed by Youenn Fablet.

Source/WebCore:

navigator.serviceWorker should always return the same object:

Add visitor to make sure we don't gc() the ServiceWorkerContainer wrapper too early.

Test: http/tests/workers/service/navigator-serviceWorker-same-object.html

  • Sources.txt:
  • WebCore.xcodeproj/project.pbxproj:
  • bindings/js/JSNavigatorCustom.cpp: Copied from Source/WebCore/workers/service/ServiceWorkerContainer.idl.

(WebCore::JSNavigator::visitAdditionalChildren):

  • page/Navigator.idl:
  • workers/service/ServiceWorkerContainer.idl:

LayoutTests:

Add layout test coverage.

  • http/tests/workers/service/navigator-serviceWorker-same-object-expected.txt: Added.
  • http/tests/workers/service/navigator-serviceWorker-same-object.html: Added.
Location:
trunk
Files:
2 added
6 edited
1 copied

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r224242 r224244  
     12017-10-31  Chris Dumez  <cdumez@apple.com>
     2
     3        navigator.serviceWorker should always return the same object
     4        https://bugs.webkit.org/show_bug.cgi?id=179067
     5
     6        Reviewed by Youenn Fablet.
     7
     8        Add layout test coverage.
     9
     10        * http/tests/workers/service/navigator-serviceWorker-same-object-expected.txt: Added.
     11        * http/tests/workers/service/navigator-serviceWorker-same-object.html: Added.
     12
    1132017-10-31  Antoine Quint  <graouts@apple.com>
    214
  • trunk/Source/WebCore/ChangeLog

    r224242 r224244  
     12017-10-31  Chris Dumez  <cdumez@apple.com>
     2
     3        navigator.serviceWorker should always return the same object
     4        https://bugs.webkit.org/show_bug.cgi?id=179067
     5
     6        Reviewed by Youenn Fablet.
     7
     8        navigator.serviceWorker should always return the same object:
     9        - https://www.w3.org/TR/service-workers-1/#navigator-service-worker
     10
     11        Add visitor to make sure we don't gc() the ServiceWorkerContainer wrapper too early.
     12
     13        Test: http/tests/workers/service/navigator-serviceWorker-same-object.html
     14
     15        * Sources.txt:
     16        * WebCore.xcodeproj/project.pbxproj:
     17        * bindings/js/JSNavigatorCustom.cpp: Copied from Source/WebCore/workers/service/ServiceWorkerContainer.idl.
     18        (WebCore::JSNavigator::visitAdditionalChildren):
     19        * page/Navigator.idl:
     20        * workers/service/ServiceWorkerContainer.idl:
     21
    1222017-10-31  Antoine Quint  <graouts@apple.com>
    223
  • trunk/Source/WebCore/Sources.txt

    r224168 r224244  
    393393bindings/js/JSMessagePortCustom.cpp
    394394bindings/js/JSMutationObserverCustom.cpp
     395bindings/js/JSNavigatorCustom.cpp
    395396bindings/js/JSNodeCustom.cpp
    396397bindings/js/JSNodeIteratorCustom.cpp
  • trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj

    r224150 r224244  
    94889488                83B250091FA1181C00BC02D9 /* JSServiceWorkerClientType.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSServiceWorkerClientType.h; sourceTree = "<group>"; };
    94899489                83B2500B1FA1181D00BC02D9 /* JSServiceWorkerClientType.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSServiceWorkerClientType.cpp; sourceTree = "<group>"; };
     9490                83B5DA451FA9079300B59DF4 /* JSNavigatorCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSNavigatorCustom.cpp; sourceTree = "<group>"; };
    94909491                83B74EF21F3E0BD700996BC7 /* KeepaliveRequestTracker.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = KeepaliveRequestTracker.cpp; sourceTree = "<group>"; };
    94919492                83B74EF31F3E0BD700996BC7 /* KeepaliveRequestTracker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KeepaliveRequestTracker.h; sourceTree = "<group>"; };
     
    1892418925                                E1ADED460E76B8DD004A1A5E /* JSMessagePortCustom.cpp */,
    1892518926                                C6F0917E143A2BB900685849 /* JSMutationObserverCustom.cpp */,
     18927                                83B5DA451FA9079300B59DF4 /* JSNavigatorCustom.cpp */,
    1892618928                                BCD9C2600C17AA67005C90A2 /* JSNodeCustom.cpp */,
    1892718929                                BC9439C2116CF4940048C750 /* JSNodeCustom.h */,
  • trunk/Source/WebCore/bindings/js/JSNavigatorCustom.cpp

    r224243 r224244  
    2424 */
    2525
    26 // FIXME: The spec IDL exposes this on Worker in addition to Window.
    27 // We don't currently support nested workers.
     26#include "config.h"
     27#include "JSNavigator.h"
    2828
    29 [
    30     SecureContext,
    31     Exposed=(Window),
    32     Conditional=SERVICE_WORKER,
    33     EnabledAtRuntime=ServiceWorker
    34 ] interface ServiceWorkerContainer : EventTarget {
    35     readonly attribute ServiceWorker? controller;
    36     readonly attribute Promise<ServiceWorkerRegistration> ready;
     29namespace WebCore {
    3730
    38     [NewObject, ImplementedAs=addRegistration] Promise<ServiceWorkerRegistration> register(USVString scriptURL, optional RegistrationOptions options);
    39     [NewObject] Promise<any> getRegistration(optional USVString clientURL = "");
    40     [NewObject] Promise<sequence<ServiceWorkerRegistration>> getRegistrations();
     31void JSNavigator::visitAdditionalChildren(SlotVisitor& visitor)
     32{
     33#if ENABLE(SERVICE_WORKER)
     34    visitor.addOpaqueRoot(wrapped().serviceWorker());
     35#else
     36    UNUSED_PARAM(visitor);
     37#endif
     38}
    4139
    42     void startMessages();
    43 
    44     // events
    45     attribute EventHandler oncontrollerchange;
    46     attribute EventHandler onmessage;
    47     attribute EventHandler onmessageerror;
    48 };
    49 
    50 dictionary RegistrationOptions {
    51     USVString scope;
    52     WorkerType type = "classic";
    53     ServiceWorkerUpdateViaCache updateViaCache = "imports";
    54 };
     40}
  • trunk/Source/WebCore/page/Navigator.idl

    r220220 r224244  
    2020[
    2121    GenerateIsReachable=ImplFrame,
     22    JSCustomMarkFunction,
    2223] interface Navigator {
    2324    readonly attribute DOMPluginArray plugins;
  • trunk/Source/WebCore/workers/service/ServiceWorkerContainer.idl

    r220623 r224244  
    3131    Exposed=(Window),
    3232    Conditional=SERVICE_WORKER,
    33     EnabledAtRuntime=ServiceWorker
     33    EnabledAtRuntime=ServiceWorker,
     34    GenerateIsReachable=Impl,
    3435] interface ServiceWorkerContainer : EventTarget {
    3536    readonly attribute ServiceWorker? controller;
Note: See TracChangeset for help on using the changeset viewer.