1 /* 2 * Copyright (C) 2007, 2008 Apple Inc. All rights reserved. 3 * Copyright (C) 2008 Matt Lilek <webkit (at) mattlilek.com> 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 9 * 1. Redistributions of source code must retain the above copyright 10 * notice, this list of conditions and the following disclaimer. 11 * 2. Redistributions in binary form must reproduce the above copyright 12 * notice, this list of conditions and the following disclaimer in the 13 * documentation and/or other materials provided with the distribution. 14 * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of 15 * its contributors may be used to endorse or promote products derived 16 * from this software without specific prior written permission. 17 * 18 * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY 19 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 20 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 21 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY 22 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 23 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 24 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 25 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 27 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 */ 29 30 #include "config.h" 31 #include "InspectorFrontendHost.h" 32 33 #if ENABLE(INSPECTOR) 34 35 #include "ContextMenu.h" 36 #include "ContextMenuItem.h" 37 #include "ContextMenuController.h" 38 #include "ContextMenuProvider.h" 39 #include "Element.h" 40 #include "Frame.h" 41 #include "FrameLoader.h" 42 #include "HitTestResult.h" 43 #include "HTMLFrameOwnerElement.h" 44 #include "InspectorClient.h" 45 #include "InspectorFrontend.h" 46 #include "InspectorResource.h" 47 #include "Page.h" 48 #include "Pasteboard.h" 49 50 #include <wtf/RefPtr.h> 51 #include <wtf/StdLibExtras.h> 52 53 using namespace std; 54 55 namespace WebCore { 56 57 InspectorFrontendHost::InspectorFrontendHost(InspectorController* inspectorController, InspectorClient* client) 58 : m_inspectorController(inspectorController) 59 , m_client(client) 60 { 61 } 62 63 InspectorFrontendHost::~InspectorFrontendHost() 64 { 65 if (m_menuProvider) 66 m_menuProvider->disconnect(); 67 } 68 69 void InspectorFrontendHost::loaded() 70 { 71 if (m_inspectorController) 72 m_inspectorController->scriptObjectReady(); 73 } 74 75 void InspectorFrontendHost::attach() 76 { 77 if (m_inspectorController) 78 m_inspectorController->attachWindow(); 79 } 80 81 void InspectorFrontendHost::detach() 82 { 83 if (m_inspectorController) 84 m_inspectorController->detachWindow(); 85 } 86 87 void InspectorFrontendHost::closeWindow() 88 { 89 if (m_inspectorController) 90 m_inspectorController->closeWindow(); 91 } 92 93 void InspectorFrontendHost::windowUnloading() 94 { 95 if (m_inspectorController) 96 m_inspectorController->close(); 97 } 98 99 void InspectorFrontendHost::setAttachedWindowHeight(unsigned height) 100 { 101 if (m_inspectorController) 102 m_inspectorController->setAttachedWindowHeight(height); 103 } 104 105 void InspectorFrontendHost::moveWindowBy(float x, float y) const 106 { 107 if (m_inspectorController) 108 m_inspectorController->moveWindowBy(x, y); 109 } 110 111 String InspectorFrontendHost::localizedStringsURL() 112 { 113 return m_client->localizedStringsURL(); 114 } 115 116 String InspectorFrontendHost::hiddenPanels() 117 { 118 return m_client->hiddenPanels(); 119 } 120 121 const String& InspectorFrontendHost::platform() const 122 { 123 #if PLATFORM(MAC) 124 DEFINE_STATIC_LOCAL(const String, platform, ("mac")); 125 #elif OS(WINDOWS) 126 DEFINE_STATIC_LOCAL(const String, platform, ("windows")); 127 #elif OS(LINUX) 128 DEFINE_STATIC_LOCAL(const String, platform, ("linux")); 129 #else 130 DEFINE_STATIC_LOCAL(const String, platform, ("unknown")); 131 #endif 132 return platform; 133 } 134 135 const String& InspectorFrontendHost::port() const 136 { 137 #if PLATFORM(QT) 138 DEFINE_STATIC_LOCAL(const String, port, ("qt")); 139 #elif PLATFORM(GTK) 140 DEFINE_STATIC_LOCAL(const String, port, ("gtk")); 141 #elif PLATFORM(WX) 142 DEFINE_STATIC_LOCAL(const String, port, ("wx")); 143 #else 144 DEFINE_STATIC_LOCAL(const String, port, ("unknown")); 145 #endif 146 147 return port; 148 } 149 150 void InspectorFrontendHost::copyText(const String& text) 151 { 152 Pasteboard::generalPasteboard()->writePlainText(text); 153 } 154 155 void InspectorFrontendHost::showContextMenu(Event* event, const Vector<ContextMenuItem*>& items) 156 { 157 if (!m_inspectorController) 158 return; 159 if (!m_inspectorController->windowVisible()) 160 return; 161 162 163 m_menuProvider = MenuProvider::create(this, items); 164 ContextMenuController* menuController = m_inspectorController->m_page->contextMenuController(); 165 menuController->showContextMenu(event, m_menuProvider); 166 } 167 168 void InspectorFrontendHost::contextMenuItemSelected(ContextMenuItem* item) 169 { 170 if (m_inspectorController && m_inspectorController->windowVisible()) { 171 int itemNumber = item->action() - ContextMenuItemBaseCustomTag; 172 m_inspectorController->m_frontend->contextMenuItemSelected(itemNumber); 173 } 174 } 175 176 void InspectorFrontendHost::contextMenuCleared() 177 { 178 m_menuProvider = 0; 179 if (m_inspectorController && m_inspectorController->windowVisible()) 180 m_inspectorController->m_frontend->contextMenuCleared(); 181 } 182 183 } // namespace WebCore 184 185 #endif // ENABLE(INSPECTOR) 186