15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2012 Google 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) * 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 1. Redistributions of source code must retain the above copyright 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer. 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 2. Redistributions in binary form must reproduce the above copyright 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer in the 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * documentation and/or other materials provided with the distribution. 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 26926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)#ifndef DOMRequestState_h 27926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)#define DOMRequestState_h 285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "bindings/v8/DOMWrapperWorld.h" 3053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "bindings/v8/V8Binding.h" 3153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/ScriptExecutionContext.h" 32926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)#include "v8.h" 3353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "wtf/RefPtr.h" 345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)namespace WebCore { 365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 37926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)class DOMRequestState { 385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public: 39926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) explicit DOMRequestState(ScriptExecutionContext* scriptExecutionContext) 4053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) : m_scriptExecutionContext(scriptExecutionContext) 4153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) , m_world(DOMWrapperWorld::current()) 42926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 43926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 45926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) void clear() 46926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 47926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) m_scriptExecutionContext = 0; 4853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) m_world.clear(); 49926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 51926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) class Scope { 52926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) public: 53926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) explicit Scope(DOMRequestState& state) 54926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) : m_contextScope(state.context()) 55926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 56926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 57926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) private: 58926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) v8::HandleScope m_handleScope; 59926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) v8::Context::Scope m_contextScope; 60926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }; 61926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 62926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) v8::Local<v8::Context> context() 63926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 6453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) return toV8Context(m_scriptExecutionContext, m_world.get()); 65926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 66926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 67926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)private: 68926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) ScriptExecutionContext* m_scriptExecutionContext; 6953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) RefPtr<DOMWrapperWorld> m_world; 70926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)}; 715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 72926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif 74