Changeset 46507 in webkit
- Timestamp:
- Jul 28, 2009 5:08:02 PM (15 years ago)
- Location:
- trunk/WebCore
- Files:
-
- 16 edited
- 2 copied
Legend:
- Unmodified
- Added
- Removed
-
trunk/WebCore/ChangeLog
r46504 r46507 1 2009-07-28 Drew Wilson <atwilson@google.com> 2 3 Reviewed by David Levin. 4 5 Refactored dedicated-worker-specific code from WorkerThread into DedicatedWorkerThread class. 6 7 WorkerThread needs to be refactored to separate out dedicated-worker functionality. 8 https://bugs.webkit.org/show_bug.cgi?id=27697 9 10 This is just a refactoring, so existing tests suffice. 11 12 * GNUmakefile.am: 13 Added DedicatedWorkerThread.h/.cpp 14 * WebCore.gypi: 15 Added DedicatedWorkerThread.h/.cpp 16 * WebCore.pro: 17 Added DedicatedWorkerThread.h/.cpp 18 * WebCore.vcproj/WebCore.vcproj: 19 Added DedicatedWorkerThread.h/.cpp 20 * WebCore.xcodeproj/project.pbxproj: 21 Added DedicatedWorkerThread.h/.cpp 22 * bindings/js/WorkerScriptController.cpp: 23 (WebCore::WorkerScriptController::evaluate): 24 Removed code to track pending activity - this is handled by DedicatedWorkerContext::importScripts() now. 25 * bindings/v8/WorkerScriptController.cpp: 26 (WebCore::WorkerScriptController::evaluate): 27 Removed code to track pending activity - this is handled by DedicatedWorkerContext::importScripts() now. 28 * workers/DedicatedWorkerContext.cpp: 29 (WebCore::DedicatedWorkerContext::DedicatedWorkerContext): 30 (WebCore::DedicatedWorkerContext::addMessage): 31 Forwards console messages to parent document. 32 (WebCore::DedicatedWorkerContext::importScripts): 33 Now sends the updated pending activity status after importing scripts. 34 (WebCore::DedicatedWorkerContext::thread): 35 Helper routine that casts WorkerThread to DedicatedWorkerThread. 36 * workers/DedicatedWorkerContext.h: 37 (WebCore::DedicatedWorkerContext::create): 38 * workers/DedicatedWorkerThread.cpp: Added. 39 (WebCore::DedicatedWorkerThread::create): 40 (WebCore::DedicatedWorkerThread::DedicatedWorkerThread): 41 (WebCore::DedicatedWorkerThread::~DedicatedWorkerThread): 42 (WebCore::DedicatedWorkerThread::createWorkerContext): 43 Implementation of the base class factory method to create the appropriate worker context. 44 (WebCore::DedicatedWorkerThread::runEventLoop): 45 Reports pending activity before running the event loop. 46 * workers/DedicatedWorkerThread.h: Added. 47 (WebCore::DedicatedWorkerThread::workerObjectProxy): 48 Moved from base class. 49 * workers/WorkerContext.cpp: 50 * workers/WorkerContext.h: 51 * workers/WorkerMessagingProxy.cpp: 52 (WebCore::WorkerMessagingProxy::startWorkerContext): 53 Now creates DedicatedWorkerThread. 54 (WebCore::WorkerMessagingProxy::workerThreadCreated): 55 Now is passed a DedicatedWorkerThread. 56 * workers/WorkerMessagingProxy.h: 57 * workers/WorkerThread.cpp: 58 (WebCore::WorkerThread::WorkerThread): 59 Moved workerObjectProxy param into derived class constructor. 60 (WebCore::WorkerThread::workerThread): 61 (WebCore::WorkerThread::runEventLoop): 62 Moved the event loop execution into a virtual function so DedicatedWorkerThread could report pending activity first. 63 * workers/WorkerThread.h: 64 (WebCore::WorkerThread::workerContext): 65 1 66 2009-07-28 Nate Chapin <japhet@chromium.org> 2 67 -
trunk/WebCore/GNUmakefile.am
r46492 r46507 2346 2346 WebCore/workers/DedicatedWorkerContext.cpp \ 2347 2347 WebCore/workers/DedicatedWorkerContext.h \ 2348 WebCore/workers/DedicatedWorkerThread.cpp \ 2349 WebCore/workers/DedicatedWorkerThread.h 2348 2350 WebCore/workers/GenericWorkerTask.h \ 2349 2351 WebCore/workers/Worker.cpp \ -
trunk/WebCore/WebCore.gypi
r46490 r46507 3316 3316 'workers/DedicatedWorkerContext.cpp', 3317 3317 'workers/DedicatedWorkerContext.h', 3318 'workers/DedicatedWorkerThread.cpp', 3319 'workers/DedicatedWorkerThread.h', 3318 3320 'workers/GenericWorkerTask.h', 3319 3321 'workers/SharedWorker.cpp', -
trunk/WebCore/WebCore.pro
r46491 r46507 2030 2030 wml/WMLVariables.h \ 2031 2031 workers/AbstractWorker.h \ 2032 workers/DedicatedWorkerContext.h \ 2033 workers/DedicatedWorkerThread.h \ 2032 2034 workers/SharedWorker.h \ 2033 2035 workers/WorkerContext.h \ -
trunk/WebCore/WebCore.vcproj/WebCore.vcproj
r46490 r46507 24081 24081 </File> 24082 24082 <File 24083 RelativePath="..\workers\DedicatedWorkerThread.cpp" 24084 > 24085 </File> 24086 <File 24087 RelativePath="..\workers\DedicatedWorkerThread.h" 24088 > 24089 </File> 24090 <File 24083 24091 RelativePath="..\workers\GenericWorkerTask.h" 24084 24092 > -
trunk/WebCore/WebCore.xcodeproj/project.pbxproj
r46490 r46507 674 674 418F88050FF957AF0080F045 /* JSAbstractWorker.h in Headers */ = {isa = PBXBuildFile; fileRef = 418F88030FF957AE0080F045 /* JSAbstractWorker.h */; }; 675 675 419536510F68222400D0C679 /* ScriptObjectQuarantine.h in Headers */ = {isa = PBXBuildFile; fileRef = 419536500F68222400D0C679 /* ScriptObjectQuarantine.h */; }; 676 41A3D58E101C152D00316D07 /* DedicatedWorkerThread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 41A3D58C101C152D00316D07 /* DedicatedWorkerThread.cpp */; }; 677 41A3D58F101C152D00316D07 /* DedicatedWorkerThread.h in Headers */ = {isa = PBXBuildFile; fileRef = 41A3D58D101C152D00316D07 /* DedicatedWorkerThread.h */; }; 676 678 41BF700B0FE86F49005E8DEC /* MessagePortChannel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 41BF70090FE86F49005E8DEC /* MessagePortChannel.cpp */; }; 677 679 41BF700C0FE86F49005E8DEC /* MessagePortChannel.h in Headers */ = {isa = PBXBuildFile; fileRef = 41BF700A0FE86F49005E8DEC /* MessagePortChannel.h */; }; … … 5645 5647 418F88030FF957AE0080F045 /* JSAbstractWorker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSAbstractWorker.h; sourceTree = "<group>"; }; 5646 5648 419536500F68222400D0C679 /* ScriptObjectQuarantine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScriptObjectQuarantine.h; sourceTree = "<group>"; }; 5649 41A3D58C101C152D00316D07 /* DedicatedWorkerThread.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DedicatedWorkerThread.cpp; path = workers/DedicatedWorkerThread.cpp; sourceTree = "<group>"; }; 5650 41A3D58D101C152D00316D07 /* DedicatedWorkerThread.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DedicatedWorkerThread.h; path = workers/DedicatedWorkerThread.h; sourceTree = "<group>"; }; 5647 5651 41BF70090FE86F49005E8DEC /* MessagePortChannel.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MessagePortChannel.cpp; sourceTree = "<group>"; }; 5648 5652 41BF700A0FE86F49005E8DEC /* MessagePortChannel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MessagePortChannel.h; sourceTree = "<group>"; }; … … 9929 9933 isa = PBXGroup; 9930 9934 children = ( 9935 41A3D58C101C152D00316D07 /* DedicatedWorkerThread.cpp */, 9936 41A3D58D101C152D00316D07 /* DedicatedWorkerThread.h */, 9931 9937 4162A44D101145AE00DFF3ED /* DedicatedWorkerContext.cpp */, 9932 9938 4162A44E101145AE00DFF3ED /* DedicatedWorkerContext.h */, … … 17057 17063 7A74ECBB101839A600BF939E /* InspectorBackend.h in Headers */, 17058 17064 7A1E88F6101CC384000C4DF5 /* ScriptArray.h in Headers */, 17065 41A3D58F101C152D00316D07 /* DedicatedWorkerThread.h in Headers */, 17059 17066 ); 17060 17067 runOnlyForDeploymentPostprocessing = 0; … … 19098 19105 7A74ECBD101839DA00BF939E /* JSInspectorBackendCustom.cpp in Sources */, 19099 19106 7A1E88F5101CC384000C4DF5 /* ScriptArray.cpp in Sources */, 19107 41A3D58E101C152D00316D07 /* DedicatedWorkerThread.cpp in Sources */, 19100 19108 ); 19101 19109 runOnlyForDeploymentPostprocessing = 0; -
trunk/WebCore/bindings/js/WorkerScriptController.cpp
r46431 r46507 114 114 m_workerContextWrapper->globalData()->timeoutChecker.stop(); 115 115 116 m_workerContext->thread()->workerObjectProxy().reportPendingActivity(m_workerContext->hasPendingActivity());117 118 116 if (comp.complType() == Normal || comp.complType() == ReturnValue) 119 117 return comp.value(); -
trunk/WebCore/bindings/v8/WorkerScriptController.cpp
r46365 r46507 83 83 } 84 84 85 m_workerContext->thread()->workerObjectProxy().reportPendingActivity(m_workerContext->hasPendingActivity());86 87 85 return result; 88 86 } -
trunk/WebCore/workers/DedicatedWorkerContext.cpp
r46419 r46507 35 35 #include "DedicatedWorkerContext.h" 36 36 37 #include "DedicatedWorkerThread.h" 37 38 #include "DOMWindow.h" 38 39 #include "MessageEvent.h" 39 40 #include "WorkerObjectProxy.h" 40 #include "WorkerThread.h"41 41 42 42 namespace WebCore { 43 43 44 DedicatedWorkerContext::DedicatedWorkerContext(const KURL& url, const String& userAgent, WorkerThread* thread)44 DedicatedWorkerContext::DedicatedWorkerContext(const KURL& url, const String& userAgent, DedicatedWorkerThread* thread) 45 45 : WorkerContext(url, userAgent, thread) 46 46 { … … 62 62 if (!errorHandled) 63 63 thread()->workerObjectProxy().postExceptionToWorkerObject(errorMessage, lineNumber, sourceURL); 64 } 65 66 void DedicatedWorkerContext::addMessage(MessageDestination destination, MessageSource source, MessageType type, MessageLevel level, const String& message, unsigned lineNumber, const String& sourceURL) 67 { 68 thread()->workerObjectProxy().postConsoleMessageToWorkerObject(destination, source, type, level, message, lineNumber, sourceURL); 64 69 } 65 70 … … 97 102 } 98 103 104 void DedicatedWorkerContext::importScripts(const Vector<String>& urls, const String& callerURL, int callerLine, ExceptionCode& ec) 105 { 106 Base::importScripts(urls, callerURL, callerLine, ec); 107 thread()->workerObjectProxy().reportPendingActivity(hasPendingActivity()); 108 } 109 110 DedicatedWorkerThread* DedicatedWorkerContext::thread() 111 { 112 return static_cast<DedicatedWorkerThread*>(Base::thread()); 113 } 114 99 115 } // namespace WebCore 100 116 -
trunk/WebCore/workers/DedicatedWorkerContext.h
r46369 r46507 36 36 namespace WebCore { 37 37 38 class DedicatedWorkerThread; 39 38 40 class DedicatedWorkerContext : public WorkerContext { 39 41 public: 40 static PassRefPtr<DedicatedWorkerContext> create(const KURL& url, const String& userAgent, WorkerThread* thread) 42 typedef WorkerContext Base; 43 static PassRefPtr<DedicatedWorkerContext> create(const KURL& url, const String& userAgent, DedicatedWorkerThread* thread) 41 44 { 42 45 return adoptRef(new DedicatedWorkerContext(url, userAgent, thread)); … … 44 47 virtual ~DedicatedWorkerContext(); 45 48 49 // WorkerUtils 50 virtual void importScripts(const Vector<String>& urls, const String& callerURL, int callerLine, ExceptionCode&); 51 52 // ScriptExecutionContext 46 53 virtual void reportException(const String& errorMessage, int lineNumber, const String& sourceURL); 54 virtual void addMessage(MessageDestination, MessageSource, MessageType, MessageLevel, const String& message, unsigned lineNumber, const String& sourceURL); 47 55 48 56 // EventTarget … … 55 63 void dispatchMessage(const String&, PassRefPtr<MessagePort>); 56 64 65 DedicatedWorkerThread* thread(); 57 66 private: 58 DedicatedWorkerContext(const KURL&, const String&, WorkerThread*);67 DedicatedWorkerContext(const KURL&, const String&, DedicatedWorkerThread*); 59 68 RefPtr<EventListener> m_onmessageListener; 60 69 }; -
trunk/WebCore/workers/DedicatedWorkerThread.cpp
r46506 r46507 29 29 */ 30 30 31 #ifndef DedicatedWorkerContext_h 32 #define DedicatedWorkerContext_h 31 #include "config.h" 33 32 34 #include "WorkerContext.h" 33 #if ENABLE(WORKERS) 34 35 #include "DedicatedWorkerThread.h" 36 37 #include "DedicatedWorkerContext.h" 38 #include "WorkerObjectProxy.h" 35 39 36 40 namespace WebCore { 37 41 38 class DedicatedWorkerContext : public WorkerContext { 39 public: 40 static PassRefPtr<DedicatedWorkerContext> create(const KURL& url, const String& userAgent, WorkerThread* thread) 41 { 42 return adoptRef(new DedicatedWorkerContext(url, userAgent, thread)); 43 } 44 virtual ~DedicatedWorkerContext(); 42 PassRefPtr<DedicatedWorkerThread> DedicatedWorkerThread::create(const KURL& scriptURL, const String& userAgent, const String& sourceCode, WorkerLoaderProxy& workerLoaderProxy, WorkerObjectProxy& workerObjectProxy) 43 { 44 return adoptRef(new DedicatedWorkerThread(scriptURL, userAgent, sourceCode, workerLoaderProxy, workerObjectProxy)); 45 } 45 46 46 virtual void reportException(const String& errorMessage, int lineNumber, const String& sourceURL); 47 DedicatedWorkerThread::DedicatedWorkerThread(const KURL& url, const String& userAgent, const String& sourceCode, WorkerLoaderProxy& workerLoaderProxy, WorkerObjectProxy& workerObjectProxy) 48 : WorkerThread(url, userAgent, sourceCode, workerLoaderProxy) 49 , m_workerObjectProxy(workerObjectProxy) 50 { 51 } 47 52 48 // EventTarget 49 virtual DedicatedWorkerContext* toDedicatedWorkerContext() { return this; } 50 void postMessage(const String&, ExceptionCode&); 51 void postMessage(const String&, MessagePort*, ExceptionCode&); 52 void setOnmessage(PassRefPtr<EventListener> eventListener) { m_onmessageListener = eventListener; } 53 EventListener* onmessage() const { return m_onmessageListener.get(); } 53 DedicatedWorkerThread::~DedicatedWorkerThread() 54 { 55 } 54 56 55 void dispatchMessage(const String&, PassRefPtr<MessagePort>); 57 PassRefPtr<WorkerContext> DedicatedWorkerThread::createWorkerContext(const KURL& url, const String& userAgent) 58 { 59 return DedicatedWorkerContext::create(url, userAgent, this); 60 } 56 61 57 private: 58 DedicatedWorkerContext(const KURL&, const String&, WorkerThread*); 59 RefPtr<EventListener> m_onmessageListener; 60 }; 62 void DedicatedWorkerThread::runEventLoop() 63 { 64 // Notify the parent object of our current active state before calling the superclass to run the event loop. 65 m_workerObjectProxy.reportPendingActivity(workerContext()->hasPendingActivity()); 66 WorkerThread::runEventLoop(); 67 } 61 68 62 69 } // namespace WebCore 63 70 64 #endif // DedicatedWorkerContext_h71 #endif // ENABLE(WORKERS) -
trunk/WebCore/workers/DedicatedWorkerThread.h
r46506 r46507 28 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 29 */ 30 #ifndef DedicatedWorkerThread_h 31 #define DedicatedWorkerThread_h 30 32 31 #ifndef DedicatedWorkerContext_h 32 #define DedicatedWorkerContext_h 33 #if ENABLE(WORKERS) 33 34 34 #include "Worker Context.h"35 #include "WorkerThread.h" 35 36 36 37 namespace WebCore { 37 38 38 class DedicatedWorkerContext : public WorkerContext { 39 class WorkerObjectProxy; 40 41 class DedicatedWorkerThread : public WorkerThread { 39 42 public: 40 static PassRefPtr<DedicatedWorkerContext> create(const KURL& url, const String& userAgent, WorkerThread* thread) 41 { 42 return adoptRef(new DedicatedWorkerContext(url, userAgent, thread)); 43 } 44 virtual ~DedicatedWorkerContext(); 43 static PassRefPtr<DedicatedWorkerThread> create(const KURL& scriptURL, const String& userAgent, const String& sourceCode, WorkerLoaderProxy&, WorkerObjectProxy&); 44 WorkerObjectProxy& workerObjectProxy() const { return m_workerObjectProxy; } 45 ~DedicatedWorkerThread(); 45 46 46 virtual void reportException(const String& errorMessage, int lineNumber, const String& sourceURL); 47 48 // EventTarget 49 virtual DedicatedWorkerContext* toDedicatedWorkerContext() { return this; } 50 void postMessage(const String&, ExceptionCode&); 51 void postMessage(const String&, MessagePort*, ExceptionCode&); 52 void setOnmessage(PassRefPtr<EventListener> eventListener) { m_onmessageListener = eventListener; } 53 EventListener* onmessage() const { return m_onmessageListener.get(); } 54 55 void dispatchMessage(const String&, PassRefPtr<MessagePort>); 47 protected: 48 virtual PassRefPtr<WorkerContext> createWorkerContext(const KURL& url, const String& userAgent); 49 virtual void runEventLoop(); 56 50 57 51 private: 58 DedicatedWorkerContext(const KURL&, const String&, WorkerThread*); 59 RefPtr<EventListener> m_onmessageListener; 52 DedicatedWorkerThread(const KURL&, const String& userAgent, const String& sourceCode, WorkerLoaderProxy&, WorkerObjectProxy&); 53 54 WorkerObjectProxy& m_workerObjectProxy; 60 55 }; 61 62 56 } // namespace WebCore 63 57 64 #endif // DedicatedWorkerContext_h 58 #endif // ENABLE(WORKERS) 59 60 #endif // DedicatedWorkerThread_h -
trunk/WebCore/workers/WorkerContext.cpp
r46419 r46507 139 139 } 140 140 141 void WorkerContext::addMessage(MessageDestination destination, MessageSource source, MessageType type, MessageLevel level, const String& message, unsigned lineNumber, const String& sourceURL)142 {143 m_thread->workerObjectProxy().postConsoleMessageToWorkerObject(destination, source, type, level, message, lineNumber, sourceURL);144 }145 146 141 void WorkerContext::resourceRetrievedByXMLHttpRequest(unsigned long, const ScriptString&) 147 142 { -
trunk/WebCore/workers/WorkerContext.h
r46419 r46507 68 68 bool hasPendingActivity() const; 69 69 70 virtual void reportException(const String& errorMessage, int lineNumber, const String& sourceURL) = 0;71 virtual void addMessage(MessageDestination, MessageSource, MessageType, MessageLevel, const String& message, unsigned lineNumber, const String& sourceURL);72 70 virtual void resourceRetrievedByXMLHttpRequest(unsigned long identifier, const ScriptString& sourceString); 73 71 virtual void scriptImported(unsigned long identifier, const String& sourceString); … … 83 81 84 82 // WorkerUtils 85 v oid importScripts(const Vector<String>& urls, const String& callerURL, int callerLine, ExceptionCode&);83 virtual void importScripts(const Vector<String>& urls, const String& callerURL, int callerLine, ExceptionCode&); 86 84 WorkerNavigator* navigator() const; 87 85 -
trunk/WebCore/workers/WorkerMessagingProxy.cpp
r46419 r46507 33 33 34 34 #include "DedicatedWorkerContext.h" 35 #include "DedicatedWorkerThread.h" 35 36 #include "DOMWindow.h" 36 37 #include "Document.h" … … 39 40 #include "ScriptExecutionContext.h" 40 41 #include "Worker.h" 41 #include "WorkerThread.h"42 42 43 43 namespace WebCore { … … 221 221 void WorkerMessagingProxy::startWorkerContext(const KURL& scriptURL, const String& userAgent, const String& sourceCode) 222 222 { 223 RefPtr< WorkerThread> thread =WorkerThread::create(scriptURL, userAgent, sourceCode, *this, *this);223 RefPtr<DedicatedWorkerThread> thread = DedicatedWorkerThread::create(scriptURL, userAgent, sourceCode, *this, *this); 224 224 workerThreadCreated(thread); 225 225 thread->start(); … … 276 276 } 277 277 278 void WorkerMessagingProxy::workerThreadCreated(PassRefPtr< WorkerThread> workerThread)278 void WorkerMessagingProxy::workerThreadCreated(PassRefPtr<DedicatedWorkerThread> workerThread) 279 279 { 280 280 m_workerThread = workerThread; -
trunk/WebCore/workers/WorkerMessagingProxy.h
r46419 r46507 42 42 namespace WebCore { 43 43 44 class DedicatedWorkerThread; 44 45 class MessagePortChannel; 45 46 class ScriptExecutionContext; 46 47 class String; 47 48 class Worker; 48 class WorkerThread;49 49 50 50 class WorkerMessagingProxy : public WorkerContextProxy, public WorkerObjectProxy, public WorkerLoaderProxy, public Noncopyable { … … 75 75 virtual void postTaskForModeToWorkerContext(PassRefPtr<ScriptExecutionContext::Task>, const String& mode); 76 76 77 void workerThreadCreated(PassRefPtr< WorkerThread>);77 void workerThreadCreated(PassRefPtr<DedicatedWorkerThread>); 78 78 79 79 // Only use this method on the worker object thread. … … 94 94 RefPtr<ScriptExecutionContext> m_scriptExecutionContext; 95 95 Worker* m_workerObject; 96 RefPtr< WorkerThread> m_workerThread;96 RefPtr<DedicatedWorkerThread> m_workerThread; 97 97 98 98 unsigned m_unconfirmedMessageCount; // Unconfirmed messages from worker object to worker thread. -
trunk/WebCore/workers/WorkerThread.cpp
r46369 r46507 36 36 #include "ScriptSourceCode.h" 37 37 #include "ScriptValue.h" 38 #include "WorkerObjectProxy.h"39 38 40 39 #include <utility> … … 63 62 } 64 63 65 PassRefPtr<WorkerThread> WorkerThread::create(const KURL& scriptURL, const String& userAgent, const String& sourceCode, WorkerLoaderProxy& workerLoaderProxy, WorkerObjectProxy& workerObjectProxy) 66 { 67 return adoptRef(new WorkerThread(scriptURL, userAgent, sourceCode, workerLoaderProxy, workerObjectProxy)); 68 } 69 70 WorkerThread::WorkerThread(const KURL& scriptURL, const String& userAgent, const String& sourceCode, WorkerLoaderProxy& workerLoaderProxy, WorkerObjectProxy& workerObjectProxy) 64 WorkerThread::WorkerThread(const KURL& scriptURL, const String& userAgent, const String& sourceCode, WorkerLoaderProxy& workerLoaderProxy) 71 65 : m_threadID(0) 72 66 , m_workerLoaderProxy(workerLoaderProxy) 73 , m_workerObjectProxy(workerObjectProxy)74 67 , m_startupData(WorkerThreadStartupData::create(scriptURL, userAgent, sourceCode)) 75 68 { … … 102 95 { 103 96 MutexLocker lock(m_threadCreationMutex); 104 m_workerContext = DedicatedWorkerContext::create(m_startupData->m_scriptURL, m_startupData->m_userAgent, this); 97 m_workerContext = createWorkerContext(m_startupData->m_scriptURL, m_startupData->m_userAgent); 98 105 99 if (m_runLoop.terminated()) { 106 100 // The worker was terminated before the thread had a chance to run. Since the context didn't exist yet, … … 117 111 m_startupData.clear(); 118 112 119 m_workerObjectProxy.reportPendingActivity(m_workerContext->hasPendingActivity()); 120 121 // Blocks until terminated. 122 m_runLoop.run(m_workerContext.get()); 113 runEventLoop(); 123 114 124 115 ThreadIdentifier threadID = m_threadID; … … 135 126 136 127 return 0; 128 } 129 130 void WorkerThread::runEventLoop() 131 { 132 // Does not return until terminated. 133 m_runLoop.run(m_workerContext.get()); 137 134 } 138 135 -
trunk/WebCore/workers/WorkerThread.h
r44515 r46507 41 41 class WorkerContext; 42 42 class WorkerLoaderProxy; 43 class WorkerObjectProxy;44 43 struct WorkerThreadStartupData; 45 44 46 45 class WorkerThread : public RefCounted<WorkerThread> { 47 46 public: 48 static PassRefPtr<WorkerThread> create(const KURL& scriptURL, const String& userAgent, const String& sourceCode, WorkerLoaderProxy&, WorkerObjectProxy&); 49 ~WorkerThread(); 47 virtual ~WorkerThread(); 50 48 51 49 bool start(); … … 55 53 WorkerRunLoop& runLoop() { return m_runLoop; } 56 54 WorkerLoaderProxy& workerLoaderProxy() const { return m_workerLoaderProxy; } 57 WorkerObjectProxy& workerObjectProxy() const { return m_workerObjectProxy; } 55 56 protected: 57 WorkerThread(const KURL&, const String& userAgent, const String& sourceCode, WorkerLoaderProxy&); 58 59 // Factory method for creating a new worker context for the thread. 60 virtual PassRefPtr<WorkerContext> createWorkerContext(const KURL& url, const String& userAgent) = 0; 61 62 // Executes the event loop for the worker thread. Derived classes can override to perform actions before/after entering the event loop. 63 virtual void runEventLoop(); 64 65 WorkerContext* workerContext() { return m_workerContext.get(); } 58 66 59 67 private: 60 WorkerThread(const KURL&, const String& userAgent, const String& sourceCode, WorkerLoaderProxy&, WorkerObjectProxy&); 61 68 // Static function executed as the core routine on the new thread. Passed a pointer to a WorkerThread object. 62 69 static void* workerThreadStart(void*); 63 70 void* workerThread(); … … 66 73 WorkerRunLoop m_runLoop; 67 74 WorkerLoaderProxy& m_workerLoaderProxy; 68 WorkerObjectProxy& m_workerObjectProxy;69 75 70 76 RefPtr<WorkerContext> m_workerContext;
Note: See TracChangeset
for help on using the changeset viewer.