summaryrefslogtreecommitdiff
path: root/Source/WebCore/bindings/v8/custom/V8DOMWindowCustom.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebCore/bindings/v8/custom/V8DOMWindowCustom.cpp')
-rw-r--r--Source/WebCore/bindings/v8/custom/V8DOMWindowCustom.cpp81
1 files changed, 37 insertions, 44 deletions
diff --git a/Source/WebCore/bindings/v8/custom/V8DOMWindowCustom.cpp b/Source/WebCore/bindings/v8/custom/V8DOMWindowCustom.cpp
index 0dcc29952..3fe880a78 100644
--- a/Source/WebCore/bindings/v8/custom/V8DOMWindowCustom.cpp
+++ b/Source/WebCore/bindings/v8/custom/V8DOMWindowCustom.cpp
@@ -31,7 +31,7 @@
#include "config.h"
#include "V8DOMWindow.h"
-#include <wtf/ArrayBuffer.h>
+#include "BindingState.h"
#include "Chrome.h"
#include "ContentSecurityPolicy.h"
#include "DOMTimer.h"
@@ -56,8 +56,6 @@
#include "SharedWorkerRepository.h"
#include "Storage.h"
#include "V8Binding.h"
-#include "V8BindingMacros.h"
-#include "V8BindingState.h"
#include "V8EventListener.h"
#include "V8GCForContextDispose.h"
#include "V8HiddenPropertyName.h"
@@ -66,6 +64,7 @@
#include "V8Proxy.h"
#include "V8Utilities.h"
#include "WindowFeatures.h"
+#include <wtf/ArrayBuffer.h>
namespace WebCore {
@@ -107,7 +106,7 @@ v8::Handle<v8::Value> WindowSetTimeoutImpl(const v8::Arguments& args, bool singl
if (argumentCount >= 2)
timeout = args[1]->Int32Value();
- if (!V8BindingSecurity::canAccessFrame(V8BindingState::Only(), imp->frame(), true))
+ if (!BindingSecurity::shouldAllowAccessToFrame(BindingState::instance(), imp->frame()))
return v8::Undefined();
int id;
@@ -152,7 +151,7 @@ v8::Handle<v8::Value> V8DOMWindow::eventAccessorGetter(v8::Local<v8::String> nam
return v8::Undefined();
Frame* frame = V8DOMWindow::toNative(holder)->frame();
- if (!V8BindingSecurity::canAccessFrame(V8BindingState::Only(), frame, true))
+ if (!BindingSecurity::shouldAllowAccessToFrame(BindingState::instance(), frame))
return v8::Undefined();
v8::Local<v8::Context> context = V8Proxy::context(frame);
@@ -173,7 +172,7 @@ void V8DOMWindow::eventAccessorSetter(v8::Local<v8::String> name, v8::Local<v8::
return;
Frame* frame = V8DOMWindow::toNative(holder)->frame();
- if (!V8BindingSecurity::canAccessFrame(V8BindingState::Only(), frame, true))
+ if (!BindingSecurity::shouldAllowAccessToFrame(BindingState::instance(), frame))
return;
v8::Local<v8::Context> context = V8Proxy::context(frame);
@@ -187,25 +186,25 @@ void V8DOMWindow::eventAccessorSetter(v8::Local<v8::String> name, v8::Local<v8::
void V8DOMWindow::locationAccessorSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info)
{
DOMWindow* imp = V8DOMWindow::toNative(info.Holder());
- State<V8Binding>* state = V8BindingState::Only();
+ BindingState* state = BindingState::instance();
- DOMWindow* activeWindow = state->activeWindow();
- if (!activeWindow)
+ DOMWindow* active = activeDOMWindow(state);
+ if (!active)
return;
- DOMWindow* firstWindow = state->firstWindow();
- if (!firstWindow)
+ DOMWindow* first = firstDOMWindow(state);
+ if (!first)
return;
if (Location* location = imp->location())
- location->setHref(toWebCoreString(value), activeWindow, firstWindow);
+ location->setHref(toWebCoreString(value), active, first);
}
void V8DOMWindow::openerAccessorSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info)
{
DOMWindow* imp = V8DOMWindow::toNative(info.Holder());
- if (!V8BindingSecurity::canAccessFrame(V8BindingState::Only(), imp->frame(), true))
+ if (!BindingSecurity::shouldAllowAccessToFrame(BindingState::instance(), imp->frame()))
return;
// Opener can be shadowed if it is in the same domain.
@@ -234,7 +233,7 @@ v8::Handle<v8::Value> V8DOMWindow::addEventListenerCallback(const v8::Arguments&
DOMWindow* imp = V8DOMWindow::toNative(args.Holder());
- if (!V8BindingSecurity::canAccessFrame(V8BindingState::Only(), imp->frame(), true))
+ if (!BindingSecurity::shouldAllowAccessToFrame(BindingState::instance(), imp->frame()))
return v8::Undefined();
Document* doc = imp->document();
@@ -243,8 +242,7 @@ v8::Handle<v8::Value> V8DOMWindow::addEventListenerCallback(const v8::Arguments&
return v8::Undefined();
// FIXME: Check if there is not enough arguments
- V8Proxy* proxy = V8Proxy::retrieve(imp->frame());
- if (!proxy)
+ if (!imp->frame())
return v8::Undefined();
RefPtr<EventListener> listener = V8DOMWrapper::getEventListener(args[1], false, ListenerFindOrCreate);
@@ -267,7 +265,7 @@ v8::Handle<v8::Value> V8DOMWindow::removeEventListenerCallback(const v8::Argumen
DOMWindow* imp = V8DOMWindow::toNative(args.Holder());
- if (!V8BindingSecurity::canAccessFrame(V8BindingState::Only(), imp->frame(), true))
+ if (!BindingSecurity::shouldAllowAccessToFrame(BindingState::instance(), imp->frame()))
return v8::Undefined();
Document* doc = imp->document();
@@ -275,8 +273,7 @@ v8::Handle<v8::Value> V8DOMWindow::removeEventListenerCallback(const v8::Argumen
if (!doc)
return v8::Undefined();
- V8Proxy* proxy = V8Proxy::retrieve(imp->frame());
- if (!proxy)
+ if (!imp->frame())
return v8::Undefined();
RefPtr<EventListener> listener = V8DOMWrapper::getEventListener(args[1], false, ListenerFindOnly);
@@ -302,7 +299,7 @@ static v8::Handle<v8::Value> handlePostMessageCallback(const v8::Arguments& args
// None of these need to be RefPtr because args and context are guaranteed
// to hold on to them.
DOMWindow* window = V8DOMWindow::toNative(args.Holder());
- DOMWindow* source = V8Proxy::retrieveWindowForCallingContext();
+ DOMWindow* source = activeDOMWindow(BindingState::instance());
// If called directly by WebCore we don't have a calling context.
if (!source)
@@ -326,7 +323,7 @@ static v8::Handle<v8::Value> handlePostMessageCallback(const v8::Arguments& args
targetOriginArgIndex = 2;
transferablesArgIndex = 1;
}
- if (!extractTransferables(args[transferablesArgIndex], portArray, arrayBufferArray))
+ if (!extractTransferables(args[transferablesArgIndex], portArray, arrayBufferArray, args.GetIsolate()))
return v8::Undefined();
}
targetOrigin = toWebCoreStringWithNullOrUndefinedCheck(args[targetOriginArgIndex]);
@@ -348,7 +345,7 @@ static v8::Handle<v8::Value> handlePostMessageCallback(const v8::Arguments& args
ExceptionCode ec = 0;
window->postMessage(message.release(), &portArray, targetOrigin, source, ec);
- return throwError(ec, args.GetIsolate());
+ return V8Proxy::setDOMException(ec, args.GetIsolate());
}
v8::Handle<v8::Value> V8DOMWindow::postMessageCallback(const v8::Arguments& args)
@@ -434,8 +431,8 @@ v8::Handle<v8::Value> V8DOMWindow::showModalDialogCallback(const v8::Arguments&
{
INC_STATS("DOM.DOMWindow.showModalDialog()");
DOMWindow* impl = V8DOMWindow::toNative(args.Holder());
- V8BindingState* state = V8BindingState::Only();
- if (!V8BindingSecurity::canAccessFrame(state, impl->frame(), true))
+ BindingState* state = BindingState::instance();
+ if (!BindingSecurity::shouldAllowAccessToFrame(state, impl->frame()))
return v8::Undefined();
// FIXME: Handle exceptions properly.
@@ -443,9 +440,7 @@ v8::Handle<v8::Value> V8DOMWindow::showModalDialogCallback(const v8::Arguments&
DialogHandler handler(args[1]);
String dialogFeaturesString = toWebCoreStringWithNullOrUndefinedCheck(args[2]);
- DOMWindow* activeWindow = state->activeWindow();
- DOMWindow* firstWindow = state->firstWindow();
- impl->showModalDialog(urlString, dialogFeaturesString, activeWindow, firstWindow, setUpDialog, &handler);
+ impl->showModalDialog(urlString, dialogFeaturesString, activeDOMWindow(state), firstDOMWindow(state), setUpDialog, &handler);
return handler.returnValue();
}
@@ -454,8 +449,8 @@ v8::Handle<v8::Value> V8DOMWindow::openCallback(const v8::Arguments& args)
{
INC_STATS("DOM.DOMWindow.open()");
DOMWindow* impl = V8DOMWindow::toNative(args.Holder());
- V8BindingState* state = V8BindingState::Only();
- if (!V8BindingSecurity::canAccessFrame(state, impl->frame(), true))
+ BindingState* state = BindingState::instance();
+ if (!BindingSecurity::shouldAllowAccessToFrame(state, impl->frame()))
return v8::Undefined();
// FIXME: Handle exceptions properly.
@@ -463,9 +458,7 @@ v8::Handle<v8::Value> V8DOMWindow::openCallback(const v8::Arguments& args)
AtomicString frameName = (args[1]->IsUndefined() || args[1]->IsNull()) ? "_blank" : AtomicString(toWebCoreString(args[1]));
String windowFeaturesString = toWebCoreStringWithNullOrUndefinedCheck(args[2]);
- DOMWindow* activeWindow = state->activeWindow();
- DOMWindow* firstWindow = state->firstWindow();
- RefPtr<DOMWindow> openedWindow = impl->open(urlString, frameName, windowFeaturesString, activeWindow, firstWindow);
+ RefPtr<DOMWindow> openedWindow = impl->open(urlString, frameName, windowFeaturesString, activeDOMWindow(state), firstDOMWindow(state));
if (!openedWindow)
return v8::Undefined();
@@ -478,17 +471,17 @@ v8::Handle<v8::Value> V8DOMWindow::indexedPropertyGetter(uint32_t index, const v
DOMWindow* window = V8DOMWindow::toNative(info.Holder());
if (!window)
- return v8::Handle<v8::Value>();
+ return v8Undefined();
Frame* frame = window->frame();
if (!frame)
- return v8::Handle<v8::Value>();
+ return v8Undefined();
Frame* child = frame->tree()->scopedChild(index);
if (child)
return toV8(child->domWindow(), info.GetIsolate());
- return v8::Handle<v8::Value>();
+ return v8Undefined();
}
@@ -498,22 +491,22 @@ v8::Handle<v8::Value> V8DOMWindow::namedPropertyGetter(v8::Local<v8::String> nam
DOMWindow* window = V8DOMWindow::toNative(info.Holder());
if (!window)
- return v8::Handle<v8::Value>();
+ return v8Undefined();
Frame* frame = window->frame();
// window is detached from a frame.
if (!frame)
- return v8::Handle<v8::Value>();
+ return v8Undefined();
// Search sub-frames.
- AtomicString propName = v8StringToAtomicWebCoreString(name);
+ AtomicString propName = v8ValueToAtomicWebCoreString(name);
Frame* child = frame->tree()->scopedChild(propName);
if (child)
return toV8(child->domWindow(), info.GetIsolate());
// Search IDL functions defined in the prototype
if (!info.Holder()->GetRealNamedProperty(name).IsEmpty())
- return v8::Handle<v8::Value>();
+ return v8Undefined();
// Search named items in the document.
Document* doc = frame->document();
@@ -529,7 +522,7 @@ v8::Handle<v8::Value> V8DOMWindow::namedPropertyGetter(v8::Local<v8::String> nam
}
}
- return v8::Handle<v8::Value>();
+ return v8Undefined();
}
@@ -576,7 +569,7 @@ bool V8DOMWindow::namedSecurityCheck(v8::Local<v8::Object> host, v8::Local<v8::V
return true;
}
- return V8BindingSecurity::canAccessFrame(V8BindingState::Only(), target, false);
+ return BindingSecurity::shouldAllowAccessToFrame(BindingState::instance(), target, DoNotReportSecurityError);
}
bool V8DOMWindow::indexedSecurityCheck(v8::Local<v8::Object> host, uint32_t index, v8::AccessType type, v8::Local<v8::Value>)
@@ -601,7 +594,7 @@ bool V8DOMWindow::indexedSecurityCheck(v8::Local<v8::Object> host, uint32_t inde
if (type == v8::ACCESS_GET && childFrame && !host->HasRealIndexedProperty(index))
return true;
- return V8BindingSecurity::canAccessFrame(V8BindingState::Only(), target, false);
+ return BindingSecurity::shouldAllowAccessToFrame(BindingState::instance(), target, DoNotReportSecurityError);
}
v8::Handle<v8::Value> toV8(DOMWindow* window, v8::Isolate* isolate)
@@ -612,7 +605,7 @@ v8::Handle<v8::Value> toV8(DOMWindow* window, v8::Isolate* isolate)
// of the frame.
Frame* frame = window->frame();
if (!frame)
- return v8::Handle<v8::Object>();
+ return v8Undefined();
// Special case: Because of evaluateInIsolatedWorld() one DOMWindow can have
// multiple contexts and multiple global objects associated with it. When
@@ -630,7 +623,7 @@ v8::Handle<v8::Value> toV8(DOMWindow* window, v8::Isolate* isolate)
// Otherwise, return the global object associated with this frame.
v8::Handle<v8::Context> context = V8Proxy::context(frame);
if (context.IsEmpty())
- return v8::Handle<v8::Object>();
+ return v8Undefined();
v8::Handle<v8::Object> global = context->Global();
ASSERT(!global.IsEmpty());