OLD | NEW |
---|---|
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef ThreadedMessagingProxyBase_h | 5 #ifndef ThreadedMessagingProxyBase_h |
6 #define ThreadedMessagingProxyBase_h | 6 #define ThreadedMessagingProxyBase_h |
7 | 7 |
8 #include "core/CoreExport.h" | 8 #include "core/CoreExport.h" |
9 #include "core/frame/UseCounter.h" | 9 #include "core/frame/UseCounter.h" |
10 #include "core/inspector/ConsoleTypes.h" | 10 #include "core/inspector/ConsoleTypes.h" |
11 #include "core/workers/ParentFrameTaskRunners.h" | |
11 #include "core/workers/WorkerLoaderProxy.h" | 12 #include "core/workers/WorkerLoaderProxy.h" |
12 #include "wtf/Forward.h" | 13 #include "wtf/Forward.h" |
13 | 14 |
14 namespace blink { | 15 namespace blink { |
15 | 16 |
16 class ExecutionContext; | 17 class ExecutionContext; |
17 class ParentFrameTaskRunners; | |
18 class SourceLocation; | 18 class SourceLocation; |
19 class WorkerInspectorProxy; | 19 class WorkerInspectorProxy; |
20 class WorkerLoaderProxy; | 20 class WorkerLoaderProxy; |
21 class WorkerThread; | 21 class WorkerThread; |
22 class WorkerThreadStartupData; | 22 class WorkerThreadStartupData; |
23 | 23 |
24 class CORE_EXPORT ThreadedMessagingProxyBase | 24 class CORE_EXPORT ThreadedMessagingProxyBase |
25 : private WorkerLoaderProxyProvider { | 25 : private WorkerLoaderProxyProvider { |
26 public: | 26 public: |
27 void terminateGlobalScope(); | 27 void terminateGlobalScope(); |
28 | 28 |
29 virtual void workerThreadCreated(); | 29 virtual void workerThreadCreated(); |
30 | 30 |
31 // This method should be called in the destructor of the object which | 31 // This method should be called in the destructor of the object which |
32 // initially created it. This object could either be a Worker or a Worklet. | 32 // initially created it. This object could either be a Worker or a Worklet. |
33 virtual void parentObjectDestroyed(); | 33 virtual void parentObjectDestroyed(); |
34 | 34 |
35 void countFeature(UseCounter::Feature); | 35 void countFeature(UseCounter::Feature); |
36 void countDeprecation(UseCounter::Feature); | 36 void countDeprecation(UseCounter::Feature); |
37 | 37 |
38 void reportConsoleMessage(MessageSource, | 38 void reportConsoleMessage(MessageSource, |
39 MessageLevel, | 39 MessageLevel, |
40 const String& message, | 40 const String& message, |
41 std::unique_ptr<SourceLocation>); | 41 std::unique_ptr<SourceLocation>); |
42 void postMessageToPageInspector(const String&); | 42 void postMessageToPageInspector(const String&); |
43 | 43 |
44 // 'virtual' for testing. | 44 // 'virtual' for testing. |
45 virtual void workerThreadTerminated(); | 45 virtual void workerThreadTerminated(); |
46 | 46 |
47 // Accessed from both the parent thread and the worker. | |
47 ExecutionContext* getExecutionContext() const { | 48 ExecutionContext* getExecutionContext() const { |
48 return m_executionContext.get(); | 49 return m_executionContext.get(); |
49 } | 50 } |
50 | 51 |
52 // Accessed from both the parent thread and the worker. | |
51 ParentFrameTaskRunners* getParentFrameTaskRunners() { | 53 ParentFrameTaskRunners* getParentFrameTaskRunners() { |
52 return m_parentFrameTaskRunners.get(); | 54 return m_parentFrameTaskRunners.get(); |
53 } | 55 } |
54 | 56 |
55 // Number of live messaging proxies, used by leak detection. | 57 // Number of live messaging proxies, used by leak detection. |
56 static int proxyCount(); | 58 static int proxyCount(); |
57 | 59 |
58 protected: | 60 protected: |
59 ThreadedMessagingProxyBase(ExecutionContext*); | 61 ThreadedMessagingProxyBase(ExecutionContext*); |
60 ~ThreadedMessagingProxyBase() override; | 62 ~ThreadedMessagingProxyBase() override; |
61 | 63 |
62 void initializeWorkerThread(std::unique_ptr<WorkerThreadStartupData>); | 64 void initializeWorkerThread(std::unique_ptr<WorkerThreadStartupData>); |
63 virtual std::unique_ptr<WorkerThread> createWorkerThread( | 65 virtual std::unique_ptr<WorkerThread> createWorkerThread( |
64 double originTime) = 0; | 66 double originTime) = 0; |
65 | 67 |
66 WorkerThread* workerThread() const { return m_workerThread.get(); } | 68 WorkerThread* workerThread() const { return m_workerThread.get(); } |
67 | 69 |
68 bool askedToTerminate() const { return m_askedToTerminate; } | 70 bool askedToTerminate() const { return m_askedToTerminate; } |
69 | 71 |
70 PassRefPtr<WorkerLoaderProxy> loaderProxy() { return m_loaderProxy; } | 72 PassRefPtr<WorkerLoaderProxy> loaderProxy() { return m_loaderProxy; } |
71 WorkerInspectorProxy* workerInspectorProxy() { | 73 WorkerInspectorProxy* workerInspectorProxy() const { |
72 return m_workerInspectorProxy.get(); | 74 return m_workerInspectorProxy.get(); |
73 } | 75 } |
74 | 76 |
75 // Returns true if this is called on the parent context thread. | 77 // Returns true if this is called on the parent context thread. |
76 bool isParentContextThread() const; | 78 bool isParentContextThread() const; |
77 | 79 |
78 // WorkerLoaderProxyProvider | 80 // WorkerLoaderProxyProvider |
79 // These methods are called on different threads to schedule loading | 81 // These methods are called on different threads to schedule loading |
80 // requests and to send callbacks back to WorkerGlobalScope. | 82 // requests and to send callbacks back to WorkerGlobalScope. |
81 void postTaskToLoader(const WebTraceLocation&, | 83 void postTaskToLoader(const WebTraceLocation&, |
82 std::unique_ptr<ExecutionContextTask>) override; | 84 std::unique_ptr<ExecutionContextTask>) override; |
83 void postTaskToWorkerGlobalScope( | 85 void postTaskToWorkerGlobalScope( |
84 const WebTraceLocation&, | 86 const WebTraceLocation&, |
85 std::unique_ptr<WTF::CrossThreadClosure>) override; | 87 std::unique_ptr<WTF::CrossThreadClosure>) override; |
86 | 88 |
87 private: | 89 private: |
88 friend class InProcessWorkerMessagingProxyForTest; | 90 friend class InProcessWorkerMessagingProxyForTest; |
89 friend class ThreadedWorkletMessagingProxyForTest; | 91 friend class ThreadedWorkletMessagingProxyForTest; |
90 | 92 |
91 void parentObjectDestroyedInternal(); | 93 void parentObjectDestroyedInternal(); |
92 | 94 |
93 Persistent<ExecutionContext> m_executionContext; | 95 // Accessed cross-thread when worker thread posts tasks to the parent. |
96 CrossThreadPersistent<ExecutionContext> m_executionContext; | |
haraken
2017/02/20 23:57:18
Ditto.
| |
94 Persistent<WorkerInspectorProxy> m_workerInspectorProxy; | 97 Persistent<WorkerInspectorProxy> m_workerInspectorProxy; |
95 Persistent<ParentFrameTaskRunners> m_parentFrameTaskRunners; | 98 // Accessed cross-thread when worker thread posts tasks to the parent. |
99 CrossThreadPersistent<ParentFrameTaskRunners> m_parentFrameTaskRunners; | |
96 | 100 |
97 std::unique_ptr<WorkerThread> m_workerThread; | 101 std::unique_ptr<WorkerThread> m_workerThread; |
98 | 102 |
99 RefPtr<WorkerLoaderProxy> m_loaderProxy; | 103 RefPtr<WorkerLoaderProxy> m_loaderProxy; |
100 | 104 |
101 bool m_mayBeDestroyed; | 105 bool m_mayBeDestroyed; |
102 bool m_askedToTerminate; | 106 bool m_askedToTerminate; |
103 }; | 107 }; |
104 | 108 |
105 } // namespace blink | 109 } // namespace blink |
106 | 110 |
107 #endif // ThreadedMessagingProxyBase_h | 111 #endif // ThreadedMessagingProxyBase_h |
OLD | NEW |