1 /* 2 * Copyright (C) 2007, 2008 Apple Inc. All rights reserved. 3 * Copyright (C) 2008 Matt Lilek <webkit (at) mattlilek.com> 4 * Copyright (C) 2010 Google Inc. All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: 9 * 10 * 1. Redistributions of source code must retain the above copyright 11 * notice, this list of conditions and the following disclaimer. 12 * 2. Redistributions in binary form must reproduce the above copyright 13 * notice, this list of conditions and the following disclaimer in the 14 * documentation and/or other materials provided with the distribution. 15 * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of 16 * its contributors may be used to endorse or promote products derived 17 * from this software without specific prior written permission. 18 * 19 * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY 20 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 21 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 22 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY 23 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 24 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 25 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 26 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 28 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 */ 30 31 #include "config.h" 32 #include "InjectedScriptHost.h" 33 34 #if ENABLE(INSPECTOR) 35 36 #include "Element.h" 37 #include "Frame.h" 38 #include "FrameLoader.h" 39 #include "HTMLFrameOwnerElement.h" 40 #include "InjectedScript.h" 41 #include "InspectorAgent.h" 42 #include "InspectorClient.h" 43 #include "InspectorConsoleAgent.h" 44 #include "InspectorDOMStorageAgent.h" 45 #include "InspectorDatabaseAgent.h" 46 #include "InspectorFrontend.h" 47 #include "InspectorValues.h" 48 #include "Pasteboard.h" 49 50 #if ENABLE(JAVASCRIPT_DEBUGGER) 51 #include "ScriptDebugServer.h" 52 #endif 53 54 #if ENABLE(DATABASE) 55 #include "Database.h" 56 #endif 57 58 #if ENABLE(DOM_STORAGE) 59 #include "Storage.h" 60 #endif 61 62 #include "markup.h" 63 64 #include <wtf/RefPtr.h> 65 #include <wtf/StdLibExtras.h> 66 67 using namespace std; 68 69 namespace WebCore { 70 71 PassRefPtr<InjectedScriptHost> InjectedScriptHost::create() 72 { 73 return adoptRef(new InjectedScriptHost()); 74 } 75 76 InjectedScriptHost::InjectedScriptHost() 77 : m_inspectorAgent(0) 78 , m_consoleAgent(0) 79 #if ENABLE(DATABASE) 80 , m_databaseAgent(0) 81 #endif 82 #if ENABLE(DOM_STORAGE) 83 , m_domStorageAgent(0) 84 #endif 85 , m_frontend(0) 86 , m_lastWorkerId(1 << 31) // Distinguish ids of fake workers from real ones, to minimize the chances they overlap. 87 { 88 } 89 90 InjectedScriptHost::~InjectedScriptHost() 91 { 92 } 93 94 void InjectedScriptHost::disconnect() 95 { 96 m_inspectorAgent = 0; 97 m_consoleAgent = 0; 98 #if ENABLE(DATABASE) 99 m_databaseAgent = 0; 100 #endif 101 #if ENABLE(DOM_STORAGE) 102 m_domStorageAgent = 0; 103 #endif 104 m_frontend = 0; 105 } 106 107 void InjectedScriptHost::addInspectedNode(Node* node) 108 { 109 m_inspectedNodes.prepend(node); 110 while (m_inspectedNodes.size() > 5) 111 m_inspectedNodes.removeLast(); 112 } 113 114 void InjectedScriptHost::clearInspectedNodes() 115 { 116 m_inspectedNodes.clear(); 117 } 118 119 void InjectedScriptHost::inspectImpl(PassRefPtr<InspectorValue> object, PassRefPtr<InspectorValue> hints) 120 { 121 if (m_frontend) 122 m_frontend->inspector()->inspect(object->asObject(), hints->asObject()); 123 } 124 125 void InjectedScriptHost::clearConsoleMessages() 126 { 127 if (m_consoleAgent) { 128 ErrorString error; 129 m_consoleAgent->clearConsoleMessages(&error); 130 } 131 } 132 133 void InjectedScriptHost::copyText(const String& text) 134 { 135 Pasteboard::generalPasteboard()->writePlainText(text); 136 } 137 138 Node* InjectedScriptHost::inspectedNode(unsigned int num) 139 { 140 if (num < m_inspectedNodes.size()) 141 return m_inspectedNodes[num].get(); 142 return 0; 143 } 144 145 #if ENABLE(DATABASE) 146 int InjectedScriptHost::databaseIdImpl(Database* database) 147 { 148 if (m_databaseAgent) 149 return m_databaseAgent->databaseId(database); 150 return 0; 151 } 152 #endif 153 154 #if ENABLE(DOM_STORAGE) 155 int InjectedScriptHost::storageIdImpl(Storage* storage) 156 { 157 if (m_domStorageAgent) 158 return m_domStorageAgent->storageId(storage); 159 return 0; 160 } 161 #endif 162 163 #if ENABLE(WORKERS) 164 long InjectedScriptHost::nextWorkerId() 165 { 166 return ++m_lastWorkerId; 167 } 168 169 void InjectedScriptHost::didCreateWorker(long id, const String& url, bool isSharedWorker) 170 { 171 if (m_inspectorAgent) 172 m_inspectorAgent->didCreateWorker(static_cast<int>(id), url, isSharedWorker); 173 } 174 175 void InjectedScriptHost::didDestroyWorker(long id) 176 { 177 if (m_inspectorAgent) 178 m_inspectorAgent->didDestroyWorker(static_cast<int>(id)); 179 } 180 #endif // ENABLE(WORKERS) 181 182 } // namespace WebCore 183 184 #endif // ENABLE(INSPECTOR) 185