summaryrefslogtreecommitdiffstats
path: root/WebCore/bindings/v8
diff options
context:
space:
mode:
Diffstat (limited to 'WebCore/bindings/v8')
-rw-r--r--WebCore/bindings/v8/ScriptCallStackFactory.cpp10
-rw-r--r--WebCore/bindings/v8/ScriptCallStackFactory.h13
-rw-r--r--WebCore/bindings/v8/ScriptControllerQt.cpp2
-rw-r--r--WebCore/bindings/v8/ScriptHeapSnapshot.cpp62
-rw-r--r--WebCore/bindings/v8/ScriptHeapSnapshot.h10
-rw-r--r--WebCore/bindings/v8/V8ConsoleMessage.cpp6
-rw-r--r--WebCore/bindings/v8/V8ConsoleMessage.h2
-rw-r--r--WebCore/bindings/v8/V8GCController.cpp2
-rw-r--r--WebCore/bindings/v8/V8NPUtils.cpp4
-rw-r--r--WebCore/bindings/v8/custom/V8ConsoleCustom.cpp20
-rw-r--r--WebCore/bindings/v8/custom/V8XMLHttpRequestCustom.cpp7
11 files changed, 74 insertions, 64 deletions
diff --git a/WebCore/bindings/v8/ScriptCallStackFactory.cpp b/WebCore/bindings/v8/ScriptCallStackFactory.cpp
index 5d4e146..62fbeef 100644
--- a/WebCore/bindings/v8/ScriptCallStackFactory.cpp
+++ b/WebCore/bindings/v8/ScriptCallStackFactory.cpp
@@ -78,17 +78,17 @@ static void toScriptCallFramesVector(v8::Local<v8::Context> context, v8::Handle<
}
}
-PassRefPtr<ScriptCallStack> createScriptCallStack(v8::Local<v8::Context> context, v8::Handle<v8::StackTrace> stackTrace, size_t maxStackSize)
+PassOwnPtr<ScriptCallStack> createScriptCallStack(v8::Local<v8::Context> context, v8::Handle<v8::StackTrace> stackTrace, size_t maxStackSize)
{
v8::HandleScope scope;
v8::Context::Scope contextScope(context);
Vector<ScriptCallFrame> scriptCallFrames;
toScriptCallFramesVector(context, stackTrace, scriptCallFrames, maxStackSize);
- return ScriptCallStack::create(scriptCallFrames);
+ return new ScriptCallStack(scriptCallFrames);
}
-PassRefPtr<ScriptCallStack> createScriptCallStack(size_t maxStackSize)
+PassOwnPtr<ScriptCallStack> createScriptCallStack(size_t maxStackSize)
{
v8::HandleScope scope;
v8::Local<v8::Context> context = v8::Context::GetCurrent();
@@ -98,7 +98,7 @@ PassRefPtr<ScriptCallStack> createScriptCallStack(size_t maxStackSize)
return createScriptCallStack(context, stackTrace, maxStackSize);
}
-PassRefPtr<ScriptArguments> createScriptArguments(const v8::Arguments& v8arguments, unsigned skipArgumentCount)
+PassOwnPtr<ScriptArguments> createScriptArguments(const v8::Arguments& v8arguments, unsigned skipArgumentCount)
{
v8::HandleScope scope;
v8::Local<v8::Context> context = v8::Context::GetCurrent();
@@ -108,7 +108,7 @@ PassRefPtr<ScriptArguments> createScriptArguments(const v8::Arguments& v8argumen
for (int i = skipArgumentCount; i < v8arguments.Length(); ++i)
arguments.append(ScriptValue(v8arguments[i]));
- return ScriptArguments::create(state, arguments);
+ return new ScriptArguments(state, arguments);
}
bool ScriptCallStack::stackTrace(int frameLimit, const RefPtr<InspectorArray>& stackTrace)
diff --git a/WebCore/bindings/v8/ScriptCallStackFactory.h b/WebCore/bindings/v8/ScriptCallStackFactory.h
index 66e44f5..613af7b 100644
--- a/WebCore/bindings/v8/ScriptCallStackFactory.h
+++ b/WebCore/bindings/v8/ScriptCallStackFactory.h
@@ -32,12 +32,10 @@
#define ScriptCallStackFactory_h
#include <v8.h>
-#include <wtf/Forward.h>
+#include <wtf/PassOwnPtr.h>
namespace WebCore {
-class ScriptArguments;
-class ScriptCallStack;
class ScriptState;
const v8::StackTrace::StackTraceOptions stackTraceOptions = static_cast<v8::StackTrace::StackTraceOptions>(
@@ -46,9 +44,12 @@ const v8::StackTrace::StackTraceOptions stackTraceOptions = static_cast<v8::Stac
| v8::StackTrace::kScriptNameOrSourceURL
| v8::StackTrace::kFunctionName);
-PassRefPtr<ScriptCallStack> createScriptCallStack(v8::Local<v8::Context>, v8::Handle<v8::StackTrace>, size_t maxStackSize);
-PassRefPtr<ScriptCallStack> createScriptCallStack(size_t maxStackSize);
-PassRefPtr<ScriptArguments> createScriptArguments(const v8::Arguments& v8arguments, unsigned skipArgumentCount);
+class ScriptArguments;
+class ScriptCallStack;
+
+PassOwnPtr<ScriptCallStack> createScriptCallStack(v8::Local<v8::Context>, v8::Handle<v8::StackTrace>, size_t maxStackSize);
+PassOwnPtr<ScriptCallStack> createScriptCallStack(size_t maxStackSize);
+PassOwnPtr<ScriptArguments> createScriptArguments(const v8::Arguments& v8arguments, unsigned skipArgumentCount);
} // namespace WebCore
diff --git a/WebCore/bindings/v8/ScriptControllerQt.cpp b/WebCore/bindings/v8/ScriptControllerQt.cpp
index 11bcb01..246921e 100644
--- a/WebCore/bindings/v8/ScriptControllerQt.cpp
+++ b/WebCore/bindings/v8/ScriptControllerQt.cpp
@@ -40,7 +40,7 @@ QScriptEngine* ScriptController::qtScriptEngine()
v8::Context::Scope scope(v8Context);
if (v8Context.IsEmpty())
return 0;
- m_qtScriptEngine = new QScriptEngine;
+ m_qtScriptEngine = new QScriptEngine(QScriptEngine::AdoptCurrentContext);
}
return m_qtScriptEngine.get();
}
diff --git a/WebCore/bindings/v8/ScriptHeapSnapshot.cpp b/WebCore/bindings/v8/ScriptHeapSnapshot.cpp
index c35d508..885d039 100644
--- a/WebCore/bindings/v8/ScriptHeapSnapshot.cpp
+++ b/WebCore/bindings/v8/ScriptHeapSnapshot.cpp
@@ -33,7 +33,6 @@
#include "InspectorValues.h"
#include "V8Binding.h"
-#include <v8.h>
#include <v8-profiler.h>
#include <wtf/PassRefPtr.h>
#include <wtf/RefPtr.h>
@@ -51,29 +50,50 @@ unsigned int ScriptHeapSnapshot::uid() const
return m_snapshot->GetUid();
}
-namespace {
-
-class OutputStreamAdapter : public v8::OutputStream {
-public:
- OutputStreamAdapter(ScriptHeapSnapshot::OutputStream* output)
- : m_output(output) { }
- void EndOfStream() { m_output->Close(); }
- int GetChunkSize() { return 10240; }
- WriteResult WriteAsciiChunk(char* data, int size)
- {
- m_output->Write(String(data, size));
- return kContinue;
+static PassRefPtr<InspectorObject> buildInspectorObjectFor(const v8::HeapGraphNode* root)
+{
+ v8::HandleScope scope;
+ RefPtr<InspectorObject> result = InspectorObject::create();
+ RefPtr<InspectorObject> lowLevels = InspectorObject::create();
+ RefPtr<InspectorObject> entries = InspectorObject::create();
+ RefPtr<InspectorObject> children = InspectorObject::create();
+ for (int i = 0, count = root->GetChildrenCount(); i < count; ++i) {
+ const v8::HeapGraphNode* node = root->GetChild(i)->GetToNode();
+ if (node->GetType() == v8::HeapGraphNode::kInternal) {
+ RefPtr<InspectorObject> lowLevel = InspectorObject::create();
+ lowLevel->setNumber("count", node->GetInstancesCount());
+ lowLevel->setNumber("size", node->GetSelfSize());
+ lowLevel->setString("type", toWebCoreString(node->GetName()));
+ lowLevels->setObject(toWebCoreString(node->GetName()), lowLevel);
+ } else if (node->GetInstancesCount()) {
+ RefPtr<InspectorObject> entry = InspectorObject::create();
+ entry->setString("constructorName", toWebCoreString(node->GetName()));
+ entry->setNumber("count", node->GetInstancesCount());
+ entry->setNumber("size", node->GetSelfSize());
+ entries->setObject(toWebCoreString(node->GetName()), entry);
+ } else {
+ RefPtr<InspectorObject> entry = InspectorObject::create();
+ entry->setString("constructorName", toWebCoreString(node->GetName()));
+ for (int j = 0, count = node->GetChildrenCount(); j < count; ++j) {
+ const v8::HeapGraphEdge* v8Edge = node->GetChild(j);
+ const v8::HeapGraphNode* v8Child = v8Edge->GetToNode();
+ RefPtr<InspectorObject> child = InspectorObject::create();
+ child->setString("constructorName", toWebCoreString(v8Child->GetName()));
+ child->setNumber("count", v8Edge->GetName()->ToInteger()->Value());
+ entry->setObject(String::number(reinterpret_cast<unsigned long long>(v8Child)), child);
+ }
+ children->setObject(String::number(reinterpret_cast<unsigned long long>(node)), entry);
+ }
}
-private:
- ScriptHeapSnapshot::OutputStream* m_output;
-};
-
-} // namespace
+ result->setObject("lowlevels", lowLevels);
+ result->setObject("entries", entries);
+ result->setObject("children", children);
+ return result.release();
+}
-void ScriptHeapSnapshot::writeJSON(ScriptHeapSnapshot::OutputStream* stream)
+PassRefPtr<InspectorObject> ScriptHeapSnapshot::buildInspectorObjectForHead() const
{
- OutputStreamAdapter outputStream(stream);
- m_snapshot->Serialize(&outputStream, v8::HeapSnapshot::kJSON);
+ return buildInspectorObjectFor(m_snapshot->GetRoot());
}
} // namespace WebCore
diff --git a/WebCore/bindings/v8/ScriptHeapSnapshot.h b/WebCore/bindings/v8/ScriptHeapSnapshot.h
index d3ae022..794a5a9 100644
--- a/WebCore/bindings/v8/ScriptHeapSnapshot.h
+++ b/WebCore/bindings/v8/ScriptHeapSnapshot.h
@@ -43,13 +43,6 @@ class InspectorObject;
class ScriptHeapSnapshot : public RefCounted<ScriptHeapSnapshot> {
public:
- class OutputStream {
- public:
- virtual ~OutputStream() { }
- virtual void Write(const String& chunk) = 0;
- virtual void Close() = 0;
- };
-
static PassRefPtr<ScriptHeapSnapshot> create(const v8::HeapSnapshot* snapshot)
{
return adoptRef(new ScriptHeapSnapshot(snapshot));
@@ -58,7 +51,8 @@ public:
String title() const;
unsigned int uid() const;
- void writeJSON(OutputStream* stream);
+
+ PassRefPtr<InspectorObject> buildInspectorObjectForHead() const;
private:
ScriptHeapSnapshot(const v8::HeapSnapshot* snapshot)
diff --git a/WebCore/bindings/v8/V8ConsoleMessage.cpp b/WebCore/bindings/v8/V8ConsoleMessage.cpp
index 9e6e267..40f9a7a 100644
--- a/WebCore/bindings/v8/V8ConsoleMessage.cpp
+++ b/WebCore/bindings/v8/V8ConsoleMessage.cpp
@@ -114,7 +114,7 @@ void V8ConsoleMessage::handler(v8::Handle<v8::Message> message, v8::Handle<v8::V
String errorMessage = toWebCoreString(errorMessageString);
v8::Handle<v8::StackTrace> stackTrace = message->GetStackTrace();
- RefPtr<ScriptCallStack> callStack;
+ OwnPtr<ScriptCallStack> callStack;
// Currently stack trace is only collected when inspector is open.
if (!stackTrace.IsEmpty() && stackTrace->GetFrameCount() > 0) {
v8::Local<v8::Context> context = v8::Context::GetEntered();
@@ -125,10 +125,10 @@ void V8ConsoleMessage::handler(v8::Handle<v8::Message> message, v8::Handle<v8::V
bool useURL = resourceName.IsEmpty() || !resourceName->IsString();
String resourceNameString = useURL ? frame->document()->url() : toWebCoreString(resourceName);
V8ConsoleMessage consoleMessage(errorMessage, resourceNameString, message->GetLineNumber());
- consoleMessage.dispatchNow(page, callStack);
+ consoleMessage.dispatchNow(page, callStack.release());
}
-void V8ConsoleMessage::dispatchNow(Page* page, PassRefPtr<ScriptCallStack> callStack)
+void V8ConsoleMessage::dispatchNow(Page* page, PassOwnPtr<ScriptCallStack> callStack)
{
ASSERT(page);
diff --git a/WebCore/bindings/v8/V8ConsoleMessage.h b/WebCore/bindings/v8/V8ConsoleMessage.h
index 97de24f..6b892dd 100644
--- a/WebCore/bindings/v8/V8ConsoleMessage.h
+++ b/WebCore/bindings/v8/V8ConsoleMessage.h
@@ -82,7 +82,7 @@ namespace WebCore {
const String m_sourceID;
const unsigned m_lineNumber;
- void dispatchNow(Page*, PassRefPtr<ScriptCallStack>);
+ void dispatchNow(Page*, PassOwnPtr<ScriptCallStack>);
// All delayed messages are stored in this vector. If the vector
// is 0, there are no delayed messages.
diff --git a/WebCore/bindings/v8/V8GCController.cpp b/WebCore/bindings/v8/V8GCController.cpp
index 3eeacec..b26882b 100644
--- a/WebCore/bindings/v8/V8GCController.cpp
+++ b/WebCore/bindings/v8/V8GCController.cpp
@@ -444,7 +444,7 @@ void V8GCController::gcEpilogue()
void V8GCController::checkMemoryUsage()
{
-#if PLATFORM(CHROMIUM) || PLATFORM(QT) && !OS(SYMBIAN)
+#if PLATFORM(CHROMIUM)
// These values are appropriate for Chromium only.
const int lowUsageMB = 256; // If memory usage is below this threshold, do not bother forcing GC.
const int highUsageMB = 1024; // If memory usage is above this threshold, force GC more aggresively.
diff --git a/WebCore/bindings/v8/V8NPUtils.cpp b/WebCore/bindings/v8/V8NPUtils.cpp
index 65c30a0..8fa19d7 100644
--- a/WebCore/bindings/v8/V8NPUtils.cpp
+++ b/WebCore/bindings/v8/V8NPUtils.cpp
@@ -53,7 +53,9 @@ void convertV8ObjectToNPVariant(v8::Local<v8::Value> object, NPObject* owner, NP
if (object.IsEmpty())
return;
- if (object->IsNumber())
+ if (object->IsInt32())
+ INT32_TO_NPVARIANT(object->NumberValue(), *result);
+ else if (object->IsNumber())
DOUBLE_TO_NPVARIANT(object->NumberValue(), *result);
else if (object->IsBoolean())
BOOLEAN_TO_NPVARIANT(object->BooleanValue(), *result);
diff --git a/WebCore/bindings/v8/custom/V8ConsoleCustom.cpp b/WebCore/bindings/v8/custom/V8ConsoleCustom.cpp
index e21354e..9142ad7 100644
--- a/WebCore/bindings/v8/custom/V8ConsoleCustom.cpp
+++ b/WebCore/bindings/v8/custom/V8ConsoleCustom.cpp
@@ -65,9 +65,9 @@ v8::Handle<v8::Value> V8Console::traceCallback(const v8::Arguments& args)
{
INC_STATS("DOM.Console.traceCallback");
Console* imp = V8Console::toNative(args.Holder());
- RefPtr<ScriptCallStack> callStack(createScriptCallStack(ScriptCallStack::maxCallStackSizeToCapture));
- RefPtr<ScriptArguments> scriptArguments(createScriptArguments(args, 0));
- imp->trace(scriptArguments.release(), callStack);
+ OwnPtr<ScriptCallStack> callStack(createScriptCallStack(ScriptCallStack::maxCallStackSizeToCapture));
+ OwnPtr<ScriptArguments> scriptArguments(createScriptArguments(args, 0));
+ imp->trace(scriptArguments.release(), callStack.release());
return v8::Handle<v8::Value>();
}
@@ -75,10 +75,10 @@ v8::Handle<v8::Value> V8Console::assertCallback(const v8::Arguments& args)
{
INC_STATS("DOM.Console.assertCallback");
Console* imp = V8Console::toNative(args.Holder());
- RefPtr<ScriptCallStack> callStack(createScriptCallStack(ScriptCallStack::maxCallStackSizeToCapture));
+ OwnPtr<ScriptCallStack> callStack(createScriptCallStack(ScriptCallStack::maxCallStackSizeToCapture));
bool condition = args[0]->BooleanValue();
- RefPtr<ScriptArguments> scriptArguments(createScriptArguments(args, 1));
- imp->assertCondition(condition, scriptArguments.release(), callStack);
+ OwnPtr<ScriptArguments> scriptArguments(createScriptArguments(args, 1));
+ imp->assertCondition(condition, scriptArguments.release(), callStack.release());
return v8::Handle<v8::Value>();
}
@@ -87,11 +87,11 @@ v8::Handle<v8::Value> V8Console::profileCallback(const v8::Arguments& args)
{
INC_STATS("DOM.Console.profile");
Console* imp = V8Console::toNative(args.Holder());
- RefPtr<ScriptCallStack> callStack(createScriptCallStack(1));
+ OwnPtr<ScriptCallStack> callStack(createScriptCallStack(1));
if (!callStack)
return v8::Undefined();
STRING_TO_V8PARAMETER_EXCEPTION_BLOCK(V8Parameter<WithUndefinedOrNullCheck>, title, args[0]);
- imp->profile(title, ScriptState::current(), callStack);
+ imp->profile(title, ScriptState::current(), callStack.release());
return v8::Handle<v8::Value>();
}
@@ -99,11 +99,11 @@ v8::Handle<v8::Value> V8Console::profileEndCallback(const v8::Arguments& args)
{
INC_STATS("DOM.Console.profileEnd");
Console* imp = V8Console::toNative(args.Holder());
- RefPtr<ScriptCallStack> callStack(createScriptCallStack(1));
+ OwnPtr<ScriptCallStack> callStack(createScriptCallStack(1));
if (!callStack)
return v8::Undefined();
STRING_TO_V8PARAMETER_EXCEPTION_BLOCK(V8Parameter<WithUndefinedOrNullCheck>, title, args[0]);
- imp->profileEnd(title, ScriptState::current(), callStack);
+ imp->profileEnd(title, ScriptState::current(), callStack.release());
return v8::Handle<v8::Value>();
}
#endif
diff --git a/WebCore/bindings/v8/custom/V8XMLHttpRequestCustom.cpp b/WebCore/bindings/v8/custom/V8XMLHttpRequestCustom.cpp
index 6a571ae..5c56cfb 100644
--- a/WebCore/bindings/v8/custom/V8XMLHttpRequestCustom.cpp
+++ b/WebCore/bindings/v8/custom/V8XMLHttpRequestCustom.cpp
@@ -193,13 +193,6 @@ v8::Handle<v8::Value> V8XMLHttpRequest::sendCallback(const v8::Arguments& args)
DOMFormData* domFormData = V8DOMFormData::toNative(object);
ASSERT(domFormData);
xmlHttpRequest->send(domFormData, ec);
-#if ENABLE(3D_CANVAS) || ENABLE(BLOB)
- } else if (V8ArrayBuffer::HasInstance(arg)) {
- v8::Handle<v8::Object> object = v8::Handle<v8::Object>::Cast(arg);
- ArrayBuffer* arrayBuffer = V8ArrayBuffer::toNative(object);
- ASSERT(arrayBuffer);
- xmlHttpRequest->send(arrayBuffer, ec);
-#endif
} else
xmlHttpRequest->send(toWebCoreStringWithNullCheck(arg), ec);
}