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