1635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project/* 28f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * Copyright (C) 2009 Google Inc. All rights reserved. 3dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * 4635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * Redistribution and use in source and binary forms, with or without 5635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * modification, are permitted provided that the following conditions are 6635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * met: 7dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * 8635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * * Redistributions of source code must retain the above copyright 9635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * notice, this list of conditions and the following disclaimer. 10635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * * Redistributions in binary form must reproduce the above 11635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * copyright notice, this list of conditions and the following disclaimer 12635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * in the documentation and/or other materials provided with the 13635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * distribution. 14635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * * Neither the name of Google Inc. nor the names of its 15635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * contributors may be used to endorse or promote products derived from 16635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * this software without specific prior written permission. 17dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * 18635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 21635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 24635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project */ 30635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 31635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "config.h" 32d0825bca7fe65beaee391d30da42e937db621564Steve Block#include "V8BindingState.h" 33635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 34dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch#include "Frame.h" 35dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch#include "ScriptController.h" 368f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#include "V8Proxy.h" 37d0825bca7fe65beaee391d30da42e937db621564Steve Block#include <wtf/StdLibExtras.h> 38635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 39635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectnamespace WebCore { 40635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 41d0825bca7fe65beaee391d30da42e937db621564Steve BlockState<V8Binding>* State<V8Binding>::Only() 42d0825bca7fe65beaee391d30da42e937db621564Steve Block{ 43d0825bca7fe65beaee391d30da42e937db621564Steve Block DEFINE_STATIC_LOCAL(State, globalV8BindingState, ()); 44d0825bca7fe65beaee391d30da42e937db621564Steve Block return &globalV8BindingState; 45d0825bca7fe65beaee391d30da42e937db621564Steve Block} 46d0825bca7fe65beaee391d30da42e937db621564Steve Block 47f05b935882198ccf7d81675736e3aeb089c5113aBen MurdochDOMWindow* State<V8Binding>::activeWindow() 48d0825bca7fe65beaee391d30da42e937db621564Steve Block{ 49d0825bca7fe65beaee391d30da42e937db621564Steve Block v8::Local<v8::Context> activeContext = v8::Context::GetCalling(); 50d0825bca7fe65beaee391d30da42e937db621564Steve Block if (activeContext.IsEmpty()) { 51d0825bca7fe65beaee391d30da42e937db621564Steve Block // There is a single activation record on the stack, so that must 52d0825bca7fe65beaee391d30da42e937db621564Steve Block // be the activeContext. 53d0825bca7fe65beaee391d30da42e937db621564Steve Block activeContext = v8::Context::GetCurrent(); 54d0825bca7fe65beaee391d30da42e937db621564Steve Block } 55d0825bca7fe65beaee391d30da42e937db621564Steve Block return V8Proxy::retrieveWindow(activeContext); 56d0825bca7fe65beaee391d30da42e937db621564Steve Block} 57d0825bca7fe65beaee391d30da42e937db621564Steve Block 58f05b935882198ccf7d81675736e3aeb089c5113aBen MurdochDOMWindow* State<V8Binding>::firstWindow() 59f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 60f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return V8Proxy::retrieveWindow(v8::Context::GetEntered()); 61f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 62f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 63f05b935882198ccf7d81675736e3aeb089c5113aBen MurdochFrame* State<V8Binding>::activeFrame() 64dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch{ 65dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch Frame* frame = V8Proxy::retrieveFrameForCallingContext(); 66dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch if (!frame) { 67dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch // Unfortunately, when processing script from a plug-in, we might not 68dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch // have a calling context. In those cases, we fall back to the 69dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch // entered context for security checks. 70dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch // FIXME: We need a better API for retrieving frames that abstracts 71dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch // away this concern. 72dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch frame = V8Proxy::retrieveFrameForEnteredContext(); 73dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch } 74dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch return frame; 75dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch} 76dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch 77f05b935882198ccf7d81675736e3aeb089c5113aBen MurdochFrame* State<V8Binding>::firstFrame() 78dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch{ 79dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch return V8Proxy::retrieveFrameForEnteredContext(); 80dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch} 81dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch 82d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid State<V8Binding>::immediatelyReportUnsafeAccessTo(Frame* target) 83635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 84ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch V8Proxy::reportUnsafeAccessTo(target); 85635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 86635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 87dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdochbool State<V8Binding>::processingUserGesture() 88dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch{ 89f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick return ScriptController::processingUserGesture(); 90dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch} 91dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch 925abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrickbool State<V8Binding>::allowsAccessFromFrame(Frame* frame) 935abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick{ 945abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick return ScriptController::isSafeScript(frame); 955abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick} 965abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick 97635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} // namespace WebCore 98