diff options
Diffstat (limited to 'WebCore/bindings/v8/custom/V8InspectorFrontendHostCustom.cpp')
-rw-r--r-- | WebCore/bindings/v8/custom/V8InspectorFrontendHostCustom.cpp | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/WebCore/bindings/v8/custom/V8InspectorFrontendHostCustom.cpp b/WebCore/bindings/v8/custom/V8InspectorFrontendHostCustom.cpp index b823034..7f4ccf7 100644 --- a/WebCore/bindings/v8/custom/V8InspectorFrontendHostCustom.cpp +++ b/WebCore/bindings/v8/custom/V8InspectorFrontendHostCustom.cpp @@ -35,12 +35,65 @@ #include "InspectorFrontendHost.h" #include "V8Binding.h" +#include "V8MouseEvent.h" #include "V8Proxy.h" namespace WebCore { +v8::Handle<v8::Value> V8InspectorFrontendHost::platformCallback(const v8::Arguments&) +{ +#if defined(OS_MACOSX) + return v8String("mac"); +#elif defined(OS_LINUX) + return v8String("linux"); +#elif defined(OS_WIN) + return v8String("windows"); +#else + return v8String("unknown"); +#endif +} + +v8::Handle<v8::Value> V8InspectorFrontendHost::portCallback(const v8::Arguments&) +{ + return v8::Undefined(); +} + v8::Handle<v8::Value> V8InspectorFrontendHost::showContextMenuCallback(const v8::Arguments& args) { + if (args.Length() < 2) + return v8::Undefined(); + + v8::Local<v8::Object> eventWrapper = v8::Local<v8::Object>::Cast(args[0]); + if (!V8MouseEvent::info.equals(V8DOMWrapper::domWrapperType(eventWrapper))) + return v8::Undefined(); + + Event* event = V8Event::toNative(eventWrapper); + if (!args[1]->IsArray()) + return v8::Undefined(); + + v8::Local<v8::Array> array = v8::Local<v8::Array>::Cast(args[1]); + Vector<ContextMenuItem*> items; + + for (size_t i = 0; i < array->Length(); ++i) { + v8::Local<v8::Object> item = v8::Local<v8::Object>::Cast(array->Get(v8::Integer::New(i))); + v8::Local<v8::Value> label = item->Get(v8::String::New("label")); + v8::Local<v8::Value> id = item->Get(v8::String::New("id")); + if (label->IsUndefined() || id->IsUndefined()) { + items.append(new ContextMenuItem(SeparatorType, + ContextMenuItemTagNoAction, + String())); + } else { + ContextMenuAction typedId = static_cast<ContextMenuAction>( + ContextMenuItemBaseCustomTag + id->ToInt32()->Value()); + items.append(new ContextMenuItem(ActionType, + typedId, + toWebCoreStringWithNullCheck(label))); + } + } + + InspectorFrontendHost* frontendHost = V8InspectorFrontendHost::toNative(args.Holder()); + frontendHost->showContextMenu(event, items); + return v8::Undefined(); } |