1/* 2 * Copyright (C) 2012 Michael Pruett <michael@68k.org> 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions are 6 * met: 7 * 8 * * Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * * Redistributions in binary form must reproduce the above 11 * copyright notice, this list of conditions and the following disclaimer 12 * in the documentation and/or other materials provided with the 13 * distribution. 14 * 15 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 16 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 17 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 18 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 19 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 20 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 21 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 22 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 23 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 25 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 */ 27 28#ifndef DOMRequestState_h 29#define DOMRequestState_h 30 31#include "DOMWrapperWorld.h" 32#include "Document.h" 33#include "ScriptState.h" 34#include "WorkerGlobalScope.h" 35 36namespace WebCore { 37 38class ScriptExecutionContext; 39 40class DOMRequestState { 41public: 42 explicit DOMRequestState(ScriptExecutionContext* scriptExecutionContext) 43 : m_scriptExecutionContext(scriptExecutionContext) 44 , m_exec(0) 45 { 46 if (m_scriptExecutionContext->isDocument()) { 47 Document* document = toDocument(m_scriptExecutionContext); 48 m_exec = execStateFromPage(mainThreadNormalWorld(), document->page()); 49 } else { 50 WorkerGlobalScope* workerGlobalScope = static_cast<WorkerGlobalScope*>(m_scriptExecutionContext); 51 m_exec = execStateFromWorkerGlobalScope(workerGlobalScope); 52 } 53 } 54 55 void clear() 56 { 57 m_scriptExecutionContext = 0; 58 m_exec = 0; 59 } 60 61 class Scope { 62 public: 63 explicit Scope(DOMRequestState& state) 64 : m_locker(state.exec()) 65 { 66 } 67 private: 68 JSC::JSLockHolder m_locker; 69 }; 70 71 JSC::ExecState* exec() 72 { 73 return m_exec; 74 } 75 76private: 77 ScriptExecutionContext* m_scriptExecutionContext; 78 JSC::ExecState* m_exec; 79}; 80 81} 82#endif 83