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