15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2008, 2009 Apple Inc. All rights reserved. 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * are met: 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 1. Redistributions of source code must retain the above copyright 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer. 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 2. Redistributions in binary form must reproduce the above copyright 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer in the 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * documentation and/or other materials provided with the distribution. 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 27591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch#ifndef WorkerGlobalScope_h 28591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch#define WorkerGlobalScope_h 295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 30197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "bindings/core/v8/WorkerScriptController.h" 311e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "core/dom/ExecutionContext.h" 3206f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)#include "core/events/EventListener.h" 3306f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)#include "core/events/EventTarget.h" 34a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch#include "core/frame/DOMWindowBase64.h" 3576c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)#include "core/frame/UseCounter.h" 36d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#include "core/frame/csp/ContentSecurityPolicy.h" 3753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/workers/WorkerEventQueue.h" 38f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "platform/heap/Handle.h" 39d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#include "platform/network/ContentSecurityPolicyParsers.h" 40591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch#include "wtf/Assertions.h" 41591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch#include "wtf/HashMap.h" 42591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch#include "wtf/OwnPtr.h" 43591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch#include "wtf/PassRefPtr.h" 44591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch#include "wtf/RefCounted.h" 45591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch#include "wtf/RefPtr.h" 46591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch#include "wtf/text/AtomicStringHash.h" 475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 48c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink { 495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 507242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucciclass Blob; 517242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucciclass ConsoleMessage; 527242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucciclass ConsoleMessageStorage; 537242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucciclass ExceptionState; 547242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucciclass ScheduledAction; 557242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucciclass WorkerClients; 567242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucciclass WorkerConsole; 577242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucciclass WorkerInspectorController; 587242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucciclass WorkerLocation; 597242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucciclass WorkerNavigator; 607242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucciclass WorkerThread; 615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 627242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucciclass WorkerGlobalScope : public RefCountedWillBeGarbageCollectedFinalized<WorkerGlobalScope>, public SecurityContext, public ExecutionContext, public WillBeHeapSupplementable<WorkerGlobalScope>, public EventTargetWithInlineData, public DOMWindowBase64 { 637242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci DEFINE_WRAPPERTYPEINFO(); 647242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci REFCOUNTED_EVENT_TARGET(WorkerGlobalScope); 657242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(WorkerGlobalScope); 667242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tuccipublic: 677242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci virtual ~WorkerGlobalScope(); 685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 697242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci virtual bool isWorkerGlobalScope() const OVERRIDE FINAL { return true; } 705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 717242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci virtual ExecutionContext* executionContext() const OVERRIDE FINAL; 725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 737242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci virtual void countFeature(UseCounter::Feature) const; 747242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci virtual void countDeprecation(UseCounter::Feature) const; 755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 767242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci const KURL& url() const { return m_url; } 777242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci KURL completeURL(const String&) const; 785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 797242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci virtual String userAgent(const KURL&) const OVERRIDE FINAL; 807242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci virtual void disableEval(const String& errorMessage) OVERRIDE FINAL; 815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 827242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci WorkerScriptController* script() { return m_script.get(); } 837242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci void clearScript() { m_script.clear(); } 847242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci void clearInspector(); 855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 867242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci void dispose(); 87f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu 887242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci WorkerThread* thread() const { return m_thread; } 89d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 907242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci virtual void postTask(PassOwnPtr<ExecutionContextTask>) OVERRIDE FINAL; // Executes the task on context's thread asynchronously. 915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 927242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // WorkerGlobalScope 937242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci WorkerGlobalScope* self() { return this; } 947242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci WorkerConsole* console(); 957242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci WorkerLocation* location() const; 967242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci void close(); 975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 987242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci DEFINE_ATTRIBUTE_EVENT_LISTENER(error); 995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1007242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // WorkerUtils 1017242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci virtual void importScripts(const Vector<String>& urls, ExceptionState&); 1027242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci WorkerNavigator* navigator() const; 1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1047242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // ExecutionContextClient 1057242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci virtual WorkerEventQueue* eventQueue() const OVERRIDE FINAL; 1067242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci virtual SecurityContext& securityContext() OVERRIDE FINAL { return *this; } 1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1087242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci virtual bool isContextThread() const OVERRIDE FINAL; 1097242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci virtual bool isJSExecutionForbidden() const OVERRIDE FINAL; 1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1117242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci virtual double timerAlignmentInterval() const OVERRIDE FINAL; 1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1137242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci WorkerInspectorController* workerInspectorController() { return m_workerInspectorController.get(); } 1141e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) 1157242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci bool isClosing() { return m_closing; } 1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1177242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci virtual void stopFetch() { } 1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1197242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci bool idleNotification(); 1205d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 1217242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci double timeOrigin() const { return m_timeOrigin; } 1227757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch 1237242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci WorkerClients* clients() { return m_workerClients.get(); } 124521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) 1257242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci using SecurityContext::securityOrigin; 1267242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci using SecurityContext::contentSecurityPolicy; 1277757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch 1287242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci virtual void addConsoleMessage(PassRefPtrWillBeRawPtr<ConsoleMessage>) OVERRIDE FINAL; 1297242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci ConsoleMessageStorage* messageStorage(); 130f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) 1317242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci virtual void trace(Visitor*) OVERRIDE; 1329e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) 1337242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucciprotected: 1347242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci WorkerGlobalScope(const KURL&, const String& userAgent, WorkerThread*, double timeOrigin, PassOwnPtrWillBeRawPtr<WorkerClients>); 1357242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci void applyContentSecurityPolicyFromString(const String& contentSecurityPolicy, ContentSecurityPolicyHeaderType); 136d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 1377242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci virtual void logExceptionToConsole(const String& errorMessage, int scriptId, const String& sourceURL, int lineNumber, int columnNumber, PassRefPtrWillBeRawPtr<ScriptCallStack>) OVERRIDE; 1387242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci void addMessageToWorkerConsole(PassRefPtrWillBeRawPtr<ConsoleMessage>); 1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1407242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucciprivate: 1415d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)#if !ENABLE(OILPAN) 1427242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci virtual void refExecutionContext() OVERRIDE FINAL { ref(); } 1437242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci virtual void derefExecutionContext() OVERRIDE FINAL { deref(); } 1445d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)#endif 1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1467242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci virtual const KURL& virtualURL() const OVERRIDE FINAL; 1477242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci virtual KURL virtualCompleteURL(const String&) const OVERRIDE FINAL; 1487242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 1497242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci virtual void reportBlockedScriptExecutionToInspector(const String& directiveText) OVERRIDE FINAL; 1505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1517242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci virtual EventTarget* errorEventTarget() OVERRIDE FINAL; 1527242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci virtual void didUpdateSecurityOrigin() OVERRIDE FINAL { } 1535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1547242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci KURL m_url; 1557242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci String m_userAgent; 1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1577242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci mutable RefPtrWillBeMember<WorkerConsole> m_console; 1587242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci mutable RefPtrWillBeMember<WorkerLocation> m_location; 1597242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci mutable RefPtrWillBeMember<WorkerNavigator> m_navigator; 1605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1617242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci OwnPtr<WorkerScriptController> m_script; 1627242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci WorkerThread* m_thread; 1635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1647242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci RefPtrWillBeMember<WorkerInspectorController> m_workerInspectorController; 1657242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci bool m_closing; 1665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1677242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci OwnPtrWillBeMember<WorkerEventQueue> m_eventQueue; 1685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1697242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci OwnPtrWillBeMember<WorkerClients> m_workerClients; 1705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1717242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci double m_timeOrigin; 1727757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch 1737242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci OwnPtrWillBeMember<ConsoleMessageStorage> m_messageStorage; 1747242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci}; 1755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 17609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)DEFINE_TYPE_CASTS(WorkerGlobalScope, ExecutionContext, context, context->isWorkerGlobalScope(), context.isWorkerGlobalScope()); 177591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch 178c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} // namespace blink 1795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 180591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch#endif // WorkerGlobalScope_h 181