V8BindingState.h revision 5abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306
172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen/* 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch * Copyright (C) 2009 Google Inc. All rights reserved. 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch * 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch * Redistribution and use in source and binary forms, with or without 5731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick * modification, are permitted provided that the following conditions are 6731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick * met: 7731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick * 8731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick * * Redistributions of source code must retain the above copyright 9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch * notice, this list of conditions and the following disclaimer. 10731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick * * Redistributions in binary form must reproduce the above 11731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick * copyright notice, this list of conditions and the following disclaimer 123345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick * in the documentation and/or other materials provided with the 133345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick * distribution. 143345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick * * Neither the name of Google Inc. nor the names of its 15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch * contributors may be used to endorse or promote products derived from 16dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen * this software without specific prior written permission. 17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch * 18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick */ 30731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifndef V8BindingState_h 32731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#define V8BindingState_h 33731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "GenericBinding.h" 35731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include "V8Binding.h" 36731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace WebCore { 38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass Frame; 40731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Singleton implementation of State<V8Binding>. Uses V8's global data 42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// structures to return information about relevant execution state. 43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <> 44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass State<V8Binding> : public State<GenericBinding> { 45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochpublic: 46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Singleton 47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static State* Only(); 48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Reports an error message (without delay) if the security check fails. 50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static void immediatelyReportUnsafeAccessTo(Frame*); 51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // The DOMWindow corresponding to the 'calling context' of execution. 53731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick DOMWindow* getActiveWindow(); 54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // The frame corresponding to the 'calling context' of execution. 56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Frame* getActiveFrame(); 57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // The first frame in which execution entered user script. 59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Frame* getFirstFrame(); 60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool processingUserGesture(); 62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // FIXME: This should be shared in BindingSecurity 643345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick bool allowsAccessFromFrame(Frame*); 653345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochprivate: 673345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick explicit State() {} 68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ~State(); 69731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick}; 70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtypedef State<V8Binding> V8BindingState; 72731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif // V8BindingState_h 76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch