Index: webkit/port/bindings/v8/ScriptController.cpp |
=================================================================== |
--- webkit/port/bindings/v8/ScriptController.cpp (revision 16307) |
+++ webkit/port/bindings/v8/ScriptController.cpp (working copy) |
@@ -1,31 +1,32 @@ |
-// Copyright (c) 2008, Google Inc. |
-// All rights reserved. |
-// |
-// Redistribution and use in source and binary forms, with or without |
-// modification, are permitted provided that the following conditions are |
-// met: |
-// |
-// * Redistributions of source code must retain the above copyright |
-// notice, this list of conditions and the following disclaimer. |
-// * Redistributions in binary form must reproduce the above |
-// copyright notice, this list of conditions and the following disclaimer |
-// in the documentation and/or other materials provided with the |
-// distribution. |
-// * Neither the name of Google Inc. nor the names of its |
-// contributors may be used to endorse or promote products derived from |
-// this software without specific prior written permission. |
-// |
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
+/* |
+ * Copyright (C) 2008, 2009 Google Inc. All rights reserved. |
+ * |
+ * Redistribution and use in source and binary forms, with or without |
+ * modification, are permitted provided that the following conditions are |
+ * met: |
+ * |
+ * * Redistributions of source code must retain the above copyright |
+ * notice, this list of conditions and the following disclaimer. |
+ * * Redistributions in binary form must reproduce the above |
+ * copyright notice, this list of conditions and the following disclaimer |
+ * in the documentation and/or other materials provided with the |
+ * distribution. |
+ * * Neither the name of Google Inc. nor the names of its |
+ * contributors may be used to endorse or promote products derived from |
+ * this software without specific prior written permission. |
+ * |
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
+ */ |
#include "config.h" |
#include "ScriptController.h" |
@@ -46,38 +47,15 @@ |
#include "ScriptState.h" |
#include "Widget.h" |
-#include "v8_proxy.h" |
-#include "v8_binding.h" |
+#include "V8Binding.h" |
#include "V8NPObject.h" |
+#include "V8Proxy.h" |
-NPRuntimeFunctions npruntime_functions = { |
- NPN_GetStringIdentifier, |
- NPN_GetStringIdentifiers, |
- NPN_GetIntIdentifier, |
- NPN_IdentifierIsString, |
- NPN_UTF8FromIdentifier, |
- NPN_IntFromIdentifier, |
- NPN_CreateObject, |
- NPN_RetainObject, |
- NPN_ReleaseObject, |
- NPN_Invoke, |
- NPN_InvokeDefault, |
- NPN_Evaluate, |
- NPN_GetProperty, |
- NPN_SetProperty, |
- NPN_RemoveProperty, |
- NPN_HasProperty, |
- NPN_HasMethod, |
- NPN_ReleaseVariantValue, |
- NPN_SetException |
-}; |
- |
- |
namespace WebCore { |
-void ScriptController::setFlags(const char* str, int length) |
+void ScriptController::setFlags(const char* string, int length) |
{ |
- v8::V8::SetFlagsFromString(str, length); |
+ v8::V8::SetFlagsFromString(string, length); |
} |
Frame* ScriptController::retrieveFrameForEnteredContext() |
@@ -95,14 +73,14 @@ |
return V8Proxy::CanAccessFrame(target, true); |
} |
-void ScriptController::gcProtectJSWrapper(void* dom_object) |
+void ScriptController::gcProtectJSWrapper(void* domObject) |
{ |
- V8Proxy::GCProtect(dom_object); |
+ V8Proxy::GCProtect(domObject); |
} |
-void ScriptController::gcUnprotectJSWrapper(void* dom_object) |
+void ScriptController::gcUnprotectJSWrapper(void* domObject) |
{ |
- V8Proxy::GCUnprotect(dom_object); |
+ V8Proxy::GCUnprotect(domObject); |
} |
ScriptController::ScriptController(Frame* frame) |
@@ -152,7 +130,7 @@ |
notImplemented(); |
} |
-// Disconnect the proxy from its owner frame; |
+// Disconnect the proxy from its owner frame. |
void ScriptController::disconnectFrame() |
{ |
m_proxy->disconnectFrame(); |
@@ -160,16 +138,16 @@ |
bool ScriptController::processingUserGesture() const |
{ |
- Frame* active_frame = V8Proxy::retrieveFrameForEnteredContext(); |
- // No script is running, must be run by users. |
- if (!active_frame) |
+ Frame* activeFrame = V8Proxy::retrieveFrameForEnteredContext(); |
+ // No script is running, so it must be run by users. |
+ if (!activeFrame) |
return true; |
- V8Proxy* active_proxy = active_frame->script()->proxy(); |
+ V8Proxy* activeProxy = activeFrame->script()->proxy(); |
- v8::HandleScope handle_scope; |
- v8::Handle<v8::Context> context = V8Proxy::GetContext(active_frame); |
- // TODO(fqian): find all cases context can be empty: |
+ v8::HandleScope handleScope; |
+ v8::Handle<v8::Context> context = V8Proxy::GetContext(activeFrame); |
+ // FIXME: find all cases context can be empty: |
// 1) JS is disabled; |
// 2) page is NULL; |
if (context.IsEmpty()) |
@@ -178,116 +156,94 @@ |
v8::Context::Scope scope(context); |
v8::Handle<v8::Object> global = context->Global(); |
- v8::Handle<v8::Value> jsevent = global->Get(v8::String::NewSymbol("event")); |
- Event* event = V8Proxy::ToNativeEvent(jsevent); |
+ v8::Handle<v8::Value> jsEvent = global->Get(v8::String::NewSymbol("event")); |
+ Event* event = V8Proxy::ToNativeEvent(jsEvent); |
// Based on code from kjs_bindings.cpp. |
// Note: This is more liberal than Firefox's implementation. |
if (event) { |
const AtomicString& type = event->type(); |
- bool event_ok = |
- // mouse events |
- type == eventNames().clickEvent || |
- type == eventNames().mousedownEvent || |
- type == eventNames().mouseupEvent || |
- type == eventNames().dblclickEvent || |
- // keyboard events |
- type == eventNames().keydownEvent || |
- type == eventNames().keypressEvent || |
- type == eventNames().keyupEvent || |
- // other accepted events |
- type == eventNames().selectEvent || |
- type == eventNames().changeEvent || |
- type == eventNames().focusEvent || |
- type == eventNames().blurEvent || |
- type == eventNames().submitEvent; |
+ bool eventOk = |
+ // mouse events |
+ type == eventNames().clickEvent || type == eventNames().mousedownEvent || type == eventNames().mouseupEvent || type == eventNames().dblclickEvent |
+ // keyboard events |
+ || type == eventNames().keydownEvent || type == eventNames().keypressEvent || type == eventNames().keyupEvent |
+ // other accepted events |
+ || type == eventNames().selectEvent || type == eventNames().changeEvent || type == eventNames().focusEvent || type == eventNames().blurEvent || type == eventNames().submitEvent; |
- if (event_ok) |
- return true; |
- } else if (active_proxy->inlineCode() && !active_proxy->timerCallback()) |
- // This is the <a href="javascript:window.open('...')> case -> we let it |
- // through |
+ if (eventOk) |
+ return true; |
+ } else if (activeProxy->inlineCode() && !activeProxy->timerCallback()) { |
+ // This is the <a href="javascript:window.open('...')> case -> we let it through. |
return true; |
+ } |
- // This is the <script>window.open(...)</script> case or a timer callback -> |
- // block it |
+ // This is the <script>window.open(...)</script> case or a timer callback -> block it. |
return false; |
} |
-void ScriptController::evaluateInNewContext( |
- const Vector<ScriptSourceCode>& sources) { |
- m_proxy->evaluateInNewContext(sources); |
+void ScriptController::evaluateInNewContext(const Vector<ScriptSourceCode>& sources) |
+{ |
+ m_proxy->evaluateInNewContext(sources); |
} |
// Evaluate a script file in the environment of this proxy. |
ScriptValue ScriptController::evaluate(const ScriptSourceCode& sourceCode) |
{ |
- v8::HandleScope hs; |
+ v8::HandleScope handleScope; |
v8::Handle<v8::Context> context = V8Proxy::GetContext(m_proxy->frame()); |
if (context.IsEmpty()) |
return ScriptValue(); |
v8::Context::Scope scope(context); |
- v8::Local<v8::Value> obj = m_proxy->evaluate(sourceCode, NULL); |
+ v8::Local<v8::Value> object = m_proxy->evaluate(sourceCode, 0); |
- if (obj.IsEmpty() || obj->IsUndefined()) |
+ if (object.IsEmpty() || object->IsUndefined()) |
return ScriptValue(); |
- return ScriptValue(obj); |
+ return ScriptValue(object); |
} |
-void ScriptController::disposeJSResult(v8::Persistent<v8::Value> result) |
+void ScriptController::setEventHandlerLineNumber(int lineNumber) |
{ |
- result.Dispose(); |
- result.Clear(); |
+ m_proxy->setEventHandlerLineno(lineNumber); |
} |
-void ScriptController::setEventHandlerLineNumber(int lineno) |
+void ScriptController::finishedWithEvent(Event* event) |
{ |
- m_proxy->setEventHandlerLineno(lineno); |
+ m_proxy->finishedWithEvent(event); |
} |
-void ScriptController::finishedWithEvent(Event* evt) |
+// Create a V8 object with an interceptor of NPObjectPropertyGetter. |
+void ScriptController::bindToWindowObject(Frame* frame, const String& key, NPObject* object) |
{ |
- m_proxy->finishedWithEvent(evt); |
-} |
+ v8::HandleScope handleScope; |
-// Create a V8 object with an interceptor of NPObjectPropertyGetter |
-void ScriptController::BindToWindowObject(Frame* frame, const String& key, NPObject* object) |
-{ |
- v8::HandleScope handle_scope; |
- |
v8::Handle<v8::Context> context = V8Proxy::GetContext(frame); |
if (context.IsEmpty()) |
return; |
v8::Context::Scope scope(context); |
- v8::Handle<v8::Object> value = CreateV8ObjectForNPObject(object, NULL); |
+ v8::Handle<v8::Object> value = CreateV8ObjectForNPObject(object, 0); |
- // Attach to the global object |
+ // Attach to the global object. |
v8::Handle<v8::Object> global = context->Global(); |
global->Set(v8String(key), value); |
} |
void ScriptController::collectGarbage() |
{ |
- v8::HandleScope hs; |
+ v8::HandleScope handleScope; |
v8::Handle<v8::Context> context = V8Proxy::GetContext(m_proxy->frame()); |
if (context.IsEmpty()) |
return; |
v8::Context::Scope scope(context); |
- m_proxy->evaluate(ScriptSourceCode("if (window.gc) void(gc());"), NULL); |
+ m_proxy->evaluate(ScriptSourceCode("if (window.gc) void(gc());"), 0); |
} |
-NPRuntimeFunctions* ScriptController::functions() |
-{ |
- return &npruntime_functions; |
-} |
- |
- |
bool ScriptController::haveInterpreter() const |
{ |
return m_proxy->ContextInitialized(); |
@@ -300,7 +256,7 @@ |
PassScriptInstance ScriptController::createScriptInstanceForWidget(Widget* widget) |
{ |
- ASSERT(widget != 0); |
+ ASSERT(widget); |
if (widget->isFrameView()) |
return 0; |
@@ -314,29 +270,28 @@ |
// NPObjects are treated differently than other objects wrapped by JS. |
// NPObjects can be created either by the browser (e.g. the main |
// window object) or by the plugin (the main plugin object |
- // for a HTMLEmbedElement). Further, |
- // unlike most DOM Objects, the frame is especially careful to ensure |
- // NPObjects terminate at frame teardown because if a plugin leaks a |
- // reference, it could leak its objects (or the browser's objects). |
+ // for a HTMLEmbedElement). Further, unlike most DOM Objects, the frame |
+ // is especially careful to ensure NPObjects terminate at frame teardown because |
+ // if a plugin leaks a reference, it could leak its objects (or the browser's objects). |
// |
// The Frame maintains a list of plugin objects (m_pluginObjects) |
// which it can use to quickly find the wrapped embed object. |
// |
// Inside the NPRuntime, we've added a few methods for registering |
- // wrapped NPObjects. The purpose of the registration is because |
+ // wrapped NPObjects. The purpose of the registration is because |
// javascript garbage collection is non-deterministic, yet we need to |
- // be able to tear down the plugin objects immediately. When an object |
- // is registered, javascript can use it. When the object is destroyed, |
+ // be able to tear down the plugin objects immediately. When an object |
+ // is registered, javascript can use it. When the object is destroyed, |
// or when the object's "owning" object is destroyed, the object will |
// be un-registered, and the javascript engine must not use it. |
// |
// Inside the javascript engine, the engine can keep a reference to the |
- // NPObject as part of its wrapper. However, before accessing the object |
+ // NPObject as part of its wrapper. However, before accessing the object |
// it must consult the NPN_Registry. |
- v8::Local<v8::Object> wrapper = CreateV8ObjectForNPObject(npObject, NULL); |
+ v8::Local<v8::Object> wrapper = CreateV8ObjectForNPObject(npObject, 0); |
- // Track the plugin object. We've been given a reference to the object. |
+ // Track the plugin object. We've been given a reference to the object. |
m_pluginObjects.set(widget, npObject); |
return V8ScriptInstance::create(wrapper); |
@@ -381,10 +336,10 @@ |
// JavaScript is enabled, so there is a JavaScript window object. |
// Return an NPObject bound to the window object. |
m_windowScriptNPObject = createScriptObject(m_frame); |
- _NPN_RegisterObject(m_windowScriptNPObject, NULL); |
+ _NPN_RegisterObject(m_windowScriptNPObject, 0); |
} else { |
// JavaScript is not enabled, so we cannot bind the NPObject to the |
- // JavaScript window object. Instead, we create an NPObject of a |
+ // JavaScript window object. Instead, we create an NPObject of a |
// different class, one which is not bound to a JavaScript object. |
m_windowScriptNPObject = createNoScriptObject(); |
} |
@@ -393,7 +348,7 @@ |
NPObject* ScriptController::createScriptObjectForPluginElement(HTMLPlugInElement* plugin) |
{ |
- // Can't create NPObjects when JavaScript is disabled |
+ // Can't create NPObjects when JavaScript is disabled. |
if (!isEnabled()) |
return createNoScriptObject(); |
@@ -430,4 +385,4 @@ |
m_proxy->updateDocument(); |
} |
-} // namespace WebCpre |
+} // namespace WebCore |