1643ca7872b450ea4efacab6188849e5aac2ba161Steve Block/* 2643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * Copyright (C) 2007, 2008 Apple Inc. All rights reserved. 3643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * Copyright (C) 2008 Matt Lilek <webkit@mattlilek.com> 4643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * Copyright (C) 2009 Google Inc. All rights reserved. 5643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * 6643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * Redistribution and use in source and binary forms, with or without 7643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * modification, are permitted provided that the following conditions are 8643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * met: 9643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * 10643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * * Redistributions of source code must retain the above copyright 11643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * notice, this list of conditions and the following disclaimer. 12643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * * Redistributions in binary form must reproduce the above 13643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * copyright notice, this list of conditions and the following disclaimer 14643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * in the documentation and/or other materials provided with the 15643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * distribution. 16643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * * Neither the name of Google Inc. nor the names of its 17643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * contributors may be used to endorse or promote products derived from 18643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * this software without specific prior written permission. 19643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * 20643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 21643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 22643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 23643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 24643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 25643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 26643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 27643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 28643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 29643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 30643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 31643ca7872b450ea4efacab6188849e5aac2ba161Steve Block */ 32643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 33643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "config.h" 34643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "JSInspectorFrontendHost.h" 35643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 36643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#if ENABLE(INSPECTOR) 37643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 38643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "ContextMenuItem.h" 39643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "InspectorController.h" 40643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "InspectorFrontendHost.h" 41643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "JSEvent.h" 42643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "MouseEvent.h" 43e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#include "PlatformString.h" 44643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include <runtime/JSArray.h> 45643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include <runtime/JSLock.h> 46643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include <runtime/JSObject.h> 47643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include <wtf/Vector.h> 48643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 49643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockusing namespace JSC; 50643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 51643ca7872b450ea4efacab6188849e5aac2ba161Steve Blocknamespace WebCore { 52643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 535af96e2c7b73ebc627c6894727826a7576d31758Leon ClarkeJSValue JSInspectorFrontendHost::platform(ExecState* execState) 54dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 55dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#if PLATFORM(MAC) 56dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block DEFINE_STATIC_LOCAL(const String, platform, ("mac")); 57dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#elif OS(WINDOWS) 58dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block DEFINE_STATIC_LOCAL(const String, platform, ("windows")); 59dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#elif OS(LINUX) 60dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block DEFINE_STATIC_LOCAL(const String, platform, ("linux")); 61bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen#elif OS(FREEBSD) 62bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen DEFINE_STATIC_LOCAL(const String, platform, ("freebsd")); 63dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#else 64dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block DEFINE_STATIC_LOCAL(const String, platform, ("unknown")); 65dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#endif 66dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return jsString(execState, platform); 67dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 68dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 695af96e2c7b73ebc627c6894727826a7576d31758Leon ClarkeJSValue JSInspectorFrontendHost::port(ExecState* execState) 70dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 71dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#if PLATFORM(QT) 72dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block DEFINE_STATIC_LOCAL(const String, port, ("qt")); 73dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#elif PLATFORM(GTK) 74dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block DEFINE_STATIC_LOCAL(const String, port, ("gtk")); 75dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#elif PLATFORM(WX) 76dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block DEFINE_STATIC_LOCAL(const String, port, ("wx")); 77dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#else 78dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block DEFINE_STATIC_LOCAL(const String, port, ("unknown")); 79dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#endif 80dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return jsString(execState, port); 81dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 82dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 835af96e2c7b73ebc627c6894727826a7576d31758Leon ClarkeJSValue JSInspectorFrontendHost::showContextMenu(ExecState* exec) 84643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 855af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke if (exec->argumentCount() < 2) 86643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return jsUndefined(); 87dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#if ENABLE(CONTEXT_MENUS) 885af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke Event* event = toEvent(exec->argument(0)); 89643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 905af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke JSArray* array = asArray(exec->argument(1)); 91d0825bca7fe65beaee391d30da42e937db621564Steve Block Vector<ContextMenuItem*> items; 92643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 93643ca7872b450ea4efacab6188849e5aac2ba161Steve Block for (size_t i = 0; i < array->length(); ++i) { 94643ca7872b450ea4efacab6188849e5aac2ba161Steve Block JSObject* item = asObject(array->getIndex(i)); 955af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke JSValue label = item->get(exec, Identifier(exec, "label")); 96e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block JSValue type = item->get(exec, Identifier(exec, "type")); 975af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke JSValue id = item->get(exec, Identifier(exec, "id")); 98e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block JSValue enabled = item->get(exec, Identifier(exec, "enabled")); 99e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block JSValue checked = item->get(exec, Identifier(exec, "checked")); 100e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block if (!type.isString()) 101e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block continue; 102e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 103e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block String typeString = ustringToString(type.toString(exec)); 104e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block if (typeString == "separator") { 1050617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen items.append(new ContextMenuItem(SeparatorType, 1060617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen ContextMenuItemCustomTagNoAction, 1070617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen String())); 108e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block } else { 1095af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke ContextMenuAction typedId = static_cast<ContextMenuAction>(ContextMenuItemBaseCustomTag + id.toInt32(exec)); 110e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block ContextMenuItem* menuItem = new ContextMenuItem((typeString == "checkbox" ? CheckableActionType : ActionType), typedId, ustringToString(label.toString(exec))); 111e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block if (!enabled.isUndefined()) 112e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block menuItem->setEnabled(enabled.toBoolean(exec)); 113e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block if (!checked.isUndefined()) 114e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block menuItem->setChecked(checked.toBoolean(exec)); 115e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block items.append(menuItem); 116643ca7872b450ea4efacab6188849e5aac2ba161Steve Block } 117643ca7872b450ea4efacab6188849e5aac2ba161Steve Block } 118643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 119643ca7872b450ea4efacab6188849e5aac2ba161Steve Block impl()->showContextMenu(event, items); 120dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#endif 121643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return jsUndefined(); 122643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 123643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 124643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} // namespace WebCore 125643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 126643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#endif // ENABLE(INSPECTOR) 127