Index: third_party/WebKit/WebCore/dom/WorkerContext.cpp |
=================================================================== |
--- third_party/WebKit/WebCore/dom/WorkerContext.cpp (revision 9391) |
+++ third_party/WebKit/WebCore/dom/WorkerContext.cpp (working copy) |
@@ -1,213 +1,213 @@ |
-/* |
- * Copyright (C) 2008 Apple Inc. All Rights Reserved. |
- * |
- * Redistribution and use in source and binary forms, with or without |
- * modification, are permitted provided that the following conditions |
- * are met: |
- * 1. Redistributions of source code must retain the above copyright |
- * notice, this list of conditions and the following disclaimer. |
- * 2. Redistributions in binary form must reproduce the above copyright |
- * notice, this list of conditions and the following disclaimer in the |
- * documentation and/or other materials provided with the distribution. |
- * |
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY |
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR |
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, |
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, |
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR |
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY |
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
- * |
- */ |
- |
-#include "config.h" |
- |
-#if ENABLE(WORKERS) |
- |
-#include "WorkerContext.h" |
- |
-#include "ActiveDOMObject.h" |
-#include "DOMTimer.h" |
-#include "DOMWindow.h" |
-#include "Event.h" |
-#include "EventException.h" |
-#include "GenericWorkerTask.h" |
-#include "NotImplemented.h" |
-#include "SecurityOrigin.h" |
-#include "WorkerLocation.h" |
-#include "WorkerMessagingProxy.h" |
-#include "WorkerNavigator.h" |
-#include "WorkerThread.h" |
-#include <wtf/RefPtr.h> |
- |
-namespace WebCore { |
- |
-WorkerContext::WorkerContext(const KURL& url, const String& userAgent, WorkerThread* thread) |
- : m_url(url) |
- , m_userAgent(userAgent) |
- , m_location(WorkerLocation::create(url)) |
- , m_script(new WorkerScriptController(this)) |
- , m_thread(thread) |
-{ |
- setSecurityOrigin(SecurityOrigin::create(url)); |
-} |
- |
-WorkerContext::~WorkerContext() |
-{ |
- ASSERT(currentThread() == m_thread->threadID()); |
- |
- m_thread->messagingProxy()->workerContextDestroyed(); |
-} |
- |
-ScriptExecutionContext* WorkerContext::scriptExecutionContext() const |
-{ |
- return const_cast<WorkerContext*>(this); |
-} |
- |
-const KURL& WorkerContext::virtualURL() const |
-{ |
- return m_url; |
-} |
- |
-KURL WorkerContext::virtualCompleteURL(const String& url) const |
-{ |
- return completeURL(url); |
-} |
- |
-KURL WorkerContext::completeURL(const String& url) const |
-{ |
- // Always return a null URL when passed a null string. |
- // FIXME: Should we change the KURL constructor to have this behavior? |
- if (url.isNull()) |
- return KURL(); |
- // FIXME: does this need to provide a charset, like Document::completeURL does? |
- return KURL(m_location->url(), url); |
-} |
- |
-WorkerNavigator* WorkerContext::navigator() const |
-{ |
- if (!m_navigator) |
- m_navigator = WorkerNavigator::create(m_userAgent); |
- return m_navigator.get(); |
-} |
- |
-bool WorkerContext::hasPendingActivity() const |
-{ |
- ActiveDOMObjectsMap& activeObjects = activeDOMObjects(); |
- ActiveDOMObjectsMap::const_iterator activeObjectsEnd = activeObjects.end(); |
- for (ActiveDOMObjectsMap::const_iterator iter = activeObjects.begin(); iter != activeObjectsEnd; ++iter) { |
- if (iter->first->hasPendingActivity()) |
- return true; |
- } |
- return false; |
-} |
- |
-void WorkerContext::reportException(const String& errorMessage, int lineNumber, const String& sourceURL) |
-{ |
- m_thread->messagingProxy()->postWorkerException(errorMessage, lineNumber, sourceURL); |
-} |
- |
-static void addMessageTask(ScriptExecutionContext* context, WorkerMessagingProxy* messagingProxy, MessageDestination destination, MessageSource source, MessageLevel level, const String& message, unsigned lineNumber, const String& sourceURL) |
-{ |
- if (messagingProxy->askedToTerminate()) |
- return; |
- context->addMessage(destination, source, level, message, lineNumber, sourceURL); |
-} |
- |
-void WorkerContext::addMessage(MessageDestination destination, MessageSource source, MessageLevel level, const String& message, unsigned lineNumber, const String& sourceURL) |
-{ |
- postTaskToWorkerObject(createCallbackTask(&addMessageTask, m_thread->messagingProxy(), destination, source, level, message, lineNumber, sourceURL)); |
-} |
- |
-void WorkerContext::resourceRetrievedByXMLHttpRequest(unsigned long, const ScriptString&) |
-{ |
- // FIXME: The implementation is pending the fixes in https://bugs.webkit.org/show_bug.cgi?id=23175 |
- notImplemented(); |
-} |
- |
-void WorkerContext::postMessage(const String& message) |
-{ |
- m_thread->messagingProxy()->postMessageToWorkerObject(message); |
-} |
- |
-void WorkerContext::addEventListener(const AtomicString& eventType, PassRefPtr<EventListener> eventListener, bool) |
-{ |
- EventListenersMap::iterator iter = m_eventListeners.find(eventType); |
- if (iter == m_eventListeners.end()) { |
- ListenerVector listeners; |
- listeners.append(eventListener); |
- m_eventListeners.add(eventType, listeners); |
- } else { |
- ListenerVector& listeners = iter->second; |
- for (ListenerVector::iterator listenerIter = listeners.begin(); listenerIter != listeners.end(); ++listenerIter) { |
- if (*listenerIter == eventListener) |
- return; |
- } |
- |
- listeners.append(eventListener); |
- m_eventListeners.add(eventType, listeners); |
- } |
-} |
- |
-void WorkerContext::removeEventListener(const AtomicString& eventType, EventListener* eventListener, bool) |
-{ |
- EventListenersMap::iterator iter = m_eventListeners.find(eventType); |
- if (iter == m_eventListeners.end()) |
- return; |
- |
- ListenerVector& listeners = iter->second; |
- for (ListenerVector::const_iterator listenerIter = listeners.begin(); listenerIter != listeners.end(); ++listenerIter) { |
- if (*listenerIter == eventListener) { |
- listeners.remove(listenerIter - listeners.begin()); |
- return; |
- } |
- } |
-} |
- |
-bool WorkerContext::dispatchEvent(PassRefPtr<Event> event, ExceptionCode& ec) |
-{ |
- if (!event || event->type().isEmpty()) { |
- ec = EventException::UNSPECIFIED_EVENT_TYPE_ERR; |
- return true; |
- } |
- |
- ListenerVector listenersCopy = m_eventListeners.get(event->type()); |
- for (ListenerVector::const_iterator listenerIter = listenersCopy.begin(); listenerIter != listenersCopy.end(); ++listenerIter) { |
- event->setTarget(this); |
- event->setCurrentTarget(this); |
- listenerIter->get()->handleEvent(event.get(), false); |
- } |
- |
- return !event->defaultPrevented(); |
-} |
- |
-void WorkerContext::postTask(PassRefPtr<Task> task) |
-{ |
- thread()->runLoop().postTask(task); |
-} |
- |
-void WorkerContext::postTaskToWorkerObject(PassRefPtr<Task> task) |
-{ |
- thread()->messagingProxy()->postTaskToWorkerObject(task); |
-} |
- |
-int WorkerContext::installTimeout(ScheduledAction* action, int timeout, bool singleShot) |
-{ |
- return DOMTimer::install(scriptExecutionContext(), action, timeout, singleShot); |
-} |
- |
-void WorkerContext::removeTimeout(int timeoutId) |
-{ |
- DOMTimer::removeById(scriptExecutionContext(), timeoutId); |
-} |
- |
-} // namespace WebCore |
- |
-#endif // ENABLE(WORKERS) |
- |
- |
- |
+/* |
+ * Copyright (C) 2008 Apple Inc. All Rights Reserved. |
+ * |
+ * Redistribution and use in source and binary forms, with or without |
+ * modification, are permitted provided that the following conditions |
+ * are met: |
+ * 1. Redistributions of source code must retain the above copyright |
+ * notice, this list of conditions and the following disclaimer. |
+ * 2. Redistributions in binary form must reproduce the above copyright |
+ * notice, this list of conditions and the following disclaimer in the |
+ * documentation and/or other materials provided with the distribution. |
+ * |
+ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY |
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR |
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, |
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, |
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR |
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY |
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
+ * |
+ */ |
+ |
+#include "config.h" |
+ |
+#if ENABLE(WORKERS) |
+ |
+#include "WorkerContext.h" |
+ |
+#include "ActiveDOMObject.h" |
+#include "DOMTimer.h" |
+#include "DOMWindow.h" |
+#include "Event.h" |
+#include "EventException.h" |
+#include "GenericWorkerTask.h" |
+#include "NotImplemented.h" |
+#include "SecurityOrigin.h" |
+#include "WorkerLocation.h" |
+#include "WorkerMessagingProxy.h" |
+#include "WorkerNavigator.h" |
+#include "WorkerThread.h" |
+#include <wtf/RefPtr.h> |
+ |
+namespace WebCore { |
+ |
+WorkerContext::WorkerContext(const KURL& url, const String& userAgent, WorkerThread* thread) |
+ : m_url(url) |
+ , m_userAgent(userAgent) |
+ , m_location(WorkerLocation::create(url)) |
+ , m_script(new WorkerScriptController(this)) |
+ , m_thread(thread) |
+{ |
+ setSecurityOrigin(SecurityOrigin::create(url)); |
+} |
+ |
+WorkerContext::~WorkerContext() |
+{ |
+ ASSERT(currentThread() == m_thread->threadID()); |
+ |
+ m_thread->messagingProxy()->workerContextDestroyed(); |
+} |
+ |
+ScriptExecutionContext* WorkerContext::scriptExecutionContext() const |
+{ |
+ return const_cast<WorkerContext*>(this); |
+} |
+ |
+const KURL& WorkerContext::virtualURL() const |
+{ |
+ return m_url; |
+} |
+ |
+KURL WorkerContext::virtualCompleteURL(const String& url) const |
+{ |
+ return completeURL(url); |
+} |
+ |
+KURL WorkerContext::completeURL(const String& url) const |
+{ |
+ // Always return a null URL when passed a null string. |
+ // FIXME: Should we change the KURL constructor to have this behavior? |
+ if (url.isNull()) |
+ return KURL(); |
+ // FIXME: does this need to provide a charset, like Document::completeURL does? |
+ return KURL(m_location->url(), url); |
+} |
+ |
+WorkerNavigator* WorkerContext::navigator() const |
+{ |
+ if (!m_navigator) |
+ m_navigator = WorkerNavigator::create(m_userAgent); |
+ return m_navigator.get(); |
+} |
+ |
+bool WorkerContext::hasPendingActivity() const |
+{ |
+ ActiveDOMObjectsMap& activeObjects = activeDOMObjects(); |
+ ActiveDOMObjectsMap::const_iterator activeObjectsEnd = activeObjects.end(); |
+ for (ActiveDOMObjectsMap::const_iterator iter = activeObjects.begin(); iter != activeObjectsEnd; ++iter) { |
+ if (iter->first->hasPendingActivity()) |
+ return true; |
+ } |
+ return false; |
+} |
+ |
+void WorkerContext::reportException(const String& errorMessage, int lineNumber, const String& sourceURL) |
+{ |
+ m_thread->messagingProxy()->postExceptionToWorkerObject(errorMessage, lineNumber, sourceURL); |
+} |
+ |
+static void addMessageTask(ScriptExecutionContext* context, WorkerMessagingProxy* messagingProxy, MessageDestination destination, MessageSource source, MessageLevel level, const String& message, unsigned lineNumber, const String& sourceURL) |
+{ |
+ if (messagingProxy->askedToTerminate()) |
+ return; |
+ context->addMessage(destination, source, level, message, lineNumber, sourceURL); |
+} |
+ |
+void WorkerContext::addMessage(MessageDestination destination, MessageSource source, MessageLevel level, const String& message, unsigned lineNumber, const String& sourceURL) |
+{ |
+ postTaskToWorkerObject(createCallbackTask(&addMessageTask, m_thread->messagingProxy(), destination, source, level, message, lineNumber, sourceURL)); |
+} |
+ |
+void WorkerContext::resourceRetrievedByXMLHttpRequest(unsigned long, const ScriptString&) |
+{ |
+ // FIXME: The implementation is pending the fixes in https://bugs.webkit.org/show_bug.cgi?id=23175 |
+ notImplemented(); |
+} |
+ |
+void WorkerContext::postMessage(const String& message) |
+{ |
+ m_thread->messagingProxy()->postMessageToWorkerObject(message); |
+} |
+ |
+void WorkerContext::addEventListener(const AtomicString& eventType, PassRefPtr<EventListener> eventListener, bool) |
+{ |
+ EventListenersMap::iterator iter = m_eventListeners.find(eventType); |
+ if (iter == m_eventListeners.end()) { |
+ ListenerVector listeners; |
+ listeners.append(eventListener); |
+ m_eventListeners.add(eventType, listeners); |
+ } else { |
+ ListenerVector& listeners = iter->second; |
+ for (ListenerVector::iterator listenerIter = listeners.begin(); listenerIter != listeners.end(); ++listenerIter) { |
+ if (*listenerIter == eventListener) |
+ return; |
+ } |
+ |
+ listeners.append(eventListener); |
+ m_eventListeners.add(eventType, listeners); |
+ } |
+} |
+ |
+void WorkerContext::removeEventListener(const AtomicString& eventType, EventListener* eventListener, bool) |
+{ |
+ EventListenersMap::iterator iter = m_eventListeners.find(eventType); |
+ if (iter == m_eventListeners.end()) |
+ return; |
+ |
+ ListenerVector& listeners = iter->second; |
+ for (ListenerVector::const_iterator listenerIter = listeners.begin(); listenerIter != listeners.end(); ++listenerIter) { |
+ if (*listenerIter == eventListener) { |
+ listeners.remove(listenerIter - listeners.begin()); |
+ return; |
+ } |
+ } |
+} |
+ |
+bool WorkerContext::dispatchEvent(PassRefPtr<Event> event, ExceptionCode& ec) |
+{ |
+ if (!event || event->type().isEmpty()) { |
+ ec = EventException::UNSPECIFIED_EVENT_TYPE_ERR; |
+ return true; |
+ } |
+ |
+ ListenerVector listenersCopy = m_eventListeners.get(event->type()); |
+ for (ListenerVector::const_iterator listenerIter = listenersCopy.begin(); listenerIter != listenersCopy.end(); ++listenerIter) { |
+ event->setTarget(this); |
+ event->setCurrentTarget(this); |
+ listenerIter->get()->handleEvent(event.get(), false); |
+ } |
+ |
+ return !event->defaultPrevented(); |
+} |
+ |
+void WorkerContext::postTask(PassRefPtr<Task> task) |
+{ |
+ thread()->runLoop().postTask(task); |
+} |
+ |
+void WorkerContext::postTaskToWorkerObject(PassRefPtr<Task> task) |
+{ |
+ thread()->messagingProxy()->postTaskToWorkerObject(task); |
+} |
+ |
+int WorkerContext::installTimeout(ScheduledAction* action, int timeout, bool singleShot) |
+{ |
+ return DOMTimer::install(scriptExecutionContext(), action, timeout, singleShot); |
+} |
+ |
+void WorkerContext::removeTimeout(int timeoutId) |
+{ |
+ DOMTimer::removeById(scriptExecutionContext(), timeoutId); |
+} |
+ |
+} // namespace WebCore |
+ |
+#endif // ENABLE(WORKERS) |
+ |
+ |
+ |