Changeset 244043 in webkit
- Timestamp:
- Apr 8, 2019 1:51:20 PM (5 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r244037 r244043 1 2019-04-08 Youenn Fablet <youenn@apple.com> 2 3 Lazily construct Navigator serviceWorker 4 https://bugs.webkit.org/show_bug.cgi?id=196692 5 6 Reviewed by Chris Dumez. 7 8 Make NavigatorBase a ContextDestructionObserver. 9 This allows to get the navigator script execution context. 10 Use it when creating the navigator ServiceWorkerContainer object. 11 For GC, introduce serviceWorkerIfAny which returns the container if created. 12 No JS observable change of behavior. 13 Covered by existing tests. 14 15 * bindings/js/JSNavigatorCustom.cpp: 16 (WebCore::JSNavigator::visitAdditionalChildren): 17 * bindings/js/JSWorkerNavigatorCustom.cpp: 18 (WebCore::JSWorkerNavigator::visitAdditionalChildren): 19 * page/NavigatorBase.cpp: 20 (WebCore::NavigatorBase::NavigatorBase): 21 (WebCore::NavigatorBase::serviceWorkerIfAny): 22 (WebCore::NavigatorBase::serviceWorker): 23 * page/NavigatorBase.h: 24 1 25 2019-04-08 Antti Koivisto <antti@apple.com> 2 26 -
trunk/Source/WebCore/bindings/js/JSNavigatorCustom.cpp
r235271 r244043 32 32 { 33 33 #if ENABLE(SERVICE_WORKER) 34 visitor.addOpaqueRoot( &wrapped().serviceWorker());34 visitor.addOpaqueRoot(wrapped().serviceWorkerIfExists()); 35 35 #else 36 36 UNUSED_PARAM(visitor); -
trunk/Source/WebCore/bindings/js/JSWorkerNavigatorCustom.cpp
r225816 r244043 32 32 { 33 33 #if ENABLE(SERVICE_WORKER) 34 visitor.addOpaqueRoot( &wrapped().serviceWorker());34 visitor.addOpaqueRoot(wrapped().serviceWorkerIfExists()); 35 35 #else 36 36 UNUSED_PARAM(visitor); -
trunk/Source/WebCore/page/NavigatorBase.cpp
r239384 r244043 29 29 30 30 #include "Document.h" 31 #include "RuntimeEnabledFeatures.h" 31 32 #include "ServiceWorkerContainer.h" 32 33 #include <mutex> … … 78 79 79 80 NavigatorBase::NavigatorBase(ScriptExecutionContext* context) 80 #if ENABLE(SERVICE_WORKER) 81 : m_serviceWorkerContainer(makeUniqueRef<ServiceWorkerContainer>(context, *this)) 82 #endif 81 : ContextDestructionObserver(context) 83 82 { 84 #if !ENABLE(SERVICE_WORKER)85 UNUSED_PARAM(context);86 #endif87 83 } 88 84 … … 152 148 153 149 #if ENABLE(SERVICE_WORKER) 150 ServiceWorkerContainer* NavigatorBase::serviceWorkerIfExists() 151 { 152 return m_serviceWorkerContainer.get(); 153 } 154 154 155 ServiceWorkerContainer& NavigatorBase::serviceWorker() 155 156 { 156 return m_serviceWorkerContainer; 157 ASSERT(RuntimeEnabledFeatures::sharedFeatures().serviceWorkerEnabled()); 158 if (!m_serviceWorkerContainer) 159 m_serviceWorkerContainer = std::make_unique<ServiceWorkerContainer>(scriptExecutionContext(), *this); 160 return *m_serviceWorkerContainer; 157 161 } 158 162 … … 161 165 if (is<Document>(context) && downcast<Document>(context).isSandboxed(SandboxOrigin)) 162 166 return Exception { SecurityError, "Service Worker is disabled because the context is sandboxed and lacks the 'allow-same-origin' flag" }; 163 return m_serviceWorkerContainer.get();167 return serviceWorker(); 164 168 } 165 169 #endif -
trunk/Source/WebCore/page/NavigatorBase.h
r239384 r244043 26 26 #pragma once 27 27 28 #include "ContextDestructionObserver.h" 28 29 #include "ExceptionOr.h" 29 30 #include <wtf/Forward.h> … … 37 38 class ServiceWorkerContainer; 38 39 39 class NavigatorBase : public RefCounted<NavigatorBase> {40 class NavigatorBase : public RefCounted<NavigatorBase>, public ContextDestructionObserver { 40 41 public: 41 42 virtual ~NavigatorBase(); … … 62 63 #if ENABLE(SERVICE_WORKER) 63 64 public: 65 ServiceWorkerContainer* serviceWorkerIfExists(); 64 66 ServiceWorkerContainer& serviceWorker(); 65 67 ExceptionOr<ServiceWorkerContainer&> serviceWorker(ScriptExecutionContext&); 66 68 67 69 private: 68 UniqueRef<ServiceWorkerContainer> m_serviceWorkerContainer;70 std::unique_ptr<ServiceWorkerContainer> m_serviceWorkerContainer; 69 71 #endif 70 72 };
Note: See TracChangeset
for help on using the changeset viewer.