Home | History | Annotate | Download | only in UIProcess
      1 /*
      2  * Copyright (C) 2010 Apple Inc. All rights reserved.
      3  *
      4  * Redistribution and use in source and binary forms, with or without
      5  * modification, are permitted provided that the following conditions
      6  * are met:
      7  * 1. Redistributions of source code must retain the above copyright
      8  *    notice, this list of conditions and the following disclaimer.
      9  * 2. Redistributions in binary form must reproduce the above copyright
     10  *    notice, this list of conditions and the following disclaimer in the
     11  *    documentation and/or other materials provided with the distribution.
     12  *
     13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
     14  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
     15  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     16  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
     17  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     18  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     19  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     20  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
     21  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     22  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
     23  * THE POSSIBILITY OF SUCH DAMAGE.
     24  */
     25 
     26 #include "config.h"
     27 #include "WebInspectorProxy.h"
     28 
     29 #if ENABLE(INSPECTOR)
     30 
     31 #include "WebInspectorMessages.h"
     32 #include "WebPageProxy.h"
     33 #include "WebPageCreationParameters.h"
     34 #include "WebProcessProxy.h"
     35 #include "WebPageGroup.h"
     36 
     37 #if PLATFORM(WIN)
     38 #include "WebView.h"
     39 #endif
     40 
     41 #include <WebCore/NotImplemented.h>
     42 
     43 using namespace WebCore;
     44 
     45 namespace WebKit {
     46 
     47 WebPageGroup* WebInspectorProxy::inspectorPageGroup()
     48 {
     49     static WebPageGroup* pageGroup = WebPageGroup::create("__WebInspectorPageGroup__", false, false).leakRef();
     50     return pageGroup;
     51 }
     52 
     53 WebInspectorProxy::WebInspectorProxy(WebPageProxy* page)
     54     : m_page(page)
     55     , m_isVisible(false)
     56     , m_isAttached(false)
     57     , m_isDebuggingJavaScript(false)
     58     , m_isProfilingJavaScript(false)
     59     , m_isProfilingPage(false)
     60 #if PLATFORM(WIN)
     61     , m_inspectorWindow(0)
     62 #endif
     63 {
     64 }
     65 
     66 WebInspectorProxy::~WebInspectorProxy()
     67 {
     68 }
     69 
     70 void WebInspectorProxy::invalidate()
     71 {
     72     m_page->close();
     73     platformClose();
     74 
     75     m_page = 0;
     76 
     77     m_isVisible = false;
     78     m_isDebuggingJavaScript = false;
     79     m_isProfilingJavaScript = false;
     80     m_isProfilingPage = false;
     81 }
     82 
     83 // Public APIs
     84 void WebInspectorProxy::show()
     85 {
     86     if (!m_page)
     87         return;
     88 
     89     m_page->process()->send(Messages::WebInspector::Show(), m_page->pageID());
     90 }
     91 
     92 void WebInspectorProxy::close()
     93 {
     94     if (!m_page)
     95         return;
     96 
     97     m_page->process()->send(Messages::WebInspector::Close(), m_page->pageID());
     98 }
     99 
    100 void WebInspectorProxy::showConsole()
    101 {
    102     if (!m_page)
    103         return;
    104 
    105     m_page->process()->send(Messages::WebInspector::ShowConsole(), m_page->pageID());
    106 }
    107 
    108 void WebInspectorProxy::attach()
    109 {
    110     notImplemented();
    111 }
    112 
    113 void WebInspectorProxy::detach()
    114 {
    115     notImplemented();
    116 }
    117 
    118 void WebInspectorProxy::toggleJavaScriptDebugging()
    119 {
    120     if (!m_page)
    121         return;
    122 
    123     if (m_isDebuggingJavaScript)
    124         m_page->process()->send(Messages::WebInspector::StopJavaScriptDebugging(), m_page->pageID());
    125     else
    126         m_page->process()->send(Messages::WebInspector::StartJavaScriptDebugging(), m_page->pageID());
    127 
    128     // FIXME: have the WebProcess notify us on state changes.
    129     m_isDebuggingJavaScript = !m_isDebuggingJavaScript;
    130 }
    131 
    132 void WebInspectorProxy::toggleJavaScriptProfiling()
    133 {
    134     if (!m_page)
    135         return;
    136 
    137     if (m_isProfilingJavaScript)
    138         m_page->process()->send(Messages::WebInspector::StopJavaScriptProfiling(), m_page->pageID());
    139     else
    140         m_page->process()->send(Messages::WebInspector::StartJavaScriptProfiling(), m_page->pageID());
    141 
    142     // FIXME: have the WebProcess notify us on state changes.
    143     m_isProfilingJavaScript = !m_isProfilingJavaScript;
    144 }
    145 
    146 void WebInspectorProxy::togglePageProfiling()
    147 {
    148     if (!m_page)
    149         return;
    150 
    151     if (m_isProfilingPage)
    152         m_page->process()->send(Messages::WebInspector::StopPageProfiling(), m_page->pageID());
    153     else
    154         m_page->process()->send(Messages::WebInspector::StartPageProfiling(), m_page->pageID());
    155 
    156     // FIXME: have the WebProcess notify us on state changes.
    157     m_isProfilingPage = !m_isProfilingPage;
    158 }
    159 
    160 bool WebInspectorProxy::isInspectorPage(WebPageProxy* page)
    161 {
    162     return page->pageGroup() == inspectorPageGroup();
    163 }
    164 
    165 // Called by WebInspectorProxy messages
    166 void WebInspectorProxy::createInspectorPage(uint64_t& inspectorPageID, WebPageCreationParameters& inspectorPageParameters)
    167 {
    168     inspectorPageID = 0;
    169 
    170     if (!m_page)
    171         return;
    172 
    173     WebPageProxy* inspectorPage = platformCreateInspectorPage();
    174     ASSERT(inspectorPage);
    175     if (!inspectorPage)
    176         return;
    177 
    178     inspectorPageID = inspectorPage->pageID();
    179     inspectorPageParameters = inspectorPage->creationParameters();
    180 
    181     inspectorPage->loadURL(inspectorPageURL());
    182 }
    183 
    184 void WebInspectorProxy::didLoadInspectorPage()
    185 {
    186     m_isVisible = true;
    187 
    188     platformOpen();
    189 }
    190 
    191 void WebInspectorProxy::didClose()
    192 {
    193     platformClose();
    194 
    195     m_isVisible = false;
    196 }
    197 
    198 void WebInspectorProxy::inspectedURLChanged(const String& urlString)
    199 {
    200     platformInspectedURLChanged(urlString);
    201 }
    202 
    203 } // namespace WebKit
    204 
    205 #endif // ENABLE(INSPECTOR)
    206