/* * Copyright (C) 2010 Apple Inc. All rights reserved. * * 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. * * THIS SOFTWARE IS PROVIDED BY APPLE INC. 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 INC. 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 "WebInspectorProxy.h" #if ENABLE(INSPECTOR) #include "WebInspectorMessages.h" #include "WebPageProxy.h" #include "WebPageCreationParameters.h" #include "WebProcessProxy.h" #include "WebPageGroup.h" #if PLATFORM(WIN) #include "WebView.h" #endif #include <WebCore/NotImplemented.h> using namespace WebCore; namespace WebKit { WebPageGroup* WebInspectorProxy::inspectorPageGroup() { static WebPageGroup* pageGroup = WebPageGroup::create("__WebInspectorPageGroup__", false, false).leakRef(); return pageGroup; } WebInspectorProxy::WebInspectorProxy(WebPageProxy* page) : m_page(page) , m_isVisible(false) , m_isAttached(false) , m_isDebuggingJavaScript(false) , m_isProfilingJavaScript(false) , m_isProfilingPage(false) #if PLATFORM(WIN) , m_inspectorWindow(0) #endif { } WebInspectorProxy::~WebInspectorProxy() { } void WebInspectorProxy::invalidate() { m_page->close(); platformClose(); m_page = 0; m_isVisible = false; m_isDebuggingJavaScript = false; m_isProfilingJavaScript = false; m_isProfilingPage = false; } // Public APIs void WebInspectorProxy::show() { if (!m_page) return; m_page->process()->send(Messages::WebInspector::Show(), m_page->pageID()); } void WebInspectorProxy::close() { if (!m_page) return; m_page->process()->send(Messages::WebInspector::Close(), m_page->pageID()); } void WebInspectorProxy::showConsole() { if (!m_page) return; m_page->process()->send(Messages::WebInspector::ShowConsole(), m_page->pageID()); } void WebInspectorProxy::attach() { notImplemented(); } void WebInspectorProxy::detach() { notImplemented(); } void WebInspectorProxy::toggleJavaScriptDebugging() { if (!m_page) return; if (m_isDebuggingJavaScript) m_page->process()->send(Messages::WebInspector::StopJavaScriptDebugging(), m_page->pageID()); else m_page->process()->send(Messages::WebInspector::StartJavaScriptDebugging(), m_page->pageID()); // FIXME: have the WebProcess notify us on state changes. m_isDebuggingJavaScript = !m_isDebuggingJavaScript; } void WebInspectorProxy::toggleJavaScriptProfiling() { if (!m_page) return; if (m_isProfilingJavaScript) m_page->process()->send(Messages::WebInspector::StopJavaScriptProfiling(), m_page->pageID()); else m_page->process()->send(Messages::WebInspector::StartJavaScriptProfiling(), m_page->pageID()); // FIXME: have the WebProcess notify us on state changes. m_isProfilingJavaScript = !m_isProfilingJavaScript; } void WebInspectorProxy::togglePageProfiling() { if (!m_page) return; if (m_isProfilingPage) m_page->process()->send(Messages::WebInspector::StopPageProfiling(), m_page->pageID()); else m_page->process()->send(Messages::WebInspector::StartPageProfiling(), m_page->pageID()); // FIXME: have the WebProcess notify us on state changes. m_isProfilingPage = !m_isProfilingPage; } bool WebInspectorProxy::isInspectorPage(WebPageProxy* page) { return page->pageGroup() == inspectorPageGroup(); } // Called by WebInspectorProxy messages void WebInspectorProxy::createInspectorPage(uint64_t& inspectorPageID, WebPageCreationParameters& inspectorPageParameters) { inspectorPageID = 0; if (!m_page) return; WebPageProxy* inspectorPage = platformCreateInspectorPage(); ASSERT(inspectorPage); if (!inspectorPage) return; inspectorPageID = inspectorPage->pageID(); inspectorPageParameters = inspectorPage->creationParameters(); inspectorPage->loadURL(inspectorPageURL()); } void WebInspectorProxy::didLoadInspectorPage() { m_isVisible = true; platformOpen(); } void WebInspectorProxy::didClose() { platformClose(); m_isVisible = false; } void WebInspectorProxy::inspectedURLChanged(const String& urlString) { platformInspectedURLChanged(urlString); } } // namespace WebKit #endif // ENABLE(INSPECTOR)