diff options
Diffstat (limited to 'WebCore/bindings/v8')
-rw-r--r-- | WebCore/bindings/v8/ScriptCallStackFactory.cpp | 10 | ||||
-rw-r--r-- | WebCore/bindings/v8/ScriptCallStackFactory.h | 13 | ||||
-rw-r--r-- | WebCore/bindings/v8/ScriptControllerQt.cpp | 2 | ||||
-rw-r--r-- | WebCore/bindings/v8/ScriptHeapSnapshot.cpp | 62 | ||||
-rw-r--r-- | WebCore/bindings/v8/ScriptHeapSnapshot.h | 10 | ||||
-rw-r--r-- | WebCore/bindings/v8/V8ConsoleMessage.cpp | 6 | ||||
-rw-r--r-- | WebCore/bindings/v8/V8ConsoleMessage.h | 2 | ||||
-rw-r--r-- | WebCore/bindings/v8/V8GCController.cpp | 2 | ||||
-rw-r--r-- | WebCore/bindings/v8/V8NPUtils.cpp | 4 | ||||
-rw-r--r-- | WebCore/bindings/v8/custom/V8ConsoleCustom.cpp | 20 | ||||
-rw-r--r-- | WebCore/bindings/v8/custom/V8XMLHttpRequestCustom.cpp | 7 |
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); } |