1643ca7872b450ea4efacab6188849e5aac2ba161Steve Block/* 2643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * Copyright (C) 2007 Apple Inc. All rights reserved. 3643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * Copyright (C) 2009 Google Inc. All rights reserved. 4643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * 5643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * Redistribution and use in source and binary forms, with or without 6643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * modification, are permitted provided that the following conditions 7643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * are met: 8643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * 9643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * 1. Redistributions of source code must retain the above copyright 10643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * notice, this list of conditions and the following disclaimer. 11643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * 2. Redistributions in binary form must reproduce the above copyright 12643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * notice, this list of conditions and the following disclaimer in the 13643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * documentation and/or other materials provided with the distribution. 14643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of 15643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * its contributors may be used to endorse or promote products derived 16643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * from this software without specific prior written permission. 17643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * 18643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY 19643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 20643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 21643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY 22643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 23643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 24643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 25643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 27643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28643ca7872b450ea4efacab6188849e5aac2ba161Steve Block */ 29643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 30643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#ifndef InjectedScriptHost_h 31643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#define InjectedScriptHost_h 32643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 33643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "Console.h" 342fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#include "InspectorAgent.h" 35643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "PlatformString.h" 36d0825bca7fe65beaee391d30da42e937db621564Steve Block#include "ScriptState.h" 37643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 38d0825bca7fe65beaee391d30da42e937db621564Steve Block#include <wtf/HashMap.h> 39643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include <wtf/RefCounted.h> 4081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#include <wtf/Vector.h> 41643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 42643ca7872b450ea4efacab6188849e5aac2ba161Steve Blocknamespace WebCore { 43643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 44643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass Database; 455e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Blockclass InjectedScript; 462bde8e466a4451c7319e3a072d118917957d6554Steve Blockclass InspectorAgent; 472bde8e466a4451c7319e3a072d118917957d6554Steve Blockclass InspectorConsoleAgent; 482bde8e466a4451c7319e3a072d118917957d6554Steve Blockclass InspectorDOMStorageAgent; 492bde8e466a4451c7319e3a072d118917957d6554Steve Blockclass InspectorDatabaseAgent; 502bde8e466a4451c7319e3a072d118917957d6554Steve Blockclass InspectorDebuggerAgent; 51e8b154fd68f9b33be40a3590e58347f353835f5cSteve Blockclass InspectorFrontend; 52ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochclass InspectorObject; 53643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass Node; 54dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdochclass ScriptObject; 5581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochclass ScriptValue; 56643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass Storage; 57643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 58643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass InjectedScriptHost : public RefCounted<InjectedScriptHost> 59643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 60643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockpublic: 612bde8e466a4451c7319e3a072d118917957d6554Steve Block static PassRefPtr<InjectedScriptHost> create(); 622bde8e466a4451c7319e3a072d118917957d6554Steve Block ~InjectedScriptHost(); 632bde8e466a4451c7319e3a072d118917957d6554Steve Block 642bde8e466a4451c7319e3a072d118917957d6554Steve Block void init(InspectorAgent* inspectorAgent 652bde8e466a4451c7319e3a072d118917957d6554Steve Block , InspectorConsoleAgent* consoleAgent 662bde8e466a4451c7319e3a072d118917957d6554Steve Block#if ENABLE(DATABASE) 672bde8e466a4451c7319e3a072d118917957d6554Steve Block , InspectorDatabaseAgent* databaseAgent 682bde8e466a4451c7319e3a072d118917957d6554Steve Block#endif 692bde8e466a4451c7319e3a072d118917957d6554Steve Block#if ENABLE(DOM_STORAGE) 702bde8e466a4451c7319e3a072d118917957d6554Steve Block , InspectorDOMStorageAgent* domStorageAgent 712bde8e466a4451c7319e3a072d118917957d6554Steve Block#endif 722bde8e466a4451c7319e3a072d118917957d6554Steve Block#if ENABLE(JAVASCRIPT_DEBUGGER) 732bde8e466a4451c7319e3a072d118917957d6554Steve Block , InspectorDebuggerAgent* debuggerAgent 742bde8e466a4451c7319e3a072d118917957d6554Steve Block#endif 752bde8e466a4451c7319e3a072d118917957d6554Steve Block ) 76643ca7872b450ea4efacab6188849e5aac2ba161Steve Block { 772bde8e466a4451c7319e3a072d118917957d6554Steve Block m_inspectorAgent = inspectorAgent; 782bde8e466a4451c7319e3a072d118917957d6554Steve Block m_consoleAgent = consoleAgent; 792bde8e466a4451c7319e3a072d118917957d6554Steve Block#if ENABLE(DATABASE) 802bde8e466a4451c7319e3a072d118917957d6554Steve Block m_databaseAgent = databaseAgent; 812bde8e466a4451c7319e3a072d118917957d6554Steve Block#endif 822bde8e466a4451c7319e3a072d118917957d6554Steve Block#if ENABLE(DOM_STORAGE) 832bde8e466a4451c7319e3a072d118917957d6554Steve Block m_domStorageAgent = domStorageAgent; 842bde8e466a4451c7319e3a072d118917957d6554Steve Block#endif 852bde8e466a4451c7319e3a072d118917957d6554Steve Block#if ENABLE(JAVASCRIPT_DEBUGGER) 862bde8e466a4451c7319e3a072d118917957d6554Steve Block m_debuggerAgent = debuggerAgent; 872bde8e466a4451c7319e3a072d118917957d6554Steve Block#endif 88643ca7872b450ea4efacab6188849e5aac2ba161Steve Block } 892bde8e466a4451c7319e3a072d118917957d6554Steve Block void setFrontend(InspectorFrontend* frontend) { m_frontend = frontend; } 902bde8e466a4451c7319e3a072d118917957d6554Steve Block void clearFrontend() { m_frontend = 0; } 91643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 9281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch static Node* scriptValueAsNode(ScriptValue); 9381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch static ScriptValue nodeAsScriptValue(ScriptState*, Node*); 94643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 952bde8e466a4451c7319e3a072d118917957d6554Steve Block void disconnect(); 96d0825bca7fe65beaee391d30da42e937db621564Steve Block 9781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch void addInspectedNode(Node*); 9881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch void clearInspectedNodes(); 9981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 1002bde8e466a4451c7319e3a072d118917957d6554Steve Block void inspectImpl(PassRefPtr<InspectorValue> objectToInspect, PassRefPtr<InspectorValue> hints); 1012bde8e466a4451c7319e3a072d118917957d6554Steve Block void clearConsoleMessages(); 102643ca7872b450ea4efacab6188849e5aac2ba161Steve Block void copyText(const String& text); 1032bde8e466a4451c7319e3a072d118917957d6554Steve Block Node* inspectedNode(unsigned int num); 104643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#if ENABLE(DATABASE) 1052bde8e466a4451c7319e3a072d118917957d6554Steve Block int databaseIdImpl(Database*); 106643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#endif 107643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#if ENABLE(DOM_STORAGE) 1082bde8e466a4451c7319e3a072d118917957d6554Steve Block int storageIdImpl(Storage*); 109643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#endif 110dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#if ENABLE(WORKERS) 111dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block long nextWorkerId(); 112dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block void didCreateWorker(long id, const String& url, bool isSharedWorker); 113dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block void didDestroyWorker(long id); 114dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#endif 1152bde8e466a4451c7319e3a072d118917957d6554Steve Block#if ENABLE(JAVASCRIPT_DEBUGGER) 1162bde8e466a4451c7319e3a072d118917957d6554Steve Block InspectorDebuggerAgent* debuggerAgent() { return m_debuggerAgent; } 1172bde8e466a4451c7319e3a072d118917957d6554Steve Block#endif 118dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 119643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockprivate: 1202bde8e466a4451c7319e3a072d118917957d6554Steve Block InjectedScriptHost(); 121643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 1222fc2651226baac27029e38c9d6ef883fa32084dbSteve Block InspectorAgent* m_inspectorAgent; 1232bde8e466a4451c7319e3a072d118917957d6554Steve Block InspectorConsoleAgent* m_consoleAgent; 1242bde8e466a4451c7319e3a072d118917957d6554Steve Block#if ENABLE(DATABASE) 1252bde8e466a4451c7319e3a072d118917957d6554Steve Block InspectorDatabaseAgent* m_databaseAgent; 1262bde8e466a4451c7319e3a072d118917957d6554Steve Block#endif 1272bde8e466a4451c7319e3a072d118917957d6554Steve Block#if ENABLE(DOM_STORAGE) 1282bde8e466a4451c7319e3a072d118917957d6554Steve Block InspectorDOMStorageAgent* m_domStorageAgent; 1292bde8e466a4451c7319e3a072d118917957d6554Steve Block#endif 1302bde8e466a4451c7319e3a072d118917957d6554Steve Block#if ENABLE(JAVASCRIPT_DEBUGGER) 1312bde8e466a4451c7319e3a072d118917957d6554Steve Block InspectorDebuggerAgent* m_debuggerAgent; 1322bde8e466a4451c7319e3a072d118917957d6554Steve Block#endif 1332bde8e466a4451c7319e3a072d118917957d6554Steve Block InspectorFrontend* m_frontend; 134dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block long m_lastWorkerId; 13581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch Vector<RefPtr<Node> > m_inspectedNodes; 136643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}; 137643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 138643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} // namespace WebCore 139643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 140643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#endif // !defined(InjectedScriptHost_h) 141