summaryrefslogtreecommitdiffstats
path: root/src/3rdparty/webkit/WebCore/inspector/InspectorBackend.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/3rdparty/webkit/WebCore/inspector/InspectorBackend.cpp')
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/InspectorBackend.cpp363
1 files changed, 363 insertions, 0 deletions
diff --git a/src/3rdparty/webkit/WebCore/inspector/InspectorBackend.cpp b/src/3rdparty/webkit/WebCore/inspector/InspectorBackend.cpp
new file mode 100644
index 000000000..d50efd3e8
--- /dev/null
+++ b/src/3rdparty/webkit/WebCore/inspector/InspectorBackend.cpp
@@ -0,0 +1,363 @@
+/*
+ * Copyright (C) 2007, 2008 Apple Inc. All rights reserved.
+ * Copyright (C) 2008 Matt Lilek <webkit@mattlilek.com>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. 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.
+ * 3. Neither the name of Apple Computer, Inc. ("Apple") 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 APPLE AND ITS 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 APPLE OR ITS 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 "InspectorBackend.h"
+
+#include "Element.h"
+#include "Frame.h"
+#include "FrameLoader.h"
+#include "HTMLFrameOwnerElement.h"
+#include "InspectorClient.h"
+#include "InspectorController.h"
+#include "InspectorResource.h"
+
+#if ENABLE(JAVASCRIPT_DEBUGGER)
+#include "JavaScriptCallFrame.h"
+#include "JavaScriptDebugServer.h"
+using namespace JSC;
+#endif
+
+#include <wtf/RefPtr.h>
+#include <wtf/StdLibExtras.h>
+
+using namespace std;
+
+namespace WebCore {
+
+InspectorBackend::InspectorBackend(InspectorController* inspectorController, InspectorClient* client)
+ : m_inspectorController(inspectorController)
+ , m_client(client)
+{
+}
+
+InspectorBackend::~InspectorBackend()
+{
+}
+
+void InspectorBackend::hideDOMNodeHighlight()
+{
+ if (m_inspectorController)
+ m_inspectorController->hideHighlight();
+}
+
+String InspectorBackend::localizedStringsURL()
+{
+ return m_client->localizedStringsURL();
+}
+
+String InspectorBackend::hiddenPanels()
+{
+ return m_client->hiddenPanels();
+}
+
+void InspectorBackend::windowUnloading()
+{
+ if (m_inspectorController)
+ m_inspectorController->close();
+}
+
+bool InspectorBackend::isWindowVisible()
+{
+ if (m_inspectorController)
+ return m_inspectorController->windowVisible();
+ return false;
+}
+
+void InspectorBackend::addResourceSourceToFrame(long identifier, Node* frame)
+{
+ if (!m_inspectorController)
+ return;
+ RefPtr<InspectorResource> resource = m_inspectorController->resources().get(identifier);
+ if (resource) {
+ String sourceString = resource->sourceString();
+ if (!sourceString.isEmpty())
+ addSourceToFrame(resource->mimeType(), sourceString, frame);
+ }
+}
+
+bool InspectorBackend::addSourceToFrame(const String& mimeType, const String& source, Node* frameNode)
+{
+ ASSERT_ARG(frameNode, frameNode);
+
+ if (!frameNode)
+ return false;
+
+ if (!frameNode->attached()) {
+ ASSERT_NOT_REACHED();
+ return false;
+ }
+
+ ASSERT(frameNode->isElementNode());
+ if (!frameNode->isElementNode())
+ return false;
+
+ Element* element = static_cast<Element*>(frameNode);
+ ASSERT(element->isFrameOwnerElement());
+ if (!element->isFrameOwnerElement())
+ return false;
+
+ HTMLFrameOwnerElement* frameOwner = static_cast<HTMLFrameOwnerElement*>(element);
+ ASSERT(frameOwner->contentFrame());
+ if (!frameOwner->contentFrame())
+ return false;
+
+ FrameLoader* loader = frameOwner->contentFrame()->loader();
+
+ loader->setResponseMIMEType(mimeType);
+ loader->begin();
+ loader->write(source);
+ loader->end();
+
+ return true;
+}
+
+void InspectorBackend::clearMessages()
+{
+ if (m_inspectorController)
+ m_inspectorController->clearConsoleMessages();
+}
+
+void InspectorBackend::toggleNodeSearch()
+{
+ if (m_inspectorController)
+ m_inspectorController->toggleSearchForNodeInPage();
+}
+
+void InspectorBackend::attach()
+{
+ if (m_inspectorController)
+ m_inspectorController->attachWindow();
+}
+
+void InspectorBackend::detach()
+{
+ if (m_inspectorController)
+ m_inspectorController->detachWindow();
+}
+
+void InspectorBackend::setAttachedWindowHeight(unsigned height)
+{
+ if (m_inspectorController)
+ m_inspectorController->setAttachedWindowHeight(height);
+}
+
+void InspectorBackend::storeLastActivePanel(const String& panelName)
+{
+ if (m_inspectorController)
+ m_inspectorController->storeLastActivePanel(panelName);
+}
+
+bool InspectorBackend::searchingForNode()
+{
+ if (m_inspectorController)
+ return m_inspectorController->searchingForNodeInPage();
+ return false;
+}
+
+void InspectorBackend::loaded()
+{
+ if (m_inspectorController)
+ m_inspectorController->scriptObjectReady();
+}
+
+void InspectorBackend::enableResourceTracking(bool always)
+{
+ if (m_inspectorController)
+ m_inspectorController->enableResourceTracking(always);
+}
+
+void InspectorBackend::disableResourceTracking(bool always)
+{
+ if (m_inspectorController)
+ m_inspectorController->disableResourceTracking(always);
+}
+
+bool InspectorBackend::resourceTrackingEnabled() const
+{
+ if (m_inspectorController)
+ return m_inspectorController->resourceTrackingEnabled();
+ return false;
+}
+
+void InspectorBackend::moveWindowBy(float x, float y) const
+{
+ if (m_inspectorController)
+ m_inspectorController->moveWindowBy(x, y);
+}
+
+void InspectorBackend::closeWindow()
+{
+ if (m_inspectorController)
+ m_inspectorController->closeWindow();
+}
+
+const String& InspectorBackend::platform() const
+{
+#if PLATFORM(MAC)
+#ifdef BUILDING_ON_TIGER
+ DEFINE_STATIC_LOCAL(const String, platform, ("mac-tiger"));
+#else
+ DEFINE_STATIC_LOCAL(const String, platform, ("mac-leopard"));
+#endif
+#elif PLATFORM(WIN_OS)
+ DEFINE_STATIC_LOCAL(const String, platform, ("windows"));
+#elif PLATFORM(QT)
+ DEFINE_STATIC_LOCAL(const String, platform, ("qt"));
+#elif PLATFORM(GTK)
+ DEFINE_STATIC_LOCAL(const String, platform, ("gtk"));
+#elif PLATFORM(WX)
+ DEFINE_STATIC_LOCAL(const String, platform, ("wx"));
+#else
+ DEFINE_STATIC_LOCAL(const String, platform, ("unknown"));
+#endif
+
+ return platform;
+}
+
+#if ENABLE(JAVASCRIPT_DEBUGGER)
+const ProfilesArray& InspectorBackend::profiles() const
+{
+ if (m_inspectorController)
+ return m_inspectorController->profiles();
+ return m_emptyProfiles;
+}
+
+void InspectorBackend::startProfiling()
+{
+ if (m_inspectorController)
+ m_inspectorController->startUserInitiatedProfiling();
+}
+
+void InspectorBackend::stopProfiling()
+{
+ if (m_inspectorController)
+ m_inspectorController->stopUserInitiatedProfiling();
+}
+
+void InspectorBackend::enableProfiler(bool always)
+{
+ if (m_inspectorController)
+ m_inspectorController->enableProfiler(always);
+}
+
+void InspectorBackend::disableProfiler(bool always)
+{
+ if (m_inspectorController)
+ m_inspectorController->disableProfiler(always);
+}
+
+bool InspectorBackend::profilerEnabled()
+{
+ if (m_inspectorController)
+ return m_inspectorController->profilerEnabled();
+ return false;
+}
+
+void InspectorBackend::enableDebugger(bool always)
+{
+ if (m_inspectorController)
+ m_inspectorController->enableDebuggerFromFrontend(always);
+}
+
+void InspectorBackend::disableDebugger(bool always)
+{
+ if (m_inspectorController)
+ m_inspectorController->disableDebugger(always);
+}
+
+bool InspectorBackend::debuggerEnabled() const
+{
+ if (m_inspectorController)
+ return m_inspectorController->debuggerEnabled();
+ return false;
+}
+
+JavaScriptCallFrame* InspectorBackend::currentCallFrame() const
+{
+ return JavaScriptDebugServer::shared().currentCallFrame();
+}
+
+void InspectorBackend::addBreakpoint(const String& sourceID, unsigned lineNumber)
+{
+ intptr_t sourceIDValue = sourceID.toIntPtr();
+ JavaScriptDebugServer::shared().addBreakpoint(sourceIDValue, lineNumber);
+}
+
+void InspectorBackend::removeBreakpoint(const String& sourceID, unsigned lineNumber)
+{
+ intptr_t sourceIDValue = sourceID.toIntPtr();
+ JavaScriptDebugServer::shared().removeBreakpoint(sourceIDValue, lineNumber);
+}
+
+bool InspectorBackend::pauseOnExceptions()
+{
+ return JavaScriptDebugServer::shared().pauseOnExceptions();
+}
+
+void InspectorBackend::setPauseOnExceptions(bool pause)
+{
+ JavaScriptDebugServer::shared().setPauseOnExceptions(pause);
+}
+
+void InspectorBackend::pauseInDebugger()
+{
+ JavaScriptDebugServer::shared().pauseProgram();
+}
+
+void InspectorBackend::resumeDebugger()
+{
+ if (m_inspectorController)
+ m_inspectorController->resumeDebugger();
+}
+
+void InspectorBackend::stepOverStatementInDebugger()
+{
+ JavaScriptDebugServer::shared().stepOverStatement();
+}
+
+void InspectorBackend::stepIntoStatementInDebugger()
+{
+ JavaScriptDebugServer::shared().stepIntoStatement();
+}
+
+void InspectorBackend::stepOutOfFunctionInDebugger()
+{
+ JavaScriptDebugServer::shared().stepOutOfFunction();
+}
+
+#endif
+
+void InspectorBackend::highlight(Node* node)
+{
+ if (m_inspectorController)
+ m_inspectorController->highlight(node);
+}
+
+} // namespace WebCore